File indexing completed on 2024-05-05 10:11:56
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"