wxwidgets/samples/taskbar/tbtest.cpp
Vadim Zeitlin 4f4c5fcfdf Use nullptr instead of NULL in the code and documentation
This is a combination of running clang-tidy with modernize-use-nullptr
check for some ports (GTK, X11, OSX) and manual changes to the ports for
which it couldn't be used easily (MSW, DFB) and also manually updating
the docs.

Also replace NULL with null or nullptr in the comments as this is more
consistent with the use of nullptr in the code and makes it simpler to
grep for the remaining occurrences of NULL itself.

And also use null in the assert messages.

Only a few occurrences of "NULL" are still left in non-C files, mostly
corresponding to unclear comments or string output which it might not be
safe to change.
2022-10-18 01:25:25 +02:00

276 lines
7.7 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"
#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.Border(wxALL, 10);
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);
}