diff options
Diffstat (limited to 'client')
| -rw-r--r-- | client/client.pro | 2 | ||||
| -rw-r--r-- | client/collapser.cc | 132 | ||||
| -rw-r--r-- | client/collapser.h | 63 | 
3 files changed, 197 insertions, 0 deletions
| diff --git a/client/client.pro b/client/client.pro index de6c7fc..2ce4fa7 100644 --- a/client/client.pro +++ b/client/client.pro @@ -23,6 +23,7 @@ unix {  }  HEADERS += \ +	collapser.h \          formatparser.h \          lua.h \          macro.h \ @@ -49,6 +50,7 @@ HEADERS += \  SOURCES += \          pracro.cc \ +	collapser.cc \          formatparser.cc \          lua.cc \          macro.cc \ diff --git a/client/collapser.cc b/client/collapser.cc new file mode 100644 index 0000000..391f9b1 --- /dev/null +++ b/client/collapser.cc @@ -0,0 +1,132 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            collapser.cc + * + *  Mon Sep 15 09:48:46 CEST 2008 + *  Copyright 2008 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of Pracro. + * + *  Pracro is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  Pracro is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with Pracro; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "collapser.h" + +#include <QHBoxLayout> + +#define ANIM_TIME 250 +#define ANIM_INTERVAL 25 + +Collapser::Collapser(QWidget *collapsed, QWidget *expanded, bool setcollapsed) +{ +  setLayout(new QHBoxLayout()); +  layout()->setContentsMargins(0,0,0,0); + +  this->collapsed = collapsed; +  collapsed->show(); +  c_height = collapsed->height(); +  collapsed->setVisible(false); + +  this->expanded = expanded; +  expanded->show(); +  e_height = expanded->height(); +  expanded->setVisible(false); + +  collapsed->setVisible(false); +  expanded->setVisible(false); + +  setCollapsed(setcollapsed); +} + +bool Collapser::isCollapsed() +{ +  return is_collapsed; +} + +void Collapser::setCollapsed(bool setcollapsed) +{ +  if(this->is_collapsed == setcollapsed) return; + +  if(setcollapsed) collapse(); +  else expand(); +} + +void Collapser::collapse() +{ +  t_anim.start(); + + +  is_collapsed = true; +  timer_id = startTimer(ANIM_INTERVAL); +} + +void Collapser::expand() +{ +  t_anim.start(); + +  // show expanded +  collapsed->setVisible(false); +  layout()->removeWidget(collapsed); +  layout()->addWidget(expanded); +  expanded->setVisible(true); +   +  is_collapsed = false; +  timer_id = startTimer(ANIM_INTERVAL); +} + +void Collapser::toggleCollapse() +{ +  if(!is_collapsed) collapse(); + +  else expand(); +} + +void Collapser::anim() +{ +  killTimer(timer_id); + +  double x = (double)(t_anim.elapsed()) / ANIM_TIME; +  double y = 1; + +  if(x < 1) { +    y = x * x * x; + +    timer_id = startTimer(ANIM_INTERVAL); +  } else { + +    if(is_collapsed) { +      // show collapsed +      expanded->setVisible(false); +      layout()->removeWidget(expanded); +      layout()->addWidget(collapsed); +      collapsed->setVisible(true); +       +    } + +  } + +  if(!is_collapsed) { +    setFixedHeight((1 - y) * c_height + y * e_height); +  } else { +    setFixedHeight((1 - y) * e_height + y * c_height); +  } +} + +void Collapser::timerEvent(QTimerEvent *) +{ +  anim(); +} diff --git a/client/collapser.h b/client/collapser.h new file mode 100644 index 0000000..6e9c8b4 --- /dev/null +++ b/client/collapser.h @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            collapser.h + * + *  Mon Sep 15 09:48:46 CEST 2008 + *  Copyright 2008 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of Pracro. + * + *  Pracro is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  Pracro is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with Pracro; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#ifndef __PRACRO_COLLAPSER_H__ +#define __PRACRO_COLLAPSER_H__ + +#include <QWidget> +#include <QTime> + +class Collapser : public QWidget { +Q_OBJECT +public: +  Collapser(QWidget *collapsed, QWidget *expanded, bool setcollapsed = true); + +  bool isCollapsed(); +  void setCollapsed(bool setcollapsed); + +public slots: +  void collapse(); +  void expand(); +  void toggleCollapse(); + +protected: +  void timerEvent(QTimerEvent *); + +private: +  QWidget *collapsed; +  int c_height; + +  QWidget *expanded; +  int e_height; + +  bool is_collapsed; + +  void anim(); +  QTime t_anim; +  int timer_id; +}; + +#endif/*__PRACRO_COLLAPSER_H__*/ | 
