#include "wxllist.h"
+enum
+{
+ WXLOWIN_MENU_LARGER = 12000,
+ WXLOWIN_MENU_SMALLER,
+ 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
+
+};
+
class wxLayoutWindow : public wxScrolledWindow
{
public:
+ /** Constructor.
+ @param parent parent window to display this panel in
+ */
wxLayoutWindow(wxWindow *parent);
+ /* Returns a reference to the wxLayoutList object.
+ @return the list
+ */
wxLayoutList & GetLayoutList(void) { return m_llist; }
// clears the window and sets default parameters:
{
GetLayoutList().Clear(family,size,style,weight,underline,fg,bg);
SetBackgroundColour( *GetLayoutList().GetDefaults()->GetBGColour());
+
+ m_bDirty = FALSE;
}
// callbacks
// NB: these functions are used as event handlers and must not be virtual
- //void OnDraw(wxDC &dc);
- void OnPaint(wxPaintEvent &WXUNUSED(event));
- void OnMouse(wxMouseEvent& event);
+ void OnPaint(wxPaintEvent &event);
+
+ void OnLeftMouseClick(wxMouseEvent& event)
+ { OnMouse(WXLOWIN_MENU_LCLICK, event); }
+ void OnRightMouseClick(wxMouseEvent& event)
+ { OnMouse(WXLOWIN_MENU_RCLICK, event); }
+ void OnMouseDblClick(wxMouseEvent& event)
+ { OnMouse(WXLOWIN_MENU_DBLCLICK, event); }
+
void OnChar(wxKeyEvent& event);
+ void OnMenu(wxCommandEvent& event);
+
+ void EnablePopup(bool enable = true) { m_DoPopupMenu = enable; }
+ /// gets called by either Update() or OnPaint()
+ void DoPaint(wxDC &dc);
#ifdef __WXMSW__
virtual long MSWGetDlgCode();
void UpdateScrollbars(void);
void Print(void);
- void SetEventId(int id) { m_EventId = id; }
- // what for? Caller doesn't even know object's positions in window
- //wxPoint const &GetClickPosition(void) const { return m_ClickPosition; }
- virtual ~wxLayoutWindow() {}
-private:
+ wxMenu * wxLayoutWindow::MakeFormatMenu(void);
+
+ /// if the flag is true, we send events when user clicks on embedded objects
+ inline void SetMouseTracking(bool doIt = true) { m_doSendEvents = doIt; }
+
+ virtual ~wxLayoutWindow() { if(m_PopupMenu) delete m_PopupMenu; }
+
+ // dirty flag access
+ bool IsDirty() const { return m_llist.IsDirty(); }
+ void ResetDirty() { m_llist.ResetDirty(); }
+
+protected:
+ /// generic function for mouse events processing
+ void OnMouse(int eventId, wxMouseEvent& event);
+
+ /// repaint if needed
+ void Update(void);
+
/// for sending events
wxWindow *m_Parent;
- int m_EventId;
+ bool m_doSendEvents;
+
/// the layout list to be displayed
wxLayoutList m_llist;
+
/// have we already set the scrollbars?
bool m_ScrollbarsSet;
- /// if we want to find an object:
- wxPoint m_FindPos;
- wxLayoutObjectBase *m_FoundObject;
- wxPoint m_ClickPosition;
+ /// Where does the current view start?
+ int m_ViewStartX; int m_ViewStartY;
+
+ /// do we have unsaved data?
+ bool m_bDirty;
+ /// do we handle clicks of the right mouse button?
+ bool m_DoPopupMenu;
+ /// the menu
+ wxMenu * m_PopupMenu;
+private:
DECLARE_EVENT_TABLE()
};