• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KDEUI

  • kdeui
  • paged
kpagewidgetmodel.cpp
Go to the documentation of this file.
1/*
2 This file is part of the KDE Libraries
3
4 Copyright (C) 2006 Tobias Koenig (tokoe@kde.org)
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA.
20*/
21
22#include "kpagewidgetmodel.h"
23#include "kpagewidgetmodel_p.h"
24
25#include <QPointer>
26#include <QWidget>
27
28#include <kicon.h>
29
30class KPageWidgetItem::Private
31{
32 public:
33 Private()
34 : checkable(false), checked(false), enabled(true)
35 {
36 }
37
38 ~Private()
39 {
40 delete widget;
41 widget = 0;
42 }
43
44 QString name;
45 QString header;
46 KIcon icon;
47 QPointer<QWidget> widget;
48 bool checkable : 1;
49 bool checked : 1;
50 bool enabled : 1;
51};
52
53KPageWidgetItem::KPageWidgetItem( QWidget *widget )
54 : QObject( 0 ), d( new Private )
55{
56 d->widget = widget;
57
63 if ( d->widget )
64 d->widget->hide();
65}
66
67KPageWidgetItem::KPageWidgetItem( QWidget *widget, const QString &name )
68 : QObject( 0 ), d( new Private )
69{
70 d->widget = widget;
71 d->name = name;
72
78 if ( d->widget )
79 d->widget->hide();
80}
81
82KPageWidgetItem::~KPageWidgetItem()
83{
84 delete d;
85}
86
87void KPageWidgetItem::setEnabled(bool enabled)
88{
89 d->enabled = enabled;
90 if (d->widget) {
91 d->widget->setEnabled(enabled);
92 }
93 emit changed();
94}
95
96bool KPageWidgetItem::isEnabled() const
97{
98 return d->enabled;
99}
100
101QWidget* KPageWidgetItem::widget() const
102{
103 return d->widget;
104}
105
106void KPageWidgetItem::setName( const QString &name )
107{
108 d->name = name;
109
110 emit changed();
111}
112
113QString KPageWidgetItem::name() const
114{
115 return d->name;
116}
117
118void KPageWidgetItem::setHeader( const QString &header )
119{
120 d->header = header;
121
122 emit changed();
123}
124
125QString KPageWidgetItem::header() const
126{
127 return d->header;
128}
129
130void KPageWidgetItem::setIcon( const KIcon &icon )
131{
132 d->icon = icon;
133
134 emit changed();
135}
136
137KIcon KPageWidgetItem::icon() const
138{
139 return d->icon;
140}
141
142void KPageWidgetItem::setCheckable( bool checkable )
143{
144 d->checkable = checkable;
145
146 emit changed();
147}
148
149bool KPageWidgetItem::isCheckable() const
150{
151 return d->checkable;
152}
153
154void KPageWidgetItem::setChecked( bool checked )
155{
156 d->checked = checked;
157
158 emit toggled( checked );
159 emit changed();
160}
161
162bool KPageWidgetItem::isChecked() const
163{
164 return d->checked;
165}
166
167PageItem::PageItem( KPageWidgetItem *pageWidgetItem, PageItem *parent )
168 : mPageWidgetItem( pageWidgetItem ), mParentItem( parent )
169{
170}
171
172PageItem::~PageItem()
173{
174 delete mPageWidgetItem;
175 mPageWidgetItem = 0;
176
177 qDeleteAll(mChildItems);
178}
179
180void PageItem::appendChild( PageItem *item )
181{
182 mChildItems.append( item );
183}
184
185void PageItem::insertChild( int row, PageItem *item )
186{
187 mChildItems.insert( row, item );
188}
189
190void PageItem::removeChild( int row )
191{
192 mChildItems.removeAt( row );
193}
194
195PageItem *PageItem::child( int row )
196{
197 return mChildItems.value( row );
198}
199
200int PageItem::childCount() const
201{
202 return mChildItems.count();
203}
204
205int PageItem::columnCount() const
206{
207 return 1;
208}
209
210PageItem *PageItem::parent()
211{
212 return mParentItem;
213}
214
215int PageItem::row() const
216{
217 if ( mParentItem )
218 return mParentItem->mChildItems.indexOf( const_cast<PageItem*>(this) );
219
220 return 0;
221}
222
223KPageWidgetItem* PageItem::pageWidgetItem() const
224{
225 return mPageWidgetItem;
226}
227
228PageItem *PageItem::findChild( const KPageWidgetItem *item )
229{
230 if ( mPageWidgetItem == item )
231 return this;
232
233 for ( int i = 0; i < mChildItems.count(); ++i ) {
234 PageItem *pageItem = mChildItems[ i ]->findChild( item );
235 if ( pageItem )
236 return pageItem;
237 }
238
239 return 0;
240}
241
242void PageItem::dump( int indent )
243{
244 QString prefix;
245 for ( int i = 0; i < indent; ++i )
246 prefix.append( " " );
247
248 const QString name = ( mPageWidgetItem ? mPageWidgetItem->name() : "root" );
249 qDebug( "%s (%p)", qPrintable( QString( "%1%2" ).arg( prefix, name ) ), (void*)this );
250 for ( int i = 0; i < mChildItems.count(); ++i )
251 mChildItems[ i ]->dump( indent + 2 );
252}
253
254KPageWidgetModel::KPageWidgetModel( QObject *parent )
255 : KPageModel(*new KPageWidgetModelPrivate, parent)
256{
257}
258
259KPageWidgetModel::~KPageWidgetModel()
260{
261}
262
263int KPageWidgetModel::columnCount( const QModelIndex& ) const
264{
265 return 1;
266}
267
268QVariant KPageWidgetModel::data( const QModelIndex &index, int role ) const
269{
270 if ( !index.isValid() )
271 return QVariant();
272
273 PageItem *item = static_cast<PageItem*>( index.internalPointer() );
274
275 if ( role == Qt::DisplayRole )
276 return QVariant( item->pageWidgetItem()->name() );
277 else if ( role == Qt::DecorationRole )
278 return QVariant( item->pageWidgetItem()->icon() );
279 else if ( role == HeaderRole )
280 return QVariant( item->pageWidgetItem()->header() );
281 else if ( role == WidgetRole )
282 return QVariant::fromValue( item->pageWidgetItem()->widget() );
283 else if ( role == Qt::CheckStateRole ) {
284 if ( item->pageWidgetItem()->isCheckable() ) {
285 return ( item->pageWidgetItem()->isChecked() ? Qt::Checked : Qt::Unchecked );
286 } else
287 return QVariant();
288 } else
289 return QVariant();
290}
291
292bool KPageWidgetModel::setData( const QModelIndex &index, const QVariant &value, int role )
293{
294 if ( !index.isValid() )
295 return false;
296
297 if ( role != Qt::CheckStateRole )
298 return false;
299
300 PageItem *item = static_cast<PageItem*>( index.internalPointer() );
301 if ( !item )
302 return false;
303
304 if ( !item->pageWidgetItem()->isCheckable() )
305 return false;
306
307 if ( value.toInt() == Qt::Checked )
308 item->pageWidgetItem()->setChecked( true );
309 else
310 item->pageWidgetItem()->setChecked( false );
311
312 return true;
313}
314
315Qt::ItemFlags KPageWidgetModel::flags( const QModelIndex &index ) const
316{
317 if ( !index.isValid() )
318 return 0;
319
320 Qt::ItemFlags flags = Qt::ItemIsSelectable;
321
322 PageItem *item = static_cast<PageItem*>( index.internalPointer() );
323 if ( item->pageWidgetItem()->isCheckable() )
324 flags |= Qt::ItemIsUserCheckable;
325 if (item->pageWidgetItem()->isEnabled()) {
326 flags |= Qt::ItemIsEnabled;
327 }
328
329 return flags;
330}
331
332QModelIndex KPageWidgetModel::index( int row, int column, const QModelIndex &parent ) const
333{
334 PageItem *parentItem;
335
336 if ( parent.isValid() )
337 parentItem = static_cast<PageItem*>( parent.internalPointer() );
338 else
339 parentItem = d_func()->rootItem;
340
341 PageItem *childItem = parentItem->child( row );
342 if ( childItem )
343 return createIndex( row, column, childItem );
344 else
345 return QModelIndex();
346}
347
348QModelIndex KPageWidgetModel::parent( const QModelIndex &index ) const
349{
350 if ( !index.isValid() )
351 return QModelIndex();
352
353 PageItem *item = static_cast<PageItem*>( index.internalPointer() );
354 PageItem *parentItem = item->parent();
355
356 if ( parentItem == d_func()->rootItem )
357 return QModelIndex();
358 else
359 return createIndex( parentItem->row(), 0, parentItem );
360}
361
362int KPageWidgetModel::rowCount( const QModelIndex &parent ) const
363{
364 PageItem *parentItem;
365
366 if ( !parent.isValid() )
367 parentItem = d_func()->rootItem;
368 else
369 parentItem = static_cast<PageItem*>( parent.internalPointer() );
370
371 return parentItem->childCount();
372}
373
374KPageWidgetItem* KPageWidgetModel::addPage( QWidget *widget, const QString &name )
375{
376 KPageWidgetItem *item = new KPageWidgetItem( widget, name );
377
378 addPage( item );
379
380 return item;
381}
382
383void KPageWidgetModel::addPage( KPageWidgetItem *item )
384{
385 emit layoutAboutToBeChanged();
386
387 Q_D(KPageWidgetModel);
388 connect(item, SIGNAL(changed()), this, SLOT(_k_itemChanged()));
389 connect(item, SIGNAL(toggled(bool)), this, SLOT(_k_itemToggled(bool)));
390
391 // The row to be inserted
392 int row = d->rootItem->childCount();
393
394 beginInsertRows(QModelIndex(), row, row);
395
396 PageItem *pageItem = new PageItem( item, d->rootItem );
397 d->rootItem->appendChild( pageItem );
398
399 endInsertRows();
400
401 emit layoutChanged();
402}
403
404KPageWidgetItem* KPageWidgetModel::insertPage( KPageWidgetItem *before, QWidget *widget, const QString &name )
405{
406 KPageWidgetItem *item = new KPageWidgetItem( widget, name );
407
408 insertPage( before, item );
409
410 return item;
411}
412
413void KPageWidgetModel::insertPage( KPageWidgetItem *before, KPageWidgetItem *item )
414{
415 PageItem *beforePageItem = d_func()->rootItem->findChild(before);
416 if ( !beforePageItem ) {
417 qDebug( "Invalid KPageWidgetItem passed!" );
418 return;
419 }
420
421 emit layoutAboutToBeChanged();
422
423 connect(item, SIGNAL(changed()), this, SLOT(_k_itemChanged()));
424 connect(item, SIGNAL(toggled(bool)), this, SLOT(_k_itemToggled(bool)));
425
426 PageItem *parent = beforePageItem->parent();
427 // The row to be inserted
428 int row = beforePageItem->row();
429
430 QModelIndex index;
431 if (parent != d_func()->rootItem) {
432 index = createIndex( parent->row(), 0, parent );
433 }
434
435 beginInsertRows(index, row, row);
436
437 PageItem *newPageItem = new PageItem( item, parent );
438 parent->insertChild( row, newPageItem );
439
440 endInsertRows();
441
442 emit layoutChanged();
443}
444
445KPageWidgetItem* KPageWidgetModel::addSubPage( KPageWidgetItem *parent, QWidget *widget, const QString &name )
446{
447 KPageWidgetItem *item = new KPageWidgetItem( widget, name );
448
449 addSubPage( parent, item );
450
451 return item;
452}
453
454void KPageWidgetModel::addSubPage( KPageWidgetItem *parent, KPageWidgetItem *item )
455{
456 PageItem *parentPageItem = d_func()->rootItem->findChild(parent);
457 if ( !parentPageItem ) {
458 qDebug( "Invalid KPageWidgetItem passed!" );
459 return;
460 }
461
462 emit layoutAboutToBeChanged();
463
464 connect(item, SIGNAL(changed()), this, SLOT(_k_itemChanged()));
465 connect(item, SIGNAL(toggled(bool)), this, SLOT(_k_itemToggled(bool)));
466
467 // The row to be inserted
468 int row = parentPageItem->childCount();
469
470 QModelIndex index;
471 if (parentPageItem != d_func()->rootItem) {
472 index = createIndex( parentPageItem->row(), 0, parentPageItem );
473 }
474
475 beginInsertRows(index, row, row);
476
477 PageItem *newPageItem = new PageItem( item, parentPageItem );
478 parentPageItem->appendChild( newPageItem );
479
480 endInsertRows();
481
482 emit layoutChanged();
483}
484
485void KPageWidgetModel::removePage( KPageWidgetItem *item )
486{
487 if ( !item )
488 return;
489
490 Q_D(KPageWidgetModel);
491
492 PageItem *pageItem = d->rootItem->findChild( item );
493 if ( !pageItem ) {
494 qDebug( "Invalid KPageWidgetItem passed!" );
495 return;
496 }
497
498 emit layoutAboutToBeChanged();
499
500 disconnect(item, SIGNAL(changed()), this, SLOT(_k_itemChanged()));
501 disconnect(item, SIGNAL(toggled(bool)), this, SLOT(_k_itemToggled(bool)));
502
503 PageItem *parentPageItem = pageItem->parent();
504 int row = parentPageItem->row();
505
506 QModelIndex index;
507 if ( parentPageItem != d->rootItem )
508 index = createIndex( row, 0, parentPageItem );
509
510 beginRemoveRows(index, pageItem->row(), pageItem->row());
511
512 parentPageItem->removeChild( pageItem->row() );
513 delete pageItem;
514
515 endRemoveRows();
516
517 emit layoutChanged();
518}
519
520KPageWidgetItem *KPageWidgetModel::item(const QModelIndex &index) const
521{
522 if ( !index.isValid() )
523 return 0;
524
525 PageItem *item = static_cast<PageItem*>( index.internalPointer() );
526 if ( !item )
527 return 0;
528
529 return item->pageWidgetItem();
530}
531
532QModelIndex KPageWidgetModel::index( const KPageWidgetItem *item ) const
533{
534 if ( !item )
535 return QModelIndex();
536
537 const PageItem *pageItem = d_func()->rootItem->findChild(item);
538 if ( !pageItem ) {
539 return QModelIndex();
540 }
541
542 return createIndex( pageItem->row(), 0, (void*)pageItem );
543}
544
545#include "kpagewidgetmodel.moc"
KIcon
A wrapper around QIcon that provides KDE icon features.
Definition: kicon.h:41
KPageModel
A base class for a model used by KPageView.
Definition: kpagemodel.h:57
KPageModel::WidgetRole
@ WidgetRole
A pointer to the page widget.
Definition: kpagemodel.h:80
KPageModel::HeaderRole
@ HeaderRole
A string to be rendered as page header.
Definition: kpagemodel.h:69
KPageWidgetItem
KPageWidgetItem is used by KPageWidget and represents a page.
Definition: kpagewidgetmodel.h:51
KPageWidgetItem::icon
KIcon icon
Definition: kpagewidgetmodel.h:55
KPageWidgetItem::setName
void setName(const QString &name)
Sets the name of the item as shown in the navigation view of the page widget.
Definition: kpagewidgetmodel.cpp:106
KPageWidgetItem::isEnabled
bool isEnabled() const
Returns whether the page widget item is enabled.
Definition: kpagewidgetmodel.cpp:96
KPageWidgetItem::setChecked
void setChecked(bool checked)
Sets whether the page widget item is checked.
Definition: kpagewidgetmodel.cpp:154
KPageWidgetItem::changed
void changed()
This signal is emitted whenever the icon or header is changed.
KPageWidgetItem::isCheckable
bool isCheckable() const
Returns whether the page widget item is checkable.
Definition: kpagewidgetmodel.cpp:149
KPageWidgetItem::name
QString name
Definition: kpagewidgetmodel.h:53
KPageWidgetItem::toggled
void toggled(bool checked)
This signal is emitted whenever the user checks or unchecks the item of.
KPageWidgetItem::isChecked
bool isChecked() const
Returns whether the page widget item is checked.
Definition: kpagewidgetmodel.cpp:162
KPageWidgetItem::~KPageWidgetItem
~KPageWidgetItem()
Destroys the page widget item.
Definition: kpagewidgetmodel.cpp:82
KPageWidgetItem::widget
QWidget * widget() const
Returns the widget of the page widget item.
Definition: kpagewidgetmodel.cpp:101
KPageWidgetItem::setEnabled
void setEnabled(bool)
Sets whether the page widget item is enabled.
Definition: kpagewidgetmodel.cpp:87
KPageWidgetItem::KPageWidgetItem
KPageWidgetItem(QWidget *widget)
Creates a new page widget item.
Definition: kpagewidgetmodel.cpp:53
KPageWidgetItem::header
QString header
Definition: kpagewidgetmodel.h:54
KPageWidgetItem::setIcon
void setIcon(const KIcon &icon)
Sets the icon of the page widget item.
Definition: kpagewidgetmodel.cpp:130
KPageWidgetItem::setCheckable
void setCheckable(bool checkable)
Sets whether the page widget item is checkable in the view.
Definition: kpagewidgetmodel.cpp:142
KPageWidgetItem::setHeader
void setHeader(const QString &header)
Sets the header of the page widget item.
Definition: kpagewidgetmodel.cpp:118
KPageWidgetModel
This page model is used by.
Definition: kpagewidgetmodel.h:189
KPageWidgetModel::data
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Definition: kpagewidgetmodel.cpp:268
KPageWidgetModel::insertPage
KPageWidgetItem * insertPage(KPageWidgetItem *before, QWidget *widget, const QString &name)
Inserts a new page in the model.
Definition: kpagewidgetmodel.cpp:404
KPageWidgetModel::~KPageWidgetModel
~KPageWidgetModel()
Destroys the page widget model.
Definition: kpagewidgetmodel.cpp:259
KPageWidgetModel::rowCount
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
Definition: kpagewidgetmodel.cpp:362
KPageWidgetModel::addPage
KPageWidgetItem * addPage(QWidget *widget, const QString &name)
Adds a new top level page to the model.
Definition: kpagewidgetmodel.cpp:374
KPageWidgetModel::removePage
void removePage(KPageWidgetItem *item)
Removes the page associated with the given.
Definition: kpagewidgetmodel.cpp:485
KPageWidgetModel::columnCount
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
These methods are reimplemented from QAbstractItemModel.
Definition: kpagewidgetmodel.cpp:263
KPageWidgetModel::flags
virtual Qt::ItemFlags flags(const QModelIndex &index) const
Definition: kpagewidgetmodel.cpp:315
KPageWidgetModel::KPageWidgetModel
KPageWidgetModel(QObject *parent=0)
Creates a new page widget model.
Definition: kpagewidgetmodel.cpp:254
KPageWidgetModel::item
KPageWidgetItem * item(const QModelIndex &index) const
Returns the.
Definition: kpagewidgetmodel.cpp:520
KPageWidgetModel::index
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const
Definition: kpagewidgetmodel.cpp:332
KPageWidgetModel::toggled
void toggled(KPageWidgetItem *page, bool checked)
This signal is emitted whenever a checkable page changes its state.
KPageWidgetModel::parent
virtual QModelIndex parent(const QModelIndex &index) const
Definition: kpagewidgetmodel.cpp:348
KPageWidgetModel::addSubPage
KPageWidgetItem * addSubPage(KPageWidgetItem *parent, QWidget *widget, const QString &name)
Inserts a new sub page in the model.
Definition: kpagewidgetmodel.cpp:445
KPageWidgetModel::setData
virtual bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole)
Definition: kpagewidgetmodel.cpp:292
QObject
QWidget
header
const char header[]
indent
QString indent(QString text, int spaces)
kicon.h
kpagewidgetmodel.h
prefix
QString prefix()
KStandardAction::name
const char * name(StandardAction id)
This will return the internal name of a given standard action.
Definition: kstandardaction.cpp:223
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KDEUI

Skip menu "KDEUI"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal