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