e709239889
Add a special symbol which is defined only if the icons and other images (e.g. cursor) are in the separate resource files and don't need to be embedded as XPMs in the main program. This makes the checks more clear and more customizable as it's enough to change wxHAS_IMAGES_IN_RESOURCES definition instead of changing many platform checks. Closes #14050. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70789 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
281 lines
7.6 KiB
C++
281 lines
7.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: tbtest.cpp
|
|
// Purpose: wxTaskBarIcon demo
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 01/02/97
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c)
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ============================================================================
|
|
// declarations
|
|
// ============================================================================
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// For compilers that support precompilation, includes "wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/wx.h"
|
|
#endif
|
|
|
|
// the application icon (under Windows and OS/2 it is in resources)
|
|
#ifndef wxHAS_IMAGES_IN_RESOURCES
|
|
#include "../sample.xpm"
|
|
#endif
|
|
|
|
#include "smile.xpm"
|
|
|
|
#include "wx/taskbar.h"
|
|
|
|
#include "tbtest.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// global variables
|
|
// ----------------------------------------------------------------------------
|
|
|
|
static MyDialog *gs_dialog = NULL;
|
|
|
|
// ============================================================================
|
|
// implementation
|
|
// ============================================================================
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// MyApp
|
|
// ----------------------------------------------------------------------------
|
|
|
|
IMPLEMENT_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(wxT("wxTaskBarIcon Test Dialog"));
|
|
|
|
gs_dialog->Show(true);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// MyDialog implementation
|
|
// ----------------------------------------------------------------------------
|
|
|
|
BEGIN_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)
|
|
END_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,
|
|
wxT("Press 'Hide me' to hide this window, Exit to quit.")
|
|
), flags);
|
|
|
|
sizerTop->Add(new wxStaticText
|
|
(
|
|
this,
|
|
wxID_ANY,
|
|
wxT("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, wxT("&About")), flags);
|
|
sizerBtns->Add(new wxButton(this, wxID_OK, wxT("&Hide")), flags);
|
|
sizerBtns->Add(new wxButton(this, wxID_EXIT, wxT("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 recent Windows versions
|
|
// (and 64 on Win9x)
|
|
if ( !m_taskBarIcon->SetIcon(wxICON(sample),
|
|
"wxTaskBarIcon Sample\n"
|
|
"With a very, very, very, very\n"
|
|
"long tooltip whose length is\n"
|
|
"greater than 64 characters.") )
|
|
{
|
|
wxLogError(wxT("Could not set icon."));
|
|
}
|
|
|
|
#if defined(__WXOSX__) && wxOSX_USE_COCOA
|
|
m_dockIcon = new MyTaskBarIcon(wxTaskBarIcon::DOCK);
|
|
if ( !m_dockIcon->SetIcon(wxICON(sample)) )
|
|
{
|
|
wxLogError(wxT("Could not set icon."));
|
|
}
|
|
#endif
|
|
}
|
|
|
|
MyDialog::~MyDialog()
|
|
{
|
|
delete m_taskBarIcon;
|
|
#if defined(__WXCOCOA__)
|
|
delete m_dockIcon;
|
|
#endif
|
|
}
|
|
|
|
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);
|
|
#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
|
|
};
|
|
|
|
|
|
BEGIN_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)
|
|
END_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(icon, wxT("wxTaskBarIcon Sample - a different icon")))
|
|
wxMessageBox(wxT("Could not set new icon."));
|
|
}
|
|
|
|
void MyTaskBarIcon::OnMenuSub(wxCommandEvent&)
|
|
{
|
|
wxMessageBox(wxT("You clicked on a submenu!"));
|
|
}
|
|
|
|
// Overridables
|
|
wxMenu *MyTaskBarIcon::CreatePopupMenu()
|
|
{
|
|
wxMenu *menu = new wxMenu;
|
|
menu->Append(PU_RESTORE, wxT("&Restore main window"));
|
|
menu->AppendSeparator();
|
|
menu->Append(PU_NEW_ICON, wxT("&Set New Icon"));
|
|
menu->AppendSeparator();
|
|
menu->AppendCheckItem(PU_CHECKMARK, wxT("Test &check mark"));
|
|
menu->AppendSeparator();
|
|
wxMenu *submenu = new wxMenu;
|
|
submenu->Append(PU_SUB1, wxT("One submenu"));
|
|
submenu->AppendSeparator();
|
|
submenu->Append(PU_SUB2, wxT("Another submenu"));
|
|
menu->Append(PU_SUBMAIN, wxT("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, wxT("E&xit"));
|
|
}
|
|
return menu;
|
|
}
|
|
|
|
void MyTaskBarIcon::OnLeftButtonDClick(wxTaskBarIconEvent&)
|
|
{
|
|
gs_dialog->Show(true);
|
|
}
|