]> git.saurik.com Git - wxWidgets.git/blobdiff - user/wxLayout/wxllist.h
a few more buglets
[wxWidgets.git] / user / wxLayout / wxllist.h
index b181235238b57884fa7c8b215ca35bbeef101e53..a9cf311850f7bd06edaad384f286f7ef62e28711 100644 (file)
@@ -290,23 +290,61 @@ struct wxLayoutStyleInfo
                      int iul = -1,
                      wxColour *fg = NULL,
                      wxColour *bg = NULL);
-   wxColour * GetBGColour() const
+   wxColour & GetBGColour()
       {
-         return fg_valid ? new
-            wxColour(bg_red,bg_green,bg_blue)
-            : wxWHITE;
+         return m_bg;
       }
-   wxFont *GetFont(wxLayoutStyleInfo *);
+   wxLayoutStyleInfo & operator=(const wxLayoutStyleInfo &right);
    /// Font change parameters.
    int  size, family, style, weight, underline;
-   /// Is foreground colour valid to bet set?
-   bool fg_valid;
-   /// Is background colour valid to bet set?
-   bool bg_valid;
-   /// Foreground colour RGB values.
-   unsigned fg_red, fg_green, fg_blue;
-   /// Background colour RGB values.
-   unsigned bg_red, bg_green, bg_blue;
+   /// Colours
+   wxColour m_bg, m_fg;
+   bool m_fg_valid, m_bg_valid;
+};
+
+
+class wxFontCacheEntry
+{
+public:
+   wxFontCacheEntry(int family, int size, int style, int weight, 
+                    bool underline)
+      {
+         m_Family = family; m_Size = size; m_Style = style;
+         m_Weight = weight; m_Underline = underline;
+         m_Font = new wxFont(m_Size, m_Family,
+                             m_Style, m_Weight, m_Underline);
+      }
+   bool Matches(int family, int size, int style, int weight, 
+                bool underline) const
+      {
+         return size == m_Size && family == m_Family
+            && style == m_Style && weight == m_Weight
+            && underline == m_Underline;
+      }
+   wxFont & GetFont(void) { return *m_Font; }
+   ~wxFontCacheEntry()
+      {
+         delete m_Font;
+      }
+private:
+   wxFont *m_Font;
+   int  m_Family, m_Size, m_Style, m_Weight;
+   bool m_Underline;
+};
+
+KBLIST_DEFINE(wxFCEList, wxFontCacheEntry);
+
+class wxFontCache
+{
+public:
+   wxFont & GetFont(int family, int size, int style, int weight, 
+                   bool underline);
+   wxFont & GetFont(wxLayoutStyleInfo const &si)
+      {
+         return GetFont(si.family, si.size, si.style, si.weight, si.underline);
+      }
+private:
+   wxFCEList m_FontList;
 };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
@@ -325,8 +363,8 @@ public:
                      class wxLayoutList *wxllist,
                      CoordType begin = -1,
                      CoordType end = -1);
-   wxLayoutObjectCmd(int size = -1,
-                     int family = -1,
+   wxLayoutObjectCmd(int family = -1,
+                     int size = -1,
                      int style = -1,
                      int weight = -1,
                      int underline = -1,
@@ -339,8 +377,6 @@ public:
     */
    virtual wxLayoutObject *Copy(void);
 private:
-   /// the font to use
-   wxFont *m_font;
    wxLayoutStyleInfo *m_StyleInfo;
 };
 
@@ -451,6 +487,13 @@ public:
                                                  CoordType *offset,
                                                  bool *found = NULL) const ;
 
+   /** Finds text in this line.
+       @param needle the text to find
+       @param xpos the position where to start the search
+       @return the cursoor coord where it was found or -1
+   */
+   CoordType FindText(const wxString &needle, CoordType xpos = 0) const;
+   
    /** Get the first object in the list. This is used by the wxlparser 
        functions to export the list.
        @return iterator to the first object
@@ -512,6 +555,7 @@ public:
    */
    wxLayoutObject * FindObjectScreen(wxDC &dc, CoordType xpos, bool
                                      *found = NULL);
+
    //@}
 
    /**@name List traversal */
