X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/04db5c3f8f9dbf65ca81198ca1a6bbcbaa7a4a03..be7a101366995b7b7bb76e3d5b1e7dd8fc9a1af8:/include/wx/html/htmlwin.h diff --git a/include/wx/html/htmlwin.h b/include/wx/html/htmlwin.h index 22466f4856..da2e97d200 100644 --- a/include/wx/html/htmlwin.h +++ b/include/wx/html/htmlwin.h @@ -11,7 +11,7 @@ #ifndef _WX_HTMLWIN_H_ #define _WX_HTMLWIN_H_ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "htmlwin.h" #endif @@ -26,22 +26,41 @@ #include "wx/html/htmlcell.h" #include "wx/filesys.h" #include "wx/html/htmlfilt.h" +#include "wx/filename.h" class wxHtmlProcessor; class wxHtmlWinModule; class wxHtmlHistoryArray; class wxHtmlProcessorList; +class WXDLLEXPORT wxHtmlWinAutoScrollTimer; -//-------------------------------------------------------------------------------- + +// wxHtmlWindow flags: +#define wxHW_SCROLLBAR_NEVER 0x0002 +#define wxHW_SCROLLBAR_AUTO 0x0004 +#define wxHW_NO_SELECTION 0x0008 + +#define wxHW_DEFAULT_STYLE wxHW_SCROLLBAR_AUTO + + +// enums for wxHtmlWindow::OnOpeningURL +enum wxHtmlOpeningStatus +{ + wxHTML_OPEN, + wxHTML_BLOCK, + wxHTML_REDIRECT +}; + +// ---------------------------------------------------------------------------- // wxHtmlWindow // (This is probably the only class you will directly use.) // Purpose of this class is to display HTML page (either local -// file or downloaded via HTTP protocol) in a window. Width -// of window is constant - given in constructor - virtual height -// is changed dynamicly depending on page size. -// Once the window is created you can set it's content by calling +// file or downloaded via HTTP protocol) in a window. Width of +// window is constant - given in constructor - virtual height +// is changed dynamicly depending on page size. Once the +// window is created you can set it's content by calling // SetPage(text) or LoadPage(filename). -//-------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- class WXDLLEXPORT wxHtmlWindow : public wxScrolledWindow { @@ -53,7 +72,7 @@ public: wxHtmlWindow(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxHW_SCROLLBAR_AUTO, + long style = wxHW_DEFAULT_STYLE, const wxString& name = wxT("htmlWindow")) { Init(); @@ -72,7 +91,7 @@ public: // specify document location, use LoadPage() istead // Return value : FALSE if an error occured, TRUE otherwise bool SetPage(const wxString& source); - + // Append to current page bool AppendToPage(const wxString& source); @@ -87,6 +106,9 @@ public: // Return value : same as SetPage virtual bool LoadPage(const wxString& location); + // Loads HTML page from file + bool LoadFile(const wxFileName& filename); + // Returns full location of opened page wxString GetOpenedPage() const {return m_OpenedPage;} // Returns anchor within opened page @@ -104,11 +126,8 @@ public: void SetRelatedStatusBar(int bar); // Sets fonts to be used when displaying HTML page. - void SetFonts(wxString normal_face, wxString fixed_face, const int *sizes); - - // Sets the title of the window - // (depending on the information passed to SetRelatedFrame() method) - virtual void OnSetTitle(const wxString& title); + void SetFonts(wxString normal_face, wxString fixed_face, + const int *sizes = NULL); // Sets space between text and window borders. void SetBorders(int b) {m_Borders = b;} @@ -136,8 +155,24 @@ public: // Adds input filter static void AddFilter(wxHtmlFilter *filter); + // Returns a pointer to the parser. + wxHtmlWinParser *GetParser() const { return m_Parser; } + + // Adds HTML processor to this instance of wxHtmlWindow: + void AddProcessor(wxHtmlProcessor *processor); + // Adds HTML processor to wxHtmlWindow class as whole: + static void AddGlobalProcessor(wxHtmlProcessor *processor); + + // what would we do with it? + virtual bool AcceptsFocusFromKeyboard() const { return FALSE; } + + // -- Callbacks -- + + // Sets the title of the window + // (depending on the information passed to SetRelatedFrame() method) + virtual void OnSetTitle(const wxString& title); + // Called when the mouse hovers over a cell: (x, y) are logical coords - // // Default behaviour is to do nothing at all virtual void OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y); @@ -150,22 +185,15 @@ public: // Called when user clicked on hypertext link. Default behavior is to // call LoadPage(loc) virtual void OnLinkClicked(const wxHtmlLinkInfo& link); - - // Called when wxHtmlWindow wants to fetch data from an URL (e.g. when loading - // a page or loading an image). The data are downloaded if and only if - // OnOpeningURL returns TRUE. - virtual bool OnOpeningURL(const wxString& url) const { return TRUE; } - - // Returns a pointer to the parser. - wxHtmlWinParser *GetParser() const { return m_Parser; } - - // Adds HTML processor to this instance of wxHtmlWindow: - void AddProcessor(wxHtmlProcessor *processor); - // Adds HTML processor to wxHtmlWindow class as whole: - static void AddGlobalProcessor(wxHtmlProcessor *processor); - // what would we do with it? - virtual bool AcceptsFocusFromKeyboard() const { return FALSE; } + // Called when wxHtmlWindow wants to fetch data from an URL (e.g. when + // loading a page or loading an image). The data are downloaded if and only if + // OnOpeningURL returns TRUE. If OnOpeningURL returns wxHTML_REDIRECT, + // it must set *redirect to the new URL + virtual wxHtmlOpeningStatus OnOpeningURL(wxHtmlURLType WXUNUSED(type), + const wxString& WXUNUSED(url), + wxString *WXUNUSED(redirect)) const + { return wxHTML_OPEN; } protected: void Init(); @@ -180,10 +208,20 @@ protected: // actual size of window. This method also setup scrollbars void CreateLayout(); - void OnDraw(wxDC& dc); + void OnEraseBackground(wxEraseEvent& event); + void OnPaint(wxPaintEvent& event); void OnSize(wxSizeEvent& event); - void OnMouseEvent(wxMouseEvent& event); + void OnMouseMove(wxMouseEvent& event); + void OnMouseDown(wxMouseEvent& event); + void OnMouseUp(wxMouseEvent& event); void OnIdle(wxIdleEvent& event); +#if wxUSE_CLIPBOARD + void OnKeyUp(wxKeyEvent& event); + void OnDoubleClick(wxMouseEvent& event); + void OnCopy(wxCommandEvent& event); + void OnMouseEnter(wxMouseEvent& event); + void OnMouseLeave(wxMouseEvent& event); +#endif // wxUSE_CLIPBOARD // Returns new filter (will be stored into m_DefaultFilter variable) virtual wxHtmlFilter *GetDefaultFilter() {return new wxHtmlFilterPlainText;} @@ -191,9 +229,34 @@ protected: // cleans static variables static void CleanUpStatics(); + // Returns true if text selection is enabled (wxClipboard must be available + // and wxHW_NO_SELECTION not used) + bool IsSelectionEnabled() const; + + enum ClipboardType + { + Primary, + Secondary + }; + + // Copies selection to clipboard if the clipboard support is available + void CopySelection(ClipboardType t = Secondary); + +#if wxUSE_CLIPBOARD + // Convert selection to text: + wxString SelectionToText(); + + // Helper functions to select parts of page: + void SelectWord(const wxPoint& pos); + void SelectLine(const wxPoint& pos); + + // Automatic scrolling during selection: + void StopAutoScrolling(); +#endif // wxUSE_CLIPBOARD + protected: - // This is pointer to the first cell in parsed data. - // (Note: the first cell is usually top one = all other cells are sub-cells of this one) + // This is pointer to the first cell in parsed data. (Note: the first cell + // is usually top one = all other cells are sub-cells of this one) wxHtmlContainerCell *m_Cell; // parser which is used to parse HTML input. // Each wxHtmlWindow has it's own parser because sharing one global @@ -220,7 +283,30 @@ protected: int m_Style; + // current text selection or NULL + wxHtmlSelection *m_selection; + + // true if the user is dragging mouse to select text + bool m_makingSelection; + +#if wxUSE_CLIPBOARD + // time of the last doubleclick event, used to detect tripleclicks + // (tripleclicks are used to select whole line): + wxLongLong m_lastDoubleClick; + + // helper class to automatically scroll the window if the user is selecting + // text and the mouse leaves wxHtmlWindow: + wxHtmlWinAutoScrollTimer *m_timerAutoScroll; +#endif // wxUSE_CLIPBOARD + private: + // window content for double buffered rendering: + wxBitmap *m_backBuffer; + + // variables used when user is selecting text + wxPoint m_tmpSelFromPos; + wxHtmlCell *m_tmpSelFromCell; + // a flag indicated if mouse moved // (if TRUE we will try to change cursor in last call to OnIdle) bool m_tmpMouseMoved; @@ -237,9 +323,6 @@ private: // this filter is used when no filter is able to read some file static wxHtmlFilter *m_DefaultFilter; - static wxCursor *s_cur_hand; - static wxCursor *s_cur_arrow; - wxHtmlHistoryArray *m_History; // browser history int m_HistoryPos; @@ -251,10 +334,11 @@ private: static wxHtmlProcessorList *m_GlobalProcessors; DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxHtmlWindow) }; -#endif +#endif // wxUSE_HTML #endif // _WX_HTMLWIN_H_