diff options
Diffstat (limited to 'libk3b/tools/k3blistview.h')
-rw-r--r-- | libk3b/tools/k3blistview.h | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/libk3b/tools/k3blistview.h b/libk3b/tools/k3blistview.h new file mode 100644 index 0000000..f8eb2ad --- /dev/null +++ b/libk3b/tools/k3blistview.h @@ -0,0 +1,296 @@ +/* + * + * $Id: k3blistview.h 619556 2007-01-03 17:38:12Z trueg $ + * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org> + * + * This file is part of the K3b project. + * Copyright (C) 1998-2007 Sebastian Trueg <trueg@k3b.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * See the file "COPYING" for the exact licensing terms. + */ + + +#ifndef K3BLISTVIEW_H +#define K3BLISTVIEW_H + + +#include <klistview.h> +#include "k3b_export.h" +#include <qptrvector.h> +#include <qptrlist.h> +#include <qstringlist.h> +#include <kpixmap.h> + +class QPainter; +class QPushButton; +class QIconSet; +class QResizeEvent; +class QComboBox; +class QSpinBox; +class QLineEdit; +class QEvent; +class QValidator; +class K3bMsfEdit; + +class K3bListView; + + +class LIBK3B_EXPORT K3bListViewItem : public KListViewItem +{ + public: + K3bListViewItem(QListView *parent); + K3bListViewItem(QListViewItem *parent); + K3bListViewItem(QListView *parent, QListViewItem *after); + K3bListViewItem(QListViewItem *parent, QListViewItem *after); + + K3bListViewItem(QListView *parent, + const QString&, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null); + + K3bListViewItem(QListViewItem *parent, + const QString&, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null); + + K3bListViewItem(QListView *parent, QListViewItem *after, + const QString&, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null); + + K3bListViewItem(QListViewItem *parent, QListViewItem *after, + const QString&, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null, + const QString& = QString::null, const QString& = QString::null); + + virtual ~K3bListViewItem(); + + /** + * reimplemented from KListViewItem + */ + void setup(); + + virtual int width( const QFontMetrics& fm, const QListView* lv, int c ) const; + + void setEditor( int col, int type, const QStringList& = QStringList() ); + void setButton( int col, bool ); + + void setValidator( int col, QValidator* v ); + QValidator* validator( int col ) const; + + int editorType( int col ) const; + bool needButton( int col ) const; + const QStringList& comboStrings( int col ) const; + + enum EditorType { NONE, COMBO, LINE, SPIN, MSF }; + + void setFont( int col, const QFont& f ); + void setBackgroundColor( int col, const QColor& ); + void setForegroundColor( int col, const QColor& ); + + void setDisplayProgressBar( int col, bool ); + void setProgress( int, int ); + void setTotalSteps( int col, int steps ); + + /** + * The margin left and right of the cell + */ + void setMarginHorizontal( int col, int margin ); + + /** + * The top and button margin of the cell + */ + void setMarginVertical( int margin ); + + int marginHorizontal( int col ) const; + int marginVertical() const; + + /** + * Do not reimplement this but paintK3bCell to use the margin and background stuff. + */ + virtual void paintCell( QPainter* p, const QColorGroup& cg, int col, int width, int align ); + + virtual void paintK3bCell( QPainter* p, const QColorGroup& cg, int col, int width, int align ); + + private: + void paintProgressBar( QPainter* p, const QColorGroup& cgh, int col, int width ); + + class ColumnInfo; + mutable ColumnInfo* m_columns; + + ColumnInfo* getColumnInfo( int ) const; + void init(); + + int m_vMargin; +}; + + +class LIBK3B_EXPORT K3bCheckListViewItem : public K3bListViewItem +{ + public: + K3bCheckListViewItem(QListView *parent); + K3bCheckListViewItem(QListViewItem *parent); + K3bCheckListViewItem(QListView *parent, QListViewItem *after); + K3bCheckListViewItem(QListViewItem *parent, QListViewItem *after); + + virtual bool isChecked() const; + virtual void setChecked( bool checked ); + + protected: + virtual void paintK3bCell( QPainter* p, const QColorGroup& cg, int col, int width, int align ); + + private: + bool m_checked; +}; + + + +class LIBK3B_EXPORT K3bListView : public KListView +{ + friend class K3bListViewItem; + + Q_OBJECT + + public: + K3bListView (QWidget *parent = 0, const char *name = 0); + virtual ~K3bListView(); + + virtual void setCurrentItem( QListViewItem* ); + + K3bListViewItem* currentlyEditedItem() const { return m_currentEditItem; } + + QWidget* editor( K3bListViewItem::EditorType ) const; + + enum BgPixPosition { + TOP_LEFT, + CENTER + }; + + /** + * This will set a background pixmap which is not tiled. + * @param pos position on the viewport. + */ + void setK3bBackgroundPixmap( const QPixmap&, int pos = CENTER ); + + /** + * Create a faded pixmap showing the items. + */ + KPixmap createDragPixmap( const QPtrList<QListViewItem>& items ); + + /** + * Searches for the first item above @p i which is one level higher. + * For 1st level items this will always be the listview's root item. + */ + static QListViewItem* parentItem( QListViewItem* i ); + + signals: + void editorButtonClicked( K3bListViewItem*, int ); + + public slots: + void setNoItemText( const QString& ); + // void setNoItemPixmap( const QPixmap& ); + void setNoItemVerticalMargin( int i ) { m_noItemVMargin = i; } + void setNoItemHorizontalMargin( int i ) { m_noItemHMargin = i; } + void setDoubleClickForEdit( bool b ) { m_doubleClickForEdit = b; } + void hideEditor(); + void editItem( K3bListViewItem*, int ); + + virtual void clear(); + + private slots: + void updateEditorSize(); + virtual void slotEditorLineEditReturnPressed(); + virtual void slotEditorComboBoxActivated( const QString& ); + virtual void slotEditorSpinBoxValueChanged( int ); + virtual void slotEditorMsfEditValueChanged( int ); + virtual void slotEditorButtonClicked(); + + protected slots: + void showEditor( K3bListViewItem*, int col ); + void placeEditor( K3bListViewItem*, int col ); + + /** + * This is called whenever one of the editor's contents changes + * the default implementation just returnes true + * + * FIXME: should be called something like mayRename + */ + virtual bool renameItem( K3bListViewItem*, int, const QString& ); + + /** + * default impl just emits signal + * editorButtonClicked(...) + */ + virtual void slotEditorButtonClicked( K3bListViewItem*, int ); + + protected: + /** + * calls KListView::drawContentsOffset + * and paints a the noItemText if no item is in the list + */ + virtual void drawContentsOffset ( QPainter * p, int ox, int oy, int cx, int cy, int cw, int ch ); + virtual void resizeEvent( QResizeEvent* ); + virtual void paintEmptyArea( QPainter*, const QRect& rect ); + + /** + * Reimplemented for internal reasons. + * + * Further reimplementations should call this function or else some features may not work correctly. + * + * The API is unaffected. + */ + virtual void viewportResizeEvent( QResizeEvent* ); + + /** + * Reimplemented for internal reasons. + * Further reimplementations should call this function or else + * some features may not work correctly. + * + * The API is unaffected. + */ + virtual void viewportPaintEvent(QPaintEvent*); + + virtual bool eventFilter( QObject*, QEvent* ); + + K3bListViewItem* currentEditItem() const { return m_currentEditItem; } + int currentEditColumn() const { return m_currentEditColumn; } + + private: + QWidget* prepareEditor( K3bListViewItem* item, int col ); + void prepareButton( K3bListViewItem* item, int col ); + bool doRename(); + + QString m_noItemText; + // QPixmap m_noItemPixmap; + int m_noItemVMargin; + int m_noItemHMargin; + + K3bListViewItem* m_currentEditItem; + int m_currentEditColumn; + + bool m_doubleClickForEdit; + QListViewItem* m_lastClickedItem; + + QPushButton* m_editorButton; + QComboBox* m_editorComboBox; + QSpinBox* m_editorSpinBox; + QLineEdit* m_editorLineEdit; + K3bMsfEdit* m_editorMsfEdit; + + QPixmap m_backgroundPixmap; + int m_backgroundPixmapPosition; + + class Private; + Private* d; +}; + + +#endif |