Skip to content

Commit 0181324

Browse files
committedJun 18, 2012
create QgsDecorationItem class for all decoration items and render in a specific order (grid before others so it's on bottom
1 parent edda90a commit 0181324

15 files changed

+158
-153
lines changed
 

‎src/app/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ SET(QGIS_APP_SRCS
1919
qgsconfigureshortcutsdialog.cpp
2020
qgscustomization.cpp
2121
qgscustomprojectiondialog.cpp
22+
qgsdecorationitem.cpp
2223
qgsdecorationcopyright.cpp
2324
qgsdecorationcopyrightdialog.cpp
2425
qgsdecorationnortharrow.cpp
@@ -169,6 +170,7 @@ SET (QGIS_APP_MOC_HDRS
169170
qgscontinuouscolordialog.h
170171
qgscustomization.h
171172
qgscustomprojectiondialog.h
173+
qgsdecorationitem.h
172174
qgsdecorationcopyright.h
173175
qgsdecorationcopyrightdialog.h
174176
qgsdecorationnortharrow.h

‎src/app/qgisapp.cpp

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2004,26 +2004,41 @@ void QgisApp::createMapTips()
20042004

20052005
void QgisApp::createDecorations()
20062006
{
2007-
mDecorationCopyright = new QgsDecorationCopyright( this );
2007+
QgsDecorationCopyright* mDecorationCopyright = new QgsDecorationCopyright( this );
20082008
connect( mActionDecorationCopyright, SIGNAL( triggered() ), mDecorationCopyright, SLOT( run() ) );
2009-
connect( mMapCanvas, SIGNAL( renderComplete( QPainter * ) ), mDecorationCopyright, SLOT( renderLabel( QPainter * ) ) );
2010-
connect( this, SIGNAL( projectRead() ), mDecorationCopyright, SLOT( projectRead() ) );
20112009

2012-
mDecorationNorthArrow = new QgsDecorationNorthArrow( this );
2010+
QgsDecorationNorthArrow* mDecorationNorthArrow = new QgsDecorationNorthArrow( this );
20132011
connect( mActionDecorationNorthArrow, SIGNAL( triggered() ), mDecorationNorthArrow, SLOT( run() ) );
2014-
connect( mMapCanvas, SIGNAL( renderComplete( QPainter * ) ), mDecorationNorthArrow, SLOT( renderNorthArrow( QPainter * ) ) );
2015-
connect( this, SIGNAL( projectRead() ), mDecorationNorthArrow, SLOT( projectRead() ) );
20162012

2017-
mDecorationScaleBar = new QgsDecorationScaleBar( this );
2013+
QgsDecorationScaleBar* mDecorationScaleBar = new QgsDecorationScaleBar( this );
20182014
connect( mActionDecorationScaleBar, SIGNAL( triggered() ), mDecorationScaleBar, SLOT( run() ) );
2019-
connect( mMapCanvas, SIGNAL( renderComplete( QPainter * ) ), mDecorationScaleBar, SLOT( renderScaleBar( QPainter * ) ) );
2020-
connect( this, SIGNAL( projectRead() ), mDecorationScaleBar, SLOT( projectRead() ) );
20212015

2022-
// TODO draw the decorations in a particular order - perhaps use a vector or decoration objects?
2023-
mDecorationGrid = new QgsDecorationGrid( this );
2016+
QgsDecorationGrid* mDecorationGrid = new QgsDecorationGrid( this );
20242017
connect( mActionDecorationGrid, SIGNAL( triggered() ), mDecorationGrid, SLOT( run() ) );
2025-
connect( mMapCanvas, SIGNAL( renderComplete( QPainter * ) ), mDecorationGrid, SLOT( renderGrid( QPainter * ) ) );
2026-
connect( this, SIGNAL( projectRead() ), mDecorationGrid, SLOT( projectRead() ) );
2018+
2019+
// add the decorations in a particular order so they are rendered in that order
2020+
addDecorationItem( mDecorationGrid );
2021+
addDecorationItem( mDecorationCopyright );
2022+
addDecorationItem( mDecorationNorthArrow );
2023+
addDecorationItem( mDecorationScaleBar );
2024+
connect( mMapCanvas, SIGNAL( renderComplete( QPainter * ) ), this, SLOT( renderDecorationItems( QPainter * ) ) );
2025+
connect( this, SIGNAL( projectRead() ), this, SLOT( projectReadDecorationItems() ) );
2026+
}
2027+
2028+
void QgisApp::renderDecorationItems( QPainter *p )
2029+
{
2030+
foreach( QgsDecorationItem* item, mDecorationItems )
2031+
{
2032+
item->render( p );
2033+
}
2034+
}
2035+
2036+
void QgisApp::projectReadDecorationItems()
2037+
{
2038+
foreach( QgsDecorationItem* item, mDecorationItems )
2039+
{
2040+
item->projectRead( );
2041+
}
20272042
}
20282043

20292044
// Update file menu with the current list of recently accessed projects

‎src/app/qgisapp.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,7 @@ class QgsBrowserDockWidget;
6969
class QgsSnappingDialog;
7070
class QgsGPSInformationWidget;
7171

72-
class QgsDecorationCopyright;
73-
class QgsDecorationNorthArrow;
74-
class QgsDecorationScaleBar;
75-
class QgsDecorationGrid;
72+
class QgsDecorationItem;
7673

7774
class QgsMessageLogViewer;
7875

@@ -381,6 +378,9 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
381378

382379
void emitCustomSrsValidation( QgsCoordinateReferenceSystem *crs );
383380

381+
QList<QgsDecorationItem*> decorationItems() { return mDecorationItems; }
382+
void addDecorationItem( QgsDecorationItem* item ) { mDecorationItems.append( item ); }
383+
384384
public slots:
385385
//! Zoom to full extent
386386
void zoomFull();
@@ -869,6 +869,9 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
869869
//! Activates label property tool
870870
void changeLabelProperties();
871871

872+
void renderDecorationItems( QPainter *p );
873+
void projectReadDecorationItems( );
874+
872875
signals:
873876
/** emitted when a key is pressed and we want non widget sublasses to be able
874877
to pick up on this (e.g. maplayer) */
@@ -1185,10 +1188,10 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
11851188

11861189
QgsSnappingDialog* mSnappingDialog;
11871190

1188-
QgsDecorationCopyright* mDecorationCopyright;
1189-
QgsDecorationNorthArrow* mDecorationNorthArrow;
1190-
QgsDecorationScaleBar* mDecorationScaleBar;
1191-
QgsDecorationGrid* mDecorationGrid;
1191+
//! Persistent tile scale slider
1192+
QgsTileScaleWidget * mpTileScaleWidget;
1193+
1194+
QList<QgsDecorationItem*> mDecorationItems;
11921195

11931196
int mLastComposerId;
11941197

@@ -1214,6 +1217,7 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
12141217
bool gestureEvent( QGestureEvent *event );
12151218
void tapAndHoldTriggered( QTapAndHoldGesture *gesture );
12161219
#endif
1220+
12171221
};
12181222

12191223
#ifdef ANDROID

‎src/app/qgsdecorationcopyright.cpp

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,12 @@ email : tim@linfiniti.com
4242

4343

4444
QgsDecorationCopyright::QgsDecorationCopyright( QObject* parent )
45-
: QObject( parent )
45+
: QgsDecorationItem( parent )
4646
{
4747
mPlacementLabels << tr( "Bottom Left" ) << tr( "Top Left" )
4848
<< tr( "Top Right" ) << tr( "Bottom Right" );
4949

50+
setName( "Copyright Label" );
5051
// initialise default values in the gui
5152
projectRead();
5253
}
@@ -56,20 +57,29 @@ QgsDecorationCopyright::~QgsDecorationCopyright()
5657

5758
void QgsDecorationCopyright::projectRead()
5859
{
59-
QDate now;
60-
QString defString;
60+
QgsDecorationItem::projectRead();
6161

62-
now = QDate::currentDate();
63-
defString = "&copy; QGIS " + now.toString( "yyyy" );
62+
QDate now = QDate::currentDate();
63+
QString defString = "&copy; QGIS " + now.toString( "yyyy" );
6464

6565
// there is no font setting in the UI, so just use the Qt/QGIS default font (what mQFont gets when created)
6666
// mQFont.setFamily( QgsProject::instance()->readEntry( "CopyrightLabel", "/FontName", "Sans Serif" ) );
6767
// mQFont.setPointSize( QgsProject::instance()->readNumEntry( "CopyrightLabel", "/FontSize", 9 ) );
6868
QgsProject* prj = QgsProject::instance();
69-
mLabelQString = prj->readEntry( "CopyrightLabel", "/Label", defString );
70-
mPlacementIndex = prj->readNumEntry( "CopyrightLabel", "/Placement", 3 );
71-
mEnable = prj->readBoolEntry( "CopyrightLabel", "/Enabled", false );
72-
mLabelQColor.setNamedColor( prj->readEntry( "CopyrightLabel", "/Color", "#000000" ) ); // default color is black
69+
mLabelQString = prj->readEntry( mNameConfig, "/Label", defString );
70+
mPlacementIndex = prj->readNumEntry( mNameConfig, "/Placement", 3 );
71+
mLabelQColor.setNamedColor( prj->readEntry( mNameConfig, "/Color", "#000000" ) ); // default color is black
72+
}
73+
74+
void QgsDecorationCopyright::saveToProject()
75+
{
76+
QgsDecorationItem::saveToProject();
77+
QgsProject* prj = QgsProject::instance();
78+
prj->writeEntry( mNameConfig, "/FontName", mQFont.family() );
79+
prj->writeEntry( mNameConfig, "/FontSize", mQFont.pointSize() );
80+
prj->writeEntry( mNameConfig, "/Label", mLabelQString );
81+
prj->writeEntry( mNameConfig, "/Color", mLabelQColor.name() );
82+
prj->writeEntry( mNameConfig, "/Placement", mPlacementIndex );
7383
}
7484

7585
// Slot called when the buffer menu item is activated
@@ -79,16 +89,15 @@ void QgsDecorationCopyright::run()
7989

8090
if ( dlg.exec() )
8191
{
82-
saveToProject();
83-
QgisApp::instance()->mapCanvas()->refresh();
92+
update();
8493
}
8594
}
8695

8796

88-
void QgsDecorationCopyright::renderLabel( QPainter * theQPainter )
97+
void QgsDecorationCopyright::render( QPainter * theQPainter )
8998
{
9099
//Large IF statement to enable/disable copyright label
91-
if ( mEnable )
100+
if ( enabled() )
92101
{
93102
// need width/height of paint device
94103
int myHeight = theQPainter->device()->height();
@@ -139,14 +148,3 @@ void QgsDecorationCopyright::renderLabel( QPainter * theQPainter )
139148
}
140149
}
141150

142-
void QgsDecorationCopyright::saveToProject()
143-
{
144-
//save state to the project file.....
145-
QgsProject* prj = QgsProject::instance();
146-
prj->writeEntry( "CopyrightLabel", "/FontName", mQFont.family() );
147-
prj->writeEntry( "CopyrightLabel", "/FontSize", mQFont.pointSize() );
148-
prj->writeEntry( "CopyrightLabel", "/Label", mLabelQString );
149-
prj->writeEntry( "CopyrightLabel", "/Color", mLabelQColor.name() );
150-
prj->writeEntry( "CopyrightLabel", "/Placement", mPlacementIndex );
151-
prj->writeEntry( "CopyrightLabel", "/Enabled", mEnable );
152-
}

‎src/app/qgsdecorationcopyright.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#ifndef QGSCOPYRIGHTLABELPLUGIN
2020
#define QGSCOPYRIGHTLABELPLUGIN
2121

22+
#include "qgsdecorationitem.h"
23+
2224
#include <QColor>
2325
#include <QFont>
2426
#include <QObject>
@@ -27,7 +29,7 @@ class QPainter;
2729

2830
class QgsDecorationCopyrightDialog;
2931

30-
class QgsDecorationCopyright : public QObject
32+
class QgsDecorationCopyright : public QgsDecorationItem
3133
{
3234
Q_OBJECT
3335
public:
@@ -46,7 +48,7 @@ class QgsDecorationCopyright : public QObject
4648
//! Show the dialog box
4749
void run();
4850
//! render the copyright label
49-
void renderLabel( QPainter * );
51+
void render( QPainter * );
5052

5153
private:
5254
//! This is the font that will be used for the copyright label
@@ -58,8 +60,6 @@ class QgsDecorationCopyright : public QObject
5860
//! Placement of the copyright label - index and translated label names
5961
int mPlacementIndex;
6062
QStringList mPlacementLabels;
61-
//! Copyright label enabled
62-
bool mEnable;
6363

6464
friend class QgsDecorationCopyrightDialog;
6565
};

‎src/app/qgsdecorationcopyrightdialog.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ QgsDecorationCopyrightDialog::QgsDecorationCopyrightDialog( QgsDecorationCopyrig
3333
cboOrientation->hide();
3434
textLabel15->hide();
3535

36-
cboxEnabled->setChecked( mDeco.mEnable );
36+
cboxEnabled->setChecked( mDeco.enabled() );
3737
// text
3838
txtCopyrightText->setPlainText( mDeco.mLabelQString );
3939
// placement
@@ -60,7 +60,7 @@ void QgsDecorationCopyrightDialog::on_buttonBox_accepted()
6060
mDeco.mLabelQString = txtCopyrightText->toPlainText();
6161
mDeco.mLabelQColor = pbnColorChooser->color();
6262
mDeco.mPlacementIndex = cboPlacement->currentIndex();
63-
mDeco.mEnable = cboxEnabled->isChecked();
63+
mDeco.setEnabled( cboxEnabled->isChecked() );
6464

6565
accept();
6666
}

‎src/app/qgsdecorationgrid.cpp

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@
5252

5353

5454
QgsDecorationGrid::QgsDecorationGrid( QObject* parent )
55-
: QObject( parent )
55+
: QgsDecorationItem( parent )
5656
{
57+
setName( "Grid" );
5758
projectRead();
5859
}
5960

@@ -62,42 +63,40 @@ QgsDecorationGrid::~QgsDecorationGrid()
6263

6364
}
6465

