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"
8 #include <PyConsole_Console.h>
9 #include <PyConsole_EnhInterp.h>
12 #include <QMdiSubWindow>
14 #include <QDockWidget>
15 #include <QApplication>
17 XGUI_MainWindow::XGUI_MainWindow(QWidget* parent)
18 : QMainWindow(parent),
21 setWindowTitle(tr("New Geom"));
22 myMenuBar = new XGUI_MainMenu(this);
24 QMdiArea* aMdiArea = new QMdiArea(this);
25 aMdiArea->setContextMenuPolicy(Qt::ActionsContextMenu);
26 setCentralWidget(aMdiArea);
27 connect(aMdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),
28 this, SLOT(onViewActivated(QMdiSubWindow*)));
30 // Create actions of MDI area
31 QAction* aAction = new QAction(QIcon(":pictures/new_view.png"), tr("Create Window"), aMdiArea);
32 aMdiArea->addAction(aAction);
33 connect(aAction, SIGNAL(triggered(bool)), this, SLOT(createSubWindow()));
35 aAction = new QAction(QIcon(":pictures/tile_views.png"), tr("Tile"), aMdiArea);
36 aMdiArea->addAction(aAction);
37 connect(aAction, SIGNAL(triggered(bool)), aMdiArea, SLOT(tileSubWindows()));
39 aAction = new QAction(QIcon(":pictures/cascade_views.png"), tr("Cascade"), aMdiArea);
40 aMdiArea->addAction(aAction);
41 connect(aAction, SIGNAL(triggered(bool)), this, SLOT(cascadeWindows()));
43 aAction = new QAction(aMdiArea);
44 aAction->setSeparator(true);
45 aMdiArea->addAction(aAction);
47 myViewer = new XGUI_Viewer(this);
48 connect(myViewer, SIGNAL(viewCreated(XGUI_ViewWindow*)),
49 this, SLOT(onViewCreated(XGUI_ViewWindow*)));
50 connect(myViewer, SIGNAL(deleteView(XGUI_ViewWindow*)),
51 this, SLOT(onDeleteView(XGUI_ViewWindow*)));
54 XGUI_MainWindow::~XGUI_MainWindow(void)
58 //******************************************************
59 QMdiArea* XGUI_MainWindow::mdiArea() const
61 return static_cast<QMdiArea*>(centralWidget());
64 //******************************************************
65 void XGUI_MainWindow::showPythonConsole()
67 if (!myPythonConsole) {
69 QDockWidget* aDoc = new QDockWidget(this);
70 aDoc->setFeatures(QDockWidget::AllDockWidgetFeatures | QDockWidget::DockWidgetVerticalTitleBar);
71 aDoc->setMinimumHeight(0);
72 aDoc->setWindowTitle("Console");
73 myPythonConsole = new PyConsole_EnhConsole( aDoc, new PyConsole_EnhInterp());
74 aDoc->setWidget(myPythonConsole);
75 addDockWidget(Qt::TopDockWidgetArea, aDoc);
76 tabifyDockWidget(myMenuBar->getLastDockWindow(), aDoc);
78 myPythonConsole->parentWidget()->show();
81 //******************************************************
82 void XGUI_MainWindow::hidePythonConsole()
85 myPythonConsole->parentWidget()->hide();
88 //******************************************************
89 void XGUI_MainWindow::createSubWindow()
91 viewer()->createView();
94 //******************************************************
95 void XGUI_MainWindow::cascadeWindows()
97 QMdiArea* aMdiArea = static_cast<QMdiArea*>(centralWidget());
98 QList<QMdiSubWindow*> aWindows = aMdiArea->subWindowList();
100 QSize aSize = aMdiArea->size();
101 QRect aRect = aMdiArea->geometry();
102 const int aOffset = 30;
105 int w = aSize.width() / 2;
106 int h = aSize.height() / 2;
107 QMdiSubWindow* aLastWnd;
108 foreach(QMdiSubWindow* aWnd, aWindows) {
112 if ((x + w) > aSize.width()) {
117 if ((y + h) > aSize.height()) {
121 aWnd->setGeometry(QStyle::visualRect(aWnd->layoutDirection(), aRect,
125 viewer()->onWindowActivated(aWnd);
127 QApplication::processEvents();
129 aLastWnd->setFocus();
132 void XGUI_MainWindow::onViewCreated(XGUI_ViewWindow* theWindow)
134 QWidget* aSubWindow = theWindow->parentWidget();
135 QWidget* aMDIWidget = centralWidget();
137 QAction* aAction = new QAction(aSubWindow->windowTitle(), aMDIWidget);
138 aAction->setCheckable(true);
139 connect(aAction, SIGNAL(triggered(bool)), this, SLOT(activateView()));
140 aMDIWidget->addAction(aAction);
142 QList<QAction*> aActions = aMDIWidget->actions();
143 foreach(QAction* aAct, aActions) {
144 if (aAct->isCheckable())
145 aAct->setChecked(false);
147 aAction->setChecked(true);
150 void XGUI_MainWindow::onDeleteView(XGUI_ViewWindow* theWindow)
152 QWidget* aSubWindow = theWindow->parentWidget();
153 QString aTitle = aSubWindow->windowTitle();
154 QWidget* aMDIWidget = centralWidget();
155 QList<QAction*> aActions = aMDIWidget->actions();
157 QAction* aDelAct = 0;
158 foreach(QAction* aAct, aActions) {
159 if (aAct->text() == aTitle) {
164 aMDIWidget->removeAction(aDelAct);
167 void XGUI_MainWindow::activateView()
169 QAction* aAction = static_cast<QAction*>(sender());
170 QString aWndTitle = aAction->text();
171 QMdiArea* aMdiArea = static_cast<QMdiArea*>(centralWidget());
173 QList<QMdiSubWindow*> aWndList = aMdiArea->subWindowList();
174 foreach(QMdiSubWindow* aWnd, aWndList) {
175 if (aWnd->windowTitle() == aWndTitle) {
177 aWnd->activateWindow();
182 QApplication::processEvents();
185 void XGUI_MainWindow::onViewActivated(QMdiSubWindow* theSubWnd)
189 QMdiArea* aMdiArea = static_cast<QMdiArea*>(centralWidget());
190 QString aWndTitle = theSubWnd->windowTitle();
191 QList<QAction*> aActionList = aMdiArea->actions();
192 foreach(QAction* aAct, aActionList) {
193 if (aAct->isCheckable())
194 aAct->setChecked(aAct->text() == aWndTitle);