X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e320a79f187558effb04d92020b470372bbe456..93ccaed86983970c4a2aa5af34593781e5b8964f:/include/wx/os2/window.h diff --git a/include/wx/os2/window.h b/include/wx/os2/window.h index e7e3812265..fe491594e3 100644 --- a/include/wx/os2/window.h +++ b/include/wx/os2/window.h @@ -1,67 +1,65 @@ ///////////////////////////////////////////////////////////////////////////// // Name: window.h // Purpose: wxWindow class -// Author: Julian Smart +// Author: David Webster // Modified by: -// Created: 01/02/97 +// Created: ??/??/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows licence +// Copyright: (c) AUTHOR +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_WINDOW_H_ #define _WX_WINDOW_H_ -// --------------------------------------------------------------------------- -// headers -// --------------------------------------------------------------------------- - #ifdef __GNUG__ - #pragma interface "window.h" +#pragma interface "window.h" #endif -// #include "wx/msw/winundef.h" +#define INCL_DOS +#define INCL_PM +#include -// VZ: apparently some version of Windows send extra mouse move messages after -// a mouse click. My tests under NT 4.0 and 95 didn't show it so I'm -// tempted to think that it was just an effect of a poor mouse and so the -// code to work around this is currently disabled - just define this as 1 -// to reenable it -#define wxUSE_MOUSEEVENT_HACK 0 +#define wxKEY_SHIFT 1 +#define wxKEY_CTRL 2 // --------------------------------------------------------------------------- // forward declarations // --------------------------------------------------------------------------- +class WXDLLEXPORT wxWindow; class WXDLLEXPORT wxButton; -// --------------------------------------------------------------------------- -// constants -// --------------------------------------------------------------------------- +#if wxUSE_DRAG_AND_DROP +class WXDLLEXPORT wxDropTarget; +#endif -// FIXME does anybody use those? they're unused by wxWindows... -enum -{ - wxKEY_SHIFT = 1, - wxKEY_CTRL = 2 -}; +#if wxUSE_WX_RESOURCES +class WXDLLEXPORT wxResourceTable; +class WXDLLEXPORT wxItemResource; +#endif -// --------------------------------------------------------------------------- -// wxWindow declaration for MSW -// --------------------------------------------------------------------------- -class WXDLLEXPORT wxWindow : public wxWindowBase +WXDLLEXPORT_DATA(extern const char*) wxPanelNameStr; + +WXDLLEXPORT_DATA(extern const wxSize) wxDefaultSize; +WXDLLEXPORT_DATA(extern const wxPoint) wxDefaultPosition; + +class WXDLLEXPORT wxWindow: public wxWindowBase { - DECLARE_DYNAMIC_CLASS(wxWindow); + DECLARE_ABSTRACT_CLASS(wxWindow) + + friend class wxDC; + friend class wxPaintDC; public: - wxWindow() { Init(); } - - wxWindow(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr) + wxWindow() { Init(); }; + inline wxWindow( wxWindow* parent + ,wxWindowID id + ,const wxPoint& pos = wxDefaultPosition + ,const wxSize& size = wxDefaultSize + ,long style = 0 + ,const wxString& name = wxPanelNameStr + ) { Init(); Create(parent, id, pos, size, style, name); @@ -69,121 +67,174 @@ public: virtual ~wxWindow(); - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr); + bool Create( wxWindow* parent + ,wxWindowID id + ,const wxPoint& pos = wxDefaultPosition + ,const wxSize& size = wxDefaultSize + ,long style = 0 + ,const wxString& name = wxPanelNameStr + ); - // implement base class pure virtuals - virtual void SetTitle( const wxString& title); - virtual wxString GetTitle() const; +// --------------------------------------------------------------------------- +// wxWindowBase pure virtual implementations +// --------------------------------------------------------------------------- + // Z order virtual void Raise(); virtual void Lower(); + // Set the focus to this window + virtual void SetFocus(); + // Warp the pointer the given position + virtual void WarpPointer(int x_pos, int y_pos) ; + // Capture/release mouse + virtual void CaptureMouse(); + virtual void ReleaseMouse(); + // Send the window a refresh event + virtual void Refresh(bool eraseBack = TRUE, const wxRect *rect = NULL); + // Clear the window + virtual void Clear(); + // Set window's font + virtual bool SetFont(const wxFont& f); + // Get character size + virtual int GetCharHeight() const; + virtual int GetCharWidth() const; + virtual void GetTextExtent( const wxString& string + ,int* x + ,int* y + ,int* descent = NULL + ,int* externalLeading = NULL + ,const wxFont* theFont = NULL + ) const; + + // Configure the window's scrollbar + virtual void SetScrollbar( int orient + ,int pos + ,int thumbVisible + ,int range + ,bool refresh = TRUE + ); + 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 wxRect* rect = NULL + ); +#if wxUSE_DRAG_AND_DROP + void SetDropTarget(wxDropTarget *pDropTarget); +#endif + // coordinates translation + virtual void DoClientToScreen( int *x, int *y ) const; + virtual void DoScreenToClient( int *x, int *y ) const; - virtual bool Show( bool show = TRUE ); - virtual bool Enable( bool enable = TRUE ); + // retrieve the position/size of the window + virtual void DoGetPosition( int *x, int *y ) const; + virtual void DoGetSize( int *width, int *height ) const; + virtual void DoGetClientSize( int *width, int *height ) const; - virtual void SetFocus(); + // this is the virtual function to be overriden in any derived class which + // wants to change how SetSize() or Move() works - it is called by all + // versions of these functions in the base class + virtual void DoSetSize(int x, int y, + int width, int height, + int sizeFlags = wxSIZE_AUTO); - virtual bool Reparent( wxWindow *newParent ); + // same as DoSetSize() for the client size + virtual void DoSetClientSize(int width, int height); + virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); - virtual void WarpPointer(int x, int y); - virtual void CaptureMouse(); - virtual void ReleaseMouse(); +// --------------------------------------------------------------------------- +// wxWindowBase virtual implementations that need to be overriden +// --------------------------------------------------------------------------- - virtual void Refresh( bool eraseBackground = TRUE, - const wxRect *rect = (const wxRect *) NULL ); - virtual void Clear(); + // Fit the window around the items + virtual void Fit(); + // Show or hide the window + virtual bool Show(bool show); // check if base implementation is OK + // Enable or disable the window + virtual bool Enable(bool enable); // check if base implementation is OK + // Set the cursor + virtual bool SetCursor(const wxCursor& cursor); // check if base implementation is OK - virtual bool SetCursor( const wxCursor &cursor ); - virtual bool SetFont( const wxFont &font ); +// --------------------------------------------------------------------------- +// additional functions +// --------------------------------------------------------------------------- - virtual int GetCharHeight() const; - virtual int GetCharWidth() const; - virtual void GetTextExtent(const wxString& string, - int *x, int *y, - int *descent = (int *) NULL, - int *externalLeading = (int *) NULL, - const wxFont *theFont = (const wxFont *) NULL) - const; + // Dialog support: override these and call + // base class members to add functionality + // that can't be done using validators. + void SetClientSize( int width, int height ) + { DoSetClientSize(width, height); } - virtual bool PopupMenu( wxMenu *menu, int x, int y ); + void SetClientSize( const wxSize& size ) + { DoSetClientSize(size.x, size.y); } - virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); + void SetClientSize(const wxRect& rect) + { SetClientSize( rect.width, rect.height ); } - virtual void SetScrollbar( int orient, int pos, int thumbVisible, - int range, bool refresh = TRUE ); - virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE ); - virtual int GetScrollPos( int orient ) const; - virtual int GetScrollThumb( int orient ) const; - virtual int GetScrollRange( int orient ) const; - virtual void ScrollWindow( int dx, int dy, - const wxRect* rect = (wxRect *) NULL ); + // Validate controls. If returns FALSE, + // validation failed: don't quit + virtual bool Validate(); -#if wxUSE_DRAG_AND_DROP - virtual void SetDropTarget( wxDropTarget *dropTarget ); -#endif // wxUSE_DRAG_AND_DROP + // Return code for dialogs + inline void SetReturnCode(int retCode); + inline int GetReturnCode(); - // Accept files for dragging - virtual void DragAcceptFiles(bool accept); -#if WXWIN_COMPATIBILITY - // Set/get scroll attributes - virtual void SetScrollRange(int orient, int range, bool refresh = TRUE); - virtual void SetScrollPage(int orient, int page, bool refresh = TRUE); - virtual int OldGetScrollRange(int orient) const; - virtual int GetScrollPage(int orient) const; + // Get the window with the focus + static wxWindow *FindFocus(); - // event handlers - // Handle a control command - virtual void OnCommand(wxWindow& win, wxCommandEvent& event); + // Accept files for dragging + virtual void DragAcceptFiles(bool accept); - // Override to define new behaviour for default action (e.g. double - // clicking on a listbox) - virtual void OnDefaultAction(wxControl * WXUNUSED(initiatingItem)) { } -#endif // WXWIN_COMPATIBILITY + // Most windows have the concept of a label; for frames, this is the + // title; for items, this is the label or button text. + inline virtual wxString GetLabel() const { return GetTitle(); } #if wxUSE_CARET && WXWIN_COMPATIBILITY - // caret manipulation (old MSW only functions, see wxCaret class for the - // new API) - void CreateCaret(int w, int h); - void CreateCaret(const wxBitmap *bitmap); - void DestroyCaret(); - void ShowCaret(bool show); - void SetCaretPos(int x, int y); - void GetCaretPos(int *x, int *y) const; -#endif // wxUSE_CARET - - // Native resource loading (implemented in src/msw/nativdlg.cpp) - // FIXME: should they really be all virtual? - virtual bool LoadNativeDialog(wxWindow* parent, wxWindowID& id); - virtual bool LoadNativeDialog(wxWindow* parent, const wxString& name); - wxWindow* GetWindowChild1(wxWindowID id); - wxWindow* GetWindowChild(wxWindowID id); - - // implementation from now on - // -------------------------- - - // simple accessors - // ---------------- + // Caret manipulation + virtual void CreateCaret(int w, int h); + virtual void CreateCaret(const wxBitmap *bitmap); + virtual void DestroyCaret(); + virtual void ShowCaret(bool show); + virtual void SetCaretPos(int x, int y); + virtual void GetCaretPos(int *x, int *y) const; +#endif - WXHWND GetHWND() const { return m_hWnd; } - void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; } - virtual WXWidget GetHandle() const { return GetHWND(); } + // Handle a control command + virtual void OnCommand(wxWindow& win, wxCommandEvent& event); + + // Get the default button, if there is one + inline virtual wxButton *GetDefaultItem() const; + inline virtual void SetDefaultItem(wxButton *but); - bool GetUseCtl3D() const { return m_useCtl3D; } - bool GetTransparentBackground() const { return m_backgroundTransparent; } - void SetTransparent(bool t = TRUE) { m_backgroundTransparent = t; } + // Override to define new behaviour for default action (e.g. double clicking + // on a listbox) + virtual void OnDefaultAction(wxControl *initiatingItem); - // event handlers - // -------------- + // EventHandlers void OnEraseBackground(wxEraseEvent& event); + void OnChar(wxKeyEvent& event); + void OnKeyDown(wxKeyEvent& event); + void OnKeyUp(wxKeyEvent& event); + void OnPaint(wxPaintEvent& event); void OnIdle(wxIdleEvent& event); + // Accessors + + WXHWND GetHWND() const { return m_hWnd; } + void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; } + virtual WXWidget GetHandle() const { return GetHWND(); } + public: +// --------------------------------------------------------------------------- +// IMPLEMENTATION +// --------------------------------------------------------------------------- + // For implementation purposes - sometimes decorations make the client area // smaller virtual wxPoint GetClientAreaOrigin() const; @@ -196,241 +247,74 @@ public: void SubclassWin(WXHWND hWnd); void UnsubclassWin(); - WXFARPROC MSWGetOldWndProc() const { return m_oldWndProc; } - void MSWSetOldWndProc(WXFARPROC proc) { m_oldWndProc = proc; } + WXFARPROC OS2GetOldWndProc() const { return m_oldWndProc; } + void OS2SetOldWndProc(WXFARPROC proc) { m_oldWndProc = proc; } - wxWindow *FindItem(int id) const; + wxWindow *FindItem(long id) const; wxWindow *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const; - // Make a Windows extended style from the given wxWindows window style - virtual WXDWORD MakeExtendedStyle(long style, bool eliminateBorders = TRUE); // Determine whether 3D effects are wanted - virtual WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D); + WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) const; - // MSW only: TRUE if this control is part of the main control + // PM only: TRUE if this control is part of the main control virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return FALSE; }; - // returns TRUE if the window has been created - bool MSWCreate(int id, - wxWindow *parent, - const wxChar *wclass, - wxWindow *wx_win, - const wxChar *title, - int x, int y, int width, int height, - WXDWORD style, - const wxChar *dialog_template = NULL, - WXDWORD exendedStyle = 0); - virtual bool MSWCommand(WXUINT param, WXWORD id); - -#if WXWIN_COMPATIBILITY - wxObject *GetChild(int number) const; - virtual void MSWDeviceToLogical(float *x, float *y) const; -#endif // WXWIN_COMPATIBILITY - - // Create an appropriate wxWindow from a HWND - virtual wxWindow* CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd); - - // Make sure the window style reflects the HWND style (roughly) - virtual void AdoptAttributesFromHWND(); - - // Setup background and foreground colours correctly - virtual void SetupColours(); - - // ------------------------------------------------------------------------ - // helpers for message handlers: these perform the same function as the - // message crackers from - they unpack WPARAM and LPARAM into - // the correct parameters - // ------------------------------------------------------------------------ - - void UnpackCommand(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *id, WXHWND *hwnd, WXWORD *cmd); - void UnpackActivate(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *state, WXWORD *minimized, WXHWND *hwnd); - void UnpackScroll(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *code, WXWORD *pos, WXHWND *hwnd); - void UnpackCtlColor(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *nCtlColor, WXHDC *hdc, WXHWND *hwnd); - void UnpackMenuSelect(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *item, WXWORD *flags, WXHMENU *hmenu); - - // ------------------------------------------------------------------------ - // internal handlers for MSW messages: all handlers return a boolen value: - // TRUE means that the handler processed the event and FALSE that it didn't - // ------------------------------------------------------------------------ - - // there are several cases where we have virtual functions for Windows - // message processing: this is because these messages often require to be - // processed in a different manner in the derived classes. For all other - // messages, however, we do *not* have corresponding MSWOnXXX() function - // and if the derived class wants to process them, it should override - // MSWWindowProc() directly. - - // scroll event (both horizontal and vertical) - virtual bool MSWOnScroll(int orientation, WXWORD nSBCode, - WXWORD pos, WXHWND control); - - // child control notifications -#ifdef __WIN95__ - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); -#endif // __WIN95__ - - // owner-drawn controls need to process these messages - virtual bool MSWOnDrawItem(int id, WXDRAWITEMSTRUCT *item); - virtual bool MSWOnMeasureItem(int id, WXMEASUREITEMSTRUCT *item); - - // the rest are not virtual - bool HandleCreate(WXLPCREATESTRUCT cs, bool *mayCreate); - bool HandleInitDialog(WXHWND hWndFocus); - bool HandleDestroy(); - - bool HandlePaint(); - bool HandleEraseBkgnd(WXHDC pDC); - - bool HandleMinimize(); - bool HandleMaximize(); - bool HandleSize(int x, int y, WXUINT flag); - bool HandleGetMinMaxInfo(void *mmInfo); - - bool HandleShow(bool show, int status); - bool HandleActivate(int flag, bool minimized, WXHWND activate); - - bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control); - bool HandleSysCommand(WXWPARAM wParam, WXLPARAM lParam); - - bool HandleCtlColor(WXHBRUSH *hBrush, - WXHDC hdc, - WXHWND hWnd, - WXUINT nCtlColor, - WXUINT message, - WXWPARAM wParam, - WXLPARAM lParam); - - bool HandlePaletteChanged(WXHWND hWndPalChange); - bool HandleQueryNewPalette(); - bool HandleSysColorChange(); - - bool HandleQueryEndSession(long logOff, bool *mayEnd); - bool HandleEndSession(bool endSession, long logOff); - - bool HandleSetFocus(WXHWND wnd); - bool HandleKillFocus(WXHWND wnd); - - bool HandleDropFiles(WXWPARAM wParam); - - bool HandleMouseEvent(WXUINT msg, int x, int y, WXUINT flags); - bool HandleMouseMove(int x, int y, WXUINT flags); - - bool HandleChar(WXWORD wParam, WXLPARAM lParam, bool isASCII = FALSE); - bool HandleKeyDown(WXWORD wParam, WXLPARAM lParam); - bool HandleKeyUp(WXWORD wParam, WXLPARAM lParam); - - bool HandleQueryDragIcon(WXHICON *hIcon); - - bool HandleSetCursor(WXHWND hWnd, short nHitTest, int mouseMsg); - - // Window procedure - virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - - // Calls an appropriate default window procedure - virtual long MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - virtual bool MSWProcessMessage(WXMSG* pMsg); - virtual bool MSWTranslateMessage(WXMSG* pMsg); - virtual void MSWDestroyWindow(); - - // Detach "Window" menu from menu bar so it doesn't get deleted - void MSWDetachWindowMenu(); - - // this function should return the brush to paint the window background - // with or 0 for the default brush - virtual WXHBRUSH OnCtlColor(WXHDC hDC, - WXHWND hWnd, - WXUINT nCtlColor, - WXUINT message, - WXWPARAM wParam, - WXLPARAM lParam); - -#if WXWIN_COMPATIBILITY - void SetShowing(bool show) { (void)Show(show); } - bool IsUserEnabled() const { return IsEnabled(); } -#endif // WXWIN_COMPATIBILITY + // Executes the default message + virtual long Default(); + + // Constraint implementation + void UnsetConstraints(wxLayoutConstraints *c); + // Back-pointer to other windows we're involved with, so if we delete + // this window, we must delete any constraints we're involved with. - // Responds to colour changes: passes event on to children. - void OnSysColourChanged(wxSysColourChangedEvent& event); + wxObject *GetChild(int number) const ; - // initialize various fields of wxMouseEvent (common part of MSWOnMouseXXX) - void InitMouseEvent(wxMouseEvent& event, int x, int y, WXUINT flags); + // Transfers data to any child controls + void OnInitDialog(wxInitDialogEvent& event); protected: - // the window handle - WXHWND m_hWnd; - // the old window proc (we subclass all windows) - WXFARPROC m_oldWndProc; + // Caret data + int m_caretWidth; + int m_caretHeight; + bool m_caretEnabled; + bool m_caretShown; - // additional (MSW specific) flags - bool m_useCtl3D:1; // Using CTL3D for this control - bool m_backgroundTransparent:1; - bool m_mouseInWindow:1; - bool m_doubleClickAllowed:1; - bool m_winCaptured:1; + wxButton * m_defaultItem; + +public: + WXFARPROC m_oldWndProc; + int m_returnCode; + bool m_isBeingDeleted; + bool m_isShown; + bool m_winCaptured; + bool m_mouseInWindow; + bool m_backgroundTransparent; + // handles + WXHWND m_hWnd; + WXHMENU m_hMenu; // Menu, if any // the size of one page for scrolling int m_xThumbSize; int m_yThumbSize; + long m_lDlgCode; -#if wxUSE_MOUSEEVENT_HACK - // the coordinates of the last mouse event and the type of it - long m_lastMouseX, - m_lastMouseY; - int m_lastMouseEvent; -#endif // wxUSE_MOUSEEVENT_HACK - - WXHMENU m_hMenu; // Menu, if any - - // the return value of WM_GETDLGCODE handler - long m_lDlgCode; - - // implement the base class pure virtuals - virtual void DoClientToScreen( int *x, int *y ) const; - virtual void DoScreenToClient( int *x, int *y ) const; - virtual void DoGetPosition( int *x, int *y ) const; - virtual void DoGetSize( int *width, int *height ) const; - virtual void DoGetClientSize( int *width, int *height ) const; - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - virtual void DoSetClientSize(int width, int height); - - // get the size which best suits the window: e.g., for a static text it - // will be the width and height of the text - virtual wxSize DoGetBestSize(); - -#if wxUSE_TOOLTIPS - virtual void DoSetToolTip( wxToolTip *tip ); -#endif // wxUSE_TOOLTIPS - +DECLARE_EVENT_TABLE() private: - // common part of all ctors - void Init(); - - // the (non-virtual) handlers for the events - bool HandleMove(int x, int y); - bool HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags); - - DECLARE_NO_COPY_CLASS(wxWindow); - DECLARE_EVENT_TABLE() - // Supress virtual function hiding warning - virtual bool Reparent( wxWindowBase *newParent ) - {return(wxWindowBase::Reparent(newParent));} + void Init(); + void PMDetachWindowMenu(); }; -// --------------------------------------------------------------------------- -// global functions -// --------------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////// +//// INLINES + +inline wxButton *wxWindow::GetDefaultItem() const { return m_defaultItem; } +inline void wxWindow::SetDefaultItem(wxButton *but) { m_defaultItem = but; } +inline void wxWindow::SetReturnCode(int retCode) { m_returnCode = retCode; } +inline int wxWindow::GetReturnCode() { return m_returnCode; } -// kbd code translation -WXDLLEXPORT int wxCharCodeMSWToWX(int keySym); -WXDLLEXPORT int wxCharCodeWXToMSW(int id, bool *IsVirtual); +// Get the active window. +wxWindow* WXDLLEXPORT wxGetActiveWindow(); #endif // _WX_WINDOW_H_