+#else
+
+bool
+wxLayoutList::MoveCursor(int dx, int dy)
+{
+ CoordType diff;
+
+ m_CursorMoved = true;
+
+ enum { up, down} direction;
+
+ wxPoint newPos = wxPoint(m_CursorPos.x + dx,
+ m_CursorPos.y + dy);
+
+ // check for bounds
+ if(newPos.x < 0) newPos.x = 0;
+ if(newPos.y < 0) newPos.y = 0;
+ else if(newPos.y > m_MaxLine) newPos.y = m_MaxLine;
+
+ if(newPos.y > m_CursorPos.y ||
+ newPos.y == m_CursorPos.y &&
+ newPos.x >= m_CursorPos.x)
+ direction = up;
+ else
+ direction = down;
+
+ // now move cursor forwards until at the new position:
+
+ // first, go to the right line:
+ while(newPos.y != m_CursorPos.y)
+ {
+ if(direction == up)
+ {
+ m_CursorPos.x +=
+ (**m_CursorObject).CountPositions() - m_CursorOffset;
+ if(m_CursorObject == tail())
+ break; // can't go any further
+ if((**m_CursorObject).GetType() == WXLO_TYPE_LINEBREAK
+ && m_CursorOffset == 1)
+ {
+ m_CursorPos.y++; m_CursorPos.x = 0;
+ }
+ m_CursorObject ++; m_CursorOffset = 0;
+ }
+ else // down
+ {
+ m_CursorPos.x -= m_CursorOffset;
+ if(m_CursorObject == begin())
+ break; // can't go any further
+ if((**m_CursorObject).GetType() == WXLO_TYPE_LINEBREAK &&
+ m_CursorOffset == 0)
+ {
+ m_CursorPos.y--;
+ m_CursorPos.x = GetLineLength(m_CursorObject);
+ }
+ m_CursorObject --; m_CursorOffset = (**m_CursorObject).CountPositions();
+ }
+ }
+ if(newPos.y != m_CursorPos.y) // reached begin/end of list,
+ newPos.y = m_CursorPos.y; // exited by break
+
+ // now line is right, go to right column:
+ direction = newPos.x >= m_CursorPos.x ? up : down;
+ while(newPos.x != m_CursorPos.x)
+ {
+ if(direction == up)
+ {
+ diff = newPos.x - m_CursorPos.x;
+ if(diff >= (**m_CursorObject).CountPositions())
+ {
+ m_CursorPos.x += (**m_CursorObject).CountPositions();
+ if(m_CursorObject == tail())
+ {
+ m_CursorOffset = (**m_CursorObject).CountPositions();
+ break; // cannot go further
+ }
+ m_CursorObject++; m_CursorOffset = 0;
+ }
+ else
+ {
+ m_CursorPos.x += diff;
+ m_CursorOffset += diff;
+ }
+ }
+ else // down
+ {
+ diff = m_CursorPos.x - newPos.x;
+ if(diff >= m_CursorOffset)
+ {
+ if(m_CursorObject == begin())
+ {
+ m_CursorOffset = 0;
+ m_CursorPos.x = 0;
+ break; // cannot go further
+ }
+ m_CursorObject--;
+ m_CursorOffset = (**m_CursorObject).CountPositions();
+ }
+ else
+ {
+ m_CursorPos.x -= diff;
+ m_CursorOffset -= diff;
+ }
+ }
+ }
+ return true; // FIXME: when return what?
+}
+#endif
+