]> SALOME platform Git repositories - modules/yacs.git/blob - src/salomewrap/SalomeWrap_DataModel.cxx
Salome HOME
264e6fa81ac67a9943ec8d229541c0ef329ccb10
[modules/yacs.git] / src / salomewrap / SalomeWrap_DataModel.cxx
1 //  Copyright (C) 2006-2008  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.
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 #include "SalomeWrap_DataModel.hxx"
20 #include "guiContext.hxx"
21
22 #include <SalomeApp_DataObject.h>
23 #include <SalomeApp_Study.h>
24 #include <SalomeApp_Module.h>
25 #include <SalomeApp_Application.h>
26 #include <SUIT_DataBrowser.h>
27 #include <SUIT_ViewManager.h>
28 #include <QxScene_ViewWindow.h>
29
30 #include <QFileInfo>
31
32 //#define _DEVDEBUG_
33 #include "YacsTrace.hxx"
34
35 using namespace std;
36 using namespace YACS::HMI;
37
38 SalomeWrap_DataModel::SalomeWrap_DataModel(CAM_Module* theModule)
39   : SalomeApp_DataModel(theModule)
40 {
41   DEBTRACE("SalomeWrap_DataModel::SalomeWrap_DataModel");
42   _viewEntryMap.clear();
43   _entryViewMap.clear();
44 }
45
46 SalomeWrap_DataModel::~SalomeWrap_DataModel()
47 {
48   DEBTRACE("SalomeWrap_DataModel::~SalomeWrap_DataModel");
49 }
50
51 void SalomeWrap_DataModel::createNewSchema(const QString& schemaName,
52                                            QWidget* viewWindow)
53 {
54   DEBTRACE("SalomeWrap_DataModel::createNewSchema : " << schemaName.toStdString());
55   SalomeApp_ModuleObject* aRoot = dynamic_cast<SalomeApp_ModuleObject*>(root());
56   if (!aRoot)
57     {
58       DEBTRACE("SalomeApp_ModuleObject* aRoot =0");
59       return;
60     }
61   DEBTRACE("aRoot OK");
62   _PTR(SComponent)         aSComp(aRoot->object());
63   _PTR(Study)              aStudy = getStudy()->studyDS();
64   _PTR(StudyBuilder)       aBuilder(aStudy->NewBuilder());
65   _PTR(GenericAttribute)   anAttr;
66   _PTR(AttributeName)      aName;
67   _PTR(AttributePixMap)    aPixmap;
68   _PTR(AttributeParameter) aType;
69
70   // --- create a new schema SObject
71
72   _PTR(SObject) aSObj;
73   aSObj = aBuilder->NewObject(aSComp);
74
75   anAttr =  aBuilder->FindOrCreateAttribute(aSObj, "AttributeName");
76   aName = _PTR(AttributeName)(anAttr);
77   aName->SetValue(QFileInfo(schemaName).baseName().toStdString());
78
79   anAttr = aBuilder->FindOrCreateAttribute(aSObj, "AttributePixMap");
80   aPixmap = _PTR(AttributePixMap)(anAttr);
81   aPixmap->SetPixMap("schema.png");
82
83   anAttr = aBuilder->FindOrCreateAttribute(aSObj, "AttributeParameter");
84   aType = _PTR(AttributeParameter)(anAttr);
85   aType->SetInt("ObjectType", SchemaObject);
86   string filePath = schemaName.toStdString();
87   aType->SetString("FilePath", filePath.c_str());
88   DEBTRACE("DataModel : FilePath = " << filePath);
89
90   _viewEntryMap[viewWindow] = aSObj->GetID();
91   DEBTRACE(viewWindow);
92   _entryViewMap[aSObj->GetID()] = viewWindow;
93   DEBTRACE("--- " << viewWindow << " "<< aSObj->GetID());
94   SalomeApp_Module *mod = dynamic_cast<SalomeApp_Module*>(module());
95   if (mod) mod->updateObjBrowser();
96
97   QxScene_ViewWindow *swv = dynamic_cast<QxScene_ViewWindow*>(viewWindow);
98   if (!swv) return;
99   swv->getViewManager()->setTitle(schemaName);
100 }
101
102 bool SalomeWrap_DataModel::renameSchema(const QString& oldName,
103                                         const QString& newName,
104                                         QWidget* viewWindow)
105 {
106   DEBTRACE("SalomeWrap_DataModel::renameSchema " << oldName.toStdString()
107            << " " << newName.toStdString());
108   SalomeApp_ModuleObject* aRoot = dynamic_cast<SalomeApp_ModuleObject*>(root());
109   if (!aRoot) return false;
110   if (!_viewEntryMap.count(viewWindow)) return false;
111
112   _PTR(SComponent)         aSComp(aRoot->object());
113   _PTR(Study)              aStudy = getStudy()->studyDS();
114
115   string id = _viewEntryMap[viewWindow];
116   _PTR(SObject) aSObj = aStudy->FindObjectID(id);
117
118   _PTR(StudyBuilder)       aBuilder(aStudy->NewBuilder());
119   _PTR(GenericAttribute)   anAttr;
120   _PTR(AttributeName)      aName;
121   _PTR(AttributeParameter) aType;
122
123   anAttr =  aBuilder->FindOrCreateAttribute(aSObj, "AttributeName");
124   aName = _PTR(AttributeName)(anAttr);
125   aName->SetValue(QFileInfo(newName).baseName().toStdString());
126
127   anAttr = aBuilder->FindOrCreateAttribute(aSObj, "AttributeParameter");
128   aType = _PTR(AttributeParameter)(anAttr);
129   aType->SetInt("ObjectType", SchemaObject);
130   string filePath = newName.toStdString();
131   aType->SetString("FilePath", filePath.c_str());
132   DEBTRACE("DataModel : FilePath = " << filePath);
133
134   SalomeApp_Module *mod = dynamic_cast<SalomeApp_Module*>(module());
135   if (mod) mod->updateObjBrowser();
136
137   QxScene_ViewWindow *swv = dynamic_cast<QxScene_ViewWindow*>(viewWindow);
138   if (swv) swv->getViewManager()->setTitle(newName);
139   return true;
140 }
141
142 void SalomeWrap_DataModel::createNewRun(const QString& schemaName,
143                                         const QString& runName,
144                                         QWidget* refWindow,
145                                         QWidget* viewWindow)
146 {
147   DEBTRACE("SalomeWrap_DataModel::createNewRun");
148   SalomeApp_ModuleObject* aRoot = dynamic_cast<SalomeApp_ModuleObject*>(root());
149   if (!aRoot) return;
150   DEBTRACE(refWindow);
151   if (!_viewEntryMap.count(refWindow)) return;
152   DEBTRACE("---");
153   
154   _PTR(SComponent)         aSComp(aRoot->object());
155   _PTR(Study)              aStudy = getStudy()->studyDS();
156
157   _PTR(StudyBuilder)       aBuilder(aStudy->NewBuilder());
158   _PTR(GenericAttribute)   anAttr;
159   _PTR(AttributeName)      aName;
160   _PTR(AttributePixMap)    aPixmap;
161   _PTR(AttributeParameter) aType;
162
163   string id = _viewEntryMap[refWindow];
164   _PTR(SObject) aRefObj = aStudy->FindObjectID(id);
165
166   // --- create a new schema SObject
167
168   _PTR(SObject) aSObj;
169   aSObj = aBuilder->NewObject(aRefObj);
170
171   anAttr =  aBuilder->FindOrCreateAttribute(aSObj, "AttributeName");
172   aName = _PTR(AttributeName)(anAttr);
173   aName->SetValue(QFileInfo(runName).baseName().toStdString());
174
175   anAttr = aBuilder->FindOrCreateAttribute(aSObj, "AttributePixMap");
176   aPixmap = _PTR(AttributePixMap)(anAttr);
177   aPixmap->SetPixMap("schema.png");
178
179   anAttr = aBuilder->FindOrCreateAttribute(aSObj, "AttributeParameter");
180   aType = _PTR(AttributeParameter)(anAttr);
181   aType->SetInt("ObjectType", SchemaObject);
182   string filePath = runName.toStdString();
183   aType->SetString("FilePath", filePath.c_str());
184   DEBTRACE("DataModel : FilePath = " << filePath);
185
186   _viewEntryMap[viewWindow] = aSObj->GetID();
187   _entryViewMap[aSObj->GetID()] = viewWindow;
188   DEBTRACE("--- " << viewWindow << " "<< aSObj->GetID());
189   SalomeApp_Module *mod = dynamic_cast<SalomeApp_Module*>(module());
190   if (mod) mod->updateObjBrowser();
191
192   QxScene_ViewWindow *swv = dynamic_cast<QxScene_ViewWindow*>(viewWindow);
193   if (!swv) return;
194   swv->getViewManager()->setTitle(runName);
195 }
196
197 void SalomeWrap_DataModel::setSelected(QWidget* viewWindow)
198 {
199   DEBTRACE("SalomeWrap_DataModel::setSelected");
200   if (!_viewEntryMap.count(viewWindow)) return;
201   string entry = _viewEntryMap[viewWindow];
202   SUIT_DataObject* item = getDataObject(entry);
203   if(item) getModule()->getApp()->objectBrowser()->setSelected(item);
204 }
205
206 SUIT_DataObject* SalomeWrap_DataModel::getDataObject(std::string entry)
207 {
208   DEBTRACE("SalomeWrap_DataModel::getDataObject " << entry);
209   QString refEntry = entry.c_str();
210   SUIT_DataObject* sdo = 0;
211   SalomeApp_ModuleObject* aRoot = dynamic_cast<SalomeApp_ModuleObject*>(root());
212   if (!aRoot) return 0;
213
214   QList<SUIT_DataObject*> objList = root()->children(true);
215   for (int i = 0; i < objList.size(); ++i)
216     {
217       SalomeApp_DataObject* obj = dynamic_cast<SalomeApp_DataObject*>(objList.at(i));
218       if (obj && (!QString::compare(refEntry, obj->entry())))
219         {
220           sdo = obj;
221           break;
222         }
223     }
224   return sdo;
225 }
226
227 QWidget* SalomeWrap_DataModel::getViewWindow(std::string entry)
228 {
229   if (! _entryViewMap.count(entry)) return 0;
230   return _entryViewMap[entry];
231 }