]>
git.saurik.com Git - wxWidgets.git/blob - samples/scroll/scroll.cpp
8f5cba310cd299ca1d48e3d1e1455d5f697d1f44
   4  * Author: Robert Roebling 
   6  * Copyright: (C) 1998, Robert Roebling 
  10 // For compilers that support precompilation, includes "wx/wx.h". 
  11 #include "wx/wxprec.h" 
  22 #include "wx/listctrl.h" 
  34 class MyCanvas
: public wxScrolledWindow
 
  38     MyCanvas( wxWindow 
*parent
, wxWindowID
, const wxPoint 
&pos
, const wxSize 
&size 
); 
  40     void OnPaint( wxPaintEvent 
&event 
); 
  41     void OnQueryPosition( wxCommandEvent 
&event 
); 
  42     void OnAddButton( wxCommandEvent 
&event 
); 
  43     void OnDeleteButton( wxCommandEvent 
&event 
); 
  44     void OnMoveButton( wxCommandEvent 
&event 
); 
  45     void OnScrollWin( wxCommandEvent 
&event 
); 
  46     void OnMouseDown( wxMouseEvent 
&event 
); 
  50     DECLARE_DYNAMIC_CLASS(MyCanvas
) 
  56 class MyFrame
: public wxFrame
 
  61     void OnAbout( wxCommandEvent 
&event 
); 
  62     void OnQuit( wxCommandEvent 
&event 
); 
  67     DECLARE_DYNAMIC_CLASS(MyFrame
) 
  73 class MyApp
: public wxApp
 
  76     virtual bool OnInit(); 
  85 #define   ID_ADDBUTTON    1 
  86 #define   ID_DELBUTTON    2 
  87 #define   ID_MOVEBUTTON   3 
  88 #define   ID_SCROLLWIN    4 
  91 #define   ID_NEWBUTTON    10 
  95 IMPLEMENT_DYNAMIC_CLASS(MyCanvas
, wxScrolledWindow
) 
  97 BEGIN_EVENT_TABLE(MyCanvas
, wxScrolledWindow
) 
  98   EVT_PAINT(                  MyCanvas::OnPaint
) 
  99   EVT_MOUSE_EVENTS(                  MyCanvas::OnMouseDown
) 
 100   EVT_BUTTON( ID_QUERYPOS
,    MyCanvas::OnQueryPosition
) 
 101   EVT_BUTTON( ID_ADDBUTTON
,   MyCanvas::OnAddButton
) 
 102   EVT_BUTTON( ID_DELBUTTON
,   MyCanvas::OnDeleteButton
) 
 103   EVT_BUTTON( ID_MOVEBUTTON
,  MyCanvas::OnMoveButton
) 
 104   EVT_BUTTON( ID_SCROLLWIN
,   MyCanvas::OnScrollWin
) 
 107 MyCanvas::MyCanvas( wxWindow 
*parent
, wxWindowID id
, 
 108                     const wxPoint 
&pos
, const wxSize 
&size 
) 
 109         : wxScrolledWindow( parent
, id
, pos
, size
, wxSUNKEN_BORDER 
| wxTAB_TRAVERSAL
, "test canvas" ) 
 111     (void) new wxButton( this, ID_ADDBUTTON
, "add button", wxPoint(10,10) ); 
 112     (void) new wxButton( this, ID_DELBUTTON
, "del button", wxPoint(10,40) ); 
 113     (void) new wxButton( this, ID_MOVEBUTTON
, "move button", wxPoint(150,10) ); 
 114     (void) new wxButton( this, ID_SCROLLWIN
, "scroll win", wxPoint(250,10) ); 
 125     m_button 
= new wxButton( this, ID_QUERYPOS
, "Query position", wxPoint(10,110) ); 
 127     (void) new wxTextCtrl( this, -1, "wxTextCtrl", wxPoint(10,150), wxSize(80,-1) ); 
 129     (void) new wxRadioButton( this, -1, "Disable", wxPoint(10,190) ); 
 131     (void) new wxComboBox( this, -1, "This", wxPoint(10,230), wxDefaultSize
, 5, choices 
); 
 133     (void) new wxRadioBox( this, -1, "This", wxPoint(10,310), wxDefaultSize
, 5, choices
, 2, wxRA_SPECIFY_COLS 
); 
 135     (void) new wxRadioBox( this, -1, "This", wxPoint(10,440), wxDefaultSize
, 5, choices
, 2, wxRA_SPECIFY_ROWS 
); 
 137     wxListCtrl 
