From: David Webster Date: Mon, 22 Jul 2002 03:29:07 +0000 (+0000) Subject: Dialogs and slider updates X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/70a2c6562fcc7088076ab421419069ef50e4a7d3 Dialogs and slider updates git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16249 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/os2/bitmap.cpp b/src/os2/bitmap.cpp index 1be5569b21..8727225de8 100644 --- a/src/os2/bitmap.cpp +++ b/src/os2/bitmap.cpp @@ -58,7 +58,7 @@ wxBitmapRefData::wxBitmapRefData() m_pSelectedInto = NULL; m_nNumColors = 0; m_pBitmapMask = NULL; - m_hBitmap = (WXHBITMAP) NULL; + m_hBitmap = (WXHBITMAP) NULL; } // end of wxBitmapRefData::wxBitmapRefData void wxBitmapRefData::Free() @@ -303,6 +303,7 @@ wxBitmap::wxBitmap( LoadFile( nId ,(int)lType ); + SetId(nId); } // end of wxBitmap::wxBitmap bool wxBitmap::Create( diff --git a/src/os2/control.cpp b/src/os2/control.cpp index 61fd7206cf..a7d56cb07d 100644 --- a/src/os2/control.cpp +++ b/src/os2/control.cpp @@ -168,6 +168,8 @@ bool wxControl::OS2CreateControl( // Controls use the same font and colours as their parent dialog by default // InheritAttributes(); + SetXComp(0); + SetYComp(0); if (nW == 0 || nH == 0) SetBestSize(rSize); return TRUE; diff --git a/src/os2/dc.cpp b/src/os2/dc.cpp index 301788aa23..28ac299e82 100644 --- a/src/os2/dc.cpp +++ b/src/os2/dc.cpp @@ -1038,7 +1038,7 @@ void wxDC::DoDrawRectangle( if(m_brush.GetStyle() == wxTRANSPARENT) lControl = DRO_OUTLINE; - ::GpiSetColor(m_hPS, lColor); + ::GpiSetColor(m_hPS, lBorderColor); ::GpiBox( m_hPS // handle to a presentation space ,lControl // draw the box outline ? or ? ,&vPoint[1] // address of the corner diff --git a/src/os2/listbox.cpp b/src/os2/listbox.cpp index d23bedc512..968cd9a851 100644 --- a/src/os2/listbox.cpp +++ b/src/os2/listbox.cpp @@ -421,8 +421,18 @@ bool wxListBox::IsSelected( LONG lItem; - lItem = LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYSELECTION, (MPARAM)N, (MPARAM)0)); - return (lItem != LIT_NONE); + if (GetWindowStyleFlag() & wxLB_EXTENDED) + { + if (N == 0) + lItem = LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYSELECTION, (MPARAM)LIT_FIRST, (MPARAM)0)); + else + lItem = LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYSELECTION, (MPARAM)(N - 1), (MPARAM)0)); + } + else + { + lItem = LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYSELECTION, (MPARAM)LIT_FIRST, (MPARAM)0)); + } + return (lItem == (LONG)N && lItem != LIT_NONE); } // end of wxListBox::IsSelected wxClientData* wxListBox::DoGetItemClientObject( diff --git a/src/os2/slider.cpp b/src/os2/slider.cpp index cf5d9798f5..c548169535 100644 --- a/src/os2/slider.cpp +++ b/src/os2/slider.cpp @@ -115,13 +115,58 @@ void wxSlider::AdjustSubControls( ,(LONG)nYOffset ,(LONG)nMaxLen ,(LONG)nCy - ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW + ,SWP_ZORDER | SWP_SHOW + ); + } + } + else + { + // + // Now deal with a vertical slider + // + + if (m_lWindowStyle & winSL_LABELS ) + { + int nMinLen = 0; + int nMaxLen = 0; + + ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf); + GetTextExtent(zBuf, &lMinLen, &nCyf, NULL, NULL, &this->GetFont()); + + ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf); + GetTextExtent(zBuf, &lMaxLen, &nCyf, NULL, NULL, &this->GetFont()); + + if (m_hStaticValue) + { + int nNewWidth = (DAWUTL_MAX(nMinLen, nMaxLen)); + + ::WinSetWindowPos( (HWND)m_hStaticValue + ,HWND_TOP + ,(LONG)nXOffset + ,(LONG)nYOffset + nHeight + nCyf + ,(LONG)nNewWidth + ,(LONG)nCyf + ,SWP_SIZE | SWP_MOVE + ); + } + ::WinSetWindowPos( (HWND)m_hStaticMax + ,HWND_TOP + ,(LONG)nXOffset + ,(LONG)nYOffset + nHeight + ,(LONG)nMaxLen + ,(LONG)nCyf + ,SWP_SIZE | SWP_MOVE + ); + ::WinSetWindowPos( (HWND)m_hStaticMin + ,HWND_TOP + ,(LONG)nXOffset + ,(LONG)nYOffset - nCyf + ,(LONG)nMinLen + ,(LONG)nCyf + ,SWP_SIZE | SWP_MOVE ); } } - // - // Now deal with a vertical slider -- OS/2 doesn't have vertical sliders - // } // end of wxSlider::AdjustSubControls void wxSlider::ClearSel() @@ -239,9 +284,9 @@ bool wxSlider::Create( vSlData.cbSize = sizeof(SLDCDATA); if (m_windowStyle & wxSL_VERTICAL) - lMsStyle = SLS_VERTICAL | WS_VISIBLE | WS_TABSTOP; + lMsStyle = SLS_VERTICAL | SLS_HOMEBOTTOM | WS_VISIBLE | WS_TABSTOP; else - lMsStyle = SLS_HORIZONTAL | WS_VISIBLE | WS_TABSTOP; + lMsStyle = SLS_HORIZONTAL | SLS_HOMELEFT| WS_VISIBLE | WS_TABSTOP; if (m_windowStyle & wxCLIP_SIBLINGS) lMsStyle |= WS_CLIPSIBLINGS; @@ -264,6 +309,7 @@ bool wxSlider::Create( lMsStyle |= SLS_PRIMARYSCALE1 | SLS_PRIMARYSCALE2; else lMsStyle |= SLS_PRIMARYSCALE2; + lMsStyle |= SLS_RIBBONSTRIP; m_nPageSize = ((nMaxValue - nMinValue)/10); vSlData.usScale1Increments = m_nPageSize; @@ -288,7 +334,7 @@ bool wxSlider::Create( // ::WinSendMsg( hScrollBar ,SLM_SETTICKSIZE - ,MPFROM2SHORT(SMA_SETALLTICKS, 6) + ,MPFROM2SHORT(SMA_SETALLTICKS, (USHORT)12) ,NULL ); // @@ -304,12 +350,7 @@ bool wxSlider::Create( SubclassWin(GetHWND()); ::WinSetWindowText((HWND)m_hWnd, ""); - wxFont* pTextFont = new wxFont( 10 - ,wxMODERN - ,wxNORMAL - ,wxNORMAL - ); - SetFont(*pTextFont); + SetFont(*wxSMALL_FONT); if (m_windowStyle & wxSL_LABELS) { // @@ -412,6 +453,13 @@ bool wxSlider::Create( ,sizeof(LONG) ,(PVOID)&lColor ); + vColour.Set(wxString("BLUE")); + lColor = (LONG)vColour.GetPixel(); + ::WinSetPresParam( m_hWnd + ,PP_HILITEBACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); SetValue(nValue); delete pTextFont; return TRUE; @@ -515,7 +563,7 @@ void wxSlider::DoSetSize( ::WinSetWindowPos( (HWND)m_hStaticMin ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset - nCyf + ,(LONG)nYOffset - (nCyf * 1.2) ,(LONG)nMinLen ,(LONG)nCy ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW @@ -547,7 +595,7 @@ void wxSlider::DoSetSize( ::WinSetWindowPos( (HWND)m_hStaticMax ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset - nCyf + ,(LONG)nYOffset - (nCyf * 1.2) ,(LONG)nMaxLen ,(LONG)nCy ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW @@ -606,27 +654,24 @@ void wxSlider::DoSetSize( // The height needs to be a bit bigger under Win95 if using native // 3D effects. // - nValueHeight = (int)(nValueHeight * 1.5); ::WinSetWindowPos( (HWND)m_hStaticValue ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset + ,(LONG)nYOffset + lHeight ,(LONG)nNewWidth ,(LONG)nValueHeight ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW ); - nYOffset -= nValueHeight; - nUsedHeight += nValueHeight; + nUsedHeight += nCy; } ::WinSetWindowPos( (HWND)m_hStaticMin ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset + ,(LONG)nYOffset + lHeight -lCyf ,(LONG)nMinLen ,(LONG)nCy ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW ); - nYOffset -= nCy; nUsedHeight += nCy; int nSliderLength = nHeight1 - (nUsedHeight + (2 * nCy)); @@ -641,7 +686,7 @@ void wxSlider::DoSetSize( if (nSliderLength < 100) nSliderLength = 100; - ::WinSetWindowPos( (HWND)m_hStaticMin + ::WinSetWindowPos( GetHwnd() ,HWND_TOP ,(LONG)nXOffset ,(LONG)nYOffset @@ -649,7 +694,6 @@ void wxSlider::DoSetSize( ,(LONG)nSliderLength ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW ); - nYOffset -= nSliderLength; nUsedHeight += nSliderLength; ::WinSetWindowPos( (HWND)m_hStaticMax ,HWND_TOP diff --git a/src/os2/spinctrl.cpp b/src/os2/spinctrl.cpp index 8c2735901e..2fa04e7049 100644 --- a/src/os2/spinctrl.cpp +++ b/src/os2/spinctrl.cpp @@ -337,8 +337,8 @@ int wxSpinCtrl::GetValue() const ,SPBQ_UPDATEIFVALID ) ); - lVal - atol(zVal); - return lVal; + lVal = atol(zVal); + return (int)lVal; } // end of wxSpinCtrl::GetValue void wxSpinCtrl::OnChar ( @@ -488,4 +488,4 @@ bool wxSpinCtrl::Show( return TRUE; } // end of wxSpinCtrl::Show -#endif //wxUSE_SPINBTN \ No newline at end of file +#endif //wxUSE_SPINBTN diff --git a/src/os2/statbmp.cpp b/src/os2/statbmp.cpp index 07856d8e84..5d523be4ff 100644 --- a/src/os2/statbmp.cpp +++ b/src/os2/statbmp.cpp @@ -32,6 +32,34 @@ IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl) +static wxGDIImage* ConvertImage( + const wxGDIImage& rBitmap +) +{ + bool bIsIcon = rBitmap.IsKindOf( CLASSINFO(wxIcon) ); + + if(!bIsIcon ) + { + wxASSERT_MSG( wxDynamicCast(&rBitmap, wxBitmap), + _T("not an icon and not a bitmap?") ); + + const wxBitmap& rBmp = (const wxBitmap&)rBitmap; + wxMask* pMask = rBmp.GetMask(); + + if (pMask && pMask->GetMaskBitmap()) + { + wxIcon* pIcon = new wxIcon; + + pIcon->CopyFromBitmap(rBmp); + return pIcon; + } + return new wxBitmap(rBmp); + } + + // copying a bitmap is a cheap operation + return new wxIcon( (const wxIcon&)rBitmap ); +} // end of ConvertImage + // --------------------------------------------------------------------------- // wxStaticBitmap // --------------------------------------------------------------------------- @@ -46,15 +74,15 @@ bool wxStaticBitmap::Create( , const wxString& rName ) { + ERRORID vError; + wxString sError; + Init(); SetName(rName); if (pParent) pParent->AddChild(this); - m_backgroundColour = pParent->GetBackgroundColour() ; - m_foregroundColour = pParent->GetForegroundColour() ; - if (nId == -1) m_windowId = (int)NewControlId(); else @@ -66,16 +94,21 @@ bool wxStaticBitmap::Create( int nY = rPos.y; int nWidth = rSize.x; int nHeight = rSize.y; + char zId[16]; m_windowStyle = lStyle; m_bIsIcon = rBitmap.IsKindOf(CLASSINFO(wxIcon)); - int nWinstyle = m_bIsIcon ? SS_ICON : SS_BITMAP; + // + // For now we only support an ICON + // + int nWinstyle = SS_ICON; + sprintf(zId, "#%d", rBitmap.GetId()); m_hWnd = (WXHWND)::WinCreateWindow( pParent->GetHWND() ,WC_STATIC - ,rName.c_str() + ,zId ,nWinstyle | WS_VISIBLE ,0,0,0,0 ,pParent->GetHWND() @@ -84,17 +117,20 @@ bool wxStaticBitmap::Create( ,NULL ,NULL ); - + if (!m_hWnd) + { + vError = ::WinGetLastError(wxGetInstance()); + sError = wxPMErrorToStr(vError); + return FALSE; + } wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") ); - - SetImage(rBitmap); + m_pImage = ConvertImage(rBitmap); + m_pImage->SetHandle((WXHWND)::WinSendMsg(m_hWnd, SM_QUERYHANDLE, (MPARAM)0, (MPARAM)0)); // Subclass again for purposes of dialog editing mode SubclassWin(m_hWnd); - SetFont(*wxSMALL_FONT); - SetSize(nX, nY, nWidth, nHeight); - return(FALSE); -} + return(TRUE); +} // end of wxStaticBitmap::Create bool wxStaticBitmap::ImageIsOk() const { @@ -103,14 +139,17 @@ bool wxStaticBitmap::ImageIsOk() const void wxStaticBitmap::Free() { - delete m_pImage; + if (m_pImage) + delete m_pImage; m_pImage = NULL; -} +} // end of wxStaticBitmap::Free wxSize wxStaticBitmap::DoGetBestSize() const { - // reuse the current size (as wxWindow does) instead of using some + // + // Reuse the current size (as wxWindow does) instead of using some // arbitrary default size (as wxControl, our immediate base class, does) + // return wxWindow::DoGetBestSize(); } @@ -118,54 +157,28 @@ void wxStaticBitmap::SetImage( const wxGDIImage& rBitmap ) { - Free(); - - m_bIsIcon = rBitmap.IsKindOf(CLASSINFO(wxIcon)); - if (m_bIsIcon) - m_pImage = new wxIcon((const wxIcon&)rBitmap); - else - m_pImage = new wxBitmap((const wxBitmap &)rBitmap); - - int nX; - int nY; - int nW; - int nH; - - GetPosition(&nX, &nY); - GetSize(&nW, &nH); + int nX = 0; + int nY = 0; + int nWidth = 0; + int nHeight = 0; + Free(); ::WinSendMsg( GetHwnd() ,SM_SETHANDLE - ,MPFROMHWND(m_pImage->GetHandle()) + ,MPFROMHWND(rBitmap.GetHandle()) ,NULL ); - if (ImageIsOk()) - { - int nWidth = rBitmap.GetWidth(); - int nHeight = rBitmap.GetHeight(); + m_pImage = ConvertImage(rBitmap); - if (nWidth && nHeight) - { - nW = nWidth; - nW = nHeight; - - ::WinSetWindowPos( GetHwnd() - ,HWND_TOP - ,nX - ,nY - ,nWidth - ,nHeight - ,SWP_SIZE | SWP_MOVE | SWP_SHOW - ); - } - } + GetPosition(&nX, &nY); + GetSize(&nWidth, &nHeight); RECTL vRect; - vRect.xLeft = nW; + vRect.xLeft = nX; vRect.yTop = nY; - vRect.xRight = nX + nW; - vRect.yBottom = nY + nH; + vRect.xRight = nX + nWidth; + vRect.yBottom = nY + nHeight; ::WinInvalidateRect(GetHwndOf(GetParent()), &vRect, TRUE); } diff --git a/src/os2/statline.cpp b/src/os2/statline.cpp index effb7de350..cd3343c3be 100644 --- a/src/os2/statline.cpp +++ b/src/os2/statline.cpp @@ -60,12 +60,26 @@ bool wxStaticLine::Create( ,rsName )) return FALSE; - return OS2CreateControl( _T("STATIC") - ,_T("") - ,rPos - ,vSize - ,lStyle - ); + if (!OS2CreateControl( "STATIC" + ,SS_FGNDFRAME + ,rPos + ,rSize + ,rsName + )) + return FALSE; + + wxColour vColour; + + vColour.Set(wxString("GREY")); + + LONG lColor = (LONG)vColour.GetPixel(); + + ::WinSetPresParam( m_hWnd + ,PP_FOREGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); + return TRUE; } // end of wxStaticLine::Create WXDWORD wxStaticLine::OS2GetStyle( diff --git a/src/os2/textctrl.cpp b/src/os2/textctrl.cpp index 3949c8f787..a9e711e7b0 100644 --- a/src/os2/textctrl.cpp +++ b/src/os2/textctrl.cpp @@ -125,6 +125,7 @@ bool wxTextCtrl::Create( } m_windowStyle = lStyle; + m_bIsMLE = FALSE; long lSstyle = WS_VISIBLE | WS_TABSTOP; @@ -200,7 +201,7 @@ bool wxTextCtrl::Create( // // Set font, position, size and initial value // - wxFont* pTextFont = new wxFont( 10 + wxFont* pTextFont = new wxFont( 8 ,wxMODERN ,wxNORMAL ,wxNORMAL @@ -218,8 +219,8 @@ bool wxTextCtrl::Create( ::WinQueryWindowPos(m_hWnd, &vSwp); SetXComp(vSwp.x); SetYComp(vSwp.y); - SetSize( vPos.x - ,vPos.y + SetSize( vPos.x - GetXComp() + ,vPos.y - GetYComp() ,rSize.x ,rSize.y );