20#include "kexicsvexportwizard.h"
21#include "kexicsvwidgets.h"
22#include <main/startup/KexiStartupFileDialog.h>
23#include <kexidb/cursor.h>
24#include <kexidb/utils.h>
25#include <core/keximainwindow.h>
26#include <core/kexiproject.h>
27#include <core/kexipartinfo.h>
28#include <core/kexipartmanager.h>
29#include <core/kexiguimsghandler.h>
30#include <kexiutils/utils.h>
31#include <widget/kexicharencodingcombobox.h>
33#include <tqcheckbox.h>
34#include <tqgroupbox.h>
35#include <tqclipboard.h>
36#include <tdeapplication.h>
38#include <kiconloader.h>
39#include <kactivelabel.h>
40#include <kpushbutton.h>
41#include <tdeapplication.h>
48 : KWizard(parent, name)
56 , m_rowCountDetermined(false)
59 if (m_options.mode==KexiCSVExport::Clipboard) {
60 finishButton()->setText(i18n( "Copy"));
64 finishButton()->setText(i18n( "Export"));
68 TQString infoLblFromText;
69 KexiGUIMessageHandler msgh( this);
72 if (m_tableOrQuery-> table()) {
73 if (m_options.mode==KexiCSVExport::Clipboard) {
74 setCaption(i18n( "Copy Data From Table to Clipboard"));
75 infoLblFromText = i18n( "Copying data from table:");
78 setCaption(i18n( "Export Data From Table to CSV File"));
79 infoLblFromText = i18n( "Exporting data from table:");
82 else if (m_tableOrQuery-> query()) {
83 if (m_options.mode==KexiCSVExport::Clipboard) {
84 setCaption(i18n( "Copy Data From Query to Clipboard"));
85 infoLblFromText = i18n( "Copying data from table:");
88 setCaption(i18n( "Export Data From Query to CSV File"));
89 infoLblFromText = i18n( "Exporting data from query:");
94 i18n( "Could not open data for exporting."));
103 if (m_options.mode==KexiCSVExport::File) {
106 KexiStartupFileDialog::Custom | KexiStartupFileDialog::SavingFileBasedDB,
107 this, "m_fileSavePage");
108 m_fileSavePage->setMinimumHeight(kapp->desktop()->height()/2);
112 connect(m_fileSavePage, TQ_SIGNAL(rejected()), this, TQ_SLOT(reject()));
113 addPage(m_fileSavePage, i18n( "Enter Name of File You Want to Save Data To"));
117 m_exportOptionsPage = new TQWidget( this, "m_exportOptionsPage");
118 TQGridLayout *exportOptionsLyr = new TQGridLayout( m_exportOptionsPage, 6, 3,
119 KDialogBase::marginHint(), KDialogBase::spacingHint(), "exportOptionsLyr");
120 m_infoLblFrom = new KexiCSVInfoLabel( infoLblFromText, m_exportOptionsPage );
122 m_tableOrQuery-> table() ? "kexi/table" : "kexi/query");
125 m_infoLblFrom->separator()->hide();
126 exportOptionsLyr->addMultiCellWidget(m_infoLblFrom, 0, 0, 0, 2);
129 (m_options.mode==KexiCSVExport::File) ? i18n( "To CSV file:") : i18n( "To clipboard:"),
132 if (m_options.mode==KexiCSVExport::Clipboard)
133 m_infoLblTo-> setIcon( "edit-paste");
134 exportOptionsLyr->addMultiCellWidget(m_infoLblTo, 1, 1, 0, 2);
136 m_showOptionsButton = new KPushButton(KGuiItem(i18n( "Show Options >>"), "configure"),
137 m_exportOptionsPage);
138 connect(m_showOptionsButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotShowOptionsButtonClicked()));
139 exportOptionsLyr->addMultiCellWidget(m_showOptionsButton, 2, 2, 0, 0);
140 m_showOptionsButton->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
143 m_exportOptionsSection = new TQGroupBox(1,TQt::Vertical, i18n( "Options"), m_exportOptionsPage,
144 "m_exportOptionsSection");
145 m_exportOptionsSection->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
146 exportOptionsLyr->addMultiCellWidget(m_exportOptionsSection, 3, 3, 0, 1);
147 TQWidget *exportOptionsSectionWidget
148 = new TQWidget(m_exportOptionsSection, "exportOptionsSectionWidget");
149 TQGridLayout *exportOptionsSectionLyr = new TQGridLayout( exportOptionsSectionWidget, 5, 2,
150 0, KDialogBase::spacingHint(), "exportOptionsLyr");
154 exportOptionsSectionWidget);
156 exportOptionsSectionLyr->addWidget( m_delimiterWidget, 0, 1 );
157 TQLabel *delimiterLabel = new TQLabel(m_delimiterWidget, i18n( "Delimiter:"), exportOptionsSectionWidget);
158 exportOptionsSectionLyr->addWidget( delimiterLabel, 0, 0 );
161 TQWidget *textQuoteWidget = new TQWidget(exportOptionsSectionWidget);
162 TQHBoxLayout *textQuoteLyr = new TQHBoxLayout(textQuoteWidget);
163 exportOptionsSectionLyr->addWidget(textQuoteWidget, 1, 1);
166 textQuoteLyr->addWidget( m_textQuote );
167 textQuoteLyr->addStretch(0);
168 TQLabel *textQuoteLabel = new TQLabel(m_textQuote, i18n( "Text quote:"), exportOptionsSectionWidget);
169 exportOptionsSectionLyr->addWidget( textQuoteLabel, 1, 0 );
173 m_characterEncodingCombo->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
174 exportOptionsSectionLyr->addWidget( m_characterEncodingCombo, 2, 1 );
175 TQLabel *characterEncodingLabel = new TQLabel(m_characterEncodingCombo, i18n( "Text encoding:"),
176 exportOptionsSectionWidget);
177 exportOptionsSectionLyr->addWidget( characterEncodingLabel, 2, 0 );
180 m_addColumnNamesCheckBox = new TQCheckBox(i18n( "Add column names as the first row"),
181 exportOptionsSectionWidget);
182 m_addColumnNamesCheckBox->setChecked( true);
183 exportOptionsSectionLyr->addWidget( m_addColumnNamesCheckBox, 3, 1 );
185 m_alwaysUseCheckBox = new TQCheckBox(i18n( "Always use above options for exporting"),
186 m_exportOptionsPage);
187 exportOptionsLyr->addMultiCellWidget(m_alwaysUseCheckBox, 4, 4, 0, 1);
189 m_exportOptionsSection->hide();
190 m_alwaysUseCheckBox->hide();
194 exportOptionsLyr->addMultiCell(
195 new TQSpacerItem( 0, 0, TQSizePolicy::Preferred, TQSizePolicy::MinimumExpanding), 5, 5, 0, 1 );
198 addPage(m_exportOptionsPage, m_options.mode==KexiCSVExport::Clipboard ? i18n( "Copying") : i18n( "Exporting"));
199 setFinishEnabled(m_exportOptionsPage, true);
202 kapp->config()->setGroup( "ImportExport");
203 if (m_options.mode!=KexiCSVExport::Clipboard && readBoolEntry( "ShowOptionsInCSVExportDialog", false)) {
205 slotShowOptionsButtonClicked();
207 if ( readBoolEntry( "StoreOptionsForCSVExportDialog", false)) {
209 m_alwaysUseCheckBox->setChecked( true);
212 m_delimiterWidget->setDelimiter(s);
215 s = readEntry( "DefaultEncodingForExportingCSVFiles");
217 m_characterEncodingCombo->setSelectedEncoding(s);
218 m_addColumnNamesCheckBox->setChecked(
225 int width = TQMAX( m_infoLblFrom->leftLabel()->sizeHint().width(),
226 m_infoLblTo->leftLabel()->sizeHint().width());
227 m_infoLblFrom->leftLabel()->setFixedWidth(width);
228 m_infoLblTo->leftLabel()->setFixedWidth(width);
231KexiCSVExportWizard::~KexiCSVExportWizard()
233 delete m_tableOrQuery;
236bool KexiCSVExportWizard::cancelled() const
241void KexiCSVExportWizard::showPage ( TQWidget * page )
243 if (page == m_fileSavePage) {
244 m_fileSavePage->setFocus();
246 else if (page==m_exportOptionsPage) {
247 if (m_options.mode==KexiCSVExport::File)
248 m_infoLblTo->setFileName( m_fileSavePage->currentFileName() );
250 if (!m_rowCountDetermined) {
253 m_rowCountDetermined = true;
258 text += i18n( "(rows: %1, columns: %2)").arg( m_rowCount).arg(columns);
260 text += i18n( "(columns: %1)").arg(columns);
261 m_infoLblFrom->setLabelText(text);
262 TQFontMetrics fm(m_infoLblFrom->fileNameLabel()->font());
263 m_infoLblFrom->fileNameLabel()->setFixedHeight( fm.height() * 2 + fm.lineSpacing() );
265 m_defaultsBtn->show();
268 if (page!=m_exportOptionsPage) {
270 m_defaultsBtn->hide();
273 KWizard::showPage(page);
276void KexiCSVExportWizard::next()
278 if (currentPage() == m_fileSavePage) {
282 finishButton()->setFocus();
288void KexiCSVExportWizard::done( int result)
290 if (TQDialog::Accepted == result) {
292 m_options.fileName = m_fileSavePage->currentFileName();
293 m_options.delimiter = m_delimiterWidget->delimiter();
294 m_options.textQuote = m_textQuote->textQuote();
295 m_options.addColumnNames = m_addColumnNamesCheckBox->isChecked();
296 if (!KexiCSVExport::exportData(*m_tableOrQuery, m_options))
299 else if (TQDialog::Rejected == result) {
304 kapp->config()->setGroup( "ImportExport");
305 if (m_options.mode!=KexiCSVExport::Clipboard)
306 writeEntry( "ShowOptionsInCSVExportDialog", m_exportOptionsSection->isVisible());
307 const bool store = m_alwaysUseCheckBox->isChecked();
308 writeEntry( "StoreOptionsForCSVExportDialog", store);
312 writeEntry( "DefaultDelimiterForExportingCSVFiles", m_delimiterWidget->delimiter());
314 deleteEntry( "DefaultDelimiterForExportingCSVFiles");
316 writeEntry( "DefaultTextQuoteForExportingCSVFiles", m_textQuote->textQuote());
318 deleteEntry( "DefaultTextQuoteForExportingCSVFiles");
319 if (store && !m_characterEncodingCombo->defaultEncodingSelected())
320 writeEntry( "DefaultEncodingForExportingCSVFiles", m_characterEncodingCombo->selectedEncoding());
322 deleteEntry( "DefaultEncodingForExportingCSVFiles");
323 if (store && !m_addColumnNamesCheckBox->isChecked())
324 writeEntry( "AddColumnNamesForExportingCSVFiles", m_addColumnNamesCheckBox->isChecked());
328 KWizard::done(result);
331void KexiCSVExportWizard::slotShowOptionsButtonClicked()
333 if (m_exportOptionsSection->isVisible()) {
334 m_showOptionsButton->setText(i18n( "Show Options >>"));
335 m_exportOptionsSection->hide();
336 m_alwaysUseCheckBox->hide();
338 m_defaultsBtn->hide();
341 m_showOptionsButton->setText(i18n( "Hide Options <<"));
342 m_exportOptionsSection->show();
343 m_alwaysUseCheckBox->show();
345 m_defaultsBtn->show();
351 TQWizard::layOutButtonRow( layout );
355 for (TQLayoutIterator lit( layout->iterator() ); lit.current(); ++lit)
356 l = lit.current()->layout();
357 if ( dynamic_cast<TQBoxLayout* >(l)) {
358 if (!m_defaultsBtn) {
359 m_defaultsBtn = new KPushButton(i18n( "Defaults"), this);
360 TQWidget::setTabOrder(backButton(), m_defaultsBtn);
361 connect(m_defaultsBtn, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotDefaultsButtonClicked()));
363 if (!m_exportOptionsSection->isVisible())
364 m_defaultsBtn->hide();
365 dynamic_cast<TQBoxLayout* >(l)->insertWidget(0, m_defaultsBtn);
369void KexiCSVExportWizard::slotDefaultsButtonClicked()
373 m_addColumnNamesCheckBox->setChecked( true);
377static TQString convertKey( const char *key, KexiCSVExport::Mode mode)
379 TQString _key(TQString::fromLatin1(key));
380 if (mode == KexiCSVExport::Clipboard) {
381 _key.replace( "Exporting", "Copying");
382 _key.replace( "Export", "Copy");
383 _key.replace( "CSVFiles", "CSVToClipboard");
390 return kapp->config()->readBoolEntry(convertKey(key, m_options.mode), defaultValue);
395 return kapp->config()->readEntry(convertKey(key, m_options.mode), defaultValue);
400 kapp->config()->writeEntry(convertKey(key, m_options.mode), value);
405 kapp->config()->writeEntry(convertKey(key, m_options.mode), value);
410 kapp->config()->deleteEntry(convertKey(key, m_options.mode));
415 if (m_options.mode==KexiCSVExport::Clipboard) {
419 return KEXICSV_DEFAULT_CLIPBOARD_DELIMITER;
421 return KEXICSV_DEFAULT_FILE_DELIMITER;
426 if (m_options.mode==KexiCSVExport::Clipboard)
427 return KEXICSV_DEFAULT_CLIPBOARD_TEXT_QUOTE;
428 return KEXICSV_DEFAULT_FILE_TEXT_QUOTE;
431#include "kexicsvexportwizard.moc"
KexiCSVExportWizard(const KexiCSVExport::Options &options, KexiMainWindow *mainWin, TQWidget *parent=0, const char *name=0)
TQString readEntry(const char *key, const TQString &defaultValue=TQString()) Helper like readBoolEntry(const char *, bool), but for TQString values.
void deleteEntry(const char *key) Helper like writeEntry(const char *, bool), but for deleting config entry.
virtual void layOutButtonRow(TQHBoxLayout *layout) reimplemented to add "Defaults" button on the left hand
int m_rowCount Cached row count for a table/query.
TQString defaultDelimiter() const
void writeEntry(const char *key, bool value) Helper, works like kapp->config()->writeEntry(const char*,bool) but if mode is Clipboard,...
bool readBoolEntry(const char *key, bool defaultValue) Helper, works like kapp->config()->readBoolEntry(const char*, bool) but if mode is Clipboard,...
TQString defaultTextQuote() const
Options used in KexiCSVExportWizard contructor.
int itemId Table or query ID.
TQString forceDelimiter Used for "clipboard" mode.
A helper widget showing a short text information with an icon. See ctor for details....
void setIcon(const TQString &iconName) sets icon pixmap to iconName. Used wher setIconForFilename was false in ctor.
A combo box widget providing a list of possible quote characters Used by CSV import and export dialog...
void setTextQuote(const TQString &textQuote) Sets text quote. Only available are: ", ', and empty string.
Combobox widget providing a list of possible character encodings.
void selectDefaultEncoding() Selects default encoding, if present.
QuerySchema * query() const
TableSchema * table() const
TQString captionOrName() const
Kexi's main window interface This interface is implemented by KexiMainWindowImpl class.
virtual KexiProject * project()=0 Project data of currently opened project or NULL if no project here yet.
Information about a Kexi Part (plugin).
TQString itemIcon() const
Info * infoForMimeType(const TQString &mimeType)
KexiDB::Connection * dbConnection() const
Widget for opening/saving files supported by Kexi.
void setAdditionalFilters(const TQStringList &mimeTypes) Sets additional filters list, e.g. "text/x-csv".
void setLocationText(const TQString &fn) just sets locationWidget()->setCurrentText(fn) (and something similar on win32)
void setDefaultExtension(const TQString &ext) Sets default extension which will be added after accepting if user didn't provided one.
int rowCount(Connection &conn, const TQString &sql)
KEXI_DB_EXPORT int fieldCount(TableOrQuerySchema &tableOrQuery)
KEXIUTILS_EXPORT TQString stringToFileName(const TQString &string)
KEXICORE_EXPORT KexiPart::Manager & partManager() shared part manager
|