]> git.saurik.com Git - wxWidgets.git/commitdiff
several fixes
authorKarsten Ballüder <ballueder@usa.net>
Thu, 6 Aug 1998 19:23:19 +0000 (19:23 +0000)
committerKarsten Ballüder <ballueder@usa.net>
Thu, 6 Aug 1998 19:23:19 +0000 (19:23 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@446 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

user/wxLayout/wxLayout.cpp
user/wxLayout/wxllist.cpp
user/wxLayout/wxllist.h
user/wxLayout/wxlwindow.cpp
user/wxLayout/wxlwindow.h

index 94604e6f5d93631caf8b953d810ee6692a910b3b..159ab5654e245176ab63a9b4cdd64db9382196b7 100644 (file)
@@ -76,6 +76,8 @@ IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
 void
 MyFrame::AddSampleText(wxLayoutList &llist)
 {
+   llist.Insert("--");
+   llist.LineBreak();
 
    llist.Insert("The quick brown fox jumps over the lazy dog.");
    llist.LineBreak();
@@ -146,9 +148,11 @@ MyFrame::AddSampleText(wxLayoutList &llist)
          llist.LineBreak();
       }
    }
-
+   
    m_lwin->Refresh();
    m_lwin->UpdateScrollbars();
+   llist.SetEditable();
+   llist.SetCursor(wxPoint(0,0));
 }
 
 void
@@ -169,7 +173,7 @@ void MyFrame::Edit(void)
    llist.MoveCursor(0,2);
    llist.Delete(2);
    llist.MoveCursor(2);
-   llist.Insert("not all so ");
+   llist.Insert("not");
    llist.LineBreak();
    m_lwin->Refresh();
 }
index 9d8bd18060dbfea4d9b4c809e733dc84580b93a2..7227929365b4fb0ce9f101423d0adf1e9853926e 100644 (file)
 
 #define   BASELINESTRETCH   12
 
-#define   VAR(x)   cerr << #x"=" << x << endl;
-#define   DBG_POINT(p)   cerr << #p << ": " << p.x << ',' << p.y << endl
-#define   TRACE(f)   cerr << #f":" << endl;
-
 #ifdef WXLAYOUT_DEBUG
 static const char *_t[] = { "invalid", "text", "cmd", "icon",
                             "linebreak"};
@@ -46,6 +42,14 @@ wxLayoutObjectBase::Debug(void)
    cerr << _t[GetType()] << ": size=" << GetSize(&bl).x << ","
         << GetSize(&bl).y << " bl=" << bl; 
 }
+
+#  define   VAR(x)   cerr << #x"=" << x << endl;
+#  define   DBG_POINT(p)   cerr << #p << ": " << p.x << ',' << p.y << endl
+#  define   TRACE(f)   cerr << #f":" << endl;
+#else 
+#  define   VAR(x)   
+#  define   DBG_POINT(p)   
+#  define   TRACE(f)   
 #endif
 
 //-------------------------- wxLayoutObjectText
@@ -372,6 +376,7 @@ wxLayoutList::Draw(wxDC &dc, bool findObject, wxPoint const &findCoords)
             dc.GetTextExtent(Str(str), &width,&height, &descent);
             VAR(height);
             VAR(width); VAR(descent);
+            if(width < 1) width = 1;
             dc.DrawLine(position.x+width,
                         position.y+(baseLineSkip-height),
                         position.x+width, position.y+baseLineSkip);
