summaryrefslogtreecommitdiff
path: root/client/collapser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'client/collapser.cc')
-rw-r--r--client/collapser.cc105
1 files changed, 79 insertions, 26 deletions
diff --git a/client/collapser.cc b/client/collapser.cc
index 391f9b1..7faf175 100644
--- a/client/collapser.cc
+++ b/client/collapser.cc
@@ -33,25 +33,55 @@
Collapser::Collapser(QWidget *collapsed, QWidget *expanded, bool setcollapsed)
{
+ this->collapsed = NULL;
+ this->expanded = NULL;
+
setLayout(new QHBoxLayout());
layout()->setContentsMargins(0,0,0,0);
+ setWidgets(collapsed, expanded);
+
+ is_collapsed = !setcollapsed; // Make sure setCollapsed actually does something.
+ setCollapsed(setcollapsed);
+}
+
+void Collapser::setWidgets(QWidget *collapsed, QWidget *expanded)
+{
+ setCollapsedWidget(collapsed);
+ setExpandedWidget(expanded);
+}
+
+void Collapser::setCollapsedWidget(QWidget *collapsed)
+{
+ if(this->collapsed) {
+ // delete this->collapsed;
+ this->collapsed = NULL;
+ }
+
this->collapsed = collapsed;
- collapsed->show();
- c_height = collapsed->height();
- collapsed->setVisible(false);
+}
+
+void Collapser::setExpandedWidget(QWidget *expanded)
+{
+ if(this->expanded) {
+ // delete this->expanded;
+ this->expanded = NULL;
+ }
this->expanded = expanded;
- expanded->show();
- e_height = expanded->height();
- expanded->setVisible(false);
+}
- collapsed->setVisible(false);
- expanded->setVisible(false);
+QWidget *Collapser::collapsedWidget()
+{
+ return collapsed;
+}
- setCollapsed(setcollapsed);
+QWidget *Collapser::expandedWidget()
+{
+ return expanded;
}
+
bool Collapser::isCollapsed()
{
return is_collapsed;
@@ -69,7 +99,6 @@ void Collapser::collapse()
{
t_anim.start();
-
is_collapsed = true;
timer_id = startTimer(ANIM_INTERVAL);
}
@@ -79,10 +108,14 @@ void Collapser::expand()
t_anim.start();
// show expanded
- collapsed->setVisible(false);
- layout()->removeWidget(collapsed);
- layout()->addWidget(expanded);
- expanded->setVisible(true);
+ if(collapsed) {
+ collapsed->setVisible(false);
+ layout()->removeWidget(collapsed);
+ }
+ if(expanded) {
+ layout()->addWidget(expanded);
+ expanded->setVisible(true);
+ }
is_collapsed = false;
timer_id = startTimer(ANIM_INTERVAL);
@@ -91,12 +124,25 @@ void Collapser::expand()
void Collapser::toggleCollapse()
{
if(!is_collapsed) collapse();
-
else expand();
}
void Collapser::anim()
{
+ int c_height = 16;
+ int e_height = 16;
+ if(collapsed) {
+ QSize sz = collapsed->minimumSizeHint();
+ c_height = sz.height();
+ //c_height = collapsed->minimumHeight();
+ }
+
+ if(expanded) {
+ QSize sz = expanded->minimumSizeHint();
+ e_height = sz.height();
+ //e_height = expanded->minimumHeight();
+ }
+
killTimer(timer_id);
double x = (double)(t_anim.elapsed()) / ANIM_TIME;
@@ -105,25 +151,32 @@ void Collapser::anim()
if(x < 1) {
y = x * x * x;
+ if(!is_collapsed) {
+ setFixedHeight((1 - y) * c_height + y * e_height);
+ } else {
+ setFixedHeight((1 - y) * e_height + y * c_height);
+ }
+
timer_id = startTimer(ANIM_INTERVAL);
} else {
if(is_collapsed) {
// show collapsed
- expanded->setVisible(false);
- layout()->removeWidget(expanded);
- layout()->addWidget(collapsed);
- collapsed->setVisible(true);
-
+ if(expanded) {
+ expanded->setVisible(false);
+ layout()->removeWidget(expanded);
+ }
+ if(collapsed) {
+ layout()->addWidget(collapsed);
+ collapsed->setVisible(true);
+ }
+
+ setFixedHeight(c_height);
+ } else {
+ setFixedHeight(e_height);
}
}
-
- if(!is_collapsed) {
- setFixedHeight((1 - y) * c_height + y * e_height);
- } else {
- setFixedHeight((1 - y) * e_height + y * c_height);
- }
}
void Collapser::timerEvent(QTimerEvent *)