Set OOR info for wx.TaskBarIcon so we can emit wx.PyDeadObjectErrors if the C++ objec...
[wxpython:mirror.git] / src / _taskbar.i
1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        _taskbar.i
3 // Purpose:     SWIG interface defs for wxTaskBarIcon
4 //
5 // Author:      Robin Dunn
6 //
7 // Created:     2-June-1998
8 // RCS-ID:      $Id$
9 // Copyright:   (c) 2003 by Total Control Software
10 // Licence:     wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
12
13 // Not a %module
14
15
16 //---------------------------------------------------------------------------
17
18 %{
19 %}
20
21 //---------------------------------------------------------------------------
22 %newgroup;
23
24
25 %{
26 #ifndef wxHAS_TASK_BAR_ICON
27 // implement dummy classes for platforms that don't have it
28
29 class wxTaskBarIcon : public wxEvtHandler
30 {
31 public:
32     wxTaskBarIcon()  { wxPyRaiseNotImplemented(); }
33 };
34
35
36 class wxTaskBarIconEvent : public wxEvent
37 {
38 public:
39     wxTaskBarIconEvent(wxEventType, wxTaskBarIcon *)
40         { wxPyRaiseNotImplemented(); }
41     virtual wxEvent* Clone() const { return NULL; }
42     bool IsOk() const { return false; }
43     bool IsIconInstalled() const { return false; }
44     bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxPyEmptyString) { return false; }
45     bool RemoveIcon() { return false; }
46     bool PopupMenu(wxMenu *menu) { return false; }
47
48     static bool IsAvailable() { return false; };
49 };
50
51 enum {
52     wxEVT_TASKBAR_MOVE = 0,
53     wxEVT_TASKBAR_LEFT_DOWN = 0,
54     wxEVT_TASKBAR_LEFT_UP = 0,
55     wxEVT_TASKBAR_RIGHT_DOWN = 0,
56     wxEVT_TASKBAR_RIGHT_UP = 0,
57     wxEVT_TASKBAR_LEFT_DCLICK = 0,
58     wxEVT_TASKBAR_RIGHT_DCLICK = 0,
59 };
60
61
62 #else
63 // Otherwise make a class that can virtualize CreatePopupMenu
64 class wxPyTaskBarIcon : public wxTaskBarIcon
65 {
66     DECLARE_ABSTRACT_CLASS(wxPyTaskBarIcon)
67 public:
68     wxPyTaskBarIcon() : wxTaskBarIcon()
69     {}
70
71     wxMenu* CreatePopupMenu() {
72         wxMenu *rval = NULL;
73         bool found;
74         wxPyBlock_t blocked = wxPyBeginBlockThreads();
75         if ((found = wxPyCBH_findCallback(m_myInst, "CreatePopupMenu"))) {
76             PyObject* ro;
77             wxMenu* ptr;
78             ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()"));
79             if (ro) {
80                 if (wxPyConvertSwigPtr(ro, (void **)&ptr, wxT("wxMenu")))
81                     rval = ptr;
82                 Py_DECREF(ro);
83             }
84         }
85         wxPyEndBlockThreads(blocked);
86         if (! found)
87             rval = wxTaskBarIcon::CreatePopupMenu();
88         return rval;
89     }
90
91     PYPRIVATE;
92 };
93
94 IMPLEMENT_ABSTRACT_CLASS(wxPyTaskBarIcon, wxTaskBarIcon);
95
96 #endif
97 %}
98
99
100 MustHaveApp(wxPyTaskBarIcon);
101
102 %rename(TaskBarIcon) wxPyTaskBarIcon;
103 class wxPyTaskBarIcon : public wxEvtHandler
104 {
105 public:
106     %pythonAppend wxPyTaskBarIcon   "self._setOORInfo(self);" setCallbackInfo(TaskBarIcon)
107
108     wxPyTaskBarIcon();
109     ~wxPyTaskBarIcon();
110
111     void _setCallbackInfo(PyObject* self, PyObject* _class, int incref=0);
112
113     void Destroy();
114     
115     bool IsOk() const;
116     %pythoncode { def __nonzero__(self): return self.IsOk() }
117
118     bool IsIconInstalled() const;
119
120     bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxPyEmptyString);
121     bool RemoveIcon();
122     bool PopupMenu(wxMenu *menu);
123
124     DocStr(ShowBalloon,
125            "Show a balloon notification (the icon must have been already
126 initialized using SetIcon).  Only implemented for Windows.
127
128 title and text are limited to 63 and 255 characters respectively, msec
129 is the timeout, in milliseconds, before the balloon disappears (will
130 be clamped down to the allowed 10-30s range by Windows if it's outside
131 it) and flags can include wxICON_ERROR/INFO/WARNING to show a
132 corresponding icon
133
134 Returns True if balloon was shown, False on error (incorrect parameters
135 or function unsupported by OS)
136 ", "");
137 #ifdef __WXMSW__
138     bool ShowBalloon(const wxString& title,
139                      const wxString& text,
140                      unsigned msec = 0,
141                      int flags = 0);
142
143 #else
144     %extend {
145         bool ShowBalloon(const wxString& title,
146                          const wxString& text,
147                          unsigned msec = 0,
148                          int flags = 0)  { return false; }
149     }
150 #endif
151
152     static bool IsAvailable();
153 };
154
155
156
157 class wxTaskBarIconEvent : public wxEvent
158 {
159 public:
160     wxTaskBarIconEvent(wxEventType evtType, wxTaskBarIcon *tbIcon);
161 };
162
163
164
165 %constant wxEventType wxEVT_TASKBAR_MOVE;
166 %constant wxEventType wxEVT_TASKBAR_LEFT_DOWN;
167 %constant wxEventType wxEVT_TASKBAR_LEFT_UP;
168 %constant wxEventType wxEVT_TASKBAR_RIGHT_DOWN;
169 %constant wxEventType wxEVT_TASKBAR_RIGHT_UP;
170 %constant wxEventType wxEVT_TASKBAR_LEFT_DCLICK;
171 %constant wxEventType wxEVT_TASKBAR_RIGHT_DCLICK;
172 %constant wxEventType wxEVT_TASKBAR_CLICK;
173 %constant wxEventType wxEVT_TASKBAR_BALLOON_TIMEOUT;
174 %constant wxEventType wxEVT_TASKBAR_BALLOON_CLICK;
175
176
177 %pythoncode {
178 EVT_TASKBAR_MOVE = wx.PyEventBinder (         wxEVT_TASKBAR_MOVE )
179 EVT_TASKBAR_LEFT_DOWN = wx.PyEventBinder (    wxEVT_TASKBAR_LEFT_DOWN )
180 EVT_TASKBAR_LEFT_UP = wx.PyEventBinder (      wxEVT_TASKBAR_LEFT_UP )
181 EVT_TASKBAR_RIGHT_DOWN = wx.PyEventBinder (   wxEVT_TASKBAR_RIGHT_DOWN )
182 EVT_TASKBAR_RIGHT_UP = wx.PyEventBinder (     wxEVT_TASKBAR_RIGHT_UP )
183 EVT_TASKBAR_LEFT_DCLICK = wx.PyEventBinder (  wxEVT_TASKBAR_LEFT_DCLICK )
184 EVT_TASKBAR_RIGHT_DCLICK = wx.PyEventBinder ( wxEVT_TASKBAR_RIGHT_DCLICK )
185 EVT_TASKBAR_CLICK =  wx.PyEventBinder (       wxEVT_TASKBAR_CLICK )
186 EVT_TASKBAR_BALLOON_TIMEOUT = wx.PyEventBinder ( wxEVT_TASKBAR_BALLOON_TIMEOUT )
187 EVT_TASKBAR_BALLOON_CLICK = wx.PyEventBinder ( wxEVT_TASKBAR_BALLOON_CLICK )
188 }
189
190 //---------------------------------------------------------------------------