@@ -523,11 +528,10 @@ wxLayoutList::FindObjectCursor(wxPoint const &cpos, CoordType *offset)
       width = 0;
       if((*i)->GetType() == WXLO_TYPE_LINEBREAK)
       {
-         if(cpos.y == cursor.y)
+         if(cpos.y == cursor.y && i != begin())
          {
             --i;
-            if(offset)
-               *offset = (*i)->CountPositions();
+            if(offset) *offset = i != end() ? (*i)->CountPositions() : 0;
             return i;
          }
          cursor.x = 0; cursor.y ++;
@@ -690,7 +694,7 @@ wxLayoutList::Delete(CoordType count)
          if(offs == len)
          {
             i++;
-            if((*i)->GetType() == WXLO_TYPE_TEXT)
+            if(i != end() && (*i)->GetType() == WXLO_TYPE_TEXT)
             {
                offs = 0;  // delete from begin of next string
                tobj = (wxLayoutObjectText *)*i;
@@ -851,6 +855,9 @@ wxLayoutList::Clear(int family, int size, int style, int weight,
    m_ColourFG = wxTheColourDatabase->FindColour(fg);
    m_ColourBG = wxTheColourDatabase->FindColour(bg);
 
+   if(! m_ColourFG) m_ColourFG = wxBLACK;
+   if(! m_ColourBG) m_ColourBG = wxWHITE;
+   
    m_Position = wxPoint(0,0);
    m_CursorPosition = wxPoint(0,0);
    m_MaxLine = 0;
index fc5f5a619cf33d81e9e6e35841ab07abfc570127..d1cc23775f917ea24ab75d83e42ccf2a2322d449 100644 (file)
 #include   <wx/wx.h>
 
 // skip the following defines if embedded in M application
-#ifndef   MCONFIG_H
-// for testing only:
+#ifdef   M_BASEDIR
+#   ifdef   DEBUG
+//#      define   WXLAYOUT_DEBUG
+#   endif
+#else
+    // for testing only:
 #   define WXLAYOUT_DEBUG
-//#   define USE_STD_STRING
+    // The wxLayout classes can be compiled with std::string instead of wxString
+    //#   define USE_STD_STRING
 #endif
 
 #ifdef USE_STD_STRING
@@ -60,8 +65,8 @@ public:
        @param baseLine the baseline for alignment, from top of box
        @draw if set to false, do not draw but just calculate sizes
    */
-   virtual void Draw( wxDC &WXUNUSED(dc), wxPoint WXUNUSED(position), 
-                     CoordType WXUNUSED(baseLine), bool draw = true) {};
+   virtual void Draw(wxDC &dc, wxPoint position, CoordType baseLine,
+                     bool draw = true) {};
 
    /** Calculates and returns the size of the object. May need to be
        called twice to work.
@@ -70,9 +75,8 @@ public:
        baseline)
        @return the size of the object's box in pixels
    */
-   virtual wxPoint GetSize( CoordType *WXUNUSED(baseLine) ) const 
-     { return wxPoint(0,0); };
-     
+   virtual wxPoint GetSize(CoordType *baseLine) const { return
+                                                           wxPoint(0,0); };
    /// returns the number of cursor positions occupied by this object
    virtual CoordType CountPositions(void) const { return 1; }
 
@@ -236,10 +240,13 @@ public:
    /**@name Functionality for editing */
    //@{
    /// set list editable or read only
-   void SetEditable(bool editable = true) { m_Editable = true; }
+   void SetEditable(bool editable = true) { m_Editable = editable; }
+   /// return true if list is editable
+   bool IsEditable(void) const { return m_Editable; }
    /// move cursor
    void MoveCursor(int dx = 0, int dy = 0);
    void SetCursor(wxPoint const &p) { m_CursorPosition = p; }
+   wxPoint GetCursor(void) const { return m_CursorPosition; }
    /// delete one or more cursor positions
    void Delete(CoordType count = 1);
    void Insert(String const &text);
@@ -250,7 +257,10 @@ public:
    /// return a pointer to the default settings:
    wxLayoutObjectCmd const *GetDefaults(void) const { return m_DefaultSetting ; }
 
-   //@}
+   wxLayoutObjectList::iterator FindCurrentObject(CoordType *offset = NULL);
+   // get the length of the line with the object pointed to by i
+   CoordType GetLineLength(wxLayoutObjectList::iterator i);
+//@}
 protected:
    /// font parameters:
    int m_FontFamily, m_FontStyle, m_FontWeight;
@@ -285,9 +295,6 @@ protected:
    /// find the object to the cursor position and returns the offset
    /// in there
    wxLayoutObjectList::iterator FindObjectCursor(wxPoint const &cpos, CoordType *offset = NULL);
-   wxLayoutObjectList::iterator FindCurrentObject(CoordType *offset = NULL);
-   // get the length of the line with the object pointed to by i
-   CoordType GetLineLength(wxLayoutObjectList::iterator i);
    
 };
 
index 9a7312579b16cf9a07e01c2f39f3add48a627b01..e8dff1fdc3ba74ff4c545e4da289cfb3b4e30564 100644 (file)
@@ -60,8 +60,15 @@ wxLayoutWindow::OnMouse(wxMouseEvent& event)
 void
 wxLayoutWindow::OnChar(wxKeyEvent& event)
 {
+   if(! m_llist.IsEditable()) // do nothing
+   {
+      event.Skip();
+      return;
+   }
+   
    long keyCode = event.KeyCode();
-
+   wxPoint p;
+   
    switch(event.KeyCode())
    {
       case WXK_RIGHT:
@@ -82,6 +89,16 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
    case WXK_NEXT:
       m_llist.MoveCursor(0,20);
       break;
+   case WXK_HOME:
+      p = m_llist.GetCursor();
+      p.x = 0;
+      m_llist.SetCursor(p);
+      break;
+   case WXK_END:
+      p = m_llist.GetCursor();
+      p.x = m_llist.GetLineLength(m_llist.FindCurrentObject(NULL));
+      m_llist.SetCursor(p);
+      break;
    case WXK_DELETE :
       m_llist.Delete(1);
       break;
index 61304396e329235a39bde988ea2aa16a16436ae3..18e3567e440d38eaeaba4f276d797a9dc9582d35 100644 (file)
@@ -16,7 +16,7 @@
 
 #include   "wxllist.h"
 
-#define BROKEN_COMPILER
+#define   BROKEN_COMPILER
 
 #ifdef   BROKEN_COMPILER
 #   define   virtual