1998-05-20 14:21:00 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: tbtest.cpp
|
|
|
|
// Purpose: wxTaskBarIcon demo
|
|
|
|
// Author: Julian Smart
|
2004-09-26 15:03:57 +00:00
|
|
|
// Modified by:
|
1998-05-20 14:21:00 +00:00
|
|
|
// Created: 01/02/97
|
|
|
|
// Copyright: (c)
|
2002-03-17 14:16:03 +00:00
|
|
|
// Licence: wxWindows licence
|
1998-05-20 14:21:00 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
// ============================================================================
|
|
|
|
// declarations
|
|
|
|
// ============================================================================
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// headers
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
1998-05-20 14:21:00 +00:00
|
|
|
// For compilers that support precompilation, includes "wx.h".
|
|
|
|
#include "wx/wxprec.h"
|
|
|
|
|
|
|
|
#ifdef __BORLANDC__
|
|
|
|
#pragma hdrstop
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef WX_PRECOMP
|
2007-12-01 16:25:30 +00:00
|
|
|
#include "wx/wx.h"
|
1998-05-20 14:21:00 +00:00
|
|
|
#endif
|
|
|
|
|
2003-04-05 22:20:52 +00:00
|
|
|
// the application icon (under Windows and OS/2 it is in resources)
|
2012-03-04 00:28:58 +00:00
|
|
|
#ifndef wxHAS_IMAGES_IN_RESOURCES
|
2004-03-23 23:20:16 +00:00
|
|
|
#include "../sample.xpm"
|
2003-04-05 22:20:52 +00:00
|
|
|
#endif
|
|
|
|
|
2004-05-31 22:04:58 +00:00
|
|
|
#include "smile.xpm"
|
|
|
|
|
Applied patch [ 603858 ] wxTextCtrl text alignment patch
Benjamin I. Williams
This patch implements three new flags for the
wxTextCtrl control. The flags are wxTE_LEFT,
wxTE_CENTRE, and wxTE_RIGHT. These flags can change
the way text is aligned inside an edit control, which
is useful when the user is editing numbers or dates.
At Vadim's recommendation, the patch implements the
alignment flags so they are equal to the corresponding
wxALIGN_* value. wxTE_LEFT is actually 0x0000, and is
just a place holder. wxTE_CENTRE is equal to
wx_ALIGN_CENTER_HORIZONTAL (0x0100), and wxTE_RIGHT is
equal to wxALIGN_RIGHT (0x0100). I couldn't agree more
with this idea.
As Vadim pointed out, choosing to set the text
alignment flags to the corresponding wxALIGN_* flags
has a slight negative side effect: the values 0x0100
and 0x0200 collide with the existing flags
wxTE_NO_VSCROLL and wxTE_AUTO_SCROLL. A valid point
was raised, however, which stated that the flags would
never really be used at the same time, and also that
wxTE_AUTO_SCROLL is (possibly) going to be deprecated
anyway.
While this collision is not really a problem, I didn't
like the idea of someone specifying wxTE_NO_VSCROLL and
ending up with with a centered text control ! Thus, I
chose to move both wxTE_NO_VSCROLL and wxTE_AUTO_SCROLL
down to the free bits 0x0002 and 0x0008, respectively.
I'll leave the final say up to Vadim and the rest of
you whether you want to move these flags down or keep
them where they are (with collisions). What truly
matters to me is that I can now create text controls
with the proper alignment!
This patch also updates the documentation.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16989 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2002-09-05 16:15:30 +00:00
|
|
|
#include "wx/taskbar.h"
|
2007-12-01 16:25:30 +00:00
|
|
|
|
1998-05-20 14:21:00 +00:00
|
|
|
#include "tbtest.h"
|
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// global variables
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
static MyDialog *gs_dialog = NULL;
|
|
|
|
|
|
|
|
// ============================================================================
|
|
|
|
// implementation
|
|
|
|
// ============================================================================
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// MyApp
|
|
|
|
// ----------------------------------------------------------------------------
|
1998-05-20 14:21:00 +00:00
|
|
|
|
2015-04-23 11:49:01 +00:00
|
|
|
wxIMPLEMENT_APP(MyApp);
|
1998-05-20 14:21:00 +00:00
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
bool MyApp::OnInit()
|
1998-05-20 14:21:00 +00:00
|
|
|
{
|
2007-02-04 00:34:18 +00:00
|
|
|
if ( !wxApp::OnInit() )
|
|
|
|
return false;
|
|
|
|
|
2008-09-30 20:54:02 +00:00
|
|
|
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
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
// Create the main window
|
|
|
|
gs_dialog = new MyDialog(wxT("wxTaskBarIcon Test Dialog"));
|
1998-05-20 14:21:00 +00:00
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
gs_dialog->Show(true);
|
1998-05-20 14:21:00 +00:00
|
|
|
|
2004-05-20 10:47:31 +00:00
|
|
|
return true;
|
1998-05-20 14:21:00 +00:00
|
|
|
}
|
|
|
|
|
1998-12-11 05:56:40 +00:00
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// MyDialog implementation
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
2014-03-30 07:07:55 +00:00
|
|
|
wxBEGIN_EVENT_TABLE(MyDialog, wxDialog)
|
2007-12-01 16:25:30 +00:00
|
|
|
EVT_BUTTON(wxID_ABOUT, MyDialog::OnAbout)
|
1998-05-20 14:21:00 +00:00
|
|
|
EVT_BUTTON(wxID_OK, MyDialog::OnOK)
|
|
|
|
EVT_BUTTON(wxID_EXIT, MyDialog::OnExit)
|
1999-08-09 20:49:34 +00:00
|
|
|
EVT_CLOSE(MyDialog::OnCloseWindow)
|
2014-03-30 07:07:55 +00:00
|
|
|
wxEND_EVENT_TABLE()
|
1998-05-20 14:21:00 +00:00
|
|
|
|
1998-12-11 05:56:40 +00:00
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
MyDialog::MyDialog(const wxString& title)
|
|
|
|
: wxDialog(NULL, wxID_ANY, title)
|
1998-05-20 14:21:00 +00:00
|
|
|
{
|
2007-12-01 16:25:30 +00:00
|
|
|
wxSizer * const sizerTop = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
|
|
|
wxSizerFlags flags;
|
|
|
|
flags.Border(wxALL, 10);
|
|
|
|
|
|
|
|
sizerTop->Add(new wxStaticText
|
|
|
|
(
|
|
|
|
this,
|
|
|
|
wxID_ANY,
|
2009-07-23 20:30:22 +00:00
|
|
|
wxT("Press 'Hide me' to hide this window, Exit to quit.")
|
2007-12-01 16:25:30 +00:00
|
|
|
), flags);
|
|
|
|
|
|
|
|
sizerTop->Add(new wxStaticText
|
|
|
|
(
|
|
|
|
this,
|
|
|
|
wxID_ANY,
|
2009-07-23 20:30:22 +00:00
|
|
|
wxT("Double-click on the taskbar icon to show me again.")
|
2007-12-01 16:25:30 +00:00
|
|
|
), flags);
|
|
|
|
|
|
|
|
sizerTop->AddStretchSpacer()->SetMinSize(200, 50);
|
|
|
|
|
|
|
|
wxSizer * const sizerBtns = new wxBoxSizer(wxHORIZONTAL);
|
2009-07-23 20:30:22 +00:00
|
|
|
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);
|
2007-12-01 16:25:30 +00:00
|
|
|
|
|
|
|
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."));
|
|
|
|
}
|
2011-02-28 09:26:55 +00:00
|
|
|
|
|
|
|
#if defined(__WXOSX__) && wxOSX_USE_COCOA
|
2012-10-28 01:08:20 +00:00
|
|
|
m_dockIcon = new MyTaskBarIcon(wxTBI_DOCK);
|
2011-02-28 09:26:55 +00:00
|
|
|
if ( !m_dockIcon->SetIcon(wxICON(sample)) )
|
|
|
|
{
|
|
|
|
wxLogError(wxT("Could not set icon."));
|
|
|
|
}
|
|
|
|
#endif
|
1998-05-20 14:21:00 +00:00
|
|
|
}
|
|
|
|
|
2004-03-23 23:20:16 +00:00
|
|
|
MyDialog::~MyDialog()
|
|
|
|
{
|
|
|
|
delete m_taskBarIcon;
|
|
|
|
}
|
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
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";
|
|
|
|
|
2007-12-10 12:20:09 +00:00
|
|
|
#if defined(__WXMSW__) && wxUSE_TASKBARICON_BALLOONS
|
2007-12-01 16:25:30 +00:00
|
|
|
m_taskBarIcon->ShowBalloon(title, message, 15000, wxICON_INFORMATION);
|
|
|
|
#else // !__WXMSW__
|
2009-01-05 16:15:09 +00:00
|
|
|
wxMessageBox(message, title, wxICON_INFORMATION|wxOK, this);
|
2007-12-01 16:25:30 +00:00
|
|
|
#endif // __WXMSW__/!__WXMSW__
|
|
|
|
}
|
|
|
|
|
2003-09-11 12:52:20 +00:00
|
|
|
void MyDialog::OnOK(wxCommandEvent& WXUNUSED(event))
|
1998-05-20 14:21:00 +00:00
|
|
|
{
|
2004-05-20 10:47:31 +00:00
|
|
|
Show(false);
|
1998-05-20 14:21:00 +00:00
|
|
|
}
|
|
|
|
|
2003-09-11 12:52:20 +00:00
|
|
|
void MyDialog::OnExit(wxCommandEvent& WXUNUSED(event))
|
1998-05-20 14:21:00 +00:00
|
|
|
{
|
2004-05-20 10:47:31 +00:00
|
|
|
Close(true);
|
1998-05-20 14:21:00 +00:00
|
|
|
}
|
|
|
|
|
2003-09-11 12:52:20 +00:00
|
|
|
void MyDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
|
1998-05-20 14:21:00 +00:00
|
|
|
{
|
|
|
|
Destroy();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-01 16:25:30 +00:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// MyTaskBarIcon implementation
|
|
|
|
// ----------------------------------------------------------------------------
|
1998-12-11 05:56:40 +00:00
|
|
|
|
2007-12-01 15:55:28 +00:00
|
|
|
enum
|
|
|
|
{
|
1998-12-11 05:56:40 +00:00
|
|
|
PU_RESTORE = 10001,
|
2001-05-08 10:11:24 +00:00
|
|
|
PU_NEW_ICON,
|
1998-12-11 05:56:40 +00:00
|
|
|
PU_EXIT,
|
2005-12-03 17:55:33 +00:00
|
|
|
PU_CHECKMARK,
|
|
|
|
PU_SUB1,
|
|
|
|
PU_SUB2,
|
|
|
|
PU_SUBMAIN
|
1998-12-11 05:56:40 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2014-03-30 07:07:55 +00:00
|
|
|
wxBEGIN_EVENT_TABLE(MyTaskBarIcon, wxTaskBarIcon)
|
1998-12-11 05:56:40 +00:00
|
|
|
EVT_MENU(PU_RESTORE, MyTaskBarIcon::OnMenuRestore)
|
|
|
|
EVT_MENU(PU_EXIT, MyTaskBarIcon::OnMenuExit)
|
2001-05-08 10:11:24 +00:00
|
|
|
EVT_MENU(PU_NEW_ICON,MyTaskBarIcon::OnMenuSetNewIcon)
|
2005-01-23 23:07:45 +00:00
|
|
|
EVT_MENU(PU_CHECKMARK,MyTaskBarIcon::OnMenuCheckmark)
|
|
|
|
EVT_UPDATE_UI(PU_CHECKMARK,MyTaskBarIcon::OnMenuUICheckmark)
|
2004-09-26 15:03:57 +00:00
|
|
|
EVT_TASKBAR_LEFT_DCLICK (MyTaskBarIcon::OnLeftButtonDClick)
|
2005-12-03 17:55:33 +00:00
|
|
|
EVT_MENU(PU_SUB1, MyTaskBarIcon::OnMenuSub)
|
|
|
|
EVT_MENU(PU_SUB2, MyTaskBarIcon::OnMenuSub)
|
2014-03-30 07:07:55 +00:00
|
|
|
wxEND_EVENT_TABLE()
|
1998-12-11 05:56:40 +00:00
|
|
|
|
2000-02-04 17:08:11 +00:00
|
|
|
void MyTaskBarIcon::OnMenuRestore(wxCommandEvent& )
|
1998-12-11 05:56:40 +00:00
|
|
|
{
|
2007-12-01 16:25:30 +00:00
|
|
|
gs_dialog->Show(true);
|
1998-12-11 05:56:40 +00:00
|
|
|
}
|
|
|
|
|
2000-02-04 17:08:11 +00:00
|
|
|
void MyTaskBarIcon::OnMenuExit(wxCommandEvent& )
|
1998-12-11 05:56:40 +00:00
|
|
|
{
|
2007-12-01 16:25:30 +00:00
|
|
|
gs_dialog->Close(true);
|
1998-12-11 05:56:40 +00:00
|
|
|
}
|
|
|
|
|
2005-01-23 23:07:45 +00:00
|
|
|
static bool check = true;
|
|
|
|
|
|
|
|
void MyTaskBarIcon::OnMenuCheckmark(wxCommandEvent& )
|
|
|
|
{
|
2007-12-01 15:55:28 +00:00
|
|
|
check = !check;
|
2005-01-23 23:07:45 +00:00
|
|
|
}
|
2005-12-03 17:55:33 +00:00
|
|
|
|
2005-01-23 23:07:45 +00:00
|
|
|
void MyTaskBarIcon::OnMenuUICheckmark(wxUpdateUIEvent &event)
|
|
|
|
{
|
2007-12-01 15:55:28 +00:00
|
|
|
event.Check(check);
|
2005-01-23 23:07:45 +00:00
|
|
|
}
|
|
|
|
|
2001-05-08 10:11:24 +00:00
|
|
|
void MyTaskBarIcon::OnMenuSetNewIcon(wxCommandEvent&)
|
|
|
|
{
|
2004-05-31 22:04:58 +00:00
|
|
|
wxIcon icon(smile_xpm);
|
2001-05-08 10:11:24 +00:00
|
|
|
|
2004-05-31 22:04:58 +00:00
|
|
|
if (!SetIcon(icon, wxT("wxTaskBarIcon Sample - a different icon")))
|
2001-05-08 10:11:24 +00:00
|
|
|
wxMessageBox(wxT("Could not set new icon."));
|
|
|
|
}
|
1998-12-11 05:56:40 +00:00
|
|
|
|
2005-12-03 17:55:33 +00:00
|
|
|
void MyTaskBarIcon::OnMenuSub(wxCommandEvent&)
|
|
|
|
{
|
|
|
|
wxMessageBox(wxT("You clicked on a submenu!"));
|
|
|
|
}
|
|
|
|
|
1998-05-20 14:21:00 +00:00
|
|
|
// Overridables
|
2004-06-04 21:56:29 +00:00
|
|
|
wxMenu *MyTaskBarIcon::CreatePopupMenu()
|
1998-05-20 14:21:00 +00:00
|
|
|
{
|
2004-06-04 21:56:29 +00:00
|
|
|
wxMenu *menu = new wxMenu;
|
2009-07-23 20:30:22 +00:00
|
|
|
menu->Append(PU_RESTORE, wxT("&Restore main window"));
|
2005-12-03 17:55:33 +00:00
|
|
|
menu->AppendSeparator();
|
2009-07-23 20:30:22 +00:00
|
|
|
menu->Append(PU_NEW_ICON, wxT("&Set New Icon"));
|
2005-12-03 17:55:33 +00:00
|
|
|
menu->AppendSeparator();
|
2009-07-23 20:30:22 +00:00
|
|
|
menu->AppendCheckItem(PU_CHECKMARK, wxT("Test &check mark"));
|
2005-12-03 17:55:33 +00:00
|
|
|
menu->AppendSeparator();
|
|
|
|
wxMenu *submenu = new wxMenu;
|
2009-07-23 20:30:22 +00:00
|
|
|
submenu->Append(PU_SUB1, wxT("One submenu"));
|
2005-12-03 17:55:33 +00:00
|
|
|
submenu->AppendSeparator();
|
2009-07-23 20:30:22 +00:00
|
|
|
submenu->Append(PU_SUB2, wxT("Another submenu"));
|
|
|
|
menu->Append(PU_SUBMAIN, wxT("Submenu"), submenu);
|
2011-02-28 10:07:00 +00:00
|
|
|
/* OSX has built-in quit menu for the dock menu, but not for the status item */
|
|
|
|
#ifdef __WXOSX__
|
|
|
|
if ( OSXIsStatusItem() )
|
2005-12-03 17:55:33 +00:00
|
|
|
#endif
|
2011-02-28 10:07:00 +00:00
|
|
|
{
|
|
|
|
menu->AppendSeparator();
|
|
|
|
menu->Append(PU_EXIT, wxT("E&xit"));
|
|
|
|
}
|
2004-06-04 21:56:29 +00:00
|
|
|
return menu;
|
1998-05-20 14:21:00 +00:00
|
|
|
}
|
|
|
|
|
2004-09-26 15:03:57 +00:00
|
|
|
void MyTaskBarIcon::OnLeftButtonDClick(wxTaskBarIconEvent&)
|
1998-05-20 14:21:00 +00:00
|
|
|
{
|
2007-12-01 16:25:30 +00:00
|
|
|
gs_dialog->Show(true);
|
1998-05-20 14:21:00 +00:00
|
|
|
}
|