X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/210a651b4f4ef5ff4e220a100a10bb4f29e08cfd..11e3c6ef36393fb5863ea2f9601d8facd73acb12:/include/wx/os2/window.h diff --git a/include/wx/os2/window.h b/include/wx/os2/window.h index 4c3fc7391e..bd6193b209 100644 --- a/include/wx/os2/window.h +++ b/include/wx/os2/window.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: window.h +// Name: wx/os2/window.h // Purpose: wxWindow class // Author: David Webster // Modified by: @@ -26,25 +26,21 @@ // --------------------------------------------------------------------------- // forward declarations // --------------------------------------------------------------------------- - -class WXDLLEXPORT wxButton; +#ifndef CW_USEDEFAULT +# define CW_USEDEFAULT ((int)0x80000000) +#endif // --------------------------------------------------------------------------- -// constants +// forward declarations // --------------------------------------------------------------------------- -// FIXME does anybody use those? they're unused by wxWindows... -enum -{ - wxKEY_SHIFT = 1, - wxKEY_CTRL = 2 -}; +class WXDLLIMPEXP_FWD_CORE wxButton; // --------------------------------------------------------------------------- // wxWindow declaration for OS/2 PM // --------------------------------------------------------------------------- -class WXDLLEXPORT wxWindowOS2 : public wxWindowBase +class WXDLLIMPEXP_CORE wxWindowOS2 : public wxWindowBase { public: wxWindowOS2() @@ -81,57 +77,48 @@ public: ); // implement base class pure virtuals - virtual void SetTitle(const wxString& rTitle); - virtual wxString GetTitle(void) const; + virtual void SetLabel(const wxString& label); + virtual wxString GetLabel(void) const; virtual void Raise(void); virtual void Lower(void); - virtual bool Show(bool bShow = TRUE); - virtual bool Enable(bool bEnable = TRUE); + virtual bool Show(bool bShow = true); + virtual void DoEnable(bool bEnable); virtual void SetFocus(void); - virtual bool Reparent(wxWindow* pNewParent); + virtual void SetFocusFromKbd(void); + virtual bool Reparent(wxWindowBase* pNewParent); virtual void WarpPointer( int x ,int y ); - virtual void CaptureMouse(void); - virtual void ReleaseMouse(void); - virtual void Refresh( bool bEraseBackground = TRUE + virtual void Refresh( bool bEraseBackground = true ,const wxRect* pRect = (const wxRect *)NULL ); - virtual void Clear(void); + virtual void Update(void); + virtual void SetWindowStyleFlag(long lStyle); virtual bool SetCursor(const wxCursor& rCursor); virtual bool SetFont(const wxFont& rFont); virtual int GetCharHeight(void) const; virtual int GetCharWidth(void) const; - virtual void GetTextExtent( const wxString& rString - ,int* pX - ,int* pY - ,int* pDescent = (int *)NULL - ,int* pExternalLeading = (int *)NULL - ,const wxFont* pTheFont = (const wxFont *)NULL - ) const; - virtual bool DoPopupMenu( wxMenu* pMenu - ,int nX - ,int nY - ); virtual void SetScrollbar( int nOrient ,int nPos ,int nThumbVisible ,int nRange - ,bool bRefresh = TRUE + ,bool bRefresh = true ); virtual void SetScrollPos( int nOrient ,int nPos - ,bool bRefresh = TRUE + ,bool bRefresh = true ); virtual int GetScrollPos(int nOrient) const; virtual int GetScrollThumb(int nOrient) const; virtual int GetScrollRange(int nOrient) const; virtual void ScrollWindow( int nDx ,int nDy - ,const wxRect* pRect = (wxRect *)NULL + ,const wxRect* pRect = NULL ); + inline HWND GetScrollBarHorz(void) const {return m_hWndScrollBarHorz;} + inline HWND GetScrollBarVert(void) const {return m_hWndScrollBarVert;} #if wxUSE_DRAG_AND_DROP virtual void SetDropTarget(wxDropTarget* pDropTarget); #endif // wxUSE_DRAG_AND_DROP @@ -139,47 +126,7 @@ public: // Accept files for dragging virtual void DragAcceptFiles(bool bAccept); -#if WXWIN_COMPATIBILITY - // Set/get scroll attributes - virtual void SetScrollRange( int nOrient - ,int nRange - ,bool bRefresh = TRUE - ); - virtual void SetScrollPage( int nOrient - ,int nPage - ,bool bRefresh = TRUE - ); - virtual int OldGetScrollRange(int nOrient) const; - virtual int GetScrollPage(int nOrient) const; - - // - // event handlers - // - // Handle a control command - virtual void OnCommand( wxWindow& rWin - ,wxCommandEvent& rEvent - ); - - // Override to define new behaviour for default action (e.g. double - // clicking on a listbox) - virtual void OnDefaultAction(wxControl* WXUNUSED(pInitiatingItem)) { } -#endif // WXWIN_COMPATIBILITY - -#if wxUSE_CARET && WXWIN_COMPATIBILITY - void CreateCaret( int nWidth - ,int nHeight - ); - void CreateCaret(const wxBitmap* pBitmap); - void DestroyCaret(void); - void ShowCaret(bool bShow); - void SetCaretPos( int nX - ,int nY - ); - void GetCaretPos( int* pX - ,int* pY - ) const; -#endif // wxUSE_CARET - +#ifndef __WXUNIVERSAL__ // Native resource loading (implemented in src/os2/nativdlg.cpp) // FIXME: should they really be all virtual? virtual bool LoadNativeDialog( wxWindow* pParent @@ -190,6 +137,7 @@ public: ); wxWindow* GetWindowChild1(wxWindowID vId); wxWindow* GetWindowChild(wxWindowID vId); +#endif //__WXUNIVERSAL__ // implementation from now on // -------------------------- @@ -202,7 +150,7 @@ public: virtual WXWidget GetHandle(void) const { return GetHWND(); } bool GetUseCtl3D(void) const { return m_bUseCtl3D; } bool GetTransparentBackground(void) const { return m_bBackgroundTransparent; } - void SetTransparent(bool bT = TRUE) { m_bBackgroundTransparent = bT; } + void SetTransparentBackground(bool bT = true) { m_bBackgroundTransparent = bT; } // event handlers // -------------- @@ -211,16 +159,6 @@ public: void OnIdle(wxIdleEvent& rEvent); public: - // For implementation purposes - sometimes decorations make the client area - // smaller - virtual wxPoint GetClientAreaOrigin(void) const; - - // Makes an adjustment to the window position (for example, a frame that has - // a toolbar that it manages itself). - virtual void AdjustForParentClientOrigin( int& rX - ,int& rY - ,int nSizeFlags - ); // Windows subclassing void SubclassWin(WXHWND hWnd); @@ -228,51 +166,59 @@ public: WXFARPROC OS2GetOldWndProc(void) const { return m_fnOldWndProc; } void OS2SetOldWndProc(WXFARPROC fnProc) { m_fnOldWndProc = fnProc; } + // + // Return true if the window is of a standard (i.e. not wxWidgets') class + // + bool IsOfStandardClass(void) const { return m_fnOldWndProc != NULL; } wxWindow* FindItem(long lId) const; wxWindow* FindItemByHWND( WXHWND hWnd - ,bool bControlOnly = FALSE + ,bool bControlOnly = false ) const; - // Make a Windows extended style from the given wxWindows window style ?? applicable to OS/2?? + // Make a Windows extended style from the given wxWidgets window style ?? applicable to OS/2?? static WXDWORD MakeExtendedStyle( long lStyle - ,bool bEliminateBorders = TRUE + ,bool bEliminateBorders = true ); - // Determine whether 3D effects are wanted - WXDWORD Determine3DEffects( WXDWORD dwDefaultBorderStyle - ,bool* pbWant3D - ) const; - // 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 OS2Create( WXHWND hParent - ,PSZ zClass - ,const wxChar* zTitle - ,WXDWORD dwStyle - ,long lX - ,long lY - ,long lWidth - ,long lHeight - ,WXHWND hOwner - ,WXHWND hZOrder - ,unsigned long lId - ,void* pCtlData = NULL - ,void* pPresParams = NULL - ,WXDWORD dwExStyle = 0L - ); + // PM only: true if this control is part of the main control + virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return false; } + + // translate wxWidgets style flags for this control into the PM style + // and optional extended style for the corresponding native control + // + // this is the function that should be overridden in the derived classes, + // but you will mostly use OS2GetCreateWindowFlags() below + virtual WXDWORD OS2GetStyle( long lFlags + ,WXDWORD* pdwExstyle = NULL + ) const; + + // get the MSW window flags corresponding to wxWidgets ones + // + // the functions returns the flags (WS_XXX) directly and puts the ext + // (WS_EX_XXX) flags into the provided pointer if not NULL + WXDWORD OS2GetCreateWindowFlags(WXDWORD* pdwExflags = NULL) const + { return OS2GetStyle(GetWindowStyle(), pdwExflags); } + + + // get the HWND to be used as parent of this window with CreateWindow() + virtual WXHWND OS2GetParent(void) const; + + // returns true if the window has been created + bool OS2Create( PSZ zClass + ,const wxChar* zTitle + ,WXDWORD dwStyle + ,const wxPoint& rPos + ,const wxSize& rSize + ,void* pCtlData + ,WXDWORD dwExStyle + ,bool bIsChild + ); virtual bool OS2Command( WXUINT uParam ,WXWORD nId ); -#if WXWIN_COMPATIBILITY - wxObject* GetChild(int nNumber) const; - virtual void OS2DeviceToLogical( float* pfX - ,float* pfY - ) const; -#endif // WXWIN_COMPATIBILITY - +#ifndef __WXUNIVERSAL__ // Create an appropriate wxWindow from a HWND virtual wxWindow* CreateWindowFromHWND( wxWindow* pParent ,WXHWND hWnd @@ -280,6 +226,7 @@ public: // Make sure the window style reflects the HWND style (roughly) virtual void AdoptAttributesFromHWND(void); +#endif // Setup background and foreground colours correctly virtual void SetupColours(void); @@ -316,7 +263,7 @@ public: // ------------------------------------------------------------------------ // internal handlers for OS2 messages: all handlers return a boolen value: - // TRUE means that the handler processed the event and FALSE that it didn't + // true means that the handler processed the event and false that it didn't // ------------------------------------------------------------------------ // there are several cases where we have virtual functions for PM @@ -337,10 +284,12 @@ public: virtual bool OS2OnDrawItem( int nId ,WXDRAWITEMSTRUCT* pItem ); - virtual bool OS2OnMeasureItem( int nId + virtual long OS2OnMeasureItem( int nId ,WXMEASUREITEMSTRUCT* pItem ); + virtual void OnPaint(wxPaintEvent& rEvent); + // the rest are not virtual bool HandleCreate( WXLPCREATESTRUCT vCs ,bool* pMayCreate @@ -369,12 +318,12 @@ public: bool HandleSysCommand( WXWPARAM wParam ,WXLPARAM lParam ); - bool HandleWindowParams( PWNDPARAMS pParams - ,WXLPARAM lParam - ); - bool HandlePaletteChanged(); - bool HandlePresParamChanged(WXWPARAM wParam); + bool HandlePaletteChanged(void); + bool HandleQueryNewPalette(void); bool HandleSysColorChange(void); + bool HandleDisplayChange(void); + bool HandleCaptureChanged(WXHWND hBainedCapture); + bool HandleCtlColor(WXHBRUSH* hBrush); bool HandleSetFocus(WXHWND hWnd); bool HandleKillFocus(WXHWND hWnd); @@ -388,14 +337,14 @@ public: ,int nY ,WXUINT uFlags ); - bool HandleChar( WXWORD wParam + bool HandleChar( WXWPARAM wParam ,WXLPARAM lParam - ,bool bIsASCII = FALSE + ,bool bIsASCII = false ); - bool HandleKeyDown( WXWORD wParam + bool HandleKeyDown( WXWPARAM wParam ,WXLPARAM lParam ); - bool HandleKeyUp( WXWORD wParam + bool HandleKeyUp( WXWPARAM wParam ,WXLPARAM lParam ); bool HandleQueryDragIcon(WXHICON* phIcon); @@ -403,6 +352,15 @@ public: ,WXHWND hWnd ); + bool IsMouseInWindow(void) const; + bool OS2GetCreateWindowCoords( const wxPoint& rPos + ,const wxSize& rSize + ,int& rnX + ,int& rnY + ,int& rnWidth + ,int& rnHeight + ) const; + // Window procedure virtual MRESULT OS2WindowProc( WXUINT uMsg ,WXWPARAM wParam @@ -415,12 +373,10 @@ public: ,WXLPARAM lParam ); virtual bool OS2ProcessMessage(WXMSG* pMsg); + virtual bool OS2ShouldPreProcessMessage(WXMSG* pMsg); virtual bool OS2TranslateMessage(WXMSG* pMsg); virtual void OS2DestroyWindow(void); - // Detach "Window" menu from menu bar so it doesn't get deleted - void OS2DetachWindowMenu(void); - // this function should return the brush to paint the window background // with or 0 for the default brush virtual WXHBRUSH OnCtlColor( WXHDC hDC @@ -431,11 +387,6 @@ public: ,WXLPARAM lParam ); -#if WXWIN_COMPATIBILITY - void SetShowing(bool bShow) { (void)Show(show); } - bool IsUserEnabled(void) const { return IsEnabled(); } -#endif // WXWIN_COMPATIBILITY - // Responds to colour changes: passes event on to children. void OnSysColourChanged(wxSysColourChangedEvent& rEvent); @@ -446,7 +397,13 @@ public: ,WXUINT uFlags ); + void MoveChildren(int nDiff); + PSWP GetSwp(void) {return &m_vWinSwp;} + protected: + virtual void DoFreeze(void); + virtual void DoThaw(void); + // PM can't create some MSW styles natively but can perform these after // creation by sending messages typedef enum extra_flags { kFrameToolWindow = 0x0001 @@ -468,7 +425,7 @@ protected: bool m_bUseCtl3D:1; // Using CTL3D for this control bool m_bBackgroundTransparent:1; bool m_bMouseInWindow:1; - bool m_bDoubleClickAllowed:1; + bool m_bLastKeydownProcessed:1; bool m_bWinCaptured:1; WXDWORD m_dwExStyle; @@ -490,6 +447,19 @@ protected: long m_lDlgCode; // implement the base class pure virtuals + virtual void GetTextExtent( const wxString& rString + ,int* pX + ,int* pY + ,int* pDescent = NULL + ,int* pExternalLeading = NULL + ,const wxFont* pTheFont = NULL + ) const; +#if wxUSE_MENUS_NATIVE + virtual bool DoPopupMenu( wxMenu* pMenu + ,int nX + ,int nY + ); +#endif // wxUSE_MENUS_NATIVE virtual void DoClientToScreen( int* pX ,int* pY ) const; @@ -515,6 +485,9 @@ protected: ,int nHeight ); + virtual void DoCaptureMouse(void); + virtual void DoReleaseMouse(void); + // move the window to the specified location and resize it: this is called // from both DoSetSize() and DoSetClientSize() and would usually just call // ::WinSetWindowPos() except for composite controls which will want to arrange @@ -529,6 +502,8 @@ protected: virtual void DoSetToolTip(wxToolTip* pTip); #endif // wxUSE_TOOLTIPS + int GetOS2ParentHeight(wxWindowOS2* pParent); + private: // common part of all ctors void Init(void); @@ -548,28 +523,49 @@ private: ,WXLPARAM* pResult ); // the helper functions used by HandleChar/KeyXXX methods - wxKeyEvent CreateKeyEvent(wxEventType evType, int id, WXLPARAM lp) const; + wxKeyEvent CreateKeyEvent( wxEventType evType + ,int nId + ,WXLPARAM lParam = 0 + ,WXWPARAM wParam = 0 + ) const; - DECLARE_DYNAMIC_CLASS(wxWindowOS2); - DECLARE_NO_COPY_CLASS(wxWindowOS2) - DECLARE_EVENT_TABLE() -private: HWND m_hWndScrollBarHorz; HWND m_hWndScrollBarVert; + SWP m_vWinSwp; - // Virtual function hiding supression - inline virtual bool Reparent(wxWindowBase* pNewParent) - { return(wxWindowBase::Reparent(pNewParent));}; + DECLARE_DYNAMIC_CLASS(wxWindowOS2); + wxDECLARE_NO_COPY_CLASS(wxWindowOS2); + DECLARE_EVENT_TABLE() }; // end of wxWindow +class wxWindowCreationHook +{ +public: + wxWindowCreationHook(wxWindow* pWinBeingCreated); + ~wxWindowCreationHook(); +}; // end of CLASS wxWindowCreationHook + // --------------------------------------------------------------------------- // global functions // --------------------------------------------------------------------------- // kbd code translation -WXDLLEXPORT int wxCharCodeOS2ToWX(int nKeySym); -WXDLLEXPORT int wxCharCodeWXToOS2( int nId - ,bool* pbIsVirtual +WXDLLIMPEXP_CORE int wxCharCodeOS2ToWX(int nKeySym); +WXDLLIMPEXP_CORE int wxCharCodeWXToOS2( int nId + ,bool* pbIsVirtual = NULL ); -#endif - // _WX_WINDOW_H_ + +// ---------------------------------------------------------------------------- +// global objects +// ---------------------------------------------------------------------------- + +// notice that this hash must be defined after wxWindow declaration as it +// needs to "see" its dtor and not just forward declaration +#include "wx/hash.h" + +// pseudo-template HWND <-> wxWindow hash table +WX_DECLARE_HASH(wxWindowOS2, wxWindowList, wxWinHashTable); + +extern wxWinHashTable *wxWinHandleHash; + +#endif // _WX_WINDOW_H_