osxlistview.cpp
来自「这是VCF框架的代码」· C++ 代码 · 共 660 行 · 第 1/2 页
CPP
660 行
//OSXListview.cpp/*Copyright 2000-2004 The VCF Project.Please see License.txt in the top level directorywhere you installed the VCF.*/#include "vcf/ApplicationKit/ApplicationKit.h"#include "vcf/ApplicationKit/ApplicationKitPrivate.h"#include "vcf/ApplicationKit/ListViewControl.h"#include "vcf/ApplicationKit/OSXControl.h"#include "vcf/ApplicationKit/OSXListview.h"#define OSX_LISTVIEW_CTRL_PRIMARY_COL 'PRIM'using namespace VCF;struct ForEachData { OSXListview* listview;};struct FindPtForItemData : public ForEachData { VCF::Rect rect; VCF::Point* pt;};OSXListview::OSXListview( ListViewControl* listviewControl ): OSXControl( listviewControl ), listviewControl_( listviewControl ){}OSXListview::~OSXListview(){ }void OSXListview::create( Control* owningControl ){ ::Rect r; r.left = 0; r.top = 0; r.right = 0; r.bottom = 0; OSStatus err; if ( noErr == CreateDataBrowserControl( NULL, &r, kDataBrowserListView, &hiView_ ) ) { DataBrowserCallbacks callbacks; callbacks.version = kDataBrowserLatestCallbacks; err = InitDataBrowserCallbacks( &callbacks ); callbacks.u.v1.itemDataCallback = OSXListview::DBItemDataCallback; callbacks.u.v1.itemNotificationCallback = OSXListview::DBItemNotificationCallback; err = SetDataBrowserCallbacks( hiView_, &callbacks ); //create initial column (DataBrowser doesn't work without at least one column DataBrowserListViewColumnDesc col; col.propertyDesc.propertyID = OSX_LISTVIEW_CTRL_PRIMARY_COL; col.propertyDesc.propertyType = kDataBrowserTextType; col.propertyDesc.propertyFlags = kDataBrowserListViewSelectionColumn; col.headerBtnDesc.version = kDataBrowserListViewLatestHeaderDesc; col.headerBtnDesc.minimumWidth = 10; col.headerBtnDesc.maximumWidth = 200; col.headerBtnDesc.titleOffset = 0; col.headerBtnDesc.titleString = NULL; col.headerBtnDesc.initialOrder = kDataBrowserOrderIncreasing; col.headerBtnDesc.btnFontStyle.flags = 0; col.headerBtnDesc.btnFontStyle.font = 0; col.headerBtnDesc.btnFontStyle.size = 0; col.headerBtnDesc.btnFontStyle.style = 0; col.headerBtnDesc.btnFontStyle.mode = 0; col.headerBtnDesc.btnFontStyle.just = 0; col.headerBtnDesc.btnContentInfo.contentType = kControlContentTextOnly; AddDataBrowserListViewColumn( hiView_, &col, 0 ); SetDataBrowserSelectionFlags( hiView_, kDataBrowserSelectOnlyOne | kDataBrowserResetSelection ); SetDataBrowserTableViewHiliteStyle( hiView_, kDataBrowserTableViewFillHilite ); OSXControl* thisPtr = this; SetControlProperty( hiView_, VCF_PROPERTY_CREATOR, VCF_PROPERTY_CONTROL_VAL, sizeof(thisPtr), &thisPtr ); err = OSXControl::installStdControlHandler(); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("InstallEventHandler failed for OSXTree!") ); } EventHandler* ev = new GenericEventHandler<OSXListview>( this, &OSXListview::onControlModelChanged, "OSXListview::onControlModelChanged" ); owningControl->ControlModelChanged += ev; } else { throw RuntimeException( MAKE_ERROR_MSG_2("CreateDataBrowserControl failed to create view!") ); }}OSStatus OSXListview::DBItemDataCallback( ControlRef browser, DataBrowserItemID item, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean setValue ){ OSStatus err = noErr; if ( !setValue ) { switch ( property ) { case OSX_LISTVIEW_CTRL_PRIMARY_COL : { ListItem* listItem = (ListItem*)item; CFTextString tmp; tmp = listItem->getCaption(); SetDataBrowserItemDataText( itemData, tmp ); } break; case kDataBrowserItemIsSelectableProperty : { err = SetDataBrowserItemDataBooleanValue( itemData, true ); } break; case kDataBrowserItemIsContainerProperty : { SetDataBrowserItemDataBooleanValue( itemData, false ); } break; default: { err = errDataBrowserPropertyNotSupported; } break; } } else { err = errDataBrowserPropertyNotSupported; } return err;}void OSXListview::DBItemNotificationCallback( ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message){ switch (message) { case kDataBrowserContainerOpened: { } break; case kDataBrowserItemSelected : { SetDataBrowserSelectedItems( browser, 1, &itemID, kDataBrowserItemsAdd ); } break; case kDataBrowserItemDeselected : { SetDataBrowserSelectedItems( browser, 1, &itemID, kDataBrowserItemsRemove ); } break; }}void OSXListview::addItem( ListItem * item ){ //unsigned int index = item->getIndex(); DataBrowserItemID dbItem = (DataBrowserItemID)item; AddDataBrowserItems( hiView_, kDataBrowserNoItem, 1, &dbItem, kDataBrowserItemNoProperty );}void OSXListview::insertItem( const unsigned long& index, ListItem * item ){}void OSXListview::clear(){ RemoveDataBrowserItems( hiView_, kDataBrowserNoItem, 0, NULL, kDataBrowserItemNoProperty );}void OSXListview::deleteItem( ListItem* item ){ //unsigned int index = item->getIndex(); DataBrowserItemID dbItem = (DataBrowserItemID)item; RemoveDataBrowserItems( hiView_, kDataBrowserNoItem, 1, &dbItem, kDataBrowserItemNoProperty );}bool OSXListview::ensureVisible(ListItem * item, bool partialOK ){ bool result = false; return result;}void OSXListview::setFocusedItem(ListItem * item){ }void OSXListview::selectItem(ListItem * item){ }VCF::Rect OSXListview::getItemRect( ListItem* item ){ VCF::Rect result; UInt32 columns = 0; GetDataBrowserTableViewColumnCount( hiView_, &columns ); DataBrowserTableViewColumnID colID = 0; DataBrowserItemID itemID = (DataBrowserItemID)item; ::Rect itemBounds; for (UInt32 col=0;col<columns;col++ ) { GetDataBrowserTableViewColumnProperty( hiView_, col, &colID ); GetDataBrowserItemPartBounds( hiView_, itemID, colID, kDataBrowserPropertyEnclosingPart, &itemBounds ); if ( col == 0 ) { result.left_ = itemBounds.left; result.top_ = itemBounds.top; result.right_ = itemBounds.right; result.bottom_ = itemBounds.bottom; } else { result.right_ = itemBounds.right; result.bottom_ = itemBounds.bottom; } } return result;}bool OSXListview::isItemSelected(ListItem* item){ bool result = false; return result;}void OSXListview::findPtForEachItem ( DataBrowserItemID item, DataBrowserItemState state, void *clientData ){ //FindPtForItemData* data = (FindPtForItemData*)clientData; ::Rect itemBounds; //DataBrowserTableViewColumnID colID = 0; //GetDataBrowserItemPartBounds( data->listview->hiView_, item, colID, kDataBrowserPropertyEnclosingPart, &itemBounds );}ListItem* OSXListview::isPtOverItem( Point* point ){ ListItem* result = NULL; FindPtForItemData data; data.listview = this; data.pt = point; if ( noErr == ForEachDataBrowserItem( hiView_, kDataBrowserNoItem, false, 0, OSXListview::findPtForEachItem, &data ) ) { //result = data.rect; } return result;}ListItem* OSXListview::getFocusedItem(){ ListItem* result = NULL; return result;}ListItem* OSXListview::getSelectedItem(){ ListItem* result = NULL; Handle items = NewHandle(0); if ( noErr == GetDataBrowserItems( hiView_, kDataBrowserNoItem, false, kDataBrowserItemIsSelected, items ) ) { int count = GetHandleSize(items)/sizeof(DataBrowserItemID); if ( count > 0 ) { HLock( items ); DataBrowserItemID* item = *((DataBrowserItemID**)items); result = (ListItem*)(*item); HUnlock( items ); } } DisposeHandle( items ); return result;}Enumerator<ListItem*>* OSXListview::getSelectedItems(){ ListItem* item = NULL; return NULL;}void OSXListview::rangeSelect( Rect* selectionRect ){}void OSXListview::addHeaderColumn( const String& columnName, const double& width ){ UInt32 columnCount = 0; GetDataBrowserTableViewColumnCount( hiView_, &columnCount );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?