Skip to content

Commit 10ad3fb

Browse files
committed
Merge pull request #181 from etiennesky/decorationgrid
[FEATURE] Added Decoration grid
2 parents 91862c3 + 94a1210 commit 10ad3fb

22 files changed

+2108
-101
lines changed

src/app/CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,15 @@ 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
2526
qgsdecorationnortharrowdialog.cpp
2627
qgsdecorationscalebar.cpp
2728
qgsdecorationscalebardialog.cpp
29+
qgsdecorationgrid.cpp
30+
qgsdecorationgriddialog.cpp
2831
qgsembedlayerdialog.cpp
2932
qgsformannotationdialog.cpp
3033
qgsdelattrdialog.cpp
@@ -167,12 +170,15 @@ SET (QGIS_APP_MOC_HDRS
167170
qgscontinuouscolordialog.h
168171
qgscustomization.h
169172
qgscustomprojectiondialog.h
173+
qgsdecorationitem.h
170174
qgsdecorationcopyright.h
171175
qgsdecorationcopyrightdialog.h
172176
qgsdecorationnortharrow.h
173177
qgsdecorationnortharrowdialog.h
174178
qgsdecorationscalebar.h
175179
qgsdecorationscalebardialog.h
180+
qgsdecorationgrid.h
181+
qgsdecorationgriddialog.h
176182
qgsdelattrdialog.h
177183
qgsdisplayangle.h
178184
qgsembedlayerdialog.h

src/app/qgisapp.cpp

+35-9
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@
117117
#include "qgsdecorationcopyright.h"
118118
#include "qgsdecorationnortharrow.h"
119119
#include "qgsdecorationscalebar.h"
120+
#include "qgsdecorationgrid.h"
120121
#include "qgsembedlayerdialog.h"
121122
#include "qgsencodingfiledialog.h"
122123
#include "qgsexception.h"
@@ -1609,6 +1610,7 @@ void QgisApp::setTheme( QString theThemeName )
16091610
mActionDecorationCopyright->setIcon( getThemeIcon( "/plugins/copyright_label.png" ) );
16101611
mActionDecorationNorthArrow->setIcon( getThemeIcon( "/plugins/north_arrow.png" ) );
16111612
mActionDecorationScaleBar->setIcon( getThemeIcon( "/plugins/scale_bar.png" ) );
1613+
mActionDecorationGrid->setIcon( getThemeIcon( "/transformed.png" ) );
16121614

16131615
//change themes of all composers
16141616
QSet<QgsComposer*>::iterator composerIt = mPrintComposers.begin();
@@ -2002,20 +2004,42 @@ void QgisApp::createMapTips()
20022004

20032005
void QgisApp::createDecorations()
20042006
{
2005-
mDecorationCopyright = new QgsDecorationCopyright( this );
2007+
QgsDecorationCopyright* mDecorationCopyright = new QgsDecorationCopyright( this );
20062008
connect( mActionDecorationCopyright, SIGNAL( triggered() ), mDecorationCopyright, SLOT( run() ) );
2007-
connect( mMapCanvas, SIGNAL( renderComplete( QPainter * ) ), mDecorationCopyright, SLOT( renderLabel( QPainter * ) ) );
2008-
connect( this, SIGNAL( projectRead() ), mDecorationCopyright, SLOT( projectRead() ) );
20092009

2010-
mDecorationNorthArrow = new QgsDecorationNorthArrow( this );
2010+
QgsDecorationNorthArrow* mDecorationNorthArrow = new QgsDecorationNorthArrow( this );
20112011
connect( mActionDecorationNorthArrow, SIGNAL( triggered() ), mDecorationNorthArrow, SLOT( run() ) );
2012-
connect( mMapCanvas, SIGNAL( renderComplete( QPainter * ) ), mDecorationNorthArrow, SLOT( renderNorthArrow( QPainter * ) ) );
2013-
connect( this, SIGNAL( projectRead() ), mDecorationNorthArrow, SLOT( projectRead() ) );
20142012

2015-
mDecorationScaleBar = new QgsDecorationScaleBar( this );
2013+
QgsDecorationScaleBar* mDecorationScaleBar = new QgsDecorationScaleBar( this );
20162014
connect( mActionDecorationScaleBar, SIGNAL( triggered() ), mDecorationScaleBar, SLOT( run() ) );
2017-
connect( mMapCanvas, SIGNAL( renderComplete( QPainter * ) ), mDecorationScaleBar, SLOT( renderScaleBar( QPainter * ) ) );
2018-
connect( this, SIGNAL( projectRead() ), mDecorationScaleBar, SLOT( projectRead() ) );
2015+
2016+
QgsDecorationGrid* mDecorationGrid = new QgsDecorationGrid( this );
2017+
connect( mActionDecorationGrid, SIGNAL( triggered() ), mDecorationGrid, SLOT( run() ) );
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( newProject() ), this, SLOT( projectReadDecorationItems() ) );
2026+
connect( this, SIGNAL( projectRead() ), this, SLOT( projectReadDecorationItems() ) );
2027+
}
2028+
2029+
void QgisApp::renderDecorationItems( QPainter *p )
2030+
{
2031+
foreach( QgsDecorationItem* item, mDecorationItems )
2032+
{
2033+
item->render( p );
2034+
}
2035+
}
2036+
2037+
void QgisApp::projectReadDecorationItems()
2038+
{
2039+
foreach( QgsDecorationItem* item, mDecorationItems )
2040+
{
2041+
item->projectRead( );
2042+
}
20192043
}
20202044

