From 96fa6edeb9cc203a9aedadc078c9a87915f022d6 Mon Sep 17 00:00:00 2001 From: Onetchou <83351185+Onetchou@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:00:44 +0200 Subject: [PATCH] fix: undo does not remove images anymore --- src/app/seamly2d/mainwindow.cpp | 19 ++++++++++++++++- src/libs/tools/image_item.cpp | 36 ++++++++++++++++++--------------- src/libs/tools/image_item.h | 1 - 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/app/seamly2d/mainwindow.cpp b/src/app/seamly2d/mainwindow.cpp index 6ddc0e647e86..ba95a5749855 100644 --- a/src/app/seamly2d/mainwindow.cpp +++ b/src/app/seamly2d/mainwindow.cpp @@ -1654,7 +1654,6 @@ void MainWindow::handleImportImage() ui->importImage_ToolButton->setChecked(false); return; } - image.id = VContainer::getNextId(); image.name = f.baseName(); image.filename = filename; image.units = qApp->patternUnit(); @@ -1667,6 +1666,8 @@ void MainWindow::addImage(DraftImage image) static bool firstImportImage = false; QImageReader imageReader(image.filename); + image.id = VContainer::getNextId(); + if(!imageReader.canRead()) { qCDebug(vMainWindow, "Can't read image"); @@ -1683,6 +1684,14 @@ void MainWindow::addImage(DraftImage image) return; } + if (image.width == 0 || image.height == 0) + { + image.width = image.pixmap.width(); + image.height = image.pixmap.height(); + image.xScale = 100; + image.yScale = 100; + } + ImageItem *item = new ImageItem(image); m_ImageMap.insert(image.id, item); draftScene->addItem(item); @@ -4421,6 +4430,12 @@ void MainWindow::fullParseFile() { qCDebug(vMainWindow, "Full parsing file"); + QList allImages; + foreach (ImageItem *item, m_ImageMap.values()) {allImages.append(item->getImage());} + //we must wait until all the DraftImages are saved before deleting the images + //because deleting an image change the z order of the other + foreach (ImageItem *item, m_ImageMap.values()) {handleDeleteImage(item->getImage().id);} + toolProperties->clearPropertyBrowser(); try { @@ -4549,6 +4564,8 @@ void MainWindow::fullParseFile() VMainGraphicsView::NewSceneRect(draftScene, qApp->getSceneView()); VMainGraphicsView::NewSceneRect(pieceScene, qApp->getSceneView()); + + foreach (DraftImage image, allImages) {addImage(image);} } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/tools/image_item.cpp b/src/libs/tools/image_item.cpp index 674dd3d12a71..65bc6a126702 100644 --- a/src/libs/tools/image_item.cpp +++ b/src/libs/tools/image_item.cpp @@ -73,14 +73,30 @@ ImageItem::ImageItem(DraftImage image, QGraphicsItem *parent) , m_isHovered(false) , m_selectionType(SelectionType::ByMouseRelease) , m_transformationMode(Qt::SmoothTransformation) - , m_hasShape(false) , m_image(image) , m_pixmapWidth() , m_pixmapHeight() , m_selectable(true) { initializeItem(); - setPixmap(m_image.pixmap); + + m_boundingRect = QRectF(m_image.xPos, m_image.yPos, m_image.xPos + m_image.width, m_image.yPos + m_image.height); + m_handleRect = m_boundingRect.adjusted(HANDLE_SIZE/2, HANDLE_SIZE/2, -HANDLE_SIZE/2, -HANDLE_SIZE/2); + + allImageItems.append(this); + + if (m_image.order == 0) + { + qreal minZValue = maxImageZvalue+1; + foreach (ImageItem *item, allImageItems) + { + minZValue = qMin(minZValue, item->m_image.order); + } + m_image.order = minZValue-1; + moveToTop(); + } + + updateImage(); m_resizeHandles = new ResizeHandlesItem(this); m_resizeHandles->setLockAspectRatio(m_image.aspectLocked); @@ -88,18 +104,6 @@ ImageItem::ImageItem(DraftImage image, QGraphicsItem *parent) m_resizeHandles->hide(); connect(m_resizeHandles, &ResizeHandlesItem::sizeChanged, this, &ImageItem::updateFromHandles); connect(m_resizeHandles, &ResizeHandlesItem::setStatusMessage, this, [this](QString message) {emit setStatusMessage(message);}); - - qreal minZValue = maxImageZvalue+1; - foreach (ImageItem *item, allImageItems) - { - minZValue = qMin(minZValue, item->m_image.order); - } - m_image.order = minZValue-1; - - allImageItems.append(this); - moveToTop(); - - updateImage(); } @@ -115,13 +119,13 @@ void ImageItem::setPixmap(const QPixmap &pixmap) prepareGeometryChange(); m_image.pixmap = pixmap; + m_pixmapWidth = pixmap.width(); m_pixmapHeight = pixmap.height(); m_image.width = pixmap.width(); m_image.height = pixmap.height(); m_image.xScale = m_image.width / m_pixmapWidth * 100; m_image.yScale = m_image.height / m_pixmapHeight * 100; - m_hasShape = false; m_boundingRect = QRectF(m_image.xPos, m_image.yPos, m_image.xPos + m_pixmapWidth, m_image.yPos + m_pixmapHeight); @@ -166,7 +170,7 @@ void ImageItem::setLock(bool checked) { setAcceptedMouseButtons(Qt::RightButton); emit setStatusMessage(""); - m_resizeHandles->hide(); + if (m_resizeHandles != nullptr) {m_resizeHandles->hide();} } else { diff --git a/src/libs/tools/image_item.h b/src/libs/tools/image_item.h index 00bfb20d4b84..df97b077a2f9 100644 --- a/src/libs/tools/image_item.h +++ b/src/libs/tools/image_item.h @@ -116,7 +116,6 @@ class ImageItem : public QObject, public QGraphicsItem bool m_isHovered; SelectionType m_selectionType; bool m_transformationMode; - bool m_hasShape; DraftImage m_image; qreal m_pixmapWidth; qreal m_pixmapHeight;