From: Václav Slavík Date: Fri, 14 Apr 2006 11:38:36 +0000 (+0000) Subject: don't show the I-beam cursor over text in wxHtmlListBox X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/88a1b6485f3f2d300012cde053c572f21f1f8bd3?ds=inline don't show the I-beam cursor over text in wxHtmlListBox git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38706 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index 66c9f5f19c..eec38d12d6 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -18,6 +18,10 @@ INCOMPATIBLE CHANGES SINCE 2.6.x wxHtmlCell::ProcessMouseClick(); old code overriding OnMouseClick() will continue to work with WXWIN_COMPATIBILITY_2_6, but should be rewritten to use ProcessMouseClick(). +- wxHtmlCell::GetCursor() was deprecated and replaced with + wxHtmlCell::GetMouseCursor(); old code overriding GetCursor() will + continue to work with WXWIN_COMPATIBILITY_2_6, but should be rewritten to + use GetMouseCursor(). Deprecated methods since 2.6.x and their replacements diff --git a/docs/latex/wx/htcell.tex b/docs/latex/wx/htcell.tex index a627e84ec0..602480ea64 100644 --- a/docs/latex/wx/htcell.tex +++ b/docs/latex/wx/htcell.tex @@ -171,6 +171,16 @@ See \helpref{wxHtmlLinkInfo}{wxhtmllinkinfo}. These coordinates are used e.g. by COLORMAP. Values are relative to the upper left corner of THIS cell (i.e. from 0 to m\_Width or m\_Height)} +\membersection{wxHtmlCell::GetMouseCursor}\label{wxhtmlcellgetmousecursor} + +\func{virtual wxCursor}{GetMouseCursor}{\param{wxHtmlWindowInterface* }{window}} + +Returns cursor to show when mouse pointer is over the cell. + +\wxheading{Parameters} + +\docparam{window}{interface to the parent HTML window} + \membersection{wxHtmlCell::GetNext}\label{wxhtmlcellgetnext} \constfunc{wxHtmlCell*}{GetNext}{\void} diff --git a/include/wx/html/htmlcell.h b/include/wx/html/htmlcell.h index 0b32fe4fb2..f5610c6e3d 100644 --- a/include/wx/html/htmlcell.h +++ b/include/wx/html/htmlcell.h @@ -202,7 +202,12 @@ public: { return m_Link; } // Returns cursor to be used when mouse is over the cell: + virtual wxCursor GetMouseCursor(wxHtmlWindowInterface *window) const; + +#if WXWIN_COMPATIBILITY_2_6 + // this was replaced by GetMouseCursor, don't use in new code! virtual wxCursor GetCursor() const; +#endif // return next cell among parent's cells wxHtmlCell *GetNext() const {return m_Next;} @@ -370,7 +375,7 @@ public: wxHtmlWordCell(const wxString& word, const wxDC& dc); void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2, wxHtmlRenderingInfo& info); - wxCursor GetCursor() const; + virtual wxCursor GetMouseCursor(wxHtmlWindowInterface *window) const; wxString ConvertToText(wxHtmlSelection *sel) const; bool IsLinebreakAllowed() const { return m_allowLinebreak; } diff --git a/include/wx/html/htmlwin.h b/include/wx/html/htmlwin.h index ea22e30601..1a250ff737 100644 --- a/include/wx/html/htmlwin.h +++ b/include/wx/html/htmlwin.h @@ -109,6 +109,22 @@ public: /// Sets status bar text. virtual void SetHTMLStatusText(const wxString& text) = 0; + + /// Type of mouse cursor + enum HTMLCursor + { + /// Standard mouse cursor (typically an arrow) + HTMLCursor_Default, + /// Cursor shown over links + HTMLCursor_Link, + /// Cursor shown over selectable text + HTMLCursor_Text + }; + + /** + Returns mouse cursor of given @a type. + */ + virtual wxCursor GetHTMLCursor(HTMLCursor type) const = 0; }; /** @@ -357,6 +373,8 @@ public: virtual void OnInternalIdle(); + /// Returns standard HTML cursor as used by wxHtmlWindow + static wxCursor GetDefaultHTMLCursor(HTMLCursor type); protected: void Init(); @@ -427,6 +445,7 @@ private: virtual void SetHTMLBackgroundColour(const wxColour& clr); virtual void SetHTMLBackgroundImage(const wxBitmap& bmpBg); virtual void SetHTMLStatusText(const wxString& text); + virtual wxCursor GetHTMLCursor(HTMLCursor type) const; // implementation of SetPage() bool DoSetPage(const wxString& source); @@ -512,6 +531,10 @@ private: // is supposed to have been done in OnEraseBackground()) bool m_eraseBgInOnPaint; + // standard mouse cursors + static wxCursor *ms_cursorLink; + static wxCursor *ms_cursorText; + DECLARE_EVENT_TABLE() DECLARE_NO_COPY_CLASS(wxHtmlWindow) }; diff --git a/include/wx/htmllbox.h b/include/wx/htmllbox.h index 6c37476ace..67fb764283 100644 --- a/include/wx/htmllbox.h +++ b/include/wx/htmllbox.h @@ -139,6 +139,7 @@ private: virtual void SetHTMLBackgroundColour(const wxColour& clr); virtual void SetHTMLBackgroundImage(const wxBitmap& bmpBg); virtual void SetHTMLStatusText(const wxString& text); + virtual wxCursor GetHTMLCursor(HTMLCursor type) const; // returns index of item that contains given HTML cell size_t GetItemForCell(const wxHtmlCell *cell) const; diff --git a/src/generic/htmllbox.cpp b/src/generic/htmllbox.cpp index c70d7b85f4..e0b3fd08f1 100644 --- a/src/generic/htmllbox.cpp +++ b/src/generic/htmllbox.cpp @@ -438,6 +438,16 @@ void wxHtmlListBox::SetHTMLStatusText(const wxString& WXUNUSED(text)) // nothing to do } +wxCursor wxHtmlListBox::GetHTMLCursor(HTMLCursor type) const +{ + // we don't want to show text selection cursor in listboxes + if (type == HTMLCursor_Text) + return wxHtmlWindow::GetDefaultHTMLCursor(HTMLCursor_Default); + + // in all other cases, use the same cursor as wxHtmlWindow: + return wxHtmlWindow::GetDefaultHTMLCursor(type); +} + // ---------------------------------------------------------------------------- // wxHtmlListBox handling of HTML links // ---------------------------------------------------------------------------- diff --git a/src/html/htmlcell.cpp b/src/html/htmlcell.cpp index 1b111b9aca..d56483bf6e 100644 --- a/src/html/htmlcell.cpp +++ b/src/html/htmlcell.cpp @@ -31,14 +31,6 @@ #include -//----------------------------------------------------------------------------- -// Global variables -//----------------------------------------------------------------------------- - -static wxCursor *gs_cursorLink = NULL; -static wxCursor *gs_cursorText = NULL; - - //----------------------------------------------------------------------------- // Helper classes //----------------------------------------------------------------------------- @@ -198,17 +190,34 @@ void wxHtmlCell::OnMouseClick(wxWindow *, int, int, const wxMouseEvent& event) #endif // WXWIN_COMPATIBILITY_2_6 } - +#if WXWIN_COMPATIBILITY_2_6 wxCursor wxHtmlCell::GetCursor() const { + return wxNullCursor; +} +#endif // WXWIN_COMPATIBILITY_2_6 + +wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const +{ +#if WXWIN_COMPATIBILITY_2_6 + // NB: Older versions of wx used GetCursor() virtual method in place of + // GetMouseCursor(interface). This code ensures that user code that + // overriden GetCursor() continues to work. The trick is that the base + // wxHtmlCell::GetCursor() method simply returns wxNullCursor, so we + // know that GetCursor() was overriden iff it returns valid cursor. + wxCursor cur = GetCursor(); + if (cur.Ok()) + return cur; +#endif // WXWIN_COMPATIBILITY_2_6 + if ( GetLink() ) { - if ( !gs_cursorLink ) - gs_cursorLink = new wxCursor(wxCURSOR_HAND); - return *gs_cursorLink; + return window->GetHTMLCursor(wxHtmlWindowInterface::HTMLCursor_Link); } else - return *wxSTANDARD_CURSOR; + { + return window->GetHTMLCursor(wxHtmlWindowInterface::HTMLCursor_Default); + } } @@ -607,16 +616,16 @@ wxString wxHtmlWordCell::ConvertToText(wxHtmlSelection *s) const return m_Word; } -wxCursor wxHtmlWordCell::GetCursor() const +wxCursor wxHtmlWordCell::GetMouseCursor(wxHtmlWindowInterface *window) const { if ( !GetLink() ) { - if ( !gs_cursorText ) - gs_cursorText = new wxCursor(wxCURSOR_IBEAM); - return *gs_cursorText; + return window->GetHTMLCursor(wxHtmlWindowInterface::HTMLCursor_Text); } else - return wxHtmlCell::GetCursor(); + { + return wxHtmlCell::GetMouseCursor(window); + } } @@ -1558,29 +1567,4 @@ const wxHtmlCell* wxHtmlTerminalCellsInterator::operator++() return m_pos; } - - - - - - -//----------------------------------------------------------------------------- -// Cleanup -//----------------------------------------------------------------------------- - -class wxHtmlCellModule: public wxModule -{ -DECLARE_DYNAMIC_CLASS(wxHtmlCellModule) -public: - wxHtmlCellModule() : wxModule() {} - bool OnInit() { return true; } - void OnExit() - { - wxDELETE(gs_cursorLink); - wxDELETE(gs_cursorText); - } -}; - -IMPLEMENT_DYNAMIC_CLASS(wxHtmlCellModule, wxModule) - #endif diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index 741e10fb62..aad2aa3e57 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -194,9 +194,11 @@ void wxHtmlWindowMouseHelper::HandleIdle(wxHtmlCell *rootCell, wxCursor cur; if (cell) - cur = cell->GetCursor(); + cur = cell->GetMouseCursor(m_interface); else - cur = *wxSTANDARD_CURSOR; + cur = m_interface->GetHTMLCursor( + wxHtmlWindowInterface::HTMLCursor_Default); + m_interface->GetHTMLWindow()->SetCursor(cur); if (lnk != m_tmpLastLink) @@ -242,6 +244,22 @@ void wxHtmlWindowMouseHelper::OnCellMouseHover(wxHtmlCell * WXUNUSED(cell), // wxHtmlWindow //----------------------------------------------------------------------------- +wxList wxHtmlWindow::m_Filters; +wxHtmlFilter *wxHtmlWindow::m_DefaultFilter = NULL; +wxHtmlProcessorList *wxHtmlWindow::m_GlobalProcessors = NULL; +wxCursor *wxHtmlWindow::ms_cursorLink = NULL; +wxCursor *wxHtmlWindow::ms_cursorText = NULL; + +void wxHtmlWindow::CleanUpStatics() +{ + wxDELETE(m_DefaultFilter); + WX_CLEAR_LIST(wxList, m_Filters); + if (m_GlobalProcessors) + WX_CLEAR_LIST(wxHtmlProcessorList, *m_GlobalProcessors); + wxDELETE(m_GlobalProcessors); + wxDELETE(ms_cursorLink); + wxDELETE(ms_cursorText); +} void wxHtmlWindow::Init() { @@ -816,21 +834,6 @@ void wxHtmlWindow::AddProcessor(wxHtmlProcessor *processor) -wxList wxHtmlWindow::m_Filters; -wxHtmlFilter *wxHtmlWindow::m_DefaultFilter = NULL; -wxHtmlProcessorList *wxHtmlWindow::m_GlobalProcessors = NULL; - -void wxHtmlWindow::CleanUpStatics() -{ - wxDELETE(m_DefaultFilter); - WX_CLEAR_LIST(wxList, m_Filters); - if (m_GlobalProcessors) - WX_CLEAR_LIST(wxHtmlProcessorList, *m_GlobalProcessors); - wxDELETE(m_GlobalProcessors); -} - - - void wxHtmlWindow::AddFilter(wxHtmlFilter *filter) { m_Filters.Append(filter); @@ -1557,6 +1560,32 @@ void wxHtmlWindow::SetHTMLStatusText(const wxString& text) #endif // wxUSE_STATUSBAR } +/*static*/ +wxCursor wxHtmlWindow::GetDefaultHTMLCursor(HTMLCursor type) +{ + switch (type) + { + case HTMLCursor_Link: + if ( !ms_cursorLink ) + ms_cursorLink = new wxCursor(wxCURSOR_HAND); + return *ms_cursorLink; + + case HTMLCursor_Text: + if ( !ms_cursorText ) + ms_cursorText = new wxCursor(wxCURSOR_IBEAM); + return *ms_cursorText; + + case HTMLCursor_Default: + default: + return *wxSTANDARD_CURSOR; + } +} + +wxCursor wxHtmlWindow::GetHTMLCursor(HTMLCursor type) const +{ + return GetDefaultHTMLCursor(type); +} + //----------------------------------------------------------------------------- // wxHtmlWinModule