#include "wx/list.h"
#include "wx/region.h"
#include "wx/accel.h"
+#include "wx/intl.h"
#define wxKEY_SHIFT 1
#define wxKEY_CTRL 2
class WXDLLEXPORT wxColourMap;
class WXDLLEXPORT wxFont;
class WXDLLEXPORT wxMenu;
-class WXDLLEXPORT wxRectangle;
+class WXDLLEXPORT wxRect;
class WXDLLEXPORT wxBitmap;
class WXDLLEXPORT wxSizer;
class WXDLLEXPORT wxList;
class WXDLLEXPORT wxDC;
class WXDLLEXPORT wxValidator;
-#if USE_DRAG_AND_DROP
+#if wxUSE_DRAG_AND_DROP
class WXDLLEXPORT wxDropTarget;
#endif
-#if USE_WX_RESOURCES
+#if wxUSE_WX_RESOURCES
class WXDLLEXPORT wxResourceTable;
class WXDLLEXPORT wxItemResource;
#endif
WXDLLEXPORT_DATA(extern const wxSize) wxDefaultSize;
WXDLLEXPORT_DATA(extern const wxPoint) wxDefaultPosition;
+//-----------------------------------------------------------------------------
+// wxClientData
+//-----------------------------------------------------------------------------
+
+class wxClientData
+{
+public:
+ wxClientData() { }
+ virtual ~wxClientData() { }
+};
+
+//-----------------------------------------------------------------------------
+// wxStringClientData
+//-----------------------------------------------------------------------------
+
+class wxStringClientData: public wxClientData
+{
+public:
+ wxStringClientData() { }
+ wxStringClientData( wxString &data ) { m_data = data; }
+ void SetData( wxString &data ) { m_data = data; }
+ wxString GetData() const { return m_data; }
+
+private:
+ wxString m_data;
+};
+
class WXDLLEXPORT wxWindow: public wxEvtHandler
{
DECLARE_ABSTRACT_CLASS(wxWindow)
- friend class wxDC;
- friend class wxPaintDC;
+ friend class WXDLLEXPORT wxDC;
+ friend class WXDLLEXPORT wxWindowDC;
public:
wxWindow();
// Get overall window size
virtual void GetSize(int *width, int *height) const;
+ virtual wxSize GetSize() const { int w, h; GetSize(& w, & h); return wxSize(w, h); }
+ virtual wxRect GetRect() const { int w, h; int x, y; GetPosition(& x, & y); GetSize(& w, & h); return wxRect(x, y, w, h); }
// Get window position, relative to parent (or screen if no parent)
virtual void GetPosition(int *x, int *y) const;
+ virtual wxPoint GetPosition() const { int x, y; GetPosition(&x, &y); return wxPoint(x, y); }
// Get client (application-useable) size
virtual void GetClientSize(int *width, int *height) const;
+ virtual wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); }
// Set overall size and position
virtual void SetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
- inline virtual void SetSize(int width, int height) { SetSize(-1, -1, width, height, wxSIZE_USE_EXISTING); }
- inline virtual void Move(int x, int y) { SetSize(x, y, -1, -1, wxSIZE_USE_EXISTING); }
+ virtual void SetSize(int width, int height) { SetSize(-1, -1, width, height, wxSIZE_USE_EXISTING); }
+ virtual void SetSize(const wxRect& rect, int sizeFlags = wxSIZE_AUTO)
+ { SetSize(rect.x, rect.y, rect.width, rect.height, sizeFlags); }
+ virtual void SetSize(const wxSize& size) { SetSize(-1, -1, size.x, size.y, wxSIZE_USE_EXISTING); }
+
+ virtual void Move(int x, int y) { SetSize(x, y, -1, -1, wxSIZE_USE_EXISTING); }
+ virtual void Move(const wxPoint& pt) { SetSize(pt.x, pt.y, -1, -1, wxSIZE_USE_EXISTING); }
// Set client size
virtual void SetClientSize(int width, int size);
+ virtual void SetClientSize(const wxSize& sz) { SetClientSize(sz.x, sz.y); }
// Convert client to screen coordinates
virtual void ClientToScreen(int *x, int *y) const;
+ virtual wxPoint ClientToScreen(const wxPoint& pt) const
+ { int x = pt.x; int y = pt.y; ClientToScreen(& x, & y); return wxPoint(x, y); }
// Convert screen to client coordinates
virtual void ScreenToClient(int *x, int *y) const;
+ virtual wxPoint ScreenToClient(const wxPoint& pt) const
+ { int x = pt.x; int y = pt.y; ScreenToClient(& x, & y); return wxPoint(x, y); }
// Set the focus to this window
virtual void SetFocus();
// Enable or disable the window
virtual void Enable(bool enable);
-#if USE_DRAG_AND_DROP
+#if wxUSE_DRAG_AND_DROP
// Associate a drop target with this window (if the window already had a drop
// target, it's deleted!) and return the current drop target (may be NULL).
void SetDropTarget(wxDropTarget *pDropTarget);
// Accept files for dragging
virtual void DragAcceptFiles(bool accept);
+ // tooltips
+ // create a tooltip with this text
+ void SetToolTip(const wxString& tip);
+
+ // TODO
+#if wxUSE_TOOLTIPS
+ // pointer may be NULL to remove the tooltip
+ void SetToolTip(wxToolTip *tooltip);
+ // get the current tooltip (may return NULL if none)
+ wxToolTip* GetToolTip() const { return m_tooltip; }
+#endif
+
// Update region access
- virtual wxRegion GetUpdateRegion() const;
+ virtual wxRegion& GetUpdateRegion() const;
virtual bool IsExposed(int x, int y, int w, int h) const;
virtual bool IsExposed(const wxPoint& pt) const;
virtual bool IsExposed(const wxRect& rect) const;
virtual bool PopupMenu(wxMenu *menu, int x, int y);
// Send the window a refresh event
- virtual void Refresh(bool eraseBack = TRUE, const wxRectangle *rect = NULL);
+ virtual void Refresh(bool eraseBack = TRUE, const wxRect *rect = NULL);
// New functions that will replace the above.
virtual void SetScrollbar(int orient, int pos, int thumbVisible,
int range, bool refresh = TRUE);
+ // Helper functions for Motif
+ void CreateScrollbar(int orientation);
+ void DestroyScrollbar(int orientation);
+
virtual void SetScrollPos(int orient, int pos, bool refresh = TRUE);
virtual int GetScrollPos(int orient) const;
virtual int GetScrollRange(int orient) const;
virtual int GetScrollThumb(int orient) const;
- virtual void ScrollWindow(int dx, int dy, const wxRectangle *rect = NULL);
+ virtual void ScrollWindow(int dx, int dy, const wxRect *rect = NULL);
// Caret manipulation
virtual void CreateCaret(int w, int h);
inline wxWindow *GetParent() const;
inline void SetParent(wxWindow *p) ;
inline wxWindow *GetGrandParent() const;
- inline wxList *GetChildren() const;
+ inline wxList& GetChildren() const;
+ // Reparents this window to have the new parent.
+ virtual bool Reparent(wxWindow* parent);
// Set/get the window's font
virtual void SetFont(const wxFont& f);
- inline virtual wxFont *GetFont() const;
+ inline virtual wxFont& GetFont() const;
// Set/get the window's validator
void SetValidator(const wxValidator& validator);
inline wxValidator *GetValidator() const;
+ virtual void SetClientObject( wxClientData *data );
+ virtual wxClientData *GetClientObject();
+
+ virtual void SetClientData( void *data );
+ virtual void *GetClientData();
+
// Set/get the window's style
inline void SetWindowStyleFlag(long flag);
inline long GetWindowStyleFlag() const;
+ // Handle a control command
+ virtual void OnCommand(wxWindow& win, wxCommandEvent& event);
+
// Set/get event handler
inline void SetEventHandler(wxEvtHandler *handler);
inline wxEvtHandler *GetEventHandler() const;
void SetConstraints(wxLayoutConstraints *c);
// Set/get window background colour
- inline virtual void SetBackgroundColour(const wxColour& col);
+ virtual void SetBackgroundColour(const wxColour& col);
inline virtual wxColour GetBackgroundColour() const;
// Set/get window foreground colour
- inline virtual void SetForegroundColour(const wxColour& col);
+ virtual void SetForegroundColour(const wxColour& col);
inline virtual wxColour GetForegroundColour() const;
- // Set/get window default background colour (for children to inherit).
- // NOTE: these may be removed in later revisions.
- inline virtual void SetDefaultBackgroundColour(const wxColour& col);
- inline virtual wxColour GetDefaultBackgroundColour(void) const;
-
- // Set/get window default foreground colour (for children to inherit)
- inline virtual void SetDefaultForegroundColour(const wxColour& col);
- inline virtual wxColour GetDefaultForegroundColour(void) const;
-
// Get the default button, if there is one
inline virtual wxButton *GetDefaultItem() const;
inline virtual void SetDefaultItem(wxButton *but);
virtual void OnDefaultAction(wxControl *initiatingItem);
// Resource loading
-#if USE_WX_RESOURCES
+#if wxUSE_WX_RESOURCES
virtual bool LoadFromResource(wxWindow *parent, const wxString& resourceName, const wxResourceTable *table = NULL);
- virtual wxControl *CreateItem(const wxItemResource *childResource, const wxResourceTable *table = NULL);
+ virtual wxControl *CreateItem(const wxItemResource* childResource, const wxItemResource* parentResource,
+ const wxResourceTable *table = (const wxResourceTable *) NULL);
#endif
virtual void GetTextExtent(const wxString& string, int *x, int *y,
void OnEraseBackground(wxEraseEvent& event);
void OnChar(wxKeyEvent& event);
+ void OnKeyDown(wxKeyEvent& event);
+ void OnKeyUp(wxKeyEvent& event);
void OnPaint(wxPaintEvent& event);
void OnIdle(wxIdleEvent& event);
// Does this window want to accept keyboard focus?
virtual bool AcceptsFocus() const;
- virtual void PrepareDC( wxDC &dc ) {};
+ virtual void PrepareDC( wxDC & WXUNUSED(dc) ) {};
public:
virtual void GetClientSizeConstraint(int *w, int *h) const ;
virtual void GetPositionConstraint(int *x, int *y) const ;
+ // Dialog units translations. Implemented in wincmn.cpp.
+ wxPoint ConvertPixelsToDialog(const wxPoint& pt) ;
+ wxPoint ConvertDialogToPixels(const wxPoint& pt) ;
+ inline wxSize ConvertPixelsToDialog(const wxSize& sz)
+ { wxPoint pt(ConvertPixelsToDialog(wxPoint(sz.x, sz.y))); return wxSize(pt.x, pt.y); }
+ inline wxSize ConvertDialogToPixels(const wxSize& sz)
+ { wxPoint pt(ConvertDialogToPixels(wxPoint(sz.x, sz.y))); return wxSize(pt.x, pt.y); }
+
wxObject *GetChild(int number) const ;
// Generates a new id for controls
/// Motif-specific
+ void ClearUpdateRects();
void CanvasGetSize(int* width, int* height) const; // If have drawing area
void CanvasGetClientSize(int *width, int *height) const;
void CanvasGetPosition(int *x, int *y) const; // If have drawing area
// message, e.g. arrange status bar, toolbar etc.
virtual bool PreResize() { return TRUE; }
- // Get main widget for this window
+ // Get main widget for this window, e.g. a text widget
virtual WXWidget GetMainWidget() const;
+ // Get the widget that corresponds to the label (for font setting, label setting etc.)
+ virtual WXWidget GetLabelWidget() const { return GetMainWidget(); }
// Get the client widget for this window (something we can
// create other windows on)
virtual WXWidget GetClientWidget() const;
+ // Get the top widget for this window, e.g. the scrolled widget parent
+ // of a multi-line text widget. Top means, top in the window hierarchy
+ // that implements this window.
+ virtual WXWidget GetTopWidget() const;
virtual void SetMainWidget(WXWidget w) { m_mainWidget = w; }
+ bool CanAddEventHandler() const { return m_canAddEventHandler; }
+ void SetCanAddEventHandler(bool flag) { m_canAddEventHandler = flag; }
// Get the underlying X window and display
virtual WXWindow GetXWindow() const;
virtual WXDisplay *GetXDisplay() const;
+ virtual WXPixmap GetBackingPixmap() const { return m_backingPixmap; }
+ inline int GetPixmapWidth() const { return m_pixmapWidth; }
+ inline int GetPixmapHeight() const { return m_pixmapHeight; }
+
+ // Change properties
+ virtual void ChangeFont(bool keepOriginalSize = TRUE); // Change to the current font (often overridden)
+ virtual void DoChangeForegroundColour(WXWidget widget, wxColour& foregroundColour);
+ virtual void DoChangeBackgroundColour(WXWidget widget, wxColour& backgroundColour, bool changeArmColour = FALSE);
+ // These to be overridden as needed (may change several widgets)
+ virtual void ChangeBackgroundColour(); // Change background and foreground colour using current
+ // background colour setting (Motif generates
+ // foreground based on background)
+ virtual void ChangeForegroundColour(); // Change foreground colour using current
+ // foreground colour setting
+
+ // Adds the widget to the hash table and adds event handlers.
+ bool AttachWidget (wxWindow* parent, WXWidget mainWidget,
+ WXWidget formWidget, int x, int y, int width, int height);
+ bool DetachWidget(WXWidget widget);
+
// Generates a paint event
virtual void DoPaint();
+ // How to implement accelerators. If we find a key event,
+ // translate to wxWindows wxKeyEvent form. Find a widget for the window.
+ // Now find a wxWindow for the widget. If there isn't one, go up the widget hierarchy
+ // trying to find one. Once one is found, call ProcessAccelerator for the
+ // window. If it returns TRUE (processed the event), skip the X event,
+ // otherwise carry on up the wxWindows window hierarchy calling ProcessAccelerator.
+ // If all return FALSE, process the X event as normal.
+ // Eventually we can implement OnCharHook the same way, but concentrate on accelerators
+ // for now.
+ // ProcessAccelerator must look at the current accelerator table, and try to find
+ // what menu id or window (beneath it) has this ID. Then construct an appropriate command
+ // event and send it.
+ virtual bool ProcessAccelerator(wxKeyEvent& event);
+
////////////////////////////////////////////////////////////////////////
//// PROTECTED DATA
protected:
wxColour m_backgroundColour ;
wxColour m_foregroundColour ;
- wxColour m_defaultBackgroundColour;
- wxColour m_defaultForegroundColour;
wxAcceleratorTable m_acceleratorTable;
+ wxClientData* m_clientObject;
+ void* m_clientData;
-#if USE_DRAG_AND_DROP
+#if wxUSE_DRAG_AND_DROP
wxDropTarget *m_pDropTarget; // the current drop target or NULL
#endif //USE_DRAG_AND_DROP
public:
/// Motif-specific
+ bool m_needsRefresh; // Do we need to repaint the backing store?
+ bool m_canAddEventHandler;
bool m_button1Pressed;
bool m_button2Pressed;
bool m_button3Pressed;
// For double-click detection
long m_lastTS; // last timestamp
int m_lastButton; // last pressed button
- wxList m_updateRects; // List of wxRectangles representing damaged region
+ wxList m_updateRects; // List of wxRects representing damaged region
+ bool m_isShown;
protected:
WXWidget m_mainWidget;
WXWidget m_hScrollBar;
WXWidget m_scrolledWindow;
WXWidget m_drawingArea;
bool m_winCaptured;
- bool m_isShown;
bool m_hScroll;
bool m_vScroll;
- bool m_hScrollingEnabled;
- bool m_vScrollingEnabled;
WXPixmap m_backingPixmap;
int m_pixmapWidth;
int m_pixmapHeight;
int m_pixmapOffsetX;
int m_pixmapOffsetY;
+ int m_scrollPosX; // Store the last scroll pos,
+ int m_scrollPosY; // since in wxWin the pos isn't
+ // set automatically by system
DECLARE_EVENT_TABLE()
};
inline wxWindow *wxWindow::GetParent() const { return m_windowParent; }
inline void wxWindow::SetParent(wxWindow *p) { m_windowParent = p; }
inline wxWindow *wxWindow::GetGrandParent() const { return (m_windowParent ? m_windowParent->m_windowParent : (wxWindow*) NULL); }
-inline wxList *wxWindow::GetChildren() const { return m_children; }
-inline wxFont *wxWindow::GetFont() const { return (wxFont *) & m_windowFont; }
+inline wxList& wxWindow::GetChildren() const { return (wxList&) * m_children; }
+inline wxFont& wxWindow::GetFont() const { return (wxFont&) m_windowFont; }
inline wxString wxWindow::GetName() const { return m_windowName; }
inline void wxWindow::SetName(const wxString& name) { m_windowName = name; }
inline long wxWindow::GetWindowStyleFlag() const { return m_windowStyle; }
inline void wxWindow::SetAutoLayout(bool a) { m_autoLayout = a; }
inline bool wxWindow::GetAutoLayout() const { return m_autoLayout; }
inline wxLayoutConstraints *wxWindow::GetConstraints() const { return m_constraints; }
-inline void wxWindow::SetBackgroundColour(const wxColour& col) { m_backgroundColour = col; };
inline wxColour wxWindow::GetBackgroundColour() const { return m_backgroundColour; };
-inline void wxWindow::SetForegroundColour(const wxColour& col) { m_foregroundColour = col; };
inline wxColour wxWindow::GetForegroundColour() const { return m_foregroundColour; };
-inline void wxWindow::SetDefaultForegroundColour(const wxColour& col) { m_defaultForegroundColour = col; };
-inline wxColour wxWindow::GetDefaultForegroundColour(void) const { return m_defaultForegroundColour; };
-inline void wxWindow::SetDefaultBackgroundColour(const wxColour& col) { m_defaultBackgroundColour = col; };
-inline wxColour wxWindow::GetDefaultBackgroundColour(void) const { return m_defaultBackgroundColour; };
inline wxButton *wxWindow::GetDefaultItem() const { return m_defaultItem; }
inline void wxWindow::SetDefaultItem(wxButton *but) { m_defaultItem = but; }
WXDLLEXPORT_DATA(extern wxList) wxTopLevelWindows;
+// A little class to switch off size optimization while an instance of the object
+// exists
+class WXDLLEXPORT wxNoOptimize: public wxObject
+{
+public:
+ wxNoOptimize();
+ ~wxNoOptimize();
+
+ static bool CanOptimize();
+
+protected:
+ static int m_count;
+};
+
#endif
// _WX_WINDOW_H_