X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/47df2b8c540f17c55464719d0da74c0b43a29515..5c2ddebecd17d3b10957178ba30f2873c0ec4611:/src/os2/frame.cpp diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp index 4c345bcea7..96743fc979 100644 --- a/src/os2/frame.cpp +++ b/src/os2/frame.cpp @@ -311,13 +311,36 @@ void wxFrame::PositionStatusBar() { vError = ::WinGetLastError(vHabmain); sError = wxPMErrorToStr(vError); - wxLogError("Error setting parent for StautsBar. Error: %s\n", sError); + wxLogError("Error setting parent for StautsBar. Error: %s\n", sError.c_str()); return; } } } // end of wxFrame::PositionStatusBar #endif // wxUSE_STATUSBAR +#if wxUSE_TOOLBAR +wxToolBar* wxFrame::OnCreateToolBar( + long lStyle +, wxWindowID vId +, const wxString& rsName +) +{ + wxToolBar* pToolBar = wxFrameBase::OnCreateToolBar( lStyle + ,vId + ,rsName + ); + + ::WinSetParent( pToolBar->GetHWND() + ,m_hFrame + ,FALSE + ); + ::WinSetOwner( pToolBar->GetHWND() + ,m_hFrame + ); + return pToolBar; +} // end of WinGuiBase_CFrame::OnCreateToolBar +#endif + #if wxUSE_MENUS_NATIVE void wxFrame::DetachMenuBar() { @@ -431,14 +454,14 @@ void wxFrame::InternalSetMenuBar() { vError = ::WinGetLastError(vHabmain); sError = wxPMErrorToStr(vError); - wxLogError("Error setting parent for submenu. Error: %s\n", sError); + wxLogError("Error setting parent for submenu. Error: %s\n", sError.c_str()); } if (!::WinSetOwner(m_hMenu, m_hFrame)) { vError = ::WinGetLastError(vHabmain); sError = wxPMErrorToStr(vError); - wxLogError("Error setting parent for submenu. Error: %s\n", sError); + wxLogError("Error setting parent for submenu. Error: %s\n", sError.c_str()); } ::WinSendMsg(m_hFrame, WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0); } // end of wxFrame::InternalSetMenuBar @@ -672,29 +695,13 @@ bool wxFrame::ShowFullScreen( // Checks if there is a toolbar, and returns the first free client position wxPoint wxFrame::GetClientAreaOrigin() const { - wxPoint vPoint(0, 0); + wxPoint vPoint = wxTopLevelWindow::GetClientAreaOrigin(); -#if wxUSE_TOOLBAR - if (GetToolBar()) - { - int nWidth; - int nHeight; - - GetToolBar()->GetSize( &nWidth - ,&nHeight - ); - - if (GetToolBar()->GetWindowStyleFlag() & wxTB_VERTICAL) - { - vPoint.x += nWidth; - } - else - { - // PM is backwards from windows - vPoint.y += nHeight; - } - } -#endif //wxUSE_TOOLBAR + // + // In OS/2 the toolbar and statusbar are frame extensions so there is no + // adjustment. The client is supposedly resized for a toolbar in OS/2 + // as it is for the status bar. + // return vPoint; } // end of wxFrame::GetClientAreaOrigin @@ -722,53 +729,59 @@ wxToolBar* wxFrame::CreateToolBar( void wxFrame::PositionToolBar() { + wxToolBar* pToolBar = GetToolBar(); + wxCoord vWidth; + wxCoord vHeight; + wxCoord vTWidth; + wxCoord vTHeight; + + if (!pToolBar) + return; + HWND hWndClient; RECTL vRect; + RECTL vFRect; + SWP vSwp; + wxPoint vPos; - ::WinQueryWindowRect(GetHwnd(), &vRect); + ::WinQueryWindowRect(m_hFrame, &vRect); + vPos.y = (wxCoord)vRect.yTop; + ::WinMapWindowPoints(m_hFrame, HWND_DESKTOP, (PPOINTL)&vRect, 2); + vFRect = vRect; + ::WinCalcFrameRect(m_hFrame, &vRect, TRUE); -#if wxUSE_STATUSBAR - if (GetStatusBar()) - { - int nStatusX; - int nStatusY; + vPos.y = (wxCoord)(vFRect.yTop - vRect.yTop); + pToolBar->GetSize( &vTWidth + ,&vTHeight + ); - GetStatusBar()->GetClientSize( &nStatusX - ,&nStatusY - ); - // PM is backwards from windows - vRect.yBottom += nStatusY; + if (pToolBar->GetWindowStyleFlag() & wxTB_HORIZONTAL) + { + vWidth = (wxCoord)(vRect.xRight - vRect.xLeft); + pToolBar->SetSize( vRect.xLeft - vFRect.xLeft + ,vPos.y + ,vWidth + ,vTHeight + ); } -#endif // wxUSE_STATUSBAR - - if ( m_frameToolBar ) + else { - int nToolbarWidth; - int nToolbarHeight; - - m_frameToolBar->GetSize( &nToolbarWidth - ,&nToolbarHeight - ); + wxCoord vSwidth = 0; + wxCoord vSheight = 0; - if (GetToolBar()->GetWindowStyleFlag() & wxTB_VERTICAL) - { - nToolbarHeight = vRect.yBottom; - } - else - { - nToolbarWidth = vRect.xRight; - } - - // - // Use the 'real' PM position here - // - GetToolBar()->SetSize( 0 - ,0 - ,nToolbarWidth - ,nToolbarHeight - ,wxSIZE_NO_ADJUSTMENTS - ); + if (m_frameStatusBar) + m_frameStatusBar->GetSize( &vSwidth + ,&vSheight + ); + vHeight = (wxCoord)(vRect.yTop - vRect.yBottom); + pToolBar->SetSize( vRect.xLeft - vFRect.xLeft + ,vPos.y + ,vTWidth + ,vHeight - vSheight + ); } + if( ::WinIsWindowShowing(m_hFrame) ) + ::WinSendMsg(m_hFrame, WM_UPDATEFRAME, (MPARAM)~0, 0); } // end of wxFrame::PositionToolBar #endif // wxUSE_TOOLBAR @@ -1133,10 +1146,12 @@ MRESULT EXPENTRY wxFrameMainWndProc( int nItemCount; int i; PSWP pSWP = NULL; - SWP vSwpStb; RECTL vRectl; RECTL vRstb; - int nHeight=0; + RECTL vRtlb; + int nHeight = 0; + int nHeight2 = 0; + int nWidth = 0; pSWP = (PSWP)PVOIDFROMMP(wParam); nItemCount = SHORT1FROMMR(pWnd->m_fnOldWndProc(hWnd, ulMsg, wParam, lParam)); @@ -1144,18 +1159,11 @@ MRESULT EXPENTRY wxFrameMainWndProc( { ::WinQueryWindowRect(pWnd->m_frameStatusBar->GetHWND(), &vRstb); pWnd->m_frameStatusBar->GetSize(NULL, &nHeight); - ::WinQueryWindowRect(pWnd->m_hFrame, &vRectl); - ::WinMapWindowPoints(pWnd->m_hFrame, HWND_DESKTOP, (PPOINTL)&vRectl, 2); - vRstb = vRectl; - ::WinCalcFrameRect(pWnd->m_hFrame, &vRectl, TRUE); - - vSwpStb.x = vRectl.xLeft - vRstb.xLeft; - vSwpStb.y = vRectl.yBottom - vRstb.yBottom; - vSwpStb.cx = vRectl.xRight - vRectl.xLeft - 1; //?? -1 ?? - vSwpStb.cy = nHeight; - vSwpStb.fl = SWP_SIZE |SWP_MOVE | SWP_SHOW; - vSwpStb.hwnd = pWnd->m_frameStatusBar->GetHWND(); - vSwpStb.hwndInsertBehind = HWND_TOP; + } + if(pWnd->m_frameToolBar) + { + ::WinQueryWindowRect(pWnd->m_frameToolBar->GetHWND(), &vRtlb); + pWnd->m_frameToolBar->GetSize(&nWidth, &nHeight2); } ::WinQueryWindowRect(pWnd->m_hFrame, &vRectl); ::WinMapWindowPoints(pWnd->m_hFrame, HWND_DESKTOP, (PPOINTL)&vRectl, 2); @@ -1165,10 +1173,20 @@ MRESULT EXPENTRY wxFrameMainWndProc( { if(pWnd->m_hWnd && pSWP[i].hwnd == pWnd->m_hWnd) { - pSWP[i].x = vRectl.xLeft; - pSWP[i].y = vRectl.yBottom + nHeight; - pSWP[i].cx = vRectl.xRight - vRectl.xLeft; - pSWP[i].cy = vRectl.yTop - vRectl.yBottom - nHeight; + if (pWnd->m_frameToolBar && pWnd->m_frameToolBar->GetWindowStyleFlag() & wxTB_HORIZONTAL) + { + pSWP[i].x = vRectl.xLeft; + pSWP[i].y = vRectl.yBottom + nHeight; + pSWP[i].cx = vRectl.xRight - vRectl.xLeft; + pSWP[i].cy = vRectl.yTop - vRectl.yBottom - (nHeight + nHeight2); + } + else + { + pSWP[i].x = vRectl.xLeft + nWidth; + pSWP[i].y = vRectl.yBottom + nHeight; + pSWP[i].cx = vRectl.xRight - (vRectl.xLeft + nWidth); + pSWP[i].cy = vRectl.yTop - vRectl.yBottom - nHeight; + } pSWP[i].fl = SWP_SIZE | SWP_MOVE | SWP_SHOW; pSWP[i].hwndInsertBehind = HWND_TOP; } @@ -1402,3 +1420,22 @@ wxWindow* wxFrame::GetClient() { return wxFindWinFromHandle((WXHWND)::WinWindowFromID(m_hFrame, FID_CLIENT)); } + +void wxFrame::SendSizeEvent() +{ + if (!m_bIconized) + { + RECTL vRect = wxGetWindowRect(GetHwnd()); + + ::WinPostMsg( GetHwnd() + ,WM_SIZE + ,MPFROM2SHORT( vRect.xRight - vRect.xLeft + ,vRect.xRight - vRect.xLeft + ) + ,MPFROM2SHORT( vRect.yTop - vRect.yBottom + ,vRect.yTop - vRect.yBottom + ) + ); + } +} +