⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checklst.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
///////////////////////////////////////////////////////////////////////////////// Name:        src/mac/carbon/checklst.cpp// Purpose:     implementation of wxCheckListBox class// Author:      Stefan Csomor// Modified by:// Created:     1998-01-01// RCS-ID:      $Id: checklst.cpp,v 1.51 2006/12/08 15:03:08 SC Exp $// 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"#ifndef __DARWIN__#include <Appearance.h>#endifIMPLEMENT_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 );    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->GetEventHandler()->ProcessEvent( 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -