/* * * $Id: k3blistview.h 619556 2007-01-03 17:38:12Z trueg $ * Copyright (C) 2003 Sebastian Trueg * * This file is part of the K3b project. * Copyright (C) 1998-2007 Sebastian Trueg * * 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 #include "k3b_export.h" #include #include #include #include class TQPainter; class TQPushButton; class TQIconSet; class TQResizeEvent; class TQComboBox; class TQSpinBox; class TQLineEdit; class TQEvent; class TQValidator; class K3bMsfEdit; class K3bListView; class LIBK3B_EXPORT K3bListViewItem : public TDEListViewItem { public: K3bListViewItem(TQListView *parent); K3bListViewItem(TQListViewItem *parent); K3bListViewItem(TQListView *parent, TQListViewItem *after); K3bListViewItem(TQListViewItem *parent, TQListViewItem *after); K3bListViewItem(TQListView *parent, const TQString&, const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString()); K3bListViewItem(TQListViewItem *parent, const TQString&, const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString()); K3bListViewItem(TQListView *parent, TQListViewItem *after, const TQString&, const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString()); K3bListViewItem(TQListViewItem *parent, TQListViewItem *after, const TQString&, const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString(), const TQString& = TQString()); virtual ~K3bListViewItem(); /** * reimplemented from TDEListViewItem */ void setup(); virtual int width( const TQFontMetrics& fm, const TQListView* lv, int c ) const; void setEditor( int col, int type, const TQStringList& = TQStringList() ); void setButton( int col, bool ); void setValidator( int col, TQValidator* v ); TQValidator* validator( int col ) const; int editorType( int col ) const; bool needButton( int col ) const; const TQStringList& comboStrings( int col ) const; enum EditorType { NONE, COMBO, LINE, SPIN, MSF }; void setFont( int col, const TQFont& f ); void setBackgroundColor( int col, const TQColor& ); void setForegroundColor( int col, const TQColor& ); 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( TQPainter* p, const TQColorGroup& cg, int col, int width, int align ); virtual void paintK3bCell( TQPainter* p, const TQColorGroup& cg, int col, int width, int align ); private: void paintProgressBar( TQPainter* p, const TQColorGroup& 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(TQListView *parent); K3bCheckListViewItem(TQListViewItem *parent); K3bCheckListViewItem(TQListView *parent, TQListViewItem *after); K3bCheckListViewItem(TQListViewItem *parent, TQListViewItem *after); virtual bool isChecked() const; virtual void setChecked( bool checked ); protected: virtual void paintK3bCell( TQPainter* p, const TQColorGroup& cg, int col, int width, int align ); private: bool m_checked; }; class LIBK3B_EXPORT K3bListView : public TDEListView { friend class K3bListViewItem; TQ_OBJECT public: K3bListView (TQWidget *parent = 0, const char *name = 0); virtual ~K3bListView(); virtual void setCurrentItem( TQListViewItem* ); K3bListViewItem* currentlyEditedItem() const { return m_currentEditItem; } TQWidget* 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 TQPixmap&, int pos = CENTER ); /** * Create a faded pixmap showing the items. */ KPixmap createDragPixmap( const TQPtrList& 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 TQListViewItem* parentItem( TQListViewItem* i ); signals: void editorButtonClicked( K3bListViewItem*, int ); public slots: void setNoItemText( const TQString& ); // void setNoItemPixmap( const TQPixmap& ); 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 TQString& ); 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 TQString& ); /** * default impl just emits signal * editorButtonClicked(...) */ virtual void slotEditorButtonClicked( K3bListViewItem*, int ); protected: /** * calls TDEListView::drawContentsOffset * and paints a the noItemText if no item is in the list */ virtual void drawContentsOffset ( TQPainter * p, int ox, int oy, int cx, int cy, int cw, int ch ); virtual void resizeEvent( TQResizeEvent* ); virtual void paintEmptyArea( TQPainter*, const TQRect& 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( TQResizeEvent* ); /** * 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(TQPaintEvent*); virtual bool eventFilter( TQObject*, TQEvent* ); K3bListViewItem* currentEditItem() const { return m_currentEditItem; } int currentEditColumn() const { return m_currentEditColumn; } private: TQWidget* prepareEditor( K3bListViewItem* item, int col ); void prepareButton( K3bListViewItem* item, int col ); bool doRename(); TQString m_noItemText; // TQPixmap m_noItemPixmap; int m_noItemVMargin; int m_noItemHMargin; K3bListViewItem* m_currentEditItem; int m_currentEditColumn; bool m_doubleClickForEdit; TQListViewItem* m_lastClickedItem; TQPushButton* m_editorButton; TQComboBox* m_editorComboBox; TQSpinBox* m_editorSpinBox; TQLineEdit* m_editorLineEdit; K3bMsfEdit* m_editorMsfEdit; TQPixmap m_backgroundPixmap; int m_backgroundPixmapPosition; class Private; Private* d; }; #endif