65-
void QgsDecorationGrid::update()
66-
{
67-
QgisApp::instance()->mapCanvas()->refresh();
68-
}
69-
7066
void QgsDecorationGrid::projectRead()
7167
{
72-
mGridEnabled = QgsProject::instance()->readBoolEntry( "Grid", "/Enabled", false );
73-
mGridStyle = ( GridStyle ) QgsProject::instance()->readNumEntry( "Grid", "/Style", 0 );
74-
mGridIntervalX = QgsProject::instance()->readDoubleEntry( "Grid", "/IntervalX", 0 );
75-
mGridIntervalY = QgsProject::instance()->readDoubleEntry( "Grid", "/IntervalY", 0 );
76-
mGridOffsetX = QgsProject::instance()->readDoubleEntry( "Grid", "/OffsetX", 0 );
77-
mGridOffsetY = QgsProject::instance()->readDoubleEntry( "Grid", "/OffsetY", 0 );
78-
mCrossLength = QgsProject::instance()->readDoubleEntry( "Grid", "/CrossLength", 0 );
79-
// missing mGridPen, mGridAnnotationFont
80-
mGridAnnotationPrecision = ( GridAnnotationPosition ) QgsProject::instance()->readNumEntry( "Grid", "/AnnotationPrecision", 3 );
81-
mShowGridAnnotation = QgsProject::instance()->readBoolEntry( "Grid", "/ShowAnnotation", false );
82-
// mGridAnnotationPosition = (GridAnnotationPosition) QgsProject::instance()->readNumEntry( "Grid", "/AnnotationPosition", 0 );
83-
mAnnotationFrameDistance = QgsProject::instance()->readDoubleEntry( "Grid", "/AnnotationFrameDistance", 0 );
84-
mGridAnnotationDirection = ( GridAnnotationDirection ) QgsProject::instance()->readNumEntry( "Grid", "/AnnotationDirection", 0 );
68+
QgsDecorationItem::projectRead();
69+
mGridStyle = ( GridStyle ) QgsProject::instance()->readNumEntry( mNameConfig, "/Style", 0 );
70+
mGridIntervalX = QgsProject::instance()->readDoubleEntry( mNameConfig, "/IntervalX", 0 );
71+
mGridIntervalY = QgsProject::instance()->readDoubleEntry( mNameConfig, "/IntervalY", 0 );
72+
mGridOffsetX = QgsProject::instance()->readDoubleEntry( mNameConfig, "/OffsetX", 0 );
73+
mGridOffsetY = QgsProject::instance()->readDoubleEntry( mNameConfig, "/OffsetY", 0 );
74+
// missing mGridPen, but should use styles anyway
75+
mCrossLength = QgsProject::instance()->readDoubleEntry( mNameConfig, "/CrossLength", 0 );
76+
mShowGridAnnotation = QgsProject::instance()->readBoolEntry( mNameConfig, "/ShowAnnotation", false );
77+
mGridAnnotationPosition = ( GridAnnotationPosition ) QgsProject::instance()->readNumEntry( mNameConfig, "/AnnotationPosition", 0 );
78+
mGridAnnotationDirection = ( GridAnnotationDirection ) QgsProject::instance()->readNumEntry( mNameConfig, "/AnnotationDirection", 0 );
79+
mGridAnnotationFont.fromString( QgsProject::instance()->readEntry( mNameConfig, "/AnnotationFont", "" ) );
80+
mAnnotationFrameDistance = QgsProject::instance()->readDoubleEntry( mNameConfig, "/AnnotationFrameDistance", 0 );
81+
mGridAnnotationPrecision = QgsProject::instance()->readNumEntry( mNameConfig, "/AnnotationPrecision", 3 );
8582
}
8683

