]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Models for object browser created
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 4 Apr 2014 07:07:49 +0000 (11:07 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 4 Apr 2014 07:07:49 +0000 (11:07 +0400)
23 files changed:
src/Model/CMakeLists.txt
src/ModelAPI/CMakeLists.txt
src/PyConsole/PyConsole_Console.h
src/PyConsole/PyConsole_Editor.h
src/PyConsole/PyConsole_EnhEditor.h
src/PyConsole/PyConsole_EnhInterp.h
src/PyConsole/PyConsole_Interp.h
src/PyEvent/PyEvent_Event.h
src/PyEvent/PyEvent_EventFilter.h
src/PyInterp/PyInterp_Dispatcher.h
src/PyInterp/PyInterp_Event.h
src/PyInterp/PyInterp_Interp.h
src/PyInterp/PyInterp_Request.h
src/PyInterp/PyInterp_Watcher.h
src/XGUI/CMakeLists.txt
src/XGUI/XGUI_DataModel.cpp [new file with mode: 0644]
src/XGUI/XGUI_DataModel.h [new file with mode: 0644]
src/XGUI/XGUI_DocumentDataModel.cpp [new file with mode: 0644]
src/XGUI/XGUI_DocumentDataModel.h [new file with mode: 0644]
src/XGUI/XGUI_MainWindow.cpp
src/XGUI/XGUI_MainWindow.h
src/XGUI/XGUI_ObjectsBrowser.cpp [new file with mode: 0644]
src/XGUI/XGUI_ObjectsBrowser.h [new file with mode: 0644]

index c6dfa0f7e75521f908c48396019004f9c71aab3c..eca79ac1adc5a33e9eed2bdb82dc6c2f7d29af1f 100644 (file)
@@ -34,3 +34,5 @@ INCLUDE_DIRECTORIES(
   ../Config
   ${CAS_INCLUDE_DIRS}
 )
+
+INSTALL(TARGETS Model DESTINATION bin)
index 017acf05d4d7cff9675407b7347ec0330fad48a5..c9afbc7aba1e478c6ccdab36278c575cfe887e44 100644 (file)
@@ -52,6 +52,7 @@ IF(WIN32)
 ENDIF(WIN32)
 
 INSTALL(TARGETS _ModelAPI DESTINATION swig)
+INSTALL(TARGETS ModelAPI DESTINATION bin)
 #INSTALL(TARGETS ${SWIG_SCRIPTS} DESTINATION swig)
 
 
index 0f2a9be5adce7fe6e0a6f151f6ae038ddefe4ab6..b2ece1f926e7dd80882e9263fdcc3ed98723f16c 100644 (file)
@@ -13,7 +13,8 @@ class PyConsole_Editor;
 class PyConsole_EnhInterp;
 class QMenu;
 
-class PYCONSOLE_EXPORT PyConsole_Console : public QWidget//, public SUIT_PopupClient
+//PYCONSOLE_EXPORT
+class PyConsole_Console : public QWidget//, public SUIT_PopupClient
 {
   Q_OBJECT
 
@@ -76,7 +77,8 @@ protected:
  * Similar to PyConsole_Console except that an enhanced interpreter and enhanced editor
  * are encapsulated.
  */
-class PYCONSOLE_EXPORT PyConsole_EnhConsole: public PyConsole_Console
+//PYCONSOLE_EXPORT
+class PyConsole_EnhConsole: public PyConsole_Console
 {
   Q_OBJECT
 
index f3324dc25df6c6defad4dc04a895be1f582e1233..8c17a5bc7810e7efb9545d837afc0b9ebe760b7a 100644 (file)
@@ -10,7 +10,8 @@ class PyConsole_Interp;
 class PyInterp_Request;
 class QEventLoop;
 
-class PYCONSOLE_EXPORT PyConsole_Editor : public QTextEdit
+//PYCONSOLE_EXPORT
+class PyConsole_Editor : public QTextEdit
 {
   Q_OBJECT;
 
index 03b5e19a1b405d3deb8a19ad2e89efbe669b997b..defa590605a895bc31905f2d2c1fc298c688ff21 100644 (file)
@@ -14,7 +14,8 @@ class PyConsole_EnhInterp;
 /**
  * Enhanced Python editor handling tab completion.
  */
-class PYCONSOLE_EXPORT PyConsole_EnhEditor: public PyConsole_Editor
+//PYCONSOLE_EXPORT
+class PyConsole_EnhEditor: public PyConsole_Editor
 {
   Q_OBJECT;
 
index 1af977cc09f31d060bfcd3d7b735fdec7934a82e..b01f68973c8fcf253acdab4875bb10b66307c738 100644 (file)
@@ -15,7 +15,8 @@
  * Enhanced Python interpreter used for auto-completion.
  * This extends PyConsole_Interp with an API wrapping the Python dir() command nicely.
  */
-class PYCONSOLE_EXPORT PyConsole_EnhInterp: public PyConsole_Interp
+//PYCONSOLE_EXPORT
+class PyConsole_EnhInterp: public PyConsole_Interp
 {
 public:
   PyConsole_EnhInterp()
index d65c9e620054c5ef72f06eeee09569f91c566c5d..5dfa7f78c29b04cb42ae3af9365bc9f699b28667 100644 (file)
@@ -6,7 +6,8 @@
 
 #include <PyInterp_Interp.h>   /// !!! WARNING !!! THIS INCLUDE MUST BE VERY FIRST !!!
 
-class PYCONSOLE_EXPORT PyConsole_Interp : public PyInterp_Interp
+//PYCONSOLE_EXPORT
+class PyConsole_Interp : public PyInterp_Interp
 {
 public:
   PyConsole_Interp();
index ed1ea7b7402c2f6629bcc35791c99b21e24eeb40..76340b94b129fc77f58a8032cbea53e7b99d3158 100644 (file)
@@ -9,7 +9,8 @@
 //! SALOME custom event type
 #define PyEvent_EVENT QEvent::Type( QEvent::User + 10000 )
 
-class PYEVENT_EXPORT PyEvent_CustomEvent : public QEvent
+// PYEVENT_EXPORT
+class PyEvent_CustomEvent : public QEvent
 {
 public:
   PyEvent_CustomEvent( int type );
@@ -24,7 +25,8 @@ private:
 
 class QSemaphore;
 
-class PYEVENT_EXPORT PyEvent_Event
+//PYEVENT_EXPORT
+class PyEvent_Event
 {
 public:
   PyEvent_Event();
index 23132de7e710991d1d54c7dd9bfef94d5e26c885..d115a2802c9f8513b981959fba745a2fc7cb1e77 100644 (file)
@@ -17,7 +17,8 @@ class PyEvent_Event;
   This event filter can be installed by any application that intends to use PyEvent_Event mechanism asynchronously.
   This class replaced SalomeApp_EventFilter.
 */
-class PYEVENT_EXPORT PyEvent_EventFilter: public QObject 
+//PYEVENT_EXPORT
+class PyEvent_EventFilter: public QObject 
 {
 public:
   static void Init();
index fa98d30b0124ab9ef0e55f4eb6e28657c5072dca..cb5da2e8a26ee836d13f986f89a63f22db976176 100644 (file)
@@ -14,7 +14,8 @@
 class QObject;
 class PyInterp_Watcher;
 
-class PYINTERP_EXPORT PyInterp_Dispatcher : protected QThread
+//PYINTERP_EXPORT
+class PyInterp_Dispatcher : protected QThread
 {
   PyInterp_Dispatcher(); // private constructor
 
index 01bab92c11cbb7e7adfcfc56c65f15e8aa01c0a5..b08c34246b1de1f6075f2af56b23fa5ff1fd64a4 100644 (file)
@@ -27,7 +27,8 @@ protected:
  * Events thrown by the interpreter having executed a command and indicating
  * the return status.
  */
-class PYINTERP_EXPORT PyInterp_Event : public QEvent
+//PYINTERP_EXPORT
+class PyInterp_Event : public QEvent
 {
   PyInterp_Event();
   PyInterp_Event( const PyInterp_Event& );
index d92bc4fc9d0b047d21020d17238ce5418eb070bb..b93c6475a4b25424fdcde2b8b18cea41d781bceb 100644 (file)
@@ -7,7 +7,8 @@
 #include <list>
 #include <string>
 
-class PYINTERP_EXPORT PyLockWrapper
+//PYINTERP_EXPORT
+class PyLockWrapper
 {
   PyThreadState* myThreadState;
   PyThreadState* mySaveThreadState;
@@ -19,7 +20,8 @@ public:
 
 typedef void PyOutChanged(void* data,char * c);
 
-class PYINTERP_EXPORT PyInterp_Interp
+//PYINTERP_EXPORT
+class PyInterp_Interp
 {
 public:
   static int _argc;
@@ -62,7 +64,8 @@ protected:
   virtual bool initContext() = 0;  
 };
 
-class PYINTERP_EXPORT PyObjWrapper
+//PYINTERP_EXPORT
+class PyObjWrapper
 {
   PyObject* myObject;
 public:
index 9cc3a68ac4a5f2c299c7c71d1b582b03befff8b5..b96cd1dc25a053c13f4981cd1b2c148d13cbf2fd 100644 (file)
@@ -15,7 +15,8 @@ class PyInterp_Dispatcher;
 class PyInterp_ExecuteEvent;
 class PyConsole_Editor;
 
-class PYINTERP_EXPORT PyInterp_Request
+// PYINTERP_EXPORT
+class PyInterp_Request
 {
   friend class PyInterp_Dispatcher;
   friend class PyInterp_ExecuteEvent;
@@ -61,7 +62,8 @@ private:
   QObject*        myListener;
 };
 
-class PYINTERP_EXPORT PyInterp_LockRequest : public PyInterp_Request
+//PYINTERP_EXPORT
+class PyInterp_LockRequest : public PyInterp_Request
 {
 public:
 
index 91126b7e9c14e57a3cf8fc44145be805d4860adb..3f110c1e2309aa15b8bd826c6fd48e8014415603 100644 (file)
@@ -9,7 +9,8 @@
 #include <QObject>
 
 // Private class that keeps track of destructions of request listeners
-class PYINTERP_EXPORT PyInterp_Watcher : public QObject
+//PYINTERP_EXPORT
+class PyInterp_Watcher : public QObject
 {                                           
   Q_OBJECT
 
index 5093a6167a378676dfd828510101256efa1af640..7d38c58d1cfe0096f7834a15fac1151662cd1dce 100644 (file)
@@ -18,6 +18,9 @@ SET(PROJECT_HEADERS
        XGUI_RubberBand.h
        XGUI_Constants.h
        XGUI_ViewBackground.h
+       XGUI_DocumentDataModel.h
+       XGUI_DataModel.h
+       XGUI_ObjectsBrowser.h
 )
 
 SET(PROJECT_AUTOMOC 
@@ -38,6 +41,9 @@ SET(PROJECT_SOURCES
     XGUI_Viewer.cpp
        XGUI_RubberBand.cpp
        XGUI_ViewBackground.cpp
+       XGUI_DocumentDataModel.cpp
+       XGUI_DataModel.cpp
+       XGUI_ObjectsBrowser.cpp
 )
 
 SET(PROJECT_RESOURCES 
@@ -58,6 +64,7 @@ SET(PROJECT_LIBRARIES
        PyConsole
        PyInterp
        PyEvent
+       ModelAPI
 )
 
 QT5_ADD_RESOURCES(PROJECT_COMPILED_RESOURCES ${PROJECT_RESOURCES})
@@ -72,6 +79,7 @@ INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/src/Event
                                         ${PROJECT_SOURCE_DIR}/src/Config
                                         ${PROJECT_SOURCE_DIR}/src/PyInterp
                                         ${PROJECT_SOURCE_DIR}/src/PyConsole
+                                        ${PROJECT_SOURCE_DIR}/src/ModelAPI
                                         ${CAS_INCLUDE_DIRS})
 
 LINK_DIRECTORIES($ENV{PYTHON_LIB_DIR})
@@ -84,6 +92,8 @@ ADD_EXECUTABLE(XGUI WIN32
        ${QM_RESOURCES}
 )
 
+ADD_DEPENDENCIES(XGUI ModelAPI)
+
 # The Qt5Widgets_LIBRARIES variable also includes QtGui and QtCore
 TARGET_LINK_LIBRARIES(XGUI ${PROJECT_LIBRARIES})
 
diff --git a/src/XGUI/XGUI_DataModel.cpp b/src/XGUI/XGUI_DataModel.cpp
new file mode 100644 (file)
index 0000000..7dc78aa
--- /dev/null
@@ -0,0 +1,12 @@
+#include "XGUI_DataModel.h"
+
+
+XGUI_DataModel::XGUI_DataModel(QObject* theParent)
+  : QAbstractItemModel(theParent)
+{
+}
+
+
+XGUI_DataModel::~XGUI_DataModel()
+{
+}
diff --git a/src/XGUI/XGUI_DataModel.h b/src/XGUI/XGUI_DataModel.h
new file mode 100644 (file)
index 0000000..106a7f0
--- /dev/null
@@ -0,0 +1,15 @@
+
+#ifndef XGUI_DataModel_H
+#define XGUI_DataModel_H
+
+#include <QAbstractItemModel>
+
+class XGUI_DataModel : public QAbstractItemModel
+{
+  Q_OBJECT
+public:
+  XGUI_DataModel(QObject* theParent);
+  virtual ~XGUI_DataModel();
+};
+
+#endif
\ No newline at end of file
diff --git a/src/XGUI/XGUI_DocumentDataModel.cpp b/src/XGUI/XGUI_DocumentDataModel.cpp
new file mode 100644 (file)
index 0000000..f655451
--- /dev/null
@@ -0,0 +1,102 @@
+#include "XGUI_DocumentDataModel.h"
+
+#include <ModelAPI_PluginManager.h>
+#include <ModelAPI_Iterator.h>
+#include <ModelAPI_Document.h>
+
+
+
+
+XGUI_DocumentDataModel::XGUI_DocumentDataModel(QObject* theParent)
+  : QAbstractItemModel(theParent),
+  myParamsFolder(0),
+  myConstructFolder(0)
+{
+  //std::shared_ptr<ModelAPI_Feature> myRoot = aMgr->createFeature("Point");
+  std::shared_ptr<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
+  myDocument = aMgr->currentDocument();
+}
+
+
+XGUI_DocumentDataModel::~XGUI_DocumentDataModel()
+{
+}
+
+
+QVariant XGUI_DocumentDataModel::data(const QModelIndex& theIndex, int theRole) const
+{
+  switch (theRole) {
+  case Qt::DisplayRole:
+    // return a name
+    if (theIndex.internalId() == quintptr(&myParamsFolder))
+      return "Parameters";
+    else if (theIndex.internalId() == quintptr(&myConstructFolder))
+      return "Constructions";
+    else if (theIndex.internalId() == 0) {
+      return "Part";
+    }
+    break;
+  case Qt::DecorationRole:
+    // return an Icon
+    break;
+  case Qt::ToolTipRole:
+    // return Tooltip
+    break;
+  }
+  return QVariant();
+}
+
+
+QVariant XGUI_DocumentDataModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+  return QVariant();
+}
+
+int XGUI_DocumentDataModel::rowCount(const QModelIndex &parent) const
+{
+  std::shared_ptr<ModelAPI_Iterator> aIt = myDocument->featuresIterator(PARTS_GROUP);
+  return aIt->numIterationsLeft() + 2;
+}
+
+int XGUI_DocumentDataModel::columnCount(const QModelIndex &parent) const
+{
+  return 1;
+}
+
+QModelIndex XGUI_DocumentDataModel::index(int theRow, int theColumn, const QModelIndex& theParent) const
+{
+  switch (theRow) {
+  case 0:
+    return createIndex(theRow, theColumn, (quintptr) &myParamsFolder);
+  case 1:
+    return createIndex(theRow, theColumn, (quintptr) &myConstructFolder);
+  default:
+    {
+      std::shared_ptr<ModelAPI_Iterator> aIt = myDocument->featuresIterator(PARTS_GROUP);
+      if (aIt->numIterationsLeft() <= (theRow - 1)) {
+        return createIndex(theRow, theColumn, (quintptr) 0);
+      }
+    }
+  }
+  return QModelIndex();
+}
+
+
+QModelIndex XGUI_DocumentDataModel::parent(const QModelIndex &index) const
+{
+  return QModelIndex();
+}
+
+bool XGUI_DocumentDataModel::hasChildren(const QModelIndex& theParent) const
+{
+  if (!theParent.isValid())
+    return true;
+
+  if (theParent.internalId() == quintptr(&myParamsFolder)) 
+    return myDocument->featuresIterator(PARAMETERS_GROUP)->more();
+  if (theParent.internalId() == quintptr(&myConstructFolder))
+    return myDocument->featuresIterator(CONSTRUCTIONS_GROUP)->more();
+  if (theParent.internalId() == 0)
+    return false;
+  return false;
+}
\ No newline at end of file
diff --git a/src/XGUI/XGUI_DocumentDataModel.h b/src/XGUI/XGUI_DocumentDataModel.h
new file mode 100644 (file)
index 0000000..e6f8a78
--- /dev/null
@@ -0,0 +1,39 @@
+
+#ifndef XGUI_DocumentDataModel_H
+#define XGUI_DocumentDataModel_H
+
+#include <QAbstractItemModel>
+
+class ModelAPI_Document;
+
+class XGUI_DocumentDataModel : public QAbstractItemModel
+{
+  Q_OBJECT
+public:
+  XGUI_DocumentDataModel(QObject* theParent);
+  virtual ~XGUI_DocumentDataModel();
+
+
+  virtual QVariant data(const QModelIndex& theIndex, int theRole) const;
+  virtual QVariant headerData(int section, Qt::Orientation orientation,
+                              int role = Qt::DisplayRole) const;
+
+  virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+  virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+
+  virtual QModelIndex index(int theRow, int theColumn, 
+                            const QModelIndex &parent = QModelIndex()) const;
+
+  virtual QModelIndex parent(const QModelIndex &index) const;
+
+  virtual bool hasChildren(const QModelIndex& theParent = QModelIndex()) const;
+
+private:
+  //std::shared_ptr<ModelAPI_Feature> myRoot;
+  short myParamsFolder;
+  short myConstructFolder;
+
+  std::shared_ptr<ModelAPI_Document> myDocument;
+};
+
+#endif
\ No newline at end of file
index 15f36010c46b5ae7cec27489e086361d05844c86..3fd85eca51973ba86a699c18fac48415def72c54 100644 (file)
@@ -2,6 +2,7 @@
 #include "XGUI_MainMenu.h"
 #include "XGUI_ViewWindow.h"
 #include "XGUI_Viewer.h"
+#include "XGUI_ObjectsBrowser.h"
 
 #include <PyConsole_Console.h>
 #include <PyConsole_EnhInterp.h>
@@ -34,9 +35,10 @@ XGUI_MainWindow::XGUI_MainWindow(QWidget* parent)
   QDockWidget* aDoc = new QDockWidget(this);
   aDoc->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
   aDoc->setWindowTitle(tr("OBJECT_BROWSER_TITLE"));
-  myObjectBrowser = new QTreeWidget(aDoc);
-  myObjectBrowser->setColumnCount(1);
-  myObjectBrowser->setHeaderHidden(true);
+
+  myObjectBrowser = new XGUI_ObjectsBrowser(aDoc);
+  //myObjectBrowser->setColumnCount(1);
+  //myObjectBrowser->setHeaderHidden(true);
   aDoc->setWidget(myObjectBrowser);
   addDockWidget(Qt::LeftDockWidgetArea, aDoc);
   //aDoc->hide();
@@ -107,7 +109,7 @@ void XGUI_MainWindow::hidePythonConsole()
 // TEST FUNCTIONS
 
 //******************************************************
-void XGUI_MainWindow::fillObjectBrowser()
+/*void XGUI_MainWindow::fillObjectBrowser()
 {
   QStringList aNames;
   aNames << "Parameters" << "Constructions";
@@ -151,7 +153,7 @@ void XGUI_MainWindow::fillObjectBrowser()
     aItem->setText(0, "Features");
     aItem->setIcon(0, QIcon(":pictures/features.png"));
   }
-}
+}*/
 
 void XGUI_MainWindow::addPropertyPanel()
 {
index ec5da26a6bdeaa59134c9de3c429d4dc8f1f6227..2f85d1c0175fe69b22e03b6022df716d3f782d15 100644 (file)
@@ -5,7 +5,7 @@
 
 class XGUI_MainMenu;
 class XGUI_Viewer;
-class QTreeWidget;
+class XGUI_ObjectsBrowser;
 class QMdiArea;
 class PyConsole_EnhConsole;
 
@@ -22,7 +22,7 @@ public:
     return myMenuBar;
   }
 
-  QTreeWidget* objectBrowser() const
+  XGUI_ObjectsBrowser* objectBrowser() const
   {
     return myObjectBrowser;
   }
@@ -42,11 +42,11 @@ public:
 
 private:
   //!! For test purposes only
-  void fillObjectBrowser();
+  //void fillObjectBrowser();
   void addPropertyPanel();
 
   XGUI_MainMenu* myMenuBar;
-  QTreeWidget* myObjectBrowser;
+  XGUI_ObjectsBrowser* myObjectBrowser;
 
   XGUI_Viewer* myViewer;
 
diff --git a/src/XGUI/XGUI_ObjectsBrowser.cpp b/src/XGUI/XGUI_ObjectsBrowser.cpp
new file mode 100644 (file)
index 0000000..9269290
--- /dev/null
@@ -0,0 +1,17 @@
+#include "XGUI_ObjectsBrowser.h"
+#include "XGUI_DocumentDataModel.h"
+
+
+XGUI_ObjectsBrowser::XGUI_ObjectsBrowser(QWidget* theParent)
+  : QTreeView(theParent)
+{
+  setHeaderHidden(true);
+  myDocModel = new XGUI_DocumentDataModel(this);
+  setModel(myDocModel);
+}
+
+
+XGUI_ObjectsBrowser::~XGUI_ObjectsBrowser()
+{
+}
+
diff --git a/src/XGUI/XGUI_ObjectsBrowser.h b/src/XGUI/XGUI_ObjectsBrowser.h
new file mode 100644 (file)
index 0000000..75d12e5
--- /dev/null
@@ -0,0 +1,23 @@
+
+#ifndef XGUI_ObjectsBrowser_H
+#define XGUI_ObjectsBrowser_H
+
+#include <QTreeView>
+
+class XGUI_DocumentDataModel;
+
+class XGUI_ObjectsBrowser : public QTreeView
+{
+  Q_OBJECT
+public:
+  XGUI_ObjectsBrowser(QWidget* theParent);
+  virtual ~XGUI_ObjectsBrowser();
+
+  XGUI_DocumentDataModel* dataModel() const { return myDocModel; }
+
+private:
+
+  XGUI_DocumentDataModel* myDocModel;
+};
+
+#endif
\ No newline at end of file