31 #include <QSizePolicy>
33 #include <qtreeview.h>
39 Qt::WindowFlags flags) :
40 QDockWidget(title, parent, flags)
42 gui::CollapsibleDockWidget::TitleBar* titleBar =
new gui::CollapsibleDockWidget::TitleBar(
this);
43 setTitleBarWidget(titleBar);
47 QDockWidget(parent, flags)
49 gui::CollapsibleDockWidget::TitleBar* titleBar =
new gui::CollapsibleDockWidget::TitleBar(
this);
50 setTitleBarWidget(titleBar);
56 gui::CollapsibleDockWidget::InnerWidgetWrapper* wid =
57 new gui::CollapsibleDockWidget::InnerWidgetWrapper(
this);
59 QDockWidget::setWidget(wid);
70 gui::CollapsibleDockWidget::InnerWidgetWrapper* innerWidget =
71 dynamic_cast<gui::CollapsibleDockWidget::InnerWidgetWrapper*
>(widget());
73 if (innerWidget != NULL)
75 innerWidget->setCollapsed(collapsed);
79 std::cerr <<
"DockWidget is not collapsible" << std::endl;
86 gui::CollapsibleDockWidget::InnerWidgetWrapper* innerWidget =
87 dynamic_cast<gui::CollapsibleDockWidget::InnerWidgetWrapper*
>(widget());
88 return innerWidget != NULL ? innerWidget->isCollapsed() :
false;
94 setCollapsed(!isCollapsed());
100 gui::CollapsibleDockWidget::TitleBar* titleBar =
101 dynamic_cast<gui::CollapsibleDockWidget::TitleBar*
>(this->titleBarWidget());
105 titleBar->windowTitleChanged();
109 gui::CollapsibleDockWidget::InnerWidgetWrapper::InnerWidgetWrapper(QDockWidget* parent) :
110 QWidget(parent), widget(NULL), hlayout(new QHBoxLayout(this)), widget_height(0), oldSize(0, 0)
112 this->hlayout->setSpacing(0);
113 this->hlayout->setContentsMargins(0, 0, 0, 0);
114 this->setLayout(this->hlayout);
115 QDockWidget* parentDockWidget =
dynamic_cast<QDockWidget*
>(parent);
116 assert(parentDockWidget != NULL);
117 oldMinimumSizeParent = parentDockWidget->minimumSize();
118 oldMaximumSizeParent = parentDockWidget->maximumSize();
119 oldMinimumSize = minimumSize();
120 oldMaximumSize = maximumSize();
124 gui::CollapsibleDockWidget::InnerWidgetWrapper::setWidget(QWidget* widget)
126 this->widget = widget;
127 this->widget_height = widget->height();
128 this->layout()->addWidget(widget);
129 this->oldSize = this->size();
130 QDockWidget* parentDockWidget =
dynamic_cast<QDockWidget*
>(this->parent());
131 assert(parentDockWidget != NULL);
132 oldMinimumSizeParent = parentDockWidget->minimumSize();
133 oldMaximumSizeParent = parentDockWidget->maximumSize();
134 oldMinimumSize = minimumSize();
135 oldMaximumSize = maximumSize();
139 gui::CollapsibleDockWidget::InnerWidgetWrapper::isCollapsed()
141 return !this->widget->isVisible();
145 gui::CollapsibleDockWidget::InnerWidgetWrapper::setCollapsed(
bool collapsed)
147 QDockWidget* parentDockWidget =
dynamic_cast<QDockWidget*
>(this->parent());
148 assert(parentDockWidget != NULL);
149 gui::CollapsibleDockWidget::TitleBar* parentDockWidgetTitleBar =
150 dynamic_cast<gui::CollapsibleDockWidget::TitleBar*
>(parentDockWidget->titleBarWidget());
151 assert(parentDockWidgetTitleBar != NULL);
155 parentDockWidget->setMinimumSize(oldMinimumSizeParent);
156 parentDockWidget->setMaximumSize(oldMaximumSizeParent);
157 this->widget->show();
158 parentDockWidgetTitleBar->showTitle(
true);
159 this->layout()->addWidget(this->widget);
160 this->setMinimumSize(oldMinimumSize);
161 this->setMaximumSize(oldMaximumSize);
162 this->setBaseSize(this->oldSize);
163 this->resize(this->oldSize);
167 this->oldSize = this->size();
168 oldMinimumSizeParent = parentDockWidget->minimumSize();
169 oldMaximumSizeParent = parentDockWidget->maximumSize();
170 oldMinimumSize = minimumSize();
171 oldMaximumSize = maximumSize();
172 this->layout()->removeWidget(this->widget);
173 this->widget->hide();
174 parentDockWidgetTitleBar->showTitle(
false);
175 parentDockWidget->setMinimumSize(25, 25);
176 parentDockWidget->setMaximumSize(25, 25);
177 QTimer::singleShot(1, parentDockWidget, SLOT(setCollapsedSizes()));
182 gui::CollapsibleDockWidget::setCollapsedSizes()
184 gui::CollapsibleDockWidget::InnerWidgetWrapper* innerWidget =
185 dynamic_cast<gui::CollapsibleDockWidget::InnerWidgetWrapper*
>(widget());
186 assert(innerWidget != NULL);
187 setMinimumSize(25, 25);
189 if (features() & QDockWidget::DockWidgetVerticalTitleBar)
191 setMaximumSize(25, innerWidget->getOldMaximumSizeParent().height());
195 setMaximumSize(innerWidget->getOldMaximumSizeParent().width(), 25);
199 gui::CollapsibleDockWidget::TitleBar::TitleBar(QWidget* parent) :
201 hlayout(new QHBoxLayout(this)),
202 collapse(new QPushButton(this)),
203 title(new QLabel(parent->windowTitle()))
205 this->hlayout->setDirection(QBoxLayout::Direction::RightToLeft);
206 this->hlayout->setSpacing(0);
207 this->hlayout->setContentsMargins(0, 0, 0, 0);
208 this->setLayout(this->hlayout);
209 this->hlayout->addWidget(collapse);
210 collapse->setIcon(QIcon(
":/images/branch-open.png"));
211 collapse->setCheckable(
false);
212 collapse->setFixedSize(20, 20);
213 connect(collapse, SIGNAL(released()), parent, SLOT(
toggleCollapsed()));
214 this->hlayout->addStretch();
215 this->hlayout->addWidget(title);
219 gui::CollapsibleDockWidget::TitleBar::windowTitleChanged()
221 QDockWidget* parentDockWidget =
dynamic_cast<QDockWidget*
>(this->parent());
222 title->setText(parentDockWidget->windowTitle());
226 gui::CollapsibleDockWidget::TitleBar::showTitle(
bool show)
228 title->setVisible(show);
232 collapse->setIcon(QIcon(
":/images/branch-open.png"));
236 collapse->setIcon(QIcon(
":/images/branch-closed.png"));
241 gui::CollapsibleDockWidget::InnerWidgetWrapper::getOldMaximumSizeParent()
const
243 return oldMaximumSizeParent;