X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ObjectsBrowser.h;h=f3e335eefd4cedeb448d075fdce4def7167cd6e4;hb=227323fca46747847e850a1d6e3bdaac882e209e;hp=b1a70d487ec1cab3f2d1c6bdc6baf1e8bc89df45;hpb=868158fe6d39b25e60ac528295b1c908821e4af5;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ObjectsBrowser.h b/src/XGUI/XGUI_ObjectsBrowser.h index b1a70d487..f3e335eef 100644 --- a/src/XGUI/XGUI_ObjectsBrowser.h +++ b/src/XGUI/XGUI_ObjectsBrowser.h @@ -1,4 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #ifndef XGUI_ObjectsBrowser_H #define XGUI_ObjectsBrowser_H @@ -8,13 +25,20 @@ #include #include #include +#include #include #include #include +#include class ModuleBase_IDocumentDataModel; class XGUI_DataModel; +class Config_DataModelReader; +class XGUI_Workshop; +class ModuleBase_ITreeNode; + +//#define DEBUG_INDXES /** * \ingroup GUI @@ -61,34 +85,11 @@ private: }; -#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 +class XGUI_EXPORT XGUI_DataTree : public QTreeView { Q_OBJECT public: @@ -123,13 +124,21 @@ public slots: /// 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: - XGUI_TreeViewStyle* myStyle; + /// Redefinition of virtual method + virtual void mouseReleaseEvent(QMouseEvent* theEvent); + +#ifdef DEBUG_INDXES + virtual void mousePressEvent(QMouseEvent* theEvent); #endif + +private: + /// Process a history change request + /// \param theIndex a clicked data index + void processHistoryChange(const QModelIndex& theIndex); + + /// Process a visibility change request + /// \param theIndex a clicked data index + void processEyeClick(const QModelIndex& theIndex); }; /**\class XGUI_ObjectsBrowser @@ -142,7 +151,7 @@ Q_OBJECT public: /// Constructor /// \param theParent a parent widget - XGUI_ObjectsBrowser(QWidget* theParent); + XGUI_ObjectsBrowser(QWidget* theParent, XGUI_Workshop* theWorkshop); virtual ~XGUI_ObjectsBrowser(); //! Returns Model which provides access to data objects @@ -159,10 +168,17 @@ Q_OBJECT /// \param theObjects list of objects to select void setObjectsSelected(const QObjectPtrList& theObjects); + //! Scroll TreeView to make given object visible + //! \param theObject object to make it visible + void ensureVisible(const ObjectPtr theObject); + //! Returns currently selected indexes QModelIndexList selectedIndexes() const { - return myTreeView->selectionModel()->selectedIndexes(); + if (myTreeView->selectionModel()) + return myTreeView->selectionModel()->selectedIndexes(); + else + return QModelIndexList(); } //! Returns TreeView widget @@ -180,6 +196,33 @@ Q_OBJECT /// Resets the object browser into initial state void clearContent(); + /// Initialize the Object browser + void initialize(ModuleBase_ITreeNode* theRoot); + + /// Returns list of folders opened state for the given document + /// \param theDoc the document + /// \return list of booleans with state expanded or not + std::list getStateForDoc(DocumentPtr theDoc) const; + + /// Set folders opened state for the given document + /// \param theDoc the document + /// \param theStates list of booleans with state expanded or not + void setStateForDoc(DocumentPtr theDoc, const std::list& theStates); + + /// Returns current workshop + XGUI_Workshop* workshop() const { return myWorkshop; } + + void onSelectionChanged(); + + /// Updates all items of object browser + /// \param theColumn - column of items + /// \param theParent - a parent item (by default from root) + void updateAllIndexes(int theColumn = 0, const QModelIndex& theParent = QModelIndex()); + + QMap getFoldersState(DocumentPtr theDoc) const; + + void setFoldersState(const QMap& theStates); + public slots: //! Called on Edit command request void onEditItem(); @@ -194,6 +237,15 @@ signals: //! Segnal is emitted when user cliks by mouse in header label of object browser void headerMouseDblClicked(const QModelIndex&); + //! An signal emitted on resize of the Object Browser + void sizeChanged(); + + +protected: + //! redefinition of a virtual method + void resizeEvent(QResizeEvent* theEvent); + + private slots: /// Show context menu /// \param theEvent a context menu event @@ -206,13 +258,22 @@ signals: //! Called when selection in Data Tree is changed void onSelectionChanged(const QItemSelection& theSelected, const QItemSelection& theDeselected); + void onBeforeReset(); + + void onAfterModelReset(); + private: - QModelIndexList expandedItems(const QModelIndex& theParent = QModelIndex()) const; + QList expandedItems(const QModelIndex& theParent = QModelIndex()) const; //! Internal model XGUI_DataModel* myDocModel; XGUI_ActiveDocLbl* myActiveDocLbl; XGUI_DataTree* myTreeView; + XGUI_Workshop* myWorkshop; + + /// A field to store expanded items before model reset + //QModelIndexList myExpandedItems; + QList myExpandedItems; }; #endif