#include "wx/frame.h"
#include "wx/listbox.h"
#include "wx/button.h"
+ #include "wx/bmpbuttn.h"
#include "wx/msgdlg.h"
#include "wx/scrolwin.h"
#include "wx/radiobox.h"
DestroyChildren();
- if (m_parent)
- m_parent->RemoveChild(this);
-
if (m_hWnd)
{
if(!::WinDestroyWindow(GetHWND()))
if ( hWnd )
::WinEnableWindow(hWnd, (BOOL)bEnable);
+ //
+ // The logic below doesn't apply to the top level windows -- otherwise
+ // showing a modal dialog would result in total greying out (and ungreying
+ // out later) of everything which would be really ugly
+ //
+ if (IsTopLevel())
+ return TRUE;
+
wxWindowList::Node* pNode = GetChildren().GetFirst();
while (pNode)
::WinSetPointerPos(HWND_DESKTOP, (LONG)nX, (LONG)(nY));
} // end of wxWindowOS2::WarpPointer
-#if WXWIN_COMPATIBILITY
-void wxWindowOS2::OS2DeviceToLogical (float *x, float *y) const
-{
-}
-#endif // WXWIN_COMPATIBILITY
// ---------------------------------------------------------------------------
// scrolling stuff
// ---------------------------------------------------------------------------
-#if WXWIN_COMPATIBILITY
-void wxWindowOS2::SetScrollRange(
- int nOrient
-, int nRange
-, bool bRefresh
-)
-{
- int nRange1 = nRange;
- int nPageSize = GetScrollPage(nOrient);
-
- if (nPpageSize > 1 && nRange > 0)
- {
- nRange1 += (nPageSize - 1);
- }
-
- if (nOrient == wxHORIZONTAL)
- {
- ::WinSendMsg(m_hWndScrollBarHorz, SBM_SETSCROLLBAR, (MPARAM)0, MPFROM2SHORT(0, (SHORT)nRange1));
- ::WinSendMsg(m_hWndScrollBarHorz, SBM_SETTHUMBSIZE, MPFROM2SHORT((SHORT)nThumbVisible, (SHORT)nRange1), (MPARAM)0);
- }
- else
- {
- ::WinSendMsg(m_hWndScrollBarVert, SBM_SETSCROLLBAR, (MPARAM)0, MPFROM2SHORT(0, (SHORT)nRange1));
- ::WinSendMsg(m_hWndScrollBarVert, SBM_SETTHUMBSIZE, MPFROM2SHORT((SHORT)nThumbVisible, (SHORT)nRange1), (MPARAM)0);
- }
-} // end of wxWindowOS2::SetScrollRange
-
-void wxWindowOS2::SetScrollPage(
- int nOrient
-, int nPage
-, bool bRefresh
-)
-{
- if (nOrient == wxHORIZONTAL )
- m_nXThumbSize = nPage;
- else
- m_nYThumbSize = nPage;
-} // end of wxWindowOS2::SetScrollPage
-
-int wxWindowOS2::OldGetScrollRange(
- int nOrient
-) const
-{
- MRESULT mRc;
- HWND hWnd = GetHwnd();
-
- if (hWnd)
- {
- mRc = WinSendMsg(hWnd, SBM_QUERYRANGE, (MPARAM)0L, (MPARAM)0L);
- return(SHORT2FROMMR(mRc));
- }
- return 0;
-} // end of wxWindowOS2::OldGetScrollRange
-
-int wxWindowOS2::GetScrollPage(
- int nOrient
-) const
-{
- if (nOrient == wxHORIZONTAL)
- return m_nXThumbSize;
- else
- return m_nYThumbSize;
-} // end of wxWindowOS2::GetScrollPage
-#endif // WXWIN_COMPATIBILITY
-
int wxWindowOS2::GetScrollPos(
int nOrient
) const
return dwStyle;
} // end of wxWindowOS2::MakeExtendedStyle
-//
-// Determines whether simulated 3D effects or CTL3D should be used,
-// applying a default border style if required, and returning an extended
-// style to pass to OS2Create.
-//
-WXDWORD wxWindowOS2::Determine3DEffects(
- WXDWORD dwDefaultBorderStyle
-, bool* pbWant3D
-) const
-{
- WXDWORD dwStyle = 0L;
-
- //
- // Native PM does not have any specialize 3D effects like WIN32 does,
- // so we have to try and invent them.
- //
-
- //
- // If matches certain criteria, then assume no 3D effects
- // unless specifically requested (dealt with in MakeExtendedStyle)
- //
- if (!GetParent() ||
- !IsKindOf(CLASSINFO(wxControl)) ||
- (m_windowStyle & wxNO_BORDER)
- )
- {
- *pbWant3D = FALSE;
- return MakeExtendedStyle(m_windowStyle, FALSE);
- }
-
- //
- // 1) App can specify global 3D effects
- //
- *pbWant3D = wxTheApp->GetAuto3D();
-
- //
- // 2) If the parent is being drawn with user colours, or simple border
- // specified, switch effects off.
- //
- if (GetParent() &&
- (GetParent()->GetWindowStyleFlag() & wxUSER_COLOURS) ||
- (m_windowStyle & wxSIMPLE_BORDER)
- )
- *pbWant3D = FALSE;
-
- //
- // 3) Control can override this global setting by defining
- // a border style, e.g. wxSUNKEN_BORDER
- //
- if ((m_windowStyle & wxDOUBLE_BORDER) ||
- (m_windowStyle & wxRAISED_BORDER) ||
- (m_windowStyle & wxSTATIC_BORDER) ||
- (m_windowStyle & wxSUNKEN_BORDER)
- )
- *pbWant3D = TRUE;
-
- dwStyle = MakeExtendedStyle( m_windowStyle
- ,FALSE
- );
-
- //
- // If we want 3D, but haven't specified a border here,
- // apply the default border style specified.
- //
- if (dwDefaultBorderStyle && (*pbWant3D) &&
- !((m_windowStyle & wxDOUBLE_BORDER) ||
- (m_windowStyle & wxRAISED_BORDER) ||
- (m_windowStyle & wxSTATIC_BORDER) ||
- (m_windowStyle & wxSIMPLE_BORDER)
- )
- )
- dwStyle |= dwDefaultBorderStyle;
- return dwStyle;
-} // end of wxWindowOS2::Determine3DEffects
-
-#if WXWIN_COMPATIBILITY
-void wxWindowOS2::OnCommand(
- wxWindow& rWin
-, wxCommandEvent& rEvent
-)
-{
- if (GetEventHandler()->ProcessEvent(rEvent))
- return;
- if (m_parent)
- m_parent->GetEventHandler()->OnCommand( rWin
- ,rEvent
- );
-} // end of wxWindowOS2::OnCommand
-
-wxObject* wxWindowOS2::GetChild(
- int nNumber
-) const
-{
- //
- // Return a pointer to the Nth object in the Panel
- //
- wxNode* pNode = GetChildren().First();
- int n = nNumber;
-
- while (pNode && n--)
- pNode = pNode->Next();
- if (pNode)
- {
- wxObject* pObj = (wxObject*)pNode->Data();
- return(pObj);
- }
- else
- return NULL;
-} // end of wxWindowOS2::GetChild
-
-#endif // WXWIN_COMPATIBILITY
-
//
// Setup background and foreground colours correctly
//
(void)GetEventHandler()->ProcessEvent(rEvent);
}
}
- UpdateWindowUI();
+ if (wxUpdateUIEvent::CanUpdate(this))
+ UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
} // end of wxWindowOS2::OnIdle
//
return TRUE;
} // end of wxWindowOS2::Reparent
-void wxWindowOS2::Clear()
-{
- wxClientDC vDc((wxWindow*)this);
- wxBrush vBrush( GetBackgroundColour()
- ,wxSOLID
- );
-
- vDc.SetBackground(vBrush);
- vDc.Clear();
-} // end of wxWindowOS2::Clear
-
void wxWindowOS2::Update()
{
::WinUpdateWindow(GetHwnd());
wxDropTarget* pDropTarget
)
{
- if (m_dropTarget != 0)
- {
- m_dropTarget->Revoke(m_hWnd);
- delete m_dropTarget;
- }
m_dropTarget = pDropTarget;
- if (m_dropTarget != 0)
- m_dropTarget->Register(m_hWnd);
} // end of wxWindowOS2::SetDropTarget
#endif
return hWnd != NULL;
} // end of wxWindowOS2::IsMouseInWindow
-#if wxUSE_CARET && WXWIN_COMPATIBILITY
-// ---------------------------------------------------------------------------
-// Caret manipulation
-// ---------------------------------------------------------------------------
-
-void wxWindowOS2::CreateCaret(
- int nWidth
-, int nHeight
-)
-{
- SetCaret(new wxCaret( this
- ,nWidth
- ,nHeight
- ));
-} // end of wxWindowOS2::CreateCaret
-
-void wxWindowOS2::CreateCaret(
- const wxBitmap* pBitmap
-)
-{
- wxFAIL_MSG("not implemented");
-} // end of wxWindowOS2::CreateCaret
-
-void wxWindowOS2::ShowCaret(
- bool bShow
-)
-{
- wxCHECK_RET( m_caret, "no caret to show" );
-
- m_caret->Show(bShow);
-} // end of wxWindowOS2::ShowCaret
-
-void wxWindowOS2::DestroyCaret()
-{
- SetCaret(NULL);
-} // end of wxWindowOS2::DestroyCaret
-
-void wxWindowOS2::SetCaretPos(
- int nX
-, int nY)
-{
- wxCHECK_RET( m_caret, "no caret to move" );
-
- m_caret->Move( nX
- ,nY
- );
-} // end of wxWindowOS2::SetCaretPos
-
-void wxWindowOS2::GetCaretPos(
- int* pX
-, int* pY
-) const
-{
- wxCHECK_RET( m_caret, "no caret to get position of" );
-
- m_caret->GetPosition( pX
- ,pY
- );
-} // end of wxWindowOS2::GetCaretPos
-
-#endif //wxUSE_CARET
// ---------------------------------------------------------------------------
// popup menu
{
wxTheApp->DoMessage((WXMSG*)&vMsg);
}
+ if (vMsg.msg == WM_QUIT)
+ ::WinPostMsg(NULL, WM_QUIT, 0, 0);
}
#endif // wxUSE_MENUS_NATIVE
pBtn->OS2Command(BN_CLICKED, 0 /* unused */);
return TRUE;
}
+ else if (!IsTopLevel())
+ {
+ //
+ // if not a top level window, let parent
+ // handle it
+ //
+ return FALSE;
+ }
// else: but if it does not it makes sense to make
// it work like a TAB - and that's what we do.
// Note that Ctrl-Enter always works this way.
,&nX
,&nY
);
+ if (!pWin->IsOfStandardClass())
+ {
+ if (uMsg == WM_BUTTON1DOWN && pWin->AcceptsFocus() )
+ pWin->SetFocus();
+ }
bProcessed = pWin->HandleMouseEvent( uMsg
,nX
,nY
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError("Error creating frame. Error: %s\n", sError);
+ wxLogError("Error creating frame. Error: %s\n", sError.c_str());
return FALSE;
}
SetSize( nX
bool wxWindowOS2::HandleDestroy()
{
wxWindowDestroyEvent vEvent((wxWindow*)this);
-
+ vEvent.SetId(GetId());
(void)GetEventHandler()->ProcessEvent(vEvent);
//
#if wxUSE_DRAG_AND_DROP
if (m_dropTarget != NULL)
{
- m_dropTarget->Revoke(m_hWnd);
delete m_dropTarget;
m_dropTarget = NULL;
}
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError("Unable to set current color table. Error: %s\n", sError);
+ wxLogError("Unable to set current color table. Error: %s\n", sError.c_str());
}
//
// Set the color table to RGB mode
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
- wxLogError("Unable to set current color table. Error: %s\n", sError);
+ wxLogError("Unable to set current color table. Error: %s\n", sError.c_str());
}
wxCHECK( pMenuItem->IsKindOf(CLASSINFO(wxMenuItem)), FALSE );
// painting
// ---------------------------------------------------------------------------
+void wxWindow::OnPaint (
+ wxPaintEvent& rEvent
+)
+{
+ HDC hDC = (HDC)wxPaintDC::FindDCInCache((wxWindow*) rEvent.GetEventObject());
+
+ if (hDC != 0)
+ {
+ OS2DefWindowProc( (WXUINT)WM_PAINT
+ ,(WXWPARAM)hDC
+ ,(WXLPARAM)0
+ );
+ }
+} // end of wxWindow::OnPaint
+
bool wxWindowOS2::HandlePaint()
{
HRGN hRgn;