X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ObjectsBrowser.h;h=2b9ab1803390bbcaa8125ede8ffdeae784958ab6;hb=56d964e85b8ac63b2c4fb36426fa150d52afa998;hp=05a539566d5a8bdd438314ae52c8a61a8f94b4bc;hpb=9a9c265e7d0eb452ef287121a04a7de0b8ca2325;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ObjectsBrowser.h b/src/XGUI/XGUI_ObjectsBrowser.h index 05a539566..2b9ab1803 100644 --- a/src/XGUI/XGUI_ObjectsBrowser.h +++ b/src/XGUI/XGUI_ObjectsBrowser.h @@ -1,3 +1,4 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> #ifndef XGUI_ObjectsBrowser_H #define XGUI_ObjectsBrowser_H @@ -6,114 +7,224 @@ #include #include #include +#include #include #include +#include -class XGUI_DocumentDataModel; -class QLineEdit; +class ModuleBase_IDocumentDataModel; +class XGUI_DataModel; +class Config_DataModelReader; +/** +* \ingroup GUI +* Implementation of root label in Object Browser +*/ +class XGUI_ActiveDocLbl: public QLabel +{ +Q_OBJECT + public: + /// Constructor + /// \param theText a text + /// \param theParent a parent widget + XGUI_ActiveDocLbl(const QString& theText, QWidget* theParent ); + + /// Sets tree view + /// \param theView a view + void setTreeView(QTreeView* theView); + + /// Returns tree view + QTreeView* treePalette() const { return myTreeView;} + +#if (!defined HAVE_SALOME) && (defined WIN32) + virtual bool event(QEvent* theEvent); +#endif + +public slots: + /// On unselect + void unselect(); + +protected: + /// On mouse release + virtual void mouseReleaseEvent( QMouseEvent* e); + + /// Filter event + bool eventFilter(QObject* theObj, QEvent* theEvent); + +private: + QString myPreSelectionStyle; + QString myNeutralStyle; + QString mySelectionStyle; + + QTreeView* myTreeView; + bool myIsSelected; +}; -class XGUI_DataTree: public QTreeView + +#if (!defined HAVE_SALOME) && (defined WIN32) +#include +/** +* \ingroup GUI +* Implementation of XGUI_DataTree custom style +*/ +class XGUI_TreeViewStyle : public QWindowsVistaStyle { Q_OBJECT public: + XGUI_TreeViewStyle() : QWindowsVistaStyle() {} + + void drawPrimitive(PrimitiveElement theElement, const QStyleOption* theOption, + QPainter* thePainter, const QWidget* theWidget = 0) const; + + void setIndex(const QModelIndex& theIndex) { myIndex = theIndex; } + QModelIndex index() const { return myIndex; } + +private: + QModelIndex myIndex; +}; +#endif + +/** +* \ingroup GUI +* Implementation of Data Tree object for Object Browser +*/ +class XGUI_DataTree : public QTreeView +{ +Q_OBJECT + public: + /// Constructor + /// \param theParent a parent widget XGUI_DataTree(QWidget* theParent); - virtual ~XGUI_DataTree(); - //! Returns list of currently selected objects - QList selectedObjects() const { return mySelectedData; } + virtual ~XGUI_DataTree(); - XGUI_DocumentDataModel* dataModel() const; + /// Returns current data model + XGUI_DataModel* dataModel() const; signals: - //! Emited when selection is changed - void selectionChanged(); - void activePartChanged(ObjectPtr thePart); - //! Emited on context menu request void contextMenuRequested(QContextMenuEvent* theEvent); -protected slots: +public slots: + /// Clear content of data tree + virtual void clear(); + + protected slots: + /// Commit modified data (used for renaming of objects) virtual void commitData(QWidget* theEditor); -protected: - virtual void mouseDoubleClickEvent(QMouseEvent* theEvent); + /// A slot which is called on mouse double click + void onDoubleClick(const QModelIndex&); + + protected: + /// Redefinition of virtual method virtual void contextMenuEvent(QContextMenuEvent* theEvent); -private slots: - //! Called when selection in Data Tree is changed - void onSelectionChanged(const QItemSelection& theSelected, const QItemSelection& theDeselected); + /// Redefinition of virtual method + virtual void resizeEvent(QResizeEvent* theEvent); +#if (!defined HAVE_SALOME) && (defined WIN32) + virtual void drawRow(QPainter* thePainter, + const QStyleOptionViewItem& theOptions, + const QModelIndex& theIndex) const; private: - //! List of currently selected data - QList mySelectedData; + XGUI_TreeViewStyle* myStyle; +#endif }; - /**\class XGUI_ObjectsBrowser * \ingroup GUI * \brief Object browser window object. Represents data tree of current data structure */ - class XGUI_EXPORT XGUI_ObjectsBrowser : public QWidget +class XGUI_EXPORT XGUI_ObjectsBrowser : public QWidget { - Q_OBJECT -public: +Q_OBJECT + public: + /// Constructor + /// \param theParent a parent widget XGUI_ObjectsBrowser(QWidget* theParent); virtual ~XGUI_ObjectsBrowser(); //! Returns Model which provides access to data objects - XGUI_DocumentDataModel* dataModel() const { return myDocModel; } + XGUI_DataModel* dataModel() const + { + return myDocModel; + } //! Returns list of currently selected objects - QList selectedObjects() const { return myObjectsList; } + //! \param theIndexes - output list of corresponded indexes (can be NULL) + QObjectPtrList selectedObjects(QModelIndexList* theIndexes = 0) const; - void setObjectsSelected(const QList& theObjects); + /// Set selected list of objects + /// \param theObjects list of objects to select + void setObjectsSelected(const QObjectPtrList& theObjects); //! Returns currently selected indexes - QModelIndexList selectedIndexes() const { return myTreeView->selectionModel()->selectedIndexes(); } + QModelIndexList selectedIndexes() const + { + return myTreeView->selectionModel()->selectedIndexes(); + } //! Returns TreeView widget - XGUI_DataTree* treeView() const { return myTreeView; } + XGUI_DataTree* treeView() const + { + return myTreeView; + } - //! Activates currently selected part. Signal activePartChanged will not be sent - void activatePart(const ResultPartPtr& thePart); + /// Returns active doc label object + QLabel* activeDocLabel() const { return myActiveDocLbl; } + /// Rebuild data tree void rebuildDataTree(); + /// Resets the object browser into initial state + void clearContent(); + + /// Set XML reader object for data model + /// \param theReader the reader object + void setXMLReader(Config_DataModelReader* theReader); + +public slots: + //! Called on Edit command request + void onEditItem(); + signals: //! Emited when selection is changed void selectionChanged(); - //! Emited when current active document is changed - void activePartChanged(ObjectPtr thePart); - //! Emited on context menu request void contextMenuRequested(QContextMenuEvent* theEvent); -protected: - virtual bool eventFilter(QObject* obj, QEvent* theEvent); + //! Segnal is emitted when user cliks by mouse in header label of object browser + void headerMouseDblClicked(const QModelIndex&); -private slots: - void onActivePartChanged(ObjectPtr thePart); + private slots: + /// Show context menu + /// \param theEvent a context menu event void onContextMenuRequested(QContextMenuEvent* theEvent); + + /// Show context menu on upper label + /// \param thePnt a position of context menu void onLabelContextMenuRequested(const QPoint& thePnt); - //! Called on Edit command request - void onEditItem(); + //! Called when selection in Data Tree is changed + void onSelectionChanged(const QItemSelection& theSelected, const QItemSelection& theDeselected); - void onSelectionChanged(); + void onBeforeReset(); -private: - void closeDocNameEditing(bool toSave); + void onAfterModelReset(); - //! Internal model - XGUI_DocumentDataModel* myDocModel; + private: + QModelIndexList expandedItems(const QModelIndex& theParent = QModelIndex()) const; - QLineEdit* myActiveDocLbl; + //! Internal model + XGUI_DataModel* myDocModel; + XGUI_ActiveDocLbl* myActiveDocLbl; XGUI_DataTree* myTreeView; - QList myObjectsList; + /// A field to store expanded items before model reset + QModelIndexList myExpandedItems; }; -#endif \ No newline at end of file +#endif