*m_listCtrl 
= new wxListCtrl( 
 138         this, -1, wxPoint(200, 110), wxSize(180, 120), 
 139         wxLC_REPORT 
| wxSIMPLE_BORDER 
| wxLC_SINGLE_SEL 
); 
 141     m_listCtrl
->InsertColumn(0, "First", wxLIST_FORMAT_LEFT
, 90); 
 142     m_listCtrl
->InsertColumn(1, "Last", wxLIST_FORMAT_LEFT
, 90); 
 144     for ( int i
=0; i 
< 30; i
++) 
 147         sprintf(buf
, "Item %d", i
); 
 148         m_listCtrl
->InsertItem(i
, buf
); 
 150     m_listCtrl
->SetItemState( 3, wxLIST_STATE_SELECTED
, wxLIST_STATE_SELECTED 
); 
 152     (void) new wxListBox( this, -1, wxPoint(260,280), wxSize(120,120), 5, choices
, wxLB_ALWAYS_SB 
); 
 154     wxPanel 
*test 
= new wxPanel( this, -1, wxPoint(10, 530), wxSize(130,120), wxSIMPLE_BORDER 
| wxTAB_TRAVERSAL 
); 
 155     test
->SetBackgroundColour( "WHEAT" ); 
 156     wxButton 
*test2 
= new wxButton( test
, -1, "Hallo", wxPoint(10,10) ); 
 158     test 
= new wxPanel( this, -1, wxPoint(160, 530), wxSize(130,120), wxSUNKEN_BORDER 
| wxTAB_TRAVERSAL 
); 
 159     test
->SetBackgroundColour( "WHEAT" ); 
 160     test
->SetCursor( wxCursor( wxCURSOR_NO_ENTRY 
) ); 
 161     test2 
= new wxButton( test
, -1, "Hallo", wxPoint(10,10) ); 
 162     test2
->SetCursor( wxCursor( wxCURSOR_PENCIL 
) ); 
 164     test 
= new wxPanel( this, -1, wxPoint(310, 530), wxSize(130,120), wxRAISED_BORDER 
| wxTAB_TRAVERSAL 
); 
 165     test
->SetBackgroundColour( "WHEAT" ); 
 166     test
->SetCursor( wxCursor( wxCURSOR_PENCIL 
) ); 
 167     test2 
= new wxButton( test
, -1, "Hallo", wxPoint(10,10) ); 
 168     test2
->SetCursor( wxCursor( wxCURSOR_NO_ENTRY 
) ); 
 170     SetBackgroundColour( "WHEAT" ); 
 172     SetCursor( wxCursor( wxCURSOR_IBEAM 
) ); 
 175 MyCanvas::~MyCanvas() 
 179 void MyCanvas::OnMouseDown( wxMouseEvent 
&event 
) 
 181     if (event
.LeftDown()) 
 183         wxPoint 
