/////////////////////////////////////////////////////////////////////////////
-// Name: window.h
+// Name: wx/os2/window.h
// Purpose: wxWindow class
// Author: David Webster
// Modified by:
#include <os2.h>
+// ---------------------------------------------------------------------------
+// forward declarations
+// ---------------------------------------------------------------------------
+#ifndef CW_USEDEFAULT
+# define CW_USEDEFAULT ((int)0x80000000)
+#endif
+
// ---------------------------------------------------------------------------
// forward declarations
// ---------------------------------------------------------------------------
// constants
// ---------------------------------------------------------------------------
-// FIXME does anybody use those? they're unused by wxWindows...
+#if WXWIN_COMPATIBILITY_2_4
+// they're unused by wxWidgets...
enum
{
wxKEY_SHIFT = 1,
wxKEY_CTRL = 2
};
+#endif
// ---------------------------------------------------------------------------
// wxWindow declaration for OS/2 PM
// ---------------------------------------------------------------------------
-class WXDLLEXPORT wxWindow : public wxWindowBase
+class WXDLLEXPORT wxWindowOS2 : public wxWindowBase
{
public:
- wxWindow() { Init(); }
-
- wxWindow( wxWindow* pParent
- ,wxWindowID vId
- ,const wxPoint& rPos = wxDefaultPosition
- ,const wxSize& rSize = wxDefaultSize
- ,long lStyle = 0
- ,const wxString& rName = wxPanelNameStr
- )
+ wxWindowOS2()
+ {
+ Init();
+ }
+
+ wxWindowOS2( wxWindow* pParent
+ ,wxWindowID vId
+ ,const wxPoint& rPos = wxDefaultPosition
+ ,const wxSize& rSize = wxDefaultSize
+ ,long lStyle = 0
+ ,const wxString& rName = wxPanelNameStr
+ )
{
Init();
Create( pParent
);
}
- virtual ~wxWindow();
+ virtual ~wxWindowOS2();
bool Create( wxWindow* pParent
,wxWindowID vId
);
// 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 bool Enable(bool bEnable = true);
virtual void SetFocus(void);
+ virtual void SetFocusFromKbd(void);
virtual bool Reparent(wxWindow* 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 Freeze(void);
+ virtual void Update(void);
+ virtual void Thaw(void);
+ virtual void SetWindowStyleFlag(long lStyle);
virtual bool SetCursor(const wxCursor& rCursor);
virtual bool SetFont(const wxFont& rFont);
virtual int GetCharHeight(void) const;
,int* pExternalLeading = (int *)NULL
,const wxFont* pTheFont = (const wxFont *)NULL
) const;
+#if wxUSE_MENUS_NATIVE
virtual bool DoPopupMenu( wxMenu* pMenu
,int nX
,int nY
);
+#endif // wxUSE_MENUS_NATIVE
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;
,const wxRect* pRect = (wxRect *)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
// 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
);
wxWindow* GetWindowChild1(wxWindowID vId);
wxWindow* GetWindowChild(wxWindowID vId);
+#endif //__WXUNIVERSAL__
// implementation from now on
// --------------------------
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 SetTransparent(bool bT = true) { m_bBackgroundTransparent = bT; }
// event handlers
// --------------
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);
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( int nId
- ,wxWindow* pParent
- ,const wxChar* zWclass
- ,wxWindow* pWxWin
- ,const wxChar* zTitle
- ,int nX
- ,int nY
- ,int nWidth
- ,int nHeight
- ,WXDWORD dwStyle
- ,const wxChar* zDialogTemplate = NULL
- ,WXDWORD dwExendedStyle = 0
- );
+ // 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
// 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);
// ------------------------------------------------------------------------
// 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
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
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);
,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);
,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
,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
,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);
,WXUINT uFlags
);
+ void MoveChildren(int nDiff);
+ PSWP GetSwp(void) {return &m_vWinSwp;}
+
protected:
// PM can't create some MSW styles natively but can perform these after
// creation by sending messages
// the old window proc (we subclass all windows)
WXFARPROC m_fnOldWndProc;
- // additional (MSW specific) flags
+ // additional (OS2 specific) flags
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;
// the size of one page for scrolling
int m_nXThumbSize;
,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
- // ::MoveWindow() except for composite controls which will want to arrange
+ // ::WinSetWindowPos() except for composite controls which will want to arrange
// themselves inside the given rectangle
virtual void DoMoveWindow( int nX
,int nY
virtual void DoSetToolTip(wxToolTip* pTip);
#endif // wxUSE_TOOLTIPS
+ int GetOS2ParentHeight(wxWindowOS2* pParent);
+
private:
// common part of all ctors
void Init(void);
,WXLPARAM* pResult
);
// the helper functions used by HandleChar/KeyXXX methods
- wxKeyEvent CreateKeyEvent(wxEventType evType, int id, WXLPARAM lp) const;
-
- DECLARE_DYNAMIC_CLASS(wxWindow);
- DECLARE_NO_COPY_CLASS(wxWindow);
+ wxKeyEvent CreateKeyEvent( wxEventType evType
+ ,int nId
+ ,WXLPARAM lParam = 0
+ ,WXWPARAM wParam = 0
+ ) const;
+
+ wxWindowList* m_pChildrenDisabled;
+ HWND m_hWndScrollBarHorz;
+ HWND m_hWndScrollBarVert;
+ SWP m_vWinSwp;
+
+ DECLARE_DYNAMIC_CLASS(wxWindowOS2);
+ DECLARE_NO_COPY_CLASS(wxWindowOS2)
DECLARE_EVENT_TABLE()
-private:
+
+ //
// Virtual function hiding supression
+ //
inline virtual bool Reparent(wxWindowBase* pNewParent)
- { return(wxWindowBase::Reparent(pNewParent));};
+ { return(wxWindowBase::Reparent(pNewParent));}
}; // end of wxWindow
+class wxWindowCreationHook
+{
+public:
+ wxWindowCreationHook(wxWindow* pWinBeingCreated);
+ ~wxWindowCreationHook();
+}; // end of CLASS wxWindowCreationHook
+
// ---------------------------------------------------------------------------
// global functions
// ---------------------------------------------------------------------------
WXDLLEXPORT int wxCharCodeWXToOS2( int nId
,bool* pbIsVirtual
);
-#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_