[QGIS Commit] r10425 - trunk/qgis/src/app/attributetable
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri Mar 27 13:38:00 EDT 2009
Author: jef
Date: 2009-03-27 13:37:59 -0400 (Fri, 27 Mar 2009)
New Revision: 10425
Modified:
trunk/qgis/src/app/attributetable/BeataDialog.cpp
trunk/qgis/src/app/attributetable/BeataModel.cpp
Log:
use QgsDebugMsg instead of iostream in BEATA and reindent
Modified: trunk/qgis/src/app/attributetable/BeataDialog.cpp
===================================================================
--- trunk/qgis/src/app/attributetable/BeataDialog.cpp 2009-03-26 22:10:51 UTC (rev 10424)
+++ trunk/qgis/src/app/attributetable/BeataDialog.cpp 2009-03-27 17:37:59 UTC (rev 10425)
@@ -1,5 +1,5 @@
/***************************************************************************
- BeataDialog.cpp
+ BeataDialog.cpp
BEtter Attribute TAble
-------------------
date : Feb 2009
@@ -29,6 +29,7 @@
#include "qgisapp.h"
#include "qgssearchquerybuilder.h"
+#include "qgslogger.h"
class QBeataTableDock : public QDockWidget
@@ -37,7 +38,7 @@
QBeataTableDock( const QString & title, QWidget * parent = 0, Qt::WindowFlags flags = 0 )
: QDockWidget( title, parent, flags )
{
- setObjectName("AttributeTable"); // set object name so the position can be saved
+ setObjectName( "AttributeTable" ); // set object name so the position can be saved
}
virtual void closeEvent( QCloseEvent * ev )
@@ -47,22 +48,22 @@
};
-BeataDialog::BeataDialog(QgsVectorLayer *theLayer, QWidget *parent, Qt::WindowFlags flags)
- : QDialog(parent, flags), mDock(NULL)
+BeataDialog::BeataDialog( QgsVectorLayer *theLayer, QWidget *parent, Qt::WindowFlags flags )
+ : QDialog( parent, flags ), mDock( NULL )
{
mLayer = theLayer;
- setupUi(this);
-
- setAttribute(Qt::WA_DeleteOnClose);
+ setupUi( this );
+ setAttribute( Qt::WA_DeleteOnClose );
+
QSettings settings;
restoreGeometry( settings.value( "/Windows/BetterAttributeTable/geometry" ).toByteArray() );
-
- mView->setLayer(mLayer);
- mFilterModel = (BeataFilterModel *) mView->model();
- mModel = (BeataModel *)((BeataFilterModel *)mView->model())->sourceModel();
+ mView->setLayer( mLayer );
+ mFilterModel = ( BeataFilterModel * ) mView->model();
+ mModel = ( BeataModel * )(( BeataFilterModel * )mView->model() )->sourceModel();
+
mQuery = query;
mColumnBox = columnBox;
columnBoxInit();
@@ -78,35 +79,35 @@
}
setWindowTitle( tr( "Attribute table - %1" ).arg( mLayer->name() ) );
-
- mRemoveSelectionButton->setIcon(getThemeIcon( "/mActionUnselectAttributes.png" ));
- mSelectedToTopButton->setIcon(getThemeIcon( "/mActionSelectedToTop.png" ));
- mCopySelectedRowsButton->setIcon(getThemeIcon( "/mActionCopySelected.png" ));
- mZoomMapToSelectedRowsButton->setIcon(getThemeIcon( "/mActionZoomToSelected.png" ) );
- mInvertSelectionButton->setIcon(getThemeIcon( "/mActionInvertSelection.png" ) );
- mToggleEditingButton->setIcon(getThemeIcon( "/mActionToggleEditing.png" ) );
+
+ mRemoveSelectionButton->setIcon( getThemeIcon( "/mActionUnselectAttributes.png" ) );
+ mSelectedToTopButton->setIcon( getThemeIcon( "/mActionSelectedToTop.png" ) );
+ mCopySelectedRowsButton->setIcon( getThemeIcon( "/mActionCopySelected.png" ) );
+ mZoomMapToSelectedRowsButton->setIcon( getThemeIcon( "/mActionZoomToSelected.png" ) );
+ mInvertSelectionButton->setIcon( getThemeIcon( "/mActionInvertSelection.png" ) );
+ mToggleEditingButton->setIcon( getThemeIcon( "/mActionToggleEditing.png" ) );
// toggle editing
mToggleEditingButton->setCheckable( true );
mToggleEditingButton->setEnabled( mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::ChangeAttributeValues );
-
+
// info from table to application
connect( this, SIGNAL( editingToggled( QgsMapLayer * ) ), QgisApp::instance(), SLOT( toggleEditing( QgsMapLayer * ) ) );
// info from layer to table
connect( mLayer, SIGNAL( editingStarted() ), this, SLOT( editingToggled() ) );
connect( mLayer, SIGNAL( editingStopped() ), this, SLOT( editingToggled() ) );
-
- connect(searchButton, SIGNAL(clicked()), this, SLOT(search()));
- connect(mLayer, SIGNAL(selectionChanged()), this, SLOT(updateSelectionFromLayer()));
- connect(mLayer, SIGNAL(layerDeleted()), this, SLOT( close()));
- connect(mView->verticalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(updateRowSelection(int)));
- connect(mModel, SIGNAL(modelChanged()), this, SLOT(updateSelection()));
-
+ connect( searchButton, SIGNAL( clicked() ), this, SLOT( search() ) );
+
+ connect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( updateSelectionFromLayer() ) );
+ connect( mLayer, SIGNAL( layerDeleted() ), this, SLOT( close() ) );
+ connect( mView->verticalHeader(), SIGNAL( sectionClicked( int ) ), this, SLOT( updateRowSelection( int ) ) );
+ connect( mModel, SIGNAL( modelChanged() ), this, SLOT( updateSelection() ) );
+
//make sure to show all recs on first load
on_cbxShowSelectedOnly_toggled( false );
mLastClickedHeaderIndex = 0;
- mSelectionModel = new QItemSelectionModel(mFilterModel);
+ mSelectionModel = new QItemSelectionModel( mFilterModel );
updateSelectionFromLayer();
}
@@ -117,7 +118,7 @@
void BeataDialog::closeEvent( QCloseEvent* event )
{
QDialog::closeEvent( event );
-
+
if ( mDock == NULL )
{
QSettings settings;
@@ -129,7 +130,7 @@
QIcon BeataDialog::getThemeIcon( const QString theName )
{
// copied from QgisApp::getThemeIcon. To be removed when merged to SVN
-
+
QString myPreferredPath = QgsApplication::activeThemePath() + QDir::separator() + theName;
QString myDefaultPath = QgsApplication::defaultThemePath() + QDir::separator() + theName;
if ( QFile::exists( myPreferredPath ) )
@@ -150,7 +151,7 @@
void BeataDialog::showAdvanced()
{
- mMenuActions->exec(QCursor::pos());
+ mMenuActions->exec( QCursor::pos() );
}
void BeataDialog::on_mSelectedToTopButton_clicked()
@@ -163,29 +164,29 @@
mModel->incomingChangeLayout();
QgsFeatureIds::Iterator it = mSelectedFeatures.begin();
- for (; it != mSelectedFeatures.end(); ++it, ++freeIndex)
+ for ( ; it != mSelectedFeatures.end(); ++it, ++freeIndex )
{
- QModelIndex sourceIndex = mFilterModel->mapToSource(mFilterModel->index(freeIndex, 0));
- mModel->swapRows(mModel->rowToId(sourceIndex.row()), *it);
+ QModelIndex sourceIndex = mFilterModel->mapToSource( mFilterModel->index( freeIndex, 0 ) );
+ mModel->swapRows( mModel->rowToId( sourceIndex.row() ), *it );
}
-/*
- while (it != fids.end())
- { //map!!!!
- //mModel->swapRows(mModel->rowToId(freeIndex), *it);
- //QModelIndex index = mFilterModel->mapFromSource(mModel->index(mModel->idToRow(*it), 0));
- QModelIndex sourceIndex = mFilterModel->mapToSource(mFilterModel->index(freeIndex, 0));
- mModel->swapRows(mModel->rowToId(sourceIndex.row()), *it);
- //mModel->swapRows(freeIndex, *it);
+ /*
+ while (it != fids.end())
+ { //map!!!!
+ //mModel->swapRows(mModel->rowToId(freeIndex), *it);
+ //QModelIndex index = mFilterModel->mapFromSource(mModel->index(mModel->idToRow(*it), 0));
+ QModelIndex sourceIndex = mFilterModel->mapToSource(mFilterModel->index(freeIndex, 0));
+ mModel->swapRows(mModel->rowToId(sourceIndex.row()), *it);
+ //mModel->swapRows(freeIndex, *it);
- if (fids.empty())
- break;
- else
- ++it;
+ if (fids.empty())
+ break;
+ else
+ ++it;
- ++freeIndex;
- }
-*/
+ ++freeIndex;
+ }
+ */
// just select proper rows
//mModel->reload(mModel->index(0,0), mModel->index(mModel->rowCount(), mModel->columnCount()));
//mModel->changeLayout();
@@ -195,7 +196,7 @@
void BeataDialog::on_mCopySelectedRowsButton_clicked()
{
- QgisApp::instance()->editCopy(mLayer);
+ QgisApp::instance()->editCopy( mLayer );
}
void BeataDialog::on_mZoomMapToSelectedRowsButton_clicked()
@@ -226,8 +227,8 @@
QgsFieldMap fieldMap = mLayer->dataProvider()->fields();
QgsFieldMap::Iterator it = fieldMap.begin();
- for (; it != fieldMap.end(); ++it)
- mColumnBox->addItem(it.value().name());
+ for ( ; it != fieldMap.end(); ++it )
+ mColumnBox->addItem( it.value().name() );
}
int BeataDialog::columnBoxColumnId()
@@ -235,8 +236,8 @@
QgsFieldMap fieldMap = mLayer->dataProvider()->fields();
QgsFieldMap::Iterator it = fieldMap.begin();
- for (; it != fieldMap.end(); ++it)
- if (it.value().name() == mColumnBox->currentText())
+ for ( ; it != fieldMap.end(); ++it )
+ if ( it.value().name() == mColumnBox->currentText() )
return it.key();
return 0;
@@ -245,137 +246,145 @@
void BeataDialog::updateSelection()
{
QModelIndex index;
- mView->setSelectionMode(QAbstractItemView::MultiSelection);
+ mView->setSelectionMode( QAbstractItemView::MultiSelection );
QItemSelection selection;
-
+
QgsFeatureIds::Iterator it = mSelectedFeatures.begin();
- for (; it != mSelectedFeatures.end(); ++it)
+ for ( ; it != mSelectedFeatures.end(); ++it )
{
- QModelIndex leftUpIndex = mFilterModel->mapFromSource(mModel->index(mModel->idToRow(*it), 0));
- QModelIndex rightBottomIndex = mFilterModel->mapFromSource(mModel->index(mModel->idToRow(*it), mModel->columnCount() - 1));
- selection.append(QItemSelectionRange(leftUpIndex, rightBottomIndex));
+ QModelIndex leftUpIndex = mFilterModel->mapFromSource( mModel->index( mModel->idToRow( *it ), 0 ) );
+ QModelIndex rightBottomIndex = mFilterModel->mapFromSource( mModel->index( mModel->idToRow( *it ), mModel->columnCount() - 1 ) );
+ selection.append( QItemSelectionRange( leftUpIndex, rightBottomIndex ) );
//selection.append(QItemSelectionRange(leftUpIndex, leftUpIndex));
}
- mSelectionModel->select(selection, QItemSelectionModel::ClearAndSelect);// | QItemSelectionModel::Columns);
- mView->setSelectionModel(mSelectionModel);
- mView->setSelectionMode(QAbstractItemView::NoSelection);
+ mSelectionModel->select( selection, QItemSelectionModel::ClearAndSelect );// | QItemSelectionModel::Columns);
+ mView->setSelectionModel( mSelectionModel );
+ mView->setSelectionMode( QAbstractItemView::NoSelection );
/*for (int i = 0; i < mModel->rowCount(); ++i)
{
- int id = mModel->rowToId(i);
- std::cout << id << "\n";
+ int id = mModel->rowToId(i);
+ QgsDebugMsg(id);
}
- std::cout << "--------------\n";
-*/
+ QgsDebugMsg("--------------");
+ */
}
-void BeataDialog::updateRowSelection(int index)
+void BeataDialog::updateRowSelection( int index )
{
// map index to filter model
//index = mFilterModel->mapFromSource(mModel->index(index, 0)).row();
- if (mView->shiftPressed) {
- std::cout << "shift\n";
+ if ( mView->shiftPressed )
+ {
+ QgsDebugMsg( "shift" );
// get the first and last index of the rows to be selected/deselected
int first, last;
- if (index > mLastClickedHeaderIndex) {
+ if ( index > mLastClickedHeaderIndex )
+ {
first = mLastClickedHeaderIndex + 1;
last = index;
}
- else if (index == mLastClickedHeaderIndex) {
+ else if ( index == mLastClickedHeaderIndex )
+ {
// row was selected and now it is shift-clicked
// ignore the shift and deselect the row
first = last = index;
}
- else {
+ else
+ {
first = index;
last = mLastClickedHeaderIndex - 1;
}
-
+
// for all the rows update the selection, without starting a new selection
- if (first <= last)
- updateRowSelection(first, last, false);
-
+ if ( first <= last )
+ updateRowSelection( first, last, false );
+
mLastClickedHeaderIndex = last;
}
- else if (mView->ctrlPressed) {
- std::cout << "ctrl\n";
+ else if ( mView->ctrlPressed )
+ {
+ QgsDebugMsg( "ctrl" );
// update the single row selection, without starting a new selection
- updateRowSelection(index, index, false);
-
+ updateRowSelection( index, index, false );
+
// the next shift would start from here
mLastClickedHeaderIndex = index;
- }
- else {
- std::cout << "ordinary click\n";
+ }
+ else
+ {
+ QgsDebugMsg( "ordinary click" );
// update the single row selection, start a new selection if the row was not selected
- updateRowSelection(index, index, true);
-
+ updateRowSelection( index, index, true );
+
// the next shift would start from here
mLastClickedHeaderIndex = index;
}
}
// fast row deselection needed
-void BeataDialog::updateRowSelection(int first, int last, bool startNewSelection)
-{
- disconnect(mLayer, SIGNAL(selectionChanged()), this, SLOT(updateSelectionFromLayer()));
+void BeataDialog::updateRowSelection( int first, int last, bool startNewSelection )
+{
+ disconnect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( updateSelectionFromLayer() ) );
//index = mFilterModel->mapFromSource(mModel->index(index, 0)).row();
// Id must be mapped to table/view row
- QModelIndex index = mFilterModel->mapToSource(mFilterModel->index(first, 0));
- int fid = mModel->rowToId(index.row());
- bool wasSelected = mSelectedFeatures.contains(fid);
+ QModelIndex index = mFilterModel->mapToSource( mFilterModel->index( first, 0 ) );
+ int fid = mModel->rowToId( index.row() );
+ bool wasSelected = mSelectedFeatures.contains( fid );
// new selection should be created
- if (startNewSelection)
+ if ( startNewSelection )
{
mView->clearSelection();
mSelectedFeatures.clear();
- if (wasSelected)
+ if ( wasSelected )
{
mLayer->removeSelection();
- connect(mLayer, SIGNAL(selectionChanged()), this, SLOT(updateSelectionFromLayer()));
+ connect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( updateSelectionFromLayer() ) );
return;
}
// set clicked row to current
- mView->setCurrentIndex(mFilterModel->index(first, 0));
- mView->setSelectionMode(QAbstractItemView::SingleSelection);
+ mView->setCurrentIndex( mFilterModel->index( first, 0 ) );
+ mView->setSelectionMode( QAbstractItemView::SingleSelection );
//QModelIndex index = mFilterModel->mapFromSource(mModel->index(first, 0));
- mView->selectRow(first);
- mView->setSelectionMode(QAbstractItemView::NoSelection);
+ mView->selectRow( first );
+ mView->setSelectionMode( QAbstractItemView::NoSelection );
- mSelectedFeatures.insert(fid);
+ mSelectedFeatures.insert( fid );
//mLayer->setSelectedFeatures(mSelectedFeatures);
mLayer->removeSelection();
- mLayer->select(fid);
+ mLayer->select( fid );
//mFilterModel->invalidate();
- connect(mLayer, SIGNAL(selectionChanged()), this, SLOT(updateSelectionFromLayer()));
+ connect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( updateSelectionFromLayer() ) );
return;
}
// existing selection should be updated
- for (int i = first; i <= last; ++i) {
- if (i > first) {
+ for ( int i = first; i <= last; ++i )
+ {
+ if ( i > first )
+ {
// Id must be mapped to table/view row
- index = mFilterModel->mapToSource(mFilterModel->index(i, 0));
- fid = mModel->rowToId(index.row());
- wasSelected = mSelectedFeatures.contains(fid);
+ index = mFilterModel->mapToSource( mFilterModel->index( i, 0 ) );
+ fid = mModel->rowToId( index.row() );
+ wasSelected = mSelectedFeatures.contains( fid );
}
-
- if (wasSelected)
- mSelectedFeatures.remove(fid);
+
+ if ( wasSelected )
+ mSelectedFeatures.remove( fid );
else
- mSelectedFeatures.insert(fid);
+ mSelectedFeatures.insert( fid );
}
//mFilterModel->invalidate();
-
+
/*
QItemSelection selection;
QModelIndex leftUpIndex = mFilterModel->index(first, 0);
@@ -385,72 +394,72 @@
mView->setSelectionModel(mSelectionModel);
*/
updateSelection();
- mLayer->setSelectedFeatures(mSelectedFeatures);
- connect(mLayer, SIGNAL(selectionChanged()), this, SLOT(updateSelectionFromLayer()));
+ mLayer->setSelectedFeatures( mSelectedFeatures );
+ connect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( updateSelectionFromLayer() ) );
}
void BeataDialog::updateSelectionFromLayer()
{
- std::cout << "updateFromLayer\n";
+ QgsDebugMsg( "updateFromLayer" );
mSelectedFeatures = mLayer->selectedFeaturesIds();
updateSelection();
}
-void BeataDialog::doSearch(QString searchString)
+void BeataDialog::doSearch( QString searchString )
{
// parse search string and build parsed tree
QgsSearchString search;
- if (!search.setString(searchString))
+ if ( !search.setString( searchString ) )
{
- QMessageBox::critical(this, tr("Search string parsing error"), search.parserErrorMsg());
+ QMessageBox::critical( this, tr( "Search string parsing error" ), search.parserErrorMsg() );
return;
}
QgsSearchTreeNode* searchTree = search.tree();
- if (searchTree == NULL)
+ if ( searchTree == NULL )
{
- QMessageBox::information(this, tr("Search results"), tr("You've supplied an empty search string."));
+ QMessageBox::information( this, tr( "Search results" ), tr( "You've supplied an empty search string." ) );
return;
}
- QApplication::setOverrideCursor(Qt::WaitCursor);
+ QApplication::setOverrideCursor( Qt::WaitCursor );
mSelectedFeatures.clear();
- mLayer->select(mLayer->pendingAllAttributesList(), QgsRectangle(), false);
+ mLayer->select( mLayer->pendingAllAttributesList(), QgsRectangle(), false );
QgsFeature f;
- while (mLayer->nextFeature(f))
+ while ( mLayer->nextFeature( f ) )
{
- if (searchTree->checkAgainst(mLayer->pendingFields(), f.attributeMap()))
+ if ( searchTree->checkAgainst( mLayer->pendingFields(), f.attributeMap() ) )
mSelectedFeatures << f.id();
// check if there were errors during evaluating
- if (searchTree->hasError())
+ if ( searchTree->hasError() )
break;
}
QApplication::restoreOverrideCursor();
- if (searchTree->hasError())
+ if ( searchTree->hasError() )
{
- QMessageBox::critical(this, tr("Error during search"), searchTree->errorMsg());
+ QMessageBox::critical( this, tr( "Error during search" ), searchTree->errorMsg() );
return;
}
// update view
updateSelection();
- disconnect(mLayer, SIGNAL(selectionChanged()), this, SLOT(updateSelectionFromLayer()));
- mLayer->setSelectedFeatures(mSelectedFeatures);
- connect(mLayer, SIGNAL(selectionChanged()), this, SLOT(updateSelectionFromLayer()));
+ disconnect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( updateSelectionFromLayer() ) );
+ mLayer->setSelectedFeatures( mSelectedFeatures );
+ connect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( updateSelectionFromLayer() ) );
QString str;
- if (mSelectedFeatures.size())
- str.sprintf(tr("Found %d matching features.", "", mSelectedFeatures.size()).toUtf8(), mSelectedFeatures.size());
+ if ( mSelectedFeatures.size() )
+ str.sprintf( tr( "Found %d matching features.", "", mSelectedFeatures.size() ).toUtf8(), mSelectedFeatures.size() );
else
- str = tr("No matching features found.");
+ str = tr( "No matching features found." );
- QMessageBox::information(this, tr("Search results"), str);
+ QMessageBox::information( this, tr( "Search results" ), str );
}
void BeataDialog::search()
@@ -459,28 +468,28 @@
QString str = mColumnBox->currentText();
const QgsFieldMap& flds = mLayer->dataProvider()->fields();
- int fldIndex = mLayer->dataProvider()->fieldNameIndex(str);
+ int fldIndex = mLayer->dataProvider()->fieldNameIndex( str );
QVariant::Type fldType = flds[fldIndex].type();
- bool numeric = (fldType == QVariant::Int || fldType == QVariant::Double);
-
- if (numeric)
+ bool numeric = ( fldType == QVariant::Int || fldType == QVariant::Double );
+
+ if ( numeric )
str += " = '";
else
str += " ~ '";
-
+
str += mQuery->displayText();
str += "'";
- doSearch(str);
+ doSearch( str );
}
void BeataDialog::on_mAdvancedSearchButton_clicked()
{
- QgsSearchQueryBuilder dlg(mLayer, this);
- dlg.setSearchString(mQuery->displayText());
+ QgsSearchQueryBuilder dlg( mLayer, this );
+ dlg.setSearchString( mQuery->displayText() );
- if (dlg.exec())
- doSearch(dlg.searchString());
+ if ( dlg.exec() )
+ doSearch( dlg.searchString() );
}
void BeataDialog::on_mToggleEditingButton_toggled()
@@ -491,10 +500,10 @@
void BeataDialog::editingToggled()
{
mToggleEditingButton->setChecked( mLayer->isEditable() );
-
+
// (probably reload data if user stopped editing - possible revert)
- mModel->reload(mModel->index(0,0), mModel->index(mModel->rowCount(), mModel->columnCount()));
-
+ mModel->reload( mModel->index( 0, 0 ), mModel->index( mModel->rowCount(), mModel->columnCount() ) );
+
// not necessary to set table read only if layer is not editable
// because model always reflects actual state when returning item flags
}
@@ -516,5 +525,5 @@
{
mLayer->rollBack();
mModel->revert();
- mModel->reload(mModel->index(0,0), mModel->index(mModel->rowCount(), mModel->columnCount()));
+ mModel->reload( mModel->index( 0, 0 ), mModel->index( mModel->rowCount(), mModel->columnCount() ) );
}
Modified: trunk/qgis/src/app/attributetable/BeataModel.cpp
===================================================================
--- trunk/qgis/src/app/attributetable/BeataModel.cpp 2009-03-26 22:10:51 UTC (rev 10424)
+++ trunk/qgis/src/app/attributetable/BeataModel.cpp 2009-03-27 17:37:59 UTC (rev 10425)
@@ -1,7 +1,7 @@
/***************************************************************************
BeataModel.cpp
--------------------------------------
- Date : Feb 2009
+ Date : Feb 2009
Copyright : (C) 2009 Vita Cizek
Email : weetya (at) gmail.com
***************************************************************************
@@ -23,18 +23,19 @@
#include <QtGui>
#include <QVariant>
#include <QtAlgorithms>
+#include "qgslogger.h"
//could be faster when type guessed before sorting
-bool idColumnPair::operator<(const idColumnPair &b) const
+bool idColumnPair::operator<( const idColumnPair &b ) const
{
//QVariat thinks gid is a string!
QVariant::Type columnType = columnItem.type();
- if (columnType == QVariant::Int || columnType == QVariant::UInt || columnType == QVariant::LongLong || columnType == QVariant::ULongLong)
+ if ( columnType == QVariant::Int || columnType == QVariant::UInt || columnType == QVariant::LongLong || columnType == QVariant::ULongLong )
return columnItem.toLongLong() < b.columnItem.toLongLong();
- if (columnType == QVariant::Double)
- return columnItem.toDouble() < b.columnItem.toDouble();
+ if ( columnType == QVariant::Double )
+ return columnItem.toDouble() < b.columnItem.toDouble();
return columnItem.toString() < b.columnItem.toString();
}
@@ -43,23 +44,23 @@
// Filter Model //
//////////////////
-void BeataFilterModel::sort(int column, Qt::SortOrder order)
+void BeataFilterModel::sort( int column, Qt::SortOrder order )
{
- ((BeataModel *)sourceModel())->sort(column, order);
+ (( BeataModel * )sourceModel() )->sort( column, order );
}
-BeataFilterModel::BeataFilterModel(QgsVectorLayer* theLayer)
+BeataFilterModel::BeataFilterModel( QgsVectorLayer* theLayer )
{
mLayer = theLayer;
mHideUnselected = false;
- setDynamicSortFilter(true);
+ setDynamicSortFilter( true );
}
-bool BeataFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
+bool BeataFilterModel::filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const
{
- if(mHideUnselected)
- // unreadable? yes, i agree :-)
- return mLayer->selectedFeaturesIds().contains(((BeataModel *)sourceModel())->rowToId(sourceRow));
+ if ( mHideUnselected )
+ // unreadable? yes, i agree :-)
+ return mLayer->selectedFeaturesIds().contains((( BeataModel * )sourceModel() )->rowToId( sourceRow ) );
return true;
}
@@ -80,8 +81,9 @@
// BeataModel //
////////////////
-BeataModel::BeataModel(QgsVectorLayer *theLayer, QObject *parent)
-: QAbstractTableModel(parent) {
+BeataModel::BeataModel( QgsVectorLayer *theLayer, QObject *parent )
+ : QAbstractTableModel( parent )
+{
mLastRowId = -1;
mLastRow = NULL;
mLayer = theLayer;
@@ -89,106 +91,107 @@
mFieldCount = mLayer->dataProvider()->fieldCount();
mAttributes = mLayer->dataProvider()->attributeIndexes();
- connect(mLayer, SIGNAL(layerModified(bool)), this, SLOT( layerModified(bool)));
+ connect( mLayer, SIGNAL( layerModified( bool ) ), this, SLOT( layerModified( bool ) ) );
//connect(mLayer, SIGNAL(attributeAdded(int)), this, SLOT( attributeAdded(int)));
//connect(mLayer, SIGNAL(attributeDeleted(int)), this, SLOT( attributeDeleted(int)));
//connect(mLayer, SIGNAL(attributeValueChanged(int, int, const QVariant&)), this, SLOT( attributeValueChanged(int, int, const QVariant&)));
//connect(mLayer, SIGNAL(featureDeleted(int)), this, SLOT( featureDeleted(int)));
//connect(mLayer, SIGNAL(featureAdded(int)), this, SLOT( featureAdded(int)));
-
+
loadLayer();
}
-void BeataModel::featureDeleted(int fid)
+void BeataModel::featureDeleted( int fid )
{
- std::cout << "BM feature deleted\n";
+ QgsDebugMsg( "entered." );
int idx = mIdRowMap[fid];
- std::cout << idx;
- std::cout << fid;
+ QgsDebugMsg( idx );
+ QgsDebugMsg( fid );
- /*--mFeatureCount;
- mIdRowMap.remove(fid);
- mRowIdMap.remove(idx);
-
+#if 0
+ --mFeatureCount;
+ mIdRowMap.remove( fid );
+ mRowIdMap.remove( idx );
+
// fill the hole in the view
- if (idx != mFeatureCount)
+ if ( idx != mFeatureCount )
{
- std::cout << "jo";
+ QgsDebugMsg( "jo" );
//mRowIdMap[idx] = mRowIdMap[mFeatureCount];
//mIdRowMap[mRowIdMap[idx]] = idx;
int movedId = mRowIdMap[mFeatureCount];
- mRowIdMap.remove(mFeatureCount);
- mRowIdMap.insert(idx, movedId);
+ mRowIdMap.remove( mFeatureCount );
+ mRowIdMap.insert( idx, movedId );
mIdRowMap[movedId] = idx;
//mIdRowMap.remove(mRowIdMap[idx]);
//mIdRowMap.insert(mRowIdMap[idx], idx);
}
- std::cout << "map sizes:" << mRowIdMap.size() << ", " << mIdRowMap.size();
+ QgsDebugMsg( QString( "map sizes:%1, %2" ).arg( mRowIdMap.size() ).arg( mIdRowMap.size() ) );
emit layoutChanged();
//reload(index(0,0), index(rowCount(), columnCount()));
- std::cout << "\n";
-*/
- std::cout << "id->row";
+#endif
+
+ QgsDebugMsg( "id->row" );
QMap<int, int>::iterator it;
- for (it = mIdRowMap.begin(); it != mIdRowMap.end(); ++it)
- std::cout << it.key() << "->" << *it << "\n";
+ for ( it = mIdRowMap.begin(); it != mIdRowMap.end(); ++it )
+ QgsDebugMsg( QString( "%1->%2" ).arg( it.key() ).arg( *it ) );
- std::cout << "row->id";
+ QgsDebugMsg( "row->id" );
- for (it = mRowIdMap.begin(); it != mRowIdMap.end(); ++it)
- std::cout << it.key() << "->" << *it << "\n";
+ for ( it = mRowIdMap.begin(); it != mRowIdMap.end(); ++it )
+ QgsDebugMsg( QString( "%1->%2" ).arg( it.key() ).arg( *it ) );
}
-
-void BeataModel::featureAdded(int fid)
+
+void BeataModel::featureAdded( int fid )
{
- std::cout << "BM feature added\n";
+ QgsDebugMsg( "BM feature added" );
++mFeatureCount;
- mIdRowMap.insert(fid, mFeatureCount - 1);
- mRowIdMap.insert(mFeatureCount - 1, fid);
- std::cout << "map sizes:" << mRowIdMap.size() << ", " << mIdRowMap.size() << "\n";;
- reload(index(0,0), index(rowCount(), columnCount()));
+ mIdRowMap.insert( fid, mFeatureCount - 1 );
+ mRowIdMap.insert( mFeatureCount - 1, fid );
+ QgsDebugMsg( QString( "map sizes:%1, %2" ).arg( mRowIdMap.size() ).arg( mIdRowMap.size() ) );
+ reload( index( 0, 0 ), index( rowCount(), columnCount() ) );
}
-
-void BeataModel::attributeAdded (int idx)
+
+void BeataModel::attributeAdded( int idx )
{
-std::cout << "BM attribute added\n";
+ QgsDebugMsg( "BM attribute added" );
loadLayer();
- std::cout << "map sizes:" << mRowIdMap.size() << ", " << mIdRowMap.size() << "\n";;
- reload(index(0,0), index(rowCount(), columnCount()));
+ QgsDebugMsg( QString( "map sizes:%1, %2" ).arg( mRowIdMap.size() ).arg( mIdRowMap.size() ) );
+ reload( index( 0, 0 ), index( rowCount(), columnCount() ) );
emit modelChanged();
}
-
-void BeataModel::attributeDeleted (int idx)
+
+void BeataModel::attributeDeleted( int idx )
{
-std::cout << "BM attribute deleted\n";
+ QgsDebugMsg( "BM attribute deleted" );
loadLayer();
- std::cout << "map sizes:" << mRowIdMap.size() << ", " << mIdRowMap.size() << "\n";;
- reload(index(0,0), index(rowCount(), columnCount()));
+ QgsDebugMsg( QString( "map sizes:%1, %2" ).arg( mRowIdMap.size() ).arg( mIdRowMap.size() ) );
+ reload( index( 0, 0 ), index( rowCount(), columnCount() ) );
emit modelChanged();
}
-
+
void BeataModel::layerDeleted()
{
-std::cout << "BM attribute deleted\n";
+ QgsDebugMsg( "entered." );
mIdRowMap.clear();
mRowIdMap.clear();
- std::cout << "map sizes:" << mRowIdMap.size() << ", " << mIdRowMap.size() << "\n";;
- reload(index(0,0), index(rowCount(), columnCount()));
+ QgsDebugMsg( QString( "map sizes:%1, %2" ).arg( mRowIdMap.size() ).arg( mIdRowMap.size() ) );
+ reload( index( 0, 0 ), index( rowCount(), columnCount() ) );
}
-
+
//TODO: check whether caching in data()/setData() doesn't cache old value
-void BeataModel::attributeValueChanged (int fid, int idx, const QVariant &value)
+void BeataModel::attributeValueChanged( int fid, int idx, const QVariant &value )
{
- std::cout << "BM attribute changed\n";
- reload(index(0,0), index(rowCount(), columnCount()));
+ QgsDebugMsg( "entered." );
+ reload( index( 0, 0 ), index( rowCount(), columnCount() ) );
}
-void BeataModel::layerModified(bool onlyGeometry)
+void BeataModel::layerModified( bool onlyGeometry )
{
- if (onlyGeometry)
+ if ( onlyGeometry )
return;
loadLayer();
@@ -197,7 +200,7 @@
void BeataModel::loadLayer()
{
- std::cout << "BM loadlayer\n";
+ QgsDebugMsg( "entered." );
QgsFeature f;
bool ins = false, rm = false;
@@ -205,157 +208,157 @@
mRowIdMap.clear();
mIdRowMap.clear();
- if (mFeatureCount < mLayer->pendingFeatureCount())
+ if ( mFeatureCount < mLayer->pendingFeatureCount() )
{
- std::cout<<"ins\n";
- ins = true;
- beginInsertRows(QModelIndex(), mFeatureCount, mLayer->pendingFeatureCount() - 1);
- //std::cout << mFeatureCount << ", " << mLayer->pendingFeatureCount() - 1 << "\n";
+ QgsDebugMsg( "ins" );
+ ins = true;
+ beginInsertRows( QModelIndex(), mFeatureCount, mLayer->pendingFeatureCount() - 1 );
+// QgsDebugMsg(QString("%1, %2").arg(mFeatureCount).arg(mLayer->pendingFeatureCount() - 1));
}
- else if (mFeatureCount > mLayer->pendingFeatureCount())
+ else if ( mFeatureCount > mLayer->pendingFeatureCount() )
{
- std::cout<<"rm\n";
- rm = true;
- beginRemoveRows(QModelIndex(), mLayer->pendingFeatureCount(), mFeatureCount - 1);
- //std::cout << mFeatureCount << ", " << mLayer->pendingFeatureCount() -1 << "\n";
+ QgsDebugMsg( "rm" );
+ rm = true;
+ beginRemoveRows( QModelIndex(), mLayer->pendingFeatureCount(), mFeatureCount - 1 );
+// QgsDebugMsg(QString("%1, %2").arg(mFeatureCount).arg(mLayer->pendingFeatureCount() -1));
}
- mLayer->select(QgsAttributeList(), QgsRectangle(), false);
+ mLayer->select( QgsAttributeList(), QgsRectangle(), false );
- for (int i = 0; mLayer->nextFeature(f); ++i)
+ for ( int i = 0; mLayer->nextFeature( f ); ++i )
{
- mRowIdMap.insert(i, f.id());
- mIdRowMap.insert(f.id(), i);
+ mRowIdMap.insert( i, f.id() );
+ mIdRowMap.insert( f.id(), i );
}
// not needed when we have featureAdded signal
mFeatureCount = mLayer->pendingFeatureCount();
mFieldCount = mLayer->dataProvider()->fieldCount();
- if (ins)
+ if ( ins )
{
endInsertRows();
- std::cout << "end ins\n";
+ QgsDebugMsg( "end ins" );
}
- else if (rm)
+ else if ( rm )
{
endRemoveRows();
- std::cout << "end rm\n";
+ QgsDebugMsg( "end rm" );
}
-/* std::cout << "id->row";
+#if 0
+ QgsDebugMsg( "id->row" );
QMap<int, int>::iterator it;
- for (it = mIdRowMap.begin(); it != mIdRowMap.end(); ++it)
- std::cout << it.key() << "->" << *it << "\n";
+ for ( it = mIdRowMap.begin(); it != mIdRowMap.end(); ++it )
+ QgsDebugMsg( QString( "%1->%2" ).arg( it.key() ).arg( *it ) );
- std::cout << "row->id";
+ QgsDebugMsg( "row->id" );
- for (it = mRowIdMap.begin(); it != mRowIdMap.end(); ++it)
- std::cout << it.key() << "->" << *it << "\n";*/
-
-
+ for ( it = mRowIdMap.begin(); it != mRowIdMap.end(); ++it )
+ QgsDebugMsg( QString( "%1->%2" ).arg( it.key() ).arg( *it ) );
+#endif
}
-void BeataModel::swapRows(int a, int b)
+void BeataModel::swapRows( int a, int b )
{
- if (a == b)
+ if ( a == b )
return;
- int rowA = idToRow(a);
- int rowB = idToRow(b);
+ int rowA = idToRow( a );
+ int rowB = idToRow( b );
//emit layoutAboutToBeChanged();
- mRowIdMap.remove(rowA);
- mRowIdMap.remove(rowB);
- mRowIdMap.insert(rowA, b);
- mRowIdMap.insert(rowB, a);
+ mRowIdMap.remove( rowA );
+ mRowIdMap.remove( rowB );
+ mRowIdMap.insert( rowA, b );
+ mRowIdMap.insert( rowB, a );
- mIdRowMap.remove(a);
- mIdRowMap.remove(b);
- mIdRowMap.insert(a, rowB);
- mIdRowMap.insert(b, rowA);
+ mIdRowMap.remove( a );
+ mIdRowMap.remove( b );
+ mIdRowMap.insert( a, rowB );
+ mIdRowMap.insert( b, rowA );
//emit layoutChanged();
}
-int BeataModel::idToRow(const int id) const
+int BeataModel::idToRow( const int id ) const
{
- if (!mIdRowMap.contains(id))
+ if ( !mIdRowMap.contains( id ) )
{
- std::cout << "idToRow: id " << id << " not in map\n";
+ QgsDebugMsg( QString( "idToRow: id %1 not in map" ).arg( id ) );
return -1;
}
return mIdRowMap[id];
}
-int BeataModel::rowToId(const int id) const
+int BeataModel::rowToId( const int id ) const
{
- if (!mRowIdMap.contains(id))
+ if ( !mRowIdMap.contains( id ) )
{
- std::cout << "rowToId: row " << id << " not in map\n";
+ QgsDebugMsg( QString( "rowToId: row %1 not in map" ).arg( id ) );
return -1;
}
return mRowIdMap[id];
}
-int BeataModel::rowCount(const QModelIndex &parent) const
+int BeataModel::rowCount( const QModelIndex &parent ) const
{
return mFeatureCount;
}
-int BeataModel::columnCount(const QModelIndex &parent) const
+int BeataModel::columnCount( const QModelIndex &parent ) const
{
return mFieldCount;
}
-QVariant BeataModel::headerData(int section, Qt::Orientation orientation, int role) const
+QVariant BeataModel::headerData( int section, Qt::Orientation orientation, int role ) const
{
- if (role == Qt::DisplayRole)
+ if ( role == Qt::DisplayRole )
{
- if (orientation == Qt::Vertical) //row
+ if ( orientation == Qt::Vertical ) //row
{
- return QVariant(section);
+ return QVariant( section );
}
else
{
QgsField field = mLayer->dataProvider()->fields()[section]; //column
- return QVariant(field.name());
+ return QVariant( field.name() );
}
}
else return QVariant();
}
-void BeataModel::sort(int column, Qt::SortOrder order)
+void BeataModel::sort( int column, Qt::SortOrder order )
{
QgsAttributeMap row;
idColumnPair pair;
QgsAttributeList attrs;
QgsFeature f;
- attrs.append(column);
+ attrs.append( column );
emit layoutAboutToBeChanged();
- //std::cout << "SORTing\n";
+// QgsDebugMsg("SORTing");
mSortList.clear();
- mLayer->select(attrs, QgsRectangle(), false);
- while (mLayer->nextFeature(f))
+ mLayer->select( attrs, QgsRectangle(), false );
+ while ( mLayer->nextFeature( f ) )
{
row = f.attributeMap();
pair.id = f.id();
pair.columnItem = row[column];
- mSortList.append(pair);
+ mSortList.append( pair );
}
- if (order == Qt::AscendingOrder)
- qStableSort(mSortList.begin(), mSortList.end());
+ if ( order == Qt::AscendingOrder )
+ qStableSort( mSortList.begin(), mSortList.end() );
else
- qStableSort(mSortList.begin(), mSortList.end(), qGreater<idColumnPair>());
+ qStableSort( mSortList.begin(), mSortList.end(), qGreater<idColumnPair>() );
// recalculate id<->row maps
mRowIdMap.clear();
@@ -363,10 +366,10 @@
int i = 0;
QList<idColumnPair>::Iterator it;
- for (it = mSortList.begin(); it != mSortList.end(); ++it, ++i)
+ for ( it = mSortList.begin(); it != mSortList.end(); ++it, ++i )
{
- mRowIdMap.insert(i, it->id);
- mIdRowMap.insert(it->id, i);
+ mRowIdMap.insert( i, it->id );
+ mIdRowMap.insert( it->id, i );
}
// restore selection
@@ -375,96 +378,97 @@
emit modelChanged();
}
-QVariant BeataModel::data(const QModelIndex &index, int role) const
+QVariant BeataModel::data( const QModelIndex &index, int role ) const
{
- if (!index.isValid() || (role != Qt::TextAlignmentRole && role != Qt::DisplayRole && role != Qt::EditRole) )
+ if ( !index.isValid() || ( role != Qt::TextAlignmentRole && role != Qt::DisplayRole && role != Qt::EditRole ) )
return QVariant();
QVariant::Type fldType = mLayer->dataProvider()->fields()[index.column()].type();
- bool fldNumeric = (fldType == QVariant::Int || fldType == QVariant::Double);
-
- if (role == Qt::TextAlignmentRole)
+ bool fldNumeric = ( fldType == QVariant::Int || fldType == QVariant::Double );
+
+ if ( role == Qt::TextAlignmentRole )
{
- if (fldNumeric)
- return QVariant(Qt::AlignRight);
+ if ( fldNumeric )
+ return QVariant( Qt::AlignRight );
else
- return QVariant(Qt::AlignLeft);
+ return QVariant( Qt::AlignLeft );
}
-
+
// if we don't have the row in current cache, load it from layer first
- if (mLastRowId != rowToId(index.row()))
+ if ( mLastRowId != rowToId( index.row() ) )
{
- bool res = mLayer->featureAtId(rowToId(index.row()), mFeat, false, true);
+ bool res = mLayer->featureAtId( rowToId( index.row() ), mFeat, false, true );
- if (!res)
- return QVariant("ERROR");
-
- mLastRowId = rowToId(index.row());
- mLastRow = (QgsAttributeMap *)(&(mFeat.attributeMap()));
+ if ( !res )
+ return QVariant( "ERROR" );
+
+ mLastRowId = rowToId( index.row() );
+ mLastRow = ( QgsAttributeMap * )( &( mFeat.attributeMap() ) );
}
-
- QVariant& val = (*mLastRow)[index.column()];
-
- if (val.isNull())
+
+ QVariant& val = ( *mLastRow )[index.column()];
+
+ if ( val.isNull() )
{
// if the value is NULL, show that in table, but don't show "NULL" text in editor
- if (role == Qt::EditRole)
+ if ( role == Qt::EditRole )
return QVariant();
else
- return QVariant("NULL");
+ return QVariant( "NULL" );
}
-
+
// force also numeric data for EditRole to be strings
// otherwise it creates spinboxes instead of line edits
// (probably not what we do want)
- if (fldNumeric && role == Qt::EditRole)
+ if ( fldNumeric && role == Qt::EditRole )
return val.toString();
-
+
// convert to QString from some other representation
// this prevents displaying greater numbers in exponential format
return val.toString();
}
-bool BeataModel::setData(const QModelIndex &index, const QVariant &value, int role)
+bool BeataModel::setData( const QModelIndex &index, const QVariant &value, int role )
{
- if (!index.isValid() || role != Qt::EditRole)
+ if ( !index.isValid() || role != Qt::EditRole )
return false;
- if (!mLayer->isEditable())
+ if ( !mLayer->isEditable() )
return false;
- bool res = mLayer->featureAtId(rowToId(index.row()), mFeat, false, true);
+ bool res = mLayer->featureAtId( rowToId( index.row() ), mFeat, false, true );
- if (res) {
- mLastRowId = rowToId(index.row());
- mLastRow = (QgsAttributeMap *)(&(mFeat.attributeMap()));
+ if ( res )
+ {
+ mLastRowId = rowToId( index.row() );
+ mLastRow = ( QgsAttributeMap * )( &( mFeat.attributeMap() ) );
- mLayer->changeAttributeValue(rowToId(index.row()), index.column(), value, true);
- }
+ mLayer->changeAttributeValue( rowToId( index.row() ), index.column(), value, true );
+ }
- if (!mLayer->isModified())
+ if ( !mLayer->isModified() )
return false;
- emit dataChanged(index, index);
+ emit dataChanged( index, index );
return true;
}
-Qt::ItemFlags BeataModel::flags(const QModelIndex &index) const
+Qt::ItemFlags BeataModel::flags( const QModelIndex &index ) const
{
- if (!index.isValid())
+ if ( !index.isValid() )
return Qt::ItemIsEnabled;
- Qt::ItemFlags flags = QAbstractItemModel::flags(index);
-
- if (mLayer->isEditable())
+ Qt::ItemFlags flags = QAbstractItemModel::flags( index );
+
+ if ( mLayer->isEditable() )
flags |= Qt::ItemIsEditable;
-
+
return flags;
}
-void BeataModel::reload(const QModelIndex &index1, const QModelIndex &index2)
+void BeataModel::reload( const QModelIndex &index1, const QModelIndex &index2 )
{
- emit dataChanged(index1, index2);
+ emit dataChanged( index1, index2 );
}
void BeataModel::resetModel()
@@ -489,142 +493,145 @@
void BeataMemModel::loadLayer()
{
BeataModel::loadLayer();
- mLayer->select(mLayer->pendingAllAttributesList(), QgsRectangle(), false);
+ mLayer->select( mLayer->pendingAllAttributesList(), QgsRectangle(), false );
QgsFeature f;
- while (mLayer->nextFeature(f))
- mFeatureMap.insert(f.id(), f);
+ while ( mLayer->nextFeature( f ) )
+ mFeatureMap.insert( f.id(), f );
}
BeataMemModel::BeataMemModel
-(QgsVectorLayer *theLayer)
-: BeataModel(theLayer)
+( QgsVectorLayer *theLayer )
+ : BeataModel( theLayer )
{
loadLayer();
}
-QVariant BeataMemModel::data(const QModelIndex &index, int role) const
+QVariant BeataMemModel::data( const QModelIndex &index, int role ) const
{
- if (!index.isValid() || (role != Qt::TextAlignmentRole && role != Qt::DisplayRole && role != Qt::EditRole))
+ if ( !index.isValid() || ( role != Qt::TextAlignmentRole && role != Qt::DisplayRole && role != Qt::EditRole ) )
return QVariant();
QVariant::Type fldType = mLayer->dataProvider()->fields()[index.column()].type();
- bool fldNumeric = (fldType == QVariant::Int || fldType == QVariant::Double);
-
- if (role == Qt::TextAlignmentRole)
+ bool fldNumeric = ( fldType == QVariant::Int || fldType == QVariant::Double );
+
+ if ( role == Qt::TextAlignmentRole )
{
- if (fldNumeric)
- return QVariant(Qt::AlignRight);
+ if ( fldNumeric )
+ return QVariant( Qt::AlignRight );
else
- return QVariant(Qt::AlignLeft);
+ return QVariant( Qt::AlignLeft );
}
-
+
// if we don't have the row in current cache, load it from layer first
- if (mLastRowId != rowToId(index.row()))
+ if ( mLastRowId != rowToId( index.row() ) )
{
//bool res = mLayer->featureAtId(rowToId(index.row()), mFeat, false, true);
- bool res = mFeatureMap.contains(rowToId(index.row()));
+ bool res = mFeatureMap.contains( rowToId( index.row() ) );
- if (!res)
- return QVariant("ERROR");
-
- mLastRowId = rowToId(index.row());
- mFeat = mFeatureMap[rowToId(index.row())];
- mLastRow = (QgsAttributeMap *)(&(mFeat.attributeMap()));
+ if ( !res )
+ return QVariant( "ERROR" );
+
+ mLastRowId = rowToId( index.row() );
+ mFeat = mFeatureMap[rowToId( index.row() )];
+ mLastRow = ( QgsAttributeMap * )( &( mFeat.attributeMap() ) );
}
-
- QVariant& val = (*mLastRow)[index.column()];
- if (val.isNull())
+ QVariant& val = ( *mLastRow )[index.column()];
+
+ if ( val.isNull() )
{
// if the value is NULL, show that in table, but don't show "NULL" text in editor
- if (role == Qt::EditRole)
+ if ( role == Qt::EditRole )
return QVariant();
else
- return QVariant("NULL");
+ return QVariant( "NULL" );
}
-
+
// force also numeric data for EditRole to be strings
// otherwise it creates spinboxes instead of line edits
// (probably not what we do want)
- if (fldNumeric && role == Qt::EditRole)
+ if ( fldNumeric && role == Qt::EditRole )
return val.toString();
-
+
// convert to QString from some other representation
// this prevents displaying greater numbers in exponential format
return val.toString();
}
-bool BeataMemModel::setData(const QModelIndex &index, const QVariant &value, int role)
+bool BeataMemModel::setData( const QModelIndex &index, const QVariant &value, int role )
{
- if (!index.isValid() || role != Qt::EditRole)
+ if ( !index.isValid() || role != Qt::EditRole )
return false;
- if (!mLayer->isEditable())
+ if ( !mLayer->isEditable() )
return false;
//bool res = mLayer->featureAtId(rowToId(index.row()), mFeat, false, true);
- bool res = mFeatureMap.contains(rowToId(index.row()));
+ bool res = mFeatureMap.contains( rowToId( index.row() ) );
- if (res) {
- mLastRowId = rowToId(index.row());
- mFeat = mFeatureMap[rowToId(index.row())];
- mLastRow = (QgsAttributeMap *)(&(mFeat.attributeMap()));
+ if ( res )
+ {
+ mLastRowId = rowToId( index.row() );
+ mFeat = mFeatureMap[rowToId( index.row() )];
+ mLastRow = ( QgsAttributeMap * )( &( mFeat.attributeMap() ) );
- //std::cout << mFeatureMap[rowToId(index.row())].id();
- mFeatureMap[rowToId(index.row())].changeAttribute(index.column(), value);
+// QgsDebugMsg(mFeatureMap[rowToId(index.row())].id());
+ mFeatureMap[rowToId( index.row() )].changeAttribute( index.column(), value );
// propagate back to the layer
- mLayer->changeAttributeValue(rowToId(index.row()), index.column(), value, true);
+ mLayer->changeAttributeValue( rowToId( index.row() ), index.column(), value, true );
}
- if (!mLayer->isModified())
+ if ( !mLayer->isModified() )
return false;
- emit dataChanged(index, index);
+ emit dataChanged( index, index );
return true;
}
-void BeataMemModel::featureDeleted(int fid)
+void BeataMemModel::featureDeleted( int fid )
{
-std::cout << "BMM feature deleted\n";
- mFeatureMap.remove(fid);
- BeataModel::featureDeleted(fid);
+ QgsDebugMsg( "entered." );
+ mFeatureMap.remove( fid );
+ BeataModel::featureDeleted( fid );
}
-
-void BeataMemModel::featureAdded(int fid)
+
+void BeataMemModel::featureAdded( int fid )
{
- std::cout << "BMM feature added\n";
+ QgsDebugMsg( "entered." );
QgsFeature f;
- mLayer->featureAtId(fid, f, false, true);
- mFeatureMap.insert(fid, f);
- BeataModel::featureAdded(fid);
+ mLayer->featureAtId( fid, f, false, true );
+ mFeatureMap.insert( fid, f );
+ BeataModel::featureAdded( fid );
}
-
-/*void BeataMemModel::attributeAdded (int idx)
+
+#if 0
+void BeataMemModel::attributeAdded( int idx )
{
- std::cout << "attribute added\n";
+ QgsDebugMsg( "entered." );
loadLayer();
- reload(index(0,0), index(rowCount(), columnCount()));
+ reload( index( 0, 0 ), index( rowCount(), columnCount() ) );
}
-
-void BeataMemModel::attributeDeleted (int idx)
+
+void BeataMemModel::attributeDeleted( int idx )
{
- std::cout << "attribute deleted\n";
+ QgsDebugMsg( "entered." );
loadLayer();
- reload(index(0,0), index(rowCount(), columnCount()));
+ reload( index( 0, 0 ), index( rowCount(), columnCount() ) );
}
- */
-void BeataMemModel::layerDeleted ()
+#endif
+
+void BeataMemModel::layerDeleted()
{
- std::cout << "BMM layer del\n";
+ QgsDebugMsg( "entered." );
mFeatureMap.clear();
BeataModel::layerDeleted();
}
-
-void BeataMemModel::attributeValueChanged (int fid, int idx, const QVariant &value)
+
+void BeataMemModel::attributeValueChanged( int fid, int idx, const QVariant &value )
{
- std::cout << "BMM attribute changed\n";
- mFeatureMap[fid].changeAttribute(idx, value);
- reload(index(0,0), index(rowCount(), columnCount()));
+ QgsDebugMsg( "entered." );
+ mFeatureMap[fid].changeAttribute( idx, value );
+ reload( index( 0, 0 ), index( rowCount(), columnCount() ) );
}
More information about the QGIS-commit
mailing list