1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxHtmlWindow class for parsing & displaying HTML 
   4 // Author:      Vaclav Slavik 
   6 // Copyright:   (c) 1999 Vaclav Slavik 
   7 // Licence:     wxWindows Licence 
   8 ///////////////////////////////////////////////////////////////////////////// 
  11 #ifndef _WX_HTMLWIN_H_ 
  12 #define _WX_HTMLWIN_H_ 
  21 #include "wx/window.h" 
  22 #include "wx/scrolwin.h" 
  23 #include "wx/config.h" 
  24 #include "wx/treectrl.h" 
  25 #include "wx/html/winpars.h" 
  26 #include "wx/html/htmlcell.h" 
  27 #include "wx/filesys.h" 
  28 #include "wx/html/htmlfilt.h" 
  31 //-------------------------------------------------------------------------------- 
  33 //                  (This is probably the only class you will directly use.) 
  34 //                  Purpose of this class is to display HTML page (either local 
  35 //                  file or downloaded via HTTP protocol) in a window. Width 
  36 //                  of window is constant - given in constructor - virtual height 
  37 //                  is changed dynamicly depending on page size. 
  38 //                  Once the window is created you can set it's content by calling 
  39 //                  SetPage(text) or LoadPage(filename). 
  40 //-------------------------------------------------------------------------------- 
  43 // item of history list 
  44 class WXDLLEXPORT HtmlHistoryItem 
: public wxObject
 
  47         HtmlHistoryItem(const wxString
& p
, const wxString
& a
) {m_Page 
= p
, m_Anchor 
= a
, m_Pos 
= 0;} 
  48         int GetPos() const {return m_Pos
;} 
  49         void SetPos(int p
) {m_Pos 
= p
;} 
  50         const wxString
& GetPage() const {return m_Page
;} 
  51         const wxString
& GetAnchor() const {return m_Anchor
;} 
  60 WX_DECLARE_EXPORTED_OBJARRAY(HtmlHistoryItem
, HtmlHistoryArray
); 
  64 class WXDLLEXPORT wxHtmlWindow 
: public wxScrolledWindow
 
  66     DECLARE_DYNAMIC_CLASS(wxHtmlWindow
) 
  69         wxHtmlWindow() : wxScrolledWindow() {}; 
  70         wxHtmlWindow(wxWindow 
*parent
, wxWindowID id 
= -1, 
  71                      const wxPoint
& pos 
= wxDefaultPosition
, const wxSize
& size 
= wxDefaultSize
, 
  72                      long style 
= wxHW_SCROLLBAR_AUTO
, 
  73                      const wxString
& name 
= "htmlWindow"); 
  76         bool SetPage(const wxString
& source
); 
  77                 // Set HTML page and display it. !! source is HTML document itself, 
  78                 // it is NOT address/filename of HTML document. If you want to 
  79                 // specify document location, use LoadPage() istead 
  80                 // Return value : FALSE if an error occured, TRUE otherwise 
  82         bool LoadPage(const wxString
& location
); 
  83                 // Load HTML page from given location. Location can be either 
  84                 // a) /usr/wxGTK2/docs/html/wx.htm 
  85                 // b) http://www.somewhere.uk/document.htm 
  86                 // c) ftp://ftp.somesite.cz/pub/something.htm 
  87                 // In case there is no prefix (http:,ftp:), the method 
  88                 // will try to find it itself (1. local file, then http or ftp) 
  89                 // After the page is loaded, the method calls SetPage() to display it. 
  90                 // Note : you can also use path relative to previously loaded page 
  91                 // Return value : same as SetPage 
  93         wxString 
GetOpenedPage() const {return m_OpenedPage
;} 
  94                 // Returns full location of opened page 
  95         wxString 
GetOpenedAnchor() const {return m_OpenedAnchor
;} 
  96                 // Returns anchor within opened page 
  97         wxString 
GetOpenedPageTitle() const {return m_OpenedPageTitle
;} 
  98                 // Returns <TITLE> of opened page or empty string otherwise 
 100         void SetRelatedFrame(wxFrame
* frame
, const wxString
& format
); 
 101                 // sets frame in which page title will  be displayed. Format is format of 
 102                 // frame title, e.g. "HtmlHelp : %s". It must contain exactly one %s 
 103         wxFrame
