]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/richtext/richtexthtml.h
routing native events first to the wx class and only if skipped call native handler
[wxWidgets.git] / include / wx / richtext / richtexthtml.h
index 2bb4ca0a8e79397319ed158fffc8769abfcae430..dee3f7091f885f4e6604367652585459cda35e1f 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        wx/richtext/richedithtml.h
+// Name:        wx/richtext/richtexthtml.h
 // Purpose:     HTML I/O for wxRichTextCtrl
 // Author:      Julian Smart
 // Modified by:
 // Purpose:     HTML I/O for wxRichTextCtrl
 // Author:      Julian Smart
 // Modified by:
  * wxRichTextHTMLHandler
  */
 
  * wxRichTextHTMLHandler
  */
 
-class WXDLLIMPEXP_ADV wxRichTextHTMLHandler: public wxRichTextFileHandler
+class WXDLLIMPEXP_RICHTEXT wxRichTextHTMLHandler: public wxRichTextFileHandler
 {
     DECLARE_CLASS(wxRichTextHTMLHandler)
 public:
 {
     DECLARE_CLASS(wxRichTextHTMLHandler)
 public:
-    wxRichTextHTMLHandler(const wxString& name = wxT("HTML"), const wxString& ext = wxT("html"), int type = wxRICHTEXT_TYPE_HTML)
-        : wxRichTextFileHandler(name, ext, type)
-        { }
-
-#if wxUSE_STREAMS
-    virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream);
-    virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream);
-#endif
+    wxRichTextHTMLHandler(const wxString& name = wxT("HTML"), const wxString& ext = wxT("html"), int type = wxRICHTEXT_TYPE_HTML);
 
     /// Can we save using this handler?
     virtual bool CanSave() const { return true; }
 
     /// Can we save using this handler?
     virtual bool CanSave() const { return true; }
@@ -44,14 +37,108 @@ public:
     /// Can we handle this filename (if using files)? By default, checks the extension.
     virtual bool CanHandle(const wxString& filename) const;
 
     /// Can we handle this filename (if using files)? By default, checks the extension.
     virtual bool CanHandle(const wxString& filename) const;
 
+// Accessors and operations unique to this handler
+
+    /// Set and get the list of image locations generated by the last operation
+    void SetTemporaryImageLocations(const wxArrayString& locations) { m_imageLocations = locations; }
+    const wxArrayString& GetTemporaryImageLocations() const { return m_imageLocations; }
+
+    /// Clear the image locations generated by the last operation
+    void ClearTemporaryImageLocations() { m_imageLocations.Clear(); }
+
+    /// Delete the in-memory or temporary files generated by the last operation
+    bool DeleteTemporaryImages();
+
+    /// Delete the in-memory or temporary files generated by the last operation. This is a static
+    /// function that can be used to delete the saved locations from an earlier operation,
+    /// for example after the user has viewed the HTML file.
+    static bool DeleteTemporaryImages(int flags, const wxArrayString& imageLocations);
+
+    /// Reset the file counter, in case, for example, the same names are required each time
+    static void SetFileCounter(int counter) { sm_fileCounter = counter; }
+
+    /// Set and get the directory for storing temporary files. If empty, the system
+    /// temporary directory will be used.
+    void SetTempDir(const wxString& tempDir) { m_tempDir = tempDir; }
+    const wxString& GetTempDir() const { return m_tempDir; }
+
+    /// Set and get mapping from point size to HTML font size. There should be 7 elements,
+    /// one for each HTML font size, each element specifying the maximum point size for that
+    /// HTML font size. E.g. 8, 10, 13, 17, 22, 29, 100
+    void SetFontSizeMapping(const wxArrayInt& fontSizeMapping) { m_fontSizeMapping = fontSizeMapping; }
+    wxArrayInt GetFontSizeMapping() const { return m_fontSizeMapping; }
+
+protected:
+
+// Implementation
+
+#if wxUSE_STREAMS
+    virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream);
+    virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream);
+
     /// Output character formatting
     /// Output character formatting
-    virtual void OutputCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, wxOutputStream& stream, bool start);
+    void BeginCharacterFormatting(const wxTextAttr& currentStyle, const wxTextAttr& thisStyle, const wxTextAttr& paraStyle, wxTextOutputStream& stream );
+    void EndCharacterFormatting(const wxTextAttr& currentStyle, const wxTextAttr& thisStyle, const wxTextAttr& paraStyle, wxTextOutputStream& stream );
 
     /// Output paragraph formatting
 
     /// Output paragraph formatting
-    virtual void OutputParagraphFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, wxOutputStream& stream, bool start);
+    void BeginParagraphFormatting(const wxTextAttr& currentStyle, const wxTextAttr& thisStyle, wxTextOutputStream& stream);
+    void EndParagraphFormatting(const wxTextAttr& currentStyle, const wxTextAttr& thisStyle, wxTextOutputStream& stream);
 
 
-protected:
+    /// Output font tag
+    void OutputFont(const wxTextAttr& style, wxTextOutputStream& stream);
+
+    /// Closes lists to level (-1 means close all)
+    void CloseLists(int level, wxTextOutputStream& str);
+
+    /// Writes an image to its base64 equivalent, or to the memory filesystem, or to a file
+    void WriteImage(wxRichTextImage* image, wxOutputStream& stream);
+
+    /// Converts from pt to size property compatible height
+    long PtToSize(long size);
+
+    /// Typical base64 encoder
+    wxChar* b64enc(unsigned char* input, size_t in_len);
+
+    /// Gets the mime type of the given wxBITMAP_TYPE
+    const wxChar* GetMimeType(int imageType);
+
+    /// Gets the html equivalent of the specified value
+    wxString GetAlignment(const wxTextAttr& thisStyle);
+
+    /// Generates   array for indentations
+    wxString SymbolicIndent(long indent);
+
+    /// Finds the html equivalent of the specified bullet
+    int TypeOfList(const wxTextAttr& thisStyle, wxString& tag);
+#endif
+
+// Data members
+
+    wxRichTextBuffer* m_buffer;
+
+    /// Indentation values of the table tags
+    wxArrayInt      m_indents;
+
+    /// Stack of list types: 0 = ol, 1 = ul
+    wxArrayInt      m_listTypes;
+
+    /// Is there any opened font tag?
+    bool            m_font;
+
+    /// Are we in a table?
+    bool            m_inTable;
+
+    /// A list of the image files or in-memory images created by the last operation.
+    wxArrayString   m_imageLocations;
+
+    /// A location for the temporary files
+    wxString        m_tempDir;
+
+    /// A mapping from point size to HTML font size
+    wxArrayInt      m_fontSizeMapping;
 
 
+    /// A counter for generating filenames
+    static int      sm_fileCounter;
 };
 
 #endif
 };
 
 #endif