+++ /dev/null
-///////////////////////////////////////////////////////////////////////////////
-// Name: src/mac/carbon/checklst.cpp
-// Purpose: implementation of wxCheckListBox class
-// Author: Stefan Csomor
-// Modified by:
-// Created: 1998-01-01
-// RCS-ID: $Id$
-// Copyright: (c) Stefan Csomor
-// Licence: wxWindows licence
-///////////////////////////////////////////////////////////////////////////////
-//
-// new DataBrowser-based version
-
-
-#include "wx/wxprec.h"
-
-#if wxUSE_CHECKLISTBOX
-
-#include "wx/checklst.h"
-
-#ifndef WX_PRECOMP
- #include "wx/arrstr.h"
-#endif
-
-#include "wx/mac/uma.h"
-
-IMPLEMENT_DYNAMIC_CLASS(wxCheckListBox, wxListBox)
-
-BEGIN_EVENT_TABLE(wxCheckListBox, wxListBox)
-END_EVENT_TABLE()
-
-class wxMacDataBrowserCheckListControl : public wxMacDataBrowserListControl , public wxMacCheckListControl
-{
-public:
- wxMacDataBrowserCheckListControl( wxListBox *peer, const wxPoint& pos, const wxSize& size, long style );
- wxMacDataBrowserCheckListControl() {}
- virtual ~wxMacDataBrowserCheckListControl();
-
- virtual wxMacDataItem* CreateItem();
-
- virtual bool MacIsChecked(unsigned int n) const;
- virtual void MacCheck(unsigned int n, bool bCheck = true);
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataBrowserCheckListControl)
-};
-
-IMPLEMENT_DYNAMIC_CLASS( wxMacDataBrowserCheckListControl , wxMacDataBrowserListControl )
-
-void wxCheckListBox::Init()
-{
-}
-
-bool wxCheckListBox::Create(
- wxWindow *parent,
- wxWindowID id,
- const wxPoint &pos,
- const wxSize &size,
- const wxArrayString& choices,
- long style,
- const wxValidator& validator,
- const wxString &name )
-{
- wxCArrayString chs( choices );
-
- return Create( parent, id, pos, size, chs.GetCount(), chs.GetStrings(), style, validator, name );
-}
-
-bool wxCheckListBox::Create(
- wxWindow *parent,
- wxWindowID id,
- const wxPoint& pos,
- const wxSize& size,
- int n,
- const wxString choices[],
- long style,
- const wxValidator& validator,
- const wxString& name )
-{
- m_macIsUserPane = false;
-
- wxASSERT_MSG( !(style & wxLB_MULTIPLE) || !(style & wxLB_EXTENDED),
- wxT("only one of listbox selection modes can be specified") );
-
- if ( !wxListBoxBase::Create( parent, id, pos, size, style & ~(wxHSCROLL | wxVSCROLL), validator, name ) )
- return false;
-
- // this will be increased by our Append command
- wxMacDataBrowserCheckListControl* control = new wxMacDataBrowserCheckListControl( this, pos, size, style );
- // TODO CHECK control->SetClientDataType( m_clientDataItemsType );
- m_peer = control;
-
- MacPostControlCreate(pos,size);
-
- InsertItems( n , choices , 0 );
-
- // Needed because it is a wxControlWithItems
- SetInitialSize( size );
-
- return true;
-}
-
-// ----------------------------------------------------------------------------
-// wxCheckListBox functions
-// ----------------------------------------------------------------------------
-
-bool wxCheckListBox::IsChecked(unsigned int item) const
-{
- wxCHECK_MSG( IsValid(item), false,
- wxT("invalid index in wxCheckListBox::IsChecked") );
-
- return GetPeer()->MacIsChecked( item );
-}
-
-void wxCheckListBox::Check(unsigned int item, bool check)
-{
- wxCHECK_RET( IsValid(item),
- wxT("invalid index in wxCheckListBox::Check") );
-
- bool isChecked = GetPeer()->MacIsChecked( item );
- if ( check != isChecked )
- {
- GetPeer()->MacCheck( item , check );
- }
-}
-
-wxMacCheckListControl* wxCheckListBox::GetPeer() const
-{
- wxMacDataBrowserCheckListControl *lb = wxDynamicCast(m_peer,wxMacDataBrowserCheckListControl);
- return lb ? wx_static_cast(wxMacCheckListControl*,lb) : 0 ;
-}
-
-const short kCheckboxColumnId = 1026;
-
-wxMacDataBrowserCheckListControl::wxMacDataBrowserCheckListControl( wxListBox *peer, const wxPoint& pos, const wxSize& size, long style)
- : wxMacDataBrowserListControl( peer, pos, size, style )
-{
- OSStatus err = noErr;
-
- DataBrowserListViewColumnDesc columnDesc;
- columnDesc.headerBtnDesc.titleOffset = 0;
- columnDesc.headerBtnDesc.version = kDataBrowserListViewLatestHeaderDesc;
-
- columnDesc.headerBtnDesc.btnFontStyle.flags =
- kControlUseFontMask | kControlUseJustMask;
-
- columnDesc.headerBtnDesc.btnContentInfo.contentType = kControlNoContent;
- columnDesc.headerBtnDesc.btnFontStyle.just = teFlushDefault;
- columnDesc.headerBtnDesc.btnFontStyle.font = kControlFontViewSystemFont;
- columnDesc.headerBtnDesc.btnFontStyle.style = normal;
- columnDesc.headerBtnDesc.titleString = NULL;
-
- columnDesc.headerBtnDesc.minimumWidth = 30;
- columnDesc.headerBtnDesc.maximumWidth = 30;
-
- columnDesc.propertyDesc.propertyID = kCheckboxColumnId;
- columnDesc.propertyDesc.propertyType = kDataBrowserCheckboxType;
- columnDesc.propertyDesc.propertyFlags =
- kDataBrowserPropertyIsMutable
- | kDataBrowserTableViewSelectionColumn
- | kDataBrowserDefaultPropertyFlags;
-
- err = AddColumn( &columnDesc, 0 );
- verify_noerr( err );
-}
-
-wxMacDataBrowserCheckListControl::~wxMacDataBrowserCheckListControl()
-{
-
-}
-
-class wxMacCheckListBoxItem : public wxMacListBoxItem
-{
-public :
- wxMacCheckListBoxItem()
- {
- m_isChecked = false;
- }
-
- virtual ~wxMacCheckListBoxItem()
- {
- }
-
- virtual OSStatus GetSetData( wxMacDataItemBrowserControl *owner ,
- DataBrowserPropertyID property,
- DataBrowserItemDataRef itemData,
- bool changeValue )
- {
- OSStatus err = errDataBrowserPropertyNotSupported;
-
- wxCheckListBox *checklist = wxDynamicCast( owner->GetPeer() , wxCheckListBox );
- wxCHECK_MSG( checklist != NULL , errDataBrowserPropertyNotSupported , wxT("wxCheckListBox expected"));
-
- if ( !changeValue )
- {
- switch (property)
- {
- case kCheckboxColumnId:
- verify_noerr(SetDataBrowserItemDataButtonValue( itemData, m_isChecked ? kThemeButtonOn : kThemeButtonOff ));
- err = noErr;
- break;
-
- case kDataBrowserItemIsEditableProperty:
- verify_noerr(SetDataBrowserItemDataBooleanValue( itemData, true ));
- err = noErr;
- break;
-
- default:
- break;
- }
- }
- else
- {
- switch (property)
- {
- case kCheckboxColumnId:
- {
- // we have to change this behind the back, since Check() would be triggering another update round
- bool newVal = !m_isChecked;
- verify_noerr(SetDataBrowserItemDataButtonValue( itemData, newVal ? kThemeButtonOn : kThemeButtonOff ));
- m_isChecked = newVal;
- err = noErr;
-
- wxCommandEvent event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, checklist->GetId() );
- event.SetInt( owner->GetLineFromItem( this ) );
- event.SetEventObject( checklist );
- checklist->HandleWindowEvent( event );
- }
- break;
-
- default:
- break;
- }
- }
-
- if ( err == errDataBrowserPropertyNotSupported )
- err = wxMacListBoxItem::GetSetData( owner , property, itemData , changeValue);
-
- return err;
- }
-
- void Check( bool check )
- {
- m_isChecked = check;
- }
- bool IsChecked() const
- {
- return m_isChecked;
- }
-
-protected :
- bool m_isChecked;
-};
-
-wxMacDataItem* wxMacDataBrowserCheckListControl::CreateItem()
-{
- return new wxMacCheckListBoxItem();
-}
-
-void wxMacDataBrowserCheckListControl::MacCheck( unsigned int n, bool bCheck)
-{
- wxMacCheckListBoxItem* item = wx_static_cast(wxMacCheckListBoxItem*, GetItemFromLine( n) );
- item->Check( bCheck);
- UpdateItem(wxMacDataBrowserRootContainer, item , kCheckboxColumnId);
-}
-
-bool wxMacDataBrowserCheckListControl::MacIsChecked( unsigned int n) const
-{
- wxMacCheckListBoxItem * item = wx_static_cast( wxMacCheckListBoxItem*, GetItemFromLine( n ) );
- return item->IsChecked();
-}
-
-
-
-#endif // wxUSE_CHECKLISTBOX