* GetRelatedFrame() const {return m_RelatedFrame
;} 
 105         void SetRelatedStatusBar(int bar
); 
 106                 // after(!) calling SetRelatedFrame, this sets statusbar slot where messages 
 107                 // will be displayed. Default is -1 = no messages. 
 109         void SetFonts(wxString normal_face
, wxString fixed_face
, const int *sizes
); 
 110                 // sets fonts to be used when displaying HTML page. 
 112         virtual void OnSetTitle(const wxString
& title
); 
 113                 // Sets the title of the window 
 114                 // (depending on the information passed to SetRelatedFrame() method) 
 116         void SetBorders(int b
) {m_Borders 
= b
;} 
 117                 // Sets space between text and window borders. 
 119         virtual void ReadCustomization(wxConfigBase 
*cfg
, wxString path 
= wxEmptyString
); 
 120                 // saves custom settings into cfg config. it will use the path 'path' 
 121                 // if given, otherwise it will save info into currently selected path. 
 122                 // saved values : things set by SetFonts, SetBorders. 
 123         virtual void WriteCustomization(wxConfigBase 
*cfg
, wxString path 
= wxEmptyString
); 
 127         bool HistoryForward(); 
 128                 // Goes to previous/next page (in browsing history) 
 129                 // Returns TRUE if successful, FALSE otherwise 
 133         wxHtmlContainerCell
* GetInternalRepresentation() const {return m_Cell
;} 
 134                 // Returns pointer to conteiners/cells structure. 
 135                 // It should be used ONLY when printing 
 137         static void AddFilter(wxHtmlFilter 
*filter
); 
 140         virtual void OnLinkClicked(const wxHtmlLinkInfo
& link
); 
 141                 // called when users clicked on hypertext link. Default behavior is to 
 142                 // call LoadPage(loc) 
 144         static void CleanUpStatics(); 
 145                 // cleans static variables 
 147         wxHtmlWinParser 
*GetParser() const { return m_Parser
; } 
 148                 // return a pointer to the parser. 
 151         bool ScrollToAnchor(const wxString
& anchor
); 
 152                 // Scrolls to anchor of this name. (Anchor is #news 
 153                 // or #features etc. it is part of address sometimes: 
 154                 // http://www.ms.mff.cuni.cz/~vsla8348/wxhtml/index.html#news) 
 155                 // Return value : TRUE if anchor exists, FALSE otherwise 
 158                 // prepare layout (= fill m_PosX, m_PosY for fragments) based on actual size of 
 159                 // window. This method also setup scrollbars 
 161         void OnDraw(wxDC
& dc
); 
 162         void OnSize(wxSizeEvent
& event
); 
 163         void OnMouseEvent(wxMouseEvent
& event
); 
 164         void OnIdle(wxIdleEvent
& event
); 
 166         virtual wxHtmlFilter 
*GetDefaultFilter() {return new wxHtmlFilterPlainText
;} 
 167                 // returns new filter (will be stored into m_DefaultFilter variable) 
 171         wxHtmlContainerCell 
*m_Cell
; 
 172                 // This is pointer to the first cell in parsed data. 
 173                 // (Note: the first cell is usually top one = all other cells are sub-cells of this one) 
 174         wxHtmlWinParser 
*m_Parser
; 
 175                 // parser which is used to parse HTML input. 
 176                 // Each wxHtmlWindow has it's own parser because sharing one global 
 177                 // parser would be problematic (because of reentrancy) 
 178         wxString m_OpenedPage
; 
 179                 // contains name of actualy opened page or empty string if no page opened 
 180         wxString m_OpenedAnchor
; 
 181                 // contains name of current anchor within m_OpenedPage 
 182         wxString m_OpenedPageTitle
; 
 183                 // contains title of actualy opened page or empty string if no <TITLE> tag 
 185                 // class for opening files (file system) 
 187         wxFrame 
*m_RelatedFrame
; 
 188         wxString m_TitleFormat
; 
 189         int m_RelatedStatusBar
; 
 190                 // frame in which page title should be displayed & number of it's statusbar 
 191                 // reserved for usage with this html window 
 194                 // borders (free space between text and window borders) 
 195                 // defaults to 10 pixels. 
 200         bool m_tmpMouseMoved
; 
 201                 // a flag indicated if mouse moved 
 202                 // (if TRUE we will try to change cursor in last call to OnIdle) 
 203         wxHtmlLinkInfo 
*m_tmpLastLink
; 
 204                 // contains last link name 
 205         int m_tmpCanDrawLocks
; 
 206                 // if >0 contents of the window is not redrawn 
 207                 // (in order to avoid ugly bliking) 
 209         static wxList m_Filters
; 
 210                 // list of HTML filters 
 211         static wxHtmlFilter 
*m_DefaultFilter
; 
 212                 // this filter is used when no filter is able to read some file 
 214         HtmlHistoryArray m_History
; 
 218                 // if this FLAG is false, items are not added to history 
 221     DECLARE_EVENT_TABLE() 
 227 #endif // _WX_HTMLWIN_H_