1 /***************************************************************************
2     testrenderergui.cpp
3     ---------------------
4     begin                : January 2012
5     copyright            : (C) 2012 by Martin Dobias
6     email                : wonder.sk at gmail.com
7  ***************************************************************************
8  *                                                                         *
9  *   This program is free software; you can redistribute it and/or modify  *
10  *   it under the terms of the GNU General Public License as published by  *
11  *   the Free Software Foundation; either version 2 of the License, or     *
12  *   (at your option) any later version.                                   *
13  *                                                                         *
14  ***************************************************************************/
15 #include "testrenderergui.h"
16 
17 #include <qgsapplication.h>
18 #include <qgsmapcanvas.h>
19 #include <qgsvectorlayer.h>
20 #include <qgsproject.h>
21 #include <qgsrendererpropertiesdialog.h>
22 #include <qgsstyle.h>
23 
24 #include <QApplication>
25 #include <QToolBar>
26 
TestRendererGUI(QWidget * parent)27 TestRendererGUI::TestRendererGUI( QWidget *parent )
28   : QMainWindow( parent )
29 {
30   resize( 640, 480 );
31 
32   QToolBar *toolBar = addToolBar( "Actions" );
33   toolBar->addAction( "set renderer", this, SLOT( setRenderer() ) );
34 
35   mMapCanvas = new QgsMapCanvas( this );
36   mMapCanvas->setCanvasColor( Qt::white );
37   setCentralWidget( mMapCanvas );
38 
39   connect( QgsProject::instance(), SIGNAL( readProject( QDomDocument ) ), mMapCanvas, SLOT( readProject( QDomDocument ) ) );
40 }
41 
loadLayers()42 void TestRendererGUI::loadLayers()
43 {
44   // load just first vector layer
45   QList<QgsMapLayer *> canvasLayers;
46   foreach ( QgsMapLayer *layer, QgsProject::instance()->mapLayers().values() )
47   {
48     if ( layer->type() == QgsMapLayerType::VectorLayer )
49       canvasLayers << layer;
50   }
51 
52   mMapCanvas->setLayers( canvasLayers );
53 }
54 
setRenderer()55 void TestRendererGUI::setRenderer()
56 {
57   QgsMapLayer *layer = mMapCanvas->layer( 0 );
58   QVERIFY( layer );
59   QVERIFY( layer->type() == QgsMapLayerType::VectorLayer );
60   QgsVectorLayer *vlayer = static_cast<QgsVectorLayer *>( layer );
61 
62   QgsRendererPropertiesDialog dlg( vlayer, QgsStyle::defaultStyle() );
63   dlg.exec();
64 
65   mMapCanvas->refresh();
66 }
67 
main(int argc,char * argv[])68 int main( int argc, char *argv[] )
69 {
70   QApplication app( argc, argv );
71 
72   if ( argc < 2 )
73   {
74     qDebug( "Provide a project file name with at least one vector layer!" );
75     return 1;
76   }
77 
78   QgsApplication::init();
79   QgsApplication::initQgis();
80 
81   TestRendererGUI gui;
82 
83   QString projectFileName( argv[1] );
84   QgsProject::instance()->setFileName( projectFileName );
85   bool res = QgsProject::instance()->read();
86   if ( !res )
87   {
88     qDebug( "Failed to open project!" );
89     return 1;
90   }
91 
92   // the layers are in the registry - now load them!
93   gui.loadLayers();
94 
95   gui.show();
96   return app.exec();
97 }
98