From e7000f256729c7bcda3a26f14f0e743b4f5ba603 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Wed, 13 Apr 2016 00:00:36 -0400 Subject: [PATCH] Object editor now follows Settings::units(). --- glabels/ObjectEditor.cpp | 213 +++++++++++++++++++++++++++---------- glabels/ObjectEditor.h | 12 ++- glabels/ui/ObjectEditor.ui | 90 ++++------------ 3 files changed, 190 insertions(+), 125 deletions(-) diff --git a/glabels/ObjectEditor.cpp b/glabels/ObjectEditor.cpp index 72ecc23..518b5be 100644 --- a/glabels/ObjectEditor.cpp +++ b/glabels/ObjectEditor.cpp @@ -25,6 +25,8 @@ #include "LabelModelObject.h" #include "LabelModelBoxObject.h" +#include "Settings.h" + #include #include @@ -43,6 +45,9 @@ ObjectEditor::ObjectEditor( QWidget *parent ) setEnabled( false ); hidePages(); + + connect( Settings::instance(), SIGNAL(changed()), this, SLOT(onSettingsChanged()) ); + onSettingsChanged(); } @@ -90,8 +95,8 @@ void ObjectEditor::loadPositionPage() { mBlocked = true; - posXSpin->setValue( mObject->x0().in() ); - posYSpin->setValue( mObject->y0().in() ); + posXSpin->setValue( mObject->x0().inUnits(mUnits) ); + posYSpin->setValue( mObject->y0().inUnits(mUnits) ); mBlocked = false; } @@ -104,8 +109,8 @@ void ObjectEditor::loadRectSizePage() { mBlocked = true; - sizeWSpin->setValue( mObject->w().in() ); - sizeHSpin->setValue( mObject->h().in() ); + sizeWSpin->setValue( mObject->w().inUnits(mUnits) ); + sizeHSpin->setValue( mObject->h().inUnits(mUnits) ); mBlocked = false; } @@ -119,8 +124,8 @@ void ObjectEditor::loadShadowPage() mBlocked = true; shadowEnableCheck->setChecked( mObject->shadow() ); - shadowXSpin->setValue( mObject->shadowX().in() ); - shadowYSpin->setValue( mObject->shadowY().in() ); + shadowXSpin->setValue( mObject->shadowX().inUnits(mUnits) ); + shadowYSpin->setValue( mObject->shadowY().inUnits(mUnits) ); shadowColorButton->setColorNode( mObject->shadowColorNode() ); shadowOpacitySpin->setValue( 100*mObject->shadowOpacity() ); @@ -129,6 +134,100 @@ void ObjectEditor::loadShadowPage() } +int ObjectEditor::spinDigits( glabels::Distance::Units units ) +{ + int digits; + + switch (units) + { + case glabels::Distance::Units::PT: + digits = 2; + break; + case glabels::Distance::Units::IN: + digits = 3; + break; + case glabels::Distance::Units::MM: + digits = 2; + break; + case glabels::Distance::Units::CM: + digits = 3; + break; + case glabels::Distance::Units::PC: + digits = 2; + break; + } + + return digits; +} + + +double ObjectEditor::spinStep( glabels::Distance::Units units ) +{ + double step; + + switch (units) + { + case glabels::Distance::Units::PT: + step = 0.01; + break; + case glabels::Distance::Units::IN: + step = 0.001; + break; + case glabels::Distance::Units::MM: + step = 0.01; + break; + case glabels::Distance::Units::CM: + step = 0.001; + break; + case glabels::Distance::Units::PC: + step = 0.01; + break; + } + + return step; +} + + +void ObjectEditor::onSettingsChanged() +{ + mUnits = Settings::units(); + + int digits = spinDigits( mUnits ); + double step = spinStep( mUnits ); + + posXSpin->setDecimals( digits ); + posXSpin->setSingleStep( step ); + posXSpin->setSuffix( " " + glabels::Distance::toId(mUnits) ); + + posYSpin->setDecimals( digits ); + posYSpin->setSingleStep( step ); + posYSpin->setSuffix( " " + glabels::Distance::toId(mUnits) ); + + sizeWSpin->setDecimals( digits ); + sizeWSpin->setSingleStep( step ); + sizeWSpin->setSuffix( " " + glabels::Distance::toId(mUnits) ); + + sizeHSpin->setDecimals( digits ); + sizeHSpin->setSingleStep( step ); + sizeHSpin->setSuffix( " " + glabels::Distance::toId(mUnits) ); + + sizeLineLengthSpin->setDecimals( digits ); + sizeLineLengthSpin->setSingleStep( step ); + sizeLineLengthSpin->setSuffix( " " + glabels::Distance::toId(mUnits) ); + + shadowXSpin->setDecimals( digits ); + shadowXSpin->setSingleStep( step ); + shadowXSpin->setSuffix( " " + glabels::Distance::toId(mUnits) ); + + shadowYSpin->setDecimals( digits ); + shadowYSpin->setSingleStep( step ); + shadowYSpin->setSuffix( " " + glabels::Distance::toId(mUnits) ); + + onLabelSizeChanged(); + onSelectionChanged(); +} + + void ObjectEditor::onLabelSizeChanged() { if ( mModel ) @@ -137,10 +236,10 @@ void ObjectEditor::onLabelSizeChanged() glabels::Distance whMax = std::max( mModel->w(), mModel->h() ); - posXSpin->setRange( -whMax.in(), 2*whMax.in() ); - posYSpin->setRange( -whMax.in(), 2*whMax.in() ); - sizeWSpin->setRange( 0, 2*whMax.in() ); - sizeHSpin->setRange( 0, 2*whMax.in() ); + posXSpin->setRange( -whMax.inUnits(mUnits), 2*whMax.inUnits(mUnits) ); + posYSpin->setRange( -whMax.inUnits(mUnits), 2*whMax.inUnits(mUnits) ); + sizeWSpin->setRange( 0, 2*whMax.inUnits(mUnits) ); + sizeHSpin->setRange( 0, 2*whMax.inUnits(mUnits) ); mBlocked = false; } @@ -149,53 +248,56 @@ void ObjectEditor::onLabelSizeChanged() void ObjectEditor::onSelectionChanged() { - if ( mObject ) + if ( mModel ) { - disconnect( mObject, 0, this, 0 ); - } - - hidePages(); - - if ( mModel->isSelectionAtomic() ) - { - mObject = mModel->getFirstSelectedObject(); - - if ( dynamic_cast(mObject) ) + if ( mObject ) { - titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-box.png") ); - titleLabel->setText( "Box object properties" ); + disconnect( mObject, 0, this, 0 ); + } - notebook->addTab( lineFillPage, "line/fill" ); - notebook->addTab( posSizePage, "position/size" ); - notebook->addTab( shadowPage, "shadow" ); + hidePages(); - sizeRectFrame->setVisible( true ); - sizeResetImageButton->setVisible( false ); - sizeLineFrame->setVisible( false ); + if ( mModel->isSelectionAtomic() ) + { + mObject = mModel->getFirstSelectedObject(); - loadLineFillPage(); - loadPositionPage(); - loadRectSizePage(); - loadShadowPage(); + if ( dynamic_cast(mObject) ) + { + titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-box.png") ); + titleLabel->setText( "Box object properties" ); + + notebook->addTab( lineFillPage, "line/fill" ); + notebook->addTab( posSizePage, "position/size" ); + notebook->addTab( shadowPage, "shadow" ); + + sizeRectFrame->setVisible( true ); + sizeResetImageButton->setVisible( false ); + sizeLineFrame->setVisible( false ); + + loadLineFillPage(); + loadPositionPage(); + loadRectSizePage(); + loadShadowPage(); - setEnabled( true ); + setEnabled( true ); + } + else + { + Q_ASSERT_X( false, "ObjectEditor::onSelectionChanged", "Invalid object" ); + } + + connect( mObject, SIGNAL(changed()), this, SLOT(onObjectChanged()) ); + connect( mObject, SIGNAL(moved()), this, SLOT(onObjectMoved()) ); + connect( mObject, SIGNAL(destroyed(QObject*)), this, SLOT(onObjectDestroyed()) ); } else { - Q_ASSERT_X( false, "ObjectEditor::onSelectionChanged", "Invalid object" ); + mObject = 0; + + titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-object-properties.png") ); + titleLabel->setText( "Object properties" ); + setEnabled( false ); } - - connect( mObject, SIGNAL(changed()), this, SLOT(onObjectChanged()) ); - connect( mObject, SIGNAL(moved()), this, SLOT(onObjectMoved()) ); - connect( mObject, SIGNAL(destroyed(QObject*)), this, SLOT(onObjectDestroyed()) ); - } - else - { - mObject = 0; - - titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-object-properties.png") ); - titleLabel->setText( "Object properties" ); - setEnabled( false ); } } @@ -260,7 +362,10 @@ void ObjectEditor::onPositionControlsChanged() { mBlocked = true; - mObject->setPosition( posXSpin->value(), posYSpin->value() ); + glabels::Distance x = glabels::Distance(posXSpin->value(), mUnits); + glabels::Distance y = glabels::Distance(posYSpin->value(), mUnits); + + mObject->setPosition( x, y ); mBlocked = false; } @@ -273,20 +378,20 @@ void ObjectEditor::onRectSizeControlsChanged() { mBlocked = true; - glabels::Distance spinW = glabels::Distance::in(sizeWSpin->value()); - glabels::Distance spinH = glabels::Distance::in(sizeHSpin->value()); + glabels::Distance spinW = glabels::Distance(sizeWSpin->value(), mUnits); + glabels::Distance spinH = glabels::Distance(sizeHSpin->value(), mUnits); if ( sizeAspectCheck->isChecked() ) { if ( fabs(spinW - mObject->w()) > fabs(spinH - mObject->h()) ) { mObject->setWHonorAspect( spinW ); - sizeHSpin->setValue( mObject->h().in() ); + sizeHSpin->setValue( mObject->h().inUnits(mUnits) ); } else { mObject->setHHonorAspect( spinH ); - sizeWSpin->setValue( mObject->w().in() ); + sizeWSpin->setValue( mObject->w().inUnits(mUnits) ); } } else @@ -306,8 +411,8 @@ void ObjectEditor::onShadowControlsChanged() mBlocked = true; mObject->setShadow( shadowEnableCheck->isChecked() ); - mObject->setShadowX( glabels::Distance::in(shadowXSpin->value()) ); - mObject->setShadowY( glabels::Distance::in(shadowYSpin->value()) ); + mObject->setShadowX( glabels::Distance(shadowXSpin->value(), mUnits) ); + mObject->setShadowY( glabels::Distance(shadowYSpin->value(), mUnits) ); mObject->setShadowColorNode( shadowColorButton->colorNode() ); mObject->setShadowOpacity( shadowOpacitySpin->value()/100.0 ); diff --git a/glabels/ObjectEditor.h b/glabels/ObjectEditor.h index a8367a1..151da73 100644 --- a/glabels/ObjectEditor.h +++ b/glabels/ObjectEditor.h @@ -22,6 +22,7 @@ #define ObjectEditor_h #include "ui_ObjectEditor.h" +#include "libglabels/Distance.h" class LabelModel; // Forward reference @@ -58,12 +59,16 @@ private: void loadPositionPage(); void loadRectSizePage(); void loadShadowPage(); + + int spinDigits( glabels::Distance::Units units ); + double spinStep( glabels::Distance::Units units ); ///////////////////////////////// // Slots ///////////////////////////////// private slots: + void onSettingsChanged(); void onLabelSizeChanged(); void onSelectionChanged(); void onObjectChanged(); @@ -81,9 +86,10 @@ private slots: // Private data ///////////////////////////////// private: - LabelModel* mModel; - LabelModelObject* mObject; - bool mBlocked; + LabelModel* mModel; + LabelModelObject* mObject; + glabels::Distance::Units mUnits; + bool mBlocked; }; diff --git a/glabels/ui/ObjectEditor.ui b/glabels/ui/ObjectEditor.ui index 46aa330..8ae0e06 100644 --- a/glabels/ui/ObjectEditor.ui +++ b/glabels/ui/ObjectEditor.ui @@ -70,7 +70,7 @@ - 0 + 3 @@ -875,12 +875,21 @@ - - - - - - points + + + + 0 + 0 + + + + pt + + + 1 + + + 0.100000000000000 @@ -1022,13 +1031,6 @@ - - - - inches - - - @@ -1049,13 +1051,6 @@ - - - - inches - - - @@ -1102,13 +1097,6 @@ - - - - inches - - - @@ -1129,13 +1117,6 @@ - - - - inches - - - @@ -1212,13 +1193,6 @@ - - - - inches - - - @@ -1237,12 +1211,9 @@ - - - - - - degrees + + + ° @@ -1312,13 +1283,6 @@ - - - - inches - - - @@ -1333,13 +1297,6 @@ - - - - inches - - - @@ -1359,12 +1316,9 @@ - - - - - - % + + + %