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