diff --git a/glabels/LabelModelObject.cpp b/glabels/LabelModelObject.cpp index b71a054..44b5841 100644 --- a/glabels/LabelModelObject.cpp +++ b/glabels/LabelModelObject.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "ColorNode.h" @@ -171,7 +172,7 @@ namespace glabels if ( mW != value ) { mW = value; - emit moved(); + emit changed(); } } @@ -193,7 +194,7 @@ namespace glabels if ( mH != value ) { mH = value; - emit moved(); + emit changed(); } } @@ -778,23 +779,13 @@ namespace glabels /// void LabelModelObject::setSizeHonorAspect( double w, double h ) { - double aspectRatio = mH / mW; - - if ( h > (w * aspectRatio) ) + if ( fabs(w - mW) > fabs(h - mH) ) { - h = w * aspectRatio; + setWHonorAspect( w ); } else { - w = h / aspectRatio; - } - - if ( ( mW != w ) || ( mH != h ) ) - { - mW = w; - mH = h; - - emit changed(); + setHHonorAspect( h ); } } diff --git a/glabels/ObjectEditor.cpp b/glabels/ObjectEditor.cpp index 46cd81c..90fd532 100644 --- a/glabels/ObjectEditor.cpp +++ b/glabels/ObjectEditor.cpp @@ -25,6 +25,7 @@ #include "LabelModelObject.h" #include "LabelModelBoxObject.h" +#include #include @@ -99,15 +100,33 @@ namespace glabels } + void ObjectEditor::loadRectSizePage() + { + if ( mObject ) + { + mBlocked = true; + + sizeWSpin->setValue( mObject->w() ); + sizeHSpin->setValue( mObject->h() ); + + mBlocked = false; + } + } + + void ObjectEditor::onLabelSizeChanged() { if ( mModel ) { mBlocked = true; - - posXSpin->setRange( -mModel->w(), 2*mModel->w() ); - posYSpin->setRange( -mModel->h(), 2*mModel->h() ); + double whMax = std::max( mModel->w(), mModel->h() ); + + posXSpin->setRange( -whMax, 2*whMax ); + posYSpin->setRange( -whMax, 2*whMax ); + sizeWSpin->setRange( 0, 2*whMax ); + sizeHSpin->setRange( 0, 2*whMax ); + mBlocked = false; } } @@ -141,6 +160,7 @@ namespace glabels loadLineFillPage(); loadPositionPage(); + loadRectSizePage(); setEnabled( true ); } @@ -167,6 +187,8 @@ namespace glabels { if ( !mBlocked ) { + loadLineFillPage(); + loadRectSizePage(); } } @@ -220,9 +242,38 @@ namespace glabels } + void ObjectEditor::onRectSizeControlsChanged() + { + if ( !mBlocked ) + { + mBlocked = true; + + if ( sizeAspectCheck->isChecked() ) + { + mObject->setSizeHonorAspect( sizeWSpin->value(), sizeHSpin->value() ); + sizeWSpin->setValue( mObject->w() ); + sizeHSpin->setValue( mObject->h() ); + } + else + { + mObject->setSize( sizeWSpin->value(), sizeHSpin->value() ); + } + + mBlocked = false; + } + } + + void ObjectEditor::onChanged() { - qDebug() << "Form changed."; + if ( !mBlocked ) + { + mBlocked = true; + + qDebug() << "Form changed."; + + mBlocked = false; + } } } diff --git a/glabels/ObjectEditor.h b/glabels/ObjectEditor.h index 3d4f2cc..6c5a7ba 100644 --- a/glabels/ObjectEditor.h +++ b/glabels/ObjectEditor.h @@ -58,6 +58,7 @@ namespace glabels void hidePages(); void loadLineFillPage(); void loadPositionPage(); + void loadRectSizePage(); ///////////////////////////////// @@ -71,6 +72,7 @@ namespace glabels void onLineControlsChanged(); void onFillControlsChanged(); void onPositionControlsChanged(); + void onRectSizeControlsChanged(); void onChanged(); diff --git a/glabels/ui/ObjectEditor.ui b/glabels/ui/ObjectEditor.ui index a4641b5..7c81586 100644 --- a/glabels/ui/ObjectEditor.ui +++ b/glabels/ui/ObjectEditor.ui @@ -1100,6 +1100,18 @@ + + + 0 + 0 + + + + + 132 + 0 + + Lock aspect ratio @@ -1887,7 +1899,7 @@ sizeWSpin valueChanged(double) ObjectEditor - onChanged() + onRectSizeControlsChanged() 135 @@ -1903,7 +1915,7 @@ sizeHSpin valueChanged(double) ObjectEditor - onChanged() + onRectSizeControlsChanged() 98 @@ -1915,22 +1927,6 @@ - - sizeAspectCheck - toggled(bool) - ObjectEditor - onChanged() - - - 191 - 293 - - - 395 - 275 - - - sizeResetImageButton clicked() @@ -2066,5 +2062,6 @@ onLineControlsChanged() onFillControlsChanged() onPositionControlsChanged() + onRectSizeControlsChanged()