112 changes: 40 additions & 72 deletions src/gui/symbology-ng/qgssymbolv2selectordialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

// the widgets
#include "qgssymbolslistwidget.h"
//#include "qgslayerpropertieswidget.h"
#include "qgslayerpropertieswidget.h"
#include "qgssymbollayerv2widget.h"
#include "qgsellipsesymbollayerv2widget.h"
#include "qgsvectorfieldsymbollayerwidget.h"
Expand Down Expand Up @@ -185,7 +185,6 @@ QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsSt
// set symbol as active item in the tree
QModelIndex newIndex = layersTree->model()->index( 0, 0 );
layersTree->setCurrentIndex( newIndex );

}

void QgsSymbolV2SelectorDialog::keyPressEvent( QKeyEvent * e )
Expand All @@ -206,10 +205,8 @@ QMenu* QgsSymbolV2SelectorDialog::advancedMenu()
if ( mAdvancedMenu == NULL )
{
mAdvancedMenu = new QMenu;
//btnAdvanced->setMenu( mAdvancedMenu );
//btnAdvanced->show();
// TODO
// Send the menu to symbols list widget
// Brute force method to activate the Advanced menu
layerChanged();
}
return mAdvancedMenu;
}
Expand Down Expand Up @@ -283,9 +280,6 @@ void QgsSymbolV2SelectorDialog::updateLayerPreview()
updatePreview();
}

// A similar function would be needed to update the stacked widget
// void QgsSymbolV2SelectorDialog::updateSymbolLayerWidget( QgsSymbolLayerV2* layer )

SymbolLayerItem* QgsSymbolV2SelectorDialog::currentLayerItem()
{
QModelIndex idx = layersTree->currentIndex();
Expand All @@ -312,28 +306,28 @@ QgsSymbolLayerV2* QgsSymbolV2SelectorDialog::currentLayer()
return NULL;
}


void QgsSymbolV2SelectorDialog::layerChanged()
{
// We donot want slot to fire while we load compatible layertypes
// disconnect( cboLayerType, SIGNAL( currentIndexChanged( int ) ), this, SLOT( layerTypeChanged() ) );
updateUi();

SymbolLayerItem *currentItem = static_cast<SymbolLayerItem*>( model->itemFromIndex( layersTree->currentIndex() ) );
if ( currentItem == NULL )
return;

// TODO Entire thing below is a TODO
if ( currentItem->isLayer() )
{
// add layerproperties widget to the stacked widget and update
// build the widget based on layer type and set it
SymbolLayerItem *parent = static_cast<SymbolLayerItem*>( currentItem->parent() );
QWidget *layerProp = new QgsLayerPropertiesWidget( currentItem->layer(), parent->symbol(), mVectorLayer);
setWidget( layerProp );
connect( layerProp, SIGNAL( changed() ), this, SLOT( updateLayerPreview() ) );
// This connection when layer type is changed
connect( layerProp, SIGNAL( changeLayer( QgsSymbolLayerV2* ) ), this, SLOT( changeLayer( QgsSymbolLayerV2* ) ) );
}
else
{
// then it must be a symbol
// Now populate symbols of that type using the symbols list widget:
QWidget *symbolsList = new QgsSymbolsListWidget( currentItem->symbol(), mStyle, this );
QWidget *symbolsList = new QgsSymbolsListWidget( currentItem->symbol(), mStyle, mAdvancedMenu );
setWidget( symbolsList );
connect( symbolsList, SIGNAL( changed() ), this, SLOT( symbolChanged() ) );
}
Expand Down Expand Up @@ -381,7 +375,6 @@ void QgsSymbolV2SelectorDialog::setWidget( QWidget* widget )
}
}


void QgsSymbolV2SelectorDialog::updateLockButton()
{
QgsSymbolLayerV2* layer = currentLayer();
Expand All @@ -390,61 +383,6 @@ void QgsSymbolV2SelectorDialog::updateLockButton()
btnLock->setChecked( layer->isLocked() );
}


