///////////////////////////////////////////////////////////////////////////// // Name: tbtest.cpp // Purpose: wxTaskBarIcon demo // Author: Julian Smart // Modified by: // Created: 01/02/97 // Copyright: (c) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "smile.xpm" #include "smile2.xpm" #include "wx/artprov.h" #include "wx/taskbar.h" #include "tbtest.h" // ---------------------------------------------------------------------------- // global variables // ---------------------------------------------------------------------------- static MyDialog *gs_dialog = NULL; // ============================================================================ // implementation // ============================================================================ // ---------------------------------------------------------------------------- // MyApp // ---------------------------------------------------------------------------- wxIMPLEMENT_APP(MyApp); bool MyApp::OnInit() { if ( !wxApp::OnInit() ) return false; if ( !wxTaskBarIcon::IsAvailable() ) { wxMessageBox ( "There appears to be no system tray support in your current environment. This sample may not behave as expected.", "Warning", wxOK | wxICON_EXCLAMATION ); } // Create the main window gs_dialog = new MyDialog("wxTaskBarIcon Test Dialog"); gs_dialog->Show(true); return true; } // ---------------------------------------------------------------------------- // MyDialog implementation // ---------------------------------------------------------------------------- wxBEGIN_EVENT_TABLE(MyDialog, wxDialog) EVT_BUTTON(wxID_ABOUT, MyDialog::OnAbout) EVT_BUTTON(wxID_OK, MyDialog::OnOK) EVT_BUTTON(wxID_EXIT, MyDialog::OnExit) EVT_CLOSE(MyDialog::OnCloseWindow) wxEND_EVENT_TABLE() MyDialog::MyDialog(const wxString& title) : wxDialog(NULL, wxID_ANY, title) { wxSizer * const sizerTop = new wxBoxSizer(wxVERTICAL); wxSizerFlags flags; flags.Border(wxALL, 10); sizerTop->Add(new wxStaticText ( this, wxID_ANY, "Press 'Hide me' to hide this window, Exit to quit." ), flags); sizerTop->Add(new wxStaticText ( this, wxID_ANY, "Double-click on the taskbar icon to show me again." ), flags); sizerTop->AddStretchSpacer()->SetMinSize(200, 50); wxSizer * const sizerBtns = new wxBoxSizer(wxHORIZONTAL); sizerBtns->Add(new wxButton(this, wxID_ABOUT, "&About"), flags); sizerBtns->Add(new wxButton(this, wxID_OK, "&Hide"), flags); sizerBtns->Add(new wxButton(this, wxID_EXIT, "E&xit"), flags); sizerTop->Add(sizerBtns, flags.Align(wxALIGN_CENTER_HORIZONTAL)); SetSizerAndFit(sizerTop); Centre(); m_taskBarIcon = new MyTaskBarIcon(); // we should be able to show up to 128 characters on Windows if (!m_taskBarIcon->SetIcon(wxArtProvider::GetBitmapBundle(wxART_WX_LOGO, wxART_OTHER, wxSize(32, 32)), "wxTaskBarIcon Sample\n" "With a very, very, very, very\n" "long tooltip whose length is\n" "greater than 64 characters.") ) { wxLogError("Could not set icon."); } #if defined(__WXOSX__) && wxOSX_USE_COCOA m_dockIcon = new MyTaskBarIcon(wxTBI_DOCK); if ( !m_dockIcon->SetIcon(wxArtProvider::GetBitmapBundle(wxART_WX_LOGO, wxART_OTHER, wxSize(32, 32))) ) { wxLogError("Could not set icon."); } #endif } MyDialog::~MyDialog() { delete m_taskBarIcon; } void MyDialog::OnAbout(wxCommandEvent& WXUNUSED(event)) { static const char * const title = "About wxWidgets Taskbar Sample"; static const char * const message = "wxWidgets sample showing wxTaskBarIcon class\n" "\n" "(C) 1997 Julian Smart\n" "(C) 2007 Vadim Zeitlin"; #if defined(__WXMSW__) && wxUSE_TASKBARICON_BALLOONS m_taskBarIcon->ShowBalloon(title, message, 15000, wxICON_INFORMATION, wxBitmapBundle::FromSVGFile("info.svg", wxSize(64, 64)) ); #else // !__WXMSW__ wxMessageBox(message, title, wxICON_INFORMATION|wxOK, this); #endif // __WXMSW__/!__WXMSW__ } void MyDialog::OnOK(wxCommandEvent& WXUNUSED(event)) { Show(false); } void MyDialog::OnExit(wxCommandEvent& WXUNUSED(event)) { Close(true); } void MyDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) { Destroy(); } // ---------------------------------------------------------------------------- // MyTaskBarIcon implementation // ---------------------------------------------------------------------------- enum { PU_RESTORE = 10001, PU_NEW_ICON, PU_EXIT, PU_CHECKMARK, PU_SUB1, PU_SUB2, PU_SUBMAIN }; wxBEGIN_EVENT_TABLE(MyTaskBarIcon, wxTaskBarIcon) EVT_MENU(PU_RESTORE, MyTaskBarIcon::OnMenuRestore) EVT_MENU(PU_EXIT, MyTaskBarIcon::OnMenuExit) EVT_MENU(PU_NEW_ICON,MyTaskBarIcon::OnMenuSetNewIcon) EVT_MENU(PU_CHECKMARK,MyTaskBarIcon::OnMenuCheckmark) EVT_UPDATE_UI(PU_CHECKMARK,MyTaskBarIcon::OnMenuUICheckmark) EVT_TASKBAR_LEFT_DCLICK (MyTaskBarIcon::OnLeftButtonDClick) EVT_MENU(PU_SUB1, MyTaskBarIcon::OnMenuSub) EVT_MENU(PU_SUB2, MyTaskBarIcon::OnMenuSub) wxEND_EVENT_TABLE() void MyTaskBarIcon::OnMenuRestore(wxCommandEvent& ) { gs_dialog->Show(true); } void MyTaskBarIcon::OnMenuExit(wxCommandEvent& ) { gs_dialog->Close(true); } static bool check = true; void MyTaskBarIcon::OnMenuCheckmark(wxCommandEvent& ) { check = !check; } void MyTaskBarIcon::OnMenuUICheckmark(wxUpdateUIEvent &event) { event.Check(check); } void MyTaskBarIcon::OnMenuSetNewIcon(wxCommandEvent&) { wxIcon icon(smile_xpm); if (!SetIcon(wxBitmapBundle::FromBitmaps( wxBitmap(smile_xpm), wxBitmap(smile2_xpm) ), "wxTaskBarIcon Sample - a different icon")) wxMessageBox("Could not set new icon."); } void MyTaskBarIcon::OnMenuSub(wxCommandEvent&) { wxMessageBox("You clicked on a submenu!"); } // Overridables wxMenu *MyTaskBarIcon::CreatePopupMenu() { wxMenu *menu = new wxMenu; menu->Append(PU_RESTORE, "&Restore main window"); menu->AppendSeparator(); menu->Append(PU_NEW_ICON, "&Set New Icon"); menu->AppendSeparator(); menu->AppendCheckItem(PU_CHECKMARK, "Test &check mark"); menu->AppendSeparator(); wxMenu *submenu = new wxMenu; submenu->Append(PU_SUB1, "One submenu"); submenu->AppendSeparator(); submenu->Append(PU_SUB2, "Another submenu"); menu->Append(PU_SUBMAIN, "Submenu", submenu); /* OSX has built-in quit menu for the dock menu, but not for the status item */ #ifdef __WXOSX__ if ( OSXIsStatusItem() ) #endif { menu->AppendSeparator(); menu->Append(PU_EXIT, "E&xit"); } return menu; } void MyTaskBarIcon::OnLeftButtonDClick(wxTaskBarIconEvent&) { gs_dialog->Show(true); }