74 changes: 49 additions & 25 deletions src/gui/symbology-ng/qgsstylev2managerdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,6 @@ QgsStyleV2ManagerDialog::QgsStyleV2ManagerDialog( QgsStyleV2* style, QWidget* pa
groupTree->setModel( groupModel );
groupTree->setHeaderHidden( true );
populateGroups();
int rows = groupModel->rowCount( groupModel->indexFromItem( groupModel->invisibleRootItem() ) );
for ( int i = 0; i < rows; i++ )
{
groupTree->setExpanded( groupModel->indexFromItem( groupModel->item( i )), true );
}
connect( groupTree->selectionModel(), SIGNAL( currentChanged( const QModelIndex&, const QModelIndex& ) ),
this, SLOT( groupChanged( const QModelIndex& ) ) );
connect( groupModel, SIGNAL( itemChanged( QStandardItem* ) ),
Expand Down Expand Up @@ -308,26 +303,43 @@ bool QgsStyleV2ManagerDialog::addSymbol()
}

// get name
bool ok;
QString name = QInputDialog::getText( this, tr( "Symbol name" ),
tr( "Please enter name for new symbol:" ), QLineEdit::Normal, tr( "new symbol" ), &ok );
if ( !ok || name.isEmpty() )
{
delete symbol;
return false;
}

// check if there is no symbol with same name
if ( mStyle->symbolNames().contains( name ) )
{
int res = QMessageBox::warning( this, tr( "Save symbol" ),
bool nameInvalid = true;
QString name;

while ( nameInvalid )
{
bool ok;
name = QInputDialog::getText( this, tr( "Symbol Name"),
tr( "Please enter a name for new symbol:" ),
QLineEdit::Normal,
tr( "new symbol" ),
&ok );
if ( !ok )
{
delete symbol;
return false;
}
// validate name
if ( name.isEmpty() )
{
QMessageBox::warning( this, tr( "Save symbol" ),
tr( "Cannot save symbol without name. Enter a name." ) );
}
else if ( mStyle->symbolNames().contains( name ) )
{
int res = QMessageBox::warning( this, tr( "Save symbol" ),
tr( "Symbol with name '%1' already exists. Overwrite?" )
.arg( name ),
QMessageBox::Yes | QMessageBox::No );
if ( res != QMessageBox::Yes )
if ( res == QMessageBox::Yes )
{
nameInvalid = false;
}
}
else
{
delete symbol;
return false;
// valid name
nameInvalid = false;
}
}

Expand Down Expand Up @@ -590,6 +602,7 @@ void QgsStyleV2ManagerDialog::importItems()
QgsStyleV2ExportImportDialog dlg( mStyle, this, QgsStyleV2ExportImportDialog::Import );
dlg.exec();
populateList();
populateGroups();
}

void QgsStyleV2ManagerDialog::setBold( QStandardItem* item )
Expand Down Expand Up @@ -653,6 +666,12 @@ void QgsStyleV2ManagerDialog::populateGroups()
}
model->appendRow( tag );

// expand things in the grouo tree
int rows = model->rowCount( model->indexFromItem( model->invisibleRootItem() ) );
for ( int i = 0; i < rows; i++ )
{
groupTree->setExpanded( model->indexFromItem( model->item( i ) ), true );
}
}

void QgsStyleV2ManagerDialog::buildGroupTree( QStandardItem* &parent )
Expand Down Expand Up @@ -1125,11 +1144,16 @@ void QgsStyleV2ManagerDialog::grouptreeContextMenu( const QPoint& point )
if ( index.parent().data( Qt::UserRole + 1 ).toString() == "smartgroups" )
{
groupMenu.addAction( "Edit Group" );
groupMenu.addAction( "Remove Group" );
}
else // it must be a group
{
groupMenu.addAction( "Add Group" );
}
}
else if ( index.data( Qt::UserRole + 1 ) == "groups" || index.data( Qt::UserRole + 1 ) == "smartgroups" )
{
groupMenu.addAction( "Add Group" );
}
else
{
groupMenu.addAction( "Add Group" );
groupMenu.addAction( "Remove Group" );
}

Expand Down
18 changes: 16 additions & 2 deletions src/gui/symbology-ng/qgssymbolslistwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbolV2* symbol, QgsStyleV2* sty
{
groupsCombo->addItem( group );
}
groups = style->smartgroupNames();
foreach ( QString group, groups )
{
groupsCombo->addItem( group, QVariant( "smart" ) );
}

QStandardItemModel* model = new QStandardItemModel( viewSymbols );
viewSymbols->setModel( model );
Expand Down Expand Up @@ -295,17 +300,26 @@ void QgsSymbolsListWidget::setSymbolFromStyle( const QModelIndex & index )
emit changed();
}

void QgsSymbolsListWidget::on_groupsCombo_currentIndexChanged( const QString &text )
void QgsSymbolsListWidget::on_groupsCombo_currentIndexChanged( int index )
{
QStringList symbols;
QString text = groupsCombo->itemText( index );
// List all symbols when empty list item is selected
if ( text.isEmpty() )
{
symbols = mStyle->symbolNames();
}
else
{
int groupid = mStyle->groupId( text );
int groupid;
if ( groupsCombo->itemData( index ).toString() == "smart" )
{
groupid = mStyle->smartgroupId( text );
}
else
{
groupid = mStyle->groupId( text );
}
symbols = mStyle->symbolsOfGroup( SymbolEntity, groupid );
}
populateSymbols( symbols );
Expand Down
2 changes: 1 addition & 1 deletion src/gui/symbology-ng/qgssymbolslistwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class GUI_EXPORT QgsSymbolsListWidget : public QWidget, private Ui::SymbolsListW
void on_mSymbolUnitComboBox_currentIndexChanged( const QString & text );
void on_mTransparencySlider_valueChanged( int value );

void on_groupsCombo_currentIndexChanged( const QString &text );
void on_groupsCombo_currentIndexChanged( int index );
void on_groupsCombo_editTextChanged( const QString &text );

void openStyleManager();
Expand Down
10 changes: 10 additions & 0 deletions src/ui/qgsstylev2exportimportdialogbase.ui
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,16 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="groupLabel">
<property name="text">
<string>Set Group</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QComboBox" name="groupCombo"/>
</item>
</layout>
</item>
<item row="1" column="0">
Expand Down