diff options
Diffstat (limited to 'ksysv/ksvdraglist.h')
-rw-r--r-- | ksysv/ksvdraglist.h | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/ksysv/ksvdraglist.h b/ksysv/ksvdraglist.h new file mode 100644 index 0000000..f5474b8 --- /dev/null +++ b/ksysv/ksvdraglist.h @@ -0,0 +1,277 @@ +/* +** Copyright (C) 2000 Peter Putzer <putzer@kde.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. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program in a file called COPYING; if not, write to +** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +** MA 02110-1301, USA. +*/ + +/* +** Bug reports and questions can be sent to kde-devel@kde.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; version 2. * + * * + ***************************************************************************/ + +#ifndef KSVDRAGLIST_H +#define KSVDRAGLIST_H + +#include <qstring.h> +#include <qcolor.h> +#include <qpixmap.h> + +#include <klistview.h> + +#include "Data.h" + +class QPen; +class KSVAction; +class SimpleAction; +class KSVDragList; +class KPopupMenu; +class KSVConfig; +class KDLToolTip; + +class KSVItem : public QListViewItem +{ +public: + typedef enum { + SortNumber = 0, + Icon, + ServiceName, + FileName, + + // insert additional columns here + + Last + } Columns; + + KSVItem (KListView*); + KSVItem (const KSVItem&); + explicit KSVItem (KSVDragList*, const KSVData&); + KSVItem (KListView* view, QString file, QString path, QString label, Q_INT8 nr ); + virtual ~KSVItem (); + + virtual QString key (int col, bool ascending) const; + + inline bool isChanged() const { return mData->changed(); } + + inline bool isNumChanged() const { return mData->numberChanged(); } + inline bool isLabelChanged() const { return mData->labelChanged(); } + inline bool isNew() const { return mData->newEntry(); } + + inline const QString& oldFilename() const { return mData->oldFilename(); } + inline const QString& filename() const { return mData->filename(); } + inline const QString& oldLabel() const { return mData->oldLabel(); } + inline const QString& label() const { return mData->label(); } + inline const QString& runlevel() const { return mData->runlevel(); } + + inline QString filenameAndPath() const { return mData->filenameAndPath (); } + + inline const QString& path() const { return mData->path(); } + + inline Q_INT8 number() const { return mData->number(); } + inline Q_INT8 oldNumber() const { return mData->oldNumber(); } + + void copy (const KSVData&); + + KSVData* data () { return mData; } + const KSVData* data () const { return mData; } + + QString toString () const; + + inline bool operator== (const KSVItem & rhs) const { return mData == rhs.mData; } + + inline const QColor& newNormalColor () const + { + return mNewNormalColor; + } + + inline const QColor& changedNormalColor () const + { + return mChangedNormalColor; + } + + inline QString originalRunlevel() const { return mData->originalRunlevel(); } + + void setIcon (const QPixmap& icon); + void setLabel (const QString& label); + void setFilename (const QString& file); + void setRunlevel (const QString& runlevel); + void setNumber (Q_INT8 nr); + void setPath (const QString& path); + void setChanged (bool); + void setNewNormalColor (const QColor&); + void setChangedNormalColor (const QColor&); + void setNewSelectedColor (const QColor&); + void setChangedSelectedColor (const QColor&); + void setNew (bool); + void setOriginalRunlevel (const QString&); + + inline void setNumberChanged (bool val) { mData->setNumberChanged (val); } + + QString tooltip () const; + virtual void paintCell (QPainter* p, const QColorGroup& cg, int column, int width, int align); + +protected: + friend class KSVDragList; + friend class KServiceDragList; + + QPixmap paintDragIcon (const QFont& f, const QColorGroup& g) const; + +private: + friend class KSVDrag; + + KSVData* mData; + KSVConfig* mConfig; + + QColor mNewNormalColor; + QColor mNewSelectedColor; + QColor mChangedNormalColor; + QColor mChangedSelectedColor; +}; + +class KSVDragList : public KListView +{ + Q_OBJECT + +public: + KSVDragList ( QWidget* parent = 0, const char* name = 0 ); + virtual ~KSVDragList(); + + virtual void clear(); + + inline bool displayToolTips () const { return mDisplayToolTips; } + inline bool commonToolTips () const { return mCommonToolTips; } + + inline const QString& tooltip () const { return mToolTip; } + inline const QString& horizontalScrollBarTip () const { return mHorizontalTip; } + inline const QString& verticalScrollBarTip () const { return mVerticalTip; } + + virtual void initItem (QString file, QString path, QString name, Q_INT8 nr); + QPtrList<KSVData>& getDeletedItems() { return mRMList; } + + /** + * @return whether this is the currently "selected" KSVDragList. + */ + inline bool isOrigin() const { return mOrigin; } + + inline KSVItem* currentItem() { return static_cast<KSVItem*> (KListView::currentItem()); } + + inline KSVItem* lastItem () { return static_cast<KSVItem*> (KListView::lastItem()); } + + /** + * @return true if the insertion was successful. + */ + bool insert (const KSVData& data, const KSVData* above = 0L, const KSVData* below = 0L); + + bool insert (const KSVData& data, const KSVItem* where, KSVAction*& action); + + inline const QPixmap& defaultIcon() const { return mIcon; } + + bool removeFromRMList (const KSVData&); + bool addToRMList (const KSVData&); + void clearRMList(); + + KSVItem* match (const KSVData&); + + inline void setDisplayToolTips (bool val) { mDisplayToolTips = val; } + inline void setCommonToolTips (bool val) { mCommonToolTips = val; } + inline void setHorizontalScrollBarTip (const QString& t) { mHorizontalTip = t; } + inline void setVerticalScrollBarTip (const QString& t) { mVerticalTip = t; } + inline void setToolTip (const QString& t) { mToolTip = t; } + +public slots: + void setNewNormalColor (const QColor &); + void setChangedNormalColor (const QColor &); + void setNewSelectedColor (const QColor &); + void setChangedSelectedColor (const QColor &); + + void setOrigin (bool); + inline void slotNewOrigin() { setOrigin (false); } + + void setDefaultIcon (const QPixmap& icon); + + void drop (QDropEvent*, QListViewItem*); + + virtual void setEnabled (bool); + +protected: + virtual void focusInEvent (QFocusEvent*); + virtual bool acceptDrag (QDropEvent*) const; + virtual QDragObject* dragObject (); +// virtual KSVDrag* dragObject (); + + virtual void startDrag (); + + /** + * Generates a sorting number for an item at + * the given index by taking the average of the item + * above and the item below. + */ + Q_INT8 generateNumber (Q_INT8 high, Q_INT8 low) const; + + /** + * A convenience function that also takes the label into account + */ + Q_INT8 generateNumber (const QString& label, const KSVData* itemAbove, const KSVData* itemBelow) const; + + KSVItem* mItemToDrag; + +private: + QPixmap mIcon; + + bool mOrigin; + QPtrList<KSVData> mRMList; + + QColor mNewNormalColor; + QColor mNewSelectedColor; + QColor mChangedNormalColor; + QColor mChangedSelectedColor; + + KPopupMenu* mDragMenu; + KPopupMenu* mDragCopyMenu; + KPopupMenu* mDragMoveMenu; + KDLToolTip* toolTip; + typedef enum { Copy, Move } DragAction; + + QString mToolTip, mHorizontalTip, mVerticalTip; + bool mDisplayToolTips, mCommonToolTips; + +signals: + void newOrigin(); + void newOrigin (KSVDragList*); + + void cannotGenerateNumber(); + void undoAction(KSVAction*); +}; + +class KServiceDragList : public KSVDragList +{ +public: + KServiceDragList (QWidget* parent = 0L, const char* name = 0L); + virtual ~KServiceDragList (); + +protected: + virtual void startDrag (); +}; + +#endif |