| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/textwrapper.h
- // Purpose: declaration of wxTextWrapper class
- // Author: Vadim Zeitlin
- // Created: 2009-05-31 (extracted from dlgcmn.cpp via wx/private/stattext.h)
- // Copyright: (c) 1999, 2009 Vadim Zeitlin <vadim@wxwidgets.org>
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #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 WXDLLIMPEXP_CORE wxTextWrapper
- {
- public:
- wxTextWrapper() { m_eol = false; }
- // win is used for getting the font, text is the text to wrap, width is the
- // max line width or -1 to disable wrapping
- void Wrap(wxWindow *win, const wxString& text, int widthMax);
- // we don't need it, but just to avoid compiler warnings
- virtual ~wxTextWrapper() { }
- protected:
- // line may be empty
- virtual void OnOutputLine(const wxString& line) = 0;
- // called at the start of every new line (except the very first one)
- virtual void OnNewLine() { }
- private:
- // call OnOutputLine() and set m_eol to true
- void DoOutputLine(const wxString& line)
- {
- OnOutputLine(line);
- m_eol = true;
- }
- // this function is a destructive inspector: when it returns true it also
- // resets the flag to false so calling it again wouldn't return true any
- // more
- bool IsStartOfNewLine()
- {
- if ( !m_eol )
- return false;
- m_eol = false;
- return true;
- }
- bool m_eol;
- 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_
|