X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FXGUI%2FXGUI_MainWindow.cpp;h=1400fc0ccc7f4c502b092cbdae6bc5b93cd4532b;hb=037c2e978c242407cc2e4357a84c3ffead3e877d;hp=40a0d26cfae25c68f665bc88c03f02287c5f8586;hpb=196e9b5ccfef56a00ce7764708469685613616c9;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_MainWindow.cpp b/src/XGUI/XGUI_MainWindow.cpp index 40a0d26cf..1400fc0cc 100644 --- a/src/XGUI/XGUI_MainWindow.cpp +++ b/src/XGUI/XGUI_MainWindow.cpp @@ -1,43 +1,56 @@ #include "XGUI_MainWindow.h" +#include "XGUI_Constants.h" #include "XGUI_MainMenu.h" #include "XGUI_ViewWindow.h" #include "XGUI_Viewer.h" +#include "XGUI_ObjectsBrowser.h" #include #include #include -#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - +#include +#include +#include XGUI_MainWindow::XGUI_MainWindow(QWidget* parent) : QMainWindow(parent), - myObjectBrowser(0), myPythonConsole(0) { - setWindowTitle(tr("WINDOW_TITLE")); + setWindowTitle(tr("New Geom")); myMenuBar = new XGUI_MainMenu(this); QMdiArea* aMdiArea = new QMdiArea(this); + aMdiArea->setContextMenuPolicy(Qt::ActionsContextMenu); setCentralWidget(aMdiArea); + connect(aMdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)), + this, SLOT(onViewActivated(QMdiSubWindow*))); + + // Create actions of MDI area + QAction* aAction = new QAction(QIcon(":pictures/new_view.png"), tr("Create Window"), aMdiArea); + aMdiArea->addAction(aAction); + connect(aAction, SIGNAL(triggered(bool)), this, SLOT(createSubWindow())); + + aAction = new QAction(QIcon(":pictures/tile_views.png"), tr("Tile"), aMdiArea); + aMdiArea->addAction(aAction); + connect(aAction, SIGNAL(triggered(bool)), aMdiArea, SLOT(tileSubWindows())); + + aAction = new QAction(QIcon(":pictures/cascade_views.png"), tr("Cascade"), aMdiArea); + aMdiArea->addAction(aAction); + connect(aAction, SIGNAL(triggered(bool)), this, SLOT(cascadeWindows())); + + aAction = new QAction(aMdiArea); + aAction->setSeparator(true); + aMdiArea->addAction(aAction); myViewer = new XGUI_Viewer(this); - - createDockWidgets(); + connect(myViewer, SIGNAL(viewCreated(XGUI_ViewWindow*)), + this, SLOT(onViewCreated(XGUI_ViewWindow*))); + connect(myViewer, SIGNAL(deleteView(XGUI_ViewWindow*)), + this, SLOT(onDeleteView(XGUI_ViewWindow*))); } XGUI_MainWindow::~XGUI_MainWindow(void) @@ -50,18 +63,6 @@ QMdiArea* XGUI_MainWindow::mdiArea() const return static_cast(centralWidget()); } -//****************************************************** -void XGUI_MainWindow::showObjectBrowser() -{ - myObjectBrowser->parentWidget()->show(); -} - -//****************************************************** -void XGUI_MainWindow::hideObjectBrowser() -{ - myObjectBrowser->parentWidget()->hide(); -} - //****************************************************** void XGUI_MainWindow::showPythonConsole() { @@ -72,11 +73,7 @@ void XGUI_MainWindow::showPythonConsole() aDoc->setMinimumHeight(0); aDoc->setWindowTitle("Console"); myPythonConsole = new PyConsole_EnhConsole( aDoc, new PyConsole_EnhInterp()); - //myPythonConsole = new QTextEdit(aDoc); - //myPythonConsole->setGeometry(0,0,200, 50); - //myPythonConsole->setText(">>>"); aDoc->setWidget(myPythonConsole); - //myPythonConsole->setMinimumHeight(0); addDockWidget(Qt::TopDockWidgetArea, aDoc); tabifyDockWidget(myMenuBar->getLastDockWindow(), aDoc); } @@ -90,117 +87,121 @@ void XGUI_MainWindow::hidePythonConsole() myPythonConsole->parentWidget()->hide(); } -/* - * Creates dock widgets, places them in corresponding area - * and tabifies if necessary. - */ -void XGUI_MainWindow::createDockWidgets() +//****************************************************** +void XGUI_MainWindow::createSubWindow() { - QDockWidget* aObjDock = createObjectBrowser(); - addDockWidget(Qt::LeftDockWidgetArea, aObjDock); - QDockWidget* aPropPanelDock = createPropertyPanel(); - addDockWidget(Qt::LeftDockWidgetArea, aPropPanelDock); - - tabifyDockWidget(aPropPanelDock, aObjDock); + viewer()->createView(); } - -QDockWidget* XGUI_MainWindow::createPropertyPanel() +//****************************************************** +void XGUI_MainWindow::cascadeWindows() { - QDockWidget* aPropPanel = new QDockWidget(this); - aPropPanel->setWindowTitle(tr("Property Panel")); - - QWidget* aContent = new QWidget(aPropPanel); - QVBoxLayout* aMainLay = new QVBoxLayout(aContent); - aMainLay->setContentsMargins(3, 3, 3, 3); - aPropPanel->setWidget(aContent); - - QWidget* aCustomWidget = new QWidget(aContent); - aCustomWidget->setObjectName("PropertyPanelWidget"); - aMainLay->addWidget(aCustomWidget); - aMainLay->addStretch(1); - - QFrame* aFrm = new QFrame(aContent); - aFrm->setFrameStyle(QFrame::Sunken); - aFrm->setFrameShape(QFrame::Panel); - QHBoxLayout* aBtnLay = new QHBoxLayout(aFrm); - aBtnLay->setContentsMargins(0, 0, 0, 0); - aMainLay->addWidget(aFrm); - - QPushButton* aBtn = new QPushButton(QIcon(":pictures/button_help.png"), "", aFrm); - aBtn->setFlat(true); - aBtnLay->addWidget(aBtn); - aBtnLay->addStretch(1); - aBtn = new QPushButton(QIcon(":pictures/button_ok.png"), "", aFrm); - aBtn->setFlat(true); - aBtnLay->addWidget(aBtn); - aBtn = new QPushButton(QIcon(":pictures/button_cancel.png"), "", aFrm); - aBtn->setFlat(true); - aBtnLay->addWidget(aBtn); - - return aPropPanel; + QMdiArea* aMdiArea = static_cast(centralWidget()); + QList aWindows = aMdiArea->subWindowList(); + + QSize aSize = aMdiArea->size(); + QRect aRect = aMdiArea->geometry(); + const int aOffset = 30; + int i = 0, j = 0; + int x, y; + int w = aSize.width() / 2; + int h = aSize.height() / 2; + QMdiSubWindow* aLastWnd; + foreach(QMdiSubWindow* aWnd, aWindows) { + aWnd->showNormal(); + aWnd->raise(); + x = aOffset * i; + if ((x + w) > aSize.width()) { + x = 0; + i = 0; + } + y = aOffset * j; + if ((y + h) > aSize.height()) { + y = 0; + j = 0; + } + aWnd->setGeometry(QStyle::visualRect(aWnd->layoutDirection(), aRect, + QRect(x, y, w, h))); + i++; + j++; + viewer()->onWindowActivated(aWnd); + aLastWnd = aWnd; + QApplication::processEvents(); + } + aLastWnd->setFocus(); } -QDockWidget* XGUI_MainWindow::createObjectBrowser() +void XGUI_MainWindow::onViewCreated(XGUI_ViewWindow* theWindow) { - QDockWidget* aObjDock = new QDockWidget(this); - aObjDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - aObjDock->setWindowTitle(tr("OBJECT_BROWSER_TITLE")); - myObjectBrowser = new QTreeWidget(aObjDock); - myObjectBrowser->setColumnCount(1); - myObjectBrowser->setHeaderHidden(true); - aObjDock->setWidget(myObjectBrowser); -// fillObjectBrowser(); - return aObjDock; + QWidget* aSubWindow = theWindow->parentWidget(); + QWidget* aMDIWidget = centralWidget(); + + QAction* aAction = new QAction(aSubWindow->windowTitle(), aMDIWidget); + aAction->setCheckable(true); + connect(aAction, SIGNAL(triggered(bool)), this, SLOT(activateView())); + aMDIWidget->addAction(aAction); + + QList aActions = aMDIWidget->actions(); + foreach(QAction* aAct, aActions) { + if (aAct->isCheckable()) + aAct->setChecked(false); + } + aAction->setChecked(true); } -//****************************************************** - -// TEST FUNCTIONS - -//****************************************************** -void XGUI_MainWindow::fillObjectBrowser() +void XGUI_MainWindow::onDeleteView(XGUI_ViewWindow* theWindow) { - QStringList aNames; - aNames << "Parameters" << "Constructions"; - aNames << "Part 1" << "Part 2" << "Part 3"; - aNames << "Properties"; - - QStringList aIcons; - aIcons << ":pictures/params_folder.png"; - aIcons << ":pictures/constr_folder.png"; - aIcons << ":pictures/part_ico.png"; - aIcons << ":pictures/part_ico.png"; - aIcons << ":pictures/part_ico.png"; - aIcons << ":pictures/properties.png"; - - QList aItems; - foreach(QString aName, aNames) - { - QTreeWidgetItem* aItem = new QTreeWidgetItem(myObjectBrowser); - aItem->setText(0, aName); - aItems.append(aItem); + QWidget* aSubWindow = theWindow->parentWidget(); + QString aTitle = aSubWindow->windowTitle(); + QWidget* aMDIWidget = centralWidget(); + QList aActions = aMDIWidget->actions(); + + QAction* aDelAct = 0; + foreach(QAction* aAct, aActions) { + if (aAct->text() == aTitle) { + aDelAct = aAct; + break; + } } - for(int i = 0; i < aItems.length(); i++) { - aItems[i]->setIcon(0, QIcon(aIcons[i])); - } - myObjectBrowser->addTopLevelItems(aItems); - - for(int i = 2; i < 5; i++) { - QTreeWidgetItem* aItem = new QTreeWidgetItem(aItems[i]); - aItem->setText(0, "Parameters"); - aItem->setIcon(0, QIcon(":pictures/params_folder.png")); - - aItem = new QTreeWidgetItem(aItems[i]); - aItem->setText(0, "Construction"); - aItem->setIcon(0, QIcon(":pictures/constr_folder.png")); + aMDIWidget->removeAction(aDelAct); +} - aItem = new QTreeWidgetItem(aItems[i]); - aItem->setText(0, "Bodies"); - aItem->setIcon(0, QIcon(":pictures/part_ico.png")); +void XGUI_MainWindow::activateView() +{ + QAction* aAction = static_cast(sender()); + QString aWndTitle = aAction->text(); + QMdiArea* aMdiArea = static_cast(centralWidget()); + + QList aWndList = aMdiArea->subWindowList(); + QMdiSubWindow* aTargetView = 0; + foreach(QMdiSubWindow* aWnd, aWndList) { + if (aWnd->windowTitle() == aWndTitle) { + aWnd->raise(); + aWnd->activateWindow(); + aTargetView = aWnd; + break; + } + } + QApplication::processEvents(); + if (aTargetView) + QTimer::singleShot(20, aTargetView, SLOT(setFocus())); +} - aItem = new QTreeWidgetItem(aItems[i]); - aItem->setText(0, "Features"); - aItem->setIcon(0, QIcon(":pictures/features.png")); +void XGUI_MainWindow::onViewActivated(QMdiSubWindow* theSubWnd) +{ + if (!theSubWnd) + return; + QMdiArea* aMdiArea = static_cast(centralWidget()); + QString aWndTitle = theSubWnd->windowTitle(); + QList aActionList = aMdiArea->actions(); + foreach(QAction* aAct, aActionList) { + if (aAct->isCheckable()) + aAct->setChecked(aAct->text() == aWndTitle); } } + +void XGUI_MainWindow::closeEvent(QCloseEvent * event) +{ + emit exitKeySequence(); + event->ignore(); +}