From: Karsten Ballüder Date: Thu, 6 Aug 1998 19:23:19 +0000 (+0000) Subject: several fixes X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/c6cdf16c933251be1670f611ba28e48885610b23 several fixes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@446 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/user/wxLayout/wxLayout.cpp b/user/wxLayout/wxLayout.cpp index 94604e6f5d..159ab5654e 100644 --- a/user/wxLayout/wxLayout.cpp +++ b/user/wxLayout/wxLayout.cpp @@ -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(); } diff --git a/user/wxLayout/wxllist.cpp b/user/wxLayout/wxllist.cpp index 9d8bd18060..7227929365 100644 --- a/user/wxLayout/wxllist.cpp +++ b/user/wxLayout/wxllist.cpp @@ -31,10 +31,6 @@ #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; diff --git a/user/wxLayout/wxllist.h b/user/wxLayout/wxllist.h index fc5f5a619c..d1cc23775f 100644 --- a/user/wxLayout/wxllist.h +++ b/user/wxLayout/wxllist.h @@ -17,10 +17,15 @@ #include // 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); }; diff --git a/user/wxLayout/wxlwindow.cpp b/user/wxLayout/wxlwindow.cpp index 9a7312579b..e8dff1fdc3 100644 --- a/user/wxLayout/wxlwindow.cpp +++ b/user/wxLayout/wxlwindow.cpp @@ -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; diff --git a/user/wxLayout/wxlwindow.h b/user/wxLayout/wxlwindow.h index 61304396e3..18e3567e44 100644 --- a/user/wxLayout/wxlwindow.h +++ b/user/wxLayout/wxlwindow.h @@ -16,7 +16,7 @@ #include "wxllist.h" -#define BROKEN_COMPILER +#define BROKEN_COMPILER #ifdef BROKEN_COMPILER # define virtual