/*-*- c++ -*-********************************************************
* wxLwindow.h : a scrolled Window for displaying/entering rich text*
* *
- * (C) 1998,1999 by Karsten Ballüder (Ballueder@usa.net) *
+ * (C) 1998-1999 by Karsten Ballüder (karsten@phy.hw.ac.uk) *
* *
* $Id$
*******************************************************************/
#endif
-#define wxUSE_PRIVATE_CLIPBOARD_FORMAT 1
-
enum
{
WXLOWIN_MENU_LARGER = WXLOWIN_MENU_FIRST,
WXLOWIN_MENU_SMALLER,
- WXLOWIN_MENU_UNDERLINE_ON,
- WXLOWIN_MENU_UNDERLINE_OFF,
- WXLOWIN_MENU_BOLD_ON,
- WXLOWIN_MENU_BOLD_OFF,
- WXLOWIN_MENU_ITALICS_ON,
- WXLOWIN_MENU_ITALICS_OFF,
+ WXLOWIN_MENU_UNDERLINE,
+ WXLOWIN_MENU_BOLD,
+ WXLOWIN_MENU_ITALICS,
WXLOWIN_MENU_ROMAN,
WXLOWIN_MENU_TYPEWRITER,
WXLOWIN_MENU_SANSSERIF,
WXLOWIN_MENU_RCLICK,
- WXLOWIN_MENU_LCLICK,
WXLOWIN_MENU_DBLCLICK,
+ WXLOWIN_MENU_MDOWN,
+ WXLOWIN_MENU_LDOWN,
+ WXLOWIN_MENU_LCLICK = WXLOWIN_MENU_LDOWN,
+ WXLOWIN_MENU_LUP,
WXLOWIN_MENU_MOUSEMOVE,
WXLOWIN_MENU_LAST = WXLOWIN_MENU_MOUSEMOVE
};
int underline=0,
wxColour *fg=NULL,
wxColour *bg=NULL);
+
+ /// override base class virtual to also refresh the scrollbar position
+ virtual void Refresh(bool eraseBackground = TRUE,
+ const wxRect *rect = (const wxRect *)NULL);
+
/** Sets a background image, only used on screen, not on printouts.
@param bitmap a pointer to a wxBitmap or NULL to remove it
*/
m_BGbitmap = bitmap;
}
/// Enable or disable editing, i.e. processing of keystrokes.
- void SetEditable(bool toggle) { m_Editable = toggle; }
+ void SetEditable(bool toggle)
+ { m_Editable = toggle; SetCursorVisibility(toggle); }
/// Query whether list can be edited by user.
bool IsEditable(void) const { return m_Editable; }
/** Sets cursor visibility, visible=1, invisible=0,
m_CursorVisibility = visibility; return v;}
/// Pastes text from clipboard.
- void Paste(void);
+ void Paste(bool privateFormat = FALSE, bool usePrimarySelection = FALSE);
/** Copies selection to clipboard.
@param invalidate used internally, see wxllist.h for details
*/
- bool Copy(bool invalidate = true);
+ bool Copy(bool invalidate = true, bool privateFormat = FALSE, bool primary = FALSE);
/// Copies selection to clipboard and deletes it.
- bool Cut(void);
+ bool Cut(bool privateFormat = FALSE, bool usePrimary = FALSE);
//@}
+ /// find string in buffer
bool Find(const wxString &needle,
- wxPoint * fromWhere = NULL);
+ wxPoint * fromWhere = NULL,
+ const wxString &configPath = "MsgViewFindString");
+ /// find the same string again
+ bool FindAgain(void);
void EnablePopup(bool enable = true) { m_DoPopupMenu = enable; }
Internally, this stores the parameter and calls a refresh on
wxMSW, draws directly on wxGTK.
*/
- void DoPaint(const wxRect *updateRect = NULL);
+ void RequestUpdate(const wxRect *updateRect = NULL);
/// if exact == false, assume 50% extra size for the future
void ResizeScrollbars(bool exact = false); // don't change this to true!
/**@name Callbacks */
//@{
+ void OnSize(wxSizeEvent &event);
void OnPaint(wxPaintEvent &event);
void OnChar(wxKeyEvent& event);
void OnKeyUp(wxKeyEvent& event);
+ void OnUpdateMenuUnderline(wxUpdateUIEvent& event);
+ void OnUpdateMenuBold(wxUpdateUIEvent& event);
+ void OnUpdateMenuItalic(wxUpdateUIEvent& event);
void OnMenu(wxCommandEvent& event);
- void OnLeftMouseClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LCLICK, event); }
+ void OnLeftMouseDown(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LDOWN, event); }
+ void OnLeftMouseUp(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LUP, event); }
void OnRightMouseClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_RCLICK, event); }
+ void OnMiddleMouseDown(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_MDOWN, event); }
void OnMouseDblClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_DBLCLICK, event); }
void OnMouseMove(wxMouseEvent &event) { OnMouse(WXLOWIN_MENU_MOUSEMOVE, event) ; }
void OnSetFocus(wxFocusEvent &ev);
/// Creates a wxMenu for use as a format popup.
static wxMenu * MakeFormatMenu(void);
- /**@name Dirty flag handling for optimisations. */
- //@{
- /// Set dirty flag.
- void SetDirty(void) { m_Dirty = true; }
- /// Query whether window needs redrawing.
- bool IsDirty(void) const { return m_Dirty; }
- /// Reset dirty flag.
- void ResetDirty(void) { m_Dirty = false; }
- //@}
- /// Redraws the window, used by DoPaint() or OnPaint().
+ /// Redraws the window, used by RequestUpdate() or OnPaint().
void InternalPaint(const wxRect *updateRect);
- /// Has list been modified/edited?
- bool IsModified(void) const { return m_Modified; }
- /// Mark list as modified or unchanged.
- void SetModified(bool modified = true) { m_Modified = modified; }
/** Tell window to update a wxStatusBar with UserData labels and
cursor positions.
@param bar wxStatusBar pointer
m_StatusBar = bar; m_StatusFieldLabel = labelfield;
m_StatusFieldCursor = cursorfield;
}
+#ifndef __WXMSW__
+ /// Enable or disable focus follow mode under non-MSW
+ void SetFocusFollowMode(bool enable = TRUE)
+ { m_FocusFollowMode = enable; }
+#endif
+ /**@name Modified flag handling, will not get reset by list unless
+ in Clear() */
+ //@{
+ /// Set dirty flag.
+ void SetModified(bool modified = TRUE) { m_Modified = modified; }
+ /// Query whether window needs redrawing.
+ bool IsModified(void) const { return m_Modified; }
+ //@}
+
+ /**@name Dirty flag handling for optimisations.
+ Normally one should only need to call SetDirty(), e.g. when
+ manipulating the wxLayoutList directly, so the window will update
+ itself. ResetDirty() and IsDirty() should only be used
+ internally. */
+ //@{
+ /// Set dirty flag.
+ void SetDirty(void) { m_Dirty = true; m_Modified = true; }
+ /// Query whether window needs redrawing.
+ bool IsDirty(void) const { return m_Dirty; }
+ /// Reset dirty flag.
+ void ResetDirty(void) { m_Dirty = false; }
+ //@}
+
+
protected:
/// generic function for mouse events processing
void OnMouse(int eventId, wxMouseEvent& event);
int m_maxx;
int m_maxy;
int m_lineHeight;
+
+ /// do we have the corresponding scrollbar?
+ bool m_hasHScrollbar,
+ m_hasVScrollbar;
+
/** Visibility parameter for cursor. 0/1 as expected, -1: visible
on demand.
*/
int m_CursorVisibility;
+
+ bool SetAutoDeleteSelection(bool enable = TRUE)
+ {
+ bool old = m_AutoDeleteSelection;
+ m_AutoDeleteSelection = enable;
+ return old;
+ }
private:
/// The layout list to be displayed.
wxLayoutList *m_llist;
bool m_Selecting;
/// wrap margin
CoordType m_WrapMargin;
- /// Is list dirty (for redraws, internal use)?
- bool m_Dirty;
- /// Has list been edited?
- bool m_Modified;
+ /// Has list changed since last redraw, e.g. in size?
+ bool m_Dirty;
+ /// Has the list ever been modified?
+ bool m_Modified;
wxMemoryDC *m_memDC;
wxBitmap *m_bitmap;
wxPoint m_bitmapSize;
int m_StatusFieldCursor;
/// a pointer to a bitmap for the background
wxBitmap *m_BGbitmap;
+ /**@name Some configuration options */
+ //@{
+ /// Do we want to auto-replace the selection with new text?
+ bool m_AutoDeleteSelection;
+#ifndef __WXMSW__
+ /// Do we want the focus to follow the mouse?
+ bool m_FocusFollowMode;
+#endif
+ /// For finding text and finding it again:
+ wxString m_FindString;
+//@}
DECLARE_EVENT_TABLE()
};