mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-17 00:04:02 -04:00
[FEATURE][layouts] Add 'resize to square' action
Resizes all selected items so that they are square
This commit is contained in:
parent
73077c4ef3
commit
c022bc825e
@ -50,6 +50,7 @@ class QgsLayoutAligner
|
|||||||
ResizeWidest,
|
ResizeWidest,
|
||||||
ResizeShortest,
|
ResizeShortest,
|
||||||
ResizeTallest,
|
ResizeTallest,
|
||||||
|
ResizeToSquare,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void alignItems( QgsLayout *layout, const QList< QgsLayoutItem * > &items, Alignment alignment );
|
static void alignItems( QgsLayout *layout, const QList< QgsLayoutItem * > &items, Alignment alignment );
|
||||||
|
@ -213,6 +213,7 @@ QgsLayoutDesignerDialog::QgsLayoutDesignerDialog( QWidget *parent, Qt::WindowFla
|
|||||||
resizeToolButton->addAction( mActionResizeWidest );
|
resizeToolButton->addAction( mActionResizeWidest );
|
||||||
resizeToolButton->addAction( mActionResizeShortest );
|
resizeToolButton->addAction( mActionResizeShortest );
|
||||||
resizeToolButton->addAction( mActionResizeTallest );
|
resizeToolButton->addAction( mActionResizeTallest );
|
||||||
|
resizeToolButton->addAction( mActionResizeToSquare );
|
||||||
resizeToolButton->setDefaultAction( mActionResizeNarrowest );
|
resizeToolButton->setDefaultAction( mActionResizeNarrowest );
|
||||||
mActionsToolbar->addWidget( resizeToolButton );
|
mActionsToolbar->addWidget( resizeToolButton );
|
||||||
|
|
||||||
@ -318,6 +319,10 @@ QgsLayoutDesignerDialog::QgsLayoutDesignerDialog( QWidget *parent, Qt::WindowFla
|
|||||||
{
|
{
|
||||||
mView->resizeSelectedItems( QgsLayoutAligner::ResizeTallest );
|
mView->resizeSelectedItems( QgsLayoutAligner::ResizeTallest );
|
||||||
} );
|
} );
|
||||||
|
connect( mActionResizeToSquare, &QAction::triggered, this, [ = ]
|
||||||
|
{
|
||||||
|
mView->resizeSelectedItems( QgsLayoutAligner::ResizeToSquare );
|
||||||
|
} );
|
||||||
|
|
||||||
connect( mActionAddPages, &QAction::triggered, this, &QgsLayoutDesignerDialog::addPages );
|
connect( mActionAddPages, &QAction::triggered, this, &QgsLayoutDesignerDialog::addPages );
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ void QgsLayoutAligner::distributeItems( QgsLayout *layout, const QList<QgsLayout
|
|||||||
|
|
||||||
void QgsLayoutAligner::resizeItems( QgsLayout *layout, const QList<QgsLayoutItem *> &items, QgsLayoutAligner::Resize resize )
|
void QgsLayoutAligner::resizeItems( QgsLayout *layout, const QList<QgsLayoutItem *> &items, QgsLayoutAligner::Resize resize )
|
||||||
{
|
{
|
||||||
if ( items.size() < 2 )
|
if ( !( items.size() >= 2 || ( items.size() == 1 && resize == ResizeToSquare ) ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto collectSize = [resize]( QgsLayoutItem * item )->double
|
auto collectSize = [resize]( QgsLayoutItem * item )->double
|
||||||
@ -188,6 +188,7 @@ void QgsLayoutAligner::resizeItems( QgsLayout *layout, const QList<QgsLayoutItem
|
|||||||
{
|
{
|
||||||
case ResizeNarrowest:
|
case ResizeNarrowest:
|
||||||
case ResizeWidest:
|
case ResizeWidest:
|
||||||
|
case ResizeToSquare:
|
||||||
return itemBBox.width();
|
return itemBBox.width();
|
||||||
case ResizeShortest:
|
case ResizeShortest:
|
||||||
case ResizeTallest:
|
case ResizeTallest:
|
||||||
@ -211,6 +212,8 @@ void QgsLayoutAligner::resizeItems( QgsLayout *layout, const QList<QgsLayoutItem
|
|||||||
case ResizeWidest:
|
case ResizeWidest:
|
||||||
newSize = std::max( size, newSize );
|
newSize = std::max( size, newSize );
|
||||||
break;
|
break;
|
||||||
|
case ResizeToSquare:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +230,14 @@ void QgsLayoutAligner::resizeItems( QgsLayout *layout, const QList<QgsLayoutItem
|
|||||||
case ResizeShortest:
|
case ResizeShortest:
|
||||||
newSize.setHeight( size );
|
newSize.setHeight( size );
|
||||||
break;
|
break;
|
||||||
|
case ResizeToSquare:
|
||||||
|
{
|
||||||
|
if ( newSize.width() > newSize.height() )
|
||||||
|
newSize.setHeight( newSize.width() );
|
||||||
|
else
|
||||||
|
newSize.setWidth( newSize.height() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// need to keep item units
|
// need to keep item units
|
||||||
@ -315,6 +326,8 @@ QString QgsLayoutAligner::undoText( QgsLayoutAligner::Resize resize )
|
|||||||
return QObject::tr( "Resized items to shortest" );
|
return QObject::tr( "Resized items to shortest" );
|
||||||
case ResizeTallest:
|
case ResizeTallest:
|
||||||
return QObject::tr( "Resized items to tallest" );
|
return QObject::tr( "Resized items to tallest" );
|
||||||
|
case ResizeToSquare:
|
||||||
|
return QObject::tr( "Resized items to square" );
|
||||||
}
|
}
|
||||||
return QString(); //no warnings
|
return QString(); //no warnings
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,7 @@ class CORE_EXPORT QgsLayoutAligner
|
|||||||
ResizeWidest, //!< Resize width to match widest width
|
ResizeWidest, //!< Resize width to match widest width
|
||||||
ResizeShortest, //!< Resize height to match shortest height
|
ResizeShortest, //!< Resize height to match shortest height
|
||||||
ResizeTallest, //!< Resize height to match tallest height
|
ResizeTallest, //!< Resize height to match tallest height
|
||||||
|
ResizeToSquare, //!< Resize items to square
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -191,6 +191,8 @@
|
|||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="mActionResizeShortest"/>
|
<addaction name="mActionResizeShortest"/>
|
||||||
<addaction name="mActionResizeTallest"/>
|
<addaction name="mActionResizeTallest"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="mActionResizeToSquare"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="mActionRaiseItems"/>
|
<addaction name="mActionRaiseItems"/>
|
||||||
<addaction name="mActionLowerItems"/>
|
<addaction name="mActionLowerItems"/>
|
||||||
@ -911,6 +913,18 @@
|
|||||||
<string>Del</string>
|
<string>Del</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="mActionResizeToSquare">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../images/images.qrc">
|
||||||
|
<normaloff>:/images/themes/default/mActionResizeTallest.svg</normaloff>:/images/themes/default/mActionResizeTallest.svg</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>To S&quare</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Resizes items to squares</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../../../images/images.qrc"/>
|
<include location="../../../images/images.qrc"/>
|
||||||
|
@ -228,6 +228,17 @@ class TestQgsLayoutAligner(unittest.TestCase):
|
|||||||
self.assertEqual(item1.sizeWithUnits(), QgsLayoutSize(18, 16, QgsUnitTypes.LayoutMillimeters))
|
self.assertEqual(item1.sizeWithUnits(), QgsLayoutSize(18, 16, QgsUnitTypes.LayoutMillimeters))
|
||||||
self.assertEqual(item2.sizeWithUnits(), QgsLayoutSize(10, 16, QgsUnitTypes.LayoutMillimeters))
|
self.assertEqual(item2.sizeWithUnits(), QgsLayoutSize(10, 16, QgsUnitTypes.LayoutMillimeters))
|
||||||
self.assertEqual(item3.sizeWithUnits(), QgsLayoutSize(1.8, 1.6, QgsUnitTypes.LayoutCentimeters))
|
self.assertEqual(item3.sizeWithUnits(), QgsLayoutSize(1.8, 1.6, QgsUnitTypes.LayoutCentimeters))
|
||||||
|
l.undoStack().stack().undo()
|
||||||
|
|
||||||
|
item2.attemptResize(QgsLayoutSize(10, 19, QgsUnitTypes.LayoutMillimeters))
|
||||||
|
QgsLayoutAligner.resizeItems(l, [item1, item2, item3], QgsLayoutAligner.ResizeToSquare)
|
||||||
|
self.assertEqual(item1.sizeWithUnits(), QgsLayoutSize(18, 18, QgsUnitTypes.LayoutMillimeters))
|
||||||
|
self.assertEqual(item2.sizeWithUnits(), QgsLayoutSize(19, 19, QgsUnitTypes.LayoutMillimeters))
|
||||||
|
self.assertEqual(item3.sizeWithUnits(), QgsLayoutSize(1.8, 1.8, QgsUnitTypes.LayoutCentimeters))
|
||||||
|
|
||||||
|
l.undoStack().stack().undo()
|
||||||
|
QgsLayoutAligner.resizeItems(l, [item1], QgsLayoutAligner.ResizeToSquare)
|
||||||
|
self.assertEqual(item1.sizeWithUnits(), QgsLayoutSize(18, 18, QgsUnitTypes.LayoutMillimeters))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -626,6 +626,13 @@ class TestQgsLayoutView(unittest.TestCase):
|
|||||||
self.assertEqual(item1.sizeWithUnits(), QgsLayoutSize(18, 16, QgsUnitTypes.LayoutMillimeters))
|
self.assertEqual(item1.sizeWithUnits(), QgsLayoutSize(18, 16, QgsUnitTypes.LayoutMillimeters))
|
||||||
self.assertEqual(item2.sizeWithUnits(), QgsLayoutSize(10, 16, QgsUnitTypes.LayoutMillimeters))
|
self.assertEqual(item2.sizeWithUnits(), QgsLayoutSize(10, 16, QgsUnitTypes.LayoutMillimeters))
|
||||||
self.assertEqual(item3.sizeWithUnits(), QgsLayoutSize(1.8, 1.6, QgsUnitTypes.LayoutCentimeters))
|
self.assertEqual(item3.sizeWithUnits(), QgsLayoutSize(1.8, 1.6, QgsUnitTypes.LayoutCentimeters))
|
||||||
|
l.undoStack().stack().undo()
|
||||||
|
|
||||||
|
item2.attemptResize(QgsLayoutSize(10, 19, QgsUnitTypes.LayoutMillimeters))
|
||||||
|
view.resizeSelectedItems(QgsLayoutAligner.ResizeToSquare)
|
||||||
|
self.assertEqual(item1.sizeWithUnits(), QgsLayoutSize(18, 18, QgsUnitTypes.LayoutMillimeters))
|
||||||
|
self.assertEqual(item2.sizeWithUnits(), QgsLayoutSize(19, 19, QgsUnitTypes.LayoutMillimeters))
|
||||||
|
self.assertEqual(item3.sizeWithUnits(), QgsLayoutSize(1.8, 1.8, QgsUnitTypes.LayoutCentimeters))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user