File indexing completed on 2024-04-21 05:49:00

0001 /*
0002    SPDX-FileCopyrightText: 2010 Marco Mentasti <marcomentasti@gmail.com>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #include "exportwizard.h"
0008 #include "dataoutputwidget.h"
0009 
0010 #include <KLineEdit>
0011 #include <KLocalizedString>
0012 #include <KUrlRequester>
0013 #include <kio_version.h>
0014 
0015 #include <QCheckBox>
0016 #include <QFormLayout>
0017 #include <QGridLayout>
0018 #include <QGroupBox>
0019 #include <QLabel>
0020 #include <QRadioButton>
0021 
0022 // BEGIN ExportWizard
0023 ExportWizard::ExportWizard(QWidget *parent)
0024     : QWizard(parent)
0025 {
0026     setWindowTitle(i18nc("@title:window", "Export Wizard"));
0027 
0028     addPage(new ExportOutputPage(this));
0029     addPage(new ExportFormatPage(this));
0030 }
0031 
0032 ExportWizard::~ExportWizard()
0033 {
0034 }
0035 // END ExportWizard
0036 
0037 // BEGIN ExportOutputPage
0038 ExportOutputPage::ExportOutputPage(QWidget *parent)
0039     : QWizardPage(parent)
0040 {
0041     setTitle(i18nc("@title Wizard page title", "Output Target"));
0042     setSubTitle(i18nc("@title Wizard page subtitle", "Select the output target."));
0043 
0044     QVBoxLayout *layout = new QVBoxLayout();
0045 
0046     documentRadioButton = new QRadioButton(i18nc("@option:radio Output target", "Current document"), this);
0047     clipboardRadioButton = new QRadioButton(i18nc("@option:radio Output target", "Clipboard"), this);
0048     fileRadioButton = new QRadioButton(i18nc("@option:radio Output target", "File"), this);
0049 
0050     QHBoxLayout *fileLayout = new QHBoxLayout();
0051     fileLayout->setContentsMargins(20, 0, 0, 0);
0052 
0053     fileUrl = new KUrlRequester(this);
0054     fileUrl->setMode(KFile::File);
0055     fileUrl->setNameFilters({i18n("Comma Separated Values") + QLatin1String(" (*.csv)"), i18n("All files") + QLatin1String(" (*)")});
0056 
0057     fileLayout->addWidget(fileUrl);
0058 
0059     layout->addWidget(documentRadioButton);
0060     layout->addWidget(clipboardRadioButton);
0061     layout->addWidget(fileRadioButton);
0062     layout->addLayout(fileLayout);
0063 
0064     setLayout(layout);
0065 
0066     registerField(QStringLiteral("outDocument"), documentRadioButton);
0067     registerField(QStringLiteral("outClipboard"), clipboardRadioButton);
0068     registerField(QStringLiteral("outFile"), fileRadioButton);
0069     registerField(QStringLiteral("outFileUrl"), fileUrl, "text");
0070 
0071     connect(fileRadioButton, &QRadioButton::toggled, fileUrl, &KUrlRequester::setEnabled);
0072 }
0073 
0074 void ExportOutputPage::initializePage()
0075 {
0076     documentRadioButton->setChecked(true);
0077     fileUrl->setEnabled(false);
0078 }
0079 
0080 bool ExportOutputPage::validatePage()
0081 {
0082     if (fileRadioButton->isChecked() && fileUrl->text().isEmpty()) {
0083         fileUrl->setFocus();
0084         return false;
0085     }
0086 
0087     /// TODO: check url validity
0088 
0089     return true;
0090 }
0091 // END ExportOutputPage
0092 
0093 // BEGIN ExportFormatPage
0094 ExportFormatPage::ExportFormatPage(QWidget *parent)
0095     : QWizardPage(parent)
0096 {
0097     setTitle(i18nc("@title Wizard page title", "Fields Format"));
0098     setSubTitle(i18nc("@title Wizard page subtitle", "Select fields format.\nClick on \"Finish\" button to export data."));
0099 
0100     QVBoxLayout *layout = new QVBoxLayout();
0101 
0102     QGroupBox *headersGroupBox = new QGroupBox(i18nc("@title:group", "Headers"), this);
0103     QVBoxLayout *headersLayout = new QVBoxLayout();
0104 
0105     exportColumnNamesCheckBox = new QCheckBox(i18nc("@option:check", "Export column names"), headersGroupBox);
0106     exportLineNumbersCheckBox = new QCheckBox(i18nc("@option:check", "Export line numbers"), headersGroupBox);
0107 
0108     headersLayout->addWidget(exportColumnNamesCheckBox);
0109     headersLayout->addWidget(exportLineNumbersCheckBox);
0110 
0111     headersGroupBox->setLayout(headersLayout);
0112 
0113     QGroupBox *quoteGroupBox = new QGroupBox(i18nc("@title:group", "Quotes"), this);
0114     QGridLayout *quoteLayout = new QGridLayout();
0115 
0116     quoteStringsCheckBox = new QCheckBox(i18nc("@option:check", "Quote strings"), quoteGroupBox);
0117     quoteNumbersCheckBox = new QCheckBox(i18nc("@option:check", "Quote numbers"), quoteGroupBox);
0118     quoteStringsLine = new KLineEdit(quoteGroupBox);
0119     quoteNumbersLine = new KLineEdit(quoteGroupBox);
0120 
0121     quoteStringsLine->setMaxLength(1);
0122     quoteNumbersLine->setMaxLength(1);
0123 
0124     quoteLayout->addWidget(quoteStringsCheckBox, 0, 0, Qt::AlignLeft | Qt::AlignVCenter);
0125     quoteLayout->addWidget(new QLabel(i18nc("@label:textbox", "Character:")), 0, 1, Qt::AlignRight | Qt::AlignVCenter);
0126     quoteLayout->addWidget(quoteStringsLine, 0, 2, Qt::AlignRight | Qt::AlignVCenter);
0127     quoteLayout->addWidget(quoteNumbersCheckBox, 1, 0, Qt::AlignLeft | Qt::AlignVCenter);
0128     quoteLayout->addWidget(new QLabel(i18nc("@label:textbox", "Character:")), 1, 1, Qt::AlignRight | Qt::AlignVCenter);
0129     quoteLayout->addWidget(quoteNumbersLine, 1, 2, Qt::AlignRight | Qt::AlignVCenter);
0130     quoteLayout->setColumnStretch(1, 1);
0131 
0132     quoteGroupBox->setLayout(quoteLayout);
0133 
0134     QGroupBox *delimitersGroupBox = new QGroupBox(i18nc("@title:group", "Delimiters"), this);
0135     QFormLayout *delimitersLayout = new QFormLayout();
0136 
0137     fieldDelimiterLine = new KLineEdit(delimitersGroupBox);
0138     fieldDelimiterLine->setMaxLength(3);
0139 
0140     delimitersLayout->addRow(i18nc("@label:textbox", "Field delimiter:"), fieldDelimiterLine);
0141 
0142     delimitersGroupBox->setLayout(delimitersLayout);
0143 
0144     layout->addWidget(headersGroupBox);
0145     layout->addWidget(quoteGroupBox);
0146     layout->addWidget(delimitersGroupBox);
0147 
0148     setLayout(layout);
0149 
0150     registerField(QStringLiteral("exportColumnNames"), exportColumnNamesCheckBox);
0151     registerField(QStringLiteral("exportLineNumbers"), exportLineNumbersCheckBox);
0152     registerField(QStringLiteral("checkQuoteStrings"), quoteStringsCheckBox);
0153     registerField(QStringLiteral("checkQuoteNumbers"), quoteNumbersCheckBox);
0154     registerField(QStringLiteral("quoteStringsChar"), quoteStringsLine);
0155     registerField(QStringLiteral("quoteNumbersChar"), quoteNumbersLine);
0156     registerField(QStringLiteral("fieldDelimiter*"), fieldDelimiterLine);
0157 
0158     connect(quoteStringsCheckBox, &QCheckBox::toggled, quoteStringsLine, &KLineEdit::setEnabled);
0159     connect(quoteNumbersCheckBox, &QCheckBox::toggled, quoteNumbersLine, &KLineEdit::setEnabled);
0160 }
0161 
0162 void ExportFormatPage::initializePage()
0163 {
0164     exportColumnNamesCheckBox->setChecked(true);
0165     exportLineNumbersCheckBox->setChecked(false);
0166     quoteStringsCheckBox->setChecked(false);
0167     quoteNumbersCheckBox->setChecked(false);
0168     quoteStringsLine->setEnabled(false);
0169     quoteNumbersLine->setEnabled(false);
0170 
0171     quoteStringsLine->setText(QStringLiteral("\""));
0172     quoteNumbersLine->setText(QStringLiteral("\""));
0173     fieldDelimiterLine->setText(QStringLiteral("\\t"));
0174 }
0175 
0176 bool ExportFormatPage::validatePage()
0177 {
0178     if ((quoteStringsCheckBox->isChecked() && quoteStringsLine->text().isEmpty())
0179         || (quoteNumbersCheckBox->isChecked() && quoteNumbersLine->text().isEmpty())) {
0180         return false;
0181     }
0182 
0183     if (fieldDelimiterLine->text().isEmpty()) {
0184         return false;
0185     }
0186 
0187     return true;
0188 }
0189 // END ExportFormatPage
0190 
0191 #include "moc_exportwizard.cpp"