00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef SERVICE_MENU_H
00025 #define SERVICE_MENU_H
00026
00027 #include <tqmap.h>
00028 #include <set>
00029 #include <tqvaluevector.h>
00030
00031 #include <ksycocaentry.h>
00032 #include <kservice.h>
00033 #include <kpanelmenu.h>
00034 #include <kservicegroup.h>
00045 class KLineEdit;
00046 typedef TQMap<int, KSycocaEntry::Ptr> EntryMap;
00047 typedef TQValueVector<TQPopupMenu*> PopupMenuList;
00048 class PanelServiceMenu;
00049 typedef TQMap<PanelServiceMenu*,int> PanelServiceMenuMap;
00050
00051 class KDE_EXPORT PanelServiceMenu : public KPanelMenu
00052 {
00053 Q_OBJECT
00054
00055 public:
00056 PanelServiceMenu(const TQString & label, const TQString & relPath,
00057 TQWidget* parent = 0, const char* name = 0,
00058 bool addmenumode = false,
00059 const TQString &insertInlineHeader = TQString::null);
00060
00061 virtual ~PanelServiceMenu();
00062
00063 TQString relPath() { return relPath_; }
00064
00065 void setExcludeNoDisplay( bool flag );
00066
00067 virtual void showMenu();
00068 bool highlightMenuItem( const TQString &menuId );
00069 void selectFirstItem();
00070 void setSearchString(const TQString& searchString);
00071 bool hasSearchResults();
00072
00073 private:
00074 void fillMenu( KServiceGroup::Ptr &_root, KServiceGroup::List &_list,
00075 const TQString &_relPath, int & id );
00076
00077 protected slots:
00078 virtual void initialize();
00079 virtual void slotExec(int id);
00080 virtual void slotClearOnClose();
00081 virtual void slotClear();
00082 virtual void configChanged();
00083 virtual void slotClose();
00084 void slotDragObjectDestroyed();
00085
00086
00087 virtual void addNonKDEApp() {}
00088
00089 protected:
00090 void insertMenuItem(KService::Ptr & s, int nId, int nIndex = -1,
00091 const TQStringList *suppressGenericNames=0,
00092 const TQString &aliasname = TQString::null,
00093 const TQString &label = TQString::null, const TQString &categoryIcon = TQString::null);
00094 virtual PanelServiceMenu * newSubMenu(const TQString & label,
00095 const TQString & relPath,
00096 TQWidget * parent, const char * name,
00097 const TQString & _inlineHeader =
00098 TQString::null);
00099
00100 virtual void mousePressEvent(TQMouseEvent *);
00101 virtual void mouseReleaseEvent(TQMouseEvent *);
00102 virtual void mouseMoveEvent(TQMouseEvent *);
00103 virtual void dragEnterEvent(TQDragEnterEvent *);
00104 virtual void dragLeaveEvent(TQDragLeaveEvent *);
00105 virtual void updateRecentlyUsedApps(KService::Ptr &s);
00106 void activateParent(const TQString &child);
00107 int serviceMenuStartId() { return 4242; }
00108 int serviceMenuEndId() { return 5242; }
00109 virtual void clearSubmenus();
00110 void doInitialize();
00111
00112 TQString relPath_;
00113
00114 EntryMap entryMap_;
00115
00116 bool loaded_;
00117 bool excludeNoDisplay_;
00118 TQString insertInlineHeader_;
00119 TQPopupMenu * opPopup_;
00120 bool clearOnClose_;
00121 bool addmenumode_;
00122 TQPoint startPos_;
00123 PopupMenuList subMenus;
00124 PanelServiceMenuMap searchSubMenuIDs;
00125 bool hasSearchResults_;
00126 std::set<int> searchMenuItems;
00127
00128 private slots:
00129 void slotContextMenu(int);
00130
00131 private:
00132 enum ContextMenuEntry { AddItemToPanel, EditItem, AddMenuToPanel, EditMenu,
00133 AddItemToDesktop, AddMenuToDesktop, PutIntoRunDialog };
00134 KPopupMenu* popupMenu_;
00135 KSycocaEntry* contextKSycocaEntry_;
00136 void readConfig();
00137 };
00138
00139 #endif // SERVICE_MENU_H