20212045
// Update file menu with the current list of recently accessed projects
@@ -5003,11 +5027,13 @@ void QgisApp::setProjectCRSFromLayer()
50035027

50045028
QgsCoordinateReferenceSystem crs = mMapLegend->currentLayer()->crs();
50055029
QgsMapRenderer* myRenderer = mMapCanvas->mapRenderer();
5030+
mMapCanvas->freeze();
50065031
myRenderer->setDestinationCrs( crs );
50075032
if ( crs.mapUnits() != QGis::UnknownUnit )
50085033
{
50095034
myRenderer->setMapUnits( crs.mapUnits() );
50105035
}
5036+
mMapCanvas->freeze( false );
50115037
mMapCanvas->refresh();
50125038
}
50135039

src/app/qgisapp.h

+13-6
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,14 @@ class QgsBrowserDockWidget;
6969
class QgsSnappingDialog;
7070
class QgsGPSInformationWidget;
7171

72-
class QgsDecorationCopyright;
73-
class QgsDecorationNorthArrow;
74-
class QgsDecorationScaleBar;
72+
class QgsDecorationItem;
7573

7674
class QgsMessageLogViewer;
7775

7876
class QgsScaleComboBox;
7977

8078
class QgsDataItem;
79+
class QgsTileScaleWidget;
8180

8281
#include <QMainWindow>
8382
#include <QToolBar>
@@ -381,6 +380,9 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
381380

382381
void emitCustomSrsValidation( QgsCoordinateReferenceSystem *crs );
383382

383+
QList<QgsDecorationItem*> decorationItems() { return mDecorationItems; }
384+
void addDecorationItem( QgsDecorationItem* item ) { mDecorationItems.append( item ); }
385+
384386
public slots:
385387
//! Zoom to full extent
386388
void zoomFull();
@@ -869,6 +871,9 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
869871
//! Activates label property tool
870872
void changeLabelProperties();
871873

874+
void renderDecorationItems( QPainter *p );
875+
void projectReadDecorationItems( );
876+
872877
signals:
873878
/** emitted when a key is pressed and we want non widget sublasses to be able
874879
to pick up on this (e.g. maplayer) */
@@ -1185,9 +1190,10 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
11851190

11861191
QgsSnappingDialog* mSnappingDialog;
11871192

1188-
QgsDecorationCopyright* mDecorationCopyright;
1189-
QgsDecorationNorthArrow* mDecorationNorthArrow;
1190-
QgsDecorationScaleBar* mDecorationScaleBar;
1193+
//! Persistent tile scale slider
1194+
QgsTileScaleWidget * mpTileScaleWidget;
1195+
1196+
QList<QgsDecorationItem*> mDecorationItems;
11911197

11921198
int mLastComposerId;
11931199

@@ -1213,6 +1219,7 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
12131219
bool gestureEvent( QGestureEvent *event );
12141220
void tapAndHoldTriggered( QTapAndHoldGesture *gesture );
12151221
#endif
1222+
12161223
};
12171224

12181225
#ifdef ANDROID

src/app/qgsdecorationcopyright.cpp

+22-24
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

+4-4
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

+2-2
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
}

0 commit comments

Comments
 (0)