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 )
209 , mAdvancedMenu( NULL )
237 btnLock->setIcon( iconLock );
243 layersTree->setModel(
model );
244 layersTree->setHeaderHidden(
true );
263 layersTree->setCurrentIndex( newIndex );
298 mPresetExpressionContext.
reset( context );
307 QWidget* widget = stackedWidget->currentWidget();
322 symbolItem->
setFont( boldFont );
326 for (
int i = count - 1; i >= 0; i-- )
336 layersTree->setExpanded( symbolItem->
index(), true );
348 QModelIndex currentIdx = layersTree->currentIndex();
356 btnDown->setEnabled(
false );
357 btnRemoveLayer->setEnabled(
false );
358 btnLock->setEnabled(
false );
363 int currentRow = item->
row();
365 btnUp->setEnabled( currentRow > 0 );
366 btnDown->setEnabled( currentRow < rowCount - 1 );
367 btnRemoveLayer->setEnabled( rowCount > 1 );
368 btnLock->setEnabled(
true );
410 return item->
layer();
420 if ( currentItem == NULL )
431 connect( layerProp, SIGNAL( changed() ), mDataDefineRestorer.
data(), SLOT( restore() ) );
438 mDataDefineRestorer.
reset();
455 if ( currentItem == NULL || currentItem->
isLayer() )
459 if ( currentItem->
parent() )
466 layersTree->setCurrentIndex( parent->
child( 0 )->
index() );
474 layersTree->setCurrentIndex( newIndex );
483 int index = stackedWidget->addWidget( widget );
484 stackedWidget->setCurrentIndex( index );
495 btnLock->setChecked( layer->
isLocked() );
508 insertIdx = item->
row();
526 if ( insertIdx == -1 )
533 static_cast<QgsMarkerSymbolV2 *>( parentSymbol )->setDataDefinedSize( ddSize );
535 static_cast<QgsMarkerSymbolV2 *
>( parentSymbol )->setDataDefinedAngle( ddAngle );
537 static_cast<QgsLineSymbolV2 *>( parentSymbol )->setDataDefinedWidth( ddWidth );
540 item->
insertRow( insertIdx == -1 ? 0 : insertIdx, newLayerItem );
551 int row = item->
row();
554 int layerIdx = parent->
rowCount() - row - 1;
562 layersTree->setCurrentIndex( newIdx );
585 int row = item->
row();
590 int layerIdx = parent->
rowCount() - row - 1;
600 layersTree->setCurrentIndex( newIdx );
611 layer->
setLocked( btnLock->isChecked() );
618 tr(
"Please enter name for the symbol:" ), QLineEdit::Normal,
tr(
"New symbol" ), &ok );
626 tr(
"Symbol with name '%1' already exists. Overwrite?" )
628 QMessageBox::Yes | QMessageBox::No );
629 if ( res != QMessageBox::Yes )
657 layersTree->setExpanded( item->
index(), true );
void setLocked(bool locked)
QByteArray toByteArray() const
int type() const override
QgsSymbolLayerV2 * layer()
void setExpressionContext(QgsExpressionContext *context)
Sets the optional expression context used for the widget.
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
~QgsSymbolV2SelectorDialog()
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)
bool addSymbol(const QString &name, QgsSymbolV2 *symbol, bool update=false)
add symbol to style. takes symbol's ownership
void setDataDefinedSize(const QgsDataDefined &dd)
Set data defined size for whole symbol (including all symbol layers).
virtual QgsSymbolV2 * clone() const =0
SymbolLayerItem(QgsSymbolV2 *symbol)
void symbolChanged()
Slot to update tree when a new symbol from style.
static QString iconPath(const QString &iconFile)
Returns path to the desired icon file.
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)
Map canvas is a class for displaying all GIS data types on a canvas.
QgsDataDefined dataDefinedWidth() const
Returns data defined size for whole symbol (including all symbol layers).
void setBold(bool enable)
void setValue(const QString &key, const QVariant &value)
DataDefinedRestorer(QgsSymbolV2 *symbol, const QgsSymbolLayerV2 *symbolLayer)
const char * name() const
The output shall be in millimeters.
static QIcon symbolPreviewIcon(QgsSymbolV2 *symbol, QSize size)
void setWidget(QWidget *widget)
bool appendSymbolLayer(QgsSymbolLayerV2 *layer)
Append symbol layer at the end of the list Ownership will be transferred.
bool saveSymbol(const QString &name, QgsSymbolV2 *symbol, int groupid, const QStringList &tags)
add the symbol to the DB with the tags
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)
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QStandardItem * parent() const
int symbolLayerCount()
Returns total number of symbol layers contained in the symbol.
QStringList symbolNames()
return a list of names of symbols
QgsSymbolLayerV2AbstractMetadata * symbolLayerMetadata(const QString &name) const
return metadata for specified symbol layer. Returns NULL if not found
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).
QVariant value(const QString &key, const QVariant &defaultValue) const
const QAbstractItemModel * model() const
void setLayer(QgsSymbolLayerV2 *layer)
bool insertSymbolLayer(int index, QgsSymbolLayerV2 *layer)
Insert symbol layer to specified index Ownership will be transferred.
QImage bigSymbolPreviewImage(QgsExpressionContext *expressionContext=0)
Returns a large (roughly 100x100 pixel) preview image for the symbol.
QStandardItem * itemFromIndex(const QModelIndex &index) const
void moveLayerByOffset(int offset)
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the dialog.
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()
virtual QVariant data(int role) const
void insertRow(int row, const QList< QStandardItem * > &items)
void setEditable(bool editable)
QgsSymbolLayerV2 * mLayer