1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/textwrapper.h
3 // Purpose: declaration of wxTextWrapper class
4 // Author: Vadim Zeitlin
5 // Created: 2009-05-31 (extracted from dlgcmn.cpp via wx/private/stattext.h)
6 // Copyright: (c) 1999, 2009 Vadim Zeitlin <vadim@wxwidgets.org>
7 // Licence: wxWindows licence
8 ///////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_TEXTWRAPPER_H_
11 #define _WX_TEXTWRAPPER_H_
13 #include "wx/window.h"
15 // ----------------------------------------------------------------------------
17 // ----------------------------------------------------------------------------
19 // this class is used to wrap the text on word boundary: wrapping is done by
20 // calling OnStartLine() and OnOutputLine() functions
21 class WXDLLIMPEXP_CORE wxTextWrapper
24 wxTextWrapper() { m_eol
= false; }
26 // win is used for getting the font, text is the text to wrap, width is the
27 // max line width or -1 to disable wrapping
28 void Wrap(wxWindow
*win
, const wxString
& text
, int widthMax
);
30 // we don't need it, but just to avoid compiler warnings
31 virtual ~wxTextWrapper() { }
35 virtual void OnOutputLine(const wxString
& line
) = 0;
37 // called at the start of every new line (except the very first one)
38 virtual void OnNewLine() { }
41 // call OnOutputLine() and set m_eol to true
42 void DoOutputLine(const wxString
& line
)
49 // this function is a destructive inspector: when it returns true it also
50 // resets the flag to false so calling it again wouldn't return true any
52 bool IsStartOfNewLine()
65 wxDECLARE_NO_COPY_CLASS(wxTextWrapper
);
71 #include "wx/stattext.h"
73 // A class creating a sizer with one static text per line of text. Creation of
74 // the controls used for each line can be customized by overriding
75 // OnCreateLine() function.
77 // This class is currently private to wxWidgets and used only by wxDialog
78 // itself. We may make it public later if there is sufficient interest.
79 class wxTextSizerWrapper
: public wxTextWrapper
82 wxTextSizerWrapper(wxWindow
*win
)
88 wxSizer
*CreateSizer(const wxString
& text
, int widthMax
)
90 m_sizer
= new wxBoxSizer(wxVERTICAL
);
91 Wrap(m_win
, text
, widthMax
);
95 wxWindow
*GetParent() const { return m_win
; }
98 virtual wxWindow
*OnCreateLine(const wxString
& line
)
100 return new wxStaticText(m_win
, wxID_ANY
,
101 wxControl::EscapeMnemonics(line
));
104 virtual void OnOutputLine(const wxString
& line
)
108 m_sizer
->Add(OnCreateLine(line
));
110 else // empty line, no need to create a control for it
113 m_hLine
= m_win
->GetCharHeight();
115 m_sizer
->Add(5, m_hLine
);
125 #endif // wxUSE_STATTEXT
127 #endif // _WX_TEXTWRAPPER_H_