File indexing completed on 2024-06-16 04:16:27
0001 /* 0002 * dlg_imagesplit.cc - part of KimageShop^WKrayon^WKrita 0003 * 0004 * SPDX-FileCopyrightText: 2009 Boudewijn Rempt <boud@valdyas.org> 0005 * SPDX-FileCopyrightText: 2011 Srikanth Tiyyagura <srikanth.tulasiram@gmail.com> 0006 * 0007 * SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #include "dlg_imagesplit.h" 0011 0012 #include <klocalizedstring.h> 0013 #include <kis_debug.h> 0014 0015 #include <KisViewManager.h> 0016 #include <kis_image.h> 0017 #include <kis_paint_device.h> 0018 #include <QPainter> 0019 0020 DlgImagesplit::DlgImagesplit(KisViewManager* view 0021 , const QString &suffix 0022 , QStringList listMimeFilter 0023 , int defaultMimeIndex, QImage thumbnail 0024 , QList<qreal> hGuides 0025 , QList<qreal> vGuides, qreal thumbnailRatio) 0026 : KoDialog(view->mainWindowAsQWidget()) 0027 { 0028 m_page = new WdgImagesplit(this); 0029 m_thumbnail = thumbnail; 0030 m_horizontalGuides = hGuides; 0031 m_verticalGuides = vGuides; 0032 m_thumbnailRatio = thumbnailRatio; 0033 0034 setCaption(i18n("Image Split")); 0035 setButtons(Apply | Close); 0036 setDefaultButton(Apply); 0037 0038 connect(this, SIGNAL(applyClicked()), this, SLOT(applyClicked())); 0039 0040 setMainWidget(m_page); 0041 m_page->lineEdit->setText(suffix); 0042 m_page->cmbFileType->clear(); 0043 m_page->cmbFileType->addItems(listMimeFilter); 0044 m_page->cmbFileType->setCurrentIndex(defaultMimeIndex); 0045 cmbIndex = defaultMimeIndex; 0046 0047 connect(m_page->chkAutoSave, SIGNAL(stateChanged(int)), SLOT(lineEditEnable())); 0048 connect(m_page->cmbFileType, SIGNAL(activated(int)), this, SLOT(setMimeType(int))); 0049 connect(m_page->chkGuidesHorizontal, SIGNAL(toggled(bool)), m_page->intHorizontalSplitLines, SLOT(setDisabled(bool))); 0050 connect(m_page->chkGuidesVertical, SIGNAL(toggled(bool)), m_page->intVerticalSplitLines, SLOT(setDisabled(bool))); 0051 0052 connect(m_page->intVerticalSplitLines, SIGNAL(valueChanged(int)), SLOT(updatePreview())); 0053 connect(m_page->intHorizontalSplitLines, SIGNAL(valueChanged(int)), SLOT(updatePreview())); 0054 connect(m_page->chkGuidesHorizontal, SIGNAL(toggled(bool)), SLOT(updatePreview())); 0055 connect(m_page->chkGuidesVertical, SIGNAL(toggled(bool)), SLOT(updatePreview())); 0056 0057 updatePreview(); 0058 } 0059 0060 DlgImagesplit::~DlgImagesplit() 0061 { 0062 } 0063 0064 void DlgImagesplit::lineEditEnable() 0065 { 0066 if (m_page->chkAutoSave->isChecked()) { 0067 m_page->lblSuffix->setEnabled(true); 0068 m_page->lineEdit->setEnabled(true); 0069 m_page->lblFileType->setEnabled(true); 0070 m_page->cmbFileType->setEnabled(true); 0071 } 0072 else 0073 { 0074 m_page->lblSuffix->setEnabled(false); 0075 m_page->lineEdit->setEnabled(false); 0076 m_page->lblFileType->setEnabled(false); 0077 m_page->cmbFileType->setEnabled(false); 0078 } 0079 0080 } 0081 0082 bool DlgImagesplit::autoSave() 0083 { 0084 if (m_page->chkAutoSave->isChecked()) 0085 return true; 0086 else 0087 return false; 0088 } 0089 0090 bool DlgImagesplit::sortHorizontal() 0091 { 0092 if (m_page->chkHorizontal->isChecked()) 0093 return true; 0094 else 0095 return false; 0096 } 0097 0098 int DlgImagesplit::horizontalLines() 0099 { 0100 return m_page->intHorizontalSplitLines->value(); 0101 } 0102 0103 int DlgImagesplit::verticalLines() 0104 { 0105 return m_page->intVerticalSplitLines->value(); 0106 } 0107 0108 bool DlgImagesplit::useHorizontalGuides() 0109 { 0110 return m_page->chkGuidesHorizontal->isChecked(); 0111 } 0112 0113 bool DlgImagesplit::useVerticalGuides() 0114 { 0115 return m_page->chkGuidesVertical->isChecked(); 0116 } 0117 0118 QString DlgImagesplit::suffix() 0119 { 0120 return m_page->lineEdit->text(); 0121 } 0122 0123 void DlgImagesplit::setMimeType(int index) 0124 { 0125 cmbIndex = index; 0126 } 0127 0128 void DlgImagesplit::updatePreview() 0129 { 0130 QImage img = QImage(200, 200, QImage::Format_RGBA8888); 0131 QPainter painter(&img); 0132 0133 img.fill(palette().window().color()); 0134 QPoint point; 0135 point.setX((img.width()-m_thumbnail.width())*0.5); 0136 point.setY((img.height()-m_thumbnail.height())*0.5); 0137 0138 painter.setOpacity(0.5); 0139 painter.drawImage(point, m_thumbnail); 0140 0141 painter.setOpacity(1.0); 0142 QPen pen = QPen(palette().highlight().color()); 0143 pen.setWidth(1); 0144 painter.setPen(pen); 0145 0146 if (useHorizontalGuides()) { 0147 for (int i = 0; i< m_horizontalGuides.size(); i++) { 0148 int lineY = point.y() + (m_thumbnailRatio *m_horizontalGuides[i]); 0149 painter.drawLine(point.x(), lineY, point.x()+m_thumbnail.width(), lineY); 0150 } 0151 } else { 0152 int rowHeight = m_thumbnail.height()/(horizontalLines()+1); 0153 for (int i = 0; i< horizontalLines(); i++) { 0154 int lineY = point.y()+(rowHeight*(i+1)); 0155 painter.drawLine(point.x(), lineY, point.x()+m_thumbnail.width(), lineY); 0156 } 0157 } 0158 0159 if (useVerticalGuides()) { 0160 for (int i = 0; i< m_verticalGuides.size(); i++) { 0161 int lineX = point.x() + (m_thumbnailRatio *m_verticalGuides[i]); 0162 painter.drawLine(lineX, point.y(), lineX, point.y()+m_thumbnail.height()); 0163 } 0164 } else { 0165 int columnWidth = m_thumbnail.width()/(verticalLines()+1); 0166 for (int i = 0; i< verticalLines(); i++) { 0167 int lineX = point.x()+(columnWidth*(i+1)); 0168 painter.drawLine(lineX, point.y(), lineX, point.y()+m_thumbnail.height()); 0169 } 0170 } 0171 painter.end(); // Otherwise there will always be a copy 0172 0173 m_page->imagePreviewLabel->setPixmap(QPixmap::fromImage(img)); 0174 } 0175 0176 void DlgImagesplit::applyClicked() 0177 { 0178 accept(); 0179 } 0180