aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/contextmenu.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/contextmenu.h')
-rw-r--r--Src/Wasabi/api/wnd/contextmenu.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/contextmenu.h b/Src/Wasabi/api/wnd/contextmenu.h
new file mode 100644
index 00000000..61d32b91
--- /dev/null
+++ b/Src/Wasabi/api/wnd/contextmenu.h
@@ -0,0 +1,42 @@
+#ifndef _CONTEXTMENU_H
+#define _CONTEXTMENU_H
+
+#include <api/wnd/popup.h>
+#include <bfc/common.h>
+
+class DragItem;
+class ContextMenuEntry;
+class ContextMenuEntryCompare;
+class svc_contextCmd;
+
+class ContextMenu : private PopupMenu, private PopupMenuCallback
+{
+public:
+ ContextMenu(ifc_window *sourceWnd, DragItem *item, bool autopop=TRUE, const wchar_t *menu_path=NULL);
+ ContextMenu(ifc_window *sourceWnd, int x, int y, DragItem *item, bool autopop=TRUE, const wchar_t *menu_path=NULL);
+ virtual ~ContextMenu();
+
+ void addDragItem(DragItem *item, const wchar_t *menu_path=NULL);
+
+ using PopupMenu::popAtXY;
+ using PopupMenu::popAtMouse;
+ using PopupMenu::addCommand;
+ using PopupMenu::addSeparator;
+ using PopupMenu::getNumCommands;
+
+protected:
+ ContextMenu(DragItem *item, const wchar_t *menu_path);
+
+private:
+ virtual void onPostPop(intptr_t result);
+
+ void populate();
+ virtual PopupMenu *popupMenuCallback(PopupMenu *parent, intptr_t param);
+
+ DragItem *item;
+ StringW menu_path;
+ PtrList<svc_contextCmd> svclist;
+ PtrListQuickSorted<ContextMenuEntry, ContextMenuEntryCompare> entries;
+};
+
+#endif