File indexing completed on 2025-02-02 04:18:26

0001 /* This file is part of the KDE project
0002  * SPDX-FileCopyrightText: 2013 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "kis_dlg_file_layer.h"
0008 
0009 #include <QLineEdit>
0010 #include <QCheckBox>
0011 #include <QStandardPaths>
0012 
0013 #include <klocalizedstring.h>
0014 
0015 #include <KoFileDialog.h>
0016 #include <KisApplication.h>
0017 #include <KisImportExportManager.h>
0018 #include <kis_file_name_requester.h>
0019 #include <kis_config_widget.h>
0020 #include <kis_paint_device.h>
0021 #include <kis_transaction.h>
0022 #include <kis_node.h>
0023 #include <kis_file_layer.h>
0024 #include <kis_filter_strategy.h>
0025 
0026 KisDlgFileLayer::KisDlgFileLayer(const QString &basePath, const QString & name, QWidget * parent)
0027     : KoDialog(parent)
0028     , m_basePath(basePath)
0029 {
0030     setButtons(Ok | Cancel);
0031     setDefaultButton(Ok);
0032     QWidget * page = new QWidget(this);
0033     dlgWidget.setupUi(page);
0034     QStringList mimes = KisImportExportManager::supportedMimeTypes(KisImportExportManager::Import);
0035     dlgWidget.wdgUrlRequester->setMimeTypeFilters(mimes);
0036     setMainWidget(page);
0037 
0038     //dlgWidget.wdgUrlRequester->setBasePath(m_basePath);
0039     dlgWidget.wdgUrlRequester->setStartDir(m_basePath);
0040 
0041     dlgWidget.txtLayerName->setText(name);
0042 
0043     connect(dlgWidget.wdgUrlRequester, SIGNAL(textChanged(QString)),
0044             SLOT(slotNameChanged(QString)));
0045 
0046     dlgWidget.cmbFilter->setIDList(KisFilterStrategyRegistry::instance()->listKeys());
0047     dlgWidget.cmbFilter->setCurrent("Bicubic");
0048     dlgWidget.cmbFilter->setToolTip(i18nc("@info:tooltip",
0049                                 "<p>Select filtering mode:\n"
0050                                 "<ul>"
0051                                 "<li><b>Nearest neighbor</b> for pixel art. Does not produce new color.</li>"
0052                                 "<li><b>Bilinear</b> for areas with uniform color to avoid artifacts.</li>"
0053                                 "<li><b>Bicubic</b> for smoother results.</li>"
0054                                 "<li><b>Lanczos3</b> for sharp results. May produce aerials.</li>"
0055                                 "</ul></p>"));
0056     connect(dlgWidget.radioDontScale, SIGNAL(toggled(bool)),
0057             this, SLOT(slotMethodChanged(bool)));
0058 
0059     enableButtonOk(false);
0060 }
0061 
0062 void KisDlgFileLayer::slotNameChanged(const QString & text)
0063 {
0064     enableButtonOk(!text.isEmpty());
0065 }
0066 
0067 void KisDlgFileLayer::slotMethodChanged(const bool & value)
0068 {
0069     dlgWidget.cmbFilter->setDisabled(value);
0070 }
0071 
0072 QString KisDlgFileLayer::layerName() const
0073 {
0074     return dlgWidget.txtLayerName->text();
0075 }
0076 
0077 KisFileLayer::ScalingMethod KisDlgFileLayer::scaleToImageResolution() const
0078 {
0079     if (dlgWidget.radioDontScale->isChecked()) {
0080         return KisFileLayer::None;
0081     }
0082     else if (dlgWidget.radioScaleToImageSize->isChecked()) {
0083         return KisFileLayer::ToImageSize;
0084     }
0085     else {
0086         return KisFileLayer::ToImagePPI;
0087     }
0088 }
0089 
0090 QString KisDlgFileLayer::scalingFilter() const
0091 {
0092     return dlgWidget.cmbFilter->currentItem().id();
0093 }
0094 
0095 void KisDlgFileLayer::setFileName(QString fileName)
0096 {
0097     dlgWidget.wdgUrlRequester->setFileName(fileName);
0098 }
0099 
0100 void KisDlgFileLayer::setScalingMethod(KisFileLayer::ScalingMethod method)
0101 {
0102     dlgWidget.radioDontScale->setChecked(false);
0103     dlgWidget.radioScaleToImageSize->setChecked(false);
0104     dlgWidget.radioScalePPI->setChecked(false);
0105     if (method == KisFileLayer::None) {
0106         dlgWidget.radioDontScale->setChecked(true);
0107     } else if (method == KisFileLayer::ToImageSize) {
0108         dlgWidget.radioScaleToImageSize->setChecked(true);
0109     } else {
0110         dlgWidget.radioScalePPI->setChecked(true);
0111     }
0112 }
0113 
0114 void KisDlgFileLayer::setScalingFilter(QString filter)
0115 {
0116     dlgWidget.cmbFilter->setCurrent(filter);
0117 }
0118 
0119 QString KisDlgFileLayer::fileName() const
0120 {
0121     QString path = dlgWidget.wdgUrlRequester->fileName();
0122     QFileInfo fi(path);
0123     if (fi.isSymLink()) {
0124         path = fi.symLinkTarget();
0125         fi = QFileInfo(path);
0126     }
0127     if (!m_basePath.isEmpty() && fi.isAbsolute()) {
0128         QDir directory(m_basePath);
0129         path = directory.relativeFilePath(path);
0130     }
0131 
0132     return path;
0133 }
0134