]> SALOME platform Git repositories - modules/shaper.git/blob - src/XGUI/XGUI_MainWindow.cpp
Salome HOME
Minor GUI tweaks according to MPV's notes + re-factoring:
[modules/shaper.git] / src / XGUI / XGUI_MainWindow.cpp
1 #include "XGUI_MainWindow.h"
2 #include "XGUI_MainMenu.h"
3 #include "XGUI_ViewWindow.h"
4 #include "XGUI_Viewer.h"
5
6 #include <PyConsole_Console.h>
7 #include <PyConsole_EnhInterp.h>
8
9 #include <QMdiArea>
10 #include <QTreeWidget>
11 #include <QDockWidget>
12 #include <QTextEdit>
13 #include <QLabel>
14 #include <QToolBar>
15 #include <QToolButton>
16 #include <QTreeWidgetItem>
17 #include <QLayout>
18 #include <QLineEdit>
19 #include <QGroupBox>
20 #include <QFormLayout>
21 #include <QDoubleSpinBox>
22 #include <QPushButton>
23 #include <QScrollArea>
24 #include <QComboBox>
25
26
27 XGUI_MainWindow::XGUI_MainWindow(QWidget* parent)
28     : QMainWindow(parent), 
29     myObjectBrowser(0), 
30     myPythonConsole(0)
31 {
32   setWindowTitle(tr("WINDOW_TITLE"));
33   myMenuBar = new XGUI_MainMenu(this);
34
35   QMdiArea* aMdiArea = new QMdiArea(this);
36   setCentralWidget(aMdiArea);
37
38   myViewer = new XGUI_Viewer(this);
39
40   createDockWidgets();
41 }
42
43 XGUI_MainWindow::~XGUI_MainWindow(void)
44 {
45 }
46
47 //******************************************************
48 QMdiArea* XGUI_MainWindow::mdiArea() const
49 {
50   return static_cast<QMdiArea*>(centralWidget());
51 }
52
53 //******************************************************
54 void XGUI_MainWindow::showObjectBrowser()
55 {
56   myObjectBrowser->parentWidget()->show();
57 }
58
59 //******************************************************
60 void XGUI_MainWindow::hideObjectBrowser()
61 {
62   myObjectBrowser->parentWidget()->hide();
63 }
64
65 //******************************************************
66 void XGUI_MainWindow::showPythonConsole()
67 {
68   if (!myPythonConsole) {
69
70     QDockWidget* aDoc = new QDockWidget(this);
71     aDoc->setFeatures(QDockWidget::AllDockWidgetFeatures | QDockWidget::DockWidgetVerticalTitleBar);
72     aDoc->setMinimumHeight(0);
73     aDoc->setWindowTitle("Console");
74     myPythonConsole = new PyConsole_EnhConsole( aDoc, new PyConsole_EnhInterp());
75     //myPythonConsole = new QTextEdit(aDoc);
76     //myPythonConsole->setGeometry(0,0,200, 50);
77     //myPythonConsole->setText(">>>");
78     aDoc->setWidget(myPythonConsole);
79     //myPythonConsole->setMinimumHeight(0);
80     addDockWidget(Qt::TopDockWidgetArea, aDoc);
81     tabifyDockWidget(myMenuBar->getLastDockWindow(), aDoc);
82   }
83   myPythonConsole->parentWidget()->show();
84 }
85
86 //******************************************************
87 void XGUI_MainWindow::hidePythonConsole()
88 {
89   if (myPythonConsole)
90     myPythonConsole->parentWidget()->hide();
91 }
92
93 /*
94  * Creates dock widgets, places them in corresponding area
95  * and tabifies if necessary.
96  */
97 void XGUI_MainWindow::createDockWidgets()
98 {
99   QDockWidget* aObjDock = createObjectBrowser();
100   addDockWidget(Qt::LeftDockWidgetArea, aObjDock);
101   QDockWidget* aPropPanelDock = createPropertyPanel();
102   addDockWidget(Qt::LeftDockWidgetArea, aPropPanelDock);
103
104   tabifyDockWidget(aPropPanelDock, aObjDock);
105 }
106
107
108 QDockWidget* XGUI_MainWindow::createPropertyPanel()
109 {
110   QDockWidget* aPropPanel = new QDockWidget(this);
111   aPropPanel->setWindowTitle(tr("Property Panel"));
112
113   QWidget* aContent = new QWidget(aPropPanel);
114   QVBoxLayout* aMainLay = new QVBoxLayout(aContent);
115   aMainLay->setContentsMargins(3, 3, 3, 3);
116   aPropPanel->setWidget(aContent);
117
118   QWidget* aCustomWidget = new QWidget(aContent);
119   aCustomWidget->setObjectName("PropertyPanelWidget");
120   aMainLay->addWidget(aCustomWidget);
121   aMainLay->addStretch(1);
122
123   QFrame* aFrm = new QFrame(aContent);
124   aFrm->setFrameStyle(QFrame::Sunken);
125   aFrm->setFrameShape(QFrame::Panel);
126   QHBoxLayout* aBtnLay = new QHBoxLayout(aFrm);
127   aBtnLay->setContentsMargins(0, 0, 0, 0);
128   aMainLay->addWidget(aFrm);
129
130   QPushButton* aBtn = new QPushButton(QIcon(":pictures/button_help.png"), "", aFrm);
131   aBtn->setFlat(true);
132   aBtnLay->addWidget(aBtn);
133   aBtnLay->addStretch(1);
134   aBtn = new QPushButton(QIcon(":pictures/button_ok.png"), "", aFrm);
135   aBtn->setFlat(true);
136   aBtnLay->addWidget(aBtn);
137   aBtn = new QPushButton(QIcon(":pictures/button_cancel.png"), "", aFrm);
138   aBtn->setFlat(true);
139   aBtnLay->addWidget(aBtn);
140
141   return aPropPanel;
142 }
143
144 QDockWidget* XGUI_MainWindow::createObjectBrowser()
145 {
146   QDockWidget* aObjDock = new QDockWidget(this);
147   aObjDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
148   aObjDock->setWindowTitle(tr("OBJECT_BROWSER_TITLE"));
149   myObjectBrowser = new QTreeWidget(aObjDock);
150   myObjectBrowser->setColumnCount(1);
151   myObjectBrowser->setHeaderHidden(true);
152   aObjDock->setWidget(myObjectBrowser);
153 //  fillObjectBrowser();
154   return aObjDock;
155 }
156
157 //******************************************************
158
159 // TEST FUNCTIONS
160
161 //******************************************************
162 void XGUI_MainWindow::fillObjectBrowser()
163 {
164   QStringList aNames;
165   aNames << "Parameters" << "Constructions";
166   aNames << "Part 1" << "Part 2" << "Part 3";
167   aNames << "Properties";
168
169   QStringList aIcons;
170   aIcons << ":pictures/params_folder.png";
171   aIcons << ":pictures/constr_folder.png";
172   aIcons << ":pictures/part_ico.png";
173   aIcons << ":pictures/part_ico.png";
174   aIcons << ":pictures/part_ico.png";
175   aIcons << ":pictures/properties.png";
176
177   QList<QTreeWidgetItem*> aItems;
178   foreach(QString aName, aNames)
179   {
180     QTreeWidgetItem* aItem = new QTreeWidgetItem(myObjectBrowser);
181     aItem->setText(0, aName);
182     aItems.append(aItem);
183   }
184   for(int i = 0; i < aItems.length(); i++) {
185     aItems[i]->setIcon(0, QIcon(aIcons[i]));
186   }
187   myObjectBrowser->addTopLevelItems(aItems);
188
189   for(int i = 2; i < 5; i++) {
190     QTreeWidgetItem* aItem = new QTreeWidgetItem(aItems[i]);
191     aItem->setText(0, "Parameters");
192     aItem->setIcon(0, QIcon(":pictures/params_folder.png"));
193
194     aItem = new QTreeWidgetItem(aItems[i]);
195     aItem->setText(0, "Construction");
196     aItem->setIcon(0, QIcon(":pictures/constr_folder.png"));
197
198     aItem = new QTreeWidgetItem(aItems[i]);
199     aItem->setText(0, "Bodies");
200     aItem->setIcon(0, QIcon(":pictures/part_ico.png"));
201
202     aItem = new QTreeWidgetItem(aItems[i]);
203     aItem->setText(0, "Features");
204     aItem->setIcon(0, QIcon(":pictures/features.png"));
205   }
206 }