author | mickeyl <mickeyl> | 2004-03-05 21:36:58 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-03-05 21:36:58 (UTC) |
commit | b9d58b616102970872129b5bc2f55569910f5c03 (patch) (side-by-side diff) | |
tree | 593b40cce6f3da75593c90bff337b9b9c5092f7e /libopie2 | |
parent | 4a18103940564be8585af8121203561e16f0a32c (diff) | |
download | opie-b9d58b616102970872129b5bc2f55569910f5c03.zip opie-b9d58b616102970872129b5bc2f55569910f5c03.tar.gz opie-b9d58b616102970872129b5bc2f55569910f5c03.tar.bz2 |
add OCheckListItem
change my email address
-rw-r--r-- | libopie2/opieui/olistview.cpp | 153 | ||||
-rw-r--r-- | libopie2/opieui/olistview.h | 71 |
2 files changed, 213 insertions, 11 deletions
diff --git a/libopie2/opieui/olistview.cpp b/libopie2/opieui/olistview.cpp index 84617f8..0ee2fde 100644 --- a/libopie2/opieui/olistview.cpp +++ b/libopie2/opieui/olistview.cpp @@ -1,6 +1,6 @@ /* This file is part of the Opie Project - =. (C) 2003 Michael 'Mickey' Lauer <mickey@Vanille.de> + =. (C) 2003-2004 Michael 'Mickey' Lauer <mickey@Vanille.de> .=l. .>+-= _;:, .> :=|. This program is free software; you can @@ -174,7 +174,7 @@ void OListView::serializeFrom( QDataStream& s ) int cols; s >> cols; - qDebug( "read number of columns = %d", cols ); + odebug << "read number of columns = " << cols << oendl; while ( columns() < cols ) addColumn( QString::null ); @@ -188,7 +188,7 @@ void OListView::serializeFrom( QDataStream& s ) int items; s >> items; - qDebug( "read number of items = %d", items ); + odebug << "read number of items = " << items << oendl; for ( int i = 0; i < items; ++i ) { @@ -200,6 +200,30 @@ void OListView::serializeFrom( QDataStream& s ) } + +void OListView::expand() +{ + odebug << "OListView::expand" << oendl; + + QListViewItemIterator it( this ); + while ( it.current() ) { + it.current()->setOpen( true ); + ++it; + } +} + + +void OListView::collapse() +{ + odebug << "OListView::collapse" << oendl; + QListViewItemIterator it( this ); + while ( it.current() ) { + it.current()->setOpen( false ); + ++it; + } +} + + QDataStream& operator<<( QDataStream& s, const OListView& lv ) { lv.serializeTo( s ); @@ -445,6 +469,129 @@ QDataStream& operator>>( QDataStream& s, OListViewItem& lvi ) /*====================================================================================== + * OCheckListItem + *======================================================================================*/ + +OCheckListItem::OCheckListItem( QCheckListItem* parent, const QString& text, Type t ) + :QCheckListItem( parent, text, t ) +{ + init(); +} + + +OCheckListItem::OCheckListItem( QListViewItem* parent, const QString& text, Type t) + :QCheckListItem( parent, text, t ) +{ + init(); +} + + +OCheckListItem::OCheckListItem( QListView* parent, const QString& text, Type t ) + :QCheckListItem( parent, text, t ) +{ + init(); +} + + +OCheckListItem::OCheckListItem( QListViewItem* parent, const QString& text, const QPixmap& p ) + :QCheckListItem( parent, text, p ) +{ + init(); +} + + +OCheckListItem::OCheckListItem( QListView* parent, const QString& text, const QPixmap& p ) + :QCheckListItem( parent, text, p ) +{ + init(); +} + + +OCheckListItem::~OCheckListItem() +{ +} + +void OCheckListItem::init() +{ + m_known = false; +} + + +const QColor &OCheckListItem::backgroundColor() +{ + return isAlternate() ? static_cast<OListView*>(listView())->alternateBackground() : + listView()->viewport()->colorGroup().base(); +} + + +bool OCheckListItem::isAlternate() +{ + OListView *lv = static_cast<OListView*>( listView() ); + + // check if the item above is an OCheckListItem + OCheckListItem *above = static_cast<OCheckListItem*>( itemAbove() ); + /*if (! itemAbove()->inherits( "OCheckListItem" )) return false;*/ + + // check if we have a valid alternate background color + if (!(lv && lv->alternateBackground().isValid())) return false; + + m_known = above ? above->m_known : true; + if (m_known) + { + m_odd = above ? !above->m_odd : false; + } + else + { + OCheckListItem *item; + bool previous = true; + if (parent()) + { + item = static_cast<OCheckListItem *>(parent()); + if ( item /*&& item->inherits( "OCheckListItem" )*/ ) previous = item->m_odd; + item = static_cast<OCheckListItem *>(parent()->firstChild()); + /* if ( !item.inherits( "OCheckListItem" ) item = 0; */ + } + else + { + item = static_cast<OCheckListItem *>(lv->firstChild()); + } + + while(item) + { + item->m_odd = previous = !previous; + item->m_known = true; + item = static_cast<OCheckListItem *>(item->nextSibling()); + /* if (!item.inherits( "OCheckListItem" ) ) break; */ + } + } + return m_odd; +} + + +void OCheckListItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) +{ + QColorGroup _cg = cg; + const QPixmap *pm = listView()->viewport()->backgroundPixmap(); + if (pm && !pm->isNull()) + { + _cg.setBrush( QColorGroup::Base, QBrush(backgroundColor(), *pm) ); + p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() ); + } + else if ( isAlternate() ) + { + _cg.setColor( QColorGroup::Base, static_cast<OListView*>( listView() )->alternateBackground() ); + } + QCheckListItem::paintCell( p, _cg, column, width, alignment ); + + //FIXME: Use styling here! + + const QPen& pen = static_cast<OListView*>( listView() )->columnSeparator(); + p->setPen( pen ); + p->drawLine( width-1, 0, width-1, height() ); +} + + +/*====================================================================================== * ONamedListView *======================================================================================*/ diff --git a/libopie2/opieui/olistview.h b/libopie2/opieui/olistview.h index a00b43a..59b0973 100644 --- a/libopie2/opieui/olistview.h +++ b/libopie2/opieui/olistview.h @@ -1,7 +1,6 @@ /* This file is part of the Opie Project - - =. (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> + =. (C) 2003-2004 Michael 'Mickey' Lauer <mickey@vanille.de> .=l. .>+-= _;:, .> :=|. This program is free software; you can @@ -51,7 +50,7 @@ class OListViewItem; * like an alternate background for odd rows, an autostretch mode * for the width of the widget ( >= Qt 3 only ) and persistence capabilities. * - * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> + * @author Michael 'Mickey' Lauer <mickey@vanille.de> */ class OListView: public QListView { @@ -122,11 +121,21 @@ class OListView: public QListView virtual void serializeFrom( QDataStream& s ); #endif -protected slots: - /** + public slots: + /** + * Expand all items + */ + void expand(); + /** + * Collapse all items + */ + void collapse(); + + protected slots: + /** * expand the current OListViewItem */ - void expand(QListViewItem*); + void expand(QListViewItem*); private: QColor m_alternateBackground; @@ -153,6 +162,7 @@ QDataStream& operator>>( QDataStream& stream, OListView& listview ); class OListViewItem: public QListViewItem { + friend class OCheckListItem; public: /** * Constructors. @@ -250,6 +260,51 @@ QDataStream& operator<<( QDataStream& stream, const OListViewItem& item ); QDataStream& operator>>( QDataStream& stream, OListViewItem& item ); #endif // QT_NO_DATASTREAM + +/*====================================================================================== + * OCheckListItem + *======================================================================================*/ + +class OCheckListItem : public QCheckListItem +{ + public: + + OCheckListItem( QCheckListItem *parent, const QString &text, + Type = Controller ); + OCheckListItem( QListViewItem *parent, const QString &text, + Type = Controller ); + OCheckListItem( QListView *parent, const QString &text, + Type = Controller ); + OCheckListItem( QListViewItem *parent, const QString &text, + const QPixmap & ); + OCheckListItem( QListView *parent, const QString &text, + const QPixmap & ); + ~OCheckListItem(); + /** + * @returns the background color of the list item. + */ + const QColor& backgroundColor(); + /** + * @returns true, if the item is at an odd position and + * thus have to be painted with the alternate background color. + */ + bool isAlternate(); + /** + * @note: Reimplemented for internal purposes - the API is not affected + * + */ + void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int alignment ); + /** + * Perform object initialization. + */ + void init(); + + private: + bool m_known; + bool m_odd; +}; + + /*====================================================================================== * ONamedListView *======================================================================================*/ @@ -261,7 +316,7 @@ class ONamedListViewItem; * * This class provides a higher-level interface to an OListView. * - * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> + * @author Michael 'Mickey' Lauer <mickey@vanille.de> */ class ONamedListView: public OListView { @@ -310,7 +365,7 @@ class ONamedListView: public OListView * * This class provides a higher-level interface to an OListViewItem. * - * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> + * @author Michael 'Mickey' Lauer <mickey@vanille.de> */ class ONamedListViewItem: public OListViewItem { |