Salome HOME
Save foreach state - work in progress.
[modules/yacs.git] / src / genericgui / QtGuiContext.cxx
1 // Copyright (C) 2006-2016  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "QtGuiContext.hxx"
21 #include <QClipboard>
22 #include "ItemMimeData.hxx"
23
24 //#define _DEVDEBUG_
25 #include "YacsTrace.hxx"
26 #include "chrono.hxx"
27
28 using namespace std;
29 using namespace YACS::ENGINE;
30 using namespace YACS::HMI;
31
32 QtGuiContext * QtGuiContext::_QtCurrent = 0;
33 counters *QtGuiContext::_counters = 0;
34 bool QtGuiContext::_delayCalc = false;
35 std::set<QtGuiContext*> QtGuiContext::_setOfContext;
36
37 QtGuiContext::QtGuiContext(GenericGui *gmain) : GuiContext()
38 {
39   _gmain = gmain;
40   _schemaModel = 0;
41   _editTree = 0;
42   _selectionModel = 0;
43   _scene = 0;
44   _view = 0;
45   _rootEdit = 0;
46   _window = 0;
47   _stackedWidget = 0;
48   _guiExecutor = 0;
49   _selectedSubject = 0;
50   _isEdition = true;
51   _isLoadingPresentation = false;
52   _studyId = 0;
53   _fileName = QString();
54   _mapOfSchemaItem.clear();
55   _mapOfSceneItem.clear();
56   _mapOfEditionItem.clear();
57   _setOfModifiedSubjects.clear();
58   _setOfContext.insert(this);
59 }
60
61 QtGuiContext::~QtGuiContext()
62 {
63   DEBTRACE("QtGuiContext::~QtGuiContext");
64   if (_invoc) delete _invoc;
65   _invoc = 0;
66   if (_subjectProc)
67     {
68       _proc->setEdition(false);
69       _subjectProc->clean();
70       delete _subjectProc;
71       _subjectProc = 0;
72     }
73   _current = 0;
74   _QtCurrent = 0;
75   _setOfContext.erase(this);
76   // Avoid any possible copy from the destroyed schema.
77   QClipboard *clipboard = QApplication::clipboard();
78   clipboard->setMimeData(NULL);
79 }
80
81 void QtGuiContext::setProc(YACS::ENGINE::Proc* proc)
82 {
83   _mapOfSchemaItem.clear();
84   _mapOfSceneItem.clear();
85   GuiContext::setProc(proc);
86 }
87
88 YACS::HMI::Subject* QtGuiContext::getSubjectToPaste(bool &isCut)
89 {
90   QClipboard *clipboard = QApplication::clipboard();
91   const QMimeData * data=clipboard->mimeData();
92   const ItemMimeData* myData = dynamic_cast<const ItemMimeData*>(data);
93   Subject * sub=0;
94
95   if(myData)
96     {
97       sub=myData->getSubject();
98       isCut=myData->getControl();
99     }
100
101   return sub;
102 }
103
104 void QtGuiContext::setSubjectToCut(YACS::HMI::Subject* sub)
105 {
106   ItemMimeData *mime = new ItemMimeData;
107   mime->setSubject(sub);
108   mime->setControl(true);
109   QClipboard *clipboard = QApplication::clipboard();
110   clipboard->setMimeData(mime);
111 }
112
113 void QtGuiContext::setSubjectToCopy(YACS::HMI::Subject* sub)
114 {
115   ItemMimeData *mime = new ItemMimeData;
116   mime->setSubject(sub);
117   mime->setControl(false);
118   QClipboard *clipboard = QApplication::clipboard();
119   clipboard->setMimeData(mime);
120 }