35 #include <QVBoxLayout> 44 mShiftSplitterLeft(NULL),
45 mShiftSplitterRight(NULL),
49 QVBoxLayout* layout =
new QVBoxLayout(
this);
51 layout->setSpacing(0);
53 mSplitter =
new QSplitter(Qt::Horizontal);
54 connect(mSplitter, &QSplitter::splitterMoved,
this, &ControllableSplitter::onSplitterMoved);
56 layout->addWidget(mSplitter, 1);
58 mSplitterRatio = this->getSplitterRatioOption().
readValue(QString::number(0.5)).toDouble();
61 QTimer::singleShot(0,
this, SLOT(initializeSettings()));
66 this->getSplitterRatioOption().
writeValue(QString::number(mSplitterRatio));
67 this->getShiftStateOption().
writeValue(QString::number(this->getShiftState()));
83 mSplitter->insertWidget(0, widget);
88 mSplitter->insertWidget(1, widget);
91 void ControllableSplitter::initializeSettings()
93 this->setShiftState(this->getShiftStateOption().readValue(
"0").toInt());
94 this->onSplitterMoved();
99 if (!mShiftSplitterLeft)
101 QAction* action =
new QAction(QIcon(
":/icons/open_icon_library/arrow-left-3.png"),
102 QString(
"Show %1").arg(mRightName),
this);
103 action->setToolTip(QString(
"Show more %1").arg(mRightName));
104 action->setStatusTip(action->toolTip());
105 connect(action, &QAction::triggered,
this, &ControllableSplitter::onMoveSplitterLeft);
106 mShiftSplitterLeft = action;
107 this->enableActions();
109 return mShiftSplitterLeft;
114 if (!mShiftSplitterRight)
116 QAction* action =
new QAction(QIcon(
":/icons/open_icon_library/arrow-right-3.png"),
117 QString(
"Show %1").arg(mLeftName),
this);
118 action->setToolTip(QString(
"Show more %1").arg(mLeftName));
119 action->setStatusTip(action->toolTip());
120 connect(action, &QAction::triggered,
this, &ControllableSplitter::onMoveSplitterRight);
121 mShiftSplitterRight = action;
122 this->enableActions();
124 return mShiftSplitterRight;
127 void ControllableSplitter::onMoveSplitterLeft()
129 this->shiftSplitter(-1);
132 void ControllableSplitter::onMoveSplitterRight()
134 this->shiftSplitter(+1);
137 void ControllableSplitter::onSplitterMoved()
139 QList<int> sizes = mSplitter->sizes();
140 if (this->splitterShowsBoth())
141 mSplitterRatio = double(sizes[0]) /double(sizes[0]+sizes[1]);
143 this->enableActions();
146 void ControllableSplitter::enableActions()
148 if (mShiftSplitterLeft)
149 mShiftSplitterLeft->setEnabled(this->getShiftState()>=0);
150 if (mShiftSplitterRight)
151 mShiftSplitterRight->setEnabled(this->getShiftState()<=0);
154 bool ControllableSplitter::splitterShowsBoth()
const 156 QList<int> sizes = mSplitter->sizes();
157 return (( sizes.size()==2 )&&( sizes[0]!=0 )&&( sizes[1]!=0 ));
160 int ControllableSplitter::getShiftState()
const 162 QList<int> sizes = mSplitter->sizes();
177 void ControllableSplitter::setShiftState(
int shiftState)
179 QList<int> sizes = mSplitter->sizes();
186 else if (shiftState>0)
193 int sizesum = sizes[0]+sizes[1];
196 sizes[0] = mSplitterRatio * sizesum;
197 sizes[1] = (1.0-mSplitterRatio) * sizesum;
200 mSplitter->setSizes(sizes);
202 this->onSplitterMoved();
205 void ControllableSplitter::shiftSplitter(
int shift)
209 int shiftState = this->getShiftState();
211 this->setShiftState(shiftState);
void addLeftWidget(QWidget *widget, QString name)
QDomElement getElement()
return the current element
Helper class for storing one string value in an xml document.
void writeValue(const QString &val)
ControllableSplitter(XmlOptionFile options, QWidget *parent)
void addRightWidget(QWidget *widget, QString name)
Helper class for xml files used to store ssc/cx data.
QAction * getMoveLeftAction()
QString readValue(const QString &defval) const
QAction * getMoveRightAction()
Namespace for all CustusX production code.