1
/**********************************************************************
2
** Copyright (C) 2000-2001 Trolltech AS. All rights reserved.
4
** This file is part of Qt Designer.
6
** This file may be distributed and/or modified under the terms of the
7
** GNU General Public License version 2 as published by the Free Software
8
** Foundation and appearing in the file LICENSE.GPL included in the
9
** packaging of this file.
11
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
12
** licenses may use this file in accordance with the Qt Commercial License
13
** Agreement provided with the Software.
15
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18
** See http://www.trolltech.com/gpl/ for GPL licensing information.
19
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
20
** information about Qt Commercial License Agreements.
22
** Contact info@trolltech.com if any conditions of this licensing are
25
**********************************************************************/
27
#include "tableeditorimpl.h"
31
#include "formwindow.h"
33
#include <qcombobox.h>
36
#include <klineedit.h>
37
#include <qpushbutton.h>
38
#include "pixmapchooser.h"
40
#include <qvaluelist.h>
41
#include <qtabwidget.h>
42
#include <qdatatable.h>
44
#include "metadatabase.h"
45
#include "mainwindow.h"
49
TableEditor::TableEditor( QWidget* parent, QWidget *editWidget, FormWindow *fw, const char* name, bool modal, WFlags fl )
50
: TableEditorBase( parent, name, modal, fl ),
52
editTable( (QTable*)editWidget ),
56
connect( buttonHelp, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
58
labelColumnPixmap->setText( "" );
59
labelRowPixmap->setText( "" );
62
if ( !::qt_cast<QDataTable*>(editTable) )
68
labelTableValue->hide();
71
if ( ::qt_cast<QDataTable*>(editTable) ) {
72
// ## why does this behave weird?
73
// TabWidget->removePage( rows_tab );
75
// ## do this in the meantime...
76
TabWidget->setTabEnabled( rows_tab, FALSE );
79
if ( formWindow->project() && ::qt_cast<QDataTable*>(editTable) ) {
80
QStringList lst = MetaDataBase::fakeProperty( editTable, "database" ).toStringList();
81
if ( lst.count() == 2 && !lst[ 0 ].isEmpty() && !lst[ 1 ].isEmpty() ) {
83
fields << "<no field>";
84
fields += formWindow->project()->databaseFieldList( lst[ 0 ], lst[ 1 ] );
85
comboFields->insertStringList( fields );
87
if ( !lst[ 1 ].isEmpty() )
88
labelTableValue->setText( lst[ 1 ] );
96
TableEditor::~TableEditor()
100
void TableEditor::columnDownClicked()
102
if ( listColumns->currentItem() == -1 ||
103
listColumns->currentItem() == (int)listColumns->count() - 1 ||
104
listColumns->count() < 2 )
107
int index = listColumns->currentItem() + 1;
108
QListBoxItem *i = listColumns->item( listColumns->currentItem() );
109
listColumns->takeItem( i );
110
listColumns->insertItem( i, index );
111
listColumns->setCurrentItem( i );
114
currentColumnChanged( i );
117
void TableEditor::columnTextChanged( const QString &s )
119
if ( listColumns->currentItem() == -1 )
121
listColumns->blockSignals( TRUE );
122
listColumns->changeItem( s, listColumns->currentItem() );
123
listColumns->blockSignals( FALSE );
125
if ( table->horizontalHeader()->iconSet( listColumns->currentItem() ) )
126
table->horizontalHeader()->setLabel( listColumns->currentItem(),
127
*table->horizontalHeader()->iconSet( listColumns->currentItem() ), s );
129
table->horizontalHeader()->setLabel( listColumns->currentItem(), s );
133
void TableEditor::columnUpClicked()
135
if ( listColumns->currentItem() <= 0 ||
136
listColumns->count() < 2 )
139
int index = listColumns->currentItem() - 1;
140
QListBoxItem *i = listColumns->item( listColumns->currentItem() );
141
listColumns->takeItem( i );
142
listColumns->insertItem( i, index );
143
listColumns->setCurrentItem( i );
146
currentColumnChanged( i );
149
void TableEditor::currentColumnChanged( QListBoxItem *i )
153
editColumnText->blockSignals( TRUE );
154
editColumnText->setText( i->text() );
156
labelColumnPixmap->setPixmap( *i->pixmap() );
158
labelColumnPixmap->setText( "" );
159
editColumnText->blockSignals( FALSE );
162
if ( ::qt_cast<QDataTable*>(editTable) ) {
163
QString s = *fieldMap.find( listColumns->index( i ) );
165
comboFields->setCurrentItem( 0 );
166
else if ( comboFields->listBox()->findItem( s ) )
167
comboFields->setCurrentItem( comboFields->listBox()->index( comboFields->listBox()->findItem( s ) ) );
169
comboFields->lineEdit()->setText( s );
174
void TableEditor::currentFieldChanged( const QString &s )
176
if ( listColumns->currentItem() == -1 )
178
fieldMap.remove( listColumns->currentItem() );
179
fieldMap.insert( listColumns->currentItem(), s );
180
editColumnText->blockSignals( TRUE ); //## necessary
181
QString newColText = s.mid(0,1).upper() + s.mid(1);
182
editColumnText->setText( newColText );
183
columnTextChanged( newColText );
184
editColumnText->blockSignals( FALSE );
187
void TableEditor::currentRowChanged( QListBoxItem *i )
191
editRowText->blockSignals( TRUE );
192
editRowText->setText( i->text() );
194
labelRowPixmap->setPixmap( *i->pixmap() );
196
labelRowPixmap->setText( "" );
197
editRowText->blockSignals( FALSE );
200
void TableEditor::deleteColumnClicked()
202
if ( listColumns->currentItem() == -1 )
205
table->setNumCols( table->numCols() - 1 );
206
delete listColumns->item( listColumns->currentItem() );
208
if ( listColumns->firstItem() ) {
209
listColumns->setCurrentItem( listColumns->firstItem() );
210
listColumns->setSelected( listColumns->firstItem(), TRUE );
215
void TableEditor::deleteRowClicked()
217
if ( listRows->currentItem() == -1 )
220
table->setNumRows( table->numRows() - 1 );
221
delete listRows->item( listRows->currentItem() );
223
if ( listRows->firstItem() ) {
224
listRows->setCurrentItem( listRows->firstItem() );
225
listRows->setSelected( listRows->firstItem(), TRUE );
230
void TableEditor::newColumnClicked()
233
table->setNumCols( table->numCols() + 1 );
234
QMap<QString, bool> m;
235
for ( int i = 0; i < table->numCols() - 1; ++i )
236
m.insert( table->horizontalHeader()->label( i ), TRUE );
237
int n = table->numCols() - 1;
238
QString t = QString::number( n );
239
while ( m.find( t ) != m.end() )
240
t = QString::number( ++n );
241
table->horizontalHeader()->setLabel( table->numCols() - 1, t );
242
listColumns->insertItem( t );
243
QListBoxItem *item = listColumns->item( listColumns->count() - 1 );
244
listColumns->setCurrentItem( item );
245
listColumns->setSelected( item, TRUE );
247
if ( ::qt_cast<QDataTable*>(editTable) ) {
248
comboFields->setFocus();
252
editColumnText->setFocus();
253
editColumnText->selectAll();
258
void TableEditor::newRowClicked()
261
table->setNumRows( table->numRows() + 1 );
262
QMap<QString, bool> m;
263
for ( int i = 0; i < table->numRows() - 1; ++i )
264
m.insert( table->verticalHeader()->label( i ), TRUE );
265
int n = table->numRows() - 1;
266
QString t = QString::number( n );
267
while ( m.find( t ) != m.end() )
268
t = QString::number( ++n );
269
table->verticalHeader()->setLabel( table->numRows() - 1, t );
270
listRows->insertItem( t );
271
QListBoxItem *item = listRows->item( listRows->count() - 1 );
272
listRows->setCurrentItem( item );
273
listRows->setSelected( item, TRUE );
277
void TableEditor::okClicked()
283
void TableEditor::rowDownClicked()
285
if ( listRows->currentItem() == -1 ||
286
listRows->currentItem() == (int)listRows->count() - 1 ||
287
listRows->count() < 2 )
289
int index = listRows->currentItem() + 1;
290
QListBoxItem *i = listRows->item( listRows->currentItem() );
291
listRows->takeItem( i );
292
listRows->insertItem( i, index );
293
listRows->setCurrentItem( i );
297
void TableEditor::rowTextChanged( const QString &s )
299
if ( listRows->currentItem() == -1 )
302
listRows->changeItem( s, listRows->currentItem() );
303
if ( table->verticalHeader()->iconSet( listRows->currentItem() ) )
304
table->verticalHeader()->setLabel( listRows->currentItem(),
305
*table->verticalHeader()->iconSet( listRows->currentItem() ), s );
307
table->verticalHeader()->setLabel( listRows->currentItem(), s );
311
void TableEditor::rowUpClicked()
313
if ( listRows->currentItem() <= 0 ||
314
listRows->count() < 2 )
316
int index = listRows->currentItem() - 1;
317
QListBoxItem *i = listRows->item( listRows->currentItem() );
318
listRows->takeItem( i );
319
listRows->insertItem( i, index );
320
listRows->setCurrentItem( i );
324
void TableEditor::applyClicked()
326
QValueList<PopulateTableCommand::Row> rows;
327
QValueList<PopulateTableCommand::Column> cols;
331
for ( i = 0; i < table->horizontalHeader()->count(); ++i ) {
332
PopulateTableCommand::Column col;
333
col.text = table->horizontalHeader()->label( i );
334
if ( table->horizontalHeader()->iconSet( i ) )
335
col.pix = table->horizontalHeader()->iconSet( i )->pixmap();
336
col.field = *fieldMap.find( i );
339
for ( i = 0; i < table->verticalHeader()->count(); ++i ) {
340
PopulateTableCommand::Row row;
341
row.text = table->verticalHeader()->label( i );
342
if ( table->verticalHeader()->iconSet( i ) )
343
row.pix = table->verticalHeader()->iconSet( i )->pixmap();
346
PopulateTableCommand *cmd = new PopulateTableCommand( i18n( "Edit the Rows and Columns of '%1' " ).arg( editTable->name() ),
347
formWindow, editTable, rows, cols );
349
formWindow->commandHistory()->addCommand( cmd );
353
void TableEditor::chooseRowPixmapClicked()
355
if ( listRows->currentItem() == -1 )
358
if ( listRows->item( listRows->currentItem() )->pixmap() )
359
pix = qChoosePixmap( this, formWindow, *listRows->item( listRows->currentItem() )->pixmap() );
361
pix = qChoosePixmap( this, formWindow, QPixmap() );
367
table->verticalHeader()->setLabel( listRows->currentItem(), pix, table->verticalHeader()->label( listRows->currentItem() ) );
368
listRows->changeItem( pix, listRows->currentText(), listRows->currentItem() );
372
void TableEditor::deleteRowPixmapClicked()
374
if ( listRows->currentItem() == -1 )
377
table->verticalHeader()->setLabel( listRows->currentItem(), QPixmap(), table->verticalHeader()->label( listRows->currentItem() ) );
378
listRows->changeItem( listRows->currentText(), listRows->currentItem() );
382
void TableEditor::chooseColPixmapClicked()
384
if ( listColumns->currentItem() == -1 )
387
if ( listColumns->item( listColumns->currentItem() )->pixmap() )
388
pix = qChoosePixmap( this, formWindow, *listColumns->item( listColumns->currentItem() )->pixmap() );
390
pix = qChoosePixmap( this, formWindow, QPixmap() );
395
table->horizontalHeader()->setLabel( listColumns->currentItem(), pix, table->horizontalHeader()->label( listColumns->currentItem() ) );
396
listColumns->changeItem( pix, listColumns->currentText(), listColumns->currentItem() );
400
void TableEditor::deleteColPixmapClicked()
402
if ( listColumns->currentItem() == -1 )
405
table->horizontalHeader()->setLabel( listColumns->currentItem(), QPixmap(), table->horizontalHeader()->label( listColumns->currentItem() ) );
406
listColumns->changeItem( listColumns->currentText(), listColumns->currentItem() );
410
void TableEditor::readFromTable()
413
QHeader *cols = editTable->horizontalHeader();
414
table->setNumCols( cols->count() );
415
QMap<QString, QString> columnFields = MetaDataBase::columnFields( editTable );
416
for ( int i = 0; i < cols->count(); ++i ) {
417
if ( editTable->horizontalHeader()->iconSet( i ) ) {
418
table->horizontalHeader()->setLabel( i, *editTable->horizontalHeader()->iconSet( i ),
419
editTable->horizontalHeader()->label( i ) );
420
listColumns->insertItem( editTable->horizontalHeader()->iconSet( i )->pixmap(),
421
editTable->horizontalHeader()->label( i ) );
423
table->horizontalHeader()->setLabel( i, editTable->horizontalHeader()->label( i ) );
424
listColumns->insertItem( editTable->horizontalHeader()->label( i ) );
426
QString cf = *columnFields.find( editTable->horizontalHeader()->label( i ) );
427
fieldMap.insert( i, cf );
430
if ( listColumns->firstItem() ) {
431
listColumns->setCurrentItem( listColumns->firstItem() );
432
listColumns->setSelected( listColumns->firstItem(), TRUE );
435
QHeader *rows = editTable->verticalHeader();
436
table->setNumRows( rows->count() );
437
for ( int j = 0; j < rows->count(); ++j ) {
438
if ( editTable->verticalHeader()->iconSet( j ) ) {
439
table->verticalHeader()->setLabel( j, *editTable->verticalHeader()->iconSet( j ),
440
editTable->verticalHeader()->label( j ) );
441
listRows->insertItem( editTable->verticalHeader()->iconSet( j )->pixmap(),
442
editTable->verticalHeader()->label( j ) );
444
table->verticalHeader()->setLabel( j, editTable->verticalHeader()->label( j ) );
445
listRows->insertItem( editTable->verticalHeader()->label( j ) );
449
if ( listRows->firstItem() ) {
450
listRows->setCurrentItem( listRows->firstItem() );
451
listRows->setSelected( listRows->firstItem(), TRUE );
456
void TableEditor::readColumns()
460
for ( QListBoxItem *i = listColumns->firstItem(); i; i = i->next(), ++j ) {
462
table->horizontalHeader()->setLabel( j, *i->pixmap(), i->text() );
464
table->horizontalHeader()->setLabel( j, i->text() );
469
void TableEditor::readRows()
473
for ( QListBoxItem *i = listRows->firstItem(); i; i = i->next(), ++j ) {
475
table->verticalHeader()->setLabel( j, *i->pixmap(), i->text() );
477
table->verticalHeader()->setLabel( j, i->text() );
482
void TableEditor::saveFieldMap()
485
for ( QMap<int, QString>::Iterator it = fieldMap.begin(); it != fieldMap.end(); ++it )
486
tmpFieldMap.insert( listColumns->item( it.key() ), *it );
489
void TableEditor::restoreFieldMap()
492
for ( QMap<QListBoxItem*, QString>::Iterator it = tmpFieldMap.begin(); it != tmpFieldMap.end(); ++it )
493
fieldMap.insert( listColumns->index( it.key() ), *it );