35 #include <QColorDialog>
37 #include <QStandardItemModel>
38 #include <QInputDialog>
39 #include <QMessageBox>
45 #include <QStandardItem>
51 , mMarkerSymbolLayer( NULL )
53 , mLineSymbolLayer( NULL )
60 mDDSize = mMarker->dataDefinedSize();
61 mDDAngle = mMarker->dataDefinedAngle();
78 void DataDefinedRestorer::save()
82 mSize = mMarkerSymbolLayer->
size();
83 mAngle = mMarkerSymbolLayer->
angle();
84 mMarkerOffset = mMarkerSymbolLayer->
offset();
88 mWidth = mLineSymbolLayer->
width();
89 mLineOffset = mLineSymbolLayer->
offset();
98 ( mSize != mMarkerSymbolLayer->
size() || mMarkerOffset != mMarkerSymbolLayer->
offset() ) )
101 mAngle != mMarkerSymbolLayer->
angle() )
107 ( mWidth != mLineSymbolLayer->
width() || mLineOffset != mLineSymbolLayer->
offset() ) )
177 if ( role == Qt::DisplayRole || role == Qt::EditRole )
188 default:
return "Symbol";
192 if ( role == Qt::SizeHintRole )
194 if ( role == Qt::CheckStateRole )
208 :
QDialog( parent ), mAdvancedMenu( NULL ), mVectorLayer( vl )
230 btnLock->setIcon( iconLock );
236 layersTree->setModel(
model );
237 layersTree->setHeaderHidden(
true );
256 layersTree->setCurrentIndex( newIndex );
288 symbolItem->
setFont( boldFont );
292 for (
int i = count - 1; i >= 0; i-- )
302 layersTree->setExpanded( symbolItem->
index(), true );
314 QModelIndex currentIdx = layersTree->currentIndex();
322 btnDown->setEnabled(
false );
323 btnRemoveLayer->setEnabled(
false );
324 btnLock->setEnabled(
false );
329 int currentRow = item->
row();
331 btnUp->setEnabled( currentRow > 0 );
332 btnDown->setEnabled( currentRow < rowCount - 1 );
333 btnRemoveLayer->setEnabled( rowCount > 1 );
334 btnLock->setEnabled(
true );
376 return item->
layer();
386 if ( currentItem == NULL )
395 connect( layerProp, SIGNAL( changed() ), mDataDefineRestorer.
data(), SLOT( restore() ) );
402 mDataDefineRestorer.
reset();
417 if ( currentItem == NULL || currentItem->
isLayer() )
421 if ( currentItem->
parent() )
428 layersTree->setCurrentIndex( parent->
child( 0 )->
index() );
436 layersTree->setCurrentIndex( newIndex );
445 int index = stackedWidget->addWidget( widget );
446 stackedWidget->setCurrentIndex( index );
461 btnLock->setChecked( layer->
isLocked() );
474 insertIdx = item->
row();
492 if ( insertIdx == -1 )
499 static_cast<QgsMarkerSymbolV2 *>( parentSymbol )->setDataDefinedSize( ddSize );
501 static_cast<QgsMarkerSymbolV2 *
>( parentSymbol )->setDataDefinedAngle( ddAngle );
503 static_cast<QgsLineSymbolV2 *>( parentSymbol )->setDataDefinedWidth( ddWidth );
506 item->
insertRow( insertIdx == -1 ? 0 : insertIdx, newLayerItem );
517 int row = item->
row();
520 int layerIdx = parent->
rowCount() - row - 1;
528 layersTree->setCurrentIndex( newIdx );
551 int row = item->
row();
556 int layerIdx = parent->
rowCount() - row - 1;
566 layersTree->setCurrentIndex( newIdx );
577 layer->
setLocked( btnLock->isChecked() );
584 tr(
"Please enter name for the symbol:" ), QLineEdit::Normal,
tr(
"New symbol" ), &ok );
592 tr(
"Symbol with name '%1' already exists. Overwrite?" )
594 QMessageBox::Yes | QMessageBox::No );
595 if ( res != QMessageBox::Yes )
623 layersTree->setExpanded( item->
index(), true );
void setLocked(bool locked)
int type() const override
QgsSymbolLayerV2 * layer()
void setContentsMargins(int left, int top, int right, int bottom)
static QgsSymbolLayerV2 * defaultSymbolLayer(QgsSymbolV2::SymbolType type)
create a new instance of symbol layer for specified symbol type with default settings ...
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const =0
bool saveSymbol(QString name, QgsSymbolV2 *symbol, int groupid, QStringList tags)
add the symbol to the DB with the tags
void setIcon(const QIcon &icon)
void setDataDefinedAngle(const QgsDataDefined &dd)
Set data defined angle for whole symbol (including all symbol layers).
A container class for data source field mapping or expression.
static QIcon symbolLayerPreviewIcon(QgsSymbolLayerV2 *layer, QgsSymbolV2::OutputUnit u, QSize size, const QgsMapUnitScale &scale=QgsMapUnitScale())
virtual double width() const
QVariant data(int role) const override
QStandardItem * invisibleRootItem() const
QList< QStandardItem * > takeRow(int row)
static QString iconPath(QString iconFile)
Returns path to the desired icon file.
void setDataDefinedSize(const QgsDataDefined &dd)
Set data defined size for whole symbol (including all symbol layers).
virtual QgsSymbolV2 * clone() const =0
QgsSymbolLayerV2AbstractMetadata * symbolLayerMetadata(QString name) const
return metadata for specified symbol layer. Returns NULL if not found
SymbolLayerItem(QgsSymbolV2 *symbol)
void symbolChanged()
Slot to update tree when a new symbol from style.
bool contains(const QString &str, Qt::CaseSensitivity cs) const
bool changeSymbolLayer(int index, QgsSymbolLayerV2 *layer)
delete layer at specified index and set a new one
QPixmap fromImage(const QImage &image, QFlags< Qt::ImageConversionFlag > flags)
static QgsSymbolLayerV2Registry * instance()
return the single instance of this class (instantiate it if not exists)
QStandardItemModel * model
SymbolLayerItem(QgsSymbolLayerV2 *layer)
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
const QgsVectorLayer * mVectorLayer
QString tr(const char *sourceText, const char *disambiguation, int n)
QgsDataDefined dataDefinedWidth() const
Returns data defined size for whole symbol (including all symbol layers).
bool addSymbol(QString name, QgsSymbolV2 *symbol, bool update=false)
add symbol to style. takes symbol's ownership
void setBold(bool enable)
DataDefinedRestorer(QgsSymbolV2 *symbol, const QgsSymbolLayerV2 *symbolLayer)
const char * name() const
static QIcon symbolPreviewIcon(QgsSymbolV2 *symbol, QSize size)
void setWidget(QWidget *widget)
bool appendSymbolLayer(QgsSymbolLayerV2 *layer)
append symbol layer at the end of the list
void keyPressEvent(QKeyEvent *event) override
Reimplements dialog keyPress event so we can ignore it.
QModelIndex indexFromItem(const QStandardItem *item) const
QMenu * advancedMenu()
return menu for "advanced" button - create it if doesn't exist and show the advanced button ...
void appendRow(const QList< QStandardItem * > &items)
void setLayer(const QgsVectorLayer *layer)
static const int SymbolLayerItemType
void insertRows(int row, const QList< QStandardItem * > &items)
QStandardItem * parent() const
int symbolLayerCount()
Returns total number of symbol layers contained in the symbol.
QStringList symbolNames()
return a list of names of symbols
QStandardItem * child(int row, int column) const
void setFont(const QFont &font)
QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode, const QString &text, bool *ok, QFlags< Qt::WindowType > flags, QFlags< Qt::InputMethodHint > inputMethodHints)
QgsSymbolV2::SymbolType type() const
QgsSymbolV2SelectorDialog(QgsSymbolV2 *symbol, QgsStyleV2 *style, const QgsVectorLayer *vl, QWidget *parent=0, bool embedded=false)
void setEnabled(bool enabled)
SymbolLayerItem * currentLayerItem()
QgsSymbolLayerV2 * currentLayer()
virtual QString layerType() const =0
virtual QgsSymbolV2 * subSymbol()
void addFile(const QString &fileName, const QSize &size, Mode mode, State state)
virtual void keyPressEvent(QKeyEvent *e)
void setDataDefinedWidth(const QgsDataDefined &dd)
Set data defined width for whole symbol (including all symbol layers).
const QAbstractItemModel * model() const
void setLayer(QgsSymbolLayerV2 *layer)
bool insertSymbolLayer(int index, QgsSymbolLayerV2 *layer)
insert symbol layer to specified index
QStandardItem * itemFromIndex(const QModelIndex &index) const
void moveLayerByOffset(int offset)
void changeLayer(QgsSymbolLayerV2 *layer)
alters tree and sets proper widget when Layer Type is changed
QModelIndex index() const
StandardButton warning(QWidget *parent, const QString &title, const QString &text, QFlags< QMessageBox::StandardButton > buttons, StandardButton defaultButton)
QgsSymbolLayerV2 * takeSymbolLayer(int index)
remove symbol layer from the list and return pointer to it
QgsSymbolLayerV2 * symbolLayer(int layer)
Returns a specific symbol layers contained in the symbol.
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void setSymbol(QgsSymbolV2 *symbol)
Represents a vector layer which manages a vector based data sets.
void updateLayerPreview()
QImage bigSymbolPreviewImage()
virtual QVariant data(int role) const
void insertRow(int row, const QList< QStandardItem * > &items)
void setEditable(bool editable)
QgsSymbolLayerV2 * mLayer