Skip to content

Commit cde5a06

Browse files
author
jef
committedOct 18, 2010
change list to view in single symbol dialog
git-svn-id: http://svn.osgeo.org/qgis/trunk@14392 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent b21747b commit cde5a06

File tree

3 files changed

+102
-82
lines changed

3 files changed

+102
-82
lines changed
 

‎src/app/qgssinglesymboldialog.cpp

Lines changed: 64 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,48 @@
3030
#include <QPainter>
3131
#include <QImage>
3232
#include <QFileDialog>
33-
#include <QListWidgetItem>
3433
#include <QKeyEvent>
34+
#include <QAbstractListModel>
3535

3636
#define DO_NOT_USE_STR "<off>"
3737

38+
39+
class QgsMarkerListModel : public QAbstractListModel
40+
{
41+
public:
42+
QgsMarkerListModel( QObject* parent ) : QAbstractListModel( parent )
43+
{
44+
mMarkers = QgsMarkerCatalogue::instance()->list();
45+
}
46+
47+
int rowCount( const QModelIndex & parent = QModelIndex() ) const
48+
{
49+
return mMarkers.size();
50+
}
51+
52+
QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const
53+
{
54+
QString marker = mMarkers.at( index.row() );
55+
56+
if ( role == Qt::DecorationRole ) // icon
57+
{
58+
QPen pen( QColor( 0, 0, 255 ) );
59+
QBrush brush( QColor( 220, 220, 220 ), Qt::SolidPattern );
60+
return QPixmap::fromImage( QgsMarkerCatalogue::instance()->imageMarker( marker, 18, pen, brush ) );
61+
}
62+
else if ( role == Qt::UserRole || role == Qt::ToolTipRole )
63+
{
64+
return marker;
65+
}
66+
67+
return QVariant();
68+
}
69+
70+
protected:
71+
QStringList mMarkers;
72+
};
73+
74+
3875
QgsSingleSymbolDialog::QgsSingleSymbolDialog(): QDialog(), mVectorLayer( 0 )
3976
{
4077
setupUi( this );
@@ -71,8 +108,8 @@ QgsSingleSymbolDialog::QgsSingleSymbolDialog( QgsVectorLayer * layer, bool disab
71108
connect( btnFillColor, SIGNAL( clicked() ), this, SLOT( selectFillColor() ) );
72109
connect( outlinewidthspinbox, SIGNAL( valueChanged( double ) ), this, SLOT( resendSettingsChanged() ) );
73110
connect( mLabelEdit, SIGNAL( textChanged( const QString& ) ), this, SLOT( resendSettingsChanged() ) );
74-
connect( lstSymbols, SIGNAL( currentItemChanged( QListWidgetItem *, QListWidgetItem * ) ),
75-
this, SLOT( symbolChanged( QListWidgetItem *, QListWidgetItem * ) ) );
111+
connect( lstSymbols, SIGNAL( currentChanged( const QModelIndex & , const QModelIndex & ) ),
112+
this, SLOT( symbolChanged( const QModelIndex & , const QModelIndex & ) ) );
76113
connect( mPointSizeSpinBox, SIGNAL( valueChanged( double ) ), this, SLOT( resendSettingsChanged() ) );
77114
connect( mPointSizeUnitsCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( resendSettingsChanged() ) );
78115
connect( mRotationClassificationComboBox, SIGNAL( currentIndexChanged( const QString & ) ),
@@ -95,32 +132,8 @@ QgsSingleSymbolDialog::QgsSingleSymbolDialog( QgsVectorLayer * layer, bool disab
95132

96133
void QgsSingleSymbolDialog::refreshMarkers()
97134
{
98-
lstSymbols->blockSignals( true );
99-
lstSymbols->clear();
100-
101-
QPen pen( QColor( 0, 0, 255 ) );
102-
QBrush brush( QColor( 220, 220, 220 ), Qt::SolidPattern );
103-
int size = 18;
104-
int myCounter = 0;
105-
QStringList ml = QgsMarkerCatalogue::instance()->list();
106-
for ( QStringList::iterator it = ml.begin(); it != ml.end(); ++it )
107-
{
108-
QPixmap myPixmap = QPixmap::fromImage( QgsMarkerCatalogue::instance()->imageMarker( *it, size, pen, brush ) );
109-
QListWidgetItem * mypItem = new QListWidgetItem( lstSymbols );
110-
QIcon myIcon;
111-
myIcon.addPixmap( myPixmap );
112-
mypItem->setIcon( myIcon );
113-
mypItem->setText( "" );
114-
mypItem->setToolTip( *it );
115-
//store the symbol offset in the UserData role for later retrieval
116-
mypItem->setData( Qt::UserRole, *it );
117-
mypItem->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled );
118-
if ( mVectorLayer && mVectorLayer->geometryType() != QGis::Point )
119-
{
120-
break;
121-
}
122-
++myCounter;
123-
}
135+
QgsMarkerListModel *m = new QgsMarkerListModel( lstSymbols );
136+
lstSymbols->setModel( m );
124137

125138
// Find out the numerical fields of mVectorLayer, and populate the ComboBoxes
126139
QgsVectorDataProvider *provider = mVectorLayer->dataProvider();
@@ -283,9 +296,10 @@ void QgsSingleSymbolDialog::apply( QgsSymbol *sy )
283296
//
284297
// Apply point symbol
285298
//
286-
if ( lstSymbols->isEnabled() && lstSymbols->currentItem() )
299+
if ( lstSymbols->isEnabled() && lstSymbols->currentIndex().isValid() )
287300
{
288-
sy->setNamedPointSymbol( lstSymbols->currentItem()->data( Qt::UserRole ).toString() ) ;
301+
QAbstractItemModel *m = lstSymbols->model();
302+
sy->setNamedPointSymbol( m->data( lstSymbols->currentIndex(), Qt::UserRole ).toString() );
289303
}
290304

291305
if ( mPointSizeSpinBox->isEnabled() )
@@ -376,12 +390,15 @@ void QgsSingleSymbolDialog::set( const QgsSymbol *sy )
376390

377391
// Set point symbol
378392
QString mySymbolName = sy->pointSymbolName();
379-
for ( int i = 0; i < lstSymbols->count(); ++i )
393+
394+
QAbstractItemModel *m = lstSymbols->model();
395+
for ( int i = 0; i < m->rowCount(); i++ )
380396
{
381-
if ( lstSymbols->item( i )->data( Qt::UserRole ).toString() == ( mySymbolName ) )
397+
QModelIndex idx( m->index( i, 0 ) );
398+
if ( m->data( idx, Qt::UserRole ).toString() == mySymbolName )
382399
{
383-
lstSymbols->setCurrentItem( lstSymbols->item( i ) );
384-
lstSymbols->item( i )->setBackground( QBrush( Qt::cyan ) );
400+
lstSymbols->setCurrentIndex( idx );
401+
// m->setData( idx, Qt::UserRole+1, Qt::cyan );
385402
break;
386403
}
387404
}
@@ -478,8 +495,13 @@ void QgsSingleSymbolDialog::updateSet( const QgsSymbol *sy )
478495
if ( mLabelEdit->isEnabled() && mLabelEdit->text() != sy->label() )
479496
mLabelEdit->setEnabled( false );
480497

481-
if ( lstSymbols->isEnabled() && lstSymbols->currentItem()->data( Qt::UserRole ).toString() != sy->pointSymbolName() )
482-
lstSymbols->setEnabled( false );
498+
if ( lstSymbols->isEnabled() && lstSymbols->currentIndex().isValid() )
499+
{
500+
QAbstractItemModel *m = lstSymbols->model();
501+
502+
if ( m->data( lstSymbols->currentIndex(), Qt::UserRole ).toString() != sy->pointSymbolName() )
503+
lstSymbols->setEnabled( false );
504+
}
483505

484506
if ( mPointSizeSpinBox->isEnabled() && !doubleNear( mPointSizeSpinBox->value(), sy->pointSize() ) )
485507
mPointSizeSpinBox->setEnabled( false );
@@ -612,14 +634,12 @@ void QgsSingleSymbolDialog::setLabel( QString label )
612634
mLabelEdit->setText( label );
613635
}
614636

615-
void QgsSingleSymbolDialog::symbolChanged
616-
( QListWidgetItem * current, QListWidgetItem * previous )
637+
void QgsSingleSymbolDialog::symbolChanged( const QModelIndex &current, const QModelIndex &previous )
617638
{
618-
current->setBackground( QBrush( Qt::cyan ) );
619-
if ( previous )
620-
{
621-
previous->setBackground( QBrush( Qt::white ) );
622-
}
639+
QAbstractItemModel *m = lstSymbols->model();
640+
QgsDebugMsg( QString( "symbol changed to %1:%2" ).arg( current.row() ).arg( m->data( current, Qt::UserRole ).toString() ) );
641+
// m->setData( current, Qt::UserRole+1, Qt::cyan );
642+
// m->setData( prev, Qt::UserRole+1, Qt::white );
623643
emit settingsChanged();
624644
}
625645

‎src/app/qgssinglesymboldialog.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class QgsSingleSymbolDialog: public QDialog, private Ui::QgsSingleSymbolDialogBa
7575
void selectOutlineColor();
7676
void selectFillColor();
7777
void selectTextureImage();
78-
void symbolChanged( QListWidgetItem * current, QListWidgetItem * previous );
78+
void symbolChanged( const QModelIndex &current, const QModelIndex &previous );
7979
private:
8080
/** Default constructor is private, do not use this */
8181
QgsSingleSymbolDialog();

‎src/ui/qgssinglesymboldialogbase.ui

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>360</width>
9+
<width>366</width>
1010
<height>470</height>
1111
</rect>
1212
</property>
@@ -33,8 +33,8 @@
3333
<rect>
3434
<x>0</x>
3535
<y>0</y>
36-
<width>337</width>
37-
<height>616</height>
36+
<width>350</width>
37+
<height>604</height>
3838
</rect>
3939
</property>
4040
<layout class="QGridLayout" name="gridLayout_5">
@@ -50,40 +50,6 @@
5050
<string>Point Symbol</string>
5151
</property>
5252
<layout class="QGridLayout" name="gridLayout_4">
53-
<item row="0" column="0" colspan="3">
54-
<widget class="QListWidget" name="lstSymbols">
55-
<property name="sizePolicy">
56-
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
57-
<horstretch>0</horstretch>
58-
<verstretch>0</verstretch>
59-
</sizepolicy>
60-
</property>
61-
<property name="dragDropMode">
62-
<enum>QAbstractItemView::DragDrop</enum>
63-
</property>
64-
<property name="alternatingRowColors">
65-
<bool>false</bool>
66-
</property>
67-
<property name="iconSize">
68-
<size>
69-
<width>0</width>
70-
<height>-1</height>
71-
</size>
72-
</property>
73-
<property name="resizeMode">
74-
<enum>QListView::Adjust</enum>
75-
</property>
76-
<property name="viewMode">
77-
<enum>QListView::IconMode</enum>
78-
</property>
79-
<property name="uniformItemSizes">
80-
<bool>true</bool>
81-
</property>
82-
<property name="wordWrap">
83-
<bool>false</bool>
84-
</property>
85-
</widget>
86-
</item>
8753
<item row="1" column="0">
8854
<widget class="QLabel" name="textLabel1_2">
8955
<property name="text">
@@ -120,6 +86,40 @@
12086
<item row="2" column="2">
12187
<layout class="QHBoxLayout" name="horizontalLayout"/>
12288
</item>
89+
<item row="0" column="0" colspan="3">
90+
<widget class="QListView" name="lstSymbols">
91+
<property name="sizePolicy">
92+
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
93+
<horstretch>0</horstretch>
94+
<verstretch>0</verstretch>
95+
</sizepolicy>
96+
</property>
97+
<property name="dragDropMode">
98+
<enum>QAbstractItemView::DragDrop</enum>
99+
</property>
100+
<property name="alternatingRowColors">
101+
<bool>false</bool>
102+
</property>
103+
<property name="iconSize">
104+
<size>
105+
<width>0</width>
106+
<height>-1</height>
107+
</size>
108+
</property>
109+
<property name="resizeMode">
110+
<enum>QListView::Adjust</enum>
111+
</property>
112+
<property name="viewMode">
113+
<enum>QListView::IconMode</enum>
114+
</property>
115+
<property name="uniformItemSizes">
116+
<bool>true</bool>
117+
</property>
118+
<property name="wordWrap">
119+
<bool>false</bool>
120+
</property>
121+
</widget>
122+
</item>
123123
</layout>
124124
</widget>
125125
</item>

0 commit comments

Comments
 (0)