Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsscalebarrendererregistry.cpp 3 : : ----------------------- 4 : : begin : March 2020 5 : : copyright : (C) 2020 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : 8 : : *************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : 17 : : #include "qgsscalebarrendererregistry.h" 18 : : #include "qgsscalebarrenderer.h" 19 : : #include "qgsdoubleboxscalebarrenderer.h" 20 : : #include "qgsnumericscalebarrenderer.h" 21 : : #include "qgssingleboxscalebarrenderer.h" 22 : : #include "qgsticksscalebarrenderer.h" 23 : : #include "qgssteppedlinescalebarrenderer.h" 24 : : #include "qgshollowscalebarrenderer.h" 25 : : 26 : 5 : QgsScaleBarRendererRegistry::QgsScaleBarRendererRegistry() 27 : : { 28 : 5 : addRenderer( new QgsDoubleBoxScaleBarRenderer() ); 29 : 5 : addRenderer( new QgsNumericScaleBarRenderer() ); 30 : 5 : addRenderer( new QgsSingleBoxScaleBarRenderer() ); 31 : 5 : addRenderer( new QgsTicksScaleBarRenderer( QgsTicksScaleBarRenderer::TicksUp ) ); 32 : 5 : addRenderer( new QgsTicksScaleBarRenderer( QgsTicksScaleBarRenderer::TicksDown ) ); 33 : 5 : addRenderer( new QgsTicksScaleBarRenderer( QgsTicksScaleBarRenderer::TicksMiddle ) ); 34 : 5 : addRenderer( new QgsSteppedLineScaleBarRenderer() ); 35 : 5 : addRenderer( new QgsHollowScaleBarRenderer() ); 36 : 5 : } 37 : : 38 : 5 : QgsScaleBarRendererRegistry::~QgsScaleBarRendererRegistry() 39 : : { 40 : 5 : qDeleteAll( mRenderers ); 41 : 5 : } 42 : : 43 : 0 : QStringList QgsScaleBarRendererRegistry::renderers() const 44 : : { 45 : 0 : return mRenderers.keys(); 46 : : } 47 : : 48 : 0 : QStringList QgsScaleBarRendererRegistry::sortedRendererList() const 49 : : { 50 : 0 : QStringList ids = mRenderers.keys(); 51 : : 52 : 0 : std::sort( ids.begin(), ids.end(), [ = ]( const QString & a, const QString & b )->bool 53 : : { 54 : 0 : if ( sortKey( a ) < sortKey( b ) ) 55 : 0 : return true; 56 : 0 : else if ( sortKey( a ) > sortKey( b ) ) 57 : 0 : return false; 58 : : else 59 : : { 60 : 0 : int res = QString::localeAwareCompare( visibleName( a ), visibleName( b ) ); 61 : 0 : if ( res < 0 ) 62 : 0 : return true; 63 : 0 : else if ( res > 0 ) 64 : 0 : return false; 65 : : } 66 : 0 : return false; 67 : 0 : } ); 68 : 0 : return ids; 69 : 0 : } 70 : : 71 : 40 : void QgsScaleBarRendererRegistry::addRenderer( QgsScaleBarRenderer *renderer ) 72 : : { 73 : 40 : if ( !renderer ) 74 : 0 : return; 75 : : 76 : 40 : mRenderers.insert( renderer->id(), renderer ); 77 : 40 : } 78 : : 79 : 0 : void QgsScaleBarRendererRegistry::removeRenderer( const QString &id ) 80 : : { 81 : 0 : if ( QgsScaleBarRenderer *renderer = mRenderers.take( id ) ) 82 : : { 83 : 0 : delete renderer; 84 : 0 : } 85 : 0 : } 86 : : 87 : 0 : QgsScaleBarRenderer *QgsScaleBarRendererRegistry::renderer( const QString &id ) const 88 : : { 89 : 0 : if ( mRenderers.contains( id ) ) 90 : 0 : return mRenderers.value( id )->clone(); 91 : : 92 : 0 : return nullptr; 93 : 0 : } 94 : : 95 : 0 : QString QgsScaleBarRendererRegistry::visibleName( const QString &id ) const 96 : : { 97 : 0 : if ( mRenderers.contains( id ) ) 98 : 0 : return mRenderers.value( id )->visibleName(); 99 : : 100 : 0 : return QString(); 101 : 0 : } 102 : : 103 : 0 : int QgsScaleBarRendererRegistry::sortKey( const QString &id ) const 104 : : { 105 : 0 : if ( mRenderers.contains( id ) ) 106 : 0 : return mRenderers.value( id )->sortKey(); 107 : : 108 : 0 : return 0; 109 : 0 : }