X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/715c9810a1d9dfc709fe35298fc61b1c217694e1..7bd30a12ade503fd135c686ecc98a6f6d5fecbeb:/include/wx/textwrapper.h diff --git a/include/wx/textwrapper.h b/include/wx/textwrapper.h index 1a743ea3ec..bf4991f7f4 100644 --- a/include/wx/textwrapper.h +++ b/include/wx/textwrapper.h @@ -19,7 +19,7 @@ // 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; } @@ -66,5 +66,63 @@ 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, 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_