# define WXMENU_LAYOUT_DBLCLICK 1113
#endif
-#ifdef __WXDEBUG__
+// do not enable debug mode within Mahogany
+#if defined(__WXDEBUG__) && ! defined(M_BASEDIR)
# define WXLAYOUT_DEBUG
#endif
/** Draws an object.
@param dc the wxDC to draw on
@param coords where to draw the baseline of the object.
+ @param wxllist pointer to wxLayoutList
+ @param begin if !=-1, from which position on to highlight it
+ @param end if begin !=-1, how many positions to highlight it
*/
- virtual void Draw(wxDC & /* dc */, wxPoint const & /* coords */) { }
+ virtual void Draw(wxDC & /* dc */,
+ wxPoint const & /* coords */,
+ class wxLayoutList *wxllist,
+ CoordType begin = -1,
+ CoordType end = -1) { }
/** Calculates and returns the size of the object.
@param top where to store height above baseline
virtual wxLayoutObjectType GetType(void) const { return WXLO_TYPE_TEXT; }
virtual void Layout(wxDC &dc);
- virtual void Draw(wxDC &dc, wxPoint const &coords);
+ virtual void Draw(wxDC &dc, wxPoint const &coords,
+ class wxLayoutList *wxllist,
+ CoordType begin = -1,
+ CoordType end = -1);
/** Calculates and returns the size of the object.
@param top where to store height above baseline
@param bottom where to store height below baseline
virtual wxLayoutObjectType GetType(void) const { return WXLO_TYPE_ICON; }
virtual void Layout(wxDC &dc);
- virtual void Draw(wxDC &dc, wxPoint const &coords);
+ virtual void Draw(wxDC &dc, wxPoint const &coords,
+ class wxLayoutList *wxllist,
+ CoordType begin = -1,
+ CoordType end = -1);
/** Calculates and returns the size of the object.
@param top where to store height above baseline
public:
virtual wxLayoutObjectType GetType(void) const { return WXLO_TYPE_CMD; }
virtual void Layout(wxDC &dc);
- virtual void Draw(wxDC &dc, wxPoint const &coords);
+ virtual void Draw(wxDC &dc, wxPoint const &coords,
+ class wxLayoutList *wxllist,
+ CoordType begin = -1,
+ CoordType end = -1);
wxLayoutObjectCmd(int size, int family, int style, int weight,
bool underline,
wxColour &fg, wxColour &bg);
*/
wxLayoutObjectList::iterator FindObjectScreen(wxDC &dc,
CoordType xpos,
- CoordType *offset) const ;
+ CoordType *offset,
+ bool *found = NULL) const ;
/** Get the first object in the list. This is used by the wxlparser
functions to export the list.
/** Return the line number of this line.
@return the line number
*/
- CoordType GetLineNumber(void) const { return m_LineNumber; }
+ inline CoordType GetLineNumber(void) const { return m_LineNumber; }
/** Return the length of the line.
@return line lenght in cursor positions
*/
- CoordType GetLength(void) const { return m_Length; }
+ inline CoordType GetLength(void) const { return m_Length; }
//@}
/**@name Drawing and Layout */
position. It assumes that Layout() has been called before.
@param dc the wxDC to use for calculations
@param xpos screen x position
+ @param found if non-NULL set to false if we return the last
+ object before the cursor, to true if we really have an object
+ for that position
@return pointer to the object
*/
- wxLayoutObject * FindObjectScreen(wxDC &dc, CoordType xpos);
+ wxLayoutObject * FindObjectScreen(wxDC &dc, CoordType xpos, bool
+ *found = NULL);
//@}
/**@name List traversal */
void RecalculatePositions(int recurse, wxLayoutList *llist);
/// Recalculates the position of this line on the canvas.
wxPoint RecalculatePosition(wxLayoutList *llist);
+
+ /** Copies the contents of this line to another wxLayoutList
+ @param llist the wxLayoutList destination
+ @param from x cursor coordinate where to start
+ @param to x cursor coordinate where to stop, -1 for end of line
+ */
+ void Copy(wxLayoutList *llist,
+ CoordType from = 0,
+ CoordType to = -1);
+
+#ifdef WXLAYOUT_DEBUG
+ void Debug(void);
+#endif
+
private:
/// Destructor is private. Use DeleteLine() to remove it.
~wxLayoutLine();
/// toggle underline flag
inline void SetFontUnderline(bool ul) { SetFont(-1,-1,-1,-1,(int)ul); }
/// set font colours by name
- inline void SetFontColour(char const *fg, char const *bg = NULL) { SetFont(-1,-1,-1,-1,-1,fg,bg); }
+ inline void SetFontColour(char const *fg, char const *bg = NULL)
+ { SetFont(-1,-1,-1,-1,-1,fg,bg); }
+ /// set font colours by colour
+ inline void SetFontColour(wxColour *fg, wxColour *bg = NULL)
+ { SetFont(-1,-1,-1,-1,-1,fg,bg); }
+
+
+ /// Used by wxLayoutObjectCmd only:
+ void SetColour_Internal(wxColour *fg, wxColour *bg)
+ { if(fg) m_ColourFG = *fg; if(bg) m_ColourBG = *bg; }
/**
Returns a pointer to the default settings.
This is only valid temporarily and should not be stored
@param top optional y coordinate where to start drawing
@param bottom optional y coordinate where to stop drawing
*/
- void Draw(wxDC &dc, const wxPoint &offset = wxPoint(0,0),
+ void Draw(wxDC &dc,
+ const wxPoint &offset = wxPoint(0,0),
CoordType top = -1, CoordType bottom = -1);
/** Calculates new layout for the list, like Draw() but does not
position. It assumes that Layout() has been called before.
@param pos screen position
@param cursorPos if non NULL, store cursor position in there
+ @param found if used, set this to true if we really found an
+ object, to false if we had to take the object near to it
@return pointer to the object
*/
wxLayoutObject * FindObjectScreen(wxDC &dc,
wxPoint const pos,
- wxPoint *cursorPos = NULL);
+ wxPoint *cursorPos = NULL,
+ bool *found = NULL);
+ /** Called by the objects to update the update rectangle.
+ @param x horizontal coordinate to include in rectangle
+ @param y vertical coordinate to include in rectangle
+ */
+ void SetUpdateRect(CoordType x, CoordType y);
/** Called by the objects to update the update rectangle.
@param p a point to include in it
*/
- void SetUpdateRect(const wxPoint &p);
+ inline void SetUpdateRect(const wxPoint &p)
+ { SetUpdateRect(p.x,p.y); }
/// Invalidates the update rectangle.
void InvalidateUpdateRect(void) { m_UpdateRectValid = false; }
/// Returns the update rectangle.
}
//@}
+ /// Begin selecting text.
void StartSelection(void);
+ // Continue selecting text
+ void ContinueSelection(void);
+ /// End selecting text.
void EndSelection(void);
+ /// Are we still selecting text?
+ bool IsSelecting(void);
bool IsSelected(const wxPoint &cursor);
+ /// Return the selection as a wxLayoutList:
+ wxLayoutList *GetSelection(void);
+
+ wxLayoutList *Copy(const wxPoint &from = wxPoint(0,0),
+ const wxPoint &to = wxPoint(-1,-1));
+
+ /// starts highlighting of text for selections
+ void StartHighlighting(wxDC &dc);
+ /// ends highlighting of text for selections
+ void EndHighlighting(wxDC &dc);
+
+ /** Tests whether this layout line is selected and needs
+ highlighting.
+ @param line to test for
+ @param from set to first cursorpos to be highlighted (for returncode == -1)
+ @param to set to last cursorpos to be highlighted (for returncode == -1)
+ @return 0 = not selected, 1 = fully selected, -1 = partially
+ selected
+
+ */
+ int IsSelected(const wxLayoutLine *line, CoordType *from, CoordType *to);
+
+#ifdef WXLAYOUT_DEBUG
+ void Debug(void);
+#endif
private:
/// Clear the list.
void InternalClear(void);
/// A structure for the selection.
struct Selection
{
+ Selection() { m_valid = false; m_selecting = false; }
bool m_valid;
+ bool m_selecting;
wxPoint m_CursorA, m_CursorB;
} m_Selection;
/** @name Font parameters. */
wxLayoutPrintout(wxLayoutList *llist,
wxString const & title =
"wxLayout Printout");
+ /// Destructor.
+ ~wxLayoutPrintout();
+
/** Function which prints the n-th page.
@param page the page number to print
@return bool true if we are not at end of document yet