defaulttreeitem.cpp

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

CPP
637
字号
//DefaultTreeItem.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/DefaultTreeItem.h"#include "vcf/ApplicationKit/TreeModel.h"using namespace VCF;DefaultTreeItem::DefaultTreeItem(){	init();}DefaultTreeItem::DefaultTreeItem( const String& caption ){	init();	caption_ = caption;}DefaultTreeItem::DefaultTreeItem( const String& caption, Control* owningControl, TreeModel* model ){	init();	owningControl_ = owningControl;	model_ = dynamic_cast<Model*>(model);	setCaption( caption );}DefaultTreeItem::~DefaultTreeItem(){	std::vector<TreeItem::SubItem*>::iterator subIt = subItems_.begin();	while ( subIt != subItems_.end() ) {		(*subIt)->release();		subIt++;	}	subItems_.clear();	std::vector<TreeItem*>::iterator it = childNodeItems_.begin();	while ( it != childNodeItems_.end() ){		delete *it;		it++;	}	childNodeItems_.clear();}void DefaultTreeItem::init(){	imageIndex_ = 0;	isExpanded_ = false;	tag_ = -1;	selectedImageIndex_ = -1;	expandedImageIndex_ = -1;	stateImageIndex_ = -1;	selected_ = false;	itemState_ = Item::idsNone;	bounds_.setRect(0.0,0.0,0.0,0.0);	owningControl_ = NULL;	caption_ = "";	childNodeItems_.clear();	parent_ = NULL;	textBold_ = false;	TextColor_ = *GraphicsToolkit::getSystemColor( SYSCOLOR_WINDOW_TEXT );	userData_ = NULL;	enumContainer_.initContainer( childNodeItems_ );	enumSubItemsContainer_.initContainer( subItems_ );}bool DefaultTreeItem::containsPoint( Point * pt ){	return bounds_.containsPt( pt );}unsigned long DefaultTreeItem::getIndex(){	return index_;}void DefaultTreeItem::setIndex( const unsigned long& index ){	index_ = index;}void* DefaultTreeItem::getData(){	return userData_;}void DefaultTreeItem::setData( void* data ){	userData_ = data;	ItemEvent event( this );	ItemChanged.fireEvent( &event );}Color* DefaultTreeItem::getTextColor(){	return &TextColor_;}void DefaultTreeItem::setTextColor(Color* color){	TextColor_ = *color;	ItemEvent event( this );	ItemChanged.fireEvent( &event );}void DefaultTreeItem::setTextBold(const bool& bold){	textBold_ = bold;	ItemEvent event( this );	ItemChanged.fireEvent( &event );}bool DefaultTreeItem::getTextBold(){	return textBold_;}bool DefaultTreeItem::isRoot(){	return ( NULL == parent_ );}bool DefaultTreeItem::isLeaf(){	return  childNodeItems_.empty();}TreeItem* DefaultTreeItem::getParent(){	return parent_;}void DefaultTreeItem::setParent( TreeItem* parent ){	parent_ = parent;	ItemEvent event( this );	ItemChanged.fireEvent( &event );}TreeItem* DefaultTreeItem::getNextChildNodeItem(){	if ( NULL != parent_ ) {		DefaultTreeItem* dtParent = dynamic_cast<DefaultTreeItem*>(parent_);		if ( NULL != dtParent ) {			std::vector<TreeItem*>::iterator it = std::find( dtParent->childNodeItems_.begin(),															 dtParent->childNodeItems_.end(),															 this );			it ++;			if ( it != dtParent->childNodeItems_.end() ) {				return *it;			}		}	}	return NULL;}TreeItem* DefaultTreeItem::getPrevChildNodeItem(){	if ( NULL != parent_ ) {		DefaultTreeItem* dtParent = dynamic_cast<DefaultTreeItem*>(parent_);		if ( (NULL != dtParent) && (index_ > 0) ) {			std::vector<TreeItem*>::iterator it = std::find( dtParent->childNodeItems_.begin(),															 dtParent->childNodeItems_.end(),															 this );			it --;			if ( (it != dtParent->childNodeItems_.end()) && ( it >= dtParent->childNodeItems_.begin() ) ) {				return *it;			}		}	}	return NULL;}String DefaultTreeItem::getCaption(){	Control* control = getControl();	if ( getUseLocaleStrings() && (NULL != control) && (control->getUseLocaleStrings()) ) {		return System::getCurrentThreadLocale()->translate( caption_ );	}	return caption_;}void DefaultTreeItem::setCaption( const String& caption ){	caption_ = caption;	changed( ITEM_EVENT_TEXT_CHANGED );}uint32 DefaultTreeItem::getChildCount(){	return childNodeItems_.size();}Enumerator<TreeItem*>* DefaultTreeItem::getChildren(){	return enumContainer_.getEnumerator();}void DefaultTreeItem::addChild( TreeItem* child ){//	StringUtils::trace( "Adding child " + child->getCaption() + "\n" );	childNodeItems_.push_back( child );	child->setParent( this );	ItemEvent event( this, ITEM_EVENT_ADDED );	ItemAdded.fireEvent( &event );}void DefaultTreeItem::insertChild( const unsigned long& index, TreeItem* child ){	std::vector<TreeItem*>::iterator it = childNodeItems_.begin();	childNodeItems_.insert( it + index, child );	child->setParent( this );	ItemEvent event( this, ITEM_EVENT_ADDED );	ItemAdded.fireEvent( &event );	it = childNodeItems_.begin() + index;	int i = index;	while ( it != childNodeItems_.end() ) {		TreeItem* item = *it;		item->setIndex( i );		it ++;		i++;	}}void DefaultTreeItem::deleteChild( TreeItem* child ){	std::vector<TreeItem*>::iterator found = std::find( childNodeItems_.begin(), childNodeItems_.end(), child );	if ( found != childNodeItems_.end() ) {		int index = found - childNodeItems_.begin();		TreeItem* item = *found;		ItemEvent event( child, ITEM_EVENT_DELETED );		ItemDeleted.fireEvent( &event );		delete item;		item = NULL;		childNodeItems_.erase ( found );		int i = index;		std::vector<TreeItem*>::iterator it = childNodeItems_.begin() + index;		while ( it != childNodeItems_.end() ) {			item = *it;			item->setIndex( i );			it ++;			i ++;		}	}}void DefaultTreeItem::deleteChildAtIndex( const unsigned long& index ){	std::vector<TreeItem*>::iterator found =  childNodeItems_.begin() + index;	if ( found != childNodeItems_.end() ) {		TreeItem* item = *found;		ItemEvent event( item, ITEM_EVENT_DELETED );		ItemDeleted.fireEvent( &event );		childNodeItems_.erase ( found );		delete item;		item = NULL;		int i = index;		std::vector<TreeItem*>::iterator it = childNodeItems_.begin() + index;		while ( it != childNodeItems_.end() ) {			item = *it;			item->setIndex( i );			it ++;			i ++;		}	}}void DefaultTreeItem::clearChildren(){	for (std::vector<TreeItem*>::iterator it = childNodeItems_.begin(); it != childNodeItems_.end(); it ++ ){		TreeItem* item = *it;		item->clearChildren();		ItemEvent deleteEvent( item, ITEM_EVENT_DELETED );		ItemDeleted.fireEvent( &deleteEvent );		delete item;	}	childNodeItems_.clear();	ItemEvent event( this );	ItemChanged.fireEvent( &event );}void DefaultTreeItem::setModel( Model* model ){	Item::setModel( model );	for (std::vector<TreeItem*>::iterator it = childNodeItems_.begin(); it != childNodeItems_.end(); it ++ ){		(*it)->setModel( model );	}}void DefaultTreeItem::paint( GraphicsContext* context, Rect* paintRect ){	bounds_ = *paintRect;	ItemEvent event( this, context );	ItemPaint.fireEvent( &event );}bool DefaultTreeItem::isSelected()

⌨️ 快捷键说明

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