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