summaryrefslogtreecommitdiff
path: root/libopie2
Side-by-side diff
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opieui/olistview.cpp153
-rw-r--r--libopie2/opieui/olistview.h71
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
{