wxWidgets/samples/widgets/activityindicator.cpp

153 lines
5.0 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Program: wxWidgets Widgets Sample
// Name: activityindicator.cpp
// Purpose: Part of the widgets sample showing wxActivityIndicator
// Author: Vadim Zeitlin
// Created: 2015-03-06
// Copyright: (c) 2015 wxWindows team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// for compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#if wxUSE_ACTIVITYINDICATOR
// for all others, include the necessary headers
#ifndef WX_PRECOMP
#include "wx/button.h"
#include "wx/sizer.h"
#include "wx/stattext.h"
#endif
#include "wx/activityindicator.h"
#include "widgets.h"
#include "icons/activityindicator.xpm"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// Control IDs
enum
{
ActivityIndicator_Start = wxID_HIGHEST,
ActivityIndicator_Stop,
ActivityIndicator_IsRunning
};
// ----------------------------------------------------------------------------
// ActivityIndicatorWidgetsPage
// ----------------------------------------------------------------------------
class ActivityIndicatorWidgetsPage : public WidgetsPage
{
public:
ActivityIndicatorWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
: WidgetsPage(book, imaglist, activityindicator_xpm)
{
m_indicator = NULL;
m_sizerIndicator = NULL;
}
virtual wxWindow *GetWidget() const wxOVERRIDE { return m_indicator; }
virtual void RecreateWidget() wxOVERRIDE;
// lazy creation of the content
virtual void CreateContent() wxOVERRIDE;
protected:
void OnButtonStart(wxCommandEvent&) { m_indicator->Start(); }
void OnButtonStop(wxCommandEvent&) { m_indicator->Stop(); }
void OnUpdateIsRunning(wxUpdateUIEvent& event)
{
event.SetText(m_indicator && m_indicator->IsRunning()
? "Indicator is running"
: "Indicator is stopped");
}
// the indicator itself and the sizer it is in
wxActivityIndicator *m_indicator;
wxSizer *m_sizerIndicator;
private:
wxDECLARE_EVENT_TABLE();
DECLARE_WIDGETS_PAGE(ActivityIndicatorWidgetsPage)
};
// ----------------------------------------------------------------------------
// event tables
// ----------------------------------------------------------------------------
wxBEGIN_EVENT_TABLE(ActivityIndicatorWidgetsPage, WidgetsPage)
EVT_BUTTON(ActivityIndicator_Start,
ActivityIndicatorWidgetsPage::OnButtonStart)
EVT_BUTTON(ActivityIndicator_Stop,
ActivityIndicatorWidgetsPage::OnButtonStop)
EVT_UPDATE_UI(ActivityIndicator_IsRunning,
ActivityIndicatorWidgetsPage::OnUpdateIsRunning)
wxEND_EVENT_TABLE()
// ============================================================================
// implementation
// ============================================================================
IMPLEMENT_WIDGETS_PAGE(ActivityIndicatorWidgetsPage,
"ActivityIndicator", NATIVE_CTRLS);
void ActivityIndicatorWidgetsPage::CreateContent()
{
wxSizer* const sizerOper = new wxStaticBoxSizer(wxVERTICAL, this,
"&Operations");
sizerOper->Add(new wxButton(this, ActivityIndicator_Start, "&Start"),
wxSizerFlags().Expand().Border());
sizerOper->Add(new wxButton(this, ActivityIndicator_Stop, "&Stop"),
wxSizerFlags().Expand().Border());
sizerOper->Add(new wxStaticText(this, ActivityIndicator_IsRunning,
"Indicator is initializing..."),
wxSizerFlags().Expand().Border());
m_sizerIndicator = new wxStaticBoxSizer(wxHORIZONTAL, this,
"Activity Indicator");
RecreateWidget();
wxSizer* const sizerTop = new wxBoxSizer(wxHORIZONTAL);
sizerTop->Add(sizerOper, wxSizerFlags().Expand().DoubleBorder());
sizerTop->Add(m_sizerIndicator, wxSizerFlags(1).Expand().DoubleBorder());
SetSizer(sizerTop);
}
void ActivityIndicatorWidgetsPage::RecreateWidget()
{
m_sizerIndicator->Clear(true /* delete windows */);
m_indicator = new wxActivityIndicator(this, wxID_ANY,
wxDefaultPosition, wxDefaultSize,
GetAttrs().m_defaultFlags);
m_sizerIndicator->AddStretchSpacer();
m_sizerIndicator->Add(m_indicator, wxSizerFlags().Centre());
m_sizerIndicator->AddStretchSpacer();
m_sizerIndicator->Layout();
}
#endif // wxUSE_ACTIVITYINDICATOR