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 + -
显示快捷键?