diff --git a/libs/ui/dialogs/kis_dlg_file_layer.h b/libs/ui/dialogs/kis_dlg_file_layer.h --- a/libs/ui/dialogs/kis_dlg_file_layer.h +++ b/libs/ui/dialogs/kis_dlg_file_layer.h @@ -48,6 +48,9 @@ QString layerName() const; KisFileLayer::ScalingMethod scaleToImageResolution() const; + void setFileName(QString fileName); + void setScalingMethod(KisFileLayer::ScalingMethod method); + protected Q_SLOTS: void slotNameChanged(const QString &); diff --git a/libs/ui/dialogs/kis_dlg_file_layer.cpp b/libs/ui/dialogs/kis_dlg_file_layer.cpp --- a/libs/ui/dialogs/kis_dlg_file_layer.cpp +++ b/libs/ui/dialogs/kis_dlg_file_layer.cpp @@ -80,6 +80,25 @@ } } +void KisDlgFileLayer::setFileName(QString fileName) +{ + dlgWidget.wdgUrlRequester->setFileName(fileName); +} + +void KisDlgFileLayer::setScalingMethod(KisFileLayer::ScalingMethod method) +{ + dlgWidget.radioDontScale->setChecked(false); + dlgWidget.radioScaleToImageSize->setChecked(false); + dlgWidget.radioScalePPI->setChecked(false); + if (method == KisFileLayer::None) { + dlgWidget.radioDontScale->setChecked(true); + } else if (method == KisFileLayer::ToImageSize) { + dlgWidget.radioScaleToImageSize->setChecked(true); + } else { + dlgWidget.radioScalePPI->setChecked(true); + } +} + QString KisDlgFileLayer::fileName() const { QString path = dlgWidget.wdgUrlRequester->fileName(); diff --git a/libs/ui/kis_file_layer.h b/libs/ui/kis_file_layer.h --- a/libs/ui/kis_file_layer.h +++ b/libs/ui/kis_file_layer.h @@ -61,6 +61,7 @@ void openFile() const; ScalingMethod scalingMethod() const; + void setScalingMethod(ScalingMethod method); KisNodeSP clone() const override; bool allowAsChild(KisNodeSP) const override; diff --git a/libs/ui/kis_file_layer.cpp b/libs/ui/kis_file_layer.cpp --- a/libs/ui/kis_file_layer.cpp +++ b/libs/ui/kis_file_layer.cpp @@ -168,6 +168,11 @@ return m_scalingMethod; } +void KisFileLayer::setScalingMethod(ScalingMethod method) +{ + m_scalingMethod = method; +} + void KisFileLayer::slotLoadingFinished(KisPaintDeviceSP projection, int xRes, int yRes) { qint32 oldX = x(); diff --git a/libs/ui/kis_layer_manager.cc b/libs/ui/kis_layer_manager.cc --- a/libs/ui/kis_layer_manager.cc +++ b/libs/ui/kis_layer_manager.cc @@ -246,6 +246,7 @@ KisAdjustmentLayerSP alayer = KisAdjustmentLayerSP(dynamic_cast(layer.data())); KisGeneratorLayerSP glayer = KisGeneratorLayerSP(dynamic_cast(layer.data())); + KisFileLayer *flayer = dynamic_cast(layer.data()); if (alayer && !multipleLayersSelected) { @@ -328,6 +329,29 @@ } } + } else if (flayer && !multipleLayersSelected){ + QString basePath = QFileInfo(m_view->document()->url().toLocalFile()).absolutePath(); + QString fileNameOld = flayer->fileName(); + KisFileLayer::ScalingMethod scalingMethodOld = flayer->scalingMethod(); + KisDlgFileLayer dlg(basePath, flayer->name(), m_view->mainWindow()); + dlg.setFileName(fileNameOld); + dlg.setScalingMethod(scalingMethodOld); + + if (dlg.exec() == QDialog::Accepted) { + flayer->setName(dlg.layerName()); + KisFileLayer::ScalingMethod scalingMethod = dlg.scaleToImageResolution(); + flayer->setScalingMethod(scalingMethod); + QString fileName = dlg.fileName(); + + if(fileName.isEmpty()){ + QMessageBox::critical(m_view->mainWindow(), i18nc("@title:window", "Krita"), i18n("No file name specified")); + return; + } + flayer->setFileName(basePath, fileName); + + //We can technically implement undo for these changes, but I am not sure how relevant that is? + m_view->document()->setModified(true); + } } else { // If layer == normal painting layer, vector layer, or group layer QList selectedNodes = m_view->nodeManager()->selectedNodes();