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;
+public:
+
// 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
void OnSetSelBgCol(wxCommandEvent& event);
void OnSetSelFgCol(wxCommandEvent& event);
+ void OnClear(wxCommandEvent& event);
void OnUpdateUISelectAll(wxUpdateUIEvent& event);
{
wxLogMessage(_T("Listbox item %d double clicked."), event.GetInt());
}
-
- wxSimpleHtmlListBox *GetSimpleBox()
+
+ void OnHtmlLinkClicked(wxHtmlLinkEvent& event);
+ void OnHtmlCellHover(wxHtmlCellEvent &event);
+ void OnHtmlCellClicked(wxHtmlCellEvent &event);
+
+ wxSimpleHtmlListBox *GetSimpleBox()
{ return wxDynamicCast(m_hlbox, wxSimpleHtmlListBox); }
MyHtmlListBox *GetMyBox()
{ return wxDynamicCast(m_hlbox, MyHtmlListBox); }
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)
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)
EVT_LISTBOX(wxID_ANY, MyFrame::OnLboxSelect)
EVT_LISTBOX_DCLICK(wxID_ANY, MyFrame::OnLboxDClick)
+
+
+ // the HTML listbox's events
+ EVT_HTML_LINK_CLICKED(wxID_ANY, MyFrame::OnHtmlLinkClicked)
+ EVT_HTML_CELL_HOVER(wxID_ANY, MyFrame::OnHtmlCellHover)
+ EVT_HTML_CELL_CLICKED(wxID_ANY, MyFrame::OnHtmlCellClicked)
+
END_EVENT_TABLE()
IMPLEMENT_APP(MyApp)
#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"));
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"));
CreateStatusBar(2);
SetStatusText(_T("Welcome to wxWidgets!"));
#endif // wxUSE_STATUSBAR
-
+
// create the child controls
CreateBox();
wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, _T(""),
{
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
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();
}
void MyFrame::OnToggleMulti(wxCommandEvent& WXUNUSED(event))
{
wxWindow *old = m_hlbox;
-
+
// we need to recreate the listbox
CreateBox();
GetSizer()->Replace(old, m_hlbox);
}
}
+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());
+
+ if (GetMyBox())
+ {
+ GetMyBox()->m_linkClicked = true;
+ GetMyBox()->RefreshRow(1);
+ }
+}
+
+void MyFrame::OnHtmlCellHover(wxHtmlCellEvent &event)
+{
+ wxLogMessage(wxT("Mouse moved over cell %p at %d;%d"),
+ event.GetCell(), event.GetPoint().x, event.GetPoint().y);
+}
+
+void MyFrame::OnHtmlCellClicked(wxHtmlCellEvent &event)
+{
+ wxLogMessage(wxT("Click over cell %p at %d;%d"),
+ event.GetCell(), event.GetPoint().x, event.GetPoint().y);
+
+ // if we don't skip the event, OnHtmlLinkClicked won't be called!
+ event.Skip();
+}
+
// ----------------------------------------------------------------------------
// listbox event handlers
// ----------------------------------------------------------------------------
{
if ( !n && m_firstItemUpdated )
{
- return wxString::Format(_T("<h1><b>Just updated</b></h1>"));
+ return _T("<h1><b>Just updated</b></h1>");
}
#ifdef USE_HTML_FILE
{
m_firstItemUpdated = !m_firstItemUpdated;
- RefreshLine(0);
+ RefreshRow(0);
}
-
-void MyHtmlListBox::OnLinkClicked(size_t WXUNUSED(n),
- const wxHtmlLinkInfo& WXUNUSED(link))
-{
- m_linkClicked = true;
-
- RefreshLine(1);
-}
-