3f66f6a5b3
This keyword is not expanded by Git which means it's not replaced with the correct revision value in the releases made using git-based scripts and it's confusing to have lines with unexpanded "$Id$" in the released files. As expanding them with Git is not that simple (it could be done with git archive and export-subst attribute) and there are not many benefits in having them in the first place, just remove all these lines. If nothing else, this will make an eventual transition to Git simpler. Closes #14487. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
280 lines
7.6 KiB
C++
280 lines
7.6 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 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(wxTBI_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);
|
|
}
|