Salome HOME
Merge branch 'master' of newgeom:newgeom
[modules/shaper.git] / src / XGUI / XGUI_MainMenu.cpp
1 #include <XGUI_MainMenu.h>
2 #include <XGUI_Workbench.h>
3 #include <XGUI_MainWindow.h>
4 #include <XGUI_Command.h>
5
6 #include <QLayout>
7 #include <QTabWidget>
8 #include <QLabel>
9 #include <QDockWidget>
10 #include <QEvent>
11
12 XGUI_MainMenu::XGUI_MainMenu(XGUI_MainWindow *parent)
13     : QObject(parent), myDesktop(parent)
14 {
15   parent->setTabPosition(Qt::TopDockWidgetArea, QTabWidget::North);
16   myDesktop->setStyleSheet("QTabBar::tab {height: 24px;}");
17   myGeneralPage = addWorkbench(tr("General"));
18   myGeneralPage->parentWidget()->setMaximumWidth(200);
19   myGeneralPage->installEventFilter(this);
20 //  QString aStyle = myDesktop->styleSheet();
21 //  aStyle += " QTabBar::tab {min-height: 24px;}";
22 }
23
24 XGUI_MainMenu::~XGUI_MainMenu(void)
25 {
26 }
27
28 XGUI_Workbench* XGUI_MainMenu::addWorkbench(const QString& theId, const QString& theTitle)
29 {
30   QDockWidget* aDock = new QDockWidget(myDesktop);
31   aDock->setFeatures(QDockWidget::DockWidgetVerticalTitleBar);
32   aDock->setAllowedAreas(Qt::TopDockWidgetArea);
33   QString aTitle = theTitle;
34   if (aTitle.isEmpty()) {
35     aTitle = tr(theId.toLatin1().constData());
36   }
37   aDock->setWindowTitle(aTitle);
38   aDock->setMinimumHeight(30);
39   aDock->setContentsMargins(0, 0, 0, 0);
40
41   XGUI_Workbench* aPage = new XGUI_Workbench(aDock);
42   aPage->setObjectName(theId);
43   aDock->setWidget(aPage);
44
45   myDesktop->addDockWidget(Qt::TopDockWidgetArea, aDock);
46   if (myMenuTabs.length() > 1) {
47     myDesktop->tabifyDockWidget(myMenuTabs.last(), aDock);
48   }
49
50   myMenuTabs.append(aDock);
51   return aPage;
52 }
53
54 /*
55  * Searches for already created workbench with given name.
56  */
57 XGUI_Workbench* XGUI_MainMenu::findWorkbench(const QString& theObjName) const
58 {
59   return myDesktop->findChild<XGUI_Workbench*>(theObjName);
60 }
61
62
63 bool XGUI_MainMenu::eventFilter(QObject *theWatched, QEvent *theEvent)
64 {
65   if (theWatched == myGeneralPage) {
66     if (theEvent->type() == QEvent::Show) {
67       myGeneralPage->parentWidget()->setMaximumWidth(16777215);
68       myGeneralPage->removeEventFilter(this);
69     }
70   }
71   return QObject::eventFilter(theWatched, theEvent);
72 }
73
74 XGUI_Command* XGUI_MainMenu::feature(const QString& theId) const
75 {
76   QList<QDockWidget*>::const_iterator aIt;
77   for (aIt = myMenuTabs.constBegin(); aIt != myMenuTabs.constEnd(); ++aIt) {
78     XGUI_Workbench* aWbn = static_cast<XGUI_Workbench*>((*aIt)->widget());
79     XGUI_Command* aCmd = aWbn->feature(theId);
80     if (aCmd)
81       return aCmd;
82   }
83   return 0;
84 }
85
86 QList<XGUI_Command*> XGUI_MainMenu::features() const
87 {
88   QList<XGUI_Command*> aList;
89   QList<QDockWidget*>::const_iterator aIt;
90   for (aIt = myMenuTabs.constBegin(); aIt != myMenuTabs.constEnd(); ++aIt) {
91     XGUI_Workbench* aWbn = static_cast<XGUI_Workbench*>((*aIt)->widget());
92     aList.append(aWbn->features());
93   }
94   return aList;
95 }
96
97 QList<XGUI_Workbench*> XGUI_MainMenu::workbenches() const
98 {
99   QList<XGUI_Workbench*> aList;
100   aList.append(myGeneralPage);
101   foreach(QDockWidget* aDoc, myMenuTabs) {
102     XGUI_Workbench* aWb = dynamic_cast<XGUI_Workbench*>(aDoc->widget());
103     if (aWb)
104       aList.append(aWb);
105   }
106   return aList;
107 }