X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/584ad2a32fec156c6049145d7ece9a33213aea28..cd05bf23f6aec29f60a793f3ca4dfe336661fca1:/src/os2/listbox.cpp?ds=inline diff --git a/src/os2/listbox.cpp b/src/os2/listbox.cpp index 6d56ce1890..ae9fc4101a 100644 --- a/src/os2/listbox.cpp +++ b/src/os2/listbox.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: listbox.cpp +// Name: src/os2/listbox.cpp // Purpose: wxListBox // Author: David Webster // Modified by: @@ -12,28 +12,28 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/window.h" -#include "wx/os2/private.h" +#if wxUSE_LISTBOX -#ifndef WX_PRECOMP #include "wx/listbox.h" -#include "wx/settings.h" -#include "wx/brush.h" -#include "wx/font.h" -#include "wx/dc.h" -#include "wx/dcscreen.h" -#include "wx/utils.h" -#include "wx/scrolwin.h" + +#ifndef WX_PRECOMP + #include "wx/dynarray.h" + #include "wx/settings.h" + #include "wx/brush.h" + #include "wx/font.h" + #include "wx/dc.h" + #include "wx/dcscreen.h" + #include "wx/utils.h" + #include "wx/scrolwin.h" + #include "wx/log.h" + #include "wx/window.h" #endif +#include "wx/os2/private.h" + #define INCL_M #include -#include "wx/dynarray.h" -#include "wx/log.h" - -#if wxUSE_LISTBOX - #if wxUSE_OWNER_DRAWN #include "wx/ownerdrw.h" #endif @@ -49,14 +49,14 @@ class wxListBoxItem : public wxOwnerDrawn { public: - wxListBoxItem(const wxString& rsStr = ""); + wxListBoxItem(const wxString& rsStr = wxEmptyString); }; wxListBoxItem::wxListBoxItem( const wxString& rsStr ) : wxOwnerDrawn( rsStr - ,FALSE + ,false ) { // @@ -65,9 +65,7 @@ wxListBoxItem::wxListBoxItem( SetMarginWidth(0); } // end of wxListBoxItem::wxListBoxItem -wxOwnerDrawn* wxListBox::CreateItem( - size_t n -) +wxOwnerDrawn* wxListBox::CreateItem( size_t WXUNUSED(n) ) { return new wxListBoxItem(); } // end of wxListBox::CreateItem @@ -102,17 +100,15 @@ bool wxListBox::Create( lStyle, rValidator, rsName); } -bool wxListBox::Create( - wxWindow* pParent -, wxWindowID vId -, const wxPoint& rPos -, const wxSize& rSize -, int n -, const wxString asChoices[] -, long lStyle -, const wxValidator& rValidator -, const wxString& rsName -) +bool wxListBox::Create( wxWindow* pParent, + wxWindowID vId, + const wxPoint& rPos, + const wxSize& rSize, + int n, + const wxString asChoices[], + long lStyle, + const wxValidator& rValidator, + const wxString& rsName ) { m_nNumItems = 0; m_hWnd = 0; @@ -128,7 +124,7 @@ bool wxListBox::Create( wxSystemSettings vSettings; - SetBackgroundColour(vSettings.GetSystemColour(wxSYS_COLOUR_WINDOW)); + SetBackgroundColour(vSettings.GetColour(wxSYS_COLOUR_WINDOW)); SetForegroundColour(pParent->GetForegroundColour()); m_windowId = (vId == -1) ? (int)NewControlId() : vId; @@ -172,7 +168,7 @@ bool wxListBox::Create( ); if (m_hWnd == 0) { - return FALSE; + return false; } // @@ -194,11 +190,11 @@ bool wxListBox::Create( SetFont(*pTextFont); // - // Set standard wxWindows colors for Listbox items and highlighting + // Set OS/2 system colours for Listbox items and highlighting // wxColour vColour; - vColour.Set(wxString("WHITE")); + vColour = wxSystemSettingsNative::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); LONG lColor = (LONG)vColour.GetPixel(); @@ -207,7 +203,7 @@ bool wxListBox::Create( ,sizeof(LONG) ,(PVOID)&lColor ); - vColour.Set(wxString("NAVY")); + vColour = wxSystemSettingsNative::GetColour(wxSYS_COLOUR_HIGHLIGHT); lColor = (LONG)vColour.GetPixel(); ::WinSetPresParam( m_hWnd ,PP_HILITEBACKGROUNDCOLOR @@ -215,19 +211,21 @@ bool wxListBox::Create( ,(PVOID)&lColor ); + SetXComp(0); + SetYComp(0); SetSize( nX ,nY ,nWidth ,nHeight ); delete pTextFont; - return TRUE; + return true; } // end of wxListBox::Create wxListBox::~wxListBox() { #if wxUSE_OWNER_DRAWN - size_t lUiCount = m_aItems.Count(); + size_t lUiCount = m_aItems.Count(); while (lUiCount-- != 0) { @@ -246,77 +244,67 @@ void wxListBox::SetupColours() // implementation of wxListBoxBase methods // ---------------------------------------------------------------------------- -void wxListBox::DoSetFirstItem( - int N -) +void wxListBox::DoSetFirstItem(int N) { - wxCHECK_RET( N >= 0 && N < m_nNumItems, + wxCHECK_RET( IsValid(N), wxT("invalid index in wxListBox::SetFirstItem") ); ::WinSendMsg(GetHwnd(), LM_SETTOPINDEX, MPFROMLONG(N), (MPARAM)0); } // end of wxListBox::DoSetFirstItem -void wxListBox::Delete( - int N -) +void wxListBox::Delete(unsigned int n) { - wxCHECK_RET( N >= 0 && N < m_nNumItems, + wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::Delete") ); #if wxUSE_OWNER_DRAWN - delete m_aItems[N]; - m_aItems.RemoveAt(N); + delete m_aItems[n]; + m_aItems.RemoveAt(n); #else // !wxUSE_OWNER_DRAWN if (HasClientObjectData()) { - delete GetClientObject(N); + delete GetClientObject(n); } #endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN - ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)N, (MPARAM)0); + ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, (MPARAM)0); m_nNumItems--; } // end of wxListBox::DoSetFirstItem -int wxListBox::DoAppend( - const wxString& rsItem -) +int wxListBox::DoAppend(const wxString& rsItem) { - int nIndex = 0; - SHORT nIndexType = 0; + long lIndex = 0; + LONG lIndexType = 0; if (m_windowStyle & wxLB_SORT) - nIndexType = LIT_SORTASCENDING; + lIndexType = LIT_SORTASCENDING; else - nIndexType = LIT_END; - nIndex = (int)::WinSendMsg(GetHwnd(), LM_INSERTITEM, (MPARAM)nIndexType, (MPARAM)rsItem.c_str()); + lIndexType = LIT_END; + + lIndex = (long)::WinSendMsg(GetHwnd(), LM_INSERTITEM, (MPARAM)lIndexType, (MPARAM)rsItem.c_str()); m_nNumItems++; #if wxUSE_OWNER_DRAWN if (m_windowStyle & wxLB_OWNERDRAW) { - wxOwnerDrawn* pNewItem = CreateItem(nIndex); // dummy argument + wxOwnerDrawn* pNewItem = CreateItem(lIndex); // dummy argument wxScreenDC vDc; - wxCoord vHeight; pNewItem->SetName(rsItem); - m_aItems.Insert(pNewItem, nIndex); - ::WinSendMsg(GetHwnd(), LM_SETITEMHANDLE, (MPARAM)((SHORT)nIndex), MPFROMP(pNewItem)); + m_aItems.Insert(pNewItem, lIndex); + ::WinSendMsg(GetHwnd(), LM_SETITEMHANDLE, (MPARAM)lIndex, MPFROMP(pNewItem)); pNewItem->SetFont(GetFont()); } #endif - return nIndex; + return (int)lIndex; } // end of wxListBox::DoAppend -void wxListBox::DoSetItems( - const wxArrayString& raChoices -, void** ppClientData -) +void wxListBox::DoSetItems( const wxArrayString& raChoices, + void** ppClientData ) { - BOOL bHideAndShow = IsShown(); - int nCount = 0; - int i; - SHORT nIndexType = 0; + BOOL bHideAndShow = IsShown(); + LONG lIndexType = 0; if (bHideAndShow) { @@ -324,14 +312,13 @@ void wxListBox::DoSetItems( } ::WinSendMsg(GetHwnd(), LM_DELETEALL, (MPARAM)0, (MPARAM)0); m_nNumItems = raChoices.GetCount(); - for (i = 0; i < m_nNumItems; i++) + for (unsigned int i = 0; i < m_nNumItems; i++) { - if (m_windowStyle & wxLB_SORT) - nIndexType = LIT_SORTASCENDING; + lIndexType = LIT_SORTASCENDING; else - nIndexType = LIT_END; - ::WinSendMsg(GetHwnd(), LM_INSERTITEM, (MPARAM)nIndexType, (MPARAM)raChoices[i].c_str()); + lIndexType = LIT_END; + ::WinSendMsg(GetHwnd(), LM_INSERTITEM, (MPARAM)lIndexType, (MPARAM)raChoices[i].c_str()); if (ppClientData) { @@ -355,9 +342,9 @@ void wxListBox::DoSetItems( // // Then create new ones // - for (size_t ui = 0; ui < (size_t)m_nNumItems; ui++) + for (unsigned int ui = 0; ui < m_nNumItems; ui++) { - wxOwnerDrawn* pNewItem = CreateItem(ui); + wxOwnerDrawn* pNewItem = CreateItem(ui); pNewItem->SetName(raChoices[ui]); m_aItems.Add(pNewItem); @@ -368,34 +355,10 @@ void wxListBox::DoSetItems( ::WinShowWindow(GetHwnd(), TRUE); } // end of wxListBox::DoSetItems -int wxListBox::FindString( - const wxString& rsString -) const -{ - int nPos; - LONG lTextLength; - PSZ zStr; - - - for (nPos = 0; nPos < m_nNumItems; nPos++) - { - lTextLength = LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)nPos, (MPARAM)0)); - zStr = new char[lTextLength + 1]; - ::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXT, MPFROM2SHORT(nPos, (SHORT)lTextLength), (MPARAM)zStr); - if (rsString == (char*)zStr) - { - delete [] zStr; - break; - } - delete [] zStr; - } - return nPos; -} // end of wxListBox::FindString - void wxListBox::Clear() { #if wxUSE_OWNER_DRAWN - size_t lUiCount = m_aItems.Count(); + unsigned int lUiCount = m_aItems.Count(); while (lUiCount-- != 0) { @@ -406,7 +369,7 @@ void wxListBox::Clear() #else // !wxUSE_OWNER_DRAWN if (HasClientObjectData()) { - for (size_t n = 0; n < (size_t)m_lNumItems; n++) + for (unsigned int n = 0; n < m_lNumItems; n++) { delete GetClientObject(n); } @@ -417,12 +380,9 @@ void wxListBox::Clear() m_nNumItems = 0; } // end of wxListBox::Clear -void wxListBox::SetSelection( - int N -, bool bSelect -) +void wxListBox::DoSetSelection( int N, bool bSelect) { - wxCHECK_RET( N >= 0 && N < m_nNumItems, + wxCHECK_RET( IsValid(N), wxT("invalid index in wxListBox::SetSelection") ); ::WinSendMsg( GetHwnd() ,LM_SELECTITEM @@ -433,11 +393,9 @@ void wxListBox::SetSelection( Refresh(); } // end of wxListBox::SetSelection -bool wxListBox::IsSelected( - int N -) const +bool wxListBox::IsSelected( int N ) const { - wxCHECK_MSG( N >= 0 && N < m_nNumItems, FALSE, + wxCHECK_MSG( IsValid(N), false, wxT("invalid index in wxListBox::Selected") ); LONG lItem; @@ -456,39 +414,27 @@ bool wxListBox::IsSelected( return (lItem == (LONG)N && lItem != LIT_NONE); } // end of wxListBox::IsSelected -wxClientData* wxListBox::DoGetItemClientObject( - int n -) const +wxClientData* wxListBox::DoGetItemClientObject(unsigned int n) const { return (wxClientData *)DoGetItemClientData(n); } -void* wxListBox::DoGetItemClientData( - int n -) const +void* wxListBox::DoGetItemClientData(unsigned int n) const { - wxCHECK_MSG( n >= 0 && n < m_nNumItems, NULL, + wxCHECK_MSG( IsValid(n), NULL, wxT("invalid index in wxListBox::GetClientData") ); return((void *)::WinSendMsg(GetHwnd(), LM_QUERYITEMHANDLE, MPFROMLONG(n), (MPARAM)0)); } // end of wxListBox::DoGetItemClientData -void wxListBox::DoSetItemClientObject( - int n -, wxClientData* pClientData -) +void wxListBox::DoSetItemClientObject(unsigned int n, wxClientData* pClientData) { - DoSetItemClientData( n - ,pClientData - ); + DoSetItemClientData(n, pClientData); } // end of wxListBox::DoSetItemClientObject -void wxListBox::DoSetItemClientData( - int n -, void* pClientData -) +void wxListBox::DoSetItemClientData(unsigned int n, void* pClientData) { - wxCHECK_RET( n >= 0 && n < m_nNumItems, + wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::SetClientData") ); #if wxUSE_OWNER_DRAWN @@ -510,12 +456,10 @@ bool wxListBox::HasMultipleSelection() const return (m_windowStyle & wxLB_MULTIPLE) || (m_windowStyle & wxLB_EXTENDED); } // end of wxListBox::HasMultipleSelection -int wxListBox::GetSelections( - wxArrayInt& raSelections -) const +int wxListBox::GetSelections( wxArrayInt& raSelections ) const { - int nCount = 0; - LONG lItem; + int nCount = 0; + LONG lItem; raSelections.Empty(); @@ -559,7 +503,6 @@ int wxListBox::GetSelections( } return nCount; } - return 0; } else // single-selection listbox { @@ -590,90 +533,81 @@ int wxListBox::GetSelection() const )); } // end of wxListBox::GetSelection -wxString wxListBox::GetString( - int N -) const +wxString wxListBox::GetString(unsigned int n) const { - LONG lLen = 0; - char* zBuf; - wxString sResult; + LONG lLen = 0; + wxChar* zBuf; + wxString sResult; - wxCHECK_MSG( N >= 0 && N < m_nNumItems, "", + wxCHECK_MSG( IsValid(n), wxEmptyString, wxT("invalid index in wxListBox::GetClientData") ); - lLen = LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)N, (MPARAM)0)); - zBuf = new char[lLen + 1]; - ::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXT, MPFROM2SHORT((SHORT)N, (SHORT)lLen), (MPARAM)zBuf); + lLen = LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)n, (MPARAM)0)); + zBuf = new wxChar[lLen + 1]; + ::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXT, MPFROM2SHORT((SHORT)n, (SHORT)lLen), (MPARAM)zBuf); zBuf[lLen] = '\0'; sResult = zBuf; delete [] zBuf; return sResult; } // end of wxListBox::GetString -void wxListBox::DoInsertItems( - const wxArrayString& asItems -, int nPos -) +void wxListBox::DoInsertItems(const wxArrayString& asItems, unsigned int nPos) { - wxCHECK_RET( nPos >= 0 && nPos <= m_nNumItems, + wxCHECK_RET( IsValidInsert(nPos), wxT("invalid index in wxListBox::InsertItems") ); - int nItems = asItems.GetCount(); + unsigned int nItems = asItems.GetCount(); - for (int i = 0; i < nItems; i++) + for (unsigned int i = 0; i < nItems; i++) { - int nIndex = (int)::WinSendMsg( GetHwnd() - ,LM_INSERTITEM - ,MPFROMLONG((LONG)(i + nPos)) - ,(MPARAM)asItems[i].c_str() - ); + int nIndex = (int)::WinSendMsg( GetHwnd(), + LM_INSERTITEM, + MPFROMLONG((LONG)(i + nPos)), + (MPARAM)asItems[i].c_str() ); - wxOwnerDrawn* pNewItem = CreateItem(nIndex); + wxOwnerDrawn* pNewItem = CreateItem(nIndex); pNewItem->SetName(asItems[i]); pNewItem->SetFont(GetFont()); m_aItems.Insert(pNewItem, nIndex); ::WinSendMsg( GetHwnd() ,LM_SETITEMHANDLE - ,(MPARAM)((SHORT)nIndex) + ,(MPARAM)((LONG)nIndex) ,MPFROMP(pNewItem) ); m_nNumItems += nItems; } } // end of wxListBox::DoInsertItems -void wxListBox::SetString( - int N -, const wxString& rsString -) +void wxListBox::SetString(unsigned int n, const wxString& rsString) { - wxCHECK_RET( N >= 0 && N < m_nNumItems, + wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::SetString") ); // // Remember the state of the item // - bool bWasSelected = IsSelected(N); - void* pOldData = NULL; - wxClientData* pOldObjData = NULL; + bool bWasSelected = IsSelected(n); + void* pOldData = NULL; + wxClientData* pOldObjData = NULL; if (m_clientDataItemsType == wxClientData_Void) - pOldData = GetClientData(N); + pOldData = GetClientData(n); else if (m_clientDataItemsType == wxClientData_Object) - pOldObjData = GetClientObject(N); + pOldObjData = GetClientObject(n); // // Delete and recreate it // ::WinSendMsg( GetHwnd() ,LM_DELETEITEM - ,(MPARAM)N + ,(MPARAM)n ,(MPARAM)0 ); - int nNewN = N; + int nNewN = n; - if (N == m_nNumItems - 1) + if (n == (m_nNumItems - 1)) nNewN = -1; ::WinSendMsg( GetHwnd() @@ -686,30 +620,26 @@ void wxListBox::SetString( // Restore the client data // if (pOldData) - SetClientData( N - ,pOldData - ); + SetClientData(n, pOldData); else if (pOldObjData) - SetClientObject( N - ,pOldObjData - ); + SetClientObject(n, pOldObjData); // // We may have lost the selection // if (bWasSelected) - Select(N); + Select(n); #if wxUSE_OWNER_DRAWN if (m_windowStyle & wxLB_OWNERDRAW) // // Update item's text // - m_aItems[N]->SetName(rsString); + m_aItems[n]->SetName(rsString); #endif //USE_OWNER_DRAWN } // end of wxListBox::SetString -int wxListBox::GetCount() const +unsigned int wxListBox::GetCount() const { return m_nNumItems; } @@ -723,19 +653,17 @@ wxSize wxListBox::DoGetBestSize() const // // Find the widest string // - int nLine; - int nListbox = 0; - int nCx; - int nCy; + int nLine; + int nListbox = 0; + int nCx; + int nCy; + wxFont vFont = (wxFont)GetFont(); - for (int i = 0; i < m_nNumItems; i++) + for (unsigned int i = 0; i < m_nNumItems; i++) { - wxString vStr(GetString(i)); + wxString vStr(GetString(i)); - GetTextExtent( vStr - ,&nLine - ,NULL - ); + GetTextExtent( vStr, &nLine, NULL ); if (nLine > nListbox) nListbox = nLine; } @@ -753,11 +681,11 @@ wxSize wxListBox::DoGetBestSize() const wxGetCharSize( GetHWND() ,&nCx ,&nCy - ,(wxFont*)&GetFont() + ,&vFont ); nListbox += 3 * nCx; - int hListbox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * (wxMax(m_nNumItems, 7)); + int hListbox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * (wxMax(m_nNumItems, 7)); return wxSize( nListbox ,hListbox @@ -778,7 +706,7 @@ bool wxListBox::OS2Command( { eEvtType = wxEVT_COMMAND_LISTBOX_SELECTED; } - if (uParam == LN_ENTER) + else if (uParam == LN_ENTER) { eEvtType = wxEVT_COMMAND_LISTBOX_DOUBLECLICKED; } @@ -787,7 +715,7 @@ bool wxListBox::OS2Command( // // Some event we're not interested in // - return FALSE; + return false; } wxCommandEvent vEvent( eEvtType ,m_windowId @@ -795,9 +723,9 @@ bool wxListBox::OS2Command( vEvent.SetEventObject(this); - wxArrayInt aSelections; - int n; - int nCount = GetSelections(aSelections); + wxArrayInt aSelections; + int n; + int nCount = GetSelections(aSelections); if (nCount > 0) { @@ -812,7 +740,7 @@ bool wxListBox::OS2Command( { n = -1; } - vEvent.m_commandInt = n; + vEvent.SetInt(n); return GetEventHandler()->ProcessEvent(vEvent); } // end of wxListBox::OS2Command @@ -828,9 +756,7 @@ bool wxListBox::OS2Command( // #define OWNER_DRAWN_LISTBOX_EXTRA_SPACE (1) -long wxListBox::OS2OnMeasure( - WXMEASUREITEMSTRUCT* pItem -) +long wxListBox::OS2OnMeasure(WXMEASUREITEMSTRUCT* pItem) { if (!pItem) pItem = (WXMEASUREITEMSTRUCT*)new OWNERITEM; @@ -857,7 +783,7 @@ long wxListBox::OS2OnMeasure( pMeasureStruct->rclItem.yTop = 0; pMeasureStruct->rclItem.yBottom = 0; - vHeight = vDc.GetCharHeight() * 2.5; + vHeight = (wxCoord)(vDc.GetCharHeight() * 2.5); pMeasureStruct->rclItem.yTop = (USHORT)vHeight; return long(MRFROM2SHORT((USHORT)vHeight, (USHORT)vWidth)); @@ -875,14 +801,14 @@ bool wxListBox::OS2OnDraw ( // // Only owner-drawn control should receive this message // - wxCHECK(((m_windowStyle & wxLB_OWNERDRAW) == wxLB_OWNERDRAW), FALSE); + wxCHECK(((m_windowStyle & wxLB_OWNERDRAW) == wxLB_OWNERDRAW), false); // // The item may be -1 for an empty listbox // if (lItemID == -1L) - return FALSE; + return false; wxListBoxItem* pData = (wxListBoxItem*)PVOIDFROMMR( ::WinSendMsg( GetHwnd() ,LM_QUERYITEMHANDLE @@ -891,16 +817,12 @@ bool wxListBox::OS2OnDraw ( ) ); - wxCHECK(pData, FALSE ); + wxCHECK(pData, false ); - wxDC vDc; - wxRect vRect( wxPoint( pDrawStruct->rclItem.xLeft - ,pDrawStruct->rclItem.yTop - ) - ,wxPoint( pDrawStruct->rclItem.xRight - ,pDrawStruct->rclItem.yBottom - ) - ); + wxDC vDc; + wxPoint pt1( pDrawStruct->rclItem.xLeft, pDrawStruct->rclItem.yTop ); + wxPoint pt2( pDrawStruct->rclItem.xRight, pDrawStruct->rclItem.yBottom ); + wxRect vRect( pt1, pt2 ); vDc.SetHPS(pDrawStruct->hps); @@ -964,7 +886,7 @@ bool wxListBox::OS2OnDraw ( // For now we don't care about anything else // just ignore the entire message! // - return TRUE; + return true; } } return pData->OnDrawItem( vDc @@ -976,5 +898,4 @@ bool wxListBox::OS2OnDraw ( #endif // ndef for wxUSE_OWNER_DRAWN -#endif // ndef for wxUSE_LISTBOX - +#endif // wxUSE_LISTBOX