#pragma hdrstop
#endif
+#include "wx/toplevel.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/frame.h"
#include "wx/control.h"
#include "wx/containr.h" // wxSetFocusToChild()
+ #include "wx/settings.h"
+ #include "wx/module.h" // wxSetFocusToChild()
#endif //WX_PRECOMP
-#include "wx/module.h" // wxSetFocusToChild()
#include "wx/os2/private.h"
// ----------------------------------------------------------------------------
m_hFrame = NULLHANDLE;
memset(&m_vSwp, 0, sizeof(SWP));
memset(&m_vSwpClient, 0, sizeof(SWP));
- m_pWinLastFocused = (wxWindow *)NULL;
+ m_pWinLastFocused = NULL;
} // end of wxTopLevelWindowIOS2::Init
void wxTopLevelWindowOS2::OnActivate(
//
// Restore focus to the child which was last focused
//
- wxLogTrace(_T("focus"), _T("wxTLW %08lx activated."), m_hWnd);
+ wxLogTrace(wxT("focus"), wxT("wxTLW %08lx activated."), m_hWnd);
wxWindow* pParent = m_pWinLastFocused ? m_pWinLastFocused->GetParent()
: NULL;
pWin = pWin->GetParent();
}
- wxLogTrace(_T("focus"),
- _T("wxTLW %08lx deactivated, last focused: %08lx."),
+ wxLogTrace(wxT("focus"),
+ wxT("wxTLW %08lx deactivated, last focused: %08lx."),
m_hWnd,
m_pWinLastFocused ? GetHwndOf(m_pWinLastFocused)
: NULL);
lMsflags |= FCF_MINBUTTON;
if (lStyle & wxMAXIMIZE_BOX)
lMsflags |= FCF_MAXBUTTON;
- if (lStyle & wxTHICK_FRAME)
+ if (lStyle & wxRESIZE_BORDER)
lMsflags |= FCF_DLGBORDER;
if (lStyle & wxSYSTEM_MENU)
lMsflags |= FCF_SYSMENU;
if (lStyle & wxTINY_CAPTION_HORIZ)
lMsflags |= FCF_TASKLIST;
- if ((lStyle & wxTHICK_FRAME) == 0)
+ if ((lStyle & wxRESIZE_BORDER) == 0)
lMsflags |= FCF_BORDER;
if (lStyle & wxFRAME_TOOL_WINDOW)
*pdwExflags = kFrameToolWindow;
//
// This flag doesn't make sense then and will be ignored
//
- wxFAIL_MSG( _T("wxFRAME_FLOAT_ON_PARENT but no parent?") );
+ wxFAIL_MSG( wxT("wxFRAME_FLOAT_ON_PARENT but no parent?") );
}
else
{
nX = (vSizeDpy.x - nWidth) / 2;
nY = (vSizeDpy.y - nHeight) / 2;
}
- m_backgroundColour.Set(wxString(wxT("LIGHT GREY")));
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE));
LONG lColor = (LONG)m_backgroundColour.GetPixel();
return false;
}
+ // Convert to OS/2 coordinates
+ nY = GetOS2ParentHeight(pParent) - nY - nHeight;
+
::WinSetWindowPos( GetHwnd()
,HWND_TOP
,nX
hFrame = ::WinCreateStdWindow( hParent
,ulStyleFlags // frame-window style
,(PULONG)&lFlags // window style
- ,(PSZ)wxFrameClassName // class name
- ,(PSZ)rsTitle.c_str() // window title
+ ,wxString(wxFrameClassName).c_str() // class name
+ ,rsTitle.c_str() // window title
,0L // default client style
,NULLHANDLE // resource in executable file
,0 // resource id
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError(_T("Error creating frame. Error: %s\n"), sError.c_str());
+ wxLogError(wxT("Error creating frame. Error: %s\n"), sError.c_str());
return false;
}
wxAssociateWinWithHandle(m_hWnd, this);
wxAssociateWinWithHandle(m_hFrame, this);
- m_backgroundColour.Set(wxString(wxT("MEDIUM GREY")));
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE));
LONG lColor = (LONG)m_backgroundColour.GetPixel();
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError(_T("Error creating frame. Error: %s\n"), sError.c_str());
+ wxLogError(wxT("Error creating frame. Error: %s\n"), sError.c_str());
return false;
}
// Now size everything. If adding a menu the client will need to be resized.
//
- if (pParent)
+ if (!OS2GetCreateWindowCoords( rPos
+ ,rSize
+ ,nX
+ ,nY
+ ,nWidth
+ ,nHeight
+ ))
{
- nY = pParent->GetSize().y - (nY + nHeight);
+ nX = nWidth = (int)CW_USEDEFAULT;
}
- else
+
+ //
+ // We can't use CW_USEDEFAULT here as we're not calling CreateWindow()
+ // and passing CW_USEDEFAULT to MoveWindow() results in resizing the
+ // window to (0, 0) size which breaks quite a lot of things, e.g. the
+ // sizer calculation in wxSizer::Fit()
+ //
+ if (nWidth == (int)CW_USEDEFAULT)
+ {
+ //
+ // The exact number doesn't matter, the dialog will be resized
+ // again soon anyhow but it should be big enough to allow
+ // calculation relying on "totalSize - clientSize > 0" work, i.e.
+ // at least greater than the title bar height
+ //
+ nWidth = nHeight = 100;
+ }
+ if (nX == (int)CW_USEDEFAULT)
{
- RECTL vRect;
+ //
+ // Centre it on the screen for now - what else can we do?
+ // TODO: We could try FCF_SHELLPOSITION but it will require moving
+ // things around a bit.
+ //
+ wxSize vSizeDpy = wxGetDisplaySize();
- ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
- nY = vRect.yTop - (nY + nHeight);
+ nX = (vSizeDpy.x - nWidth) / 2;
+ nY = (vSizeDpy.y - nHeight) / 2;
}
+
+ // Convert to OS/2 coordinates
+ nY = GetOS2ParentHeight(pParent) - nY - nHeight;
+
if (!::WinSetWindowPos( m_hFrame
,HWND_TOP
,nX
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError(_T("Error sizing frame. Error: %s\n"), sError.c_str());
+ wxLogError(wxT("Error sizing frame. Error: %s\n"), sError.c_str());
return false;
}
lStyle = ::WinQueryWindowULong( m_hWnd
if (GetExtraStyle() & wxTOPLEVEL_EX_DIALOG)
{
//
- // We have different dialog templates to allows creation of dialogs
+ // We have different dialog templates to allow creation of dialogs
// with & without captions under OS2indows, resizeable or not (but a
// resizeable dialog always has caption - otherwise it would look too
// strange)
::WinQueryWindowPos(m_hWnd, &vSwp);
::WinEnableWindow(m_hFrame, TRUE);
- //
- // Deal with children
- //
- MoveChildren(m_vSwpClient.cy - vSwp.cy);
vEvent.SetEventObject(this);
- GetEventHandler()->ProcessEvent(vEvent);
+ HandleWindowEvent(vEvent);
}
else
{
} // end of wxTopLevelWindowOS2::Restore
// generate an artificial resize event
-void wxTopLevelWindowOS2::SendSizeEvent()
+void wxTopLevelWindowOS2::SendSizeEvent(int flags)
{
if (!m_bIconized)
{
RECTL vRect = wxGetWindowRect(GetHwnd());
- (void)::WinPostMsg( m_hFrame
- ,WM_SIZE
- ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom)
- ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom)
- );
+ if ( flags & wxSEND_EVENT_POST )
+ {
+ (void)::WinPostMsg( m_hFrame
+ ,WM_SIZE
+ ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom)
+ ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom)
+ );
+ }
+ else // send it
+ {
+ (void)::WinSendMsg( m_hFrame
+ ,WM_SIZE
+ ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom)
+ ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom)
+ );
+ }
}
} // end of wxTopLevelWindowOS2::SendSizeEvent
wxSize full( nWidth, nHeight );
wxSizeEvent vEvent( full, GetId() );
- GetEventHandler()->ProcessEvent(vEvent);
+ HandleWindowEvent(vEvent);
return true;
}
else
// wxTopLevelWindowOS2 misc
// ----------------------------------------------------------------------------
-void wxTopLevelWindowOS2::SetIcon(
- const wxIcon& rIcon
-)
-{
- SetIcons(wxIconBundle(rIcon));
-} // end of wxTopLevelWindowOS2::SetIcon
-
void wxTopLevelWindowOS2::SetIcons(
const wxIconBundle& rIcons
)
//
wxTopLevelWindowBase::SetIcons(rIcons);
- const wxIcon& vIcon = rIcons.GetIcon(wxSize(32, 32));
+ const wxIcon& vIcon = rIcons.GetIconOfExactSize(32);
- if (vIcon.Ok() && vIcon.GetWidth() == 32 && vIcon.GetHeight() == 32)
+ if (vIcon.Ok())
{
::WinSendMsg( m_hFrame
,WM_SETICON
if (!hMenu)
{
- wxLogLastError(_T("GetSystemMenu"));
+ wxLogLastError(wxT("GetSystemMenu"));
return false;
}
{
if (!::WinDestroyWindow(m_shWnd))
{
- wxLogLastError(_T("DestroyWindow(hidden TLW parent)"));
+ wxLogLastError(wxT("DestroyWindow(hidden TLW parent)"));
}
m_shWnd = NULL;
}
{
if (!m_szClassName)
{
- static const wxChar* zHIDDEN_PARENT_CLASS = _T("wxTLWHiddenParent");
+ static const wxChar* zHIDDEN_PARENT_CLASS = wxT("wxTLWHiddenParent");
if (!::WinRegisterClass( wxGetInstance()
,(PSZ)zHIDDEN_PARENT_CLASS
,sizeof(ULONG)
))
{
- wxLogLastError(_T("RegisterClass(\"wxTLWHiddenParent\")"));
+ wxLogLastError(wxT("RegisterClass(\"wxTLWHiddenParent\")"));
}
else
{
NULL );
if (!m_shWnd)
{
- wxLogLastError(_T("CreateWindow(hidden TLW parent)"));
+ wxLogLastError(wxT("CreateWindow(hidden TLW parent)"));
}
}
return m_shWnd;