void QgsSymbolV2SelectorDialog::layerTypeChanged()
{
QgsSymbolLayerV2* layer = currentLayer();
if ( !layer )
return;
// FIXME
/*
QString newLayerType = cboLayerType->itemData( cboLayerType->currentIndex() ).toString();
if ( layer->layerType() == newLayerType )
return;
*/

QString newLayerType = "Simple Line";

// get creation function for new layer from registry
QgsSymbolLayerV2Registry* pReg = QgsSymbolLayerV2Registry::instance();
QgsSymbolLayerV2AbstractMetadata* am = pReg->symbolLayerMetadata( newLayerType );
if ( am == NULL ) // check whether the metadata is assigned
return;

// change layer to a new (with different type)
QgsSymbolLayerV2* newLayer = am->createSymbolLayer( QgsStringMap() );
if ( newLayer == NULL )
return;

SymbolLayerItem *item = currentLayerItem();
// remove previos childs if any
if ( layer->subSymbol() )
{
item->removeRow( 0 );
}
// update symbol layer item
item->setLayer( newLayer );
// When it is a marker symbol
if ( newLayer->subSymbol() )
{
SymbolLayerItem *subsymbol = new SymbolLayerItem( newLayer->subSymbol() );
SymbolLayerItem *sublayer = new SymbolLayerItem( newLayer->subSymbol()->symbolLayer( 0 ) );
subsymbol->appendRow( sublayer );
item->appendRow( subsymbol );
}

// Change the symbol at last to avoid deleting item's layer
QgsSymbolV2* symbol = static_cast<SymbolLayerItem*>( item->parent() )->symbol();
int layerIdx = item->parent()->rowCount() - item->row() - 1;
symbol->changeSymbolLayer( layerIdx, newLayer );

//updateSymbolLayerWidget( newLayer );

item->updatePreview();
updatePreview();
}


void QgsSymbolV2SelectorDialog::addLayer()
{
QModelIndex idx = layersTree->currentIndex();
Expand Down Expand Up @@ -537,3 +475,33 @@ void QgsSymbolV2SelectorDialog::lockLayer()
layer->setLocked( btnLock->isChecked() );
}

void QgsSymbolV2SelectorDialog::changeLayer( QgsSymbolLayerV2* newLayer )
{
SymbolLayerItem *item = currentLayerItem();
QgsSymbolLayerV2* layer = item->layer();

if ( layer->subSymbol() )
{
item->removeRow( 0 );
}
// update symbol layer item
item->setLayer( newLayer );
// When it is a marker symbol
if ( newLayer->subSymbol() )
{
SymbolLayerItem *subsymbol = new SymbolLayerItem( newLayer->subSymbol() );
SymbolLayerItem *sublayer = new SymbolLayerItem( newLayer->subSymbol()->symbolLayer( 0 ) );
subsymbol->appendRow( sublayer );
item->appendRow( subsymbol );
}

// Change the symbol at last to avoid deleting item's layer
QgsSymbolV2* symbol = static_cast<SymbolLayerItem*>( item->parent() )->symbol();
int layerIdx = item->parent()->rowCount() - item->row() - 1;
symbol->changeSymbolLayer( layerIdx, newLayer );

item->updatePreview();
updatePreview();
// Important: This lets the layer to have its own layer properties widget
layerChanged();
}
10 changes: 4 additions & 6 deletions src/gui/symbology-ng/qgssymbolv2selectordialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,6 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb

void updateUi();

//void loadPropertyWidgets();

//void updateSymbolLayerWidget( QgsSymbolLayerV2* layer );
void updateLockButton();

SymbolLayerItem* currentLayerItem();
Expand All @@ -77,14 +74,16 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb

void lockLayer();

void layerTypeChanged();

void layerChanged();

void updateLayerPreview();
void updatePreview();

//! Slot to update tree when a new symbol from style
void symbolChanged();
//! alters tree and sets proper widget when Layer Type is changed
//! @note: The layer is recieved from the LayerPropertiesWidget
void changeLayer( QgsSymbolLayerV2* layer );


protected: // data
Expand All @@ -95,7 +94,6 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb

QStandardItemModel* model;
QWidget *mPresentWidget;

};

#endif
62 changes: 62 additions & 0 deletions src/ui/symbollayer/widget_layerproperties.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>LayerPropertiesWidget</class>
<widget class="QWidget" name="LayerPropertiesWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>318</width>
<height>439</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Symbol layer type</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cboLayerType"/>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Symbol Layer Properties</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QStackedWidget" name="stackedWidget">
<widget class="QWidget" name="pageDummy">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string> This layer doen't have any editbale properties</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
4 changes: 2 additions & 2 deletions src/ui/symbollayer/widget_symbolslist.ui
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>WidgetSymbolsList</class>
<widget class="QWidget" name="WidgetSymbolsList">
<class>SymbolsListWidget</class>
<widget class="QWidget" name="SymbolsListWidget">
<property name="geometry">
<rect>
<x>0</x>
Expand Down