8784
void QgsDecorationGrid::saveToProject()
8885
{
89-
QgsProject::instance()->writeEntry( "Grid", "/Enabled", mGridEnabled );
90-
QgsProject::instance()->writeEntry( "Grid", "/IntervalX", mGridIntervalX );
91-
QgsProject::instance()->writeEntry( "Grid", "/IntervalY", mGridIntervalY );
92-
QgsProject::instance()->writeEntry( "Grid", "/OffsetX", mGridOffsetX );
93-
QgsProject::instance()->writeEntry( "Grid", "/OffsetX", mGridOffsetY );
94-
QgsProject::instance()->writeEntry( "Grid", "/CrossLength", mCrossLength );
95-
// missing mGridPen, mGridAnnotationFont
96-
QgsProject::instance()->writeEntry( "Grid", "/AnnotationPrecision", mGridAnnotationPrecision );
97-
QgsProject::instance()->writeEntry( "Grid", "/ShowAnnotation", mShowGridAnnotation );
98-
// QgsProject::instance()->writeEntry( "Grid", "/AnnotationPosition", mGridAnnotationPosition );
99-
QgsProject::instance()->writeEntry( "Grid", "/AnnotationFrameDistance", mAnnotationFrameDistance );
100-
QgsProject::instance()->writeEntry( "Grid", "/AnnotationDirection", mGridAnnotationDirection );
86+
QgsDecorationItem::saveToProject();
87+
QgsProject::instance()->writeEntry( mNameConfig, "/Style", ( int ) mGridStyle );
88+
QgsProject::instance()->writeEntry( mNameConfig, "/IntervalX", mGridIntervalX );
89+
QgsProject::instance()->writeEntry( mNameConfig, "/IntervalY", mGridIntervalY );
90+
QgsProject::instance()->writeEntry( mNameConfig, "/OffsetX", mGridOffsetX );
91+
QgsProject::instance()->writeEntry( mNameConfig, "/OffsetX", mGridOffsetY );
92+
QgsProject::instance()->writeEntry( mNameConfig, "/CrossLength", mCrossLength );
93+
// missing mGridPen, but should use styles anyway
94+
QgsProject::instance()->writeEntry( mNameConfig, "/ShowAnnotation", mShowGridAnnotation );
95+
QgsProject::instance()->writeEntry( mNameConfig, "/AnnotationPosition", ( int ) mGridAnnotationPosition );
96+
QgsProject::instance()->writeEntry( mNameConfig, "/AnnotationDirection", ( int ) mGridAnnotationDirection );
97+
QgsProject::instance()->writeEntry( mNameConfig, "/AnnotationFont", mGridAnnotationFont.toString() );
98+
QgsProject::instance()->writeEntry( mNameConfig, "/AnnotationFrameDistance", mAnnotationFrameDistance );
99+
QgsProject::instance()->writeEntry( mNameConfig, "/AnnotationPrecision", mGridAnnotationPrecision );
101100
}
102101

