X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxtgroupbox.cpp;fp=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxtgroupbox.cpp;h=c56349cc58ef8eb319431231e9d3a1b66a5abe1c;hp=0000000000000000000000000000000000000000;hb=a634acadbcf6017474f68a3eaf7cb632660e9e49;hpb=cd122ca8e0d2c0ffc5397e0a813c75d791a7e6e3 diff --git a/src/contrib/libqxt-2007-10-24/src/gui/qxtgroupbox.cpp b/src/contrib/libqxt-2007-10-24/src/gui/qxtgroupbox.cpp new file mode 100644 index 00000000..c56349cc --- /dev/null +++ b/src/contrib/libqxt-2007-10-24/src/gui/qxtgroupbox.cpp @@ -0,0 +1,149 @@ +/**************************************************************************** +** +** Copyright (C) Qxt Foundation. Some rights reserved. +** +** This file is part of the QxtGui module of the Qt eXTension library +** +** This library is free software; you can redistribute it and/or modify it +** under the terms of th Common Public License, version 1.0, as published by +** IBM. +** +** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY +** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY +** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR +** FITNESS FOR A PARTICULAR PURPOSE. +** +** You should have received a copy of the CPL along with this file. +** See the LICENSE file and the cpl1.0.txt file included with the source +** distribution for more information. If you did not receive a copy of the +** license, contact the Qxt Foundation. +** +** +** +****************************************************************************/ +#include "qxtgroupbox.h" + +#include + +class QxtGroupBoxPrivate : public QxtPrivate +{ +public: + QXT_DECLARE_PUBLIC(QxtGroupBox); + + QxtGroupBoxPrivate(); + void init(); + bool collapsive; +}; + +QxtGroupBoxPrivate::QxtGroupBoxPrivate() : collapsive(true) +{} + +void QxtGroupBoxPrivate::init() +{ + qxt_p().setCheckable(true); + qxt_p().setChecked(true); + QObject::connect(&qxt_p(), SIGNAL(toggled(bool)), &qxt_p(), SLOT(setExpanded(bool))); +} + +/*! + \class QxtGroupBox QxtGroupBox + \ingroup QxtGui + \brief A collapsive and checkable QGroupBox. + + QxtGroupBox is a checkable group box automatically expanding/collapsing + its content according to the check state. QxtGroupBox shows its children + when checked and hides its children when unchecked. + + \image html qxtgroupbox.png "Two QxtGroupBoxes - an expanded and a collapsed - on top of each other." + */ + +/*! + Constructs a new QxtGroupBox with \a parent. + */ +QxtGroupBox::QxtGroupBox(QWidget* parent) + : QGroupBox(parent) +{ + QXT_INIT_PRIVATE(QxtGroupBox); + qxt_d().init(); +} + +/*! + Constructs a new QxtGroupBox with \a title and \a parent. + */ +QxtGroupBox::QxtGroupBox(const QString& title, QWidget* parent) + : QGroupBox(title, parent) +{ + QXT_INIT_PRIVATE(QxtGroupBox); + qxt_d().init(); +} + +/*! + Destructs the group box. + */ +QxtGroupBox::~QxtGroupBox() +{} + +/*! + \property QxtGroupBox::collapsive + \brief This property holds whether the group box is collapsive + */ +bool QxtGroupBox::isCollapsive() const +{ + return qxt_d().collapsive; +} + +void QxtGroupBox::setCollapsive(bool enable) +{ + if (qxt_d().collapsive != enable) + { + qxt_d().collapsive = enable; + if (!enable) + setExpanded(true); + else if (!isChecked()) + setExpanded(false); + } +} + +/*! + Sets the group box \a collapsed. + + A collapsed group box hides its children. + + \sa setExpanded(), QGroupBox::toggled() + */ +void QxtGroupBox::setCollapsed(bool collapsed) +{ + setExpanded(!collapsed); +} + +/*! + Sets the group box \a expanded. + + An expanded group box shows its children. + + \sa setCollapsed(), QGroupBox::toggled() + */ +void QxtGroupBox::setExpanded(bool expanded) +{ + if (qxt_d().collapsive || expanded) + { + // show/hide direct children + foreach (QObject* child, children()) + { + if (child->isWidgetType()) + static_cast(child)->setVisible(expanded); + } + setFlat(!expanded); + } +} + +void QxtGroupBox::childEvent(QChildEvent* event) +{ + QObject* child = event->child(); + if (event->added() && child->isWidgetType()) + { + QWidget* widget = static_cast(child); + if (qxt_d().collapsive && !isChecked()) + widget->hide(); + } +}