From 84882850e5e71939d541c1788b8446576a41ca30 Mon Sep 17 00:00:00 2001 From: =?utf8?q?W=C5=82odzimierz=20Skiba?= Date: Thu, 29 Sep 2005 10:00:16 +0000 Subject: [PATCH] wxCheckListBox cleanup. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35761 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/os2/checklst.h | 18 +-- src/os2/checklst.cpp | 323 +++++++++++++++----------------------- 2 files changed, 134 insertions(+), 207 deletions(-) diff --git a/include/wx/os2/checklst.h b/include/wx/os2/checklst.h index d2d75ec498..c689208517 100644 --- a/include/wx/os2/checklst.h +++ b/include/wx/os2/checklst.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: checklst.h +// Name: wx/os2/checklst.h // Purpose: wxCheckListBox class - a listbox with checkable items // Note: this is an optional class. // Author: David Webster @@ -15,13 +15,11 @@ #include -#include "wx/setup.h" +#include "wx/defs.h" class wxOwnerDrawn; // so the compiler knows, it is a class. -class wxCheckListBoxItem; // fwd decl, define in checklst.cpp - -class WXDLLEXPORT wxCheckListBox : public wxListBox +class WXDLLEXPORT wxCheckListBox : public wxCheckListBoxBase { public: // @@ -52,10 +50,6 @@ public: // Override base class virtuals // virtual void Delete(int n); - virtual void InsertItems( int nItems - ,const wxString asItems[] - ,int nPos - ); virtual bool SetFont(const wxFont &rFont); @@ -64,7 +58,7 @@ public: // bool IsChecked(size_t uiIndex) const; void Check( size_t uiIndex - ,bool bCheck = TRUE + ,bool bCheck = true ); // @@ -80,6 +74,8 @@ protected: virtual wxOwnerDrawn* CreateItem(size_t n); virtual long OS2OnMeasure(WXMEASUREITEMSTRUCT* pItem); + virtual void DoInsertItems(const wxArrayString& items, int pos); + // // Pressing space or clicking the check box toggles the item // @@ -91,7 +87,7 @@ private: DECLARE_DYNAMIC_CLASS(wxCheckListBox) DECLARE_EVENT_TABLE() -}; // end of CLASS wxCheckListBoxItem +}; // end of CLASS wxCheckListBox #endif // _WX_CHECKLST_H_ diff --git a/src/os2/checklst.cpp b/src/os2/checklst.cpp index c1a5a5cc09..45004b7486 100644 --- a/src/os2/checklst.cpp +++ b/src/os2/checklst.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: checklst.cpp +// Name: src/os2/checklst.cpp // Purpose: implementation of wxCheckListBox class // Author: David Webster // Modified by: @@ -16,7 +16,7 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#if wxUSE_OWNER_DRAWN +#if wxUSE_CHECKLISTBOX && wxUSE_OWNER_DRAWN #include "wx/object.h" #include "wx/colour.h" @@ -28,7 +28,7 @@ #include "wx/settings.h" #include "wx/dcmemory.h" #include "wx/dcscreen.h" -#include "wx/os2/checklst.h" +#include "wx/checklst.h" #include "wx/log.h" #define INCL_PM @@ -58,17 +58,17 @@ public: // // ctor // - wxCheckListBoxItem( wxCheckListBox* pParent - ,size_t nIndex + wxCheckListBoxItem( wxCheckListBox* pParent, + size_t nIndex ); // // Drawing functions // - virtual bool OnDrawItem( wxDC& rDc - ,const wxRect& rRect - ,wxODAction eAct - ,wxODStatus eStat + virtual bool OnDrawItem( wxDC& rDc, + const wxRect& rRect, + wxODAction eAct, + wxODStatus eStat ); // @@ -79,20 +79,18 @@ public: void Toggle(void) { Check(!IsChecked()); } private: - bool m_bChecked; - wxCheckListBox* m_pParent; - size_t m_nIndex; + bool m_bChecked; + wxCheckListBox* m_pParent; + size_t m_nIndex; }; // end of CLASS wxCheckListBoxItem -wxCheckListBoxItem::wxCheckListBoxItem ( - wxCheckListBox* pParent -, size_t nIndex -) -: wxOwnerDrawn( wxEmptyString - ,TRUE // checkable - ) + + +wxCheckListBoxItem::wxCheckListBoxItem ( wxCheckListBox* pParent, + size_t nIndex) + :wxOwnerDrawn( wxEmptyString, true /* checkable */ ) { - m_bChecked = FALSE; + m_bChecked = false; m_pParent = pParent; m_nIndex = nIndex; @@ -104,18 +102,16 @@ wxCheckListBoxItem::wxCheckListBoxItem ( SetMarginWidth(GetDefaultMarginWidth()); } // end of wxCheckListBoxItem::wxCheckListBoxItem -bool wxCheckListBoxItem::OnDrawItem ( - wxDC& rDc -, const wxRect& rRect -, wxODAction eAct -, wxODStatus eStat -) + + +bool wxCheckListBoxItem::OnDrawItem ( wxDC& rDc, + const wxRect& rRect, + wxODAction eAct, + wxODStatus eStat ) { - wxRect vRect = rRect; + wxRect vRect = rRect; - ::WinQueryWindowRect( m_pParent->GetHWND() - ,&rDc.m_vRclPaint - ); + ::WinQueryWindowRect( m_pParent->GetHWND(), &rDc.m_vRclPaint ); if (IsChecked()) eStat = (wxOwnerDrawn::wxODStatus)(eStat | wxOwnerDrawn::wxODChecked); @@ -126,39 +122,28 @@ bool wxCheckListBoxItem::OnDrawItem ( // vRect.x += 5; vRect.y -= 3; - if (wxOwnerDrawn::OnDrawItem( rDc - ,vRect - ,eAct - ,eStat)) + if (wxOwnerDrawn::OnDrawItem( rDc, vRect, eAct, eStat)) { - size_t nCheckWidth = GetDefaultMarginWidth(); - size_t nCheckHeight = m_pParent->GetItemHeight(); - int nParentHeight; - int nX = rRect.GetX(); - int nY = rRect.GetY(); - int nOldY = nY; - wxColour vColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); - wxPen vPenBack; - wxPen vPenGray; - wxPen vPenPrev; - - m_pParent->GetSize( NULL - ,&nParentHeight - ); + size_t nCheckWidth = GetDefaultMarginWidth(); + size_t nCheckHeight = m_pParent->GetItemHeight(); + int nParentHeight; + int nX = rRect.GetX(); + int nY = rRect.GetY(); + int nOldY = nY; + wxColour vColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + wxPen vPenBack; + wxPen vPenPrev; + + m_pParent->GetSize( NULL, &nParentHeight); nY = nParentHeight - nY - nCheckHeight; vPenBack = wxPen(vColour, 1, wxSOLID); - vPenGray = wxPen(wxColour(127, 127, 127), 1, wxSOLID); // // Erase the 1-pixel border // rDc.SetPen(vPenBack); - rDc.DrawRectangle( nX - ,nY - ,nCheckWidth - ,nCheckHeight - ); + rDc.DrawRectangle( nX, nY, nCheckWidth, nCheckHeight ); // // Now we draw the smaller rectangle @@ -170,12 +155,8 @@ bool wxCheckListBoxItem::OnDrawItem ( // // Draw hollow gray rectangle // - rDc.SetPen(vPenGray); - rDc.DrawRectangle( nX - ,nY - ,nCheckWidth - ,nCheckHeight - ); + rDc.SetPen(*wxGREY_PEN); + rDc.DrawRectangle( nX, nY, nCheckWidth, nCheckHeight ); nX++; if (IsChecked()) @@ -183,31 +164,27 @@ bool wxCheckListBoxItem::OnDrawItem ( // // Draw the check by loading the sys standard bitmap and drawing it // - HBITMAP hChkBmp = ::WinGetSysBitmap( HWND_DESKTOP - ,SBMP_MENUCHECK - ); - POINTL vPoint = {nX, nOldY + 3}; - - ::WinDrawBitmap( rDc.GetHPS() - ,hChkBmp - ,NULL - ,&vPoint - ,NULL - ,NULL - ,DBM_NORMAL + HBITMAP hChkBmp = ::WinGetSysBitmap( HWND_DESKTOP, SBMP_MENUCHECK ); + POINTL vPoint = {nX, nOldY + 3}; + + ::WinDrawBitmap( rDc.GetHPS(), + hChkBmp, + NULL, + &vPoint, + NULL, + NULL, + DBM_NORMAL ); } - return TRUE; + return true; } - return FALSE; + return false; } // end of wxCheckListBoxItem::OnDrawItem // // Change the state of the item and redraw it // -void wxCheckListBoxItem::Check ( - bool bCheck -) +void wxCheckListBoxItem::Check ( bool bCheck ) { m_bChecked = bCheck; @@ -219,7 +196,7 @@ void wxCheckListBoxItem::Check ( // // Update it // - int nIndex = m_pParent->GetItemIndex(this); + int nIndex = m_pParent->GetItemIndex(this); wxASSERT_MSG(nIndex != wxNOT_FOUND, wxT("what does this item do here?")); @@ -227,15 +204,14 @@ void wxCheckListBoxItem::Check ( } - wxCommandEvent vEvent( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED - ,m_pParent->GetId() - ); + wxCommandEvent vEvent( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED,m_pParent->GetId()); vEvent.SetInt(m_nIndex); vEvent.SetEventObject(m_pParent); m_pParent->ProcessCommand(vEvent); } // end of wxCheckListBoxItem::Check + // ---------------------------------------------------------------------------- // implementation of wxCheckListBox class // ---------------------------------------------------------------------------- @@ -243,10 +219,12 @@ void wxCheckListBoxItem::Check ( // define event table // ------------------ BEGIN_EVENT_TABLE(wxCheckListBox, wxListBox) - EVT_CHAR(wxCheckListBox::OnChar) - EVT_LEFT_DOWN(wxCheckListBox::OnLeftClick) + EVT_CHAR(wxCheckListBox::OnChar) + EVT_LEFT_DOWN(wxCheckListBox::OnLeftClick) END_EVENT_TABLE() + + // // Control creation // ---------------- @@ -256,119 +234,84 @@ END_EVENT_TABLE() // Default ctor: use Create() to really create the control // wxCheckListBox::wxCheckListBox() -: wxListBox() + :wxCheckListBoxBase() { } // end of wxCheckListBox::wxCheckListBox // // Ctor which creates the associated control // -wxCheckListBox::wxCheckListBox ( - wxWindow* pParent -, wxWindowID vId -, const wxPoint& rPos -, const wxSize& rSize -, int nStrings -, const wxString asChoices[] -, long lStyle -, const wxValidator& rVal -, const wxString& rsName -) - : wxListBox() +wxCheckListBox::wxCheckListBox ( wxWindow* pParent, + wxWindowID vId, + const wxPoint& rPos, + const wxSize& rSize, + int nStrings, + const wxString asChoices[], + long lStyle, + const wxValidator& rVal, + const wxString& rsName) + :wxCheckListBoxBase() { - Create( pParent - ,vId - ,rPos - ,rSize - ,nStrings - ,asChoices - ,lStyle | wxLB_OWNERDRAW - ,rVal - ,rsName - ); + Create( pParent, vId, rPos, rSize, nStrings, asChoices, lStyle | wxLB_OWNERDRAW, rVal, rsName ); } // end of wxCheckListBox::wxCheckListBox -wxCheckListBox::wxCheckListBox ( - wxWindow* pParent -, wxWindowID vId -, const wxPoint& rPos -, const wxSize& rSize -, const wxArrayString& asChoices -, long lStyle -, const wxValidator& rVal -, const wxString& rsName -) - : wxListBox() +wxCheckListBox::wxCheckListBox ( wxWindow* pParent, + wxWindowID vId, + const wxPoint& rPos, + const wxSize& rSize, + const wxArrayString& asChoices, + long lStyle, + const wxValidator& rVal, + const wxString& rsName ) + :wxCheckListBoxBase() { wxCArrayString chs(asChoices); - Create( pParent - ,vId - ,rPos - ,rSize - ,chs.GetCount() - ,chs.GetStrings() - ,lStyle | wxLB_OWNERDRAW - ,rVal - ,rsName - ); + Create( pParent, vId, rPos, rSize, chs.GetCount(), chs.GetStrings(), + lStyle | wxLB_OWNERDRAW, rVal, rsName ); } // end of wxCheckListBox::wxCheckListBox -void wxCheckListBox::Delete( - int N -) +void wxCheckListBox::Delete( int n ) { - wxCHECK_RET( N >= 0 && N < m_nNumItems, - wxT("invalid index in wxListBox::Delete") ); - wxListBox::Delete(N); + wxCHECK_RET( n >= 0 && n < m_nNumItems, + wxT("invalid index in wxCheckListBox::Delete") ); + wxListBox::Delete(n); // // Free memory // - delete m_aItems[N]; - m_aItems.RemoveAt(N); + delete m_aItems[n]; + m_aItems.RemoveAt(n); } // end of wxCheckListBox::Delete -void wxCheckListBox::InsertItems ( - int nItems -, const wxString asItems[] -, int nPos -) +void wxCheckListBox::DoInsertItems(const wxArrayString& items, int pos) { - int i; - - wxCHECK_RET( nPos >= 0 && nPos <= m_nNumItems, - wxT("invalid index in wxCheckListBox::InsertItems") ); - - wxListBox::InsertItems( nItems - ,asItems - ,nPos - ); - for (i = 0; i < nItems; i++) + // pos is validated in wxListBox + wxListBox::DoInsertItems( items, pos ); + int n = items.GetCount(); + for (int i = 0; i < n; i++) { - wxOwnerDrawn* pNewItem = CreateItem((size_t)(nPos + i)); - - pNewItem->SetName(asItems[i]); - m_aItems.Insert(pNewItem, (size_t)(nPos + i)); - ::WinSendMsg( (HWND)GetHWND() - ,LM_SETITEMHANDLE - ,(MPARAM)(i + nPos) - ,MPFROMP(pNewItem) + wxOwnerDrawn* pNewItem = CreateItem((size_t)(pos + i)); + + pNewItem->SetName(items[i]); + m_aItems.Insert(pNewItem, (size_t)(pos + i)); + ::WinSendMsg( (HWND)GetHWND(), + LM_SETITEMHANDLE, + (MPARAM)(i + pos), + MPFROMP(pNewItem) ); } } // end of wxCheckListBox::InsertItems -bool wxCheckListBox::SetFont ( - const wxFont& rFont -) +bool wxCheckListBox::SetFont ( const wxFont& rFont ) { - size_t i; - - for (i = 0; i < m_aItems.GetCount(); i++) + for (size_t i = 0; i < m_aItems.GetCount(); i++) m_aItems[i]->SetFont(rFont); wxListBox::SetFont(rFont); - return TRUE; + return true; } // end of wxCheckListBox::SetFont + + // // Create/retrieve item // -------------------- @@ -377,29 +320,25 @@ bool wxCheckListBox::SetFont ( // // Create a check list box item // -wxOwnerDrawn* wxCheckListBox::CreateItem ( - size_t nIndex -) +wxOwnerDrawn* wxCheckListBox::CreateItem ( size_t nIndex ) { - wxCheckListBoxItem* pItem = new wxCheckListBoxItem( this - ,nIndex - ); + wxCheckListBoxItem* pItem = new wxCheckListBoxItem( this, nIndex ); return pItem; } // end of wxCheckListBox::CreateItem + + // // Return item size // ---------------- // -long wxCheckListBox::OS2OnMeasure ( - WXMEASUREITEMSTRUCT* pItem -) +long wxCheckListBox::OS2OnMeasure ( WXMEASUREITEMSTRUCT* pItem ) { if (!pItem) pItem = (WXMEASUREITEMSTRUCT*)new OWNERITEM; - if (wxListBox::OS2OnMeasure(pItem) ) + if (wxListBox::OS2OnMeasure(pItem)) { - POWNERITEM pStruct = (POWNERITEM)pItem; + POWNERITEM pStruct = (POWNERITEM)pItem; // // Save item height @@ -415,32 +354,29 @@ long wxCheckListBox::OS2OnMeasure ( return 0L; } // end of wxCheckListBox::CreateItem + + // // Check items // ----------- // -bool wxCheckListBox::IsChecked ( - size_t uiIndex -) const +bool wxCheckListBox::IsChecked ( size_t uiIndex) const { return GetItem(uiIndex)->IsChecked(); } // end of wxCheckListBox::IsChecked -void wxCheckListBox::Check ( - size_t uiIndex -, bool bCheck -) +void wxCheckListBox::Check ( size_t uiIndex, bool bCheck ) { GetItem(uiIndex)->Check(bCheck); } // end of wxCheckListBox::Check + + // // Process events // -------------- // -void wxCheckListBox::OnChar ( - wxKeyEvent& rEvent -) +void wxCheckListBox::OnChar ( wxKeyEvent& rEvent ) { if (rEvent.GetKeyCode() == WXK_SPACE) GetItem(GetSelection())->Toggle(); @@ -448,9 +384,7 @@ void wxCheckListBox::OnChar ( rEvent.Skip(); } // end of wxCheckListBox::OnChar -void wxCheckListBox::OnLeftClick ( - wxMouseEvent& rEvent -) +void wxCheckListBox::OnLeftClick ( wxMouseEvent& rEvent ) { // // Clicking on the item selects it, clicking on the checkmark toggles @@ -461,20 +395,18 @@ void wxCheckListBox::OnLeftClick ( wxScreenDC vDc; wxCoord vHeight; - GetSize( NULL - ,&nParentHeight - ); + GetSize( NULL, &nParentHeight ); vDc.SetFont(GetFont()); vHeight = (wxCoord)(vDc.GetCharHeight() * 2.5); // // This, of course, will not work if the LB is scrolled // - int nY = rEvent.GetY(); + int nY = rEvent.GetY(); nY = nParentHeight - (nY + vHeight); - size_t nItem = (size_t)(nY / vHeight); + size_t nItem = (size_t)(nY / vHeight); if (nItem < (size_t)m_nNumItems) GetItem(nItem)->Toggle(); @@ -491,5 +423,4 @@ void wxCheckListBox::OnLeftClick ( } } // end of wxCheckListBox::OnLeftClick -#endif - +#endif // wxUSE_CHECKLISTBOX && wxUSE_OWNER_DRAWN -- 2.45.2