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 #include <QCloseEvent>
19 XGUI_MainWindow::XGUI_MainWindow(QWidget* parent)
20 : QMainWindow(parent),
23 setWindowTitle(tr("New Geom"));
24 myMenuBar = new XGUI_MainMenu(this);
26 QMdiArea* aMdiArea = new QMdiArea(this);
27 aMdiArea->setContextMenuPolicy(Qt::ActionsContextMenu);
28 setCentralWidget(aMdiArea);
29 connect(aMdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),
30 this, SLOT(onViewActivated(QMdiSubWindow*)));
32 // Create actions of MDI area
33 QAction* aAction = new QAction(QIcon(":pictures/new_view.png"), tr("Create Window"), aMdiArea);
34 aMdiArea->addAction(aAction);
35 connect(aAction, SIGNAL(triggered(bool)), this, SLOT(createSubWindow()));
37 aAction = new QAction(QIcon(":pictures/tile_views.png"), tr("Tile"), aMdiArea);
38 aMdiArea->addAction(aAction);
39 connect(aAction, SIGNAL(triggered(bool)), aMdiArea, SLOT(tileSubWindows()));
41 aAction = new QAction(QIcon(":pictures/cascade_views.png"), tr("Cascade"), aMdiArea);
42 aMdiArea->addAction(aAction);
43 connect(aAction, SIGNAL(triggered(bool)), this, SLOT(cascadeWindows()));
45 aAction = new QAction(aMdiArea);
46 aAction->setSeparator(true);
47 aMdiArea->addAction(aAction);
49 myViewer = new XGUI_Viewer(this);
50 connect(myViewer, SIGNAL(viewCreated(XGUI_ViewWindow*)),
51 this, SLOT(onViewCreated(XGUI_ViewWindow*)));
52 connect(myViewer, SIGNAL(deleteView(XGUI_ViewWindow*)),
53 this, SLOT(onDeleteView(XGUI_ViewWindow*)));
56 XGUI_MainWindow::~XGUI_MainWindow(void)
60 //******************************************************
61 QMdiArea* XGUI_MainWindow::mdiArea() const
63 return static_cast<QMdiArea*>(centralWidget());
66 //******************************************************
67 void XGUI_MainWindow::showPythonConsole()
69 if (!myPythonConsole) {
71 QDockWidget* aDoc = new QDockWidget(this);
72 aDoc->setFeatures(QDockWidget::AllDockWidgetFeatures | QDockWidget::DockWidgetVerticalTitleBar);
73 aDoc->setMinimumHeight(0);
74 aDoc->setWindowTitle("Console");
75 myPythonConsole = new PyConsole_EnhConsole( aDoc, new PyConsole_EnhInterp());
76 aDoc->setWidget(myPythonConsole);
77 addDockWidget(Qt::TopDockWidgetArea, aDoc);
78 tabifyDockWidget(myMenuBar->getLastDockWindow(), aDoc);
80 myPythonConsole->parentWidget()->show();
83 //******************************************************
84 void XGUI_MainWindow::hidePythonConsole()
87 myPythonConsole->parentWidget()->hide();
90 //******************************************************
91 void XGUI_MainWindow::createSubWindow()
93 viewer()->createView();
96 //******************************************************
97 void XGUI_MainWindow::cascadeWindows()
99 QMdiArea* aMdiArea = static_cast<QMdiArea*>(centralWidget());
100 QList<QMdiSubWindow*> aWindows = aMdiArea->subWindowList();
102 QSize aSize = aMdiArea->size();
103 QRect aRect = aMdiArea->geometry();
104 const int aOffset = 30;
107 int w = aSize.width() / 2;
108 int h = aSize.height() / 2;
109 QMdiSubWindow* aLastWnd;
110 foreach(QMdiSubWindow* aWnd, aWindows) {
114 if ((x + w) > aSize.width()) {
119 if ((y + h) > aSize.height()) {
123 aWnd->setGeometry(QStyle::visualRect(aWnd->layoutDirection(), aRect,
127 viewer()->onWindowActivated(aWnd);
129 QApplication::processEvents();
131 aLastWnd->setFocus();
134 void XGUI_MainWindow::onViewCreated(XGUI_ViewWindow* theWindow)
136 QWidget* aSubWindow = theWindow->parentWidget();
137 QWidget* aMDIWidget = centralWidget();
139 QAction* aAction = new QAction(aSubWindow->windowTitle(), aMDIWidget);
140 aAction->setCheckable(true);
141 connect(aAction, SIGNAL(triggered(bool)), this, SLOT(activateView()));
142 aMDIWidget->addAction(aAction);
144 QList<QAction*> aActions = aMDIWidget->actions();
145 foreach(QAction* aAct, aActions) {
146 if (aAct->isCheckable())
147 aAct->setChecked(false);
149 aAction->setChecked(true);
152 void XGUI_MainWindow::onDeleteView(XGUI_ViewWindow* theWindow)
154 QWidget* aSubWindow = theWindow->parentWidget();
155 QString aTitle = aSubWindow->windowTitle();
156 QWidget* aMDIWidget = centralWidget();
157 QList<QAction*> aActions = aMDIWidget->actions();
159 QAction* aDelAct = 0;
160 foreach(QAction* aAct, aActions) {
161 if (aAct->text() == aTitle) {
166 aMDIWidget->removeAction(aDelAct);
169 void XGUI_MainWindow::activateView()
171 QAction* aAction = static_cast<QAction*>(sender());
172 QString aWndTitle = aAction->text();
173 QMdiArea* aMdiArea = static_cast<QMdiArea*>(centralWidget());
175 QList<QMdiSubWindow*> aWndList = aMdiArea->subWindowList();
176 QMdiSubWindow* aTargetView = 0;
177 foreach(QMdiSubWindow* aWnd, aWndList) {
178 if (aWnd->windowTitle() == aWndTitle) {
180 aWnd->activateWindow();
185 QApplication::processEvents();
187 QTimer::singleShot(20, aTargetView, SLOT(setFocus()));
190 void XGUI_MainWindow::onViewActivated(QMdiSubWindow* theSubWnd)
194 QMdiArea* aMdiArea = static_cast<QMdiArea*>(centralWidget());
195 QString aWndTitle = theSubWnd->windowTitle();
196 QList<QAction*> aActionList = aMdiArea->actions();
197 foreach(QAction* aAct, aActionList) {
198 if (aAct->isCheckable())
199 aAct->setChecked(aAct->text() == aWndTitle);
203 void XGUI_MainWindow::closeEvent(QCloseEvent * event)
205 emit exitKeySequence();