X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f7770f09be0346f60e14f6dda75ded26927f07d3..0dfef5a8124ac0f1bb2aed6ef5ddfa833e8e2c6e:/samples/richedit/wxllist.h diff --git a/samples/richedit/wxllist.h b/samples/richedit/wxllist.h index 9c70ecbf40..71e7d381ae 100644 --- a/samples/richedit/wxllist.h +++ b/samples/richedit/wxllist.h @@ -1,7 +1,7 @@ /*-*- c++ -*-******************************************************** * wxLayoutList.h - a formatted text rendering engine for wxWindows * * * - * (C) 1999 by Karsten Ballüder (Ballueder@usa.net) * + * (C) 1999 by Karsten Ballüder (ballueder@gmx.net) * * * * $Id$ *******************************************************************/ @@ -16,18 +16,20 @@ #include "kbList.h" -#include "wx/wx.h" -#include "wx/print.h" -#include "wx/printdlg.h" -#include "wx/generic/printps.h" -#include "wx/generic/prntdlgg.h" -#include "wx/dataobj.h" +#include +#include +#include +#include +#include +#include // skip the following defines if embedded in M application #ifndef M_BASEDIR # define WXMENU_LAYOUT_LCLICK 1111 # define WXMENU_LAYOUT_RCLICK 1112 # define WXMENU_LAYOUT_DBLCLICK 1113 +#else // for Mahogany only +# include "MObject.h" #endif // use the wxWindows caret class instead of home grown cursor whenever possible @@ -96,6 +98,9 @@ class WXDLLEXPORT wxFont; its size. */ class wxLayoutObject +#ifdef M_BASEDIR + : public MObject +#endif { public: /** This structure can be used to contain data associated with the @@ -210,6 +215,9 @@ public: protected: /// optional data for application's use UserData *m_UserData; +#if defined (M_BASEDIR) && defined (DEBUG) + MOBJECT_NAME(wxLayoutObject) +#endif }; /// Define a list type of wxLayoutObject pointers. @@ -413,6 +421,7 @@ public: int underline = -1, wxColour *fg = NULL, wxColour *bg = NULL); + wxLayoutObjectCmd(const wxLayoutStyleInfo &si); ~wxLayoutObjectCmd(); /** Stores the current style in the styleinfo structure */ wxLayoutStyleInfo * GetStyle(void) const; @@ -520,12 +529,14 @@ public: /** Finds the object which covers the screen position xpos in this line. @param dc the wxDC to use for calculations + @param llist the layout list to which this line belongs @param xpos the screen x coordinate @param offset where to store the difference between xpos and the object's head @return iterator to the object or NULLIT */ wxLayoutObjectList::iterator FindObjectScreen(wxDC &dc, + wxLayoutList *llist, CoordType xpos, CoordType *offset, bool *found = NULL) const ; @@ -541,11 +552,18 @@ public: functions to export the list. @return iterator to the first object */ - wxLayoutObjectList::iterator GetFirstObject(void) + wxLayoutObjectList::iterator GetFirstObject(void) const { return m_ObjectList.begin(); } + /** Get the last object in the list. + */ + wxLayoutObjectList::iterator GetLastObject(void) const + { + return m_ObjectList.tail(); + } + /** Deletes this line, returns pointer to next line. @param update If true, update all following lines. */ @@ -600,13 +618,14 @@ public: for that position @return pointer to the object */ - wxLayoutObject * FindObjectScreen(wxDC &dc, CoordType xpos, bool - *found = NULL); + wxLayoutObject * FindObjectScreen(wxDC &dc, + CoordType xpos, + bool *found = NULL); /** This sets the style info for the beginning of this line. @param si styleinfo structure */ void ApplyStyle(const wxLayoutStyleInfo &si) - { m_StyleInfo = si; } + { m_StyleInfo = si; } //@} @@ -630,15 +649,6 @@ public: CoordType GetHeight(void) const { return m_Height; } /// Returns the width of this line. CoordType GetWidth(void) const { return m_Width; } - /** This will recalculate the position and size of this line. - If called recursively it will abort if the position of an - object is unchanged, assuming that none of the following - objects need to move. - @param recurse if greater 0 then it will be used as the - minimum(!) recursion level, continue with all lines till the end of - the list or until the coordinates no longer changed. - */ - void RecalculatePositions(int recurse, wxLayoutList *llist); /// Recalculates the position of this line on the canvas. wxPoint RecalculatePosition(wxLayoutList *llist); @@ -671,10 +681,6 @@ public: m_Dirty = true; } - /** Marks the following lines as dirty. - @param recurse if -1 recurse to end of list, otherwise depth of recursion. - */ - void MarkNextDirty(int recurse = 0); /// Reset the dirty flag void MarkClean() { m_Dirty = false; m_updateLeft = -1; } @@ -689,17 +695,10 @@ private: @param height new height */ void SetHeight(CoordType height, wxLayoutList *llist) - { m_Height = height; RecalculatePositions(true, llist); } + { m_Height = height; MarkDirty(); } - /** Moves the linenumbers one on, because a line has been inserted - or deleted. - @param delta either +1 or -1 - */ - void MoveLines(int delta) - { - m_LineNumber += delta; - if(m_Next) m_Next->MoveLines(delta); - } + /** Updates the line numbers. */ + void ReNumber(void); //@} private: /// The line number. @@ -766,6 +765,14 @@ public: /// Empty: clear the list but leave font settings. void Empty(void); + /** Enable or disable auto-formatting. Normally, while editing this + should be enabled which is the default. While + inserting/deleting lots of text, it makes sense to temporarily + disable this. + @param enable TRUE to enable, FALSE to disable + */ + void SetAutoFormatting(bool enable = TRUE) + { m_AutoFormat = enable; } /**@name Cursor Management */ //@{ /** Set new cursor position. @@ -961,10 +968,13 @@ public: @param offset an optional offset to shift printout @param top optional y coordinate where to start drawing @param bottom optional y coordinate where to stop drawing + @param clipStrictly if set, do not draw objects which reach + beyond "bottom". Set this when printing. */ void Draw(wxDC &dc, const wxPoint &offset = wxPoint(0,0), - CoordType top = -1, CoordType bottom = -1); + CoordType top = -1, CoordType bottom = -1, + bool clipStrictly = false); /** Calculates new layout for the list, like Draw() but does not actually draw it. @@ -979,6 +989,13 @@ public: wxPoint *cpos = NULL, wxPoint *csize = NULL); + /** Ensure that the whole list will be recalculate on the next call + to Layout() or Draw(). + @param redrawAll TRUE or FALSE to reset it + */ + void ForceTotalLayout(bool redrawAll = TRUE) + { m_ReLayoutAll = redrawAll; } + /** Returns the screen coordinates relating to a given cursor position and the size of the cursor at that position. @param dc for which to calculate it @@ -1004,9 +1021,8 @@ public: wxPoint GetSize(void) const; /** Returns the cursor position on the screen. - @return cursor position in pixels */ - wxPoint GetCursorScreenPos(wxDC &dc); + wxPoint GetCursorScreenPos(void) const; /** Draws the cursor. @param active If true, draw a bold cursor to mark window as @@ -1043,11 +1059,11 @@ public: /// adds the cursor position to the update rectangle void AddCursorPosToUpdateRect() { - #ifndef WXLAYOUT_USE_CARET - SetUpdateRect(m_CursorScreenPos); - SetUpdateRect(m_CursorScreenPos+m_CursorSize); +#ifndef WXLAYOUT_USE_CARET + SetUpdateRect(m_CursorScreenPos); + SetUpdateRect(m_CursorScreenPos+m_CursorSize); //#else - the caret will take care of refreshing itself - #endif // !WXLAYOUT_USE_CARET +#endif // !WXLAYOUT_USE_CARET } /// Invalidates the update rectangle. void InvalidateUpdateRect(void) { m_UpdateRectValid = false; } @@ -1123,6 +1139,14 @@ public: void IncNumLines() { m_numLines++; } void DecNumLines() { m_numLines--; } + /// get the line by number + wxLayoutLine *GetLine(CoordType index) const; + + /** Reads objects from a string and inserts them. + @param istr stream to read from, will bee changed + */ + void Read(wxString &istr); + private: /// Clear the list. void InternalClear(void); @@ -1137,6 +1161,10 @@ private: /// Is the update rectangle valid? bool m_UpdateRectValid; + /// Shall we auto-format? + bool m_AutoFormat; + /// Shall we re-layout everything? + bool m_ReLayoutAll; /**@name Cursor Management */ //@{ /// Where the text cursor (column,line) is. @@ -1194,14 +1222,18 @@ private: own format. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -class wxLayoutDataObject : public wxPrivateDataObject +class wxLayoutDataObject : public wxCustomDataObject { public: - wxLayoutDataObject(void) + wxLayoutDataObject() { - SetId("application/wxlayoutlist"); - //m_format.SetAtom((GdkAtom) 222222); + SetFormat("application/wxlayoutlist"); } + + // type safe wrappers + void SetLayoutData(const wxString& text) + { SetData(text.length() + 1, text.c_str()); } + const char *GetLayoutData() const { return (const char *)GetData(); } }; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *