X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4636a1e8f869e405523113971791b3efac5f7c4a..daebb44c74bdbdc8ce43bd4aa471774d92f35f02:/samples/htlbox/htlbox.cpp?ds=sidebyside diff --git a/samples/htlbox/htlbox.cpp b/samples/htlbox/htlbox.cpp index 1a87b03df6..0522932c5e 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 ///////////////////////////////////////////////////////////////////////////// @@ -37,9 +37,11 @@ #include "wx/textctrl.h" #include "wx/dc.h" + #include "wx/icon.h" #endif #include "wx/colordlg.h" +#include "wx/numdlg.h" #include "wx/htmllbox.h" @@ -50,14 +52,7 @@ #include "wx/textfile.h" #endif -// ---------------------------------------------------------------------------- -// resources -// ---------------------------------------------------------------------------- - -// the application icon (under Windows and OS/2 it is in resources) -#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__) - #include "mondrian.xpm" -#endif +#include "../sample.xpm" // ---------------------------------------------------------------------------- // private classes @@ -71,19 +66,37 @@ public: MyHtmlListBox(wxWindow *parent, bool multi = false); void SetChangeSelFg(bool change) { m_change = change; } + void UpdateFirstItem(); protected: + // override this method to return data to be shown in the listbox (this is + // mandatory) virtual wxString OnGetItem(size_t n) const; - // change the appearance by overriding these functions + // change the appearance by overriding these functions (this is optional) virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const; virtual wxColour GetSelectedTextColour(const wxColour& colFg) const; + // override this method to handle mouse clicks + virtual void OnLinkClicked(size_t n, const wxHtmlLinkInfo& link); + + // flag telling us whether we should use fg colour even for the selected + // item bool m_change; + // flag which we toggle to update the first items text in OnGetItem() + bool m_firstItemUpdated; + + // flag which we toggle when the user clicks on the link in 2nd item + // to change 2nd item's text + bool m_linkClicked; + + #ifdef USE_HTML_FILE wxTextFile m_file; #endif + + DECLARE_NO_COPY_CLASS(MyHtmlListBox) }; class MyFrame : public wxFrame @@ -100,6 +113,7 @@ public: void OnDrawSeparator(wxCommandEvent&) { m_hlbox->RefreshAll(); } void OnToggleMulti(wxCommandEvent& event); void OnSelectAll(wxCommandEvent& event); + void OnUpdateItem(wxCommandEvent& event); void OnSetBgCol(wxCommandEvent& event); void OnSetSelBgCol(wxCommandEvent& event); @@ -117,14 +131,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; } }; // ---------------------------------------------------------------------------- @@ -141,6 +155,7 @@ enum HtmlLbox_DrawSeparator, HtmlLbox_ToggleMulti, HtmlLbox_SelectAll, + HtmlLbox_UpdateItem, HtmlLbox_SetBgCol, HtmlLbox_SetSelBgCol, @@ -153,7 +168,7 @@ enum }; // ---------------------------------------------------------------------------- -// event tables and other macros for wxWindows +// event tables and other macros for wxWidgets // ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(MyFrame, wxFrame) @@ -163,6 +178,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(HtmlLbox_DrawSeparator, MyFrame::OnDrawSeparator) EVT_MENU(HtmlLbox_ToggleMulti, MyFrame::OnToggleMulti) EVT_MENU(HtmlLbox_SelectAll, MyFrame::OnSelectAll) + EVT_MENU(HtmlLbox_UpdateItem, MyFrame::OnUpdateItem) EVT_MENU(HtmlLbox_About, MyFrame::OnAbout) @@ -189,11 +205,11 @@ 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 - SetIcon(wxICON(mondrian)); + SetIcon(wxIcon(sample_xpm)); #if wxUSE_MENUS // create a menu bar @@ -214,6 +230,7 @@ MyFrame::MyFrame() _T("Toggle multiple selection on/off")); menuHLbox->AppendSeparator(); menuHLbox->Append(HtmlLbox_SelectAll, _T("Select &all items\tCtrl-A")); + menuHLbox->Append(HtmlLbox_UpdateItem, _T("Update &first item\tCtrl-U")); menuHLbox->AppendSeparator(); menuHLbox->Append(HtmlLbox_SetBgCol, _T("Set &background...\tCtrl-B")); menuHLbox->Append(HtmlLbox_SetSelBgCol, @@ -240,12 +257,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)); @@ -269,15 +286,15 @@ 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); @@ -324,6 +341,11 @@ void MyFrame::OnUpdateUISelectAll(wxUpdateUIEvent& event) event.Enable( m_hlbox && m_hlbox->HasMultipleSelection() ); } +void MyFrame::OnUpdateItem(wxCommandEvent& WXUNUSED(event)) +{ + m_hlbox->UpdateFirstItem(); +} + void MyFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event)) { wxColour col = wxGetColourFromUser(this, m_hlbox->GetBackgroundColour()); @@ -332,7 +354,9 @@ void MyFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event)) m_hlbox->SetBackgroundColour(col); m_hlbox->Refresh(); +#if wxUSE_STATUSBAR SetStatusText(_T("Background colour changed.")); +#endif // wxUSE_STATUSBAR } } @@ -344,7 +368,9 @@ void MyFrame::OnSetSelBgCol(wxCommandEvent& WXUNUSED(event)) m_hlbox->SetSelectionBackground(col); m_hlbox->Refresh(); +#if wxUSE_STATUSBAR SetStatusText(_T("Selection background colour changed.")); +#endif // wxUSE_STATUSBAR } } @@ -384,10 +410,12 @@ 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 } // ============================================================================ @@ -395,17 +423,20 @@ void MyFrame::OnLboxSelect(wxCommandEvent& event) // ============================================================================ MyHtmlListBox::MyHtmlListBox(wxWindow *parent, bool multi) - : wxHtmlListBox(parent, -1, wxDefaultPosition, wxDefaultSize, + : wxHtmlListBox(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, multi ? wxLB_MULTIPLE : 0) { m_change = true; + m_firstItemUpdated = false; + m_linkClicked = false; + SetMargins(5, 5); #ifdef USE_HTML_FILE - if ( !m_file.Open("results") ) + if ( !m_file.Open(_T("results")) ) { - wxLogError("Failed to open results file"); + wxLogError(_T("Failed to open results file")); } else { @@ -431,6 +462,11 @@ void MyHtmlListBox::OnDrawSeparator(wxDC& dc, wxRect& rect, size_t) const wxString MyHtmlListBox::OnGetItem(size_t n) const { + if ( !n && m_firstItemUpdated ) + { + return wxString::Format(_T("

Just updated

")); + } + #ifdef USE_HTML_FILE wxString s; if ( m_file.IsOpened() ) @@ -439,14 +475,23 @@ wxString MyHtmlListBox::OnGetItem(size_t n) const 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); + wxString label = wxString::Format(_T("") + _T("Item %lu") + _T(""), + level, + abs((int)n - 192) % 256, + abs((int)n - 256) % 256, + abs((int)n - 128) % 256, + (unsigned long)n, level); + if ( n == 1 ) + { + if ( !m_linkClicked ) + label += _T("Click here..."); + else + label += _T("Clicked here..."); + } + + return label; #endif } @@ -455,3 +500,17 @@ wxColour MyHtmlListBox::GetSelectedTextColour(const wxColour& colFg) const return m_change ? wxHtmlListBox::GetSelectedTextColour(colFg) : colFg; } +void MyHtmlListBox::UpdateFirstItem() +{ + m_firstItemUpdated = !m_firstItemUpdated; + + RefreshLine(0); +} + +void MyHtmlListBox::OnLinkClicked(size_t WXUNUSED(n), + const wxHtmlLinkInfo& WXUNUSED(link)) +{ + m_linkClicked = true; + + RefreshLine(1); +}