1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxTaskBarIcon demo
4 // Author: Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
31 // the application icon (under Windows and OS/2 it is in resources)
32 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
33 #include "../sample.xpm"
38 #include "wx/taskbar.h"
42 // ----------------------------------------------------------------------------
44 // ----------------------------------------------------------------------------
46 static MyDialog
*gs_dialog
= NULL
;
48 // ============================================================================
50 // ============================================================================
52 // ----------------------------------------------------------------------------
54 // ----------------------------------------------------------------------------
60 if ( !wxApp::OnInit() )
63 if ( !wxTaskBarIcon::IsAvailable() )
67 "There appears to be no system tray support in your current environment. This sample may not behave as expected.",
69 wxOK
| wxICON_EXCLAMATION
73 // Create the main window
74 gs_dialog
= new MyDialog(wxT("wxTaskBarIcon Test Dialog"));
76 gs_dialog
->Show(true);
82 // ----------------------------------------------------------------------------
83 // MyDialog implementation
84 // ----------------------------------------------------------------------------
86 BEGIN_EVENT_TABLE(MyDialog
, wxDialog
)
87 EVT_BUTTON(wxID_ABOUT
, MyDialog::OnAbout
)
88 EVT_BUTTON(wxID_OK
, MyDialog::OnOK
)
89 EVT_BUTTON(wxID_EXIT
, MyDialog::OnExit
)
90 EVT_CLOSE(MyDialog::OnCloseWindow
)
94 MyDialog::MyDialog(const wxString
& title
)
95 : wxDialog(NULL
, wxID_ANY
, title
)
97 wxSizer
* const sizerTop
= new wxBoxSizer(wxVERTICAL
);
100 flags
.Border(wxALL
, 10);
102 sizerTop
->Add(new wxStaticText
106 _T("Press 'Hide me' to hide this window, Exit to quit.")
109 sizerTop
->Add(new wxStaticText
113 _T("Double-click on the taskbar icon to show me again.")
116 sizerTop
->AddStretchSpacer()->SetMinSize(200, 50);
118 wxSizer
* const sizerBtns
= new wxBoxSizer(wxHORIZONTAL
);
119 sizerBtns
->Add(new wxButton(this, wxID_ABOUT
, _T("&About")), flags
);
120 sizerBtns
->Add(new wxButton(this, wxID_OK
, _T("&Hide")), flags
);
121 sizerBtns
->Add(new wxButton(this, wxID_EXIT
, _T("E&xit")), flags
);
123 sizerTop
->Add(sizerBtns
, flags
.Align(wxALIGN_CENTER_HORIZONTAL
));
124 SetSizerAndFit(sizerTop
);
127 m_taskBarIcon
= new MyTaskBarIcon();
128 #if defined(__WXCOCOA__)
129 m_dockIcon
= new MyTaskBarIcon(wxTaskBarIcon::DOCK
);
132 // we should be able to show up to 128 characters on recent Windows versions
134 if ( !m_taskBarIcon
->SetIcon(wxICON(sample
),
135 "wxTaskBarIcon Sample\n"
136 "With a very, very, very, very\n"
137 "long tooltip whose length is\n"
138 "greater than 64 characters.") )
140 wxLogError(wxT("Could not set icon."));
144 MyDialog::~MyDialog()
146 delete m_taskBarIcon
;
147 #if defined(__WXCOCOA__)
152 void MyDialog::OnAbout(wxCommandEvent
& WXUNUSED(event
))
154 static const char * const title
= "About wxWidgets Taskbar Sample";
155 static const char * const message
156 = "wxWidgets sample showing wxTaskBarIcon class\n"
158 "(C) 1997 Julian Smart\n"
159 "(C) 2007 Vadim Zeitlin";
161 #if defined(__WXMSW__) && wxUSE_TASKBARICON_BALLOONS
162 m_taskBarIcon
->ShowBalloon(title
, message
, 15000, wxICON_INFORMATION
);
164 wxMessageBox(message
, title
, wxICON_INFORMATION
|wxOK
, this);
165 #endif // __WXMSW__/!__WXMSW__
168 void MyDialog::OnOK(wxCommandEvent
& WXUNUSED(event
))
173 void MyDialog::OnExit(wxCommandEvent
& WXUNUSED(event
))
178 void MyDialog::OnCloseWindow(wxCloseEvent
& WXUNUSED(event
))
184 // ----------------------------------------------------------------------------
185 // MyTaskBarIcon implementation
186 // ----------------------------------------------------------------------------
200 BEGIN_EVENT_TABLE(MyTaskBarIcon
, wxTaskBarIcon
)
201 EVT_MENU(PU_RESTORE
, MyTaskBarIcon::OnMenuRestore
)
202 EVT_MENU(PU_EXIT
, MyTaskBarIcon::OnMenuExit
)
203 EVT_MENU(PU_NEW_ICON
,MyTaskBarIcon::OnMenuSetNewIcon
)
204 EVT_MENU(PU_CHECKMARK
,MyTaskBarIcon::OnMenuCheckmark
)
205 EVT_UPDATE_UI(PU_CHECKMARK
,MyTaskBarIcon::OnMenuUICheckmark
)
206 EVT_TASKBAR_LEFT_DCLICK (MyTaskBarIcon::OnLeftButtonDClick
)
207 EVT_MENU(PU_SUB1
, MyTaskBarIcon::OnMenuSub
)
208 EVT_MENU(PU_SUB2
, MyTaskBarIcon::OnMenuSub
)
211 void MyTaskBarIcon::OnMenuRestore(wxCommandEvent
& )
213 gs_dialog
->Show(true);
216 void MyTaskBarIcon::OnMenuExit(wxCommandEvent
& )
218 gs_dialog
->Close(true);
221 static bool check
= true;
223 void MyTaskBarIcon::OnMenuCheckmark(wxCommandEvent
& )
228 void MyTaskBarIcon::OnMenuUICheckmark(wxUpdateUIEvent
&event
)
233 void MyTaskBarIcon::OnMenuSetNewIcon(wxCommandEvent
&)
235 wxIcon
icon(smile_xpm
);
237 if (!SetIcon(icon
, wxT("wxTaskBarIcon Sample - a different icon")))
238 wxMessageBox(wxT("Could not set new icon."));
241 void MyTaskBarIcon::OnMenuSub(wxCommandEvent
&)
243 wxMessageBox(wxT("You clicked on a submenu!"));
247 wxMenu
*MyTaskBarIcon::CreatePopupMenu()
249 wxMenu
*menu
= new wxMenu
;
250 menu
->Append(PU_RESTORE
, _T("&Restore main window"));
251 menu
->AppendSeparator();
252 menu
->Append(PU_NEW_ICON
, _T("&Set New Icon"));
253 menu
->AppendSeparator();
254 menu
->AppendCheckItem(PU_CHECKMARK
, _T("Test &check mark"));
255 menu
->AppendSeparator();
256 wxMenu
*submenu
= new wxMenu
;
257 submenu
->Append(PU_SUB1
, _T("One submenu"));
258 submenu
->AppendSeparator();
259 submenu
->Append(PU_SUB2
, _T("Another submenu"));
260 menu
->Append(PU_SUBMAIN
, _T("Submenu"), submenu
);
261 #ifndef __WXMAC_OSX__ /*Mac has built-in quit menu*/
262 menu
->AppendSeparator();
263 menu
->Append(PU_EXIT
, _T("E&xit"));
268 void MyTaskBarIcon::OnLeftButtonDClick(wxTaskBarIconEvent
&)
270 gs_dialog
->Show(true);