1 // Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
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.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
27 #include <qlistview.h>
29 #include <SUIT_DataObject.h>
30 #include <SUIT_DataObjectKey.h>
31 #include <SUIT_PopupClient.h>
34 #pragma warning( disable:4251 )
48 virtual ~OB_Updater(){};
49 virtual void update( SUIT_DataObject* theObj, OB_ListItem* theLI ) = 0;
54 Represents object browser. Allows to get/set selection,
55 to drag-n-drop of objects, to determine item by SUIT object and
58 class OB_EXPORT OB_Browser : public QFrame, public SUIT_PopupClient
65 OB_Browser( QWidget* = 0, SUIT_DataObject* theRoot = 0 );
66 virtual ~OB_Browser();
68 virtual QString popupClientType() const { return QString( "ObjectBrowser" ); }
70 SUIT_DataObject* getRootObject() const;
71 virtual void setRootObject( SUIT_DataObject* theRoot = 0 );
73 int numberOfSelected() const;
75 DataObjectList getSelected() const;
76 void getSelected( DataObjectList& ) const;
78 virtual void setSelected( const SUIT_DataObject* theObject, const bool = false );
79 virtual void setSelected( const DataObjectList& theObjLst, const bool = false );
81 bool isOpen( SUIT_DataObject* theObject ) const;
82 virtual void setOpen( SUIT_DataObject* theObject, const bool theOpen = true );
84 bool isAutoUpdate() const;
85 virtual void setAutoUpdate( const bool );
87 bool isAutoDeleteObjects() const;
88 virtual void setAutoDeleteObjects( const bool );
90 virtual void updateTree( SUIT_DataObject* = 0, const bool = false );
91 virtual void replaceTree( SUIT_DataObject*, SUIT_DataObject* );
93 bool isShowToolTips();
94 void setShowToolTips( const bool theDisplay );
98 SUIT_DataObject* dataObjectAt( const QPoint& ) const;
100 OB_Filter* filter() const;
101 void setFilter( OB_Filter* );
103 bool rootIsDecorated() const;
104 void setRootIsDecorated( const bool );
106 int autoOpenLevel() const;
107 void setAutoOpenLevel( const int );
108 void openLevels( const int = -1 );
110 virtual int addColumn( const QString&, const int id = -1, const int width = -1 );
111 virtual int addColumn( const QIconSet&, const QString&, const int id = -1, const int width = -1 );
112 virtual void removeColumn( const int id );
114 void setNameTitle( const QString& );
115 virtual void setNameTitle( const QIconSet&, const QString& );
116 void setColumnTitle( const int id, const QString& );
117 virtual void setColumnTitle( const int id, const QIconSet&, const QString& );
119 QString nameTitle() const;
120 QString columnTitle( const int ) const;
122 bool isColumnVisible( const int ) const;
123 virtual void setColumnShown( const int, const bool );
125 virtual void setWidthMode( QListView::WidthMode );
127 QValueList<int> columns() const;
129 bool appropriateColumn( const int ) const;
130 virtual void setAppropriateColumn( const int, const bool );
132 virtual bool eventFilter(QObject* watched, QEvent* e);
134 QListView* listView() const;
136 virtual void contextMenuPopup( QPopupMenu* );
139 unsigned long getModifiedTime() { return myModifiedTime; }
141 OB_Updater* getUpdater() const;
142 virtual void setUpdater( OB_Updater* theUpdate = 0 );
144 OB_ObjSearch* getSearch() const;
145 void setSearch( OB_ObjSearch* );
146 void enableSearch( const bool );
149 void selectionChanged();
150 void doubleClicked( SUIT_DataObject* );
151 void dropped( DataObjectList, SUIT_DataObject*, int );
155 void onColumnVisible( int );
156 void onDestroyed( SUIT_DataObject* );
157 void onDoubleClicked ( QListViewItem* );
158 void onDropped( QPtrList<QListViewItem>, QListViewItem*, int );
161 void adjustWidth( QListViewItem* );
162 virtual void updateView( SUIT_DataObject* = 0 );
163 virtual void updateText();
165 virtual void keyPressEvent( QKeyEvent* );
167 SUIT_DataObject* dataObject( const QListViewItem* ) const;
168 QListViewItem* listViewItem( const SUIT_DataObject* ) const;
171 typedef QMap<SUIT_DataObject*, QListViewItem*> ItemMap;
172 typedef SUIT_DataObjectKeyHandle DataObjectKey;
173 typedef QMap<SUIT_DataObject*, int> DataObjectMap;
174 typedef QMap<DataObjectKey, int> DataObjectKeyMap;
177 void expand( QListViewItem* );
178 bool hasClosed( QListViewItem* ) const;
180 void autoOpenBranches();
181 void openBranch( QListViewItem*, const int );
183 void removeReferences( QListViewItem* );
184 void removeConnections( SUIT_DataObject* );
185 void createConnections( SUIT_DataObject* );
186 void removeObject( SUIT_DataObject*, const bool = true );
188 void updateText( QListViewItem* );
189 bool needToUpdateTexts( QListViewItem* ) const;
191 DataObjectKey objectKey( QListViewItem* ) const;
192 DataObjectKey objectKey( SUIT_DataObject* ) const;
194 QListViewItem* createTree( const SUIT_DataObject*, QListViewItem*, QListViewItem* = 0, const bool = false );
195 QListViewItem* createItem( const SUIT_DataObject*, QListViewItem*, QListViewItem* = 0, const bool = false );
197 SUIT_DataObject* storeState( DataObjectMap&, DataObjectMap&,
198 DataObjectKeyMap&, DataObjectKeyMap&, DataObjectKey& ) const;
199 void restoreState( const DataObjectMap&, const DataObjectMap&, const SUIT_DataObject*,
200 const DataObjectKeyMap&, const DataObjectKeyMap&, const DataObjectKey& );
203 friend class OB_BrowserSync;
206 SUIT_DataObject* myRoot;
209 OB_Updater* myUpdater;
210 QMap<int, int> myColumnIds;
214 bool myRootDecorated;
216 OB_FindDlg *myFindDlg;
218 friend class OB_Browser::ToolTip;
220 unsigned long myModifiedTime;