mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-23 10:22:50 +00:00
162 lines
4.2 KiB
C++
162 lines
4.2 KiB
C++
/*
|
|
Copyright (c) 2007 Mathias Soeken <msoeken@tzi.de>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library 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
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
#include "autochecktreewidget.h"
|
|
|
|
using namespace IncidenceEditorNG;
|
|
|
|
//@cond PRIVATE
|
|
class AutoCheckTreeWidget::Private
|
|
{
|
|
public:
|
|
Private()
|
|
: mAutoCheckChildren( false ),
|
|
mAutoCheck( true ) {}
|
|
|
|
bool mAutoCheckChildren;
|
|
bool mAutoCheck;
|
|
};
|
|
//@endcond
|
|
|
|
AutoCheckTreeWidget::AutoCheckTreeWidget( QWidget *parent )
|
|
: QTreeWidget( parent ), d( new Private() )
|
|
{
|
|
connect( model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
|
|
this, SLOT(slotRowsInserted(QModelIndex,int,int)) );
|
|
connect( model(),
|
|
SIGNAL(dataChanged(QModelIndex,QModelIndex)),
|
|
this,
|
|
SLOT(slotDataChanged(QModelIndex,QModelIndex)) );
|
|
|
|
setColumnCount( 2 );
|
|
}
|
|
|
|
AutoCheckTreeWidget::~AutoCheckTreeWidget()
|
|
{
|
|
delete d;
|
|
}
|
|
|
|
QTreeWidgetItem *AutoCheckTreeWidget::itemByPath( const QStringList &path ) const
|
|
{
|
|
QStringList newPath = path;
|
|
QTreeWidgetItem *item = 0;
|
|
|
|
while ( newPath.count() ) {
|
|
item = findItem( item, newPath.takeFirst() );
|
|
if ( !item ) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return item;
|
|
}
|
|
|
|
QStringList AutoCheckTreeWidget::pathByItem( QTreeWidgetItem *item ) const
|
|
{
|
|
QStringList path;
|
|
QTreeWidgetItem *current = item;
|
|
|
|
while ( current ) {
|
|
path.prepend( current->text( 0 ) );
|
|
current = current->parent();
|
|
}
|
|
|
|
return path;
|
|
}
|
|
|
|
bool AutoCheckTreeWidget::autoCheckChildren() const
|
|
{
|
|
return d->mAutoCheckChildren;
|
|
}
|
|
|
|
void AutoCheckTreeWidget::setAutoCheckChildren( bool autoCheckChildren )
|
|
{
|
|
d->mAutoCheckChildren = autoCheckChildren;
|
|
}
|
|
|
|
bool AutoCheckTreeWidget::autoCheck() const
|
|
{
|
|
return d->mAutoCheck;
|
|
}
|
|
|
|
void AutoCheckTreeWidget::setAutoCheck( bool autoCheck )
|
|
{
|
|
d->mAutoCheck = autoCheck;
|
|
}
|
|
|
|
QTreeWidgetItem *AutoCheckTreeWidget::findItem( QTreeWidgetItem *parent, const QString &text ) const
|
|
{
|
|
if ( parent ) {
|
|
for ( int i = 0; i < parent->childCount(); ++i ) {
|
|
if ( parent->child( i )->text( 0 ) == text ) {
|
|
return parent->child( i );
|
|
}
|
|
}
|
|
} else {
|
|
for ( int i = 0; i < topLevelItemCount(); ++i ) {
|
|
if ( topLevelItem( i )->text( 0 ) == text ) {
|
|
return topLevelItem( i );
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void AutoCheckTreeWidget::slotRowsInserted( const QModelIndex &parent,
|
|
int start, int end )
|
|
{
|
|
if ( d->mAutoCheck ) {
|
|
QTreeWidgetItem *item = itemFromIndex( parent );
|
|
QTreeWidgetItem *child;
|
|
if ( item ) {
|
|
QBrush b( Qt::yellow );
|
|
item->setBackground( 0, b );
|
|
for ( int i = start; i < qMax( end, item->childCount() ); ++i ) {
|
|
child = item->child( i );
|
|
child->setFlags( child->flags() | Qt::ItemIsUserCheckable );
|
|
child->setCheckState( 0, Qt::Unchecked );
|
|
}
|
|
} else { /* top level item has been inserted */
|
|
for ( int i = start; i < qMax( end, topLevelItemCount() ); ++i ) {
|
|
child = topLevelItem( i );
|
|
child->setFlags( child->flags() | Qt::ItemIsUserCheckable );
|
|
child->setCheckState( 0, Qt::Unchecked );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void AutoCheckTreeWidget::slotDataChanged( const QModelIndex &topLeft,
|
|
const QModelIndex &bottomRight )
|
|
{
|
|
if ( !d->mAutoCheckChildren ) {
|
|
return;
|
|
}
|
|
|
|
QTreeWidgetItem *item1 = itemFromIndex( topLeft );
|
|
QTreeWidgetItem *item2 = itemFromIndex( bottomRight );
|
|
|
|
if ( item1 == item2 ) {
|
|
for ( int i = 0; i < item1->childCount(); ++i ) {
|
|
item1->child( i )->setCheckState( 0, item1->checkState( 0 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
|