X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/be5a51fb592f3fa2ba38ac6cd1e488d6d806058c..55325d01e68cfb071e42699ca72ba84a7071aa2b:/samples/display/display.cpp diff --git a/samples/display/display.cpp b/samples/display/display.cpp index c497f25a23..7ee089971d 100644 --- a/samples/display/display.cpp +++ b/samples/display/display.cpp @@ -29,11 +29,8 @@ #include "wx/wx.h" #endif -#if !wxUSE_DISPLAY - #error "To compile this sample you must build the library with wxUSE_DISPLAY set to 1" -#endif - -#include "wx/notebook.h" +#include "wx/bookctrl.h" +#include "wx/sysopt.h" #include "wx/display.h" @@ -74,19 +71,23 @@ public: void OnFullScreen(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); +#if wxUSE_DISPLAY void OnChangeMode(wxCommandEvent& event); void OnResetMode(wxCommandEvent& event); - void OnLeftClick(wxMouseEvent& event); - void OnDisplayChanged(wxDisplayChangedEvent& event); +#endif // wxUSE_DISPLAY + + void OnLeftClick(wxMouseEvent& event); private: +#if wxUSE_DISPLAY // convert video mode to textual description wxString VideoModeToText(const wxVideoMode& mode); +#endif // wxUSE_DISPLAY // GUI controls - wxNotebook *m_notebook; + wxBookCtrl *m_book; // any class wishing to process wxWidgets events must use this macro DECLARE_EVENT_TABLE() @@ -109,13 +110,11 @@ public: enum { // menu items - Display_Quit = 1, - - Display_FromPoint, + Display_FromPoint = wxID_HIGHEST + 1, Display_FullScreen, // controls - Display_ChangeMode = 1000, + Display_ChangeMode, Display_ResetMode, Display_CurrentMode, @@ -123,6 +122,7 @@ enum // it is important for the id corresponding to the "About" command to have // this standard value as otherwise it won't be handled properly under Mac // (where it is special and put into the "Apple" menu) + Display_Quit = wxID_EXIT, Display_About = wxID_ABOUT }; @@ -139,13 +139,14 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Display_FullScreen, MyFrame::OnFullScreen) EVT_MENU(Display_About, MyFrame::OnAbout) +#if wxUSE_DISPLAY EVT_CHOICE(Display_ChangeMode, MyFrame::OnChangeMode) EVT_BUTTON(Display_ResetMode, MyFrame::OnResetMode) - EVT_LEFT_UP(MyFrame::OnLeftClick) - - EVT_DISPLAY_CHANGED(MyFrame::OnDisplayChanged) +#endif // wxUSE_DISPLAY + + EVT_LEFT_UP(MyFrame::OnLeftClick) END_EVENT_TABLE() // Create a new application object: this macro will allow wxWidgets to create @@ -169,7 +170,7 @@ bool MyApp::OnInit() #ifdef __WXMSW__ if ( argc == 2 && !wxStricmp(argv[1], _T("/dx")) ) { - wxDisplay::UseDirectX(true); + wxSystemOptions::SetOption(_T("msw.display.directdraw"), 1); } #endif // __WXMSW__ @@ -220,20 +221,21 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, SetMenuBar(menuBar); #endif // wxUSE_MENUS +#if wxUSE_STATUSBAR // create status bar CreateStatusBar(); +#endif // wxUSE_STATUSBAR // create child controls - wxPanel *panel = new wxPanel(this, wxID_ANY); - m_notebook = new wxNotebook(panel, wxID_ANY); + m_book = new wxBookCtrl(panel, wxID_ANY); const size_t count = wxDisplay::GetCount(); for ( size_t nDpy = 0; nDpy < count; nDpy++ ) { wxDisplay display(nDpy); - wxWindow *page = new wxPanel(m_notebook, wxID_ANY); + wxWindow *page = new wxPanel(m_book, wxID_ANY); // create 2 column flex grid sizer with growable 2nd column wxFlexGridSizer *sizer = new wxFlexGridSizer(2, 10, 20); @@ -258,10 +260,23 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, r.width, r.height) )); + const wxRect rc(display.GetClientArea()); + sizer->Add(new wxStaticText(page, wxID_ANY, _T("Client area: "))); + sizer->Add(new wxStaticText + ( + page, + wxID_ANY, + wxString::Format(_T("(%d, %d)-(%d, %d)"), + rc.x, rc.y, rc.width, rc.height) + )); sizer->Add(new wxStaticText(page, wxID_ANY, _T("Name: "))); sizer->Add(new wxStaticText(page, wxID_ANY, display.GetName())); + wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL); + sizerTop->Add(sizer, 1, wxALL | wxEXPAND, 10); + +#if wxUSE_DISPLAY wxChoice *choiceModes = new wxChoice(page, Display_ChangeMode); const wxArrayVideoModes modes = display.GetModes(); const size_t count = modes.GetCount(); @@ -281,24 +296,26 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, VideoModeToText(display.GetCurrentMode()))); // add it to another sizer to have borders around it and button below - wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL); - sizerTop->Add(sizer, 1, wxALL | wxEXPAND, 10); - sizerTop->Add(new wxButton(page, Display_ResetMode, _T("&Reset mode")), 0, wxALL | wxCENTRE, 5); +#endif // wxUSE_DISPLAY + page->SetSizer(sizerTop); - m_notebook->AddPage(page, - wxString::Format(_T("Display %lu"), - (unsigned long)nDpy)); + m_book->AddPage(page, + wxString::Format(_T("Display %lu"), + (unsigned long)nDpy)); } - wxNotebookSizer *notebookSizer = new wxNotebookSizer(m_notebook); - panel->SetSizer(notebookSizer); - notebookSizer->Fit(this); - + wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(m_book, 1, wxEXPAND); + panel->SetSizer(sizer); + sizer->Fit(this); + sizer->SetSizeHints(this); } +#if wxUSE_DISPLAY + wxString MyFrame::VideoModeToText(const wxVideoMode& mode) { wxString s; @@ -317,6 +334,8 @@ wxString MyFrame::VideoModeToText(const wxVideoMode& mode) return s; } +#endif // wxUSE_DISPLAY + // event handlers void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) @@ -327,7 +346,7 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { - wxMessageBox(_T("Demo program for wxDisplay class.\n\n(c) 2003 Vadim Zeitlin"), + wxMessageBox(_T("Demo program for wxDisplay class.\n\n(c) 2003-2006 Vadim Zeitlin"), _T("About Display Sample"), wxOK | wxICON_INFORMATION, this); @@ -335,7 +354,9 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnFromPoint(wxCommandEvent& WXUNUSED(event)) { +#if wxUSE_STATUSBAR SetStatusText(_T("Press the mouse anywhere...")); +#endif // wxUSE_STATUSBAR CaptureMouse(); } @@ -345,9 +366,11 @@ void MyFrame::OnFullScreen(wxCommandEvent& event) ShowFullScreen(event.IsChecked()); } +#if wxUSE_DISPLAY + void MyFrame::OnChangeMode(wxCommandEvent& event) { - wxDisplay dpy(m_notebook->GetSelection()); + wxDisplay dpy(m_book->GetSelection()); // you wouldn't write this in real code, would you? if ( !dpy.ChangeMode(((MyVideoModeClientData *) @@ -360,11 +383,13 @@ void MyFrame::OnChangeMode(wxCommandEvent& event) void MyFrame::OnResetMode(wxCommandEvent& WXUNUSED(event)) { - wxDisplay dpy(m_notebook->GetSelection()); + wxDisplay dpy(m_book->GetSelection()); dpy.ResetMode(); } +#endif // wxUSE_DISPLAY + void MyFrame::OnLeftClick(wxMouseEvent& event) { if ( HasCapture() ) @@ -384,12 +409,14 @@ void MyFrame::OnLeftClick(wxMouseEvent& event) } } +#if wxUSE_DISPLAY + void MyFrame::OnDisplayChanged(wxDisplayChangedEvent& event) { // update the current mode text - for ( size_t n = 0; n < m_notebook->GetPageCount(); n++ ) + for ( size_t n = 0; n < m_book->GetPageCount(); n++ ) { - wxStaticText *label = wxDynamicCast(m_notebook->GetPage(n)-> + wxStaticText *label = wxDynamicCast(m_book->GetPage(n)-> FindWindow(Display_CurrentMode), wxStaticText); if ( label ) @@ -402,3 +429,4 @@ void MyFrame::OnDisplayChanged(wxDisplayChangedEvent& event) event.Skip(); } +#endif // wxUSE_DISPLAY