Skip to content

Commit

Permalink
fixed the groupTree bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
Arunmozhi committed Jul 12, 2012
1 parent 63eba56 commit ab489f5
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 43 deletions.
115 changes: 72 additions & 43 deletions src/gui/symbology-ng/qgsstylev2managerdialog.cpp
Expand Up @@ -75,10 +75,6 @@ QgsStyleV2ManagerDialog::QgsStyleV2ManagerDialog( QgsStyleV2* style, QWidget* pa
listItems->setModel( model );

connect( model, SIGNAL( itemChanged( QStandardItem* ) ), this, SLOT( itemChanged( QStandardItem* ) ) );
// TODO take up the selectiopn model for the symbols
// connect currentChanged signal to a slot which would populate the tags for that symbol
// as comma seperated values in tagLineEdit and fill the mTagList
//
connect( listItems->selectionModel(), SIGNAL( currentChanged( const QModelIndex&, const QModelIndex& ) ),
this, SLOT( symbolSelected( const QModelIndex& ) ) );

Expand Down Expand Up @@ -173,10 +169,12 @@ void QgsStyleV2ManagerDialog::populateList()

if ( itemType < 3 )
{
enableSymbolInputs( true );
groupChanged( groupTree->selectionModel()->currentIndex() );
}
else if ( itemType == 3 )
{
enableSymbolInputs( false );
populateColorRamps();
}
else
Expand Down Expand Up @@ -627,7 +625,7 @@ void QgsStyleV2ManagerDialog::populateGroups()
model->appendRow( group );

QStandardItem *tag = new QStandardItem( "Smart Groups" );
tag->setData( "tags" );
tag->setData( "smartgroups" );
tag->setEditable( false );
// TODO populate/build smart groups
model->appendRow( tag );
Expand All @@ -654,30 +652,42 @@ void QgsStyleV2ManagerDialog::groupChanged( const QModelIndex& index )
QStringList groupSymbols;

QString category = index.data( Qt::UserRole + 1 ).toString();
if ( category == "all" || category == "groups" || category == "tags" )
if ( category == "all" || category == "groups" || category == "smartgroups" )
{
enableGroupInputs( false );
if ( category == "groups" || category == "smartgroups" )
{
btnAddGroup->setEnabled( true );
}
symbolNames = mStyle->symbolNames();
}
else if ( category == "recent" )
{
// TODO add session symbols
enableGroupInputs( false );
symbolNames = QStringList();
}
else if ( category == "project" )
{
// TODO add project symbols
enableGroupInputs( false );
symbolNames = QStringList();
}
else
{
//determine groups and tags
if ( index.parent().data( Qt::UserRole + 1 ) == "tags" )
if ( index.parent().data( Qt::UserRole + 1 ) == "smartgroups" )
{
int tagId = index.data( Qt::UserRole + 1 ).toInt();
symbolNames = mStyle->symbolsWithTag( tagId );
// TODO
// create a new Menu with smart group specific functions
// and set it to the btnManageGroups
}
else // then it must be a group
{
if ( index.data() == "Ungrouped" )
enableGroupInputs( false );
else
enableGroupInputs( true );
int groupId = index.data( Qt::UserRole + 1 ).toInt();
symbolNames = mStyle->symbolsOfGroup( groupId );
if ( mGrouppingMode && groupId )
Expand Down Expand Up @@ -710,7 +720,7 @@ void QgsStyleV2ManagerDialog::addGroup()
}

// Violation 2: Creating a nested tag
if ( parentIndex.parent().data( Qt::UserRole + 1 ).toString() == "tags" )
if ( parentIndex.parent().data( Qt::UserRole + 1 ).toString() == "smartgroups" )
{
int err = QMessageBox::critical( this, tr( "Operation Not Allowed" ),
tr( "Creation of nested Smart Groups are not allowed\n"
Expand All @@ -736,7 +746,7 @@ void QgsStyleV2ManagerDialog::removeGroup()

// Violation: removing system groups
QString data = index.data( Qt::UserRole + 1 ).toString();
if ( data == "all" || data == "recent" || data == "project" || data == "groups" || data == "tags" || index.data() == "Ungrouped" )
if ( data == "all" || data == "recent" || data == "project" || data == "groups" || data == "smartgroups" || index.data() == "Ungrouped" )
{
int err = QMessageBox::critical( this, tr( "Invalid slection" ),
tr( "Cannot delete system defined categories.\n"
Expand All @@ -746,7 +756,7 @@ void QgsStyleV2ManagerDialog::removeGroup()
}

QStandardItem *parentItem = model->itemFromIndex( index.parent() );
if ( parentItem->data( Qt::UserRole + 1 ).toString() == "tags" )
if ( parentItem->data( Qt::UserRole + 1 ).toString() == "smartgroups" )
{
mStyle->remove( TagEntity, index.data( Qt::UserRole + 1 ).toInt() );
}
Expand All @@ -773,7 +783,7 @@ void QgsStyleV2ManagerDialog::groupRenamed( QStandardItem * item )
if ( data == "newgroup" )
{
int id;
if ( item->parent()->data( Qt::UserRole + 1 ).toString() == "tags" )
if ( item->parent()->data( Qt::UserRole + 1 ).toString() == "smartgroups" )
{
id = mStyle->addTag( item->text() );
}
Expand Down Expand Up @@ -803,7 +813,7 @@ void QgsStyleV2ManagerDialog::groupRenamed( QStandardItem * item )
{
int id = item->data( Qt::UserRole + 1 ).toInt();
QString name = item->text();
if ( item->parent()->data( Qt::UserRole + 1 ) == "tags" )
if ( item->parent()->data( Qt::UserRole + 1 ) == "smartgroups" )
{
mStyle->rename( TagEntity, id, name );
}
Expand Down Expand Up @@ -837,20 +847,7 @@ void QgsStyleV2ManagerDialog::groupSymbolsAction()
btnAddGroup->setEnabled( true );
btnRemoveGroup->setEnabled( true );
// disabel all items except groups in groupTree
for( int i = 0; i < treeModel->rowCount(); i++ )
{
if( treeModel->item( i )->text() == "Smart Groups" )
{
for( int j = 0; j < treeModel->item( i )->rowCount(); j++ )
{
treeModel->item( i )->child( j )->setEnabled( true );
}
}
if ( treeModel->item( i )->text() != "Groups" )
{
treeModel->item( i )->setEnabled( true );
}
}
enableItemsForGroupingMode( true );
groupChanged( groupTree->currentIndex() );
// Finally: Reconnect all Symbol editing functionalities
connect( treeModel, SIGNAL( itemChanged( QStandardItem* ) ),
Expand All @@ -860,7 +857,6 @@ void QgsStyleV2ManagerDialog::groupSymbolsAction()
}
else
{
mGrouppingMode = true;
bool validGroup = false;
// determine whether it is a valid group
QModelIndex present = groupTree->currentIndex();
Expand All @@ -876,6 +872,8 @@ void QgsStyleV2ManagerDialog::groupSymbolsAction()
}
if ( !validGroup )
return;

mGrouppingMode = true;
// Change the text menu
senderAction->setText( "Finish Grouping" );

Expand All @@ -894,20 +892,7 @@ void QgsStyleV2ManagerDialog::groupSymbolsAction()
btnAddGroup->setEnabled( false );
btnRemoveGroup->setEnabled( false );
// disabel all items except groups in groupTree
for( int i = 0; i < treeModel->rowCount(); i++ )
{
if( treeModel->item( i )->text() == "Smart Groups" )
{
for( int j = 0; j < treeModel->item( i )->rowCount(); j++ )
{
treeModel->item( i )->child( j )->setEnabled( false );
}
}
if ( treeModel->item( i )->text() != "Groups" )
{
treeModel->item( i )->setEnabled( false );
}
}
enableItemsForGroupingMode( false );
groupChanged( groupTree->currentIndex() );

// Connect to slot which handles regrouping
Expand Down Expand Up @@ -986,8 +971,52 @@ void QgsStyleV2ManagerDialog::tagsChanged()

void QgsStyleV2ManagerDialog::symbolSelected( const QModelIndex& index )
{
// Populate the tags for the symbol
tagsLineEdit->clear();
QStandardItem *item = static_cast<QStandardItemModel*>( listItems->model() )->itemFromIndex( index );
mTagList = mStyle->tagsOfSymbol( item->data().toString() );
tagsLineEdit->setText( mTagList.join( "," ) );
}

void QgsStyleV2ManagerDialog::enableSymbolInputs( bool enable )
{
groupTree->setEnabled( enable );
tagBtn->setEnabled( enable );
btnAddGroup->setEnabled( enable );
btnRemoveGroup->setEnabled( enable );
btnManageGroups->setEnabled( enable );
searchBox->setEnabled( enable );
tagsLineEdit->setEnabled( enable );
}

void QgsStyleV2ManagerDialog::enableGroupInputs( bool enable )
{
btnAddGroup->setEnabled( enable );
btnRemoveGroup->setEnabled( enable );
btnManageGroups->setEnabled( enable );
}

void QgsStyleV2ManagerDialog::enableItemsForGroupingMode( bool enable )
{
QStandardItemModel *treeModel = qobject_cast<QStandardItemModel*>( groupTree->model() );
for( int i = 0; i < treeModel->rowCount(); i++ )
{
if ( treeModel->item( i )->text() != "Groups" )
{
treeModel->item( i )->setEnabled( enable );
}
if ( treeModel->item( i )->text() == "Groups" )
{
treeModel->item( i )->setEnabled( enable );
treeModel->item( i )->child( treeModel->item( i )->rowCount() - 1 )->setEnabled( enable );
}
if( treeModel->item( i )->text() == "Smart Groups" )
{
for( int j = 0; j < treeModel->item( i )->rowCount(); j++ )
{
treeModel->item( i )->child( j )->setEnabled( enable );
}
}
}

}
7 changes: 7 additions & 0 deletions src/gui/symbology-ng/qgsstylev2managerdialog.h
Expand Up @@ -101,6 +101,13 @@ class GUI_EXPORT QgsStyleV2ManagerDialog : public QDialog, private Ui::QgsStyleV
bool removeSymbol();
bool removeColorRamp();

//! Enables or disbables the symbol specific inputs
void enableSymbolInputs( bool );
//! Enables or disables the groupTree specific inputs
void enableGroupInputs( bool );
//! Enables or diables the groupTree items for grouping mode
void enableItemsForGroupingMode( bool );

QgsStyleV2* mStyle;

QString mStyleFilename;
Expand Down

0 comments on commit ab489f5

Please sign in to comment.