diff options
Diffstat (limited to 'kmenuedit/treeview.h')
-rw-r--r-- | kmenuedit/treeview.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/kmenuedit/treeview.h b/kmenuedit/treeview.h new file mode 100644 index 000000000..13d415c13 --- /dev/null +++ b/kmenuedit/treeview.h @@ -0,0 +1,179 @@ +/* + * Copyright (C) 2000 Matthias Elter <elter@kde.org> + * Copyright (C) 2001-2002 Raffaele Sandrini <sandrini@kde.org> + * Copyright (C) 2003 Waldo Bastian <bastian@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; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef __treeview_h__ +#define __treeview_h__ + +#include <qstring.h> +#include <klistview.h> +#include <kservice.h> +#include <kservicegroup.h> + +class QPopupMenu; +class KActionCollection; +class KDesktopFile; +class MenuFile; +class MenuFolderInfo; +class MenuEntryInfo; +class MenuSeparatorInfo; +class KShortcut; + +class TreeItem : public QListViewItem +{ +public: + TreeItem(QListViewItem *parent, QListViewItem *after, const QString &menuIdn, bool __init = false); + TreeItem(QListView *parent, QListViewItem* after, const QString &menuId, bool __init = false); + + QString menuId() const { return _menuId; } + + QString directory() const { return _directoryPath; } + void setDirectoryPath(const QString& path) { _directoryPath = path; } + + MenuFolderInfo *folderInfo() { return m_folderInfo; } + void setMenuFolderInfo(MenuFolderInfo *folderInfo) { m_folderInfo = folderInfo; } + + MenuEntryInfo *entryInfo() { return m_entryInfo; } + void setMenuEntryInfo(MenuEntryInfo *entryInfo) { m_entryInfo = entryInfo; } + + QString name() const { return _name; } + void setName(const QString &name); + + bool isDirectory() const { return m_folderInfo; } + bool isEntry() const { return m_entryInfo; } + + bool isHidden() const { return _hidden; } + void setHidden(bool b); + + bool isLayoutDirty() { return _layoutDirty; } + void setLayoutDirty() { _layoutDirty = true; } + QStringList layout(); + + virtual void setOpen(bool o); + void load(); + + virtual void paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align); + virtual void setup(); + +private: + void update(); + + bool _hidden : 1; + bool _init : 1; + bool _layoutDirty : 1; + QString _menuId; + QString _name; + QString _directoryPath; + MenuFolderInfo *m_folderInfo; + MenuEntryInfo *m_entryInfo; +}; + +class TreeView : public KListView +{ + friend class TreeItem; + Q_OBJECT +public: + TreeView(bool controlCenter, KActionCollection *ac, QWidget *parent=0, const char *name=0); + ~TreeView(); + + void readMenuFolderInfo(MenuFolderInfo *folderInfo=0, KServiceGroup::Ptr folder=0, const QString &prefix=QString::null); + void setViewMode(bool showHidden); + bool save(); + + bool dirty(); + + void selectMenu(const QString &menu); + void selectMenuEntry(const QString &menuEntry); + +public slots: + void currentChanged(MenuFolderInfo *folderInfo); + void currentChanged(MenuEntryInfo *entryInfo); + void findServiceShortcut(const KShortcut&, KService::Ptr &); + +signals: + void entrySelected(MenuFolderInfo *folderInfo); + void entrySelected(MenuEntryInfo *entryInfo); + void disableAction(); +protected slots: + void itemSelected(QListViewItem *); + void slotDropped(QDropEvent *, QListViewItem *, QListViewItem *); + void slotRMBPressed(QListViewItem*, const QPoint&); + + void newsubmenu(); + void newitem(); + void newsep(); + + void cut(); + void copy(); + void paste(); + void del(); + +protected: + TreeItem *createTreeItem(TreeItem *parent, QListViewItem *after, MenuFolderInfo *folderInfo, bool _init = false); + TreeItem *createTreeItem(TreeItem *parent, QListViewItem *after, MenuEntryInfo *entryInfo, bool _init = false); + TreeItem *createTreeItem(TreeItem *parent, QListViewItem *after, MenuSeparatorInfo *sepInfo, bool _init = false); + + void del(TreeItem *, bool deleteInfo); + void fill(); + void fillBranch(MenuFolderInfo *folderInfo, TreeItem *parent); + QString findName(KDesktopFile *df, bool deleted); + + void closeAllItems(QListViewItem *item); + + // moving = src will be removed later + void copy( bool moving ); + + void cleanupClipboard(); + + bool isLayoutDirty(); + void setLayoutDirty(TreeItem *); + void saveLayout(); + + QStringList fileList(const QString& relativePath); + QStringList dirList(const QString& relativePath); + + virtual bool acceptDrag(QDropEvent* event) const; + virtual QDragObject *dragObject(); + virtual void startDrag(); + +private: + KActionCollection *m_ac; + QPopupMenu *m_rmb; + int m_clipboard; + MenuFolderInfo *m_clipboardFolderInfo; + MenuEntryInfo *m_clipboardEntryInfo; + int m_drag; + MenuFolderInfo *m_dragInfo; + TreeItem *m_dragItem; + QString m_dragPath; + bool m_showHidden; + bool m_controlCenter; + MenuFile *m_menuFile; + MenuFolderInfo *m_rootFolder; + MenuSeparatorInfo *m_separator; + QStringList m_newMenuIds; + QStringList m_newDirectoryList; + bool m_detailedMenuEntries; + bool m_detailedEntriesNamesFirst; + bool m_layoutDirty; +}; + + +#endif |