#include "CsvExportDialog.h" #include "../strings.h" #include "../dictionary/Dictionary.h" #include "../dictionary/DicCsvWriter.h" CsvExportDialog::CsvExportDialog(QWidget* parent, const Dictionary* dict): CsvDialog(parent), dictionary(dict), dicWriter(new DicCsvWriter(dict)) { init(); setWindowTitle(tr("Export to CSV")); connect( textDelimiterCB, SIGNAL(stateChanged(int)), this, SLOT(updateTextDelimiterCombo()) ); connect( showInvisibleCharsCB, SIGNAL(stateChanged(int)), this, SLOT(UpdateCharVisibility()) ); connect( textDelimiterCB, SIGNAL(stateChanged(int)), this, SLOT(UpdateQuoteAllFieldsCB()) ); connect( usedColsEdit, SIGNAL(textChanged(QString)), this, SLOT(updatePreview()) ); connect( quoteAllFieldsCB, SIGNAL(stateChanged(int)), this, SLOT(updatePreview()) ); connect( writeColumnNamesCB, SIGNAL(stateChanged(int)), this, SLOT(updatePreview()) ); } CsvExportDialog::~CsvExportDialog() { delete dicWriter; } QLayout* CsvExportDialog::createLeftGroupLayout() { QFormLayout* lt = new QFormLayout; lt->addRow(tr("C&haracter set:"), createCharSetCombo()); lt->addRow(tr("Used &columns:"), createUsedColsEdit()); lt->addRow(createWriteColumnNamesBox()); return lt; } QWidget* CsvExportDialog::createUsedColsEdit() { usedColsEdit = new QLineEdit("123"); usedColsEdit->setValidator(new QRegExpValidator(QRegExp("[1-9]+"), this)); return usedColsEdit; } QWidget* CsvExportDialog::createWriteColumnNamesBox() { writeColumnNamesCB = new QCheckBox(tr("Write column &names")); writeColumnNamesCB->setChecked( true ); return writeColumnNamesCB; } QLayout* CsvExportDialog::createSeparatorsLayout() { quoteAllFieldsCB = new QCheckBox(tr("&Quote all fields")); QFormLayout* lt = new QFormLayout; lt->addRow(tr("Field &separator:"), createFieldSeparatorWidget(SpaceChar)); lt->addRow(createTextDelimiterBox(), createTextDelimiterCombo()); lt->addRow(quoteAllFieldsCB); lt->addRow(tr("Co&mment character:"), createCommentCharCombo()); return lt; } QLayout* CsvExportDialog::createPreviewLt() { QVBoxLayout* lt = new QVBoxLayout; lt->addWidget(createPreview()); lt->addWidget(createShowInvisibleBox()); return lt; } QWidget* CsvExportDialog::createPreview() { csvPreview = new QTextEdit; csvPreview->setReadOnly(true); csvPreview->setLineWrapMode( QTextEdit::NoWrap ); csvPreview->setFontPointSize( 10 ); return csvPreview; } QCheckBox* CsvExportDialog::createShowInvisibleBox() { showInvisibleCharsCB = new QCheckBox(tr("Show &invisible characters")); showInvisibleCharsCB->setChecked( false ); return showInvisibleCharsCB; } void CsvExportDialog::UpdateQuoteAllFieldsCB() { quoteAllFieldsCB->setEnabled( textDelimiterCB->isChecked() ); } void CsvExportDialog::updatePreview() { CsvExportData params; params.usedCols = getUsedColumns(); params.fieldSeparators = setCharVisibility( separatorsEdit->text(), false ); params.textDelimiter = getTextDelimiterChar(); params.quoteAllFields = quoteAllFieldsCB->isChecked(); params.commentChar = commentCharCombo->currentText()[0]; params.writeColumnNames = writeColumnNamesCB->isChecked(); QString csvString = dicWriter->toCsvString( params ); csvPreview->setPlainText( setCharVisibility(csvString, showInvisibleCharsCB->isChecked())); } QList CsvExportDialog::getUsedColumns() { QList res; for(int i = 0; i < usedColsEdit->text().length(); i++) { int col = usedColsEdit->text()[i].digitValue(); if(col > 0 && col <= dictionary->fieldsNum()) res << col - 1; } return res; } void CsvExportDialog::SaveCSVToFile( const QString& aFilePath ) { QFile file( aFilePath ); if( !file.open( QIODevice::WriteOnly | QFile::Text ) ) // \r\n --> \n { QMessageBox::warning( this, Strings::errorTitle(), tr("Cannot save to file:\n %1.").arg(aFilePath) ); return; } QTextStream outStream( &file ); outStream.setCodec( getTextCodec() ); outStream << setCharVisibility( csvPreview->toPlainText(), false ); } void CsvExportDialog::UpdateCharVisibility() { csvPreview->setPlainText( setCharVisibility(csvPreview->toPlainText(), showInvisibleCharsCB->isChecked()) ); }