103102

@@ -107,16 +106,13 @@ void QgsDecorationGrid::run()
107106

108107
if ( dlg.exec() )
109108
{
110-
saveToProject();
111-
QgisApp::instance()->mapCanvas()->refresh();
109+
update();
112110
}
113111
}
114112

115-
116-
117-
void QgsDecorationGrid::renderGrid( QPainter * p )
113+
void QgsDecorationGrid::render( QPainter * p )
118114
{
119-
if ( ! mGridEnabled )
115+
if ( ! mEnabled )
120116
return;
121117

122118
p->setPen( mGridPen );

‎src/app/qgsdecorationgrid.h

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@
1818
#ifndef QGSDECORATIONGRID_H
1919
#define QGSDECORATIONGRID_H
2020

21+
#include "qgsdecorationitem.h"
22+
2123
class QPainter;
2224

2325
#include <QColor>
24-
#include <QObject>
2526
#include <QPen>
2627
#include <QFont>
2728

28-
class QgsDecorationGrid: public QObject
29+
class QgsDecorationGrid: public QgsDecorationItem
2930
{
3031
Q_OBJECT
3132
public:
@@ -54,11 +55,6 @@ class QgsDecorationGrid: public QObject
5455
BoundaryDirection
5556
};
5657

57-
/**Enables a coordinate grid that is shown on top of this composermap.
58-
@note this function was added in version 1.4*/
59-
void setGridEnabled( bool enabled ) {mGridEnabled = enabled;}
60-
bool gridEnabled() const { return mGridEnabled; }
61-
6258
/**Sets coordinate grid style to solid or cross
6359
@note this function was added in version 1.4*/
6460
void setGridStyle( GridStyle style ) {mGridStyle = style;}
@@ -130,16 +126,14 @@ class QgsDecorationGrid: public QObject
130126
void setCrossLength( double l ) {mCrossLength = l;}
131127
double crossLength() {return mCrossLength;}
132128

133-
void update();
134-
135129
public slots:
136130
//! set values on the gui when a project is read or the gui first loaded
137131
void projectRead();
138132
//! save values to the project
139133
void saveToProject();
140134

141135
//! this does the meaty bit of the work
142-
void renderGrid( QPainter * );
136+
void render( QPainter * );
143137
//! Show the dialog box
144138
void run();
145139

@@ -154,8 +148,6 @@ class QgsDecorationGrid: public QObject
154148
Top
155149
};
156150

