]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/richedit/wxllist.h
no message
[wxWidgets.git] / samples / richedit / wxllist.h
index 85c0f13336d22d6620749b8cbfe63658c2309850..71e7d381aeae23767acca1f5f7c9664a2e7ca02d 100644 (file)
@@ -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$
  *******************************************************************/
@@ -28,6 +28,8 @@
 #   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;
@@ -640,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);
 
@@ -681,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; }
 
@@ -699,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.
@@ -776,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.
@@ -971,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.
@@ -989,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
@@ -1014,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
@@ -1053,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; }
@@ -1134,24 +1140,12 @@ public:
    void DecNumLines() { m_numLines--; }
 
    /// get the line by number
-   wxLayoutLine *GetLine(CoordType index) const
-   {
-       wxASSERT_MSG( (0 <= index) && (index < (CoordType)m_numLines),
-                     "invalid index" );
-
-       wxLayoutLine *line;
-       CoordType n = index;
-       for ( line = m_FirstLine; line && n-- > 0; line = line->GetNextLine() )
-           ;
-
-       if ( line )
-       {
-          // should be the right one
-          wxASSERT( line->GetLineNumber() == index );
-       }
+   wxLayoutLine *GetLine(CoordType index) const;
 
-       return line;
-   }
+   /** 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.
@@ -1167,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.
@@ -1224,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(); }
 };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *