f61627fc7e
Mostly don't mention OS/2 in the comments about the icons. Also replace a couple of occurrences of "wxWindows" with "wxWidgets". Closes https://github.com/wxWidgets/wxWidgets/pull/138
276 lines
7.5 KiB
C++
276 lines
7.5 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// 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"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/wx.h"
|
|
#endif
|
|
|
|
// the application icon (under Windows 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
|
|
// ----------------------------------------------------------------------------
|
|
|
|
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(wxT("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,
|
|
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 Windows
|
|
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(wxTBI_DOCK);
|
|
if ( !m_dockIcon->SetIcon(wxICON(sample)) )
|
|
{
|
|
wxLogError(wxT("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);
|
|
#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(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);
|
|
}
|