Salome HOME
Merge remote-tracking branch 'origin/vsr/fix_single_study_pb' into pre/fix_single_study
[modules/gui.git] / src / TreeData / DockWidgets.cxx
1 // Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
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, or (at your option) any later version.
7 //
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.
12 //
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
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 // Author: Guillaume Boulant (EDF/R&D)
21
22 #include "DockWidgets.hxx"
23
24 // Qt includes
25 #include <QMainWindow>
26
27 // SALOME includes
28 #include <SUIT_Desktop.h>
29 #include <SUIT_DataBrowser.h>
30 #include <QtxTreeView.h>
31
32 /*!
33  * This create a gui container to hold widgets dedicated to the XCAD
34  * data model. By default, the dock widgets are not visible. Use the
35  * show() method to control the visibility (usefull when activating
36  * and desactivating the module to show/hide the dock widgets).
37  *
38  * This class does not make any hypothesis on what will be embedded in
39  * the dock widgets (only that it is QTreeView). The QTreeView is
40  * defined elsewhere and is generaly rendering a tree model containing
41  * tree items.
42  */
43 DockWidgets::DockWidgets(SalomeApp_Application* salomeApp,
44                          bool tabify,
45                          const char * title) {
46   _salomeApp = salomeApp;
47
48   QMainWindow *parent = _salomeApp->desktop();
49   _dwDataPanel = new QDockWidget(parent);
50   _dwDataPanel->setVisible(false);
51   _dwDataPanel->setWindowTitle(title);
52   _dwDataPanel->setObjectName(title);
53   parent->addDockWidget(Qt::LeftDockWidgetArea, _dwDataPanel);
54   //
55   // At this step, the _dwDataPanel is located side by side with the object
56   // browser (or one over the other).
57   //
58   // It is possible to tabify the different dock widgets in one single
59   // tabbed widget. See the above example:
60   this->tabify(tabify);
61 }
62
63 void DockWidgets::tabify(bool tabify) {
64   if ( tabify ) {    
65     // We first get the object browser tree view, and then the
66     // associated DockWidget. Note that the tree view is a SALOME
67     // specific extention of the originate QTreeView and called
68     // QtxTreeView.
69     SUIT_DataBrowser* objectBrowser = _salomeApp->objectBrowser();
70     QtxTreeView* treeView = objectBrowser->treeView();
71     QWidget* pw = treeView->parentWidget();
72     QDockWidget* dwObjectBrowser = 0;
73     while ( pw && !dwObjectBrowser ) {
74       dwObjectBrowser = ::qobject_cast<QDockWidget*>( pw );
75       pw = pw->parentWidget();
76     };
77     QMainWindow *parent = _salomeApp->desktop();
78     parent->tabifyDockWidget(_dwDataPanel, dwObjectBrowser);
79     parent->setTabOrder(_dwDataPanel, dwObjectBrowser);
80     parent->setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North);
81   }
82   else {
83     // TO BE IMPLEMENTED
84   }
85 }
86
87 /*!
88  * This function controls the visibility of the dock widgets.
89  */
90 void DockWidgets::show(bool isVisible) {
91   _dwDataPanel->setVisible(isVisible);
92 }
93
94 /*!
95  * This function initializes the central part of the dock widget with
96  * a tree view that can hold a hierarchical data model.
97  */
98 void DockWidgets::setDataView(QTreeView * dataView) {
99   _tvDataView = dataView;
100   _tvDataView->setParent(_dwDataPanel);
101   _tvDataView->setMinimumHeight(200);
102   _dwDataPanel->setWidget(_tvDataView);
103 }
104
105 void DockWidgets::setPropertiesView(QTreeView * propertiesView) {
106   // Not implemented yet
107 }