Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsscalebarsettings.cpp 3 : : ----------------------- 4 : : begin : January 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 "qgsscalebarsettings.h" 18 : : #include "qgsapplication.h" 19 : : #include "qgsnumericformat.h" 20 : : #include "qgsbasicnumericformat.h" 21 : : #include "qgslinesymbollayer.h" 22 : : #include "qgssymbol.h" 23 : : #include "qgsfillsymbollayer.h" 24 : : 25 : 0 : QgsScaleBarSettings::QgsScaleBarSettings() 26 : : { 27 : 0 : mTextFormat.setSize( 12.0 ); 28 : 0 : mTextFormat.setSizeUnit( QgsUnitTypes::RenderPoints ); 29 : 0 : mTextFormat.setColor( QColor( 0, 0, 0 ) ); 30 : : 31 : 0 : mNumericFormat = std::make_unique< QgsBasicNumericFormat >(); 32 : : 33 : 0 : mLineSymbol = std::make_unique< QgsLineSymbol >(); 34 : 0 : mLineSymbol->setColor( QColor( 0, 0, 0 ) ); 35 : 0 : mLineSymbol->setWidth( 0.3 ); 36 : 0 : if ( QgsSimpleLineSymbolLayer *line = dynamic_cast< QgsSimpleLineSymbolLayer * >( mLineSymbol->symbolLayer( 0 ) ) ) 37 : : { 38 : 0 : line->setPenJoinStyle( Qt::MiterJoin ); 39 : 0 : line->setPenCapStyle( Qt::SquareCap ); 40 : 0 : } 41 : 0 : mLineSymbol->setOutputUnit( QgsUnitTypes::RenderMillimeters ); 42 : 0 : mDivisionLineSymbol.reset( mLineSymbol->clone() ); 43 : 0 : mSubdivisionLineSymbol.reset( mLineSymbol->clone() ); 44 : : 45 : 0 : mFillSymbol = std::make_unique< QgsFillSymbol >(); 46 : 0 : mFillSymbol->setColor( QColor( 0, 0, 0 ) ); 47 : 0 : if ( QgsSimpleFillSymbolLayer *fill = dynamic_cast< QgsSimpleFillSymbolLayer * >( mFillSymbol->symbolLayer( 0 ) ) ) 48 : : { 49 : 0 : fill->setStrokeStyle( Qt::NoPen ); 50 : 0 : } 51 : 0 : mAlternateFillSymbol = std::make_unique< QgsFillSymbol >(); 52 : 0 : mAlternateFillSymbol->setColor( QColor( 255, 255, 255 ) ); 53 : 0 : if ( QgsSimpleFillSymbolLayer *fill = dynamic_cast< QgsSimpleFillSymbolLayer * >( mAlternateFillSymbol->symbolLayer( 0 ) ) ) 54 : : { 55 : 0 : fill->setStrokeStyle( Qt::NoPen ); 56 : 0 : } 57 : 0 : } 58 : : 59 : 0 : QgsScaleBarSettings::QgsScaleBarSettings( const QgsScaleBarSettings &other ) 60 : 0 : : mNumSegments( other.mNumSegments ) 61 : 0 : , mNumSegmentsLeft( other.mNumSegmentsLeft ) 62 : 0 : , mNumSubdivisions( other.mNumSubdivisions ) 63 : 0 : , mSubdivisionsHeight( other.mSubdivisionsHeight ) 64 : 0 : , mNumUnitsPerSegment( other.mNumUnitsPerSegment ) 65 : 0 : , mNumMapUnitsPerScaleBarUnit( other.mNumMapUnitsPerScaleBarUnit ) 66 : 0 : , mSegmentSizeMode( other.mSegmentSizeMode ) 67 : 0 : , mMinBarWidth( other.mMinBarWidth ) 68 : 0 : , mMaxBarWidth( other.mMaxBarWidth ) 69 : 0 : , mUnitLabeling( other.mUnitLabeling ) 70 : 0 : , mTextFormat( other.mTextFormat ) 71 : 0 : , mHeight( other.mHeight ) 72 : 0 : , mLineSymbol( other.mLineSymbol->clone() ) 73 : 0 : , mDivisionLineSymbol( other.mDivisionLineSymbol->clone() ) 74 : 0 : , mSubdivisionLineSymbol( other.mSubdivisionLineSymbol->clone() ) 75 : 0 : , mFillSymbol( other.mFillSymbol->clone() ) 76 : 0 : , mAlternateFillSymbol( other.mAlternateFillSymbol->clone() ) 77 : 0 : , mLabelBarSpace( other.mLabelBarSpace ) 78 : 0 : , mLabelVerticalPlacement( other.mLabelVerticalPlacement ) 79 : 0 : , mLabelHorizontalPlacement( other.mLabelHorizontalPlacement ) 80 : 0 : , mBoxContentSpace( other.mBoxContentSpace ) 81 : 0 : , mAlignment( other.mAlignment ) 82 : 0 : , mUnits( other.mUnits ) 83 : 0 : , mNumericFormat( other.mNumericFormat->clone() ) 84 : : { 85 : : 86 : 0 : } 87 : : 88 : 0 : QgsScaleBarSettings &QgsScaleBarSettings::operator=( const QgsScaleBarSettings &other ) 89 : : { 90 : 0 : mNumSegments = other.mNumSegments; 91 : 0 : mNumSegmentsLeft = other.mNumSegmentsLeft; 92 : 0 : mNumSubdivisions = other.mNumSubdivisions; 93 : 0 : mSubdivisionsHeight = other.mSubdivisionsHeight; 94 : 0 : mNumUnitsPerSegment = other.mNumUnitsPerSegment; 95 : 0 : mNumMapUnitsPerScaleBarUnit = other.mNumMapUnitsPerScaleBarUnit; 96 : 0 : mSegmentSizeMode = other.mSegmentSizeMode; 97 : 0 : mMinBarWidth = other.mMinBarWidth; 98 : 0 : mMaxBarWidth = other.mMaxBarWidth; 99 : 0 : mUnitLabeling = other.mUnitLabeling; 100 : 0 : mTextFormat = other.mTextFormat; 101 : 0 : mLineSymbol.reset( other.mLineSymbol->clone() ); 102 : 0 : mDivisionLineSymbol.reset( other.mDivisionLineSymbol->clone() ); 103 : 0 : mSubdivisionLineSymbol.reset( other.mSubdivisionLineSymbol->clone() ); 104 : 0 : mFillSymbol.reset( other.mFillSymbol->clone() ); 105 : 0 : mAlternateFillSymbol.reset( other.mAlternateFillSymbol->clone() ); 106 : 0 : mHeight = other.mHeight; 107 : 0 : mLabelBarSpace = other.mLabelBarSpace; 108 : 0 : mLabelVerticalPlacement = other.mLabelVerticalPlacement; 109 : 0 : mLabelHorizontalPlacement = other.mLabelHorizontalPlacement; 110 : 0 : mBoxContentSpace = other.mBoxContentSpace; 111 : 0 : mAlignment = other.mAlignment; 112 : 0 : mUnits = other.mUnits; 113 : 0 : mNumericFormat.reset( other.mNumericFormat->clone() ); 114 : 0 : return *this; 115 : : } 116 : : 117 : 0 : QColor QgsScaleBarSettings::fillColor() const 118 : : { 119 : 0 : return mFillSymbol->color(); 120 : : } 121 : : 122 : 0 : void QgsScaleBarSettings::setFillColor( const QColor &color ) 123 : : { 124 : 0 : mFillSymbol->setColor( color ); 125 : 0 : } 126 : : 127 : 0 : QColor QgsScaleBarSettings::fillColor2() const 128 : : { 129 : 0 : return mAlternateFillSymbol->color(); 130 : : } 131 : : 132 : 0 : void QgsScaleBarSettings::setFillColor2( const QColor &color ) 133 : : { 134 : 0 : mAlternateFillSymbol->setColor( color ); 135 : 0 : } 136 : : 137 : 0 : QColor QgsScaleBarSettings::lineColor() const 138 : : { 139 : 0 : return mLineSymbol->color(); 140 : : } 141 : : 142 : 0 : void QgsScaleBarSettings::setLineColor( const QColor &color ) 143 : : { 144 : 0 : for ( QgsLineSymbol *symbol : { mLineSymbol.get(), mDivisionLineSymbol.get(), mSubdivisionLineSymbol.get() } ) 145 : : { 146 : 0 : symbol->setColor( color ); 147 : : } 148 : 0 : } 149 : : 150 : 0 : double QgsScaleBarSettings::lineWidth() const 151 : : { 152 : 0 : return mLineSymbol->width(); 153 : : } 154 : : 155 : 0 : void QgsScaleBarSettings::setLineWidth( double width ) 156 : : { 157 : 0 : for ( QgsLineSymbol *symbol : { mLineSymbol.get(), mDivisionLineSymbol.get(), mSubdivisionLineSymbol.get() } ) 158 : : { 159 : 0 : symbol->setWidth( width ); 160 : 0 : symbol->setOutputUnit( QgsUnitTypes::RenderMillimeters ); 161 : : } 162 : 0 : } 163 : : 164 : 0 : QPen QgsScaleBarSettings::pen() const 165 : : { 166 : 0 : QPen pen( mLineSymbol->color() ); 167 : 0 : if ( QgsSimpleLineSymbolLayer *line = dynamic_cast< QgsSimpleLineSymbolLayer * >( mLineSymbol->symbolLayer( 0 ) ) ) 168 : : { 169 : 0 : pen.setJoinStyle( line->penJoinStyle() ); 170 : 0 : pen.setCapStyle( line->penCapStyle() ); 171 : 0 : } 172 : 0 : pen.setWidthF( mLineSymbol->width() ); 173 : 0 : return pen; 174 : 0 : } 175 : : 176 : 0 : void QgsScaleBarSettings::setPen( const QPen &pen ) 177 : : { 178 : 0 : for ( QgsLineSymbol *symbol : { mLineSymbol.get(), mDivisionLineSymbol.get(), mSubdivisionLineSymbol.get() } ) 179 : : { 180 : 0 : symbol->setColor( pen.color() ); 181 : 0 : symbol->setWidth( pen.widthF() ); 182 : 0 : symbol->setOutputUnit( QgsUnitTypes::RenderMillimeters ); 183 : 0 : if ( QgsSimpleLineSymbolLayer *line = dynamic_cast< QgsSimpleLineSymbolLayer * >( symbol->symbolLayer( 0 ) ) ) 184 : : { 185 : 0 : line->setPenJoinStyle( pen.joinStyle() ); 186 : 0 : line->setPenCapStyle( pen.capStyle() ); 187 : 0 : } 188 : : } 189 : 0 : } 190 : : 191 : 0 : QgsLineSymbol *QgsScaleBarSettings::lineSymbol() const 192 : : { 193 : 0 : return mLineSymbol.get(); 194 : : } 195 : : 196 : 0 : void QgsScaleBarSettings::setLineSymbol( QgsLineSymbol *symbol ) 197 : : { 198 : 0 : mLineSymbol.reset( symbol ); 199 : 0 : } 200 : : 201 : 0 : QgsLineSymbol *QgsScaleBarSettings::divisionLineSymbol() const 202 : : { 203 : 0 : return mDivisionLineSymbol.get(); 204 : : } 205 : : 206 : 0 : void QgsScaleBarSettings::setDivisionLineSymbol( QgsLineSymbol *symbol ) 207 : : { 208 : 0 : mDivisionLineSymbol.reset( symbol ); 209 : 0 : } 210 : : 211 : 0 : QgsLineSymbol *QgsScaleBarSettings::subdivisionLineSymbol() const 212 : : { 213 : 0 : return mSubdivisionLineSymbol.get(); 214 : : } 215 : : 216 : 0 : void QgsScaleBarSettings::setSubdivisionLineSymbol( QgsLineSymbol *symbol ) 217 : : { 218 : 0 : mSubdivisionLineSymbol.reset( symbol ); 219 : 0 : } 220 : : 221 : 0 : QgsFillSymbol *QgsScaleBarSettings::fillSymbol() const 222 : : { 223 : 0 : return mFillSymbol.get(); 224 : : } 225 : : 226 : 0 : void QgsScaleBarSettings::setFillSymbol( QgsFillSymbol *symbol ) 227 : : { 228 : 0 : mFillSymbol.reset( symbol ); 229 : 0 : } 230 : : 231 : 0 : QgsFillSymbol *QgsScaleBarSettings::alternateFillSymbol() const 232 : : { 233 : 0 : return mAlternateFillSymbol.get(); 234 : : } 235 : : 236 : 0 : void QgsScaleBarSettings::setAlternateFillSymbol( QgsFillSymbol *symbol ) 237 : : { 238 : 0 : mAlternateFillSymbol.reset( symbol ); 239 : 0 : } 240 : : 241 : 0 : QBrush QgsScaleBarSettings::brush() const 242 : : { 243 : 0 : QBrush b; 244 : 0 : b.setColor( mFillSymbol->color() ); 245 : 0 : if ( QgsSimpleFillSymbolLayer *fill = dynamic_cast< QgsSimpleFillSymbolLayer * >( mFillSymbol->symbolLayer( 0 ) ) ) 246 : : { 247 : 0 : b.setStyle( fill->brushStyle() ); 248 : 0 : } 249 : : 250 : 0 : return b; 251 : 0 : } 252 : : 253 : 0 : void QgsScaleBarSettings::setBrush( const QBrush &brush ) 254 : : { 255 : 0 : mFillSymbol->setColor( brush.color() ); 256 : 0 : if ( QgsSimpleFillSymbolLayer *fill = dynamic_cast< QgsSimpleFillSymbolLayer * >( mFillSymbol->symbolLayer( 0 ) ) ) 257 : : { 258 : 0 : fill->setBrushStyle( brush.style() ); 259 : 0 : } 260 : 0 : } 261 : : 262 : 0 : QBrush QgsScaleBarSettings::brush2() const 263 : : { 264 : 0 : QBrush b; 265 : 0 : b.setColor( mAlternateFillSymbol->color() ); 266 : 0 : if ( QgsSimpleFillSymbolLayer *fill = dynamic_cast< QgsSimpleFillSymbolLayer * >( mAlternateFillSymbol->symbolLayer( 0 ) ) ) 267 : : { 268 : 0 : b.setStyle( fill->brushStyle() ); 269 : 0 : } 270 : : 271 : 0 : return b; 272 : 0 : } 273 : : 274 : 0 : void QgsScaleBarSettings::setBrush2( const QBrush &brush ) 275 : : { 276 : 0 : mAlternateFillSymbol->setColor( brush.color() ); 277 : 0 : if ( QgsSimpleFillSymbolLayer *fill = dynamic_cast< QgsSimpleFillSymbolLayer * >( mAlternateFillSymbol->symbolLayer( 0 ) ) ) 278 : : { 279 : 0 : fill->setBrushStyle( brush.style() ); 280 : 0 : } 281 : 0 : } 282 : : 283 : 0 : Qt::PenJoinStyle QgsScaleBarSettings::lineJoinStyle() const 284 : : { 285 : 0 : if ( QgsSimpleLineSymbolLayer *line = dynamic_cast< QgsSimpleLineSymbolLayer * >( mLineSymbol->symbolLayer( 0 ) ) ) 286 : : { 287 : 0 : return line->penJoinStyle(); 288 : : } 289 : 0 : return Qt::MiterJoin; 290 : 0 : } 291 : : 292 : 0 : void QgsScaleBarSettings::setLineJoinStyle( Qt::PenJoinStyle style ) 293 : : { 294 : 0 : for ( QgsLineSymbol *symbol : { mLineSymbol.get(), mDivisionLineSymbol.get(), mSubdivisionLineSymbol.get() } ) 295 : : { 296 : 0 : if ( QgsSimpleLineSymbolLayer *line = dynamic_cast< QgsSimpleLineSymbolLayer * >( symbol->symbolLayer( 0 ) ) ) 297 : : { 298 : 0 : line->setPenJoinStyle( style ); 299 : 0 : } 300 : : } 301 : 0 : } 302 : : 303 : 0 : Qt::PenCapStyle QgsScaleBarSettings::lineCapStyle() const 304 : : { 305 : 0 : if ( QgsSimpleLineSymbolLayer *line = dynamic_cast< QgsSimpleLineSymbolLayer * >( mLineSymbol->symbolLayer( 0 ) ) ) 306 : : { 307 : 0 : return line->penCapStyle(); 308 : : } 309 : 0 : return Qt::FlatCap; 310 : 0 : } 311 : : 312 : 0 : void QgsScaleBarSettings::setLineCapStyle( Qt::PenCapStyle style ) 313 : : { 314 : 0 : for ( QgsLineSymbol *symbol : { mLineSymbol.get(), mDivisionLineSymbol.get(), mSubdivisionLineSymbol.get() } ) 315 : : { 316 : 0 : if ( QgsSimpleLineSymbolLayer *line = dynamic_cast< QgsSimpleLineSymbolLayer * >( symbol->symbolLayer( 0 ) ) ) 317 : : { 318 : 0 : line->setPenCapStyle( style ); 319 : 0 : } 320 : : } 321 : 0 : } 322 : : 323 : 0 : const QgsNumericFormat *QgsScaleBarSettings::numericFormat() const 324 : : { 325 : 0 : return mNumericFormat.get(); 326 : : } 327 : : 328 : 0 : void QgsScaleBarSettings::setNumericFormat( QgsNumericFormat *format ) 329 : : { 330 : 0 : mNumericFormat.reset( format ); 331 : 0 : } 332 : : 333 : 0 : QgsScaleBarSettings::~QgsScaleBarSettings() = default; 334 : :