wxDefaultPosition, wxDefaultSize,
wxBORDER_SUNKEN)
{
- m_nLines = 100;
+ m_nLines = 50;
m_winSync = NULL;
m_inDoSync = false;
{
m_inDoSync = true;
- int x, y;
- GetViewStart(&x, &y);
-
- m_winSync->Scroll(x, y);
+ m_winSync->Scroll(GetViewStart());
m_inDoSync = false;
}
void OnTestAuto(wxCommandEvent& WXUNUSED(event)) { new MyAutoFrame(this); }
void OnToggleSync(wxCommandEvent& event);
+ void OnScrollbarVisibility(wxCommandEvent& event);
MyScrolledWindowBase *m_win1,
*m_win2;
{
wxLogMessage("Scrolling 2 units up.\n"
"The white square and the controls should move equally!");
- int x,y;
- GetViewStart( &x, &y );
- Scroll( wxDefaultCoord, y+2 );
+ Scroll( wxDefaultCoord, GetViewStart().y+2 );
}
// ----------------------------------------------------------------------------
const wxWindowID Scroll_Test_Auto = wxWindow::NewControlId();
const wxWindowID Scroll_TglBtn_Sync = wxWindow::NewControlId();
+const wxWindowID Scroll_Radio_ShowScrollbar = wxWindow::NewControlId();
BEGIN_EVENT_TABLE(MyFrame,wxFrame)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
EVT_MENU(Scroll_Test_Auto, MyFrame::OnTestAuto)
EVT_TOGGLEBUTTON(Scroll_TglBtn_Sync, MyFrame::OnToggleSync)
+ EVT_RADIOBOX(Scroll_Radio_ShowScrollbar, MyFrame::OnScrollbarVisibility)
END_EVENT_TABLE()
MyFrame::MyFrame()
SetMenuBar( mbar );
+ wxPanel *panel = new wxPanel(this);
+
const wxSizerFlags flagsExpand(wxSizerFlags(1).Expand());
wxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
- topsizer->Add(new wxStaticText(this, wxID_ANY,
+ topsizer->Add(new wxStaticText(panel, wxID_ANY,
"The windows below should behave in the same way, even though\n"
"they're implemented quite differently, see the code for details.\n"
"\n"
"don't be surprised by this."),
wxSizerFlags().Centre().Border());
- m_win1 = new MyScrolledWindowDumb(this);
- m_win2 = new MyScrolledWindowSmart(this);
+ m_win1 = new MyScrolledWindowDumb(panel);
+ m_win2 = new MyScrolledWindowSmart(panel);
wxSizer *sizerScrollWin = new wxBoxSizer(wxHORIZONTAL);
sizerScrollWin->Add(m_win1, flagsExpand);
sizerScrollWin->Add(m_win2, flagsExpand);
topsizer->Add(sizerScrollWin, flagsExpand);
+ const wxSizerFlags
+ flagsHBorder(wxSizerFlags().Centre().Border(wxLEFT | wxRIGHT));
+
wxSizer *sizerBtns = new wxBoxSizer(wxHORIZONTAL);
- sizerBtns->Add(new wxToggleButton(this, Scroll_TglBtn_Sync, "&Synchronize"));
+
+ // the radio buttons are in the same order as wxSHOW_SB_XXX values but
+ // offset by 1
+ const wxString visibilities[] = { "&never", "&default", "&always" };
+ wxRadioBox *radio = new wxRadioBox(panel, Scroll_Radio_ShowScrollbar,
+ "Left &scrollbar visibility: ",
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(visibilities), visibilities);
+ radio->SetSelection(wxSHOW_SB_DEFAULT + 1);
+ sizerBtns->Add(radio, flagsHBorder);
+
+ sizerBtns->Add(new wxToggleButton(panel, Scroll_TglBtn_Sync, "S&ynchronize"),
+ flagsHBorder);
+
topsizer->Add(sizerBtns, wxSizerFlags().Centre().Border());
- SetSizer(topsizer);
+ panel->SetSizer(topsizer);
+ wxSize size = panel->GetBestSize();
+ SetSizeHints(size);
+ SetClientSize(2*size);
Show();
}
}
}
+void MyFrame::OnScrollbarVisibility(wxCommandEvent& event)
+{
+ m_win1->ShowScrollbars(wxSHOW_SB_NEVER,
+ wxScrollbarVisibility(event.GetSelection() - 1));
+}
+
void MyFrame::OnQuit(wxCommandEvent &WXUNUSED(event))
{
Close(true);
{
pos.x /= m_fontW;
pos.y /= m_fontH;
- int vX, vY;
- GetViewStart(&vX, &vY);
- pos.x += vX;
- pos.y += vY;
+ pos += GetViewStart();
return pos;
}
wxPoint
MyAutoScrollingWindow::GraphicalCharToDeviceCoords(wxPoint pos) const
{
- int vX, vY;
- GetViewStart(&vX, &vY);
- pos.x -= vX;
- pos.y -= vY;
+ pos -= GetViewStart();
pos.x *= m_fontW;
pos.y *= m_fontH;
return pos;