]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/textwrapper.h
synchronize GTK2 minimum version in docs
[wxWidgets.git] / include / wx / textwrapper.h
index cb2c0972f80296bc9d0a0144020825c3f0e94da3..56b7fdc2da018301ec52b8b55ca3027aa3bcd541 100644 (file)
 #ifndef _WX_TEXTWRAPPER_H_
 #define _WX_TEXTWRAPPER_H_
 
+#include "wx/window.h"
+
 // ----------------------------------------------------------------------------
 // wxTextWrapper
 // ----------------------------------------------------------------------------
 
 // this class is used to wrap the text on word boundary: wrapping is done by
 // calling OnStartLine() and OnOutputLine() functions
-class wxTextWrapper
+class WXDLLIMPEXP_CORE wxTextWrapper
 {
 public:
     wxTextWrapper() { m_eol = false; }
@@ -64,5 +66,64 @@ private:
     wxDECLARE_NO_COPY_CLASS(wxTextWrapper);
 };
 
+#if wxUSE_STATTEXT
+
+#include "wx/sizer.h"
+#include "wx/stattext.h"
+
+// A class creating a sizer with one static text per line of text. Creation of
+// the controls used for each line can be customized by overriding
+// OnCreateLine() function.
+//
+// This class is currently private to wxWidgets and used only by wxDialog
+// itself. We may make it public later if there is sufficient interest.
+class wxTextSizerWrapper : public wxTextWrapper
+{
+public:
+    wxTextSizerWrapper(wxWindow *win)
+    {
+        m_win = win;
+        m_hLine = 0;
+    }
+
+    wxSizer *CreateSizer(const wxString& text, int widthMax)
+    {
+        m_sizer = new wxBoxSizer(wxVERTICAL);
+        Wrap(m_win, text, widthMax);
+        return m_sizer;
+    }
+
+    wxWindow *GetParent() const { return m_win; }
+
+protected:
+    virtual wxWindow *OnCreateLine(const wxString& line)
+    {
+        return new wxStaticText(m_win, wxID_ANY,
+                                wxControl::EscapeMnemonics(line));
+    }
+
+    virtual void OnOutputLine(const wxString& line)
+    {
+        if ( !line.empty() )
+        {
+            m_sizer->Add(OnCreateLine(line));
+        }
+        else // empty line, no need to create a control for it
+        {
+            if ( !m_hLine )
+                m_hLine = m_win->GetCharHeight();
+
+            m_sizer->Add(5, m_hLine);
+        }
+    }
+
+private:
+    wxWindow *m_win;
+    wxSizer *m_sizer;
+    int m_hLine;
+};
+
+#endif // wxUSE_STATTEXT
+
 #endif // _WX_TEXTWRAPPER_H_