157-
/**True if coordinate grid has to be displayed*/
158-
bool mGridEnabled;
159151
/**Solid or crosses*/
160152
GridStyle mGridStyle;
161153
/**Grid line interval in x-direction (map units)*/

‎src/app/qgsdecorationnortharrow.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,14 @@ const double QgsDecorationNorthArrow::TOL = 1e-8;
5959
* @param _qI Pointer to the QGIS interface object
6060
*/
6161
QgsDecorationNorthArrow::QgsDecorationNorthArrow( QObject* parent )
62-
: QObject( parent )
62+
: QgsDecorationItem( parent )
6363
{
6464
mRotationInt = 0;
6565
mAutomatic = true;
6666
mPlacementLabels << tr( "Bottom Left" ) << tr( "Top Left" )
6767
<< tr( "Top Right" ) << tr( "Bottom Right" );
6868

69+
setName( "North Arrow" );
6970
projectRead();
7071
}
7172

@@ -75,20 +76,18 @@ QgsDecorationNorthArrow::~QgsDecorationNorthArrow()
7576

7677
void QgsDecorationNorthArrow::projectRead()
7778
{
78-
//default text to start with - try to fetch it from qgsproject
79-
80-
mRotationInt = QgsProject::instance()->readNumEntry( "NorthArrow", "/Rotation", 0 );
81-
mPlacementIndex = QgsProject::instance()->readNumEntry( "NorthArrow", "/Placement", 0 );
82-
mEnable = QgsProject::instance()->readBoolEntry( "NorthArrow", "/Enabled", false );
83-
mAutomatic = QgsProject::instance()->readBoolEntry( "NorthArrow", "/Automatic", true );
79+
QgsDecorationItem::projectRead();
80+
mRotationInt = QgsProject::instance()->readNumEntry( mNameConfig, "/Rotation", 0 );
81+
mPlacementIndex = QgsProject::instance()->readNumEntry( mNameConfig, "/Placement", 0 );
82+
mAutomatic = QgsProject::instance()->readBoolEntry( mNameConfig, "/Automatic", true );
8483
}
8584

