2 * NewGeom_NestedButton.cpp
4 * Created on: Apr 13, 2015
8 #include <NewGeom_NestedButton.h>
12 #include <QHBoxLayout>
13 #include <QToolButton>
15 NewGeom_NestedButton::NewGeom_NestedButton(QObject* theParent,
16 const QList<QAction*>& theNestedActions)
17 : QWidgetAction(theParent),
18 myNestedActions(theNestedActions),
19 myAdditionalButtonsWidget(0),
25 NewGeom_NestedButton::~NewGeom_NestedButton()
29 void NewGeom_NestedButton::showAdditionalButtons(bool isShow)
31 myAdditionalButtonsWidget->setVisible(isShow);
33 myButtonFrame->setFrameStyle(QFrame::WinPanel);
34 myButtonFrame->setFrameShadow(QFrame::Sunken);
35 myThisButton->setAutoRaise(false);
37 myButtonFrame->setFrameStyle(QFrame::NoFrame);
38 myButtonFrame->setFrameShadow(QFrame::Plain);
39 myThisButton->setAutoRaise(true);
43 QWidget * NewGeom_NestedButton::createWidget(QWidget * theParent)
45 myButtonFrame = new QFrame(theParent);
46 QHBoxLayout* aBoxLay = new QHBoxLayout(myButtonFrame);
47 aBoxLay->setContentsMargins(2, 0, 0, 0);
48 aBoxLay->setSpacing(1);
49 QSizePolicy aSizePolicy;
50 aSizePolicy.setControlType(QSizePolicy::ToolButton);
51 myButtonFrame->setSizePolicy(aSizePolicy);
53 myThisButton = new QToolButton(myButtonFrame);
54 myThisButton->setDefaultAction(this);
55 myThisButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
56 aBoxLay->addWidget(myThisButton, 1);
58 myAdditionalButtonsWidget = new QWidget(myButtonFrame);
59 QHBoxLayout* aAdditionalBoxLay = new QHBoxLayout(myAdditionalButtonsWidget);
60 aAdditionalBoxLay->setContentsMargins(0, 0, 0, 0);
61 aAdditionalBoxLay->setSpacing(1);
62 foreach (QAction* eachAct, myNestedActions) {
63 QToolButton* aButton = new QToolButton(myButtonFrame);
64 aButton->setDefaultAction(eachAct);
65 aButton->setAutoRaise(true);
66 aAdditionalBoxLay->addWidget(aButton);
68 myAdditionalButtonsWidget->setLayout(aAdditionalBoxLay);
69 aBoxLay->addWidget(myAdditionalButtonsWidget);
71 myButtonFrame->setLayout(aBoxLay);
73 showAdditionalButtons(false);
74 connect(this, SIGNAL(toggled(bool)), this, SLOT(showAdditionalButtons(bool)));
75 connect(this, SIGNAL(changed()), this, SLOT(actionStateChanged()));
79 void NewGeom_NestedButton::actionStateChanged()