X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a1c3cdc4a2c4cc2b15d7fdf60c1be228f9fbc520..0a6b9955dbf2e23bef4aeccfba2a3cfa25dca975:/samples/htlbox/htlbox.cpp diff --git a/samples/htlbox/htlbox.cpp b/samples/htlbox/htlbox.cpp index 4e445bdeb1..41817204c7 100644 --- a/samples/htlbox/htlbox.cpp +++ b/samples/htlbox/htlbox.cpp @@ -95,7 +95,7 @@ public: wxTextFile m_file; #endif - DECLARE_NO_COPY_CLASS(MyHtmlListBox) + wxDECLARE_NO_COPY_CLASS(MyHtmlListBox); DECLARE_DYNAMIC_CLASS(MyHtmlListBox) }; @@ -116,11 +116,13 @@ public: void OnToggleMulti(wxCommandEvent& event); void OnSelectAll(wxCommandEvent& event); void OnUpdateItem(wxCommandEvent& event); + void OnGetItemRect(wxCommandEvent& event); void OnSetBgCol(wxCommandEvent& event); void OnSetSelBgCol(wxCommandEvent& event); void OnSetSelFgCol(wxCommandEvent& event); + void OnClear(wxCommandEvent& event); void OnUpdateUISelectAll(wxUpdateUIEvent& event); @@ -129,12 +131,12 @@ public: { wxLogMessage(_T("Listbox item %d double clicked."), event.GetInt()); } - + void OnHtmlLinkClicked(wxHtmlLinkEvent& event); void OnHtmlCellHover(wxHtmlCellEvent &event); void OnHtmlCellClicked(wxHtmlCellEvent &event); - wxSimpleHtmlListBox *GetSimpleBox() + wxSimpleHtmlListBox *GetSimpleBox() { return wxDynamicCast(m_hlbox, wxSimpleHtmlListBox); } MyHtmlListBox *GetMyBox() { return wxDynamicCast(m_hlbox, MyHtmlListBox); } @@ -171,11 +173,14 @@ enum HtmlLbox_ToggleMulti, HtmlLbox_SelectAll, HtmlLbox_UpdateItem, + HtmlLbox_GetItemRect, HtmlLbox_SetBgCol, HtmlLbox_SetSelBgCol, HtmlLbox_SetSelFgCol, + HtmlLbox_Clear, + // 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) @@ -196,6 +201,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(HtmlLbox_ToggleMulti, MyFrame::OnToggleMulti) EVT_MENU(HtmlLbox_SelectAll, MyFrame::OnSelectAll) EVT_MENU(HtmlLbox_UpdateItem, MyFrame::OnUpdateItem) + EVT_MENU(HtmlLbox_GetItemRect, MyFrame::OnGetItemRect) EVT_MENU(HtmlLbox_About, MyFrame::OnAbout) @@ -203,6 +209,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(HtmlLbox_SetSelBgCol, MyFrame::OnSetSelBgCol) EVT_MENU(HtmlLbox_SetSelFgCol, MyFrame::OnSetSelFgCol) + EVT_MENU(HtmlLbox_Clear, MyFrame::OnClear) + EVT_UPDATE_UI(HtmlLbox_SelectAll, MyFrame::OnUpdateUISelectAll) @@ -238,9 +246,9 @@ MyFrame::MyFrame() #if wxUSE_MENUS // create a menu bar wxMenu *menuFile = new wxMenu; - menuFile->AppendRadioItem(HtmlLbox_CustomBox, _T("Use custom box"), + menuFile->AppendRadioItem(HtmlLbox_CustomBox, _T("Use custom box"), _T("Use a wxHtmlListBox virtual class control")); - menuFile->AppendRadioItem(HtmlLbox_SimpleBox, _T("Use simple box"), + menuFile->AppendRadioItem(HtmlLbox_SimpleBox, _T("Use simple box"), _T("Use a wxSimpleHtmlListBox control")); menuFile->AppendSeparator(); menuFile->Append(HtmlLbox_Quit, _T("E&xit\tAlt-X"), _T("Quit this program")); @@ -260,6 +268,7 @@ MyFrame::MyFrame() menuHLbox->AppendSeparator(); menuHLbox->Append(HtmlLbox_SelectAll, _T("Select &all items\tCtrl-A")); menuHLbox->Append(HtmlLbox_UpdateItem, _T("Update &first item\tCtrl-U")); + menuHLbox->Append(HtmlLbox_GetItemRect, _T("Show &rectangle of item #10\tCtrl-R")); menuHLbox->AppendSeparator(); menuHLbox->Append(HtmlLbox_SetBgCol, _T("Set &background...\tCtrl-B")); menuHLbox->Append(HtmlLbox_SetSelBgCol, @@ -267,6 +276,9 @@ MyFrame::MyFrame() menuHLbox->AppendCheckItem(HtmlLbox_SetSelFgCol, _T("Keep &foreground in selection\tCtrl-F")); + menuHLbox->AppendSeparator(); + menuHLbox->Append(HtmlLbox_Clear, _T("&Clear\tCtrl-L")); + // the "About" item should be in the help menu wxMenu *helpMenu = new wxMenu; helpMenu->Append(HtmlLbox_About, _T("&About...\tF1"), _T("Show about dialog")); @@ -288,7 +300,7 @@ MyFrame::MyFrame() CreateStatusBar(2); SetStatusText(_T("Welcome to wxWidgets!")); #endif // wxUSE_STATUSBAR - + // create the child controls CreateBox(); wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, _T(""), @@ -321,7 +333,7 @@ void MyFrame::CreateBox() { m_hlbox = new wxSimpleHtmlListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, multi ? wxLB_MULTIPLE : 0); - + // unlike wxHtmlListBox which is abstract, wxSimpleHtmlListBox is a // concrete control and doesn't support virtual mode, this we need // to add all of its items from the beginning @@ -354,12 +366,12 @@ void MyFrame::CreateBox() void MyFrame::OnSimpleOrCustomBox(wxCommandEvent& WXUNUSED(event)) { wxWindow *old = m_hlbox; - + // we need to recreate the listbox CreateBox(); GetSizer()->Replace(old, m_hlbox); delete old; - + GetSizer()->Layout(); Refresh(); } @@ -401,7 +413,7 @@ void MyFrame::OnSetMargins(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnToggleMulti(wxCommandEvent& WXUNUSED(event)) { wxWindow *old = m_hlbox; - + // we need to recreate the listbox CreateBox(); GetSizer()->Replace(old, m_hlbox); @@ -426,6 +438,14 @@ void MyFrame::OnUpdateItem(wxCommandEvent& WXUNUSED(event)) GetMyBox()->UpdateFirstItem(); } +void MyFrame::OnGetItemRect(wxCommandEvent& WXUNUSED(event)) +{ + static const int ITEM = 10; + const wxRect r = m_hlbox->GetItemRect(ITEM); + wxLogMessage("Rect of item %d: (%d, %d)-(%d, %d)", + ITEM, r.x, r.y, r.x + r.width, r.y + r.height); +} + void MyFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event)) { wxColour col = wxGetColourFromUser(this, m_hlbox->GetBackgroundColour()); @@ -463,6 +483,11 @@ void MyFrame::OnSetSelFgCol(wxCommandEvent& event) } } +void MyFrame::OnClear(wxCommandEvent& WXUNUSED(event)) +{ + m_hlbox->Clear(); +} + void MyFrame::OnHtmlLinkClicked(wxHtmlLinkEvent &event) { wxLogMessage(wxT("The url '%s' has been clicked!"), event.GetLinkInfo().GetHref().c_str()); @@ -470,7 +495,7 @@ void MyFrame::OnHtmlLinkClicked(wxHtmlLinkEvent &event) if (GetMyBox()) { GetMyBox()->m_linkClicked = true; - GetMyBox()->RefreshLine(1); + GetMyBox()->RefreshRow(1); } } @@ -575,7 +600,7 @@ wxString MyHtmlListBox::OnGetItem(size_t n) const { if ( !n && m_firstItemUpdated ) { - return wxString::Format(_T("