X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5f73281084be22f97026ff356dfbed0ff1e4956f..d841895246c188d722bae08e9f37c7270bc56ea8:/samples/htlbox/htlbox.cpp diff --git a/samples/htlbox/htlbox.cpp b/samples/htlbox/htlbox.cpp index adae3ed978..322483f688 100644 --- a/samples/htlbox/htlbox.cpp +++ b/samples/htlbox/htlbox.cpp @@ -1,11 +1,11 @@ ///////////////////////////////////////////////////////////////////////////// // Name: htmllbox.cpp -// Purpose: HtmlLbox wxWindows sample +// Purpose: HtmlLbox wxWidgets sample // Author: Vadim Zeitlin // Modified by: // Created: 31.05.03 // RCS-ID: $Id$ -// Copyright: (c) 2003 Vadim Zeitlin +// Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -39,6 +39,9 @@ #include "wx/dc.h" #endif +#include "wx/colordlg.h" +#include "wx/numdlg.h" + #include "wx/htmllbox.h" // you can also have a file containing HTML strings for testing, enable this if @@ -66,56 +69,24 @@ class MyHtmlListBox : public wxHtmlListBox { public: - MyHtmlListBox(wxWindow *parent, bool multi = false) - : wxHtmlListBox(parent, -1, wxDefaultPosition, wxDefaultSize, - multi ? wxLB_MULTIPLE : 0) - { - SetMargins(5, 5); - -#ifdef USE_HTML_FILE - if ( !m_file.Open("results") ) - { - wxLogError("Failed to open results file"); - } - else - { - SetItemCount(m_file.GetLineCount()); - } -#else - SetItemCount(10); -#endif + MyHtmlListBox(wxWindow *parent, bool multi = false); - if ( HasMultipleSelection() ) - Select(3); - else - SetSelection(3); - } + void SetChangeSelFg(bool change) { m_change = change; } protected: - virtual wxString OnGetItem(size_t n) const - { -#ifdef USE_HTML_FILE - wxString s; - if ( m_file.IsOpened() ) - s = m_file[n]; - - return s; -#else - int level = n % 6 + 1; - return wxString::Format(_T("") - _T("Item %lu") - _T(""), - level, - abs(n - 192) % 256, - abs(n - 256) % 256, - abs(n - 128) % 256, - (unsigned long)n, level); -#endif - } + virtual wxString OnGetItem(size_t n) const; + // change the appearance by overriding these functions virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const; + virtual wxColour GetSelectedTextColour(const wxColour& colFg) const; + bool m_change; + +#ifdef USE_HTML_FILE wxTextFile m_file; +#endif + + DECLARE_NO_COPY_CLASS(MyHtmlListBox) }; class MyFrame : public wxFrame @@ -133,6 +104,11 @@ public: void OnToggleMulti(wxCommandEvent& event); void OnSelectAll(wxCommandEvent& event); + void OnSetBgCol(wxCommandEvent& event); + void OnSetSelBgCol(wxCommandEvent& event); + void OnSetSelFgCol(wxCommandEvent& event); + + void OnUpdateUISelectAll(wxUpdateUIEvent& event); void OnLboxSelect(wxCommandEvent& event); @@ -144,14 +120,14 @@ public: private: MyHtmlListBox *m_hlbox; - // any class wishing to process wxWindows events must use this macro + // any class wishing to process wxWidgets events must use this macro DECLARE_EVENT_TABLE() }; class MyApp : public wxApp { public: - virtual bool OnInit() { (new MyFrame())->Show(); return TRUE; } + virtual bool OnInit() { (new MyFrame())->Show(); return true; } }; // ---------------------------------------------------------------------------- @@ -169,6 +145,10 @@ enum HtmlLbox_ToggleMulti, HtmlLbox_SelectAll, + HtmlLbox_SetBgCol, + HtmlLbox_SetSelBgCol, + HtmlLbox_SetSelFgCol, + // 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) @@ -176,7 +156,7 @@ enum }; // ---------------------------------------------------------------------------- -// event tables and other macros for wxWindows +// event tables and other macros for wxWidgets // ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(MyFrame, wxFrame) @@ -189,6 +169,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(HtmlLbox_About, MyFrame::OnAbout) + EVT_MENU(HtmlLbox_SetBgCol, MyFrame::OnSetBgCol) + EVT_MENU(HtmlLbox_SetSelBgCol, MyFrame::OnSetSelBgCol) + EVT_MENU(HtmlLbox_SetSelFgCol, MyFrame::OnSetSelFgCol) EVT_UPDATE_UI(HtmlLbox_SelectAll, MyFrame::OnUpdateUISelectAll) @@ -209,7 +192,7 @@ IMPLEMENT_APP(MyApp) // frame constructor MyFrame::MyFrame() - : wxFrame(NULL, -1, _T("HtmlLbox wxWindows Sample"), + : wxFrame(NULL, wxID_ANY, _T("HtmlLbox wxWidgets Sample"), wxDefaultPosition, wxSize(400, 500)) { // set the frame icon @@ -226,7 +209,7 @@ MyFrame::MyFrame() _T("Set &margins...\tCtrl-G"), _T("Change the margins around the items")); menuHLbox->AppendCheckItem(HtmlLbox_DrawSeparator, - _T("Draw &separators\tCtrl-S"), + _T("&Draw separators\tCtrl-D"), _T("Toggle drawing separators between cells")); menuHLbox->AppendSeparator(); menuHLbox->AppendCheckItem(HtmlLbox_ToggleMulti, @@ -234,6 +217,12 @@ MyFrame::MyFrame() _T("Toggle multiple selection on/off")); menuHLbox->AppendSeparator(); menuHLbox->Append(HtmlLbox_SelectAll, _T("Select &all items\tCtrl-A")); + menuHLbox->AppendSeparator(); + menuHLbox->Append(HtmlLbox_SetBgCol, _T("Set &background...\tCtrl-B")); + menuHLbox->Append(HtmlLbox_SetSelBgCol, + _T("Set &selection background...\tCtrl-S")); + menuHLbox->AppendCheckItem(HtmlLbox_SetSelFgCol, + _T("Keep &foreground in selection\tCtrl-F")); // the "About" item should be in the help menu wxMenu *helpMenu = new wxMenu; @@ -254,12 +243,12 @@ MyFrame::MyFrame() #if wxUSE_STATUSBAR // create a status bar just for fun (by default with 1 pane only) CreateStatusBar(2); - SetStatusText(_T("Welcome to wxWindows!")); + SetStatusText(_T("Welcome to wxWidgets!")); #endif // wxUSE_STATUSBAR // create the child controls m_hlbox = new MyHtmlListBox(this); - wxTextCtrl *text = new wxTextCtrl(this, -1, _T(""), + wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); delete wxLog::SetActiveTarget(new wxLogTextCtrl(text)); @@ -283,21 +272,21 @@ MyFrame::~MyFrame() void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { - // TRUE is to force the frame to close - Close(TRUE); + // true is to force the frame to close + Close(true); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox(_T("This sample shows wxHtmlListBox class.\n") _T("\n") - _T("© 2003 Vadim Zeitlin"), + _T("(c) 2003 Vadim Zeitlin"), _T("About HtmlLbox"), wxOK | wxICON_INFORMATION, this); } -void MyFrame::OnSetMargins(wxCommandEvent&) +void MyFrame::OnSetMargins(wxCommandEvent& WXUNUSED(event)) { long margin = wxGetNumberFromUser ( @@ -328,9 +317,9 @@ void MyFrame::OnToggleMulti(wxCommandEvent& event) sizer->Layout(); } -void MyFrame::OnSelectAll(wxCommandEvent& event) +void MyFrame::OnSelectAll(wxCommandEvent& WXUNUSED(event)) { - m_hlbox->SelectRange(0, m_hlbox->GetItemCount() - 1); + m_hlbox->SelectAll(); } void MyFrame::OnUpdateUISelectAll(wxUpdateUIEvent& event) @@ -338,6 +327,40 @@ void MyFrame::OnUpdateUISelectAll(wxUpdateUIEvent& event) event.Enable( m_hlbox && m_hlbox->HasMultipleSelection() ); } +void MyFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event)) +{ + wxColour col = wxGetColourFromUser(this, m_hlbox->GetBackgroundColour()); + if ( col.Ok() ) + { + m_hlbox->SetBackgroundColour(col); + m_hlbox->Refresh(); + +#if wxUSE_STATUSBAR + SetStatusText(_T("Background colour changed.")); +#endif // wxUSE_STATUSBAR + } +} + +void MyFrame::OnSetSelBgCol(wxCommandEvent& WXUNUSED(event)) +{ + wxColour col = wxGetColourFromUser(this, m_hlbox->GetSelectionBackground()); + if ( col.Ok() ) + { + m_hlbox->SetSelectionBackground(col); + m_hlbox->Refresh(); + +#if wxUSE_STATUSBAR + SetStatusText(_T("Selection background colour changed.")); +#endif // wxUSE_STATUSBAR + } +} + +void MyFrame::OnSetSelFgCol(wxCommandEvent& event) +{ + m_hlbox->SetChangeSelFg(!event.IsChecked()); + m_hlbox->Refresh(); +} + // ---------------------------------------------------------------------------- // listbox event handlers // ---------------------------------------------------------------------------- @@ -368,16 +391,42 @@ void MyFrame::OnLboxSelect(wxCommandEvent& event) wxLogMessage(_T("Selected items: %s"), s.c_str()); } +#if wxUSE_STATUSBAR SetStatusText(wxString::Format( _T("# items selected = %lu"), (unsigned long)m_hlbox->GetSelectedCount() )); +#endif // wxUSE_STATUSBAR } // ============================================================================ // MyHtmlListBox // ============================================================================ +MyHtmlListBox::MyHtmlListBox(wxWindow *parent, bool multi) + : wxHtmlListBox(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, + multi ? wxLB_MULTIPLE : 0) +{ + m_change = true; + + SetMargins(5, 5); + +#ifdef USE_HTML_FILE + if ( !m_file.Open(_T("results")) ) + { + wxLogError(_T("Failed to open results file")); + } + else + { + SetItemCount(m_file.GetLineCount()); + } +#else + SetItemCount(1000); +#endif + + SetSelection(3); +} + void MyHtmlListBox::OnDrawSeparator(wxDC& dc, wxRect& rect, size_t) const { if ( ((MyFrame *)GetParent())-> @@ -389,3 +438,29 @@ void MyHtmlListBox::OnDrawSeparator(wxDC& dc, wxRect& rect, size_t) const } } +wxString MyHtmlListBox::OnGetItem(size_t n) const +{ +#ifdef USE_HTML_FILE + wxString s; + if ( m_file.IsOpened() ) + s = m_file[n]; + + return s; +#else + int level = n % 6 + 1; + return wxString::Format(_T("") + _T("Item %lu") + _T(""), + level, + abs(n - 192) % 256, + abs(n - 256) % 256, + abs(n - 128) % 256, + (unsigned long)n, level); +#endif +} + +wxColour MyHtmlListBox::GetSelectedTextColour(const wxColour& colFg) const +{ + return m_change ? wxHtmlListBox::GetSelectedTextColour(colFg) : colFg; +} +