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
;} 
  59 #undef WXDLLEXPORTLOCAL 
  60 #define WXDLLEXPORTLOCAL WXDLLEXPORT 
  61      // ?? Don't know why - but Allen Van Sickel reported it to fix problems with DLL 
  63 WX_DECLARE_OBJARRAY(HtmlHistoryItem
, HtmlHistoryArray
); 
  65 #undef WXDLLEXPORTLOCAL 
  66 #define WXDLLEXPORTLOCAL 
  69 class WXDLLEXPORT wxHtmlWindow 
: public wxScrolledWindow
 
  71     DECLARE_DYNAMIC_CLASS(wxHtmlWindow
) 
  75                 // a flag indicated if mouse moved 
  76                 // (if TRUE we will try to change cursor in last call to OnIdle) 
  78                 // if FALSE contents of the window is not redrawn 
  79                 // (in order to avoid ugly bliking) 
  81         static wxList m_Filters
; 
  82                 // list of HTML filters 
  83         static wxHtmlFilter 
*m_DefaultFilter
; 
  84                 // this filter is used when no filter is able to read some file 
  86         HtmlHistoryArray m_History
; 
  90                 // if this FLAG is false, items are not added to history 
  93         wxHtmlWindow() : wxScrolledWindow() {}; 
  94         wxHtmlWindow(wxWindow 
*parent
, wxWindowID id 
= -1, 
  95                      const wxPoint
& pos 
= wxDefaultPosition
, const wxSize
& size 
= wxDefaultSize
, 
  96                      long style 
= wxHW_SCROLLBAR_AUTO
, 
  97                      const wxString
& name 
= "htmlWindow"); 
 100         bool SetPage(const wxString
& source
); 
 101                 // Set HTML page and display it. !! source is HTML document itself, 
 102                 // it is NOT address/filename of HTML document. If you want to 
 103                 // specify document location, use LoadPage() istead 
 104                 // Return value : FALSE if an error occured, TRUE otherwise 
 106         bool LoadPage(const wxString
& location
); 
 107                 // Load HTML page from given location. Location can be either 
 108                 // a) /usr/wxGTK2/docs/html/wx.htm 
 109                 // b) http://www.somewhere.uk/document.htm 
 110                 // c) ftp://ftp.somesite.cz/pub/something.htm 
 111                 // In case there is no prefix (http:,ftp:), the method 
 112                 // will try to find it itself (1. local file, then http or ftp) 
 113                 // After the page is loaded, the method calls SetPage() to display it. 
 114                 // Note : you can also use path relative to previously loaded page 
 115                 // Return value : same as SetPage 
 117         wxString 
GetOpenedPage() const {return m_OpenedPage
;} 
 118                 // Returns full location of opened page 
 120         void SetRelatedFrame(wxFrame
* frame
, const wxString
& format
); 
 121                 // sets frame in which page title will  be displayed. Format is format of 
 122                 // frame title, e.g. "HtmlHelp : %s". It must contain exactly one %s 
 123         wxFrame
* GetRelatedFrame() const {return m_RelatedFrame
;} 
 125         void SetRelatedStatusBar(int bar
); 
 126                 // after(!) calling SetRelatedFrame, this sets statusbar slot where messages 
 127                 // will be displayed. Default is -1 = no messages. 
 129         void SetFonts(wxString normal_face
, int normal_italic_mode
, wxString fixed_face
, int fixed_italic_mode
, int *sizes
); 
 130                 // sets fonts to be used when displaying HTML page. 
 131                 // *_italic_mode can be either wxSLANT or wxITALIC 
 133         void SetTitle(const wxString
& title
); 
 134                 // Sets the title of the window 
 135                 // (depending on the information passed to SetRelatedFrame() method) 
 137         void SetBorders(int b
) {m_Borders 
= b
;} 
 138                 // Sets space between text and window borders. 
 140         virtual void ReadCustomization(wxConfigBase 
*cfg
, wxString path 
= wxEmptyString
); 
 141                 // saves custom settings into cfg config. it will use the path 'path' 
 142                 // if given, otherwise it will save info into currently selected path. 
 143                 // saved values : things set by SetFonts, SetBorders. 
 144         virtual void WriteCustomization(wxConfigBase 
*cfg
, wxString path 
= wxEmptyString
); 
 148         bool HistoryForward(); 
 149                 // Goes to previous/next page (in browsing history) 
 150                 // Returns TRUE if successful, FALSE otherwise 
 154         wxHtmlContainerCell
* GetInternalRepresentation() const {return m_Cell
;} 
 155                 // Returns pointer to conteiners/cells structure. 
 156                 // It should be used ONLY when printing 
 158         static void AddFilter(wxHtmlFilter 
*filter
); 
 161         virtual void OnLinkClicked(const wxString
& link
); 
 162                 // called when users clicked on hypertext link. Default behavior is to 
 163                 // call LoadPage(loc) 
 165         static void CleanUpStatics(); 
 166                 // cleans static variables 
 168         wxHtmlWinParser 
*GetParser() const { return m_Parser
; } 
 169                 // return a pointer to the parser. 
 172         bool ScrollToAnchor(const wxString
& anchor
); 
 173                 // Scrolls to anchor of this name. (Anchor is #news 
 174                 // or #features etc. it is part of address sometimes: 
 175                 // http://www.ms.mff.cuni.cz/~vsla8348/wxhtml/index.html#news) 
 176                 // Return value : TRUE if anchor exists, FALSE otherwise 
 179                 // prepare layout (= fill m_PosX, m_PosY for fragments) based on actual size of 
 180                 // window. This method also setup scrollbars 
 182         void OnDraw(wxDC
& dc
); 
 183         void OnSize(wxSizeEvent
& event
); 
 184         void OnMouseEvent(wxMouseEvent
& event
); 
 185         void OnIdle(wxIdleEvent
& event
); 
 186         void OnKeyDown(wxKeyEvent
& event
); 
 188         virtual wxHtmlFilter 
*GetDefaultFilter() {return new wxHtmlFilterPlainText
;} 
 189                 // returns new filter (will be stored into m_DefaultFilter variable) 
 192         wxHtmlContainerCell 
*m_Cell
; 
 193                 // This is pointer to the first cell in parsed data. 
 194                 // (Note: the first cell is usually top one = all other cells are sub-cells of this one) 
 195         wxHtmlWinParser 
*m_Parser
; 
 196                 // parser which is used to parse HTML input. 
 197                 // Each wxHtmlWindow has it's own parser because sharing one global 
 198                 // parser would be problematic (because of reentrancy) 
 199         wxString m_OpenedPage
; 
 200                 // contains name of actualy opened page or empty string if no page opened 
 201         wxString m_OpenedAnchor
; 
 202                 // contains name of current anchor within m_OpenedPage 
 204                 // class for opening files (file system) 
 206         wxFrame 
*m_RelatedFrame
; 
 207         wxString m_TitleFormat
; 
 208         int m_RelatedStatusBar
; 
 209                 // frame in which page title should be displayed & number of it's statusbar 
 210                 // reserved for usage with this html window 
 213                 // borders (free space between text and window borders) 
 214                 // defaults to 10 pixels. 
 219     DECLARE_EVENT_TABLE() 
 225 #endif // _WX_HTMLWIN_H_