X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/82ceade76a4913f9c6fd8dfda1fb291bf08e1d89..160f78e09db9fff2f7c3a1484514835f1d83eb8e:/samples/popup/popup.cpp diff --git a/samples/popup/popup.cpp b/samples/popup/popup.cpp index 4741bfe738..2cbf41b01c 100644 --- a/samples/popup/popup.cpp +++ b/samples/popup/popup.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: minimal.cpp +// Name: popup.cpp // Purpose: Popup wxWidgets sample // Author: Robert Roebling // Modified by: @@ -81,6 +81,7 @@ private: wxScrolledWindow *m_panel; wxButton *m_button; wxSpinCtrl *m_spinCtrl; + wxStaticText *m_mouseText; private: void OnMouse( wxMouseEvent &event ); @@ -115,29 +116,35 @@ SimpleTransientPopup::SimpleTransientPopup( wxWindow *parent ) m_panel = new wxScrolledWindow( this, wxID_ANY ); m_panel->SetBackgroundColour( *wxLIGHT_GREY ); - // Keep this code to verify if mouse events work, they're required if + // Keep this code to verify if mouse events work, they're required if // you're making a control like a combobox where the items are highlighted // under the cursor, the m_panel is set focus in the Popup() function - //m_panel->Connect(wxEVT_MOTION, - // wxMouseEventHandler(SimpleTransientPopup::OnMouse), - // NULL, this); + m_panel->Connect(wxEVT_MOTION, + wxMouseEventHandler(SimpleTransientPopup::OnMouse), + NULL, this); wxStaticText *text = new wxStaticText( m_panel, wxID_ANY, - wxT("wx.PopupTransientWindow is a\n") - wxT("wx.PopupWindow which disappears\n") + wxT("wxPopupTransientWindow is a\n") + wxT("wxPopupWindow which disappears\n") wxT("automatically when the user\n") wxT("clicks the mouse outside it or if it\n") wxT("(or its first child) loses focus in \n") - wxT("any other way."), wxPoint( 10,10) ); - wxSize size = text->GetBestSize(); + wxT("any other way.") ); - m_button = new wxButton(m_panel, Minimal_PopupButton, wxT("Press Me"), wxPoint(0, size.y + 10)); - size.y = m_button->GetRect().GetBottom(); - m_spinCtrl = new wxSpinCtrl(m_panel, Minimal_PopupSpinctrl, wxT("Hello"), wxPoint(0, size.y + 5)); - size.y = m_spinCtrl->GetRect().GetBottom(); + m_button = new wxButton(m_panel, Minimal_PopupButton, wxT("Press Me")); + m_spinCtrl = new wxSpinCtrl(m_panel, Minimal_PopupSpinctrl, wxT("Hello")); + m_mouseText = new wxStaticText(m_panel, wxID_ANY, + wxT("<- Test Mouse ->")); - m_panel->SetSize( size.x+20, size.y+20 ); - SetClientSize( size.x+20, size.y+20 ); + wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); + topSizer->Add( text, 0, wxALL, 5 ); + topSizer->Add( m_button, 0, wxALL, 5 ); + topSizer->Add( m_spinCtrl, 0, wxALL, 5 ); + topSizer->Add( m_mouseText, 0, wxCENTRE|wxALL, 5 ); + + m_panel->SetSizer( topSizer ); + topSizer->Fit(m_panel); + topSizer->Fit(this); } SimpleTransientPopup::~SimpleTransientPopup() @@ -147,7 +154,7 @@ SimpleTransientPopup::~SimpleTransientPopup() void SimpleTransientPopup::Popup(wxWindow *focus) { wxLogMessage( wxT("0x%lx SimpleTransientPopup::Popup"), long(this) ); - wxPopupTransientWindow::Popup(focus ? focus : m_panel); + wxPopupTransientWindow::Popup(); } void SimpleTransientPopup::OnDismiss() @@ -187,7 +194,23 @@ void SimpleTransientPopup::OnKillFocus(wxFocusEvent &event) void SimpleTransientPopup::OnMouse(wxMouseEvent &event) { - wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnMouse pos(%d, %d)"), long(event.GetEventObject()), event.GetX(), event.GetY()); + wxRect rect(m_mouseText->GetRect()); + rect.SetX(-100000); + rect.SetWidth(1000000); + wxColour colour(*wxLIGHT_GREY); + + if (rect.Contains(event.GetPosition())) + { + colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); + wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnMouse pos(%d, %d)"), + long(event.GetEventObject()), event.GetX(), event.GetY()); + } + + if (colour != m_mouseText->GetBackgroundColour()) + { + m_mouseText->SetBackgroundColour(colour); + m_mouseText->Refresh(); + } event.Skip(); } @@ -206,7 +229,8 @@ void SimpleTransientPopup::OnButton(wxCommandEvent& event) void SimpleTransientPopup::OnSpinCtrl(wxSpinEvent& event) { - wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnSpinCtrl ID %d Value %ld"), long(this), event.GetId(), event.GetInt()); + wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnSpinCtrl ID %d Value %d"), + long(this), event.GetId(), event.GetInt()); event.Skip(); } @@ -239,6 +263,7 @@ public: void OnTestDialog(wxCommandEvent& event); void OnStartSimplePopup(wxCommandEvent& event); void OnStartScrolledPopup(wxCommandEvent& event); + void OnActivate(wxActivateEvent& event); private: SimpleTransientPopup *m_simplePopup; @@ -266,6 +291,9 @@ IMPLEMENT_APP(MyApp) // 'Main program' equivalent: the program execution "starts" here bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + // create the main application window m_frame = new MyFrame(_T("Popup wxWidgets App")); @@ -287,12 +315,13 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Minimal_Quit, MyFrame::OnQuit) EVT_MENU(Minimal_About, MyFrame::OnAbout) EVT_MENU(Minimal_TestDialog, MyFrame::OnTestDialog) + EVT_ACTIVATE(MyFrame::OnActivate) EVT_BUTTON(Minimal_StartSimplePopup, MyFrame::OnStartSimplePopup) EVT_BUTTON(Minimal_StartScrolledPopup, MyFrame::OnStartScrolledPopup) END_EVENT_TABLE() MyFrame::MyFrame(const wxString& title) - : wxFrame(NULL, wxID_ANY, title) +: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(500,300)) { m_simplePopup = m_scrolledPopup = NULL; @@ -317,6 +346,12 @@ MyFrame::MyFrame(const wxString& title) SetMenuBar(menuBar); #endif // wxUSE_MENUS +#if wxUSE_STATUSBAR + // create a status bar just for fun (by default with 1 pane only) + CreateStatusBar(2); + SetStatusText(_T("Welcome to wxWidgets!")); +#endif // wxUSE_STATUSBAR + wxPanel *panel = new wxPanel(this, -1); wxButton *button1 = new wxButton( panel, Minimal_StartSimplePopup, wxT("Show simple popup"), wxPoint(20,20) ); wxButton *button2 = new wxButton( panel, Minimal_StartScrolledPopup, wxT("Show scrolled popup"), wxPoint(20,70) ); @@ -326,21 +361,15 @@ MyFrame::MyFrame(const wxString& title) m_logWin->SetEditable(false); wxLogTextCtrl* logger = new wxLogTextCtrl( m_logWin ); m_logOld = logger->SetActiveTarget( logger ); - logger->SetTimestamp( NULL ); + logger->DisableTimestamp(); wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); topSizer->Add( button1, 0, wxALL, 5 ); topSizer->Add( button2, 0, wxALL, 5 ); topSizer->Add( m_logWin, 1, wxEXPAND|wxALL, 5 ); - panel->SetAutoLayout( true ); panel->SetSizer( topSizer ); -#if wxUSE_STATUSBAR - // create a status bar just for fun (by default with 1 pane only) - CreateStatusBar(2); - SetStatusText(_T("Welcome to wxWidgets!")); -#endif // wxUSE_STATUSBAR } MyFrame::~MyFrame() @@ -351,6 +380,11 @@ MyFrame::~MyFrame() // event handlers +void MyFrame::OnActivate(wxActivateEvent& event) +{ + wxLogMessage( wxT("In activate...") ); +} + void MyFrame::OnStartSimplePopup(wxCommandEvent& event) { wxLogMessage( wxT("================================================") ); @@ -425,9 +459,7 @@ MyDialog::MyDialog(const wxString& title) topSizer->AddSpacer(40); topSizer->Add( okButton, 0, wxALL, 5 ); - panel->SetAutoLayout( true ); - panel->SetSizer( topSizer ); - topSizer->Fit(this); + panel->SetSizerAndFit( topSizer ); } void MyDialog::OnStartSimplePopup(wxCommandEvent& event)