8685
void QgsDecorationNorthArrow::saveToProject()
8786
{
88-
QgsProject::instance()->writeEntry( "NorthArrow", "/Rotation", mRotationInt );
89-
QgsProject::instance()->writeEntry( "NorthArrow", "/Placement", mPlacementIndex );
90-
QgsProject::instance()->writeEntry( "NorthArrow", "/Enabled", mEnable );
91-
QgsProject::instance()->writeEntry( "NorthArrow", "/Automatic", mAutomatic );
87+
QgsDecorationItem::saveToProject();
88+
QgsProject::instance()->writeEntry( mNameConfig, "/Rotation", mRotationInt );
89+
QgsProject::instance()->writeEntry( mNameConfig, "/Placement", mPlacementIndex );
90+
QgsProject::instance()->writeEntry( mNameConfig, "/Automatic", mAutomatic );
9291
}
9392

9493
// Slot called when the buffer menu item is activated
@@ -98,16 +97,15 @@ void QgsDecorationNorthArrow::run()
9897

9998
if ( dlg.exec() )
10099
{
101-
saveToProject();
102-
QgisApp::instance()->mapCanvas()->refresh();
100+
update();
103101
}
104102
}
105103

106-
void QgsDecorationNorthArrow::renderNorthArrow( QPainter * theQPainter )
104+
void QgsDecorationNorthArrow::render( QPainter * theQPainter )
107105
{
108106

109107
//Large IF statement controlled by enable check box
110-
if ( mEnable )
108+
if ( enabled() )
111109
{
112110
if ( theQPainter->isActive() )
113111
{

‎src/app/qgsdecorationnortharrow.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
#ifndef QGSNORTHARROWPLUGIN
2020
#define QGSNORTHARROWPLUGIN
2121

22-
#include <QObject>
22+
#include "qgsdecorationitem.h"
23+
2324
#include <QStringList>
2425

2526
class QAction;
2627
class QToolBar;
2728
class QPainter;
2829

29-
class QgsDecorationNorthArrow: public QObject
30+
class QgsDecorationNorthArrow: public QgsDecorationItem
3031
{
3132
Q_OBJECT
3233

@@ -45,7 +46,7 @@ class QgsDecorationNorthArrow: public QObject
4546
//! Show the dialog box
4647
void run();
4748
//! draw some arbitary text to the screen
48-
void renderNorthArrow( QPainter * );
49+
void render( QPainter * );
4950

5051
//! try to calculate the direction for the north arrow. Sets the
5152
//! private class rotation variable. If unable to calculate the
@@ -62,8 +63,6 @@ class QgsDecorationNorthArrow: public QObject
6263
// The amount of rotation for the north arrow
6364
int mRotationInt;
6465
int pluginType;
65-
// enable or disable north arrow
66-
bool mEnable;
6766
//! enable or disable the automatic setting of the arrow direction
6867
bool mAutomatic;
6968
// The placement index and translated text

‎src/app/qgsdecorationnortharrowdialog.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ QgsDecorationNorthArrowDialog::QgsDecorationNorthArrowDialog( QgsDecorationNorth
4141
cboPlacement->setCurrentIndex( mDeco.mPlacementIndex );
4242

4343
// enabled
44-
cboxShow->setChecked( mDeco.mEnable );
44+
cboxShow->setChecked( mDeco.enabled() );
4545

4646
// automatic
4747
cboxAutomatic->setChecked( mDeco.mAutomatic );
@@ -62,7 +62,7 @@ void QgsDecorationNorthArrowDialog::on_buttonBox_accepted()
6262
{
6363
mDeco.mRotationInt = sliderRotation->value();
6464
mDeco.mPlacementIndex = cboPlacement->currentIndex();
65-
mDeco.mEnable = cboxShow->isChecked();
65+
mDeco.setEnabled( cboxShow->isChecked() );
6666
mDeco.mAutomatic = cboxAutomatic->isChecked();
6767

6868
accept();

‎src/app/qgsdecorationscalebar.cpp

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,15 @@ email : sbr00pwb@users.sourceforge.net
5454

5555

5656
QgsDecorationScaleBar::QgsDecorationScaleBar( QObject* parent )
57-
: QObject( parent )
57+
: QgsDecorationItem( parent )
5858
{
5959
mPlacementLabels << tr( "Bottom Left" ) << tr( "Top Left" )
6060
<< tr( "Top Right" ) << tr( "Bottom Right" );
6161
mPlacementIndex = 1;
6262
mStyleLabels << tr( "Tick Down" ) << tr( "Tick Up" )
6363
<< tr( "Bar" ) << tr( "Box" );
6464

65+
setName( "Scale Bar" );
6566
projectRead();
6667
}
6768

@@ -72,27 +73,29 @@ QgsDecorationScaleBar::~QgsDecorationScaleBar()
7273

7374
void QgsDecorationScaleBar::projectRead()
7475
{
75-
mPreferredSize = QgsProject::instance()->readNumEntry( "ScaleBar", "/PreferredSize", 30 );
76-
mStyleIndex = QgsProject::instance()->readNumEntry( "ScaleBar", "/Style", 0 );
77-
mPlacementIndex = QgsProject::instance()->readNumEntry( "ScaleBar", "/Placement", 2 );
78-
mEnabled = QgsProject::instance()->readBoolEntry( "ScaleBar", "/Enabled", false );
79-
mSnapping = QgsProject::instance()->readBoolEntry( "ScaleBar", "/Snapping", true );
80-
int myRedInt = QgsProject::instance()->readNumEntry( "ScaleBar", "/ColorRedPart", 0 );
81-
int myGreenInt = QgsProject::instance()->readNumEntry( "ScaleBar", "/ColorGreenPart", 0 );
82-
int myBlueInt = QgsProject::instance()->readNumEntry( "ScaleBar", "/ColorBluePart", 0 );
76+
QgsDecorationItem::projectRead();
77+
mPreferredSize = QgsProject::instance()->readNumEntry( mNameConfig, "/PreferredSize", 30 );
78+
mStyleIndex = QgsProject::instance()->readNumEntry( mNameConfig, "/Style", 0 );
79+
mPlacementIndex = QgsProject::instance()->readNumEntry( mNameConfig, "/Placement", 2 );
80+
// mEnabled = QgsProject::instance()->readBoolEntry( mNameConfig, "/Enabled", false );
81+
mSnapping = QgsProject::instance()->readBoolEntry( mNameConfig, "/Snapping", true );
82+
int myRedInt = QgsProject::instance()->readNumEntry( mNameConfig, "/ColorRedPart", 0 );
83+
int myGreenInt = QgsProject::instance()->readNumEntry( mNameConfig, "/ColorGreenPart", 0 );
84+
int myBlueInt = QgsProject::instance()->readNumEntry( mNameConfig, "/ColorBluePart", 0 );
8385
mColor = QColor( myRedInt, myGreenInt, myBlueInt );
8486
}
8587

8688
void QgsDecorationScaleBar::saveToProject()
8789
{
88-
QgsProject::instance()->writeEntry( "ScaleBar", "/Placement", mPlacementIndex );
89-
QgsProject::instance()->writeEntry( "ScaleBar", "/PreferredSize", mPreferredSize );
90-
QgsProject::instance()->writeEntry( "ScaleBar", "/Snapping", mSnapping );
91-
QgsProject::instance()->writeEntry( "ScaleBar", "/Enabled", mEnabled );
92-
QgsProject::instance()->writeEntry( "ScaleBar", "/Style", mStyleIndex );
93-
QgsProject::instance()->writeEntry( "ScaleBar", "/ColorRedPart", mColor.red() );
94-
QgsProject::instance()->writeEntry( "ScaleBar", "/ColorGreenPart", mColor.green() );
95-
QgsProject::instance()->writeEntry( "ScaleBar", "/ColorBluePart", mColor.blue() );
90+
QgsDecorationItem::saveToProject();
91+
QgsProject::instance()->writeEntry( mNameConfig, "/Placement", mPlacementIndex );
92+
QgsProject::instance()->writeEntry( mNameConfig, "/PreferredSize", mPreferredSize );
93+
QgsProject::instance()->writeEntry( mNameConfig, "/Snapping", mSnapping );
94+
// QgsProject::instance()->writeEntry( mNameConfig, "/Enabled", mEnabled );
95+
QgsProject::instance()->writeEntry( mNameConfig, "/Style", mStyleIndex );
96+
QgsProject::instance()->writeEntry( mNameConfig, "/ColorRedPart", mColor.red() );
97+
QgsProject::instance()->writeEntry( mNameConfig, "/ColorGreenPart", mColor.green() );
98+
QgsProject::instance()->writeEntry( mNameConfig, "/ColorBluePart", mColor.blue() );
9699
}
97100

98101

@@ -102,13 +105,12 @@ void QgsDecorationScaleBar::run()
102105

103106
if ( dlg.exec() )
104107
{
105-
saveToProject();
106-
QgisApp::instance()->mapCanvas()->refresh();
108+
update();
107109
}
108110
}
109111

110112

111-
void QgsDecorationScaleBar::renderScaleBar( QPainter * theQPainter )
113+
void QgsDecorationScaleBar::render( QPainter * theQPainter )
112114
{
113115
QgsMapCanvas* canvas = QgisApp::instance()->mapCanvas();
114116

@@ -129,7 +131,7 @@ void QgsDecorationScaleBar::renderScaleBar( QPainter * theQPainter )
129131
return;
130132

131133
//Large if statement which determines whether to render the scale bar
132-
if ( mEnabled )
134+
if ( enabled() )
133135
{
134136
// Hard coded sizes
135137
int myMajorTickSize = 8;

‎src/app/qgsdecorationscalebar.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ email : sbr00pwb@users.sourceforge.net
2121
#ifndef QGSCALEBARPLUGIN
2222
#define QGSCALEBARPLUGIN
2323

24+
#include "qgsdecorationitem.h"
25+
2426
class QPainter;
2527

2628
#include <QColor>
27-
#include <QObject>
2829

29-
class QgsDecorationScaleBar: public QObject
30+
class QgsDecorationScaleBar: public QgsDecorationItem
3031
{
3132
Q_OBJECT
3233
public:
@@ -42,7 +43,7 @@ class QgsDecorationScaleBar: public QObject
4243
void saveToProject();
4344

4445
//! this does the meaty bit of the work
45-
void renderScaleBar( QPainter * );
46+
void render( QPainter * );
4647
//! Show the dialog box
4748
void run();
4849

@@ -55,8 +56,6 @@ class QgsDecorationScaleBar: public QObject
5556
int mPreferredSize;
5657
//! Should we snap to integer times power of 10?
5758
bool mSnapping;
58-
//! Scale bar enabled?
59-
bool mEnabled;
6059
//! Style of scale bar. An index and the translated text
6160
int mStyleIndex;
6261
QStringList mStyleLabels;

‎src/app/qgsdecorationscalebardialog.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ QgsDecorationScaleBarDialog::QgsDecorationScaleBarDialog( QgsDecorationScaleBar&
5151
cboPlacement->addItems( mDeco.mPlacementLabels );
5252
cboPlacement->setCurrentIndex( mDeco.mPlacementIndex );
5353

54-
chkEnable->setChecked( mDeco.mEnabled );
54+
chkEnable->setChecked( mDeco.enabled() );
5555

5656
cboStyle->clear();
5757
cboStyle->addItems( mDeco.mStyleLabels );
@@ -77,7 +77,7 @@ void QgsDecorationScaleBarDialog::on_buttonBox_accepted()
7777
mDeco.mPlacementIndex = cboPlacement->currentIndex();
7878
mDeco.mPreferredSize = spnSize->value();
7979
mDeco.mSnapping = chkSnapping->isChecked();
80-
mDeco.mEnabled = chkEnable->isChecked();
80+
mDeco.setEnabled( chkEnable->isChecked() );
8181
mDeco.mStyleIndex = cboStyle->currentIndex();
8282
mDeco.mColor = pbnChangeColor->color();
8383

‎src/ui/qgisapp.ui

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@
103103
<property name="title">
104104
<string>&amp;Decorations</string>
105105
</property>
106-
<addaction name="mActionDecorationCopyright"/>
107-
<addaction name="mActionDecorationNorthArrow"/>
108-
<addaction name="mActionDecorationScaleBar"/>
109106
<addaction name="mActionDecorationGrid"/>
107+
<addaction name="mActionDecorationScaleBar"/>
108+
<addaction name="mActionDecorationNorthArrow"/>
109+
<addaction name="mActionDecorationCopyright"/>
110110
</widget>
111111
<addaction name="mActionPan"/>
112112
<addaction name="mActionPanToSelected"/>

0 commit comments

Comments
 (0)
Please sign in to comment.