File indexing completed on 2024-04-28 04:32:05

0001 /*
0002  * Copyright (C) 2010-2015 by Stephen Allewell
0003  * steve.allewell@gmail.com
0004  *
0005  * This program is free software; you can redistribute it and/or modify
0006  * it under the terms of the GNU General Public License as published by
0007  * the Free Software Foundation; either version 2 of the License, or
0008  * (at your option) any later version.
0009  */
0010 
0011 #include "PatternElementDlg.h"
0012 
0013 #include <KHelpClient>
0014 #include <KLocalizedString>
0015 
0016 #include "Document.h"
0017 #include "Element.h"
0018 #include "SelectArea.h"
0019 
0020 PatternElementDlg::PatternElementDlg(QWidget *parent, PatternElement *patternElement, Document *document, const QMap<int, QList<QRect>> &patternRects)
0021     : QDialog(parent)
0022     , m_patternElement(patternElement)
0023     , m_document(document)
0024     , m_patternRects(patternRects)
0025 {
0026     setWindowModality(Qt::WindowModal);
0027 
0028     setWindowTitle(i18n("Pattern Element Properties"));
0029 
0030     ui.setupUi(this);
0031 
0032     ui.RenderStitchesAs->setItemData(0, Configuration::EnumRenderer_RenderStitchesAs::Stitches);
0033     ui.RenderStitchesAs->setItemData(1, Configuration::EnumRenderer_RenderStitchesAs::BlackWhiteSymbols);
0034     ui.RenderStitchesAs->setItemData(2, Configuration::EnumRenderer_RenderStitchesAs::ColorSymbols);
0035     ui.RenderStitchesAs->setItemData(3, Configuration::EnumRenderer_RenderStitchesAs::ColorBlocks);
0036     ui.RenderStitchesAs->setItemData(4, Configuration::EnumRenderer_RenderStitchesAs::ColorBlocksSymbols);
0037 
0038     ui.RenderBackstitchesAs->setItemData(0, Configuration::EnumRenderer_RenderBackstitchesAs::ColorLines);
0039     ui.RenderBackstitchesAs->setItemData(1, Configuration::EnumRenderer_RenderBackstitchesAs::BlackWhiteSymbols);
0040 
0041     ui.RenderKnotsAs->setItemData(0, Configuration::EnumRenderer_RenderKnotsAs::ColorBlocks);
0042     ui.RenderKnotsAs->setItemData(1, Configuration::EnumRenderer_RenderKnotsAs::ColorSymbols);
0043     ui.RenderKnotsAs->setItemData(2, Configuration::EnumRenderer_RenderKnotsAs::BlackWhiteSymbols);
0044 
0045     ui.FormatScalesAs->setItemData(0, Configuration::EnumEditor_FormatScalesAs::Stitches);
0046     ui.FormatScalesAs->setItemData(1, Configuration::EnumEditor_FormatScalesAs::Inches);
0047     ui.FormatScalesAs->setItemData(2, Configuration::EnumEditor_FormatScalesAs::Centimeters);
0048 
0049     m_selectArea = new SelectArea(ui.PreviewFrame, patternElement, document, patternRects);
0050     ui.PreviewFrame->setWidget(m_selectArea);
0051 
0052     m_selectArea->setPatternRect(patternElement->m_patternRect);
0053     ui.ShowStitches->setChecked(patternElement->m_showStitches);
0054     ui.ShowBackstitches->setChecked(patternElement->m_showBackstitches);
0055     ui.ShowKnots->setChecked(patternElement->m_showKnots);
0056     ui.ShowGrid->setChecked(patternElement->m_showGrid);
0057     ui.ShowScales->setChecked(patternElement->m_showScales);
0058     ui.ShowPlan->setChecked(patternElement->m_showPlan);
0059     ui.FormatScalesAs->setCurrentIndex(ui.FormatScalesAs->findData(patternElement->m_formatScalesAs));
0060     ui.RenderStitchesAs->setCurrentIndex(ui.RenderStitchesAs->findData(patternElement->m_renderStitchesAs));
0061     ui.RenderBackstitchesAs->setCurrentIndex(ui.RenderBackstitchesAs->findData(patternElement->m_renderBackstitchesAs));
0062     ui.RenderKnotsAs->setCurrentIndex(ui.RenderKnotsAs->findData(patternElement->m_renderKnotsAs));
0063 }
0064 
0065 bool PatternElementDlg::showPlan() const
0066 {
0067     return ui.ShowPlan->isChecked();
0068 }
0069 
0070 PlanElement *PatternElementDlg::planElement() const
0071 {
0072     return m_patternElement->m_planElement;
0073 }
0074 
0075 void PatternElementDlg::hideEvent(QHideEvent *event)
0076 {
0077     KConfigGroup(KSharedConfig::openConfig(), QStringLiteral("DialogSizes")).writeEntry(QStringLiteral("PatternElementDlg"), size());
0078 
0079     QDialog::hideEvent(event);
0080 }
0081 
0082 void PatternElementDlg::showEvent(QShowEvent *event)
0083 {
0084     QDialog::showEvent(event);
0085 
0086     if (KConfigGroup(KSharedConfig::openConfig(), QStringLiteral("DialogSizes")).hasKey(QStringLiteral("PatternElementDlg"))) {
0087         resize(KConfigGroup(KSharedConfig::openConfig(), QStringLiteral("DialogSizes")).readEntry(QStringLiteral("PatternElementDlg"), QSize()));
0088     }
0089 }
0090 
0091 void PatternElementDlg::on_DialogButtonBox_accepted()
0092 {
0093     m_patternElement->setPatternRect(m_selectArea->patternRect());
0094     m_patternElement->m_showScales = ui.ShowScales->isChecked();
0095 
0096     if (ui.ShowPlan->isChecked()) {
0097         if (m_patternElement->m_planElement == nullptr) {
0098             m_patternElement->m_planElement = new PlanElement(m_patternElement->parent(), QRect(m_patternElement->rectangle().topLeft(), QSize(25, 25)));
0099         }
0100     } else {
0101         if (m_patternElement->m_planElement) {
0102             delete m_patternElement->m_planElement;
0103             m_patternElement->m_planElement = nullptr;
0104         }
0105     }
0106 
0107     if (m_patternElement->m_planElement) {
0108         m_patternElement->m_planElement->setPatternRect(m_patternElement->patternRect());
0109     }
0110 
0111     m_patternElement->m_showPlan = ui.ShowPlan->isChecked();
0112     m_patternElement->m_formatScalesAs =
0113         static_cast<Configuration::EnumEditor_FormatScalesAs::type>(ui.FormatScalesAs->itemData(ui.FormatScalesAs->currentIndex()).toInt());
0114     m_patternElement->setRenderStitchesAs(
0115         static_cast<Configuration::EnumRenderer_RenderStitchesAs::type>(ui.RenderStitchesAs->itemData(ui.RenderStitchesAs->currentIndex()).toInt()));
0116     m_patternElement->setRenderBackstitchesAs(static_cast<Configuration::EnumRenderer_RenderBackstitchesAs::type>(
0117         ui.RenderBackstitchesAs->itemData(ui.RenderBackstitchesAs->currentIndex()).toInt()));
0118     m_patternElement->setRenderKnotsAs(
0119         static_cast<Configuration::EnumRenderer_RenderKnotsAs::type>(ui.RenderKnotsAs->itemData(ui.RenderKnotsAs->currentIndex()).toInt()));
0120     m_patternElement->m_showStitches = ui.ShowStitches->isChecked();
0121     m_patternElement->m_showBackstitches = ui.ShowBackstitches->isChecked();
0122     m_patternElement->m_showKnots = ui.ShowKnots->isChecked();
0123     m_patternElement->m_showGrid = ui.ShowGrid->isChecked();
0124 
0125     accept();
0126 }
0127 
0128 void PatternElementDlg::on_DialogButtonBox_rejected()
0129 {
0130     reject();
0131 }
0132 
0133 void PatternElementDlg::on_DialogButtonBox_helpRequested()
0134 {
0135     KHelpClient::invokeHelp(QStringLiteral("PatternElement"), QStringLiteral("kxstitch"));
0136 }
0137 
0138 #include "moc_PatternElementDlg.cpp"