///////////////////////////////////////////////////////////////////////////////
-// Name: msw/toplevel.cpp
-// Purpose: implements wxTopLevelWindow for MSW
+// Name: os2/toplevel.cpp
+// Purpose: implements wxTopLevelWindow for OS/2
// Author: Vadim Zeitlin
// Modified by:
// Created: 30.12.01
// RCS-ID: $Id$
// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
-// License: wxWindows license
+// License: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
- #pragma implementation "toplevel.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/toplevel.h"
+ #include "wx/dialog.h"
#include "wx/string.h"
#include "wx/log.h"
#include "wx/intl.h"
#include "wx/frame.h"
#include "wx/control.h"
#include "wx/containr.h" // wxSetFocusToChild()
- #include "wx/module.h" // wxSetFocusToChild()
#endif //WX_PRECOMP
+#include "wx/module.h" // wxSetFocusToChild()
#include "wx/os2/private.h"
// ----------------------------------------------------------------------------
// globals
// ----------------------------------------------------------------------------
-// list of all frames and modeless dialogs
-wxWindowList wxModelessWindows;
-
-// the name of the default wxWindows class
+// the name of the default wxWidgets class
extern void wxAssociateWinWithHandle( HWND hWnd
,wxWindowOS2* pWin
);
// Dialog window proc
MRESULT EXPENTRY wxDlgProc( HWND WXUNUSED(hWnd)
,UINT uMessage
- ,MPARAM WXUNUSED(wParam)
- ,MPARAM WXUNUSED(lParam)
+ ,void * WXUNUSED(wParam)
+ ,void * WXUNUSED(lParam)
)
{
switch(uMessage)
//
// Restore focus to the child which was last focused
//
- wxLogTrace(_T("focus"), _T("wxTLW %08x activated."), m_hWnd);
+ wxLogTrace(_T("focus"), _T("wxTLW %08lx activated."), m_hWnd);
wxWindow* pParent = m_pWinLastFocused ? m_pWinLastFocused->GetParent()
: NULL;
}
wxLogTrace(_T("focus"),
- _T("wxTLW %08x deactivated, last focused: %08x."),
+ _T("wxTLW %08lx deactivated, last focused: %08lx."),
m_hWnd,
m_pWinLastFocused ? GetHwndOf(m_pWinLastFocused)
: NULL);
,pdwExflags
);
- if (lStyle == wxDEFAULT_FRAME_STYLE)
+ if ((lStyle & wxDEFAULT_FRAME_STYLE) == wxDEFAULT_FRAME_STYLE)
lMsflags |= FCF_SIZEBORDER | FCF_TITLEBAR | FCF_SYSMENU |
FCF_MINMAX | FCF_TASKLIST;
+
+ if ((lStyle & wxCAPTION) == wxCAPTION)
+ lMsflags |= FCF_TASKLIST;
else
+ lMsflags |= FCF_NOMOVEWITHOWNER;
+
+ if ((lStyle & wxVSCROLL) == wxVSCROLL)
+ lMsflags |= FCF_VERTSCROLL;
+ if ((lStyle & wxHSCROLL) == wxHSCROLL)
+ lMsflags |= FCF_HORZSCROLL;
+ if (lStyle & wxMINIMIZE_BOX)
+ lMsflags |= FCF_MINBUTTON;
+ if (lStyle & wxMAXIMIZE_BOX)
+ lMsflags |= FCF_MAXBUTTON;
+ if (lStyle & wxTHICK_FRAME)
+ lMsflags |= FCF_DLGBORDER;
+ if (lStyle & wxSYSTEM_MENU)
+ lMsflags |= FCF_SYSMENU;
+ if (lStyle & wxCAPTION)
+ lMsflags |= FCF_TASKLIST;
+ if (lStyle & wxCLIP_CHILDREN)
{
- if ((lStyle & wxCAPTION) == wxCAPTION)
- lMsflags |= FCF_TASKLIST;
- else
- lMsflags |= FCF_NOMOVEWITHOWNER;
-
- if ((lStyle & wxVSCROLL) == wxVSCROLL)
- lMsflags |= FCF_VERTSCROLL;
- if ((lStyle & wxHSCROLL) == wxHSCROLL)
- lMsflags |= FCF_HORZSCROLL;
- if (lStyle & wxMINIMIZE_BOX)
- lMsflags |= FCF_MINBUTTON;
- if (lStyle & wxMAXIMIZE_BOX)
- lMsflags |= FCF_MAXBUTTON;
- if (lStyle & wxTHICK_FRAME)
- lMsflags |= FCF_DLGBORDER;
- if (lStyle & wxSYSTEM_MENU)
- lMsflags |= FCF_SYSMENU;
- if (lStyle & wxCAPTION)
- lMsflags |= FCF_TASKLIST;
- if (lStyle & wxCLIP_CHILDREN)
- {
- // Invalid for frame windows under PM
- }
+ // Invalid for frame windows under PM
+ }
- if (lStyle & wxTINY_CAPTION_VERT)
- lMsflags |= FCF_TASKLIST;
- if (lStyle & wxTINY_CAPTION_HORIZ)
- lMsflags |= FCF_TASKLIST;
+ if (lStyle & wxTINY_CAPTION_VERT)
+ lMsflags |= FCF_TASKLIST;
+ if (lStyle & wxTINY_CAPTION_HORIZ)
+ lMsflags |= FCF_TASKLIST;
- if ((lStyle & wxTHICK_FRAME) == 0)
- lMsflags |= FCF_BORDER;
- if (lStyle & wxFRAME_TOOL_WINDOW)
- *pdwExflags = kFrameToolWindow;
+ if ((lStyle & wxTHICK_FRAME) == 0)
+ lMsflags |= FCF_BORDER;
+ if (lStyle & wxFRAME_TOOL_WINDOW)
+ *pdwExflags = kFrameToolWindow;
+
+ if (lStyle & wxSTAY_ON_TOP)
+ lMsflags |= FCF_SYSMODAL;
- if (lStyle & wxSTAY_ON_TOP)
- lMsflags |= FCF_SYSMODAL;
- }
return lMsflags;
} // end of wxTopLevelWindowOS2::OS2GetCreateWindowFlags
return (WXHWND)hWndParent;
} // end of wxTopLevelWindowOS2::OS2GetParent
-bool wxTopLevelWindowOS2::CreateDialog(
- ULONG ulDlgTemplate
-, const wxString& rsTitle
-, const wxPoint& rPos
-, const wxSize& rSize
-)
+
+bool wxTopLevelWindowOS2::CreateDialog( ULONG ulDlgTemplate,
+ const wxString& WXUNUSED(rsTitle),
+ const wxPoint& rPos,
+ const wxSize& rSize )
{
wxWindow* pParent = GetParent();
if ( !m_hWnd )
{
- wxFAIL_MSG(_("Did you forget to include wx/os2/wx.rc in your resources?"));
+ wxFAIL_MSG(wxT("Did you forget to include wx/os2/wx.rc in your resources?"));
- wxLogSysError(_("Can't create dialog using template '%ul'"), ulDlgTemplate);
+ wxLogSysError(wxT("Can't create dialog using template '%ld'"), ulDlgTemplate);
return FALSE;
}
nX = (vSizeDpy.x - nWidth) / 2;
nY = (vSizeDpy.y - nHeight) / 2;
}
- m_backgroundColour.Set(wxString("LIGHT GREY"));
+ m_backgroundColour.Set(wxString(wxT("LIGHT GREY")));
LONG lColor = (LONG)m_backgroundColour.GetPixel();
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError("Error creating frame. Error: %s\n", sError);
+ wxLogError(_T("Error creating frame. Error: %s\n"), sError.c_str());
return FALSE;
}
wxAssociateWinWithHandle(m_hWnd, this);
wxAssociateWinWithHandle(m_hFrame, this);
- m_backgroundColour.Set(wxString("MEDIUM GREY"));
+ m_backgroundColour.Set(wxString(wxT("MEDIUM GREY")));
LONG lColor = (LONG)m_backgroundColour.GetPixel();
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError("Error creating frame. Error: %s\n", sError);
+ wxLogError(_T("Error creating frame. Error: %s\n"), sError.c_str());
return FALSE;
}
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError("Error sizing frame. Error: %s\n", sError);
+ wxLogError(_T("Error sizing frame. Error: %s\n"), sError.c_str());
return FALSE;
}
lStyle = ::WinQueryWindowULong( m_hWnd
, wxWindowID vId
, const wxString& rsTitle
, const wxPoint& rPos
-, const wxSize& rSize
+, const wxSize& rSizeOrig
, long lStyle
, const wxString& rsName
)
m_windowStyle = lStyle;
SetName(rsName);
m_windowId = vId == -1 ? NewControlId() : vId;
+
+ // always create a frame of some reasonable, even if arbitrary, size (at
+ // least for MSW compatibility)
+ wxSize rSize = rSizeOrig;
+ if ( rSize.x == -1 || rSize.y == -1 )
+ {
+ wxSize sizeDpy = wxGetDisplaySize();
+ if ( rSize.x == -1 )
+ rSize.x = sizeDpy.x / 3;
+ if ( rSize.y == -1 )
+ rSize.y = sizeDpy.y / 5;
+ }
+
wxTopLevelWindows.Append(this);
if (pParent)
pParent->AddChild(this);
wxTopLevelWindowOS2::~wxTopLevelWindowOS2()
{
- if (wxModelessWindows.Find(this))
- wxModelessWindows.DeleteObject(this);
-
//
// After destroying an owned window, Windows activates the next top level
// window in Z order but it may be different from our owner (to reproduce
{
int nShowCmd;
SWP vSwp;
- RECTL vRect;
if (bShow != IsShown() )
{
wxActivateEvent vEvent(wxEVT_ACTIVATE, TRUE, m_windowId);
::WinQueryWindowPos(m_hFrame, &vSwp);
- m_bIconized = vSwp.fl & SWP_MINIMIZE;
+ m_bIconized = ( vSwp.fl & SWP_MINIMIZE ) == SWP_MINIMIZE ;
::WinQueryWindowPos(m_hWnd, &m_vSwpClient);
::WinSendMsg(m_hFrame, WM_UPDATEFRAME, (MPARAM)~0, 0);
::WinQueryWindowPos(m_hWnd, &vSwp);
HWND hWndParent = GetHwndOf(GetParent());
::WinQueryWindowPos(hWndParent, &vSwp);
- m_bIconized = vSwp.fl & SWP_MINIMIZE;
+ m_bIconized = (vSwp.fl & SWP_MINIMIZE)==SWP_MINIMIZE;
::WinEnableWindow(hWndParent, TRUE);
}
}
// We can't maximize the hidden frame because it shows it as well, so
// just remember that we should do it later in this case
//
- m_bMaximizeOnShow = TRUE;
+ m_bMaximizeOnShow = bMaximize;
}
} // end of wxTopLevelWindowOS2::Maximize
bool wxTopLevelWindowOS2::IsMaximized() const
{
- bool bIconic;
-
::WinQueryWindowPos(m_hFrame, (PSWP)&m_vSwp);
- return (m_vSwp.fl & SWP_MAXIMIZE);
+ return (m_vSwp.fl & SWP_MAXIMIZE) == SWP_MAXIMIZE;
} // end of wxTopLevelWindowOS2::IsMaximized
void wxTopLevelWindowOS2::Iconize(
// wxTopLevelWindowOS2 fullscreen
// ----------------------------------------------------------------------------
-bool wxTopLevelWindowOS2::ShowFullScreen(
- bool bShow
-, long lStyle
-)
+bool wxTopLevelWindowOS2::ShowFullScreen( bool bShow,
+ long lStyle )
{
if (bShow)
{
if (IsFullScreen())
- return FALSE;
+ return false;
- m_bFsIsShowing = TRUE;
+ m_bFsIsShowing = true;
m_lFsStyle = lStyle;
//
//
// Decide which window lStyle flags to turn off
//
- LONG lNewStyle = m_lFsOldWindowStyle;
- LONG lOffFlags = 0;
+ LONG lNewStyle = m_lFsOldWindowStyle;
+ LONG lOffFlags = 0;
if (lStyle & wxFULLSCREEN_NOBORDER)
lOffFlags |= FCF_BORDER;
//
// Resize to the size of the desktop
//
- int nWidth;
- int nHeight;
- RECTL vRect = wxGetWindowRect(HWND_DESKTOP);
+ int nWidth;
+ int nHeight;
+ RECTL vRect = wxGetWindowRect(HWND_DESKTOP);
nWidth = vRect.xRight - vRect.xLeft;
nHeight = vRect.yTop - vRect.yBottom;
- SetSize( nWidth
- ,nHeight
- );
+ SetSize( nWidth, nHeight );
//
// Now flush the window style cache and actually go full-screen
,SWP_SIZE | SWP_MOVE
);
- wxSizeEvent vEvent( wxSize( nWidth
- ,nHeight
- )
- ,GetId()
- );
-
+ wxSize full( nWidth, nHeight );
+ wxSizeEvent vEvent( full, GetId() );
GetEventHandler()->ProcessEvent(vEvent);
- return TRUE;
+ return true;
}
else
{
if (!IsFullScreen())
- return FALSE;
+ return false;
- m_bFsIsShowing = FALSE;
+ m_bFsIsShowing = false;
Maximize(m_bFsIsMaximized);
::WinSetWindowULong( (HWND)GetHWND()
,QWL_STYLE
,m_vFsOldSize.height
,SWP_SIZE | SWP_MOVE
);
- return TRUE;
+ return true;
}
} // end of wxTopLevelWindowOS2::ShowFullScreen
static const wxChar* zHIDDEN_PARENT_CLASS = _T("wxTLWHiddenParent");
if (!::WinRegisterClass( wxGetInstance()
- ,zHIDDEN_PARENT_CLASS
+ ,(PSZ)zHIDDEN_PARENT_CLASS
,NULL
,0
,sizeof(ULONG)
}
}
m_shWnd = ::WinCreateWindow( HWND_DESKTOP
- ,m_szClassName
+ ,(PSZ)m_szClassName
,""
,0L
,(LONG)0L