diff options
Diffstat (limited to 'examples/addressbook/centralwidget.cpp')
-rw-r--r-- | examples/addressbook/centralwidget.cpp | 351 |
1 files changed, 351 insertions, 0 deletions
diff --git a/examples/addressbook/centralwidget.cpp b/examples/addressbook/centralwidget.cpp new file mode 100644 index 0000000..195cb14 --- /dev/null +++ b/examples/addressbook/centralwidget.cpp @@ -0,0 +1,351 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "centralwidget.h" + +#include <qtabwidget.h> +#include <qlistview.h> +#include <qlayout.h> +#include <qwidget.h> +#include <qlabel.h> +#include <qpushbutton.h> +#include <qlineedit.h> +#include <qlabel.h> +#include <qcheckbox.h> +#include <qfile.h> +#include <qtextstream.h> + +ABCentralWidget::ABCentralWidget( QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + mainGrid = new QGridLayout( this, 2, 1, 5, 5 ); + + setupTabWidget(); + setupListView(); + + mainGrid->setRowStretch( 0, 0 ); + mainGrid->setRowStretch( 1, 1 ); +} + +void ABCentralWidget::save( const QString &filename ) +{ + if ( !listView->firstChild() ) + return; + + QFile f( filename ); + if ( !f.open( IO_WriteOnly ) ) + return; + + QTextStream t( &f ); + t.setEncoding(QTextStream::UnicodeUTF8); + + QListViewItemIterator it( listView ); + + for ( ; it.current(); ++it ) + for ( unsigned int i = 0; i < 4; i++ ) + t << it.current()->text( i ) << "\n"; + + f.close(); +} + +void ABCentralWidget::load( const QString &filename ) +{ + listView->clear(); + + QFile f( filename ); + if ( !f.open( IO_ReadOnly ) ) + return; + + QTextStream t( &f ); + t.setEncoding(QTextStream::UnicodeUTF8); + + while ( !t.atEnd() ) { + QListViewItem *item = new QListViewItem( listView ); + for ( unsigned int i = 0; i < 4; i++ ) + item->setText( i, t.readLine() ); + } + + f.close(); +} + +void ABCentralWidget::setupTabWidget() +{ + tabWidget = new QTabWidget( this ); + + QWidget *input = new QWidget( tabWidget ); + QGridLayout *grid1 = new QGridLayout( input, 2, 5, 5, 5 ); + + QLabel *liFirstName = new QLabel( "First &Name", input ); + liFirstName->resize( liFirstName->sizeHint() ); + grid1->addWidget( liFirstName, 0, 0 ); + + QLabel *liLastName = new QLabel( "&Last Name", input ); + liLastName->resize( liLastName->sizeHint() ); + grid1->addWidget( liLastName, 0, 1 ); + + QLabel *liAddress = new QLabel( "Add&ress", input ); + liAddress->resize( liAddress->sizeHint() ); + grid1->addWidget( liAddress, 0, 2 ); + + QLabel *liEMail = new QLabel( "&E-Mail", input ); + liEMail->resize( liEMail->sizeHint() ); + grid1->addWidget( liEMail, 0, 3 ); + + add = new QPushButton( "A&dd", input ); + add->resize( add->sizeHint() ); + grid1->addWidget( add, 0, 4 ); + connect( add, SIGNAL( clicked() ), this, SLOT( addEntry() ) ); + + iFirstName = new QLineEdit( input ); + iFirstName->resize( iFirstName->sizeHint() ); + grid1->addWidget( iFirstName, 1, 0 ); + liFirstName->setBuddy( iFirstName ); + + iLastName = new QLineEdit( input ); + iLastName->resize( iLastName->sizeHint() ); + grid1->addWidget( iLastName, 1, 1 ); + liLastName->setBuddy( iLastName ); + + iAddress = new QLineEdit( input ); + iAddress->resize( iAddress->sizeHint() ); + grid1->addWidget( iAddress, 1, 2 ); + liAddress->setBuddy( iAddress ); + + iEMail = new QLineEdit( input ); + iEMail->resize( iEMail->sizeHint() ); + grid1->addWidget( iEMail, 1, 3 ); + liEMail->setBuddy( iEMail ); + + change = new QPushButton( "&Change", input ); + change->resize( change->sizeHint() ); + grid1->addWidget( change, 1, 4 ); + connect( change, SIGNAL( clicked() ), this, SLOT( changeEntry() ) ); + + tabWidget->addTab( input, "&Add/Change Entry" ); + + // -------------------------------------- + + QWidget *search = new QWidget( this ); + QGridLayout *grid2 = new QGridLayout( search, 2, 5, 5, 5 ); + + cFirstName = new QCheckBox( "First &Name", search ); + cFirstName->resize( cFirstName->sizeHint() ); + grid2->addWidget( cFirstName, 0, 0 ); + connect( cFirstName, SIGNAL( clicked() ), this, SLOT( toggleFirstName() ) ); + + cLastName = new QCheckBox( "&Last Name", search ); + cLastName->resize( cLastName->sizeHint() ); + grid2->addWidget( cLastName, 0, 1 ); + connect( cLastName, SIGNAL( clicked() ), this, SLOT( toggleLastName() ) ); + + cAddress = new QCheckBox( "Add&ress", search ); + cAddress->resize( cAddress->sizeHint() ); + grid2->addWidget( cAddress, 0, 2 ); + connect( cAddress, SIGNAL( clicked() ), this, SLOT( toggleAddress() ) ); + + cEMail = new QCheckBox( "&E-Mail", search ); + cEMail->resize( cEMail->sizeHint() ); + grid2->addWidget( cEMail, 0, 3 ); + connect( cEMail, SIGNAL( clicked() ), this, SLOT( toggleEMail() ) ); + + sFirstName = new QLineEdit( search ); + sFirstName->resize( sFirstName->sizeHint() ); + grid2->addWidget( sFirstName, 1, 0 ); + + sLastName = new QLineEdit( search ); + sLastName->resize( sLastName->sizeHint() ); + grid2->addWidget( sLastName, 1, 1 ); + + sAddress = new QLineEdit( search ); + sAddress->resize( sAddress->sizeHint() ); + grid2->addWidget( sAddress, 1, 2 ); + + sEMail = new QLineEdit( search ); + sEMail->resize( sEMail->sizeHint() ); + grid2->addWidget( sEMail, 1, 3 ); + + find = new QPushButton( "F&ind", search ); + find->resize( find->sizeHint() ); + grid2->addWidget( find, 1, 4 ); + connect( find, SIGNAL( clicked() ), this, SLOT( findEntries() ) ); + + cFirstName->setChecked( TRUE ); + sFirstName->setEnabled( TRUE ); + sLastName->setEnabled( FALSE ); + sAddress->setEnabled( FALSE ); + sEMail->setEnabled( FALSE ); + + tabWidget->addTab( search, "&Search" ); + + mainGrid->addWidget( tabWidget, 0, 0 ); +} + +void ABCentralWidget::setupListView() +{ + listView = new QListView( this ); + listView->addColumn( "First Name" ); + listView->addColumn( "Last Name" ); + listView->addColumn( "Address" ); + listView->addColumn( "E-Mail" ); + + listView->setSelectionMode( QListView::Single ); + + connect( listView, SIGNAL( clicked( QListViewItem* ) ), this, SLOT( itemSelected( QListViewItem* ) ) ); + + mainGrid->addWidget( listView, 1, 0 ); + listView->setAllColumnsShowFocus( TRUE ); +} + +void ABCentralWidget::addEntry() +{ + if ( !iFirstName->text().isEmpty() || !iLastName->text().isEmpty() || + !iAddress->text().isEmpty() || !iEMail->text().isEmpty() ) { + QListViewItem *item = new QListViewItem( listView ); + item->setText( 0, iFirstName->text() ); + item->setText( 1, iLastName->text() ); + item->setText( 2, iAddress->text() ); + item->setText( 3, iEMail->text() ); + } + + iFirstName->setText( "" ); + iLastName->setText( "" ); + iAddress->setText( "" ); + iEMail->setText( "" ); +} + +void ABCentralWidget::changeEntry() +{ + QListViewItem *item = listView->currentItem(); + + if ( item && + ( !iFirstName->text().isEmpty() || !iLastName->text().isEmpty() || + !iAddress->text().isEmpty() || !iEMail->text().isEmpty() ) ) { + item->setText( 0, iFirstName->text() ); + item->setText( 1, iLastName->text() ); + item->setText( 2, iAddress->text() ); + item->setText( 3, iEMail->text() ); + } +} + +void ABCentralWidget::selectionChanged() +{ + iFirstName->setText( "" ); + iLastName->setText( "" ); + iAddress->setText( "" ); + iEMail->setText( "" ); +} + +void ABCentralWidget::itemSelected( QListViewItem *item ) +{ + if ( !item ) + return; + item->setSelected( TRUE ); + item->repaint(); + + iFirstName->setText( item->text( 0 ) ); + iLastName->setText( item->text( 1 ) ); + iAddress->setText( item->text( 2 ) ); + iEMail->setText( item->text( 3 ) ); +} + +void ABCentralWidget::toggleFirstName() +{ + sFirstName->setText( "" ); + + if ( cFirstName->isChecked() ) { + sFirstName->setEnabled( TRUE ); + sFirstName->setFocus(); + } + else + sFirstName->setEnabled( FALSE ); +} + +void ABCentralWidget::toggleLastName() +{ + sLastName->setText( "" ); + + if ( cLastName->isChecked() ) { + sLastName->setEnabled( TRUE ); + sLastName->setFocus(); + } + else + sLastName->setEnabled( FALSE ); +} + +void ABCentralWidget::toggleAddress() +{ + sAddress->setText( "" ); + + if ( cAddress->isChecked() ) { + sAddress->setEnabled( TRUE ); + sAddress->setFocus(); + } + else + sAddress->setEnabled( FALSE ); +} + +void ABCentralWidget::toggleEMail() +{ + sEMail->setText( "" ); + + if ( cEMail->isChecked() ) { + sEMail->setEnabled( TRUE ); + sEMail->setFocus(); + } + else + sEMail->setEnabled( FALSE ); +} + +void ABCentralWidget::findEntries() +{ + if ( !cFirstName->isChecked() && + !cLastName->isChecked() && + !cAddress->isChecked() && + !cEMail->isChecked() ) { + listView->clearSelection(); + return; + } + + QListViewItemIterator it( listView ); + + for ( ; it.current(); ++it ) { + bool select = TRUE; + + if ( cFirstName->isChecked() ) { + if ( select && it.current()->text( 0 ).contains( sFirstName->text() ) ) + select = TRUE; + else + select = FALSE; + } + if ( cLastName->isChecked() ) { + if ( select && it.current()->text( 1 ).contains( sLastName->text() ) ) + select = TRUE; + else + select = FALSE; + } + if ( cAddress->isChecked() ) { + if ( select && it.current()->text( 2 ).contains( sAddress->text() ) ) + select = TRUE; + else + select = FALSE; + } + if ( cEMail->isChecked() ) { + if ( select && it.current()->text( 3 ).contains( sEMail->text() ) ) + select = TRUE; + else + select = FALSE; + } + + if ( select ) + it.current()->setSelected( TRUE ); + else + it.current()->setSelected( FALSE ); + it.current()->repaint(); + } +} |