    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: }