defaulttablemodel.cpp

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

CPP
641
字号
//DefaultTableModel.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/DefaultTableModel.h"#include "vcf/ApplicationKit/DefaultTableCellItem.h"using namespace VCF;DefaultTableModel::DefaultTableModel():	focusedCell_(NULL){	init();}DefaultTableModel::~DefaultTableModel(){	std::vector<TTableColumn*>::iterator rowIter = tableData_.begin();	while ( rowIter != tableData_.end() ){		TTableColumn* row = *rowIter;		std::vector<TableCellItem*>::iterator it = row->begin();		while ( it != row->end() ){			TableCellItem* item = *it;			delete item;			item = NULL;			it++;		}		row->clear();		delete row;		row = NULL;		rowIter ++;	}	tableData_.clear();}void DefaultTableModel::init(){	columnCount_ = 0;	rowCount_ = 0;	fixedRowsCount_ = 0;	fixedColumnsCount_ = 0;	selectionContainer_.initContainer( selectionMap_ );}Enumerator<TableCellItem*>* DefaultTableModel::getSelectedCells(){	return selectionContainer_.getEnumerator();}void DefaultTableModel::validate(){}void DefaultTableModel::empty(){	std::vector<TTableColumn*>::iterator rowIter = tableData_.begin();	while ( rowIter != tableData_.end() ){		TTableColumn* row = *rowIter;		std::vector<TableCellItem*>::iterator it = row->begin();		while ( it != row->end() ){			TableCellItem* item = *it;			delete item;			item = NULL;			it++;		}		row->clear();		delete row;		row = NULL;		rowIter ++;	}	tableData_.clear();	columnCount_ = 0;	rowCount_ = 0;	fixedColumnsCount_ = 0;	fixedRowsCount_ = 0;	focusedCell_ = NULL;	selectionMap_.clear();	AbstractModel::empty();}void DefaultTableModel::addRow(){	addRows( 1 );}void DefaultTableModel::insertRow( const uint32& afterRow ){	if ( 0 == columnCount_ ){		columnCount_++; //gotta have at least one column !	}	rowCount_ ++;	TTableColumn* newRow = new TTableColumn();	for ( ulong32 i=0;i<columnCount_;i++){		TableCellItem* newItem = createCell( afterRow, i );		newItem->setModel( this );		newRow->push_back( newItem );	}	tableData_.insert( tableData_.begin() + afterRow, newRow );	TableModelEvent event( this, ROWS_ADDED, afterRow, 1 );	TableRowsAdded.fireEvent( &event );}void DefaultTableModel::addRows( const uint32& count ){	int start = rowCount_;	rowCount_ += count;	tableData_.resize( rowCount_, NULL );	for ( int row=start;row<rowCount_;row++ ) {		TTableColumn* newRow = new TTableColumn();		tableData_[row] = newRow;		newRow->resize( columnCount_, NULL );		for ( ulong32 i=0;i<columnCount_;i++){			TableCellItem* newItem = createCell( row, i );			newItem->setModel( this );			if ( i < fixedColumnsCount_ ) {				newItem->setFixed( true );			}			(*newRow)[i] = newItem;		}	}	TableModelEvent event( this, ROWS_ADDED, start, count );	TableRowsAdded.fireEvent( &event );	/*	bool notifyFirstColumnAdded = false;	if ( 0 == columnCount_ ){		columnCount_++; //gotta have at least one column !		notifyFirstColumnAdded = true;	}	for ( int j=0;j<count;j++ ) {		rowCount_ ++;		TTableColumn* newRow = new TTableColumn();		for ( ulong32 i=0;i<columnCount_;i++){			TableCellItem* newItem = createCell( rowCount_-1, i );			newItem->setColumn( i );			newItem->setRow( rowCount_ -1 );			newRow->push_back( newItem );		}		tableData_.push_back( newRow );	}	if ( notifyFirstColumnAdded ) {		TableModelEvent columnEvent( this, COLUMN_ADDED, NO_ROW_CHANGED, columnCount_-1 );		TableColumnAdded.fireEvent( &columnEvent );	}	*/}void DefaultTableModel::deleteRow( const uint32& row ){	TableModelEvent event( this, ROWS_DELETED, row, 1 );	TableRowsDeleted.fireEvent( &event );	std::vector<TTableColumn*>::iterator found = tableData_.begin() + row;	if ( found != tableData_.end() ){		TTableColumn* row = *found;		std::vector<TableCellItem*>::iterator it = row->begin();		while ( it != row->end() ){			TableCellItem* item = *it;			delete item;			item = NULL;			it++;		}		tableData_.erase( found );		delete row;		row = NULL;		if ( rowCount_ > 0 ){			rowCount_ --;		}	}}void DefaultTableModel::addColumn(){	addColumns( 1 );}void DefaultTableModel::addColumns( const uint32& count ){	int startCol = columnCount_;	for ( int j=0;j<count;j++ ) {		columnCount_ ++;		int i = 0;		std::vector<TTableColumn*>::iterator rowIter = tableData_.begin();		while ( rowIter != tableData_.end() ){			TTableColumn* row = *rowIter;			TableCellItem* newItem = createCell( i, columnCount_-1 );			newItem->setModel( this );			if ( columnCount_-1 < this->fixedColumnsCount_ ) {				newItem->setFixed( true );			}			row->push_back( newItem );			rowIter++;			i++;		}	}	TableModelEvent event( this, COLUMNS_ADDED, NO_ROW_CHANGED, 0, startCol, count );	TableColumnsAdded.fireEvent( &event );}void DefaultTableModel::insertColumn( const uint32& afterColumn ){	columnCount_ ++;	if ( 0 == rowCount_ ){		addRow();//gotta have at least one row !	}	else {		int i = 0;		std::vector<TTableColumn*>::iterator rowIter = tableData_.begin();		while ( rowIter != tableData_.end() ){			TTableColumn* row = *rowIter;			TableCellItem* newItem = createCell( i, afterColumn );			newItem->setModel( this );			if ( afterColumn < this->fixedColumnsCount_ ) {				newItem->setFixed( true );			}			row->insert( row->begin() + afterColumn, newItem );			rowIter++;			i++;		}	}	TableModelEvent event( this, COLUMNS_ADDED, NO_ROW_CHANGED, 0, afterColumn, 1 );	TableColumnsAdded.fireEvent( &event );}void DefaultTableModel::deleteColumn( const uint32& column ){	TableModelEvent event( this, COLUMNS_DELETED, NO_ROW_CHANGED, 0, column, 1 );	TableColumnsDeleted.fireEvent( &event );	std::vector<TTableColumn*>::iterator rowIter = tableData_.begin();	while ( rowIter != tableData_.end() ){		TTableColumn* row = *rowIter;		std::vector<TableCellItem*>::iterator found = row->begin() + column;		if ( found != row->end() ){			TableCellItem* item = *found;			row->erase( found );			delete item;			item = NULL;		}		rowIter++;	}	if ( columnCount_ > 0 ){		columnCount_--;	}}bool DefaultTableModel::isCellEditable( const uint32& row, const uint32& column ){	bool result = false;	TableCellItem* item = getItem( row, column );	if ( NULL != item ){		result = item->isEditable();	}	return result;}TableCellItem* DefaultTableModel::getItem( const uint32& row, const uint32& column ){	TableCellItem* result = NULL;	TTableColumn* rows = tableData_[row];	result = (*rows)[column];	return result;}uint32 DefaultTableModel::getRowCount(){	return rowCount_;}uint32 DefaultTableModel::getColumnCount(){	return columnCount_;}TableRowItemEnumerator* DefaultTableModel::getRowItemEnumerator( const uint32& row ){	TableRowItemEnumerator* result = NULL;	rowEnumContainer_.initContainer( *(tableData_[row]) );

⌨️ 快捷键说明

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