aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/contextmenu.h
blob: 61d32b913d33816d06e6514a09f0c6de665bd869 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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