treecontrol.cpp

来自「这是VCF框架的代码」· C++ 代码 · 共 581 行 · 第 1/2 页

CPP
581
字号
//TreeControl.cpp/*Copyright 2000-2004 The VCF Project.Please see License.txt in the top level directorywhere you installed the VCF.*//* Generated by Together */#include "vcf/ApplicationKit/ApplicationKit.h"#include "vcf/ApplicationKit/TreeControl.h"#include "vcf/ApplicationKit/TreePeer.h"#include "vcf/ApplicationKit/DefaultTreeModel.h"#include "vcf/ApplicationKit/DefaultTreeItem.h"using namespace VCF;TreeControl::TreeControl():	imageList_(NULL),	stateImageList_(NULL),	treeModel_(NULL),	currentSelectedItem_(NULL){	treePeer_ = UIToolkit::createTreePeer( this );	peer_ = dynamic_cast<ControlPeer*>( treePeer_ );	if ( NULL == treePeer_ ){		throw InvalidPeer(MAKE_ERROR_MSG(NO_PEER), __LINE__);	};	peer_->create( this );	init();	setVisible( true );}TreeControl::~TreeControl(){	if ( NULL != treeModel_ ) {//		treeModel_->release();	}	treeModel_ = NULL;}void TreeControl::init(){	TreeModelEventHandler<TreeControl>* tmh =		new TreeModelEventHandler<TreeControl>( this,												&TreeControl::onTreeRootNodeChanged,												"TreeControl::onTreeRootNodeChanged" );	tmh = new TreeModelEventHandler<TreeControl>( this,													&TreeControl::onTreeNodeAdded,													"TreeControl::onTreeNodeAdded" );	tmh = new TreeModelEventHandler<TreeControl>( this,													&TreeControl::onTreeNodeDeleted,													"TreeControl::onTreeNodeDeleted" );		ModelEventHandler<TreeControl>* mh = new ModelEventHandler<TreeControl>( this, &TreeControl::onModelEmptied, "ModelHandler" );	setTreeModel( new DefaultTreeModel() );	addComponent( getViewModel() );	setBorder( new Basic3DBorder( true ) );	setColor( GraphicsToolkit::getSystemColor( SYSCOLOR_WINDOW ) );}void TreeControl::setTreeModel( TreeModel * model ){	if ( NULL != treeModel_ ){		EventHandler* ev = getEventHandler( "TreeControl::onTreeRootNodeChanged" );		treeModel_->removeTreeRootNodeChangedHandler ( ev );		ev = getEventHandler( "TreeControl::onTreeNodeAdded" );		treeModel_->removeTreeNodeAddedHandler( ev );		ev = getEventHandler( "TreeControl::onTreeNodeDeleted" );		treeModel_->removeTreeNodeDeletedHandler( ev );		ev = getEventHandler( "ModelHandler" );		getViewModel()->removeModelHandler( ev );	}	treeModel_ = model;	if ( NULL != treeModel_ ) {		EventHandler* tml = getEventHandler( "TreeControl::onTreeRootNodeChanged" );		treeModel_->addTreeRootNodeChangedHandler ( tml );		tml = getEventHandler( "TreeControl::onTreeNodeAdded" );		treeModel_->addTreeNodeAddedHandler( tml );		tml = getEventHandler( "TreeControl::onTreeNodeDeleted" );		treeModel_->addTreeNodeDeletedHandler( tml );			}	setViewModel( dynamic_cast<Model*>(treeModel_) );	if ( NULL != treeModel_ ) {		getViewModel()->addModelHandler( getEventHandler( "ModelHandler" ) );	}}TreeModel* TreeControl::getTreeModel(){	return treeModel_;}ImageList* TreeControl::getImageList(){	return imageList_;}void TreeControl::setImageList( ImageList* imageList ){	imageList_ = imageList;	treePeer_->setImageList( imageList );}void TreeControl::paint( GraphicsContext * context ){	Rect innerBounds = getClientBounds( false );		context->setColor( getColor() );				context->rectangle( &innerBounds );				context->fillPath();}void TreeControl::onTreeRootNodeChanged( TreeModelEvent* event ){	TreeItem* item = event->getTreeItem();	//treePeer_->addItem( item );}void TreeControl::onTreeNodeAdded( TreeModelEvent* event ){	TreeItem* item = event->getTreeItem();		item->setControl( this );	treePeer_->addItem( item );	EventHandler* il = getEventHandler( "TreeItemListener" );	if  ( il == NULL ) {		il = new ItemEventHandler<TreeControl>( this, &TreeControl::onTreeItemPaint, "TreeItemListener" );	}	item->addItemPaintHandler( il );}void TreeControl::onTreeNodeDeleted( TreeModelEvent* event ){	if ( currentSelectedItem_ == event->getTreeItem() ) {		currentSelectedItem_ = NULL;	}}void TreeControl::onModelEmptied( ModelEvent* event ){	treePeer_->clear();	currentSelectedItem_ = NULL;}TreeItem* TreeControl::hitTestForItem( Point* pt, TreeItem* item ){	TreeItem* result = NULL;	if ( item->containsPoint( pt ) ) {		result = item;	}	else if ( !item->isLeaf() && item->isExpanded() ){		Enumerator<TreeItem*>* children = item->getChildren();		while ( children->hasMoreElements() ) {			TreeItem* childItem = children->nextElement();			result = hitTestForItem( pt, childItem );			if ( result != NULL ) {				break;			}		}	}	return result;}TreeItem* TreeControl::findItem( Point* pt ){	TreeItem* result = NULL;	Enumerator<TreeItem*>* rootItems = treeModel_->getRootItems();	while ( true == rootItems->hasMoreElements() ) {		TreeItem* item = rootItems->nextElement();		result = hitTestForItem( pt, item );		if ( NULL != result ) {			break;		}	}	return result;}double TreeControl::getItemIndent(){	return treePeer_->getItemIndent();}void TreeControl::setItemIndent( const double& indent ){	treePeer_->setItemIndent( indent );}void TreeControl::onTreeItemPaint( ItemEvent* event ){	return ;	TreeItem* item = (TreeItem*)event->getSource();	GraphicsContext* context = event->getContext();	if ( NULL != context ) {		ImageList* il = getImageList();		if ( NULL != il ) {			Rect imgRect = *(item->getBounds());			imgRect.left_ += (item->getLevel()+1) * getItemIndent();			imgRect.right_ = imgRect.left_ + il->getImageWidth();			context->setColor( GraphicsToolkit::getSystemColor( SYSCOLOR_WINDOW ) );			context->rectangle( &imgRect );			context->fillPath();			if ( stateImageList_ == NULL ) {				il->draw( context, item->getImageIndex(), &imgRect );			}			else {				if ( true == item->isSelected() ) {					if ( true == item->isExpanded() ) {						if ( item->getExpandedImageIndex() >= 0 ) {							stateImageList_->draw( context, item->getExpandedImageIndex(), &imgRect );						}						else if ( item->getSelectedImageIndex() >= 0 ) {							stateImageList_->draw( context, item->getSelectedImageIndex(), &imgRect );						}						else {							il->draw( context, item->getImageIndex(), &imgRect );						}					}					else {						if ( item->getSelectedImageIndex() >= 0 ) {							stateImageList_->draw( context, item->getSelectedImageIndex(), &imgRect );						}						else {							il->draw( context, item->getImageIndex(), &imgRect );						}					}				}				else {					if ( true == item->isExpanded() ) {						if ( item->getExpandedImageIndex() >= 0 ) {							stateImageList_->draw( context, item->getExpandedImageIndex(), &imgRect );						}						else {							il->draw( context, item->getImageIndex(), &imgRect );						}					}					else {						il->draw( context, item->getImageIndex(), &imgRect );					}				}			}		}	}}void TreeControl::setStateImageList( ImageList* imageList ){	stateImageList_ = imageList;	treePeer_->setStateImageList( imageList );}ImageList* TreeControl::getStateImageList(){	return stateImageList_;

⌨️ 快捷键说明

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