Salome HOME
3173f97aa8b67f932904b4b136d4baba693dfc35
[modules/shaper.git] / src / XGUI / XGUI_MenuGroupPanel.cpp
1 #include "XGUI_MenuGroupPanel.h"
2 #include "XGUI_Command.h"
3
4 #include <QLayout>
5 #include <QPushButton>
6 #include <QAction>
7 #include <QResizeEvent>
8
9 #include <math.h>
10
11 XGUI_MenuGroupPanel::XGUI_MenuGroupPanel(QWidget *parent) :
12     QWidget(parent), myNewRow(0), myNewCol(0), myMaxRow(1)
13 {
14     myLayout = new QGridLayout(this);
15     myLayout->setSpacing(0);
16     myLayout->setMargin(0);
17     myLayout->setContentsMargins(0,0,0,0);
18 }
19
20
21 void XGUI_MenuGroupPanel::addCommand(XGUI_Command* theAction)
22 {
23     myActions[theAction] = theAction->requestWidget(this);
24     addWidget(myActions[theAction]);
25 }
26
27 void XGUI_MenuGroupPanel::placeWidget(QWidget* theWgt)
28 {
29     if (myMaxRow == myNewRow) {
30         myNewRow = 0;
31         myNewCol++;
32     }
33     myLayout->addWidget(theWgt, myNewRow, myNewCol, Qt::AlignLeft);
34     myNewRow++;
35 }
36
37 void XGUI_MenuGroupPanel::addWidget(QWidget* theWgt)
38 {
39     placeWidget(theWgt);
40 }
41
42
43 void XGUI_MenuGroupPanel::resizeEvent(QResizeEvent* theEvent)
44 {
45     QWidget::resizeEvent(theEvent);
46     if (myActions.size() == 0)
47         return;
48
49     int aH = theEvent->size().height();
50     int aMaxRow = (int) floor(double(aH / MIN_BUTTON_HEIGHT));
51     if (aMaxRow == myMaxRow)
52         return;
53
54     myMaxRow = aMaxRow;
55     QListIterator<QWidget*> aIt(myActions.values());
56     myNewRow = 0;
57     myNewCol = 0;
58     while (aIt.hasNext()) {
59        placeWidget(aIt.next());
60     }
61 }
62
63 XGUI_Command* XGUI_MenuGroupPanel::addFeature(const QString& theId, const QString& theTitle, 
64                                               const QString& theTip, 
65                                               const QIcon& theIcon, 
66                                               const QKeySequence& theKeys)
67 {
68     XGUI_Command* aCommand = new XGUI_Command(theId, theIcon, theTitle, this);
69     aCommand->setToolTip(theTip);
70     if (!theKeys.isEmpty())
71         aCommand->setShortcut(theKeys);
72
73     addCommand(aCommand);
74     return aCommand;
75 }