X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/45e6e6f8ab806b337dffeb3b52fec7eba3c845ef..14619f10b0bdb630206607abd0ce0319d45e095a:/samples/popup/popup.cpp diff --git a/samples/popup/popup.cpp b/samples/popup/popup.cpp index 14075eaae7..ed0097e955 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: @@ -39,7 +39,7 @@ // the application icon (under Windows and OS/2 it is in resources and even // though we could still include the XPM here it would be unused) -#if !defined(__WXMSW__) && !defined(__WXPM__) +#ifndef wxHAS_IMAGES_IN_RESOURCES #include "../sample.xpm" #endif @@ -66,7 +66,7 @@ enum class SimpleTransientPopup: public wxPopupTransientWindow { public: - SimpleTransientPopup( wxWindow *parent ); + SimpleTransientPopup( wxWindow *parent, bool scrolled ); virtual ~SimpleTransientPopup(); // wxPopupTransientWindow virtual methods are all overridden to log them @@ -75,8 +75,6 @@ public: virtual bool ProcessLeftDown(wxMouseEvent& event); virtual bool Show( bool show = true ); - wxScrolledWindow* GetChild() { return m_panel; } - private: wxScrolledWindow *m_panel; wxButton *m_button; @@ -110,13 +108,13 @@ BEGIN_EVENT_TABLE(SimpleTransientPopup,wxPopupTransientWindow) EVT_SPINCTRL( Minimal_PopupSpinctrl, SimpleTransientPopup::OnSpinCtrl ) END_EVENT_TABLE() -SimpleTransientPopup::SimpleTransientPopup( wxWindow *parent ) +SimpleTransientPopup::SimpleTransientPopup( wxWindow *parent, bool scrolled ) :wxPopupTransientWindow( 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, @@ -124,8 +122,8 @@ SimpleTransientPopup::SimpleTransientPopup( wxWindow *parent ) 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") @@ -133,7 +131,7 @@ SimpleTransientPopup::SimpleTransientPopup( wxWindow *parent ) 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, + m_mouseText = new wxStaticText(m_panel, wxID_ANY, wxT("<- Test Mouse ->")); wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); @@ -142,20 +140,40 @@ SimpleTransientPopup::SimpleTransientPopup( wxWindow *parent ) topSizer->Add( m_spinCtrl, 0, wxALL, 5 ); topSizer->Add( m_mouseText, 0, wxCENTRE|wxALL, 5 ); - m_panel->SetAutoLayout( true ); + if ( scrolled ) + { + // Add a big window to ensure that scrollbars are shown when we set the + // panel size to a lesser size below. + topSizer->Add(new wxPanel(m_panel, wxID_ANY, wxDefaultPosition, + wxSize(600, 900))); + } + m_panel->SetSizer( topSizer ); - topSizer->Fit(m_panel); - topSizer->Fit(this); + if ( scrolled ) + { + // Set the fixed size to ensure that the scrollbars are shown. + m_panel->SetSize(300, 300); + + // And also actually enable them. + m_panel->SetScrollRate(10, 10); + } + else + { + // Use the fitting size for the panel if we don't need scrollbars. + topSizer->Fit(m_panel); + } + + SetClientSize(m_panel->GetSize()); } SimpleTransientPopup::~SimpleTransientPopup() { } -void SimpleTransientPopup::Popup(wxWindow *focus) +void SimpleTransientPopup::Popup(wxWindow* WXUNUSED(focus)) { wxLogMessage( wxT("0x%lx SimpleTransientPopup::Popup"), long(this) ); - wxPopupTransientWindow::Popup(focus ? focus : m_panel); + wxPopupTransientWindow::Popup(); } void SimpleTransientPopup::OnDismiss() @@ -201,9 +219,10 @@ void SimpleTransientPopup::OnMouse(wxMouseEvent &event) 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()); + wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnMouse pos(%d, %d)"), + long(event.GetEventObject()), event.GetX(), event.GetY()); } if (colour != m_mouseText->GetBackgroundColour()) @@ -229,7 +248,8 @@ void SimpleTransientPopup::OnButton(wxCommandEvent& event) void SimpleTransientPopup::OnSpinCtrl(wxSpinEvent& event) { - wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnSpinCtrl ID %d Value %d"), long(this), event.GetId(), event.GetInt()); + wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnSpinCtrl ID %d Value %d"), + long(this), event.GetId(), event.GetInt()); event.Skip(); } @@ -262,6 +282,7 @@ public: void OnTestDialog(wxCommandEvent& event); void OnStartSimplePopup(wxCommandEvent& event); void OnStartScrolledPopup(wxCommandEvent& event); + void OnActivate(wxActivateEvent& event); private: SimpleTransientPopup *m_simplePopup; @@ -293,7 +314,7 @@ bool MyApp::OnInit() return false; // create the main application window - m_frame = new MyFrame(_T("Popup wxWidgets App")); + m_frame = new MyFrame(wxT("Popup wxWidgets App")); // and show it (the frames, unlike simple controls, are not shown when // created initially) @@ -313,12 +334,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; @@ -329,15 +351,15 @@ MyFrame::MyFrame(const wxString& title) // the "About" item should be in the help menu wxMenu *helpMenu = new wxMenu; - helpMenu->Append(Minimal_About, _T("&About...\tF1"), _T("Show about dialog")); + helpMenu->Append(Minimal_About, wxT("&About\tF1"), wxT("Show about dialog")); - menuFile->Append(Minimal_TestDialog, _T("&Test dialog\tAlt-T"), _T("Test dialog")); - menuFile->Append(Minimal_Quit, _T("E&xit\tAlt-X"), _T("Quit this program")); + menuFile->Append(Minimal_TestDialog, wxT("&Test dialog\tAlt-T"), wxT("Test dialog")); + menuFile->Append(Minimal_Quit, wxT("E&xit\tAlt-X"), wxT("Quit this program")); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar(); - menuBar->Append(menuFile, _T("&File")); - menuBar->Append(helpMenu, _T("&Help")); + menuBar->Append(menuFile, wxT("&File")); + menuBar->Append(helpMenu, wxT("&Help")); // ... and attach this menu bar to the frame SetMenuBar(menuBar); @@ -346,7 +368,7 @@ MyFrame::MyFrame(const wxString& title) #if wxUSE_STATUSBAR // create a status bar just for fun (by default with 1 pane only) CreateStatusBar(2); - SetStatusText(_T("Welcome to wxWidgets!")); + SetStatusText(wxT("Welcome to wxWidgets!")); #endif // wxUSE_STATUSBAR wxPanel *panel = new wxPanel(this, -1); @@ -358,14 +380,13 @@ 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 ); } @@ -378,11 +399,16 @@ MyFrame::~MyFrame() // event handlers +void MyFrame::OnActivate(wxActivateEvent& WXUNUSED(event)) +{ + wxLogMessage( wxT("In activate...") ); +} + void MyFrame::OnStartSimplePopup(wxCommandEvent& event) { wxLogMessage( wxT("================================================") ); delete m_simplePopup; - m_simplePopup = new SimpleTransientPopup( this ); + m_simplePopup = new SimpleTransientPopup( this, false ); wxWindow *btn = (wxWindow*) event.GetEventObject(); wxPoint pos = btn->ClientToScreen( wxPoint(0,0) ); wxSize sz = btn->GetSize(); @@ -395,8 +421,7 @@ void MyFrame::OnStartScrolledPopup(wxCommandEvent& event) { wxLogMessage( wxT("================================================") ); delete m_scrolledPopup; - m_scrolledPopup = new SimpleTransientPopup( this ); - m_scrolledPopup->GetChild()->SetScrollbars(1, 1, 1000, 1000); + m_scrolledPopup = new SimpleTransientPopup( this, true ); wxWindow *btn = (wxWindow*) event.GetEventObject(); wxPoint pos = btn->ClientToScreen( wxPoint(0,0) ); wxSize sz = btn->GetSize(); @@ -420,10 +445,10 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxString msg; - msg.Printf( _T("This is the About dialog of the popup sample.\n") - _T("Welcome to %s"), wxVERSION_STRING); + msg.Printf( wxT("This is the About dialog of the popup sample.\n") + wxT("Welcome to %s"), wxVERSION_STRING); - wxMessageBox(msg, _T("About Popup"), wxOK | wxICON_INFORMATION, this); + wxMessageBox(msg, wxT("About Popup"), wxOK | wxICON_INFORMATION, this); } // ---------------------------------------------------------------------------- @@ -452,16 +477,14 @@ 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) { wxLogMessage( wxT("================================================") ); delete m_simplePopup; - m_simplePopup = new SimpleTransientPopup( this ); + m_simplePopup = new SimpleTransientPopup( this, false ); wxWindow *btn = (wxWindow*) event.GetEventObject(); wxPoint pos = btn->ClientToScreen( wxPoint(0,0) ); wxSize sz = btn->GetSize(); @@ -474,8 +497,7 @@ void MyDialog::OnStartScrolledPopup(wxCommandEvent& event) { wxLogMessage( wxT("================================================") ); delete m_scrolledPopup; - m_scrolledPopup = new SimpleTransientPopup( this ); - m_scrolledPopup->GetChild()->SetScrollbars(1, 1, 1000, 1000); + m_scrolledPopup = new SimpleTransientPopup( this, true ); wxWindow *btn = (wxWindow*) event.GetEventObject(); wxPoint pos = btn->ClientToScreen( wxPoint(0,0) ); wxSize sz = btn->GetSize();