1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // File : SALOME_PYQT_Selector.cxx
26 #include "SALOME_PYQT_Selector.h"
28 #include "LightApp_DataOwner.h"
29 #include "LightApp_DataObject.h"
30 #include "LightApp_Application.h"
31 #include "SALOME_PYQT_ModuleLight.h"
32 #include "SALOME_PYQT_BorrowedDataObjectLight.h"
33 #include <SUIT_Session.h>
34 #include <SUIT_DataObjectIterator.h>
38 #include <utilities.h>
41 \class SALOME_PYQT_Selector
42 \brief Object browser selection handler class.
47 \param pymod Python module interface instance in charge of calling Python module methods from C++
48 \param mgr selection manager
50 SALOME_PYQT_Selector::SALOME_PYQT_Selector(SALOME_PYQT_ModuleLight* pymod, SUIT_SelectionMgr* mgr) :
51 SUIT_Selector(mgr, pymod), myPyModule(pymod)
53 MESSAGE("constructor");
54 myLocalEntries.clear();
55 mySelectedList.clear();
60 connect(myPyModule, SIGNAL(localSelectionChanged()), this, SLOT(onSelectionChanged()));
68 SALOME_PYQT_Selector::~SALOME_PYQT_Selector()
70 MESSAGE("destructor");
74 \brief Reset selection internally. Used on close study.
76 void SALOME_PYQT_Selector::clear()
79 myLocalEntries.clear();
80 mySelectedList.clear();
85 \brief Get Python module interface instance.
86 \return a pointer to the Python module interface instance.
88 SALOME_PYQT_ModuleLight* SALOME_PYQT_Selector::pyModule() const
95 \brief Get selector type.
98 QString SALOME_PYQT_Selector::type() const
101 return "PYQT_Module";
105 \brief Get the time of the last selection changing.
106 \return latest selection changing time
108 unsigned long SALOME_PYQT_Selector::getModifiedTime() const
110 MESSAGE("getModifiedTime");
111 return myModifiedTime;
115 \brief Update the time of the latest selection changing.
117 void SALOME_PYQT_Selector::setModified()
119 MESSAGE("setModified");
120 myModifiedTime = clock();
124 \brief Called when the Object browser selection is changed.
126 void SALOME_PYQT_Selector::onSelectionChanged()
128 MESSAGE("onSelectionChanged");
129 QTime t1 = QTime::currentTime();
130 mySelectedList.clear();
132 QTime t2 = QTime::currentTime();
133 qDebug( QString( "selection time = %1 msecs" ).arg( t1.msecsTo( t2 ) ).toLatin1().constData());
137 \brief Get list of currently selected objects.
138 \param theList list to be filled with the selected objects owners
140 void SALOME_PYQT_Selector::getSelection(SUIT_DataOwnerPtrList& theList) const
142 MESSAGE("getSelection");
143 if (mySelectedList.count() == 0)
145 MESSAGE("mySelectedList.count(): " << mySelectedList.count() << " myLocalEntries.size(): "<< myLocalEntries.size());
146 SALOME_PYQT_Selector* that = (SALOME_PYQT_Selector*) this; // because of const...
147 for (int i = 0; i < myLocalEntries.size(); i++)
149 SALOME_PYQT_BorrowedDataObjectLight *obj = new SALOME_PYQT_BorrowedDataObjectLight(myLocalEntries[i]);
150 #ifndef DISABLE_SALOMEOBJECT
151 Handle(SALOME_InteractiveObject)aSObj = new SALOME_InteractiveObject
152 ( obj->entry().toUtf8().constData(),
153 obj->componentDataType().toLatin1().constData(),
154 obj->name().toUtf8().constData() );
155 LightApp_DataOwner* owner = new LightApp_DataOwner(aSObj);
157 LightApp_DataOwner* owner = new LightApp_DataOwner( obj->entry() );
159 that->mySelectedList.append(SUIT_DataOwnerPtr(owner));
162 theList = mySelectedList;
166 \brief Set selection.
167 \param theList list of the object owners to be set selected
169 void SALOME_PYQT_Selector::setSelection(const SUIT_DataOwnerPtrList& theList)
171 MESSAGE("setSelection");
176 for (SUIT_DataOwnerPtrList::const_iterator it = theList.begin(); it != theList.end(); ++it)
178 const LightApp_DataOwner* owner = dynamic_cast<const LightApp_DataOwner*>((*it).operator->());
181 QString entry = owner->entry();
182 myEntries.append(entry);
183 MESSAGE("Selected: "<< entry.toStdString());
186 fillEntries(myEntries);
187 mySelectedList.clear();
191 \brief Fill map of the data objects currently shown in the Object Browser.
192 \param entries map to be filled
194 void SALOME_PYQT_Selector::fillEntries(QStringList& entries)
196 MESSAGE("fillEntries");
199 myPyModule->setSelected(entries);