diff --git a/glabels/Icons.h b/glabels/Icons.h index 4222d56..ae59383 100644 --- a/glabels/Icons.h +++ b/glabels/Icons.h @@ -188,6 +188,16 @@ namespace glabels }; + class Center : public QIcon + { + public: + Center() + { + addPixmap( QPixmap( ":icons/flat/16x16/glabels-center.svg" ) ); + } + }; + + class CenterHoriz : public QIcon { public: diff --git a/glabels/MainWindow.cpp b/glabels/MainWindow.cpp index 254ae27..e7b7c2c 100644 --- a/glabels/MainWindow.cpp +++ b/glabels/MainWindow.cpp @@ -574,6 +574,11 @@ namespace glabels objectsCenterVertAction->setStatusTip( tr("Vertically center objects in label") ); connect( objectsCenterVertAction, SIGNAL(triggered()), this, SLOT(objectsCenterVert()) ); + objectsCenterAction = new QAction( tr("Center Both"), this ); + objectsCenterAction->setIcon( Icons::Center() ); + objectsCenterAction->setStatusTip( tr("Center objects in label") ); + connect( objectsCenterAction, SIGNAL(triggered()), this, SLOT(objectsCenter()) ); + /* Help actions */ helpContentsAction = new QAction( tr("&User Manual..."), this ); @@ -698,6 +703,7 @@ namespace glabels objectsCenterMenu = objectsMenu->addMenu( tr("Center") ); objectsCenterMenu->addAction( objectsCenterHorizAction ); objectsCenterMenu->addAction( objectsCenterVertAction ); + objectsCenterMenu->addAction( objectsCenterAction ); helpMenu = menuBar()->addMenu( tr("&Help") ); helpMenu->addAction( helpContentsAction ); @@ -724,6 +730,7 @@ namespace glabels contextCenterMenu = contextMenu->addMenu( tr("Center") ); contextCenterMenu->addAction( objectsCenterHorizAction ); contextCenterMenu->addAction( objectsCenterVertAction ); + contextCenterMenu->addAction( objectsCenterAction ); contextMenu->addSeparator(); contextMenu->addAction( contextCutAction ); contextMenu->addAction( contextCopyAction ); @@ -1005,6 +1012,7 @@ namespace glabels objectsCenterMenu->setEnabled( isEditorPage && hasSelection ); objectsCenterHorizAction->setEnabled( isEditorPage && hasSelection ); objectsCenterVertAction->setEnabled( isEditorPage && hasSelection ); + objectsCenterAction->setEnabled( isEditorPage && hasSelection ); // Help actions helpContentsAction->setEnabled( true ); @@ -1650,6 +1658,16 @@ namespace glabels } + /// + /// Objects->Center Action + /// + void MainWindow::objectsCenter() + { + mUndoRedoModel->checkpoint( tr("Center") ); + mModel->centerSelection(); + } + + /// /// Objects->Center->Vertically Action /// diff --git a/glabels/MainWindow.h b/glabels/MainWindow.h index 10fa7f9..fc4c0a5 100644 --- a/glabels/MainWindow.h +++ b/glabels/MainWindow.h @@ -142,6 +142,7 @@ namespace glabels void objectsAlignTop(); void objectsAlignVCenter(); void objectsAlignBottom(); + void objectsCenter(); void objectsCenterHoriz(); void objectsCenterVert(); @@ -301,6 +302,7 @@ namespace glabels QAction* objectsAlignTopAction; QAction* objectsAlignVCenterAction; QAction* objectsAlignBottomAction; + QAction* objectsCenterAction; QAction* objectsCenterHorizAction; QAction* objectsCenterVertAction; diff --git a/glabels/icons.qrc b/glabels/icons.qrc index 0d14373..4c7d369 100644 --- a/glabels/icons.qrc +++ b/glabels/icons.qrc @@ -12,6 +12,7 @@ icons/flat/16x16/glabels-arrow.svg icons/flat/16x16/glabels-barcode.svg icons/flat/16x16/glabels-box.svg + icons/flat/16x16/glabels-center.svg icons/flat/16x16/glabels-center-horiz.svg icons/flat/16x16/glabels-center-vert.svg icons/flat/16x16/glabels-edit-clear.svg diff --git a/glabels/icons/flat/16x16/glabels-center.svg b/glabels/icons/flat/16x16/glabels-center.svg new file mode 100644 index 0000000..7c68452 --- /dev/null +++ b/glabels/icons/flat/16x16/glabels-center.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/model/Model.cpp b/model/Model.cpp index 6e11181..a1bd456 100644 --- a/model/Model.cpp +++ b/model/Model.cpp @@ -1163,6 +1163,33 @@ namespace glabels } + /// + /// Align Selected Objects To Center Of Label Both Horizontally and Vertically + /// + void Model::centerSelection() + { + Distance xLabelCenter = w() / 2.0; + Distance yLabelCenter = h() / 2.0; + + foreach ( ModelObject* object, mObjectList ) + { + if ( object->isSelected() ) + { + Region r = object->getExtent(); + Distance xObjectCenter = (r.x1() + r.x2()) / 2.0; + Distance yObjectCenter = (r.y1() + r.y2()) / 2.0; + Distance dx = xLabelCenter - xObjectCenter; + Distance dy = yLabelCenter - yObjectCenter; + object->setPositionRelative( dx, dy ); + } + } + + setModified(); + + emit changed(); + } + + /// /// Align Selected Objects To Center Of Label Vertically /// diff --git a/model/Model.h b/model/Model.h index 996fc89..b3e5a97 100644 --- a/model/Model.h +++ b/model/Model.h @@ -184,6 +184,7 @@ namespace glabels void alignSelectionTop(); void alignSelectionBottom(); void alignSelectionVCenter(); + void centerSelection(); void centerSelectionHoriz(); void centerSelectionVert(); void moveSelection( const Distance& dx, const Distance& dy ); diff --git a/translations/glabels_C.ts b/translations/glabels_C.ts index 28ce850..350c2e3 100644 --- a/translations/glabels_C.ts +++ b/translations/glabels_C.ts @@ -1879,6 +1879,14 @@ Redo %1 + + Center Both + + + + Center objects in label + + glabels::MergeView