pt( event
.GetPosition() ); 
 185         CalcUnscrolledPosition( pt
.x
, pt
.y
, &x
, &y 
); 
 186         wxLogMessage( "Mouse down event at: %d %d, scrolled: %d %d", pt
.x
, pt
.y
, x
, y 
); 
 189     if (event
.LeftIsDown() && 
 192         wxLogMessage( "Error: both LeftDown() and LeftIsDown() are TRUE!" ); 
 196 void MyCanvas::OnPaint( wxPaintEvent 
&WXUNUSED(event
) ) 
 198     wxPaintDC 
dc( this ); 
 201     dc
.DrawText( "Press mouse button to test calculations!", 160, 50 ); 
 203     dc
.DrawText( "Some text", 140, 140 ); 
 205     dc
.DrawRectangle( 100, 160, 200, 200 ); 
 208 void MyCanvas::OnQueryPosition( wxCommandEvent 
&WXUNUSED(event
) ) 
 210     wxPoint 
pt( m_button
->GetPosition() ); 
 211     wxLogMessage( "Position of ""Query position"" is %d %d", pt
.x
, pt
.y 
); 
 212     pt 
= ClientToScreen( pt 
); 
 213     wxLogMessage( "Position of ""Query position"" on screen is %d %d", pt
.x
, pt
.y 
); 
 216 void MyCanvas::OnAddButton( wxCommandEvent 
&WXUNUSED(event
) ) 
 218     wxLogMessage( "Inserting button at position 10,70..." ); 
 219     wxButton 
*button 
= new wxButton( this, ID_NEWBUTTON
, "new button", wxPoint(10,70), wxSize(80,25) ); 
 220     wxPoint 
pt( button
->GetPosition() ); 
 221     wxLogMessage( "-> Position after inserting %d %d", pt
.x
, pt
.y 
); 
 224 void MyCanvas::OnDeleteButton( wxCommandEvent 
&event 
) 
 226     wxLogMessage( "Deleting button inserted with ""Add button""..." ); 
 227     wxWindow 
*win 
= FindWindow( ID_NEWBUTTON 
); 
 231        wxLogMessage( "-> No window with id = ID_NEWBUTTON found." ); 
 234 void MyCanvas::OnMoveButton( wxCommandEvent 
&event 
) 
 236     wxLogMessage( "Moving button 10 pixels downward.." ); 
 237     wxWindow 
*win 
= FindWindow( event
.GetId() ); 
 238     wxPoint 
pt( win
->GetPosition() ); 
 239     wxLogMessage( "-> Position before move is %d %d", pt
.x
, pt
.y 
); 
 240     win
->Move( -1, pt
.y 
+ 10 ); 
 241     pt 
= win
->GetPosition(); 
 242     wxLogMessage( "-> Position after move is %d %d", pt
.x
, pt
.y 
); 
 245 void MyCanvas::OnScrollWin( wxCommandEvent 
&WXUNUSED(event
) ) 
 247     wxLogMessage( "Scrolling 2 units up.\nThe white square and the controls should move equally!" ); 
 255 const int ID_QUIT  
= 108; 
 256 const int ID_ABOUT 
= 109; 
 258 IMPLEMENT_DYNAMIC_CLASS( MyFrame
, wxFrame 
) 
 260 BEGIN_EVENT_TABLE(MyFrame
,wxFrame
) 
 261   EVT_MENU    (ID_ABOUT
, MyFrame::OnAbout
) 
 262   EVT_MENU    (ID_QUIT
,  MyFrame::OnQuit
) 
 266        : wxFrame( (wxFrame 
*)NULL
, -1, "wxScrolledWindow sample", 
 267                   wxPoint(20,20), wxSize(470,500) ) 
 269     wxMenu 
*file_menu 
= new wxMenu(); 
 270     file_menu
->Append( ID_ABOUT
, "&About.."); 
 271     file_menu
->Append( ID_QUIT
, "E&xit\tAlt-X"); 
 273     wxMenuBar 
*menu_bar 
= new wxMenuBar(); 
 274     menu_bar
->Append(file_menu
, "&File"); 
 276     SetMenuBar( menu_bar 
); 
 279     int widths
[] = { -1, 100 }; 
 280     SetStatusWidths( 2, widths 
); 
 282     m_canvas 
= new MyCanvas( this, -1, wxPoint(0,0), wxSize(100,100) ); 
 283     m_canvas
->SetScrollbars( 10, 10, 50, 100 ); 
 285     m_log 
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE 
); 
 286     wxLog 
*old_log 
= wxLog::SetActiveTarget( new wxLogTextCtrl( m_log 
) ); 
 289     wxBoxSizer 
*topsizer 
= new wxBoxSizer( wxVERTICAL 
); 
 291     topsizer
->Add( m_canvas
, 1, wxEXPAND 
); 
 292     topsizer
->Add( m_log
, 0, wxEXPAND 
); 
 294     SetAutoLayout( TRUE 
); 
 295     SetSizer( topsizer 
); 
 298 void MyFrame::OnQuit( wxCommandEvent 
&WXUNUSED(event
) ) 
 303 void MyFrame::OnAbout( wxCommandEvent 
&WXUNUSED(event
) ) 
 305   (void)wxMessageBox( "wxScroll demo\n" 
 306                       "Robert Roebling (c) 1998", 
 307                       "About wxScroll Demo", wxICON_INFORMATION 
| wxOK 
); 
 310 //----------------------------------------------------------------------------- 
 312 //----------------------------------------------------------------------------- 
 316   wxFrame 
*frame 
= new MyFrame();