#include "wx/numdlg.h"
#include "wx/fontdlg.h"
-#ifndef __WXMSW__
+#ifndef wxHAS_IMAGES_IN_RESOURCES
#include "../sample.xpm"
#endif
#endif
void OnSize(wxSizeEvent& event);
void OnToggleClock(wxCommandEvent& event);
+ void OnIdle(wxIdleEvent& event);
private:
// toggle the state of the status bar controls
Field_Text,
Field_Checkbox,
Field_Bitmap,
+ Field_NumLockIndicator,
Field_Clock,
+ Field_CapsLockIndicator,
Field_Max
};
StatusBar_SetPaneStyleNormal,
StatusBar_SetPaneStyleFlat,
StatusBar_SetPaneStyleRaised,
+ StatusBar_SetPaneStyleSunken,
StatusBar_SetStyleSizeGrip,
StatusBar_SetStyleEllipsizeStart,
EVT_MENU(StatusBar_SetPaneStyleNormal, MyFrame::OnSetPaneStyle)
EVT_MENU(StatusBar_SetPaneStyleFlat, MyFrame::OnSetPaneStyle)
EVT_MENU(StatusBar_SetPaneStyleRaised, MyFrame::OnSetPaneStyle)
+ EVT_MENU(StatusBar_SetPaneStyleSunken, MyFrame::OnSetPaneStyle)
EVT_MENU(StatusBar_SetStyleSizeGrip, MyFrame::OnSetStyle)
EVT_MENU(StatusBar_SetStyleEllipsizeStart, MyFrame::OnSetStyle)
MyFrame::OnUpdateForDefaultStatusbar)
EVT_UPDATE_UI(StatusBar_Toggle, MyFrame::OnUpdateStatusBarToggle)
EVT_UPDATE_UI_RANGE(StatusBar_SetPaneStyleNormal,
- StatusBar_SetPaneStyleRaised,
+ StatusBar_SetPaneStyleSunken,
MyFrame::OnUpdateSetPaneStyle)
EVT_UPDATE_UI_RANGE(StatusBar_SetStyleSizeGrip, StatusBar_SetStyleShowTips,
MyFrame::OnUpdateSetStyle)
#if wxUSE_TIMER
EVT_TIMER(wxID_ANY, MyStatusBar::OnTimer)
#endif
+ EVT_IDLE(MyStatusBar::OnIdle)
END_EVENT_TABLE()
// Create a new application object: this macro will allow wxWidgets to create
wxT("&Raised"),
wxT("Sets the style of the first field to raised look")
);
+ statbarPaneStyleMenu->AppendCheckItem
+ (
+ StatusBar_SetPaneStyleSunken,
+ wxT("&Sunken"),
+ wxT("Sets the style of the first field to sunken look")
+ );
statbarMenu->Append(StatusBar_SetPaneStyle, wxT("Field style"),
statbarPaneStyleMenu);
wxT("Toggle status bar format"));
wxMenu *helpMenu = new wxMenu;
- helpMenu->Append(StatusBar_About, wxT("&About...\tCtrl-A"),
+ helpMenu->Append(StatusBar_About, wxT("&About\tCtrl-A"),
wxT("Show about dialog"));
// now append the freshly created menu to the menu bar...
case StatusBar_SetPaneStyleRaised:
event.Check(m_statbarPaneStyle == wxSB_RAISED);
break;
+ case StatusBar_SetPaneStyleSunken:
+ event.Check(m_statbarPaneStyle == wxSB_SUNKEN);
+ break;
}
}
case StatusBar_SetPaneStyleRaised:
m_statbarPaneStyle = wxSB_RAISED;
break;
+ case StatusBar_SetPaneStyleSunken:
+ m_statbarPaneStyle = wxSB_SUNKEN;
+ break;
}
ApplyPaneStyle();
#pragma warning(disable: 4355)
#endif
+static const char *numlockIndicators[] = { "OFF", "NUM" };
+static const char *capslockIndicators[] = { "", "CAPS" };
+
MyStatusBar::MyStatusBar(wxWindow *parent, long style)
: wxStatusBar(parent, wxID_ANY, style, "MyStatusBar")
#if wxUSE_TIMER
, m_checkbox(NULL)
#endif
{
- static const int widths[Field_Max] = { -1, 150, BITMAP_SIZE_X, 100 };
+ // compute the size needed for num lock indicator pane
+ wxClientDC dc(this);
+ wxSize sizeNumLock = dc.GetTextExtent(numlockIndicators[0]);
+ sizeNumLock.IncTo(dc.GetTextExtent(numlockIndicators[1]));
+
+ int widths[Field_Max];
+ widths[Field_Text] = -1; // growable
+ widths[Field_Checkbox] = 150;
+ widths[Field_Bitmap] = BITMAP_SIZE_X;
+ widths[Field_NumLockIndicator] = sizeNumLock.x;
+ widths[Field_Clock] = 100;
+ widths[Field_CapsLockIndicator] = dc.GetTextExtent(capslockIndicators[1]).x;
SetFieldsCount(Field_Max);
SetStatusWidths(Field_Max, widths);
return;
#endif
- // TEMPORARY HACK: TODO find a more general solution
-#ifdef wxStatusBarGeneric
- wxStatusBar::OnSize(event);
-#endif
-
wxRect rect;
if (!GetFieldRect(Field_Checkbox, rect))
{
DoToggle();
}
+void MyStatusBar::OnIdle(wxIdleEvent& event)
+{
+ SetStatusText(numlockIndicators[wxGetKeyState(WXK_NUMLOCK)],
+ Field_NumLockIndicator);
+ SetStatusText(capslockIndicators[wxGetKeyState(WXK_CAPITAL)],
+ Field_CapsLockIndicator);
+
+ event.Skip();
+}
+
void MyStatusBar::DoToggle()
{
#if wxUSE_CHECKBOX