diff --git a/glabels/ObjectEditor.cpp b/glabels/ObjectEditor.cpp index 679f891..46cd81c 100644 --- a/glabels/ObjectEditor.cpp +++ b/glabels/ObjectEditor.cpp @@ -35,7 +35,7 @@ namespace glabels /// Constructor /// ObjectEditor::ObjectEditor( QWidget *parent ) - : mModel(0), mObject(0) + : mModel(0), mObject(0), mBlocked(false) { setupUi( this ); @@ -51,8 +51,10 @@ namespace glabels { mModel = model; + connect( mModel, SIGNAL(sizeChanged()), this, SLOT(onLabelSizeChanged()) ); connect( mModel, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()) ); + onLabelSizeChanged(); onSelectionChanged(); } @@ -70,12 +72,47 @@ namespace glabels void ObjectEditor::loadLineFillPage() { - lineWidthSpin->setValue( mObject->lineWidth() ); - lineColorButton->setColorNode( mObject->lineColorNode() ); - fillColorButton->setColorNode( mObject->fillColorNode() ); + if ( mObject ) + { + mBlocked = true; + + lineWidthSpin->setValue( mObject->lineWidth() ); + lineColorButton->setColorNode( mObject->lineColorNode() ); + fillColorButton->setColorNode( mObject->fillColorNode() ); + + mBlocked = false; + } } + void ObjectEditor::loadPositionPage() + { + if ( mObject ) + { + mBlocked = true; + + posXSpin->setValue( mObject->x0() ); + posYSpin->setValue( mObject->y0() ); + + mBlocked = false; + } + } + + + void ObjectEditor::onLabelSizeChanged() + { + if ( mModel ) + { + mBlocked = true; + + posXSpin->setRange( -mModel->w(), 2*mModel->w() ); + posYSpin->setRange( -mModel->h(), 2*mModel->h() ); + + mBlocked = false; + } + } + + void ObjectEditor::onSelectionChanged() { if ( mObject ) @@ -103,6 +140,7 @@ namespace glabels sizeLineFrame->setVisible( false ); loadLineFillPage(); + loadPositionPage(); setEnabled( true ); } @@ -127,26 +165,58 @@ namespace glabels void ObjectEditor::onObjectChanged() { - qDebug() << "Object changed."; + if ( !mBlocked ) + { + } } void ObjectEditor::onObjectMoved() { - qDebug() << "Object moved."; + if ( !mBlocked ) + { + loadPositionPage(); + } } void ObjectEditor::onLineControlsChanged() { - mObject->setLineWidth( lineWidthSpin->value() ); - mObject->setLineColorNode( lineColorButton->colorNode() ); + if ( !mBlocked ) + { + mBlocked = true; + + mObject->setLineWidth( lineWidthSpin->value() ); + mObject->setLineColorNode( lineColorButton->colorNode() ); + + mBlocked = false; + } } void ObjectEditor::onFillControlsChanged() { - mObject->setFillColorNode( fillColorButton->colorNode() ); + if ( !mBlocked ) + { + mBlocked = true; + + mObject->setFillColorNode( fillColorButton->colorNode() ); + + mBlocked = false; + } + } + + + void ObjectEditor::onPositionControlsChanged() + { + if ( !mBlocked ) + { + mBlocked = true; + + mObject->setPosition( posXSpin->value(), posYSpin->value() ); + + mBlocked = false; + } } diff --git a/glabels/ObjectEditor.h b/glabels/ObjectEditor.h index 548eda8..3d4f2cc 100644 --- a/glabels/ObjectEditor.h +++ b/glabels/ObjectEditor.h @@ -57,17 +57,20 @@ namespace glabels private: void hidePages(); void loadLineFillPage(); + void loadPositionPage(); ///////////////////////////////// // Slots ///////////////////////////////// private slots: + void onLabelSizeChanged(); void onSelectionChanged(); void onObjectChanged(); void onObjectMoved(); void onLineControlsChanged(); void onFillControlsChanged(); + void onPositionControlsChanged(); void onChanged(); @@ -77,6 +80,7 @@ namespace glabels private: LabelModel* mModel; LabelModelObject* mObject; + bool mBlocked; }; diff --git a/glabels/ui/ObjectEditor.ui b/glabels/ui/ObjectEditor.ui index 3b510d7..a4641b5 100644 --- a/glabels/ui/ObjectEditor.ui +++ b/glabels/ui/ObjectEditor.ui @@ -70,7 +70,7 @@ - 3 + 4 @@ -1855,15 +1855,15 @@ posXSpin valueChanged(double) ObjectEditor - onChanged() + onPositionControlsChanged() 90 112 - 400 - 90 + 399 + 89 @@ -1871,7 +1871,7 @@ posYSpin valueChanged(double) ObjectEditor - onChanged() + onPositionControlsChanged() 112 @@ -2065,5 +2065,6 @@ onResetImageSize() onLineControlsChanged() onFillControlsChanged() + onPositionControlsChanged()