001: #include <wx/wx.h>
002: 
003: const int ID_SAY_HELLO = 1000;
004: const int ID_SAY_GOODBYE = 1001;
005: 
006: /**
007:    A frame with buttons that add greetings to a 
008:    text control.
009: */
010: class ButtonFrame : public wxFrame
011: {
012: public:
013:    /**
014:       Constructs and lays out the text control and buttons.
015:    */
016:    ButtonFrame();
017:    /**
018:       Adds a "Hello, World!" message to the text control.
019:       @param event the event descriptor
020:    */
021:    void OnSayHello(wxCommandEvent& event);
022:    /**
023:       Adds a "Goodbye, World!" message to the text control.
024:       @param event the event descriptor
025:    */
026:    void OnSayGoodbye(wxCommandEvent& event);
027: private:
028:    wxTextCtrl* text;
029:    DECLARE_EVENT_TABLE()
030: };
031: 
032: /**
033:    An application to demonstrate button layout.
034: */
035: class ButtonApp : public wxApp
036: {
037: public:
038:    /**
039:       Constructs the frame.
040:    */
041:    ButtonApp();
042:    /**
043:       Shows the frame.
044:       @return true
045:    */
046:    virtual bool OnInit();
047: private:
048:    ButtonFrame* frame;
049: };
050: 
051: DECLARE_APP(ButtonApp)
052: 
053: IMPLEMENT_APP(ButtonApp)
054: 
055: BEGIN_EVENT_TABLE(ButtonFrame, wxFrame)
056:    EVT_BUTTON(ID_SAY_HELLO, ButtonFrame::OnSayHello)
057:    EVT_BUTTON(ID_SAY_GOODBYE, ButtonFrame::OnSayGoodbye) 
058: END_EVENT_TABLE()
059: 
060: ButtonFrame::ButtonFrame() 
061:    : wxFrame(NULL, -1, "ButtonFrame")
062: {
063:    text = new wxTextCtrl(this, -1, "",
064:       wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
065: 
066:    wxButton* hello_button = new wxButton(this, 
067:       ID_SAY_HELLO, "Say Hello");
068: 
069:    wxButton* goodbye_button = new wxButton(this, 
070:       ID_SAY_GOODBYE, "Say Goodbye");
071: 
072:    wxBoxSizer* button_sizer = new wxBoxSizer(wxHORIZONTAL);
073:    button_sizer->Add(hello_button);
074:    button_sizer->Add(goodbye_button);
075: 
076:    wxBoxSizer* frame_sizer = new wxBoxSizer(wxVERTICAL);
077:    frame_sizer->Add(text, 1, wxGROW);
078:    frame_sizer->Add(button_sizer, 0, wxALIGN_CENTER);
079: 
080:    SetAutoLayout(true);
081:    SetSizer(frame_sizer);
082: }
083: 
084: void ButtonFrame::OnSayHello(wxCommandEvent& event)
085: {
086:    text->AppendText("Hello, World!\n");
087: }
088: 
089: void ButtonFrame::OnSayGoodbye(wxCommandEvent& event)
090: {
091:    text->AppendText("Goodbye, World!\n");
092: }
093: 
094: ButtonApp::ButtonApp()
095: {
096:    frame = new ButtonFrame();
097: }
098: 
099: bool ButtonApp::OnInit()
100: {
101:    frame->Show(true);
102:    return true;
103: }