cmenumgr.py
3.3 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
###############################################################################
# Name: cmenumgr.py #
# Purpose: ContextMenu Manager #
# Author: Cody Precord <cprecord@editra.org> #
# Copyright: (c) 2010 Cody Precord <staff@editra.org> #
# Licence: wxWindows Licence #
###############################################################################
"""
Editra Business Model Library: ContextMenuManager
Helper class for managing context menu callbacks
"""
__author__ = "Cody Precord <cprecord@editra.org>"
__cvsid__ = "$Id: cmenumgr.py 69118 2011-09-17 18:46:15Z CJP $"
__revision__ = "$Revision: 69118 $"
__all__ = [ 'ContextMenuManager', ]
#-----------------------------------------------------------------------------#
# Imports
import wx
#-----------------------------------------------------------------------------#
class ContextMenuManager(object):
"""Class for registering and managing context menu callbacks"""
def __init__(self):
super(ContextMenuManager, self).__init__()
# Attributes
self._menu = None # Context Menu
self._pos = (0, 0) # Menu position
self._handlers = dict() # {ID : callable(event)}
self._userdata = dict()
Menu = property(lambda self: self.GetMenu(),
lambda self, menu: self.SetMenu(menu))
Position = property(lambda self: self.GetPosition(),
lambda self, pos: self.SetPosition(pos))
def __del__(self):
"""Cleanup when it goes out of scope"""
self.Clear()
def AddHandler(self, evt_id, handler):
"""Add an event handler
@param evt_id: int
@param handler: callable(event)
"""
self._handlers[evt_id] = handler
def Clear(self):
"""Clear all handlers and destroy the menu"""
self._handlers.clear()
self._userdata.clear()
if self._menu:
self._menu.Destroy()
def GetHandler(self, evt_id):
"""Get the event handler for the provided ID or None
@param evt_id: int
@return: callable or None
"""
return self._handlers.get(evt_id, None)
def GetMenu(self):
"""Get the menu that is being managed by this manager
@return: wxMenu
"""
return self._menu
def GetPosition(self):
"""Get the menu position
@return: tuple (int, int)
"""
return self._pos
def GetUserData(self, key):
"""Get user data
@param key: data id key
"""
return self._userdata.get(key, None)
def SetMenu(self, menu):
"""Set the menu that this manager should manage
@param menu: wxMenu
"""
assert isinstance(menu, wx.Menu), "menu must be a wxMenu"
self._menu = menu
def SetPosition(self, pos):
"""Set the menu position
@param pos: tuple (int, int)
"""
self._pos = pos
def SetUserData(self, key, data):
"""Add custom user data to the manager
@param key: unique key used to retrieve the data later
@param data: user data
"""
self._userdata[key] = data