diff --git a/libs/ui/kis_layer_manager.cc b/libs/ui/kis_layer_manager.cc index 2f0c344..fd7470f 100644 --- a/libs/ui/kis_layer_manager.cc +++ b/libs/ui/kis_layer_manager.cc @@ -179,9 +179,6 @@ void KisLayerManager::setup(KisActionManager* actionManager) m_convertGroupAnimated = actionManager->createAction("convert_group_to_animated"); connect(m_convertGroupAnimated, SIGNAL(triggered()), this, SLOT(convertGroupToAnimated())); - m_convertLayerFileLayer = actionManager->createAction("convert_layer_to_file_layer"); - connect(m_convertLayerFileLayer, SIGNAL(triggered()), this, SLOT(convertLayerToFileLayer())); - m_imageResizeToLayer = actionManager->createAction("resizeimagetolayer"); connect(m_imageResizeToLayer, SIGNAL(triggered()), this, SLOT(imageResizeToActiveLayer())); @@ -438,7 +435,7 @@ void KisLayerManager::convertGroupToAnimated() m_commandsAdapter->endMacro(); } -void KisLayerManager::convertLayerToFileLayer() +void KisLayerManager::convertLayerToFileLayer(KisNodeSP source) { KisImageSP image = m_view->image(); if (!image) return; @@ -458,14 +455,13 @@ void KisLayerManager::convertLayerToFileLayer() urlRequester->setMimeTypeFilters(listMimeFilter); urlRequester->setFileName(m_view->document()->url().toLocalFile()); if (m_view->document()->url().isLocalFile()) { - urlRequester->setStartDir(QFileInfo(m_view->document()->url().toLocalFile()).absolutePath()); QFileInfo location = QFileInfo(m_view->document()->url().toLocalFile()).baseName(); - location.setFile(location.dir(), location.baseName()+"_"+activeLayer()->name()+".kra"); + location.setFile(location.dir(), location.baseName()+"_"+ source->name()+".kra"); urlRequester->setFileName(location.absoluteFilePath()); } else { - QFileInfo location = QFileInfo(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); - urlRequester->setStartDir(location.absolutePath()); - urlRequester->setFileName(activeLayer()->name()+".kra"); + const QFileInfo location = QFileInfo(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); + const QString proposedFileName = QDir(location.absoluteFilePath()).absoluteFilePath(source->name() + ".kra"); + urlRequester->setFileName(proposedFileName); } layout->addWidget(urlRequester); @@ -482,20 +478,20 @@ void KisLayerManager::convertLayerToFileLayer() mimeType = "image/png"; } - KisNodeSP layer = activeLayer(); + QScopedPointer doc(KisPart::instance()->createDocument()); - QRect bounds = activeLayer()->exactBounds(); + QRect bounds = source->exactBounds(); KisImageSP dst = new KisImage(doc->createUndoStore(), image->width(), image->height(), image->projection()->compositionSourceColorSpace(), - layer->name()); + source->name()); dst->setResolution(image->xRes(), image->yRes()); doc->setFileBatchMode(false); doc->setCurrentImage(dst); - KisNodeSP node = layer->clone(); + KisNodeSP node = source->clone(); dst->addNode(node); dst->initialRefreshGraph(); dst->cropImage(bounds); @@ -508,12 +504,17 @@ void KisLayerManager::convertLayerToFileLayer() } else { QString basePath = QFileInfo(m_view->document()->url().toLocalFile()).absolutePath(); QString relativePath = QDir(basePath).relativeFilePath(path); - KisFileLayer *fileLayer = new KisFileLayer(image, basePath, relativePath, KisFileLayer::None, layer->name(), OPACITY_OPAQUE_U8); + KisFileLayer *fileLayer = new KisFileLayer(image, basePath, relativePath, KisFileLayer::None, source->name(), OPACITY_OPAQUE_U8); fileLayer->setX(bounds.x()); fileLayer->setY(bounds.y()); + + KisNodeSP dstParent = source->parent(); + KisNodeSP dstAboveThis = source->prevSibling(); + + m_commandsAdapter->beginMacro(kundo2_i18n("Convert to a file layer")); - m_commandsAdapter->addNode(fileLayer, layer->parent(), layer); - m_commandsAdapter->removeNode(layer); + m_commandsAdapter->removeNode(source); + m_commandsAdapter->addNode(fileLayer, dstParent, dstAboveThis); m_commandsAdapter->endMacro(); } doc->closeUrl(false); diff --git a/libs/ui/kis_layer_manager.h b/libs/ui/kis_layer_manager.h index 0349c5f..17f9d9c 100644 --- a/libs/ui/kis_layer_manager.h +++ b/libs/ui/kis_layer_manager.h @@ -91,7 +91,7 @@ private Q_SLOTS: void convertNodeToPaintLayer(KisNodeSP source); void convertGroupToAnimated(); - void convertLayerToFileLayer(); + void convertLayerToFileLayer(KisNodeSP source); KisLayerSP addLayer(KisNodeSP activeNode); void addGroupLayer(KisNodeSP activeNode); @@ -125,7 +125,6 @@ private: KisAction *m_imageResizeToLayer; KisAction *m_flattenLayer; KisAction *m_rasterizeLayer; - KisAction *m_convertLayerFileLayer; KisNodeCommandsAdapter* m_commandsAdapter; KisAction *m_layerStyle; diff --git a/libs/ui/kis_node_manager.cpp b/libs/ui/kis_node_manager.cpp index 02b93e0..de463e0 100644 --- a/libs/ui/kis_node_manager.cpp +++ b/libs/ui/kis_node_manager.cpp @@ -592,6 +592,8 @@ void KisNodeManager::convertNode(const QString &nodeType) m_d->commandsAdapter.removeNode(activeNode); m_d->commandsAdapter.endMacro(); + } else if (nodeType == "KisFileLayer") { + m_d->layerManager.convertLayerToFileLayer(activeNode); } else { warnKrita << "Unsupported node conversion type:" << nodeType; } diff --git a/libs/widgets/kis_file_name_requester.cpp b/libs/widgets/kis_file_name_requester.cpp index 966cc46..3942e80 100644 --- a/libs/widgets/kis_file_name_requester.cpp +++ b/libs/widgets/kis_file_name_requester.cpp @@ -49,6 +49,7 @@ void KisFileNameRequester::setStartDir(const QString &path) void KisFileNameRequester::setFileName(const QString &path) { m_ui->txtFileName->setText(path); + m_basePath = path; emit fileSelected(path); }