X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxttreewidget.cpp;fp=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxttreewidget.cpp;h=af3aa4ccea6e8bd85e2684d03e75da4bca4322fb;hb=a634acadbcf6017474f68a3eaf7cb632660e9e49;hp=0000000000000000000000000000000000000000;hpb=cd122ca8e0d2c0ffc5397e0a813c75d791a7e6e3;p=quassel.git diff --git a/src/contrib/libqxt-2007-10-24/src/gui/qxttreewidget.cpp b/src/contrib/libqxt-2007-10-24/src/gui/qxttreewidget.cpp new file mode 100644 index 00000000..af3aa4cc --- /dev/null +++ b/src/contrib/libqxt-2007-10-24/src/gui/qxttreewidget.cpp @@ -0,0 +1,174 @@ +/**************************************************************************** +** +** 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 "qxttreewidget.h" +#include "qxtitemdelegate.h" +#include "qxttreewidget_p.h" +#include + +QxtTreeWidgetPrivate::QxtTreeWidgetPrivate() +{} + +QxtItemDelegate* QxtTreeWidgetPrivate::delegate() const +{ + QxtItemDelegate* del = dynamic_cast(qxt_p().itemDelegate()); + Q_ASSERT(del); + return del; +} + +void QxtTreeWidgetPrivate::informStartEditing(const QModelIndex& index) +{ + QTreeWidgetItem* item = qxt_p().itemFromIndex(index); + Q_ASSERT(item); + emit qxt_p().itemEditingStarted(item); +} + +void QxtTreeWidgetPrivate::informFinishEditing(const QModelIndex& index) +{ + QTreeWidgetItem* item = qxt_p().itemFromIndex(index); + Q_ASSERT(item); + emit qxt_p().itemEditingFinished(item); +} + +void QxtTreeWidgetPrivate::expandCollapse(QTreeWidgetItem* item) +{ + if (item && !item->parent() && delegate()->decorationStyle() != Qxt::NoDecoration) + qxt_p().setItemExpanded(item, !qxt_p().isItemExpanded(item)); +} + +/*! + \class QxtTreeWidget QxtTreeWidget + \ingroup QxtGui + \brief An extended QTreeWidget with additional signals. + + QxtTreeWidget offers an optional top level item decoration + and a few most commonly requested signals. + + \image html qxttreewidget.png "QxtTreeWidget with Qxt::Menulike and Qxt::Buttonlike decoration styles, respectively." + */ + +/*! + \fn QxtTreeWidget::itemEditingStarted(QTreeWidgetItem* item) + + This signal is emitted after the editing of \a item has been started. + + \sa itemEditingFinished() + */ + +/*! + \fn QxtTreeWidget::itemEditingFinished(QTreeWidgetItem* item) + + This signal is emitted after the editing of \a item has been finished. + + \sa itemEditingStarted() + */ + +/*! + \fn QxtTreeWidget::itemCheckStateChanged(QxtTreeWidgetItem* item) + + This signal is emitted whenever the check state of \a item has changed. + + \note Use QxtTreeWidgetItem in order to enable this feature. + + \sa QxtTreeWidgetItem, QTreeWidgetItem::checkState() + */ + +/*! + Constructs a new QxtTreeWidget with \a parent. + */ +QxtTreeWidget::QxtTreeWidget(QWidget* parent) : QTreeWidget(parent) +{ + QXT_INIT_PRIVATE(QxtTreeWidget); + QxtItemDelegate* delegate = new QxtItemDelegate(this); + connect(delegate, SIGNAL(editingStarted(const QModelIndex&)), + &qxt_d(), SLOT(informStartEditing(const QModelIndex&))); + connect(delegate, SIGNAL(editingFinished(const QModelIndex&)), + &qxt_d(), SLOT(informFinishEditing(const QModelIndex&))); + connect(this, SIGNAL(itemPressed(QTreeWidgetItem*, int)), + &qxt_d(), SLOT(expandCollapse(QTreeWidgetItem*))); + setItemDelegate(delegate); +} + +/*! + Destructs the tree widget. + */ +QxtTreeWidget::~QxtTreeWidget() +{} + +/*! + \property QxtTreeWidget::decorationStyle + \brief This property holds the top level item decoration style + + Top level items are decorated according to this property. + The default value is \b Qxt::NoDecoration. + + \note Setting the property to anything else than \b Qxt::NoDecoration + hides the header and sets \b QTreeView::rootIsDecorated to \b false + (to avoid multiple branch indicators). + + \sa Qxt::DecorationStyle QTreeView::rootIsDecorated + */ +Qxt::DecorationStyle QxtTreeWidget::decorationStyle() const +{ + return qxt_d().delegate()->decorationStyle(); +} + +void QxtTreeWidget::setDecorationStyle(Qxt::DecorationStyle style) +{ + if (qxt_d().delegate()->decorationStyle() != style) + { + qxt_d().delegate()->setDecorationStyle(style); + + if (style != Qxt::NoDecoration) + { + setRootIsDecorated(false); + header()->hide(); + } + reset(); + } +} + +/*! + \property QxtTreeWidget::elideMode + \brief This property holds the text elide mode + + The text of a decorated top level item is elided according to this property. + The default value is \b Qt::ElideMiddle. + + \note The property has effect only for decorated top level items. + + \sa decorationStyle, Qt::TextElideMode + */ +Qt::TextElideMode QxtTreeWidget::elideMode() const +{ + return qxt_d().delegate()->elideMode(); +} + +void QxtTreeWidget::setElideMode(Qt::TextElideMode mode) +{ + if (qxt_d().delegate()->elideMode() != mode) + { + qxt_d().delegate()->setElideMode(mode); + reset(); + } +}