📄 tableeditorimpl.cpp
字号:
/************************************************************************ Copyright (C) 2000-2001 Trolltech AS. All rights reserved.**** This file is part of Qt Designer.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition** licenses may use this file in accordance with the Qt Commercial License** Agreement provided with the Software.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for** information about Qt Commercial License Agreements.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "tableeditorimpl.h"#ifndef QT_NO_TABLE#include <qtable.h>#endif#include "formwindow.h"#include <qlabel.h>#include <qcombobox.h>#include <qheader.h>#include <qlistbox.h>#include <qlineedit.h>#include <qpushbutton.h>#include "pixmapchooser.h"#include "command.h"#include <qvaluelist.h>#include <qtabwidget.h>#include <qdatatable.h>#include "project.h"#include "metadatabase.h"#include "mainwindow.h"TableEditor::TableEditor( QWidget* parent, QWidget *editWidget, FormWindow *fw, const char* name, bool modal, WFlags fl ) : TableEditorBase( parent, name, modal, fl ),#ifndef QT_NO_TABLE editTable( (QTable*)editWidget ),#endif formWindow( fw ){ connect( buttonHelp, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );#ifndef QT_NO_TABLE labelColumnPixmap->setText( "" ); labelRowPixmap->setText( "" );#ifndef QT_NO_SQL if ( !::qt_cast<QDataTable*>(editTable) ) #endif { labelFields->hide(); comboFields->hide(); labelTable->hide(); labelTableValue->hide(); }#ifndef QT_NO_SQL if ( ::qt_cast<QDataTable*>(editTable) ) { // ## why does this behave weird? // TabWidget->removePage( rows_tab ); // rows_tab->hide(); // ## do this in the meantime... TabWidget->setTabEnabled( rows_tab, FALSE ); } if ( formWindow->project() && ::qt_cast<QDataTable*>(editTable) ) { QStringList lst = MetaDataBase::fakeProperty( editTable, "database" ).toStringList(); if ( lst.count() == 2 && !lst[ 0 ].isEmpty() && !lst[ 1 ].isEmpty() ) { QStringList fields; fields << "<no field>"; fields += formWindow->project()->databaseFieldList( lst[ 0 ], lst[ 1 ] ); comboFields->insertStringList( fields ); } if ( !lst[ 1 ].isEmpty() ) labelTableValue->setText( lst[ 1 ] ); }#endif readFromTable();#endif}TableEditor::~TableEditor(){}void TableEditor::columnDownClicked(){ if ( listColumns->currentItem() == -1 || listColumns->currentItem() == (int)listColumns->count() - 1 || listColumns->count() < 2 ) return; saveFieldMap(); int index = listColumns->currentItem() + 1; QListBoxItem *i = listColumns->item( listColumns->currentItem() ); listColumns->takeItem( i ); listColumns->insertItem( i, index ); listColumns->setCurrentItem( i ); readColumns(); restoreFieldMap(); currentColumnChanged( i );}void TableEditor::columnTextChanged( const QString &s ){ if ( listColumns->currentItem() == -1 ) return; listColumns->blockSignals( TRUE ); listColumns->changeItem( s, listColumns->currentItem() ); listColumns->blockSignals( FALSE );#ifndef QT_NO_TABLE if ( table->horizontalHeader()->iconSet( listColumns->currentItem() ) ) table->horizontalHeader()->setLabel( listColumns->currentItem(), *table->horizontalHeader()->iconSet( listColumns->currentItem() ), s ); else table->horizontalHeader()->setLabel( listColumns->currentItem(), s );#endif}void TableEditor::columnUpClicked(){ if ( listColumns->currentItem() <= 0 || listColumns->count() < 2 ) return; saveFieldMap(); int index = listColumns->currentItem() - 1; QListBoxItem *i = listColumns->item( listColumns->currentItem() ); listColumns->takeItem( i ); listColumns->insertItem( i, index ); listColumns->setCurrentItem( i ); readColumns(); restoreFieldMap(); currentColumnChanged( i );}void TableEditor::currentColumnChanged( QListBoxItem *i ){ if ( !i ) return; editColumnText->blockSignals( TRUE ); editColumnText->setText( i->text() ); if ( i->pixmap() ) labelColumnPixmap->setPixmap( *i->pixmap() ); else labelColumnPixmap->setText( "" ); editColumnText->blockSignals( FALSE );#ifndef QT_NO_SQL if ( ::qt_cast<QDataTable*>(editTable) ) { QString s = *fieldMap.find( listColumns->index( i ) ); if ( s.isEmpty() ) comboFields->setCurrentItem( 0 ); else if ( comboFields->listBox()->findItem( s ) ) comboFields->setCurrentItem( comboFields->listBox()->index( comboFields->listBox()->findItem( s ) ) ); else comboFields->lineEdit()->setText( s ); }#endif}void TableEditor::currentFieldChanged( const QString &s ){ if ( listColumns->currentItem() == -1 ) return; fieldMap.remove( listColumns->currentItem() ); fieldMap.insert( listColumns->currentItem(), s ); editColumnText->blockSignals( TRUE ); //## necessary QString newColText = s.mid(0,1).upper() + s.mid(1); editColumnText->setText( newColText ); columnTextChanged( newColText ); editColumnText->blockSignals( FALSE );}void TableEditor::currentRowChanged( QListBoxItem *i ){ if ( !i ) return; editRowText->blockSignals( TRUE ); editRowText->setText( i->text() ); if ( i->pixmap() ) labelRowPixmap->setPixmap( *i->pixmap() ); else labelRowPixmap->setText( "" ); editRowText->blockSignals( FALSE );}void TableEditor::deleteColumnClicked(){ if ( listColumns->currentItem() == -1 ) return;#ifndef QT_NO_TABLE table->setNumCols( table->numCols() - 1 ); delete listColumns->item( listColumns->currentItem() ); readColumns(); if ( listColumns->firstItem() ) { listColumns->setCurrentItem( listColumns->firstItem() ); listColumns->setSelected( listColumns->firstItem(), TRUE ); }#endif}void TableEditor::deleteRowClicked(){ if ( listRows->currentItem() == -1 ) return;#ifndef QT_NO_TABLE table->setNumRows( table->numRows() - 1 ); delete listRows->item( listRows->currentItem() ); readRows(); if ( listRows->firstItem() ) { listRows->setCurrentItem( listRows->firstItem() ); listRows->setSelected( listRows->firstItem(), TRUE ); }#endif}void TableEditor::newColumnClicked(){#ifndef QT_NO_TABLE table->setNumCols( table->numCols() + 1 ); QMap<QString, bool> m; for ( int i = 0; i < table->numCols() - 1; ++i ) m.insert( table->horizontalHeader()->label( i ), TRUE ); int n = table->numCols() - 1; QString t = QString::number( n ); while ( m.find( t ) != m.end() ) t = QString::number( ++n ); table->horizontalHeader()->setLabel( table->numCols() - 1, t ); listColumns->insertItem( t ); QListBoxItem *item = listColumns->item( listColumns->count() - 1 ); listColumns->setCurrentItem( item ); listColumns->setSelected( item, TRUE );#ifndef QT_NO_SQL if ( ::qt_cast<QDataTable*>(editTable) ) { comboFields->setFocus(); } else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -