initial commit
Signed-off-by: Peter Siegmund <mars3142@noreply.mars3142.dev>
This commit is contained in:
275
libs/wxWidgets-3.3.1/samples/taskbar/tbtest.cpp
Normal file
275
libs/wxWidgets-3.3.1/samples/taskbar/tbtest.cpp
Normal file
@@ -0,0 +1,275 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: tbtest.cpp
|
||||
// Purpose: wxTaskBarIcon demo
|
||||
// Author: Julian Smart
|
||||
// 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 = nullptr;
|
||||
|
||||
// ============================================================================
|
||||
// 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(nullptr, wxID_ANY, title)
|
||||
{
|
||||
wxSizer * const sizerTop = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
wxSizerFlags flags;
|
||||
flags.DoubleBorder(wxALL);
|
||||
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user