Salome HOME
Update tree
[modules/shaper.git] / src / XGUI / XGUI_MainWindow.cpp
1 #include "XGUI_MainWindow.h"
2 #include "XGUI_Constants.h"
3 #include "XGUI_MainMenu.h"
4 #include "XGUI_ViewWindow.h"
5 #include "XGUI_Viewer.h"
6 #include "XGUI_ObjectsBrowser.h"
7
8 #include <PyConsole_Console.h>
9 #include <PyConsole_EnhInterp.h>
10
11 #include <QMdiArea>
12 #include <QTreeWidget>
13 #include <QDockWidget>
14 #include <QTextEdit>
15 #include <QLabel>
16 #include <QToolBar>
17 #include <QToolButton>
18 #include <QTreeWidgetItem>
19 #include <QLayout>
20 #include <QLineEdit>
21 #include <QGroupBox>
22 #include <QFormLayout>
23 #include <QDoubleSpinBox>
24 #include <QPushButton>
25 #include <QScrollArea>
26 #include <QComboBox>
27 #include <QAction>
28
29 XGUI_MainWindow::XGUI_MainWindow(QWidget* parent)
30     : QMainWindow(parent), 
31     myObjectBrowser(0),
32     myPythonConsole(0),
33     myPropertyPanelDock(0)
34 {
35   setWindowTitle(tr("New Geom"));
36   myMenuBar = new XGUI_MainMenu(this);
37
38   QMdiArea* aMdiArea = new QMdiArea(this);
39   setCentralWidget(aMdiArea);
40
41   myViewer = new XGUI_Viewer(this);
42
43   //createDockWidgets();
44 }
45
46 XGUI_MainWindow::~XGUI_MainWindow(void)
47 {
48 }
49
50 //******************************************************
51 QMdiArea* XGUI_MainWindow::mdiArea() const
52 {
53   return static_cast<QMdiArea*>(centralWidget());
54 }
55
56 //******************************************************
57 void XGUI_MainWindow::showObjectBrowser()
58 {
59   myObjectBrowser->parentWidget()->show();
60 }
61
62 //******************************************************
63 void XGUI_MainWindow::hideObjectBrowser()
64 {
65   myObjectBrowser->parentWidget()->hide();
66 }
67
68 //******************************************************
69 void XGUI_MainWindow::showPythonConsole()
70 {
71   if (!myPythonConsole) {
72
73     QDockWidget* aDoc = new QDockWidget(this);
74     aDoc->setFeatures(QDockWidget::AllDockWidgetFeatures | QDockWidget::DockWidgetVerticalTitleBar);
75     aDoc->setMinimumHeight(0);
76     aDoc->setWindowTitle("Console");
77     myPythonConsole = new PyConsole_EnhConsole( aDoc, new PyConsole_EnhInterp());
78     aDoc->setWidget(myPythonConsole);
79     addDockWidget(Qt::TopDockWidgetArea, aDoc);
80     tabifyDockWidget(myMenuBar->getLastDockWindow(), aDoc);
81   }
82   myPythonConsole->parentWidget()->show();
83 }
84
85 //******************************************************
86 void XGUI_MainWindow::hidePythonConsole()
87 {
88   if (myPythonConsole)
89     myPythonConsole->parentWidget()->hide();
90 }
91
92 void XGUI_MainWindow::showPropertyPanel()
93 {
94   QAction* aViewAct = myPropertyPanelDock->toggleViewAction();
95   //<! Restore ability to close panel from the window's menu
96   aViewAct->setEnabled(true);
97   myPropertyPanelDock->show();
98   myPropertyPanelDock->raise();
99 }
100
101 void XGUI_MainWindow::hidePropertyPanel()
102 {
103   QAction* aViewAct = myPropertyPanelDock->toggleViewAction();
104   //<! Do not allow to show empty property panel
105   aViewAct->setEnabled(false);
106   myPropertyPanelDock->hide();
107 }
108
109 /*
110  * Creates dock widgets, places them in corresponding area
111  * and tabifies if necessary.
112  */
113 void XGUI_MainWindow::createDockWidgets()
114 {
115   QDockWidget* aObjDock = createObjectBrowser();
116   addDockWidget(Qt::LeftDockWidgetArea, aObjDock);
117   myPropertyPanelDock = createPropertyPanel();
118   addDockWidget(Qt::LeftDockWidgetArea, myPropertyPanelDock);
119   hidePropertyPanel(); //<! Invisible by default
120   hideObjectBrowser();
121   tabifyDockWidget(aObjDock, myPropertyPanelDock);
122 }
123
124
125 QDockWidget* XGUI_MainWindow::createPropertyPanel()
126 {
127   QDockWidget* aPropPanel = new QDockWidget(this);
128   aPropPanel->setWindowTitle(tr("Property Panel"));
129   aPropPanel->setObjectName(XGUI::PROP_PANEL);
130
131   QWidget* aContent = new QWidget(aPropPanel);
132   QVBoxLayout* aMainLay = new QVBoxLayout(aContent);
133   aMainLay->setContentsMargins(3, 3, 3, 3);
134   aPropPanel->setWidget(aContent);
135
136   QWidget* aCustomWidget = new QWidget(aContent);
137   aCustomWidget->setObjectName(XGUI::PROP_PANEL_WDG);
138   aMainLay->addWidget(aCustomWidget);
139   aMainLay->addStretch(1);
140
141   QFrame* aFrm = new QFrame(aContent);
142   aFrm->setFrameStyle(QFrame::Sunken);
143   aFrm->setFrameShape(QFrame::Panel);
144   QHBoxLayout* aBtnLay = new QHBoxLayout(aFrm);
145   aBtnLay->setContentsMargins(0, 0, 0, 0);
146   aMainLay->addWidget(aFrm);
147
148   QPushButton* aBtn = new QPushButton(QIcon(":pictures/button_help.png"), "", aFrm);
149   aBtn->setFlat(true);
150   //connect(aBtn, SIGNAL(clicked()), this, SIGNAL(propertyHelpPressed()));
151   aBtnLay->addWidget(aBtn);
152   aBtnLay->addStretch(1);
153   aBtn = new QPushButton(QIcon(":pictures/button_ok.png"), "", aFrm);
154   aBtn->setObjectName(XGUI::PROP_PANEL_OK);
155   aBtn->setFlat(true);
156   //connect(aBtn, SIGNAL(clicked()), this, SIGNAL(propertyOkPressed()));
157   aBtnLay->addWidget(aBtn);
158   aBtn = new QPushButton(QIcon(":pictures/button_cancel.png"), "", aFrm);
159   aBtn->setObjectName(XGUI::PROP_PANEL_CANCEL);
160   aBtn->setFlat(true);
161   //connect(aBtn, SIGNAL(clicked()), this, SIGNAL(propertyClosePressed()));
162   aBtnLay->addWidget(aBtn);
163
164   return aPropPanel;
165 }
166
167 QDockWidget* XGUI_MainWindow::createObjectBrowser()
168 {
169   QDockWidget* aObjDock = new QDockWidget(this);
170   aObjDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
171   aObjDock->setWindowTitle(tr("Object browser"));
172   myObjectBrowser = new XGUI_ObjectsBrowser(aObjDock);
173   aObjDock->setWidget(myObjectBrowser);
174   return aObjDock;
175 }