@@ -558,7 +602,12 @@ public:
 #ifdef WXLAYOUT_DEBUG
    void Debug(void);
 #endif
-   
+   wxLayoutStyleInfo &GetStyleInfo() { return m_StyleInfo; }
+
+   /// Returns dirty state
+   bool IsDirty(void) const { return m_Dirty; }
+   /// Marks line as diry.
+   void MarkDirty(void) { m_Dirty = true; }
 private:
    /// Destructor is private. Use DeleteLine() to remove it.
    ~wxLayoutLine();
@@ -603,6 +652,8 @@ private:
    wxLayoutLine *m_Previous;
    /// Pointer to next line if it exists.
    wxLayoutLine *m_Next;
+   /// A StyleInfo structure, holding the current settings.
+   wxLayoutStyleInfo m_StyleInfo;
    /// Just to suppress gcc compiler warnings.
    friend class dummy;
 private:
@@ -669,6 +720,8 @@ public:
 
    /// Returns current cursor position.
    wxPoint GetCursorPos(wxDC &dc) const { return m_CursorPos; }
+   wxPoint GetCursorPos() const { return m_CursorPos; }
+   
    //@}
 
    /**@name Editing functions.
@@ -729,6 +782,13 @@ public:
 
    //@}
 
+   /** Finds text in this list.
+       @param needle the text to find
+       @param cpos the position where to start the search
+       @return the cursoor coord where it was found or (-1,-1)
+   */
+   wxPoint FindText(const wxString &needle, const wxPoint &cpos = wxPoint(0,0)) const;
+
    /**@name Formatting options */
    //@{
    /// sets font parameters
@@ -743,10 +803,10 @@ public:
                 char const *bg = NULL);
    /// changes to the next larger font size
    inline void SetFontLarger(void)
-      { SetFont(-1,(12*m_FontPtSize)/10); }
+      { SetFont(-1,(12*m_CurrentSetting.size)/10); }
    /// changes to the next smaller font size
    inline void SetFontSmaller(void)
-      { SetFont(-1,(10*m_FontPtSize)/12); }
+      { SetFont(-1,(10*m_CurrentSetting.size)/12); }
    
    /// set font family
    inline void SetFontFamily(int family) { SetFont(family); }
@@ -772,7 +832,8 @@ public:
       anywhere.
       @return the default settings of the list
    */
-   wxLayoutStyleInfo *GetDefaults(void) { return m_DefaultSetting ; }
+   wxLayoutStyleInfo *GetDefaults(void) { return &m_DefaultSetting ; }
+   wxLayoutStyleInfo *GetStyleInfo(void) { return &m_CurrentSetting ; }
    //@}
 
    /**@name Drawing */
@@ -791,8 +852,9 @@ public:
        actually draw it.
        @param dc the wxDC to draw on
        @param bottom optional y coordinate where to stop calculating
+       @param forceAll force re-layout of all lines
    */
-   void Layout(wxDC &dc, CoordType bottom = -1);
+   void Layout(wxDC &dc, CoordType bottom = -1, bool forceAll = false);
 
    /** Calculates new sizes for everything in the list, like Layout()
        but this is needed after the list got changed.
@@ -896,7 +958,6 @@ public:
    */
    int IsSelected(const wxLayoutLine *line, CoordType *from, CoordType *to);
 
-
    void ApplyStyle(wxLayoutStyleInfo *si, wxDC &dc);
 #ifdef WXLAYOUT_DEBUG
    void Debug(void);
@@ -936,14 +997,10 @@ private:
    } m_Selection;
    /** @name Font parameters. */
    //@{
-   int m_FontFamily, m_FontStyle, m_FontWeight;
-   int m_FontPtSize;
-   bool m_FontUnderline;
-   /// colours:
-   wxColour m_ColourFG;
-   wxColour m_ColourBG;
+   /// this object manages the fonts for us
+   wxFontCache m_FontCache;
    /// the default setting:
-   wxLayoutStyleInfo *m_DefaultSetting;
+   wxLayoutStyleInfo m_DefaultSetting;
    /// the current setting:
    wxLayoutStyleInfo m_CurrentSetting;
    //@}