98 files changed, 1095 insertions, 882 deletions
diff --git a/kaddressbook/addresseditwidget.cpp b/kaddressbook/addresseditwidget.cpp index 3dcd592..83908d0 100644 --- a/kaddressbook/addresseditwidget.cpp +++ b/kaddressbook/addresseditwidget.cpp @@ -1,622 +1,629 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ -#include <qbuttongroup.h> +#include <q3buttongroup.h> #include <qcheckbox.h> -#include <qhbox.h> +#include <q3hbox.h> #include <qlabel.h> #include <qlayout.h> -#include <qlistbox.h> -#include <qlistview.h> +#include <q3listbox.h> +#include <q3listview.h> #include <qpushbutton.h> -#include <qsignal.h> +#include <q3signal.h> #include <qstring.h> #include <qapplication.h> +#include <QDesktopWidget> + +#include <Q3VBoxLayout> +#include <Q3GridLayout> #ifndef KAB_EMBEDDED -#include <qtextedit.h> +#include <q3textedit.h> +//Added by qt3to4: +#include <Q3ValueList> +#include <Q3VBoxLayout> #include <kaccelmanager.h> #include <kbuttonbox.h> #else //KAB_EMBEDDED -#include <qmultilineedit.h> +#include <q3multilineedit.h> #endif //KAB_EMBEDDED #include <qtoolbutton.h> #include <qtooltip.h> #include <kapplication.h> #include <kcombobox.h> #include <kconfig.h> #include <kdebug.h> #include <kdialog.h> #include <kiconloader.h> #include <klineedit.h> #include <klistview.h> #include <klocale.h> #include <kglobal.h> #include <kmessagebox.h> #include <kseparator.h> #include "addresseditwidget.h" AddressEditWidget::AddressEditWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { mConfig = AddresseeConfig::instance(); - QVBoxLayout *layout = new QVBoxLayout( this ); + Q3VBoxLayout *layout = new Q3VBoxLayout( this ); layout->setSpacing( KDialog::spacingHintSmall() ); - QHBox *b1 = new QHBox( this); + Q3HBox *b1 = new Q3HBox( this); //QLabel * label = new QLabel( b1 ); //label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop, 0 ) ); //label->setAlignment( AlignCenter); layout->addWidget( b1 ); mTypeCombo = new AddressTypeCombo( mAddressList, b1 ); QPushButton *editButton = new QPushButton( i18n( "&Edit Addresses..." ), b1 ); connect( mTypeCombo, SIGNAL( activated( int ) ), SLOT( updateAddressEdit() ) ); // layout->addWidget( mTypeCombo ); #ifndef KAB_EMBEDDED - mAddressTextEdit = new QTextEdit( this ); + mAddressTextEdit = new Q3TextEdit( this ); mAddressTextEdit->setReadOnly( true ); mAddressTextEdit->setMinimumHeight( 20 ); #else //KAB_EMBEDDED - mAddressTextEdit = new QMultiLineEdit( this ); + mAddressTextEdit = new Q3MultiLineEdit( this ); mAddressTextEdit->setReadOnly( true ); mAddressTextEdit->setMinimumHeight( 20 ); #endif //KAB_EMBEDDED layout->addWidget( mAddressTextEdit ); connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) ); } AddressEditWidget::~AddressEditWidget() { } KABC::Address::List AddressEditWidget::addresses() { KABC::Address::List retList; KABC::Address::List::Iterator it; for ( it = mAddressList.begin(); it != mAddressList.end(); ++it ) if ( !(*it).isEmpty() ) retList.append( *it ); return retList; } void AddressEditWidget::setAddresses( const KABC::Addressee &addr, const KABC::Address::List &list ) { mAddressee = addr; mAddressList.clear(); // Insert types for existing numbers. mTypeCombo->insertTypeList( list ); - QValueList<int> defaultTypes; + Q3ValueList<int> defaultTypes; defaultTypes << KABC::Address::Home; defaultTypes << KABC::Address::Work; mConfig->setUid( mAddressee.uid() ); - QValueList<int> configList = mConfig->noDefaultAddrTypes(); - QValueList<int>::ConstIterator it; + Q3ValueList<int> configList = mConfig->noDefaultAddrTypes(); + Q3ValueList<int>::ConstIterator it; for ( it = configList.begin(); it != configList.end(); ++it ) defaultTypes.remove( *it ); // Insert default types. // Doing this for mPrefCombo is enough because the list is shared by all // combos. for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) { if ( !mTypeCombo->hasType( *it ) ) mTypeCombo->insertType( list, *it, Address( *it ) ); } mTypeCombo->updateTypes(); // find preferred address which will be shown int preferred = KABC::Address::Home; // default if no preferred address set uint i; for (i = 0; i < list.count(); i++) if ( list[i].type() & KABC::Address::Pref ) { preferred = list[i].type(); break; } mTypeCombo->selectType( preferred ); updateAddressEdit(); } void AddressEditWidget::edit() { AddressEditDialog dialog( mAddressList, mTypeCombo->currentItem(), this ); if ( dialog.exec() ) { if ( dialog.changed() ) { mAddressList = dialog.addresses(); bool hasHome = false, hasWork = false; KABC::Address::List::Iterator it; for ( it = mAddressList.begin(); it != mAddressList.end(); ++it ) { if ( (*it).type() == KABC::Address::Home ) { if ( !(*it).isEmpty() ) hasHome = true; } if ( (*it).type() == KABC::Address::Work ) { if ( !(*it).isEmpty() ) hasWork = true; } } mConfig->setUid( mAddressee.uid() ); - QValueList<int> configList; + Q3ValueList<int> configList; if ( !hasHome ) { configList << KABC::Address::Home; } if ( !hasWork ) { configList << KABC::Address::Work; } mConfig->setNoDefaultAddrTypes( configList ); mTypeCombo->updateTypes(); updateAddressEdit(); emit modified(); } } } void AddressEditWidget::updateAddressEdit() { KABC::Address::List::Iterator it = mTypeCombo->selectedElement(); bool block = signalsBlocked(); blockSignals( true ); mAddressTextEdit->setText( "" ); if ( it != mAddressList.end() ) { KABC::Address a = *it; if ( !a.isEmpty() ) { #if KDE_VERSION >= 319 if ( a.type() & KABC::Address::Work ) { mAddressTextEdit->setText( a.formattedAddress( mAddressee.realName(), mAddressee.organization() ) ); } else { mAddressTextEdit->setText( a.formattedAddress( mAddressee.realName() ) ); } #else QString text; if ( !a.street().isEmpty() ) text += a.street() + "\n"; if ( !a.postOfficeBox().isEmpty() ) text += a.postOfficeBox() + "\n"; text += a.locality() + QString(" ") + a.region(); if ( !a.postalCode().isEmpty() ) text += QString(", ") + a.postalCode(); text += "\n"; if ( !a.country().isEmpty() ) text += a.country() + "\n"; text += a.extended(); mAddressTextEdit->setText( text ); #endif } } blockSignals( block ); } AddressEditDialog::AddressEditDialog( const KABC::Address::List &list, int selected, QWidget *parent, const char *name ) : KDialogBase( Plain, i18n( "Edit Address" ), Ok | Cancel, Ok, parent, name, true, true ), mPreviousAddress( 0 ) { mAddressList = list; QWidget *page = plainPage(); - QGridLayout *topLayout = new QGridLayout( page, 8, 2 ); + Q3GridLayout *topLayout = new Q3GridLayout( page, 8, 2 ); topLayout->setSpacing( spacingHintSmall() ); mTypeCombo = new AddressTypeCombo( mAddressList, page ); topLayout->addMultiCellWidget( mTypeCombo, 0, 0, 0, 1 ); QLabel *label = new QLabel( i18n( "Street:" ), page ); label->setAlignment( Qt::AlignTop | Qt::AlignLeft ); topLayout->addWidget( label, 1, 0 ); #ifndef KAB_EMBEDDED - mStreetTextEdit = new QTextEdit( page ); + mStreetTextEdit = new Q3TextEdit( page ); #else //KAB_EMBEDDED - mStreetTextEdit = new QMultiLineEdit( page ); + mStreetTextEdit = new Q3MultiLineEdit( page ); //US qDebug("AddressEditDialog::AddressEditDialog has to be changed"); #endif //KAB_EMBEDDED label->setBuddy( mStreetTextEdit ); topLayout->addWidget( mStreetTextEdit, 1, 1 ); label = new QLabel( i18n( "Post office box:" ), page ); topLayout->addWidget( label, 2 , 0 ); mPOBoxEdit = new KLineEdit( page ); label->setBuddy( mPOBoxEdit ); topLayout->addWidget( mPOBoxEdit, 2, 1 ); int maxwid = QApplication::desktop()->width(); maxwid -= (spacingHintSmall()+label->sizeHint().width() ); label = new QLabel( i18n( "Locality:" ), page ); topLayout->addWidget( label, 3, 0 ); mLocalityEdit = new KLineEdit( page ); label->setBuddy( mLocalityEdit ); topLayout->addWidget( mLocalityEdit, 3, 1 ); label = new QLabel( i18n( "Region:" ), page ); topLayout->addWidget( label, 4, 0 ); mRegionEdit = new KLineEdit( page ); label->setBuddy( mRegionEdit ); topLayout->addWidget( mRegionEdit, 4, 1 ); label = new QLabel( i18n( "Postal code:" ), page ); topLayout->addWidget( label, 5, 0 ); mPostalCodeEdit = new KLineEdit( page ); label->setBuddy( mPostalCodeEdit ); topLayout->addWidget( mPostalCodeEdit, 5, 1 ); label = new QLabel( i18n( "Country:" ), page ); topLayout->addWidget( label, 6, 0 ); mCountryCombo = new KComboBox( page ); mCountryCombo->setMaximumWidth( maxwid -10 ); mCountryCombo->setEditable( true ); mCountryCombo->setDuplicatesEnabled( false ); mCountryCombo->setAutoCompletion( true ); fillCountryCombo(); label->setBuddy( mCountryCombo ); topLayout->addWidget( mCountryCombo, 6, 1 ); - mCountryCombo->setSizeLimit( 8); + mCountryCombo->setMaxVisibleItems( 8); mPreferredCheckBox = new QCheckBox( i18n( "This is the preferred address" ), page ); topLayout->addMultiCellWidget( mPreferredCheckBox, 7, 7, 0, 1 ); /* KSeparator *sep = new KSeparator( KSeparator::HLine, page ); topLayout->addMultiCellWidget( sep, 8, 8, 0, 1 ); */ - QHBox *buttonBox = new QHBox( page ); + Q3HBox *buttonBox = new Q3HBox( page ); buttonBox->setSpacing( spacingHint() ); topLayout->addMultiCellWidget( buttonBox, 9, 9, 0, 1 ); QPushButton *addButton = new QPushButton( i18n( "New..." ), buttonBox ); connect( addButton, SIGNAL( clicked() ), SLOT( addAddress() ) ); mRemoveButton = new QPushButton( i18n( "Remove" ), buttonBox ); connect( mRemoveButton, SIGNAL( clicked() ), SLOT( removeAddress() ) ); mChangeTypeButton = new QPushButton( i18n( "Change Type" ), buttonBox ); connect( mChangeTypeButton, SIGNAL( clicked() ), SLOT( changeType() ) ); mTypeCombo->updateTypes(); mTypeCombo->setCurrentItem( selected ); updateAddressEdits(); connect( mTypeCombo, SIGNAL( activated( int ) ), SLOT( updateAddressEdits() ) ); connect( mStreetTextEdit, SIGNAL( textChanged() ), SLOT( modified() ) ); connect( mPOBoxEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mLocalityEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mRegionEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mPostalCodeEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mCountryCombo, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mPreferredCheckBox, SIGNAL( toggled( bool ) ), SLOT( modified() ) ); #ifndef KAB_EMBEDDED KAcceleratorManager::manage( this ); #else //KAB_EMBEDDED //US qDebug("AddressEditDialog::AddressEditDialog has to be changed 2"); #endif //KAB_EMBEDDED mChanged = false; bool state = (mAddressList.count() > 0); mRemoveButton->setEnabled( state ); mChangeTypeButton->setEnabled( state ); #ifndef DESKTOP_VERSION showMaximized(); #endif } AddressEditDialog::~AddressEditDialog() { } KABC::Address::List AddressEditDialog::addresses() { saveAddress( *(mTypeCombo->selectedElement()) ); return mAddressList; } bool AddressEditDialog::changed() const { return mChanged; } void AddressEditDialog::addAddress() { AddressTypeDialog dlg( mTypeCombo->selectedType(), this ); if ( dlg.exec() ) { mAddressList.append( Address( dlg.type() ) ); mTypeCombo->updateTypes(); mTypeCombo->setCurrentItem( mTypeCombo->count() - 1 ); updateAddressEdits(); modified(); mRemoveButton->setEnabled( true ); mChangeTypeButton->setEnabled( true ); } } void AddressEditDialog::removeAddress() { if ( mAddressList.count() > 0 ) { KABC::Address::List::Iterator it = mTypeCombo->selectedElement(); if ( mPreviousAddress && mPreviousAddress->id() == (*it).id() ) mPreviousAddress = 0; mAddressList.remove( it ); mTypeCombo->updateTypes(); updateAddressEdits(); modified(); } bool state = ( mAddressList.count() > 0 ); mRemoveButton->setEnabled( state ); mChangeTypeButton->setEnabled( state ); } void AddressEditDialog::changeType() { KABC::Address::List::Iterator a = mTypeCombo->selectedElement(); AddressTypeDialog dlg( (*a).type(), this ); if ( dlg.exec() ) { (*a).setType( dlg.type() ); mTypeCombo->updateTypes(); modified(); } } void AddressEditDialog::updateAddressEdits() { if ( mPreviousAddress ) saveAddress( *mPreviousAddress ); KABC::Address::List::Iterator it = mTypeCombo->selectedElement(); KABC::Address a = *it; mPreviousAddress = &(*it); bool tmp = mChanged; mStreetTextEdit->setText( a.street() ); mRegionEdit->setText( a.region() ); mLocalityEdit->setText( a.locality() ); mPostalCodeEdit->setText( a.postalCode() ); mPOBoxEdit->setText( a.postOfficeBox() ); #ifndef KAB_EMBEDDED mCountryCombo->setCurrentText( a.country() ); #else //KAB_EMBEDDED mCountryCombo->setEditText( a.country() ); //US qDebug("AddressEditDialog::updateAddressEdits has to be changed 1"); #endif //KAB_EMBEDDED mPreferredCheckBox->setChecked( a.type() & KABC::Address::Pref ); mStreetTextEdit->setFocus(); mChanged = tmp; } void AddressEditDialog::modified() { mChanged = true; } void AddressEditDialog::saveAddress( KABC::Address &addr ) { addr.setLocality( mLocalityEdit->text() ); addr.setRegion( mRegionEdit->text() ); addr.setPostalCode( mPostalCodeEdit->text() ); addr.setCountry( mCountryCombo->currentText() ); addr.setPostOfficeBox( mPOBoxEdit->text() ); addr.setStreet( mStreetTextEdit->text() ); if ( mPreferredCheckBox->isChecked() ) { KABC::Address::List::Iterator it; for ( it = mAddressList.begin(); it != mAddressList.end(); ++it ) (*it).setType( (*it).type() & ~( KABC::Address::Pref ) ); addr.setType( addr.type() | KABC::Address::Pref ); } } void AddressEditDialog::fillCountryCombo() { QString country[] = { i18n( "Afghanistan" ), i18n( "Albania" ), i18n( "Algeria" ), i18n( "American Samoa" ), i18n( "Andorra" ), i18n( "Angola" ), i18n( "Anguilla" ), i18n( "Antarctica" ), i18n( "Antigua and Barbuda" ), i18n( "Argentina" ), i18n( "Armenia" ), i18n( "Aruba" ), i18n( "Ashmore and Cartier Islands" ), i18n( "Australia" ), i18n( "Austria" ), i18n( "Azerbaijan" ), i18n( "Bahamas" ), i18n( "Bahrain" ), i18n( "Bangladesh" ), i18n( "Barbados" ), i18n( "Belarus" ), i18n( "Belgium" ), i18n( "Belize" ), i18n( "Benin" ), i18n( "Bermuda" ), i18n( "Bhutan" ), i18n( "Bolivia" ), i18n( "Bosnia and Herzegovina" ), i18n( "Botswana" ), i18n( "Brazil" ), i18n( "Brunei" ), i18n( "Bulgaria" ), i18n( "Burkina Faso" ), i18n( "Burundi" ), i18n( "Cambodia" ), i18n( "Cameroon" ), i18n( "Canada" ), i18n( "Cape Verde" ), i18n( "Cayman Islands" ), i18n( "Central African Republic" ), i18n( "Chad" ), i18n( "Chile" ), i18n( "China" ), i18n( "Colombia" ), i18n( "Comoros" ), i18n( "Congo" ), i18n( "Congo, Dem. Rep." ), i18n( "Costa Rica" ), i18n( "Croatia" ), i18n( "Cuba" ), i18n( "Cyprus" ), i18n( "Czech Republic" ), i18n( "Denmark" ), i18n( "Djibouti" ), i18n( "Dominica" ), i18n( "Dominican Republic" ), i18n( "Ecuador" ), i18n( "Egypt" ), i18n( "El Salvador" ), i18n( "Equatorial Guinea" ), i18n( "Eritrea" ), i18n( "Estonia" ), i18n( "England" ), i18n( "Ethiopia" ), i18n( "European Union" ), i18n( "Faroe Islands" ), i18n( "Fiji" ), i18n( "Finland" ), i18n( "France" ), i18n( "French Polynesia" ), i18n( "Gabon" ), i18n( "Gambia" ), i18n( "Georgia" ), i18n( "Germany" ), i18n( "Ghana" ), i18n( "Greece" ), i18n( "Greenland" ), i18n( "Grenada" ), i18n( "Guam" ), i18n( "Guatemala" ), i18n( "Guinea" ), i18n( "Guinea-Bissau" ), i18n( "Guyana" ), i18n( "Haiti" ), i18n( "Honduras" ), i18n( "Hong Kong" ), i18n( "Hungary" ), i18n( "Iceland" ), i18n( "India" ), i18n( "Indonesia" ), i18n( "Iran" ), i18n( "Iraq" ), i18n( "Ireland" ), i18n( "Israel" ), i18n( "Italy" ), i18n( "Ivory Coast" ), i18n( "Jamaica" ), i18n( "Japan" ), i18n( "Jordan" ), i18n( "Kazakhstan" ), i18n( "Kenya" ), i18n( "Kiribati" ), i18n( "Korea, North" ), i18n( "Korea, South" ), i18n( "Kuwait" ), i18n( "Kyrgyzstan" ), i18n( "Laos" ), i18n( "Latvia" ), i18n( "Lebanon" ), i18n( "Lesotho" ), i18n( "Liberia" ), i18n( "Libya" ), i18n( "Liechtenstein" ), i18n( "Lithuania" ), i18n( "Luxembourg" ), i18n( "Macau" ), i18n( "Madagascar" ), i18n( "Malawi" ), i18n( "Malaysia" ), i18n( "Maldives" ), i18n( "Mali" ), i18n( "Malta" ), i18n( "Marshall Islands" ), i18n( "Martinique" ), i18n( "Mauritania" ), i18n( "Mauritius" ), i18n( "Mexico" ), i18n( "Micronesia, Federated States Of" ), i18n( "Moldova" ), i18n( "Monaco" ), i18n( "Mongolia" ), i18n( "Montserrat" ), i18n( "Morocco" ), i18n( "Mozambique" ), i18n( "Myanmar" ), i18n( "Namibia" ), i18n( "Nauru" ), i18n( "Nepal" ), i18n( "Netherlands" ), i18n( "Netherlands Antilles" ), i18n( "New Caledonia" ), i18n( "New Zealand" ), i18n( "Nicaragua" ), i18n( "Niger" ), i18n( "Nigeria" ), i18n( "Niue" ), i18n( "North Korea" ), i18n( "Northern Ireland" ), i18n( "Northern Mariana Islands" ), i18n( "Norway" ), i18n( "Oman" ), i18n( "Pakistan" ), i18n( "Palau" ), i18n( "Palestinian" ), i18n( "Panama" ), i18n( "Papua New Guinea" ), i18n( "Paraguay" ), i18n( "Peru" ), i18n( "Philippines" ), i18n( "Poland" ), i18n( "Portugal" ), i18n( "Puerto Rico" ), i18n( "Qatar" ), i18n( "Romania" ), i18n( "Russia" ), i18n( "Rwanda" ), i18n( "St. Kitts and Nevis" ), i18n( "St. Lucia" ), i18n( "St. Vincent and the Grenadines" ), i18n( "San Marino" ), i18n( "Sao Tome and Principe" ), i18n( "Saudi Arabia" ), i18n( "Senegal" ), i18n( "Serbia & Montenegro" ), i18n( "Seychelles" ), i18n( "Sierra Leone" ), i18n( "Singapore" ), i18n( "Slovakia" ), i18n( "Slovenia" ), i18n( "Solomon Islands" ), i18n( "Somalia" ), i18n( "South Africa" ), i18n( "South Korea" ), i18n( "Spain" ), i18n( "Sri Lanka" ), i18n( "St. Kitts and Nevis" ), i18n( "Sudan" ), i18n( "Suriname" ), i18n( "Swaziland" ), i18n( "Sweden" ), i18n( "Switzerland" ), i18n( "Syria" ), i18n( "Taiwan" ), i18n( "Tajikistan" ), i18n( "Tanzania" ), i18n( "Thailand" ), i18n( "Tibet" ), i18n( "Togo" ), i18n( "Tonga" ), i18n( "Trinidad and Tobago" ), i18n( "Tunisia" ), i18n( "Turkey" ), i18n( "Turkmenistan" ), i18n( "Turks and Caicos Islands" ), i18n( "Tuvalu" ), i18n( "Uganda " ), i18n( "Ukraine" ), i18n( "United Arab Emirates" ), i18n( "United Kingdom" ), i18n( "United States" ), i18n( "Uruguay" ), i18n( "Uzbekistan" ), i18n( "Vanuatu" ), i18n( "Vatican City" ), i18n( "Venezuela" ), i18n( "Vietnam" ), i18n( "Western Samoa" ), i18n( "Yemen" ), i18n( "Yugoslavia" ), i18n( "Zaire" ), i18n( "Zambia" ), i18n( "Zimbabwe" ), "" }; QStringList countries; for ( int i = 0; !country[ i ].isEmpty(); ++i ) countries.append( country[ i ] ); countries.sort(); mCountryCombo->insertStringList( countries ); } AddressTypeDialog::AddressTypeDialog( int type, QWidget *parent ) : KDialogBase( Plain, i18n( "Edit Address Type" ), Ok | Cancel, Ok, parent, "AddressTypeDialog" ) { QWidget *page = plainPage(); - QVBoxLayout *layout = new QVBoxLayout( page ); + Q3VBoxLayout *layout = new Q3VBoxLayout( page ); - mGroup = new QButtonGroup( 2, Horizontal, i18n( "Address Types" ), page ); + mGroup = new Q3ButtonGroup( 2, Qt::Horizontal, i18n( "Address Types" ), page ); layout->addWidget( mGroup ); mTypeList = KABC::Address::typeList(); mTypeList.remove( KABC::Address::Pref ); KABC::Address::TypeList::Iterator it; for ( it = mTypeList.begin(); it != mTypeList.end(); ++it ) new QCheckBox( KABC::Address::typeLabel( *it ), mGroup ); for ( int i = 0; i < mGroup->count(); ++i ) { QCheckBox *box = (QCheckBox*)mGroup->find( i ); box->setChecked( type & mTypeList[ i ] ); } } AddressTypeDialog::~AddressTypeDialog() { } int AddressTypeDialog::type() const { int type = 0; for ( int i = 0; i < mGroup->count(); ++i ) { QCheckBox *box = (QCheckBox*)mGroup->find( i ); if ( box->isChecked() ) type += mTypeList[ i ]; } return type; } -#ifndef KAB_EMBEDDED -#include "addresseditwidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_addresseditwidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/addresseditwidget.h b/kaddressbook/addresseditwidget.h index bc96d74..1d4e138 100644 --- a/kaddressbook/addresseditwidget.h +++ b/kaddressbook/addresseditwidget.h @@ -1,159 +1,159 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef ADDRESSEDITWIDGET_H #define ADDRESSEDITWIDGET_H #include <qwidget.h> #include <kdialogbase.h> #include <kabc/address.h> #include <kabc/addressee.h> #include "addresseeconfig.h" #include "typecombo.h" -class QButtonGroup; +class Q3ButtonGroup; class QCheckBox; -class QListView; +class Q3ListView; #ifndef KAB_EMBEDDED -class QTextEdit; +class Q3TextEdit; #else //KAB_EMBEDDED -class QMultiLineEdit; +class Q3MultiLineEdit; #endif //KAB_EMBEDDED class QToolButton; class KComboBox; class KLineEdit; class KListView; typedef TypeCombo<KABC::Address> AddressTypeCombo; /** Editor widget for addresses. */ class AddressEditWidget : public QWidget { Q_OBJECT public: AddressEditWidget( QWidget *parent, const char *name = 0 ); ~AddressEditWidget(); KABC::Address::List addresses(); void setAddresses( const KABC::Addressee &addr, const KABC::Address::List &list ); void updateTypeCombo( const KABC::Address::List&, KComboBox* ); KABC::Address currentAddress( KComboBox*, int ); signals: void modified(); protected slots: void updateAddressEdit(); void edit(); private: AddresseeConfig * mConfig; AddressTypeCombo *mTypeCombo; QPushButton *mEditButton; #ifndef KAB_EMBEDDED - QTextEdit *mAddressTextEdit; + Q3TextEdit *mAddressTextEdit; #else //KAB_EMBEDDED - QMultiLineEdit *mAddressTextEdit; + Q3MultiLineEdit *mAddressTextEdit; #endif //KAB_EMBEDDED KABC::Address::List mAddressList; KABC::Addressee mAddressee; int mIndex; }; /** Dialog for editing address details. */ class AddressEditDialog : public KDialogBase { Q_OBJECT public: AddressEditDialog( const KABC::Address::List &list, int selected, QWidget *parent, const char *name = 0 ); ~AddressEditDialog(); KABC::Address::List addresses(); bool changed() const; protected slots: void addAddress(); void removeAddress(); void changeType(); void updateAddressEdits(); void modified(); private: void saveAddress( KABC::Address &addr ); void fillCountryCombo(); AddressTypeCombo *mTypeCombo; #ifndef KAB_EMBEDDED - QTextEdit *mStreetTextEdit; + Q3TextEdit *mStreetTextEdit; #else //KAB_EMBEDDED - QMultiLineEdit *mStreetTextEdit; + Q3MultiLineEdit *mStreetTextEdit; #endif //KAB_EMBEDDED KComboBox *mCountryCombo; KLineEdit *mRegionEdit; KLineEdit *mLocalityEdit; KLineEdit *mPostalCodeEdit; KLineEdit *mPOBoxEdit; QCheckBox *mPreferredCheckBox; QPushButton *mRemoveButton; QPushButton *mChangeTypeButton; KABC::Address::List mAddressList; KABC::Address *mPreviousAddress; bool mChanged; }; /** Dialog for selecting an address type. */ class AddressTypeDialog : public KDialogBase { public: AddressTypeDialog( int type, QWidget *parent ); ~AddressTypeDialog(); int type() const; private: - QButtonGroup *mGroup; + Q3ButtonGroup *mGroup; KABC::Address::TypeList mTypeList; }; #endif diff --git a/kaddressbook/addresseeconfig.cpp b/kaddressbook/addresseeconfig.cpp index ea0436f..81b1bf4 100644 --- a/kaddressbook/addresseeconfig.cpp +++ b/kaddressbook/addresseeconfig.cpp @@ -1,94 +1,96 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include "addresseeconfig.h" #include "kabprefs.h" //US #include <kstandarddirs.h> #include <qfileinfo.h> +//Added by qt3to4: +#include <Q3ValueList> using namespace KABC; static AddresseeConfig* extern_AddresseeConfig = 0; static KConfig * extern_Config = 0; AddresseeConfig::AddresseeConfig() { } AddresseeConfig::~AddresseeConfig() { delete AddresseeConfig::config(); } AddresseeConfig* AddresseeConfig::instance() { if ( ! extern_AddresseeConfig ) extern_AddresseeConfig = new AddresseeConfig(); return extern_AddresseeConfig; } KConfig* AddresseeConfig::config() { if ( ! extern_Config ) { QString conf = locateLocal("config", "kaddressrc"); extern_Config= new KConfig( conf ); } return extern_Config; } void AddresseeConfig::setUid( const QString & uid ) { AddresseeConfig::config()->setGroup( uid ); mUid = uid; } void AddresseeConfig::setAutomaticNameParsing( bool value ) { AddresseeConfig::config()->writeEntry( "AutomaticNameParsing", value ); } bool AddresseeConfig::automaticNameParsing() { return AddresseeConfig::config()->readBoolEntry( "AutomaticNameParsing", KABPrefs::instance()->mAutomaticNameParsing ); } -void AddresseeConfig::setNoDefaultAddrTypes( const QValueList<int> &types ) +void AddresseeConfig::setNoDefaultAddrTypes( const Q3ValueList<int> &types ) { AddresseeConfig::config()->writeEntry( "NoDefaultAddrTypes", types ); AddresseeConfig::config()->sync(); } - QValueList<int> AddresseeConfig::noDefaultAddrTypes() const + Q3ValueList<int> AddresseeConfig::noDefaultAddrTypes() const { return AddresseeConfig::config()->readIntListEntry( "NoDefaultAddrTypes" ); } void AddresseeConfig::remove( const QString & uid ) { AddresseeConfig::config()->deleteGroup( uid ); } diff --git a/kaddressbook/addresseeconfig.h b/kaddressbook/addresseeconfig.h index 47fbdd6..f6bb3e9 100644 --- a/kaddressbook/addresseeconfig.h +++ b/kaddressbook/addresseeconfig.h @@ -1,55 +1,57 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef ADDRESSEECONFIG_H #define ADDRESSEECONFIG_H #include <kabc/addressee.h> #include <kconfig.h> +//Added by qt3to4: +#include <Q3ValueList> using namespace KABC; class AddresseeConfig { public: AddresseeConfig(); ~AddresseeConfig(); static AddresseeConfig* instance(); static KConfig* config(); Addressee addressee(); void setUid( const QString & uid ); void setAutomaticNameParsing( bool value ); bool automaticNameParsing(); - void setNoDefaultAddrTypes( const QValueList<int> &types ); - QValueList<int> noDefaultAddrTypes() const; + void setNoDefaultAddrTypes( const Q3ValueList<int> &types ); + Q3ValueList<int> noDefaultAddrTypes() const; void remove( const QString & uid); private: QString mUid; }; #endif diff --git a/kaddressbook/addresseeeditordialog.cpp b/kaddressbook/addresseeeditordialog.cpp index b5a60f2..b925a07 100644 --- a/kaddressbook/addresseeeditordialog.cpp +++ b/kaddressbook/addresseeeditordialog.cpp @@ -1,123 +1,126 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlayout.h> #include <qapplication.h> +#include <QDesktopWidget> +//Added by qt3to4: +#include <Q3VBoxLayout> #include <kdebug.h> #include <klocale.h> #include <kglobal.h> #include "addresseeeditorwidget.h" #include "kabcore.h" #include "addresseeeditordialog.h" AddresseeEditorDialog::AddresseeEditorDialog( KABCore *core, QWidget *parent, const char *name ) : KDialogBase( KDialogBase::Plain, i18n( "Edit Contact" ), KDialogBase::Ok | KDialogBase::Cancel | KDialogBase::Apply, KDialogBase::Ok, parent, name, true ) { QWidget *page = plainPage(); - QVBoxLayout *layout = new QVBoxLayout( page ); + Q3VBoxLayout *layout = new Q3VBoxLayout( page ); mEditorWidget = new AddresseeEditorWidget( core, false, page ); connect( mEditorWidget, SIGNAL( modified( const KABC::Addressee::List& ) ), SLOT( widgetModified() ) ); layout->addWidget( mEditorWidget ); enableButton( KDialogBase::Apply, false ); if ( QApplication::desktop()->width() < 480 ) { hideButtons(); } } AddresseeEditorDialog::~AddresseeEditorDialog() { //emit editorDestroyed( mEditorWidget->addressee().uid() ); } void AddresseeEditorDialog::setAddressee( const KABC::Addressee &addr ) { enableButton( KDialogBase::Apply, false ); mEditorWidget->setAddressee( addr ); this->setCaption(i18n ("Edit ") + addr.formattedName()); } KABC::Addressee AddresseeEditorDialog::addressee() { return mEditorWidget->addressee(); } bool AddresseeEditorDialog::dirty() { return mEditorWidget->dirty(); } void AddresseeEditorDialog::slotApply() { if ( mEditorWidget->dirty() ) { mEditorWidget->save(); emit contactModified( mEditorWidget->addressee() ); } enableButton( KDialogBase::Apply, false ); KDialogBase::slotApply(); } void AddresseeEditorDialog:: accept () { slotOk(); } void AddresseeEditorDialog::slotOk() { slotApply(); //KDialogBase::slotOk(); emit okClicked(); QDialog::accept(); } void AddresseeEditorDialog::widgetModified() { enableButton( KDialogBase::Apply, true ); } void AddresseeEditorDialog::slotCancel() { KDialogBase::slotCancel(); } -#ifndef KAB_EMBEDDED -#include "addresseeeditordialog.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_addresseeeditordialog.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/addresseeeditorwidget.cpp b/kaddressbook/addresseeeditorwidget.cpp index 4313998..a95db03 100644 --- a/kaddressbook/addresseeeditorwidget.cpp +++ b/kaddressbook/addresseeeditorwidget.cpp @@ -1,1435 +1,1439 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qcheckbox.h> -#include <qhbox.h> +#include <q3hbox.h> #include <qlabel.h> #include <qlayout.h> -#include <qlistbox.h> +#include <q3listbox.h> #include <qpushbutton.h> #include <qtabwidget.h> #include <qapplication.h> #ifndef KAB_EMBEDDED -#include <qtextedit.h> +#include <q3textedit.h> +//Added by qt3to4: +#include <Q3GridLayout> +#include <Q3PopupMenu> +#include <Q3VBoxLayout> #include <kaccelmanager.h> #include "keywidget.h" #include "soundwidget.h" #else //KAB_EMBEDDED -#include <qmultilineedit.h> +#include <q3multilineedit.h> #endif //KAB_EMBEDDED #include "keywidget.h" #include "geowidget.h" #include "imagewidget.h" #include "nameeditdialog.h" #include "phoneeditwidget.h" #include "secrecywidget.h" #include <qtoolbutton.h> #include <qtooltip.h> #include <kapplication.h> #include <kconfig.h> #include <kcombobox.h> #include <kdebug.h> #include <kdialogbase.h> #include <kglobal.h> #include <kiconloader.h> #include <klineedit.h> #include <klocale.h> #include <kmessagebox.h> #include <kseparator.h> #include <ksqueezedtextlabel.h> #include <libkdepim/categoryeditdialog.h> #include <libkdepim/categoryselectdialog.h> #include <libkdepim/kdateedit.h> #include "addresseditwidget.h" #include "emaileditwidget.h" #include "kabcore.h" #include "kabprefs.h" #include "addresseeeditorwidget.h" AddresseeEditorWidget::AddresseeEditorWidget( KABCore *core, bool isExtension, QWidget *parent, const char *name ) : ExtensionWidget( core, parent, name ), mIsExtension( isExtension ), mBlockSignals( false ) { mAConfig = AddresseeConfig::instance(); mFormattedNameType = NameEditDialog::CustomName; initGUI(); mCategoryDialog = 0; mCategoryEditDialog = 0; // Load the empty addressee as defaults load(); mDirty = false; } AddresseeEditorWidget::~AddresseeEditorWidget() { kdDebug(5720) << "~AddresseeEditorWidget()" << endl; } void AddresseeEditorWidget::contactsSelectionChanged() { KABC::Addressee::List list = selectedContacts(); mAddressee = list[ 0 ]; load(); } void AddresseeEditorWidget::setAddressee( const KABC::Addressee &addr ) { mAddressee = addr; load(); } const KABC::Addressee &AddresseeEditorWidget::addressee() { return mAddressee; } void AddresseeEditorWidget::textChanged( const QString& ) { emitModified(); } void AddresseeEditorWidget::initGUI() { - QVBoxLayout *layout = new QVBoxLayout( this ); + Q3VBoxLayout *layout = new Q3VBoxLayout( this ); mTabWidget = new QTabWidget( this ); layout->addWidget( mTabWidget ); setupTab1(); setupTab1_1(); setupTab2(); setupTab2_1(); setupTab3(); setupTab3_1(); mNameEdit->setFocus(); connect( mTabWidget, SIGNAL( currentChanged(QWidget*) ), SLOT( pageChanged(QWidget*) ) ); } void AddresseeEditorWidget::setupTab1() { // This is the General tab QWidget *tab1 = new QWidget( mTabWidget ); //US QGridLayout *layout = new QGridLayout( tab1, 11, 7 ); bool horLayout = false; int maxCol = 1; if ( QApplication::desktop()->width() == 640 || QApplication::desktop()->width() == 320 ) { horLayout = true; maxCol = 3; } - QGridLayout *layout = new QGridLayout( tab1, 7-maxCol, maxCol ); + Q3GridLayout *layout = new Q3GridLayout( tab1, 7-maxCol, maxCol ); layout->setMargin( KDialogBase::marginHintSmall() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); QLabel *label; KSeparator* bar; QPushButton *button; ////////////////////////////////// // Upper left group (person info) // Person icon /* LR label = new QLabel( tab1 ); //US ambiguous call. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 0, 1, 0, 0 ); */ // First name button = new QPushButton( i18n( "Name..." ), tab1 ); //US QToolTip::add( button, i18n( "Edit the contact's name" ) ); mNameEdit = new KLineEdit( tab1, "mNameEdit" ); connect( mNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( nameTextChanged( const QString& ) ) ); connect( button, SIGNAL( clicked() ), SLOT( nameButtonClicked() ) ); mNameLabel = new KSqueezedTextLabel( tab1 ); mNameLabel->hide(); layout->addWidget( button, 0, 0 ); layout->addWidget( mNameEdit, 0, 1 ); layout->addWidget( mNameLabel, 0, 1 ); button = new QPushButton( i18n( "Role:" ), tab1 ); connect( button, SIGNAL( clicked() ), SLOT( setRole2FN() ) ); //label = new QLabel( i18n( "Role:" ), tab1 ); mRoleEdit = new KLineEdit( tab1 ); connect( mRoleEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); //label->setBuddy( mRoleEdit ); if ( horLayout ) { layout->addWidget( button, 0, 2 ); layout->addWidget( mRoleEdit, 0, 3 ); } else { layout->addWidget( button, 1, 0 ); layout->addWidget( mRoleEdit, 1, 1 ); } // Organization button = new QPushButton( i18n( "Organization:" ), tab1 ); connect( button, SIGNAL( clicked() ), SLOT( setCompany2FN() ) ); //label = new QLabel( i18n( "Organization:" ), tab1 ); mOrgEdit = new KLineEdit( tab1 ); //label->setBuddy( mOrgEdit ); connect( mOrgEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); if ( horLayout ) { layout->addWidget( button, 1, 2 ); layout->addWidget( mOrgEdit, 1, 3 ); } else { layout->addWidget( button, 2, 0 ); layout->addWidget( mOrgEdit, 2, 1 ); } // File as (formatted name) label = new QLabel( i18n( "Format.n.:" ), tab1 ); mFormattedNameLabel = new KSqueezedTextLabel( tab1 ); if ( horLayout ) { layout->addWidget( label, 1,0 ); layout->addWidget( mFormattedNameLabel, 1, 1 ); } else { layout->addWidget( label, 3, 0 ); layout->addWidget( mFormattedNameLabel, 3, 1 ); } /* LR // Left hand separator. This separator doesn't go all the way // across so the dialog still flows from top to bottom bar = new KSeparator( KSeparator::HLine, tab1 ); layout->addMultiCellWidget( bar, 4, 4, 0, 2 ); */ ////////////////////////////////////// /* LR // Phone numbers (upper right) label = new QLabel( tab1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); //US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); layout->addMultiCellWidget( label, 5, 6, 0, 0 ); */ mPhoneEditWidget = new PhoneEditWidget( tab1 ); connect( mPhoneEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) ); //US layout->addMultiCellWidget( mPhoneEditWidget, 0, 3, 4, 6 ); int iii; #ifndef DESKTOP_VERSION iii = 7; #else iii = 8; #endif layout->addMultiCellWidget( mPhoneEditWidget, 5-maxCol, 5-maxCol+4, 0, maxCol ); iii = 6-maxCol+4; /* LR bar = new KSeparator( KSeparator::HLine, tab1 ); //US layout->addMultiCellWidget( bar, 4, 4, 3, 6 ); layout->addMultiCellWidget( bar, 9, 9, 0, 2 ); */ /*US ////////////////////////////////////// // Addresses (lower left) label = new QLabel( tab1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 5, 6, 0, 0 ); mAddressEditWidget = new AddressEditWidget( tab1 ); connect( mAddressEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) ); layout->addMultiCellWidget( mAddressEditWidget, 5, 9, 1, 2 ); ////////////////////////////////////// // Email / Web (lower right) label = new QLabel( tab1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop, 0) ); layout->addMultiCellWidget( label, 5, 6, 3, 3 ); mEmailWidget = new EmailEditWidget( tab1 ); connect( mEmailWidget, SIGNAL( modified() ), SLOT( emitModified() ) ); layout->addMultiCellWidget( mEmailWidget, 5, 6, 4, 6 ); // add the separator bar = new KSeparator( KSeparator::HLine, tab1 ); layout->addMultiCellWidget( bar, 7, 7, 3, 6 ); label = new QLabel( tab1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "homepage", KIcon::Desktop) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "homepage", KIcon::Desktop, 0) ); layout->addMultiCellWidget( label, 8, 9, 3, 3 ); label = new QLabel( i18n( "URL:" ), tab1 ); mURLEdit = new KLineEdit( tab1 ); connect( mURLEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mURLEdit ); layout->addWidget( label, 8, 4 ); layout->addMultiCellWidget( mURLEdit, 8, 8, 5, 6 ); label = new QLabel( i18n( "&IM address:" ), tab1 ); mIMAddressEdit = new KLineEdit( tab1 ); connect( mIMAddressEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mIMAddressEdit ); layout->addWidget( label, 9, 4 ); layout->addMultiCellWidget( mIMAddressEdit, 9, 9, 5, 6 ); layout->addColSpacing( 6, 50 ); bar = new KSeparator( KSeparator::HLine, tab1 ); layout->addMultiCellWidget( bar, 10, 10, 0, 6 ); */ /////////////////////////////////////// - QHBox *categoryBox = new QHBox( tab1 ,"cato"); + Q3HBox *categoryBox = new Q3HBox( tab1 ,"cato"); categoryBox->setSpacing( KDialogBase::spacingHint() ); categoryBox->setMargin( KDialogBase::marginHintSmall() ); // Categories button = new QPushButton( i18n( "Categories" )+":", categoryBox ); connect( button, SIGNAL( clicked() ), SLOT( categoryButtonClicked() ) ); mCategoryEdit = new QPushButton ( categoryBox ); mCategoryEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Fixed ,FALSE) ); - mCatPopup = new QPopupMenu ( categoryBox ); + mCatPopup = new Q3PopupMenu ( categoryBox ); mCategoryEdit->setPopup( mCatPopup ); connect(mCatPopup,SIGNAL(aboutToShow () ), this ,SLOT(showCatPopup())); connect(mCatPopup,SIGNAL( activated ( int ) ), this ,SLOT(selectedCatPopup( int ))); //connect( mCategoryEdit, SIGNAL( textChanged( const QString& ) ), // SLOT( textChanged( const QString& ) ) ); mSecrecyWidget = new SecrecyWidget( categoryBox ); connect( mSecrecyWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); //US layout->addMultiCellWidget( categoryBox, 11, 11, 0, 6 ); layout->addMultiCellWidget( categoryBox, iii, iii, 0, maxCol ); // Build the layout and add to the tab widget layout->activate(); // required mTabWidget->addTab( tab1, i18n( "&General" ) ); } void AddresseeEditorWidget::showCatPopup() { mCatPopup->clear(); QStringList checkedCategories = QStringList::split (",", mCategoryEdit->text()); int index = 0; for (QStringList::Iterator it = KABPrefs::instance()->mCustomCategories.begin (); it != KABPrefs::instance()->mCustomCategories.end (); ++it) { mCatPopup->insertItem (*it, index ); //mCategory[index] = *it; if (checkedCategories.find (*it) != checkedCategories.end ()) mCatPopup->setItemChecked (index, true); ++index; } } void AddresseeEditorWidget::selectedCatPopup( int index ) { QStringList categories = QStringList::split (",", mCategoryEdit->text()); QString colcat = categories.first(); if (categories.find ( KABPrefs::instance()->mCustomCategories[index]) != categories.end ()) categories.remove (KABPrefs::instance()->mCustomCategories[index]); else categories.insert (categories.end(), KABPrefs::instance()->mCustomCategories[index]); categories.sort (); if ( !colcat.isEmpty() ) { if ( categories.find ( colcat ) != categories.end () ) { categories.remove( colcat ); categories.prepend( colcat ); } } mCategoryEdit->setText( categories.join(",") ); emitModified(); } void AddresseeEditorWidget::setRole2FN() { if ( mRoleEdit->text().isEmpty() ) return; mFormattedNameType = NameEditDialog::CustomName; mAddressee.setFormattedName( mRoleEdit->text() ); mFormattedNameLabel->setText( mRoleEdit->text() ); emitModified(); } void AddresseeEditorWidget::setCompany2FN() { if ( mOrgEdit->text().isEmpty() ) return; mFormattedNameType = NameEditDialog::CustomName; mAddressee.setFormattedName( mOrgEdit->text() ); mFormattedNameLabel->setText( mOrgEdit->text() ); emitModified(); } void AddresseeEditorWidget::setupTab1_1() { // This is the Address tab QWidget *tab1_1 = new QWidget( mTabWidget ); //US QGridLayout *layout = new QGridLayout( tab1_1, 11, 7 ); - QGridLayout *layout = new QGridLayout( tab1_1, 7, 2 ); + Q3GridLayout *layout = new Q3GridLayout( tab1_1, 7, 2 ); layout->setMargin( KDialogBase::marginHintSmall() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); QLabel *label; KSeparator* bar; QPushButton *button; /*US ////////////////////////////////// // Upper left group (person info) // Person icon label = new QLabel( tab1 ); //US ambiguous call. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 0, 1, 0, 0 ); // First name button = new QPushButton( i18n( "Name..." ), tab1 ); QToolTip::add( button, i18n( "Edit the contact's name" ) ); mNameEdit = new KLineEdit( tab1, "mNameEdit" ); connect( mNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( nameTextChanged( const QString& ) ) ); connect( button, SIGNAL( clicked() ), SLOT( nameButtonClicked() ) ); #ifndef KAB_EMBEDDED mNameLabel = new KSqueezedTextLabel( tab1 ); mNameLabel->hide(); #else //KAB_EMBEDDED qDebug("AddresseeEditorWidget::setupTab1 has to be changed"); #endif //KAB_EMBEDDED layout->addWidget( button, 0, 1 ); layout->addWidget( mNameEdit, 0, 2 ); #ifndef KAB_EMBEDDED layout->addWidget( mNameLabel, 0, 2 ); #else //KAB_EMBEDDED qDebug("AddresseeEditorWidget::setupTab1 has to be changed"); #endif //KAB_EMBEDDED label = new QLabel( i18n( "Role:" ), tab1 ); mRoleEdit = new KLineEdit( tab1 ); connect( mRoleEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mRoleEdit ); layout->addWidget( label, 1, 1 ); layout->addWidget( mRoleEdit, 1, 2 ); // Organization label = new QLabel( i18n( "Organization:" ), tab1 ); mOrgEdit = new KLineEdit( tab1 ); label->setBuddy( mOrgEdit ); connect( mOrgEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); layout->addWidget( label, 2, 1 ); layout->addWidget( mOrgEdit, 2, 2 ); // File as (formatted name) label = new QLabel( i18n( "Formatted name:" ), tab1 ); #ifndef KAB_EMBEDDED mFormattedNameLabel = new KSqueezedTextLabel( tab1 ); #else //KAB_EMBEDDED qDebug("AddresseeEditorWidget::setupTab1 has to be changed"); #endif //KAB_EMBEDDED layout->addWidget( label, 3, 1 ); #ifndef KAB_EMBEDDED layout->addWidget( mFormattedNameLabel, 3, 2 ); #else //KAB_EMBEDDED qDebug("AddresseeEditorWidget::setupTab1 has to be changed"); #endif //KAB_EMBEDDED // Left hand separator. This separator doesn't go all the way // across so the dialog still flows from top to bottom bar = new KSeparator( KSeparator::HLine, tab1 ); layout->addMultiCellWidget( bar, 4, 4, 0, 2 ); ////////////////////////////////////// // Phone numbers (upper right) label = new QLabel( tab1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 0, 1, 3, 3 ); mPhoneEditWidget = new PhoneEditWidget( tab1 ); connect( mPhoneEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) ); layout->addMultiCellWidget( mPhoneEditWidget, 0, 3, 4, 6 ); bar = new KSeparator( KSeparator::HLine, tab1 ); layout->addMultiCellWidget( bar, 4, 4, 3, 6 ); */ ////////////////////////////////////// // Addresses (lower left) /* LR label = new QLabel( tab1_1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop, 0 ) ); //US layout->addMultiCellWidget( label, 5, 6, 0, 0 ); layout->addMultiCellWidget( label, 0, 1, 0, 0 ); */ mAddressEditWidget = new AddressEditWidget( tab1_1 ); connect( mAddressEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) ); //US layout->addMultiCellWidget( mAddressEditWidget, 5, 9, 1, 2 ); layout->addMultiCellWidget( mAddressEditWidget, 0, 4, 0, 1 ); //US /* LR bar = new KSeparator( KSeparator::HLine, tab1_1 ); layout->addMultiCellWidget( bar, 5, 5, 0, 3 ); */ ////////////////////////////////////// // Email / Web (lower right) /* LR label = new QLabel( tab1_1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop, 0) ); //US layout->addMultiCellWidget( label, 5, 6, 3, 3 ); layout->addMultiCellWidget( label, 6, 7, 0, 0 ); */ mEmailWidget = new EmailEditWidget( tab1_1 ); connect( mEmailWidget, SIGNAL( modified() ), SLOT( emitModified() ) ); //US layout->addMultiCellWidget( mEmailWidget, 5, 6, 4, 6 ); layout->addMultiCellWidget( mEmailWidget, 5, 6, 0, 1 ); /* LR // add the separator bar = new KSeparator( KSeparator::HLine, tab1_1 ); //US layout->addMultiCellWidget( bar, 7, 7, 3, 6 ); layout->addMultiCellWidget( bar, 8, 8, 0, 3 ); label = new QLabel( tab1_1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "homepage", KIcon::Desktop) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "homepage", KIcon::Desktop, 0) ); //US layout->addMultiCellWidget( label, 8, 9, 3, 3 ); layout->addMultiCellWidget( label, 9, 10, 0, 0 ); */ label = new QLabel( i18n( "URL:" ), tab1_1 ); mURLEdit = new KLineEdit( tab1_1 ); connect( mURLEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mURLEdit ); //US layout->addWidget( label, 8, 4 ); layout->addWidget( label, 7,0 ); //US layout->addMultiCellWidget( mURLEdit, 8, 8, 5, 6 ); layout->addWidget( mURLEdit, 7, 1); label = new QLabel( i18n( "&IM address:" ), tab1_1 ); mIMAddressEdit = new KLineEdit( tab1_1 ); connect( mIMAddressEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mIMAddressEdit ); //US layout->addWidget( label, 9, 4 ); layout->addWidget( label, 8, 0 ); //US layout->addMultiCellWidget( mIMAddressEdit, 9, 9, 5, 6 ); layout->addWidget( mIMAddressEdit, 8,1 ); //US layout->addColSpacing( 6, 50 ); //US bar = new KSeparator( KSeparator::HLine, tab1_1 ); //US layout->addMultiCellWidget( bar, 10, 10, 0, 6 ); /*US /////////////////////////////////////// QHBox *categoryBox = new QHBox( tab1 ); categoryBox->setSpacing( KDialogBase::spacingHintSmall() ); // Categories button = new QPushButton( i18n( "Categories" ), categoryBox ); connect( button, SIGNAL( clicked() ), SLOT( categoryButtonClicked() ) ); mCategoryEdit = new KLineEdit( categoryBox ); mCategoryEdit->setReadOnly( true ); connect( mCategoryEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); mSecrecyWidget = new SecrecyWidget( categoryBox ); connect( mSecrecyWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addMultiCellWidget( categoryBox, 11, 11, 0, 6 ); */ // Build the layout and add to the tab widget layout->activate(); // required mTabWidget->addTab( tab1_1, i18n( "&Address" ) ); } void AddresseeEditorWidget::setupTab2() { // This is the Details tab QWidget *tab2 = new QWidget( mTabWidget ); - QGridLayout *layout = new QGridLayout( tab2, 8, 3 ); + Q3GridLayout *layout = new Q3GridLayout( tab2, 8, 3 ); layout->setMargin( KDialogBase::marginHintSmall() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); QLabel *label; KSeparator* bar; /////////////////////// // Office info // Department label = new QLabel( tab2 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "folder", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "folder", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 0, 1, 0, 0 ); label = new QLabel( i18n( "Department:" ), tab2 ); layout->addWidget( label, 0, 1 ); mDepartmentEdit = new KLineEdit( tab2 ); connect( mDepartmentEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mDepartmentEdit ); layout->addWidget( mDepartmentEdit, 0, 2 ); label = new QLabel( i18n( "Office:" ), tab2 ); layout->addWidget( label, 1, 1 ); mOfficeEdit = new KLineEdit( tab2 ); connect( mOfficeEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mOfficeEdit ); layout->addWidget( mOfficeEdit, 1, 2 ); label = new QLabel( i18n( "Profession:" ), tab2 ); layout->addWidget( label, 2, 1 ); mProfessionEdit = new KLineEdit( tab2 ); connect( mProfessionEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mProfessionEdit ); layout->addWidget( mProfessionEdit, 2, 2 ); label = new QLabel( i18n( "Manager\'s name:" ), tab2 ); //US layout->addWidget( label, 0, 3 ); layout->addWidget( label, 3, 1 ); mManagerEdit = new KLineEdit( tab2 ); connect( mManagerEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mManagerEdit ); //US layout->addMultiCellWidget( mManagerEdit, 0, 0, 4, 5 ); layout->addWidget( mManagerEdit, 3, 2 ); label = new QLabel( i18n( "Assistant's name:" ), tab2 ); //US layout->addWidget( label, 1, 3 ); layout->addWidget( label, 4, 1 ); mAssistantEdit = new KLineEdit( tab2 ); connect( mAssistantEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mAssistantEdit ); //US layout->addMultiCellWidget( mAssistantEdit, 1, 1, 4, 5 ); layout->addWidget( mAssistantEdit, 4, 2 ); bar = new KSeparator( KSeparator::HLine, tab2 ); //US layout->addMultiCellWidget( bar, 3, 3, 0, 5 ); layout->addMultiCellWidget( bar, 5, 5, 0, 2 ); ///////////////////////////////////////////////// // Personal info //label = new QLabel( tab2 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) ); //label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) ); //US layout->addMultiCellWidget( label, 4, 5, 0, 0 ); //layout->addMultiCellWidget( label, 6, 7, 0, 0 ); int iii = 6; if ( QApplication::desktop()->width() == 640 ) { - QHBox * nbox = new QHBox ( tab2 ); + Q3HBox * nbox = new Q3HBox ( tab2 ); label = new QLabel( i18n( "Nick name:" )+" ", nbox ); mNicknameEdit = new KLineEdit( nbox ); connect( mNicknameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mNicknameEdit ); label = new QLabel( " "+i18n( "Spouse's name:" )+" ", nbox ); mSpouseEdit = new KLineEdit( nbox ); connect( mSpouseEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mSpouseEdit ); layout->addMultiCellWidget( nbox, iii, iii, 1, 2 ); ++iii; } else { label = new QLabel( i18n( "Nick name:" ), tab2 ); layout->addWidget( label, iii, 1 ); mNicknameEdit = new KLineEdit( tab2 ); connect( mNicknameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mNicknameEdit ); layout->addWidget( mNicknameEdit, iii, 2 ); ++iii; label = new QLabel( i18n( "Spouse's name:" ), tab2 ); layout->addWidget( label, iii, 1 ); mSpouseEdit = new KLineEdit( tab2 ); connect( mSpouseEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mSpouseEdit ); layout->addWidget( mSpouseEdit, iii, 2 ); ++iii; } label = new QLabel( i18n( "Children's names:" ), tab2 ); layout->addWidget( label, iii, 1 ); mChildEdit = new KLineEdit( tab2 ); connect( mChildEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mChildEdit ); layout->addWidget( mChildEdit, iii, 2 ); ++iii; if ( QApplication::desktop()->width() == 640 ) { - QHBox * nbox = new QHBox ( tab2 ); + Q3HBox * nbox = new Q3HBox ( tab2 ); label = new QLabel( i18n( "Birthday:" )+" ", nbox ); mBirthdayPicker = new KDateEdit( nbox ); //mBirthdayPicker->toggleDateFormat(); mBirthdayPicker->setHandleInvalid( true ); connect( mBirthdayPicker, SIGNAL( dateChanged( QDate ) ), SLOT( dateChanged( QDate ) ) ); label->setBuddy( mBirthdayPicker ); label = new QLabel( " "+i18n( "Anniversary:" )+" ", nbox ); mAnniversaryPicker = new KDateEdit( nbox ); mAnniversaryPicker->setHandleInvalid( true ); connect( mAnniversaryPicker, SIGNAL( dateChanged( QDate ) ), SLOT( dateChanged( QDate ) ) ); label->setBuddy( mAnniversaryPicker ); layout->addMultiCellWidget( nbox, iii, iii, 1, 2 ); ++iii; } else { label = new QLabel( i18n( "Birthday:" ), tab2 ); layout->addWidget( label, iii, 1 ); mBirthdayPicker = new KDateEdit( tab2 ); //mBirthdayPicker->toggleDateFormat(); mBirthdayPicker->setHandleInvalid( true ); connect( mBirthdayPicker, SIGNAL( dateChanged( QDate ) ), SLOT( dateChanged( QDate ) ) ); label->setBuddy( mBirthdayPicker ); layout->addWidget( mBirthdayPicker, iii, 2 ); ++iii; label = new QLabel( i18n( "Anniversary:" ), tab2 ); layout->addWidget( label, iii, 1 ); mAnniversaryPicker = new KDateEdit( tab2 ); mAnniversaryPicker->setHandleInvalid( true ); connect( mAnniversaryPicker, SIGNAL( dateChanged( QDate ) ), SLOT( dateChanged( QDate ) ) ); label->setBuddy( mAnniversaryPicker ); layout->addWidget( mAnniversaryPicker, iii, 2 ); ++iii; } label = new QLabel( i18n( "Gender:" ), tab2 ); layout->addWidget( label, iii, 1 ); mGenderBox = new QComboBox ( tab2 ); mGenderBox->insertItem ( i18n( "ALIEN (undefined)" )); mGenderBox->insertItem ( i18n( "female" )); mGenderBox->insertItem ( i18n( "male" )); connect( mGenderBox, SIGNAL( activated ( const QString & ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mGenderBox ); layout->addWidget( mGenderBox, iii, 2 ); ++iii; // Build the layout and add to the tab widget layout->activate(); // required mTabWidget->addTab( tab2, i18n( "&Details" ) ); } void AddresseeEditorWidget::setupTab2_1() { // This is the Details tab QWidget *tab2_2 = new QWidget( mTabWidget ); - QGridLayout *layout = new QGridLayout( tab2_2, 1, 2 ); + Q3GridLayout *layout = new Q3GridLayout( tab2_2, 1, 2 ); layout->setMargin( KDialogBase::marginHintSmall() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); QLabel *label; KSeparator* bar; /*US /////////////////////// // Office info // Department label = new QLabel( tab2 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "folder", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "folder", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 0, 1, 0, 0 ); label = new QLabel( i18n( "Department:" ), tab2 ); layout->addWidget( label, 0, 1 ); mDepartmentEdit = new KLineEdit( tab2 ); connect( mDepartmentEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mDepartmentEdit ); layout->addWidget( mDepartmentEdit, 0, 2 ); label = new QLabel( i18n( "Office:" ), tab2 ); layout->addWidget( label, 1, 1 ); mOfficeEdit = new KLineEdit( tab2 ); connect( mOfficeEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mOfficeEdit ); layout->addWidget( mOfficeEdit, 1, 2 ); label = new QLabel( i18n( "Profession:" ), tab2 ); layout->addWidget( label, 2, 1 ); mProfessionEdit = new KLineEdit( tab2 ); connect( mProfessionEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mProfessionEdit ); layout->addWidget( mProfessionEdit, 2, 2 ); label = new QLabel( i18n( "Manager\'s name:" ), tab2 ); layout->addWidget( label, 0, 3 ); mManagerEdit = new KLineEdit( tab2 ); connect( mManagerEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mManagerEdit ); layout->addMultiCellWidget( mManagerEdit, 0, 0, 4, 5 ); label = new QLabel( i18n( "Assistant's name:" ), tab2 ); layout->addWidget( label, 1, 3 ); mAssistantEdit = new KLineEdit( tab2 ); connect( mAssistantEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mAssistantEdit ); layout->addMultiCellWidget( mAssistantEdit, 1, 1, 4, 5 ); bar = new KSeparator( KSeparator::HLine, tab2 ); layout->addMultiCellWidget( bar, 3, 3, 0, 5 ); ///////////////////////////////////////////////// // Personal info label = new QLabel( tab2 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 4, 5, 0, 0 ); label = new QLabel( i18n( "Nick name:" ), tab2 ); layout->addWidget( label, 4, 1 ); mNicknameEdit = new KLineEdit( tab2 ); connect( mNicknameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mNicknameEdit ); layout->addWidget( mNicknameEdit, 4, 2 ); label = new QLabel( i18n( "Spouse's name:" ), tab2 ); layout->addWidget( label, 5, 1 ); mSpouseEdit = new KLineEdit( tab2 ); connect( mSpouseEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mSpouseEdit ); layout->addWidget( mSpouseEdit, 5, 2 ); label = new QLabel( i18n( "Birthday:" ), tab2 ); layout->addWidget( label, 4, 3 ); mBirthdayPicker = new KDateEdit( tab2 ); mBirthdayPicker->setHandleInvalid( true ); connect( mBirthdayPicker, SIGNAL( dateChanged( QDate ) ), SLOT( dateChanged( QDate ) ) ); connect( mBirthdayPicker, SIGNAL( invalidDateEntered() ), SLOT( invalidDate() ) ); connect( mBirthdayPicker, SIGNAL( textChanged( const QString& ) ), SLOT( emitModified() ) ); label->setBuddy( mBirthdayPicker ); layout->addWidget( mBirthdayPicker, 4, 4 ); label = new QLabel( i18n( "Anniversary:" ), tab2 ); layout->addWidget( label, 5, 3 ); mAnniversaryPicker = new KDateEdit( tab2 ); mAnniversaryPicker->setHandleInvalid( true ); connect( mAnniversaryPicker, SIGNAL( dateChanged( QDate ) ), SLOT( dateChanged( QDate ) ) ); connect( mAnniversaryPicker, SIGNAL( invalidDateEntered() ), SLOT( invalidDate() ) ); connect( mAnniversaryPicker, SIGNAL( textChanged( const QString& ) ), SLOT( emitModified() ) ); label->setBuddy( mAnniversaryPicker ); layout->addWidget( mAnniversaryPicker, 5, 4 ); bar = new KSeparator( KSeparator::HLine, tab2 ); layout->addMultiCellWidget( bar, 6, 6, 0, 5 ); */ ////////////////////////////////////// // Notes label = new QLabel( i18n( "Note:" ), tab2_2 ); label->setAlignment( Qt::AlignTop | Qt::AlignLeft ); //US layout->addWidget( label, 7, 0 ); layout->addWidget( label, 0, 0 ); #ifndef KAB_EMBEDDED - mNoteEdit = new QTextEdit( tab2_2 ); - mNoteEdit->setWordWrap( QTextEdit::WidgetWidth ); + mNoteEdit = new Q3TextEdit( tab2_2 ); + mNoteEdit->setWordWrap( Q3TextEdit::WidgetWidth ); mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() ); #else //KAB_EMBEDDED - mNoteEdit = new QMultiLineEdit( tab2_2 ); - mNoteEdit->setWordWrap( QMultiLineEdit::WidgetWidth ); + mNoteEdit = new Q3MultiLineEdit( tab2_2 ); + mNoteEdit->setWordWrap( Q3MultiLineEdit::WidgetWidth ); mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() ); #endif //KAB_EMBEDDED connect( mNoteEdit, SIGNAL( textChanged() ), SLOT( emitModified() ) ); label->setBuddy( mNoteEdit ); //US layout->addMultiCellWidget( mNoteEdit, 7, 7, 1, 5 ); layout->addWidget( mNoteEdit, 1, 0); // Build the layout and add to the tab widget layout->activate(); // required mTabWidget->addTab( tab2_2, i18n( "&Notes" ) ); } void AddresseeEditorWidget::setupTab3() { // This is the Misc tab QWidget *tab3 = new QWidget( mTabWidget ); - QGridLayout *layout = new QGridLayout( tab3, 1, 1 ); + Q3GridLayout *layout = new Q3GridLayout( tab3, 1, 1 ); layout->setMargin( KDialogBase::marginHintSmall() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); //US layout->setColStretch( 2, 1 ); ////////////////////////////////////// // Geo mGeoWidget = new GeoWidget( tab3 ); // mGeoWidget->setMinimumSize( mGeoWidget->sizeHint() ); connect( mGeoWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mGeoWidget, 0, 0 ); /*US ////////////////////////////////////// // Sound #ifndef KAB_EMBEDDED mSoundWidget = new SoundWidget( tab3 ); mSoundWidget->setMinimumSize( mSoundWidget->sizeHint() ); connect( mSoundWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mSoundWidget, 0, 1, Qt::AlignTop ); #else //KAB_EMBEDDED qDebug("AddresseeEditorWidget::setupTab2 sound part is not supported = has to be changed"); #endif //KAB_EMBEDDED ////////////////////////////////////// // Images mImageWidget = new ImageWidget( tab3 ); mImageWidget->setMinimumSize( mImageWidget->sizeHint() ); connect( mImageWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mImageWidget, 1, 0, Qt::AlignTop ); */ //US /* KSeparator* bar = new KSeparator( KSeparator::HLine, tab3 ); layout->addMultiCellWidget( bar, 1, 1, 0, 0 ); */ ////////////////////////////////////// // Keys mKeyWidget = new KeyWidget( tab3 ); //mKeyWidget->setMinimumSize( mKeyWidget->sizeHint() ); connect( mKeyWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); //US layout->addWidget( mKeyWidget, 1, 1, Qt::AlignTop ); layout->addWidget( mKeyWidget, 1, 0 ); mTabWidget->addTab( tab3, i18n( "&Misc" ) ); } void AddresseeEditorWidget::setupTab3_1() { // This is the Misc tab QWidget *tab3 = new QWidget( mTabWidget ); //US QGridLayout *layout = new QGridLayout( tab3, 2, 3 ); - QGridLayout *layout = new QGridLayout( tab3, 1, 1 ); + Q3GridLayout *layout = new Q3GridLayout( tab3, 1, 1 ); layout->setMargin( KDialogBase::marginHint() ); layout->setSpacing( KDialogBase::spacingHint() ); //US layout->setColStretch( 2, 1 ); /*US ////////////////////////////////////// // Geo mGeoWidget = new GeoWidget( tab3 ); mGeoWidget->setMinimumSize( mGeoWidget->sizeHint() ); connect( mGeoWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mGeoWidget, 0, 0, Qt::AlignTop ); */ ////////////////////////////////////// // Sound #ifndef KAB_EMBEDDED mSoundWidget = new SoundWidget( tab3 ); mSoundWidget->setMinimumSize( mSoundWidget->sizeHint() ); connect( mSoundWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mSoundWidget, 0, 1, Qt::AlignTop ); #else //KAB_EMBEDDED //US qDebug("AddresseeEditorWidget::setupTab2 sound part is not supported = has to be changed"); #endif //KAB_EMBEDDED ////////////////////////////////////// // Images mImageWidget = new ImageWidget( tab3 ); mImageWidget->setMinimumSize( mImageWidget->sizeHint() ); connect( mImageWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mImageWidget, 0, 0, Qt::AlignTop ); /*US ////////////////////////////////////// // Keys mKeyWidget = new KeyWidget( tab3 ); mKeyWidget->setMinimumSize( mKeyWidget->sizeHint() ); connect( mKeyWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mKeyWidget, 1, 1, Qt::AlignTop ); */ mTabWidget->addTab( tab3, i18n( "&Images" ) ); } void AddresseeEditorWidget::load() { // Block signals in case anything tries to emit modified // CS: This doesn't seem to work. bool block = signalsBlocked(); blockSignals( true ); mBlockSignals = true; // used for internal signal blocking mNameEdit->setText( mAddressee.assembledName() ); if ( mAddressee.formattedName().isEmpty() ) { //US KConfig config( "kaddressbookrc" ); KConfig config( locateLocal("config", "kabcrc") ); config.setGroup( "General" ); mFormattedNameType = config.readNumEntry( "FormattedNameType", 1 ); mAddressee.setFormattedName( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) ); } else {; if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::SimpleName ) ) mFormattedNameType = NameEditDialog::SimpleName; else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::FullName ) ) mFormattedNameType = NameEditDialog::FullName; else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::ReverseName ) ) mFormattedNameType = NameEditDialog::ReverseName; else mFormattedNameType = NameEditDialog::CustomName; } mFormattedNameLabel->setText( mAddressee.formattedName() ); mAConfig->setUid( mAddressee.uid() ); if ( mAConfig->automaticNameParsing() ) { mNameLabel->hide(); mNameEdit->show(); } else { mNameEdit->hide(); mNameLabel->setText( mNameEdit->text() ); mNameLabel->show(); } mRoleEdit->setText( mAddressee.role() ); mOrgEdit->setText( mAddressee.organization() ); //US mURLEdit->setURL( mAddressee.url().url() ); mURLEdit->setText( mAddressee.url().prettyURL() ); //US?? mURLEdit->home( false ); // mNoteEdit->setText( mAddressee.note() ); mNoteEdit->setText( mAddressee.note() ); mEmailWidget->setEmails( mAddressee.emails() ); mPhoneEditWidget->setPhoneNumbers( mAddressee.phoneNumbers() ); mAddressEditWidget->setAddresses( mAddressee, mAddressee.addresses() ); mBirthdayPicker->setDate( mAddressee.birthday().date() ); //US mAnniversaryPicker->setDate( QDate::fromString( mAddressee.custom( //US "KADDRESSBOOK", "X-Anniversary" ), Qt::ISODate) ); QDate dt = KGlobal::locale()->readDate( mAddressee.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate mAnniversaryPicker->setDate( dt ); mNicknameEdit->setText( mAddressee.nickName() ); mCategoryEdit->setText( mAddressee.categories().join( "," ) ); mGeoWidget->setGeo( mAddressee.geo() ); mImageWidget->setPhoto( mAddressee.photo() ); mImageWidget->setLogo( mAddressee.logo() ); mKeyWidget->setKeys( mAddressee.keys() ); mSecrecyWidget->setSecrecy( mAddressee.secrecy() ); #ifndef KAB_EMBEDDED mSoundWidget->setSound( mAddressee.sound() ); #else //KAB_EMBEDDED //US qDebug("AddresseeEditorWidget::load has to be changed 2"); #endif //KAB_EMBEDDED // Load customs mIMAddressEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-IMAddress" ) ); mSpouseEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-SpousesName" ) ); mChildEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Children" ) ); mManagerEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-ManagersName" ) ); mAssistantEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-AssistantsName" ) ); mDepartmentEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Department" ) ); mOfficeEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Office" ) ); mProfessionEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Profession" ) ); QString gen = mAddressee.custom( "KADDRESSBOOK", "X-Gender" ); if ( gen == "female" ) mGenderBox->setCurrentItem ( 1 ); else if ( gen == "male" ) mGenderBox->setCurrentItem ( 2 ); else mGenderBox->setCurrentItem ( 0 ); blockSignals( block ); mBlockSignals = false; mDirty = false; } void AddresseeEditorWidget::save() { if ( !dirty() ) { return; } mAddressee.setRevision( QDateTime::currentDateTime() ); mAddressee.setRole( mRoleEdit->text() ); mAddressee.setOrganization( mOrgEdit->text() ); mAddressee.setUrl( KURL( mURLEdit->text() ) ); mAddressee.setNote( mNoteEdit->text() ); if ( mBirthdayPicker->inputIsValid() ) { QDate da = mBirthdayPicker->date(); mAddressee.setBirthday( QDateTime( da ) ); //qDebug("bday %s ",da.toString().latin1()); } else { mAddressee.setBirthday( QDateTime() ); mBirthdayPicker->clear(); } mAddressee.setNickName( mNicknameEdit->text() ); mAddressee.setCategories( QStringList::split( ",", mCategoryEdit->text() ) ); mAddressee.setGeo( mGeoWidget->geo() ); mAddressee.setPhoto( mImageWidget->photo() ); mAddressee.setLogo( mImageWidget->logo() ); mAddressee.setKeys( mKeyWidget->keys() ); #ifndef KAB_EMBEDDED mAddressee.setSound( mSoundWidget->sound() ); #else //KAB_EMBEDDED //US qDebug("AddresseeEditorWidget::save sound not supported"); #endif //KAB_EMBEDDED mAddressee.setSecrecy( mSecrecyWidget->secrecy() ); // save custom fields mAddressee.insertCustom( "KADDRESSBOOK", "X-IMAddress", mIMAddressEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-SpousesName", mSpouseEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-Children", mChildEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-ManagersName", mManagerEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-AssistantsName", mAssistantEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-Department", mDepartmentEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-Office", mOfficeEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-Profession", mProfessionEdit->text() ); if ( mAnniversaryPicker->inputIsValid() ) { QString dt = KGlobal::locale()->formatDate(mAnniversaryPicker->date(), true, KLocale::ISODate); mAddressee.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); } else { mAddressee.removeCustom( "KADDRESSBOOK", "X-Anniversary" ); mAnniversaryPicker->clear(); } int gen = mGenderBox->currentItem (); if ( gen == 1 ) mAddressee.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); else if ( gen == 2 ) mAddressee.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); else mAddressee.removeCustom( "KADDRESSBOOK", "X-Gender" ); // Save the email addresses QStringList emails = mAddressee.emails(); QStringList::Iterator iter; for ( iter = emails.begin(); iter != emails.end(); ++iter ) mAddressee.removeEmail( *iter ); emails = mEmailWidget->emails(); bool first = true; for ( iter = emails.begin(); iter != emails.end(); ++iter ) { mAddressee.insertEmail( *iter, first ); first = false; } // Save the phone numbers KABC::PhoneNumber::List phoneNumbers; KABC::PhoneNumber::List::Iterator phoneIter; phoneNumbers = mAddressee.phoneNumbers(); for ( phoneIter = phoneNumbers.begin(); phoneIter != phoneNumbers.end(); ++phoneIter ) mAddressee.removePhoneNumber( *phoneIter ); phoneNumbers = mPhoneEditWidget->phoneNumbers(); for ( phoneIter = phoneNumbers.begin(); phoneIter != phoneNumbers.end(); ++phoneIter ) mAddressee.insertPhoneNumber( *phoneIter ); mAddressee.makePhoneNumbersOLcompatible(); // Save the addresses KABC::Address::List addresses; KABC::Address::List::Iterator addressIter; addresses = mAddressee.addresses(); for ( addressIter = addresses.begin(); addressIter != addresses.end(); ++addressIter ) mAddressee.removeAddress( *addressIter ); addresses = mAddressEditWidget->addresses(); for ( addressIter = addresses.begin(); addressIter != addresses.end(); ++addressIter ) mAddressee.insertAddress( *addressIter ); mDirty = false; } bool AddresseeEditorWidget::dirty() { if ( ! mDirty ) { if ( mBirthdayPicker->inputIsValid() ) { QDate da = mBirthdayPicker->date(); if ( !(da == mAddressee.birthday().date())) mDirty = true; } else { mBirthdayPicker->clear(); } if ( mAnniversaryPicker->inputIsValid() ) { QDate da = mAnniversaryPicker->date(); if ( da != KGlobal::locale()->readDate( mAddressee.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d")) mDirty = true; } else { mAnniversaryPicker->clear(); } } return mDirty; } void AddresseeEditorWidget::nameTextChanged( const QString &text ) { if ( mBlockSignals ) return; // use the addressee class to parse the name for us mAConfig->setUid( mAddressee.uid() ); if ( mAConfig->automaticNameParsing() ) { if ( !mAddressee.formattedName().isEmpty() ) { QString fn = mAddressee.formattedName(); mAddressee.setNameFromString( text ); mAddressee.setFormattedName( fn ); } else { // use extra addressee to avoid a formatted name assignment Addressee addr; addr.setNameFromString( text ); mAddressee.setPrefix( addr.prefix() ); mAddressee.setGivenName( addr.givenName() ); mAddressee.setAdditionalName( addr.additionalName() ); mAddressee.setFamilyName( addr.familyName() ); mAddressee.setSuffix( addr.suffix() ); } } nameBoxChanged(); emitModified(); } void AddresseeEditorWidget::nameBoxChanged() { KABC::Addressee addr; mAConfig->setUid( mAddressee.uid() ); if ( mAConfig->automaticNameParsing() ) { addr.setNameFromString( mNameEdit->text() ); mNameLabel->hide(); mNameEdit->show(); } else { addr = mAddressee; mNameEdit->hide(); mNameLabel->setText( mNameEdit->text() ); mNameLabel->show(); } if ( mFormattedNameType != NameEditDialog::CustomName ) { mFormattedNameLabel->setText( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) ); mAddressee.setFormattedName( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) ); } } void AddresseeEditorWidget::nameButtonClicked() { // show the name dialog. NameEditDialog dialog( mAddressee, mFormattedNameType, this ); if ( KApplication::execDialog( &dialog) ) { if ( dialog.changed() ) { mAddressee.setFamilyName( dialog.familyName() ); mAddressee.setGivenName( dialog.givenName() ); mAddressee.setPrefix( dialog.prefix() ); mAddressee.setSuffix( dialog.suffix() ); mAddressee.setAdditionalName( dialog.additionalName() ); mFormattedNameType = dialog.formattedNameType(); if ( mFormattedNameType == NameEditDialog::CustomName ) { mFormattedNameLabel->setText( dialog.customFormattedName() ); mAddressee.setFormattedName( dialog.customFormattedName() ); } // Update the name edit. bool block = mNameEdit->signalsBlocked(); mNameEdit->blockSignals( true ); mNameEdit->setText( mAddressee.assembledName() ); mNameEdit->blockSignals( block ); // Update the combo box. nameBoxChanged(); emitModified(); } } } void AddresseeEditorWidget::categoryButtonClicked() { // Show the category dialog if ( mCategoryDialog == 0 ) { mCategoryDialog = new KPIM::CategorySelectDialog( KABPrefs::instance(), this ); connect( mCategoryDialog, SIGNAL( categoriesSelected( const QStringList& ) ), SLOT(categoriesSelected( const QStringList& ) ) ); connect( mCategoryDialog, SIGNAL( editCategories() ), SLOT( editCategories() ) ); } mCategoryDialog->setCategories(); mCategoryDialog->setSelected( QStringList::split( ",", mCategoryEdit->text() ) ); mCategoryDialog->show(); mCategoryDialog->raise(); } void AddresseeEditorWidget::categoriesSelected( const QStringList &list ) { mCategoryEdit->setText( list.join( "," ) ); } void AddresseeEditorWidget::editCategories() { if ( mCategoryEditDialog == 0 ) { mCategoryEditDialog = new KPIM::CategoryEditDialog( KABPrefs::instance(), this ); connect( mCategoryEditDialog, SIGNAL( categoryConfigChanged() ), SLOT( categoryButtonClicked() ) ); } mCategoryEditDialog->show(); mCategoryEditDialog->raise(); } void AddresseeEditorWidget::emitModified() { mDirty = true; KABC::Addressee::List list; if ( mIsExtension && !mBlockSignals ) { save(); list.append( mAddressee ); } emit modified( list ); } void AddresseeEditorWidget::dateChanged( QDate ) { emitModified(); } //US invalid dates are handdled by the KDateEdit widget itself void AddresseeEditorWidget::invalidDate() { KMessageBox::sorry( this, i18n( "You must specify a valid date" ) ); } void AddresseeEditorWidget::pageChanged( QWidget *wdg ) { #ifndef KAB_EMBEDDED if ( wdg ) KAcceleratorManager::manage( wdg ); #else //KAB_EMBEDDED //US #endif //KAB_EMBEDDED } QString AddresseeEditorWidget::title() const { return i18n( "Contact Editor" ); } QString AddresseeEditorWidget::identifier() const { return i18n( "contact_editor" ); } -#ifndef KAB_EMBEDDED -#include "addresseeeditorwidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_addresseeeditorwidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/addresseeeditorwidget.h b/kaddressbook/addresseeeditorwidget.h index 816bbb5..aa1207e 100644 --- a/kaddressbook/addresseeeditorwidget.h +++ b/kaddressbook/addresseeeditorwidget.h @@ -1,193 +1,193 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef ADDRESSEEEDITORWIDGET_H #define ADDRESSEEEDITORWIDGET_H #include <qdatetime.h> -#include <qpopupmenu.h> +#include <q3popupmenu.h> #include <qcombobox.h> #include <kabc/addressee.h> #include <kdialogbase.h> #include <kjanuswidget.h> #include "extensionwidget.h" class AddresseeConfig; class QCheckBox; class QSpinBox; class QTabWidget; #ifndef KAB_EMBEDDED -class QTextEdit; +class Q3TextEdit; #else //KAB_EMBEDDED -class QMultiLineEdit; +class Q3MultiLineEdit; #endif //KAB_EMBEDDED class KComboBox; class KDateEdit; class KLineEdit; class KSqueezedTextLabel; class AddressEditWidget; class EmailEditWidget; class GeoWidget; class ImageWidget; class KABCore; class KeyWidget; class PhoneEditWidget; class SecrecyWidget; class SoundWidget; namespace KPIM { class CategorySelectDialog; class CategoryEditDialog; } namespace KABC { class AddressBook; } class AddresseeEditorWidget : public ExtensionWidget { Q_OBJECT public: AddresseeEditorWidget( KABCore *core, bool isExtension, QWidget *parent, const char *name = 0 ); ~AddresseeEditorWidget(); void setAddressee( const KABC::Addressee& ); const KABC::Addressee &addressee(); void contactsSelectionChanged(); void load(); void save(); bool dirty(); QString title() const; QString identifier() const; protected slots: void showCatPopup(); void selectedCatPopup( int ); void setRole2FN(); void setCompany2FN(); void textChanged( const QString& ); void pageChanged( QWidget *wdg ); /** Emits the modified signal and sets the dirty flag. Any slot that modifies data should use this method instead of calling emit modified() directly. */ void emitModified(); void dateChanged( QDate ); void invalidDate(); void nameTextChanged( const QString& ); void nameBoxChanged(); void nameButtonClicked(); void categoryButtonClicked(); /** Called whenever the categories change in the categories dialog. */ void categoriesSelected( const QStringList& ); /** Edits which categories are available in the CategorySelectDialog. */ void editCategories(); private: AddresseeConfig * mAConfig; void initGUI(); void setupTab1(); void setupTab1_1(); void setupTab2(); void setupTab2_1(); void setupTab3(); void setupTab3_1(); KABC::Addressee mAddressee; int mFormattedNameType; bool mDirty; bool mIsExtension; bool mBlockSignals; // GUI KPIM::CategorySelectDialog *mCategoryDialog; KPIM::CategoryEditDialog *mCategoryEditDialog; QTabWidget *mTabWidget; // Tab1 and Tab1_1 KLineEdit *mNameEdit; KLineEdit *mRoleEdit; KLineEdit *mOrgEdit; KSqueezedTextLabel *mFormattedNameLabel; AddressEditWidget *mAddressEditWidget; EmailEditWidget *mEmailWidget; PhoneEditWidget *mPhoneEditWidget; KLineEdit *mURLEdit; KLineEdit *mIMAddressEdit; QPushButton *mCategoryEdit; - QPopupMenu *mCatPopup; + Q3PopupMenu *mCatPopup; SecrecyWidget *mSecrecyWidget; KSqueezedTextLabel *mNameLabel; // Tab2 and Tab2_2 KLineEdit *mDepartmentEdit; KLineEdit *mOfficeEdit; KLineEdit *mProfessionEdit; KLineEdit *mManagerEdit; KLineEdit *mAssistantEdit; KLineEdit *mNicknameEdit; KLineEdit *mSpouseEdit; KLineEdit *mChildEdit; QComboBox *mGenderBox; KDateEdit *mBirthdayPicker; KDateEdit *mAnniversaryPicker; #ifndef KAB_EMBEDDED - QTextEdit *mNoteEdit; + Q3TextEdit *mNoteEdit; #else //KAB_EMBEDDED - QMultiLineEdit *mNoteEdit; + Q3MultiLineEdit *mNoteEdit; #endif //KAB_EMBEDDED QSpinBox *mTimeZoneSpin; QSpinBox *mGeoLat; QSpinBox *mGeoLon; // Tab3 GeoWidget *mGeoWidget; ImageWidget *mImageWidget; #ifndef KAB_EMBEDDED SoundWidget *mSoundWidget; #endif //KAB_EMBEDDED KeyWidget *mKeyWidget; }; #endif diff --git a/kaddressbook/addresseeutil.cpp b/kaddressbook/addresseeutil.cpp index 366384a..a860f6d 100644 --- a/kaddressbook/addresseeutil.cpp +++ b/kaddressbook/addresseeutil.cpp @@ -1,66 +1,66 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kabc/stdaddressbook.h> #include <kabc/vcardconverter.h> #include <kdebug.h> #include <klocale.h> #include <kmessagebox.h> #include "addresseeutil.h" QString AddresseeUtil::addresseesToClipboard( const KABC::Addressee::List &list ) { KABC::VCardConverter converter; QString vcard; KABC::Addressee::List::ConstIterator it; for ( it = list.begin(); it != list.end(); ++it ) { QString tmp; if ( converter.addresseeToVCard( *it, tmp ) ) vcard += tmp + "\r\n"; } return vcard; } KABC::Addressee::List AddresseeUtil::clipboardToAddressees( const QString &data ) { - uint numVCards = data.contains( "BEGIN:VCARD", false ); + uint numVCards = data.count( "BEGIN:VCARD", Qt::CaseInsensitive ); QStringList dataList = QStringList::split( "\r\n\r\n", data ); KABC::Addressee::List addrList; for ( uint i = 0; i < numVCards && i < dataList.count(); ++i ) { KABC::VCardConverter converter; KABC::Addressee addr; if ( !converter.vCardToAddressee( dataList[ i ].stripWhiteSpace(), addr ) ) { KMessageBox::error( 0, i18n( "Invalid vCard format in clipboard" ) ); continue; } addrList.append( addr ); } return addrList; } diff --git a/kaddressbook/addviewdialog.cpp b/kaddressbook/addviewdialog.cpp index 6def26b..b52a83c 100644 --- a/kaddressbook/addviewdialog.cpp +++ b/kaddressbook/addviewdialog.cpp @@ -1,118 +1,120 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KAB_EMBEDDED #endif //KAB_EMBEDDED #include <qradiobutton.h> -#include <qbuttongroup.h> +#include <q3buttongroup.h> #include <qlabel.h> #include <qlineedit.h> #include <qlayout.h> +//Added by qt3to4: +#include <Q3GridLayout> #include <klocale.h> #include <kglobal.h> #include "kaddressbookview.h" #include "addviewdialog.h" -AddViewDialog::AddViewDialog( QDict<ViewFactory> *viewFactoryDict, +AddViewDialog::AddViewDialog( Q3Dict<ViewFactory> *viewFactoryDict, QWidget *parent, const char *name ) : KDialogBase( KDialogBase::Plain, i18n( "Add View" ), KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, parent, name ), mViewFactoryDict( viewFactoryDict ) { //US setMinimumSize( KMIN(KGlobal::getDesktopWidth(), 300), KMIN(KGlobal::getDesktopHeight(), 300)); mTypeId = 0; QWidget *page = plainPage(); - QGridLayout *layout = new QGridLayout( page, 2, 2 ); + Q3GridLayout *layout = new Q3GridLayout( page, 2, 2 ); layout->setSpacing( spacingHint() ); layout->setRowStretch( 1, 1 ); layout->setColStretch( 1, 1 ); QLabel *label = new QLabel( i18n( "View name:" ), page ); layout->addWidget( label, 0, 0 ); mViewNameEdit = new QLineEdit( page ); connect( mViewNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); layout->addWidget( mViewNameEdit, 0, 1 ); - mTypeGroup = new QButtonGroup( 2, Qt::Horizontal, i18n( "View Type" ), page ); + mTypeGroup = new Q3ButtonGroup( 2, Qt::Horizontal, i18n( "View Type" ), page ); connect( mTypeGroup, SIGNAL( clicked( int ) ), this, SLOT( clicked( int ) ) ); layout->addMultiCellWidget( mTypeGroup, 1, 1, 0, 1 ); // Now create the radio buttons. This needs some layout work. - QDictIterator<ViewFactory> iter( *mViewFactoryDict ); + Q3DictIterator<ViewFactory> iter( *mViewFactoryDict ); for ( iter.toFirst(); iter.current(); ++iter ) { //US i am not quit sure, why I can nopt use (*iter)-> here //US new QRadioButton( (*iter)->type(), mTypeGroup ); //US label = new QLabel( (*iter)->description(), mTypeGroup ); #ifdef DESKTOP_VERSION new QRadioButton( (*iter)->type(), mTypeGroup ); label = new QLabel( (*iter)->description(), mTypeGroup ); #else new QRadioButton( (*iter).type(), mTypeGroup ); label = new QLabel( (*iter).description(), mTypeGroup ); #endif label->setAlignment( Qt::AlignLeft | Qt::AlignTop | Qt::WordBreak ); } mTypeGroup->setButton( 0 ); mViewNameEdit->setFocus(); enableButton( KDialogBase::Ok, false ); } AddViewDialog::~AddViewDialog() { } QString AddViewDialog::viewName()const { return mViewNameEdit->text(); } QString AddViewDialog::viewType()const { return mTypeGroup->find( mTypeId )->text(); } void AddViewDialog::clicked( int id ) { mTypeId = id; } void AddViewDialog::textChanged( const QString &text ) { enableButton( KDialogBase::Ok, !text.isEmpty() ); } -#ifndef KAB_EMBEDDED -#include "addviewdialog.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_addviewdialog.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/addviewdialog.h b/kaddressbook/addviewdialog.h index 8cc12f5..c3e8efd 100644 --- a/kaddressbook/addviewdialog.h +++ b/kaddressbook/addviewdialog.h @@ -1,73 +1,73 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef ADDVIEWDIALOG_H #define ADDVIEWDIALOG_H #include <kdialogbase.h> -#include <qdict.h> +#include <q3dict.h> #include <qstring.h> class ViewFactory; -class QButtonGroup; +class Q3ButtonGroup; class QLineEdit; /** Modal dialog used for adding a new view. The dialog asks for the name of the view as well as the type. Someday it would be nice for this to be a wizard. */ class AddViewDialog : public KDialogBase { Q_OBJECT public: - AddViewDialog( QDict<ViewFactory> *viewFactoryDict, QWidget *parent, + AddViewDialog( Q3Dict<ViewFactory> *viewFactoryDict, QWidget *parent, const char *name = 0 ); ~AddViewDialog(); QString viewName()const; QString viewType()const ; protected slots: /** Called when the user selects a type radio button. */ void clicked( int id ); /** Called when the user changes the text in the name of the view. */ void textChanged( const QString &text ); private: - QDict<ViewFactory> *mViewFactoryDict; + Q3Dict<ViewFactory> *mViewFactoryDict; QLineEdit *mViewNameEdit; - QButtonGroup *mTypeGroup; + Q3ButtonGroup *mTypeGroup; int mTypeId; }; #endif diff --git a/kaddressbook/details/detailsviewcontainer.cpp b/kaddressbook/details/detailsviewcontainer.cpp index cee5886..4a86aca 100644 --- a/kaddressbook/details/detailsviewcontainer.cpp +++ b/kaddressbook/details/detailsviewcontainer.cpp @@ -1,164 +1,167 @@ /* This file is part of KAddressBook. Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qcombobox.h> -#include <qframe.h> +#include <q3frame.h> #include <qlabel.h> #include <qlayout.h> -#include <qwidgetstack.h> +#include <q3widgetstack.h> +//Added by qt3to4: +#include <Q3HBoxLayout> +#include <Q3VBoxLayout> #include <kapplication.h> #include <kdebug.h> #include <kdialog.h> #include "look_basic.h" //#include "look_details.h" #include "look_html.h" #ifdef KAB_EMBEDDED #include "kabprefs.h" #endif //KAB_EMBEDDED #include "detailsviewcontainer.h" ViewContainer::ViewContainer( QWidget *parent, const char* name ) : QWidget( parent, name ), mCurrentLook( 0 ) { - QBoxLayout *topLayout = new QVBoxLayout( this ); + Q3BoxLayout *topLayout = new Q3VBoxLayout( this ); //topLayout->setMargin( KDialog::marginHint() ); //topLayout->setSpacing( KDialog::spacingHint() ); topLayout->setMargin( 0 ); topLayout->setSpacing( 0 ); - QBoxLayout *styleLayout = new QHBoxLayout( topLayout ); + Q3BoxLayout *styleLayout = new Q3HBoxLayout( topLayout ); QLabel *label = new QLabel( i18n("Style:"), this ); styleLayout->addWidget( label ); mStyleCombo = new QComboBox( this ); styleLayout->addWidget( mStyleCombo ); - QFrame *frameRuler = new QFrame( this ); + Q3Frame *frameRuler = new Q3Frame( this ); //US frameRuler->setFrameShape( QFrame::HLine ); //US frameRuler->setFrameShadow( QFrame::Sunken ); //US topLayout->addWidget( frameRuler ); - mDetailsStack = new QWidgetStack( this ); + mDetailsStack = new Q3WidgetStack( this ); topLayout->addWidget( mDetailsStack, 1 ); registerLooks(); #if 1 // Hide detailed view selection combo box, because we currently have // only one. Reenable it when there are more detailed views. label->hide(); mStyleCombo->hide(); frameRuler->hide(); #endif } void ViewContainer::printView() { mCurrentLook->printView(); } KABBasicLook *ViewContainer::currentLook() { return mCurrentLook; } void ViewContainer::registerLooks() { mLookFactories.append( new KABHtmlViewFactory( mDetailsStack ) ); // mLookFactories.append( new KABDetailedViewFactory( mDetailsStack ) ); mStyleCombo->clear(); for ( uint i = 0; i < mLookFactories.count(); ++i ) mStyleCombo->insertItem( mLookFactories.at( i )->description() ); if ( !mLookFactories.isEmpty() ) slotStyleSelected( 0 ); } void ViewContainer::slotStyleSelected( int index ) { #ifndef KAB_EMBEDDED KConfig *config = kapp->config(); #else //KAB_EMBEDDED //US I hope I got the same config object as above expected. KConfig *config = KABPrefs::instance()->getConfig(); #endif //KAB_EMBEDDED KABC::Addressee addr; if ( index >= 0 && index < mStyleCombo->count() ) { if ( mCurrentLook != 0 ) { mCurrentLook->saveSettings( config ); addr = mCurrentLook->addressee(); delete mCurrentLook; mCurrentLook = 0; } KABLookFactory *factory = mLookFactories.at( index ); mCurrentLook = factory->create(); mDetailsStack->raiseWidget( mCurrentLook ); connect( mCurrentLook, SIGNAL( sendEmail( const QString& ) ), this, SIGNAL( sendEmail( const QString& ) ) ); connect( mCurrentLook, SIGNAL( browse( const QString& ) ), this, SIGNAL( browse( const QString& ) ) ); } mCurrentLook->restoreSettings( config ); mCurrentLook->setAddressee( addr ); } void ViewContainer::setAddressee( const KABC::Addressee& addressee ) { if ( mCurrentLook != 0 ) { mCurrentAddressee = addressee; mCurrentLook->setAddressee( mCurrentAddressee ); } } KABC::Addressee ViewContainer::addressee() { static KABC::Addressee empty; // do not use! if ( !mCurrentLook ) return empty; else return mCurrentLook->addressee(); } void ViewContainer::setReadOnly( bool state ) { if ( mCurrentLook ) mCurrentLook->setReadOnly( state ); } -#ifndef KAB_EMBEDDED -#include "detailsviewcontainer.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_detailsviewcontainer.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/details/detailsviewcontainer.h b/kaddressbook/details/detailsviewcontainer.h index 9684736..f310a30 100644 --- a/kaddressbook/details/detailsviewcontainer.h +++ b/kaddressbook/details/detailsviewcontainer.h @@ -1,103 +1,103 @@ /* This file is part of KAddressBook. Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef DETAILSVIEWCONTAINER_H #define DETAILSVIEWCONTAINER_H -#include <qptrlist.h> +#include <q3ptrlist.h> #include "look_basic.h" class QComboBox; -class QWidgetStack; +class Q3WidgetStack; class ViewContainer : public QWidget { Q_OBJECT public: ViewContainer( QWidget *parent = 0, const char* name = 0 ); /** Return the look currently selected. If there is none, it returns zero. Do not use this pointer to store a reference to a look, the user might select another one (e.g., create a new object) at any time. */ KABBasicLook *currentLook(); /** Return the contact currently displayed. */ KABC::Addressee addressee(); public slots: void printView(); /** Set the contact currently displayed. */ void setAddressee( const KABC::Addressee& addressee ); /** Set read-write state. */ void setReadOnly( bool state ); signals: /** The contact has been changed. */ void addresseeChanged(); /** The user acticated the email address displayed. This may happen by, for example, clicking on the displayed mailto-URL. */ void sendEmail( const QString& ); /** The user activated one of the displayed HTTP URLs. For example by clicking on the displayed homepage address. */ void browse( const QString& ); protected: /** A style has been selected. Overloaded from base class. */ void slotStyleSelected( int ); /** Register the available looks. */ void registerLooks(); private: KABC::Addressee mCurrentAddressee; KABBasicLook *mCurrentLook; - QPtrList<KABLookFactory> mLookFactories; + Q3PtrList<KABLookFactory> mLookFactories; QComboBox *mStyleCombo; - QWidgetStack *mDetailsStack; + Q3WidgetStack *mDetailsStack; }; #endif diff --git a/kaddressbook/details/look_basic.cpp b/kaddressbook/details/look_basic.cpp index 0245686..48cc42a 100644 --- a/kaddressbook/details/look_basic.cpp +++ b/kaddressbook/details/look_basic.cpp @@ -1,75 +1,75 @@ /* This file is part of KAddressBook. Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kdebug.h> #include "look_basic.h" KABBasicLook::KABBasicLook( QWidget *parent, const char *name ) - : QVBox( parent, name ), mReadOnly( false ) + : Q3VBox( parent, name ), mReadOnly( false ) { } void KABBasicLook::setReadOnly( bool state ) { mReadOnly = state; } bool KABBasicLook::isReadOnly() const { return mReadOnly; } void KABBasicLook::setAddressee( const KABC::Addressee &addr ) { if ( mAddressee == addr ) return; mAddressee = addr; repaint( false ); } KABC::Addressee KABBasicLook::addressee() { return mAddressee; } void KABBasicLook::restoreSettings( KConfig* ) { } void KABBasicLook::saveSettings( KConfig* ) { } KABLookFactory::KABLookFactory( QWidget *parent, const char *name ) : mParent( parent ), mName( name ) { } KABLookFactory::~KABLookFactory() { } -#ifndef KAB_EMBEDDED -#include "look_basic.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_look_basic.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/details/look_basic.h b/kaddressbook/details/look_basic.h index a65c99c..a70e7f7 100644 --- a/kaddressbook/details/look_basic.h +++ b/kaddressbook/details/look_basic.h @@ -1,136 +1,136 @@ /* This file is part of KAddressBook. Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef LOOK_KABBASIC_H #define LOOK_KABBASIC_H #include <kabc/addressbook.h> -#include <qvbox.h> +#include <q3vbox.h> class KConfig; /** This is a pure virtual base class that defines the interface for how to display and change entries of the KDE addressbook. This basic widget does not show anything in its client space. Derive it and implement its look and how the user may edit the entry. The paintEvent() has to paint the whole widget, since repaint() calls will not delete the widgets background. */ -class KABBasicLook : public QVBox +class KABBasicLook : public Q3VBox { Q_OBJECT public: /** The constructor. */ KABBasicLook( QWidget *parent = 0, const char *name = 0 ); /** Set the entry. It will be displayed automatically. */ virtual void setAddressee( const KABC::Addressee& addressee ); /** Get the current entry. */ virtual KABC::Addressee addressee(); /** Configure the view from the configuration file. */ virtual void restoreSettings( KConfig* ); /** Save the view settings to the configuration file. */ virtual void saveSettings( KConfig* ); /** Retrieve read-write state. */ bool isReadOnly() const; void printView(){ emit printMyView();} signals: void printMyView(); /** This signal is emitted when the user changed the entry. */ void entryChanged(); /** This signal indicates that the entry needs to be changed immidiately in the database. This might be due to changes in values that are available in menus. */ void saveMe(); /** The user acticated the email address displayed. This may happen by, for example, clicking on the displayed mailto-URL. */ void sendEmail( const QString &email ); /** The user activated one of the displayed HTTP URLs. For example by clicking on the displayed homepage address. */ void browse( const QString &url ); public slots: /** Set read-write state. */ virtual void setReadOnly( bool state ); private: KABC::Addressee mAddressee; bool mReadOnly; }; class KABLookFactory { public: KABLookFactory( QWidget *parent = 0, const char *name = 0 ); virtual ~KABLookFactory(); virtual KABBasicLook *create() = 0; /** Overload this method to provide a one-liner description for your look. */ virtual QString description() = 0; protected: QWidget *mParent; const char* mName; }; #endif diff --git a/kaddressbook/details/look_details.cpp b/kaddressbook/details/look_details.cpp index 11d06e9..2c3a79d 100644 --- a/kaddressbook/details/look_details.cpp +++ b/kaddressbook/details/look_details.cpp @@ -1,419 +1,419 @@ /* This file is part of KAddressBook. Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kconfig.h> #include <kdebug.h> #include <kglobalsettings.h> #include <kinstance.h> #include <klocale.h> #include <kstandarddirs.h> #include <qcursor.h> #include <qdir.h> #include <qpainter.h> #include <qpopupmenu.h> #include "global.h" #include "kabentrypainter.h" #include "look_details.h" #define GRID 5 const QString KABDetailedView::mBorderedBGDir = "kab3part/backgrounds/bordered/"; const QString KABDetailedView::mTiledBGDir = "kab3part/backgrounds/tiled/"; KABDetailedView::KABDetailedView( QWidget *parent, const char *name ) : KABBasicLook( parent, name ), mPainter( 0 ), mBackgroundStyle( None ), mDefaultBGColor( white ), mHeadLineBGColor( darkBlue ), mHeadLineTextColor( yellow ), mGrid( 3 ), mMenuBorderedBG( 0 ), mMenuTiledBG( 0 ) { KToggleAction** actions[] = { &mActionShowAddresses, &mActionShowEmails, &mActionShowPhones, &mActionShowURLs }; QString actionTexts[] = { i18n( "Show Postal Addresses" ), i18n( "Show Email Addresses" ), i18n( "Show Telephone Numbers" ), i18n( "Show Web Pages (URLs)" ) }; QFont general = KGlobalSettings::generalMaxFont(); QFont fixed = KGlobalSettings::fixedFont(); QString gfont = general.family(); QString ffont = fixed.family(); int gpointsize = general.pixelSize(); if ( gpointsize == -1 ) gpointsize = general.pointSize(); int fpointsize = fixed.pixelSize(); if ( fpointsize == -1 ) fpointsize = fixed.pointSize(); mPainter = new KABEntryPainter; mPainter->setForegroundColor( black ); mPainter->setHeaderColor( mHeadLineTextColor ); mPainter->setUseHeaderColor( mUseHeadLineBGColor ); mPainter->setBackgroundColor( mHeadLineBGColor ); mPainter->setHeaderFont( QFont( gfont, gpointsize + 4, QFont::Bold, true ) ); mPainter->setHeadLineFont( QFont( gfont, gpointsize + 2, QFont::Bold, true ) ); mPainter->setBodyFont( QFont( gfont, gpointsize, QFont::Normal, false ) ); mPainter->setFixedFont( QFont( ffont, fpointsize, QFont::Normal, false ) ); mPainter->setCommentFont( QFont( gfont, gpointsize, QFont::Normal, false ) ); const int numActions = sizeof( actions ) / sizeof( actions[ 0 ] ); for ( int count = 0; count < numActions; ++count ) { *actions[ count ] = new KToggleAction( actionTexts[ count ] ); (*actions[ count ])->setChecked( true ); } setMouseTracking( true ); setBackgroundMode( NoBackground ); } KABDetailedView::~KABDetailedView() { delete mPainter; mPainter = 0; } bool KABDetailedView::getBackground( QString path, QPixmap& image ) { QMap<QString, QPixmap>::iterator pos; pos = mBackgroundMap.find( path ); if ( pos == mBackgroundMap.end() ) { // the image has not been loaded previously if ( image.load( path ) ) { mBackgroundMap[ path ] = image; return true; } else return false; } else { // image found in cache image = pos.data(); return true; } } void KABDetailedView::paintEvent( QPaintEvent* ) { const int BorderSpace = mGrid; QPixmap pm( width(), height() ); QPainter p; QRect entryArea = QRect( BorderSpace, mGrid, width() - mGrid - BorderSpace, height() - 2 * mGrid ); p.begin( &pm ); p.setPen( darkBlue ); p.setBrush( mDefaultBGColor ); p.drawRect( 0, 0, width(), height() ); switch ( mBackgroundStyle ) { case Tiled: p.drawTiledPixmap( 1, 1, width() - 2, height() - 2, mCurrentBackground ); break; case Bordered: p.drawTiledPixmap( 1, 1, QMIN( width() - 2, mCurrentBackground.width() ), height() - 2, mCurrentBackground ); break; case None: // no BG image defined for this entry: default: if ( mUseDefaultBGImage ) p.drawTiledPixmap( 1, 1, width() - 2, height() - 2, mDefaultBGImage ); break; }; p.setViewport( entryArea ); mPainter->setShowAddresses( mActionShowAddresses->isChecked() ); mPainter->setShowEmails( mActionShowEmails->isChecked() ); mPainter->setShowPhones( mActionShowPhones->isChecked() ); mPainter->setShowURLs( mActionShowURLs->isChecked() ); mPainter->printAddressee( addressee(), QRect( 0, 0, entryArea.width(), entryArea.height() ), &p ); p.end(); bitBlt( this, 0, 0, &pm ); } void KABDetailedView::mouseMoveEvent( QMouseEvent *e ) { QPoint bias( mGrid, mGrid ); int rc; bool hit = false; if ( ( rc = mPainter->hitsEmail( e->pos() - bias ) ) != -1 ) hit = true; else if ( ( rc = mPainter->hitsURL( e->pos() - bias ) ) != -1 ) hit = true; else if ( ( rc = mPainter->hitsPhone( e->pos() - bias ) ) != -1 ) hit = true; else if ( ( rc = mPainter->hitsTalk( e->pos() - bias ) ) != -1 ) hit = true; if ( hit ) { if ( cursor().shape() != PointingHandCursor ) setCursor( PointingHandCursor ); else if( cursor().shape() != ArrowCursor ) setCursor(ArrowCursor); } } void KABDetailedView::mousePressEvent( QMouseEvent *e ) { - QPopupMenu menu( this ); - QPopupMenu *menuBG = new QPopupMenu( &menu ); - mMenuBorderedBG = new QPopupMenu( &menu ); - mMenuTiledBG = new QPopupMenu( &menu ); + Q3PopupMenu menu( this ); + Q3PopupMenu *menuBG = new Q3PopupMenu( &menu ); + mMenuBorderedBG = new Q3PopupMenu( &menu ); + mMenuTiledBG = new Q3PopupMenu( &menu ); menu.insertItem( i18n( "Select Background" ), menuBG ); menuBG->insertItem( i18n( "Bordered Backgrounds" ), mMenuBorderedBG ); menuBG->insertItem( i18n( "Tiled Backgrounds" ), mMenuTiledBG ); menu.insertSeparator(); QPoint point = e->pos() - QPoint( mGrid, mGrid ); int rc; QStringList dirsBorderedBG, dirsTiledBG; QDir dir; switch( e->button() ) { case QMouseEvent::RightButton: if ( isReadOnly() ) menu.setItemEnabled( menu.idAt( 0 ), false ); else { // TODO: settings need to be saved in view options dirsBorderedBG = KGlobal::instance()->dirs()->findDirs( "data", mBorderedBGDir ); if ( dirsBorderedBG.count() > 0 ) { dir.setPath( dirsBorderedBG[ 0 ] ); mBorders = dir.entryList( QDir::Files ); for ( uint count = 0; count < mBorders.count(); ++count ) mMenuBorderedBG->insertItem( mBorders[ count ], count ); connect( mMenuBorderedBG, SIGNAL( activated( int ) ), SLOT( slotBorderedBGSelected( int ) ) ); } else menuBG->setItemEnabled( menuBG->idAt( 0 ), false ); dirsTiledBG = KGlobal::instance()->dirs()->findDirs( "data", mTiledBGDir ); if ( dirsTiledBG.count() > 0 ) { dir.setPath( dirsTiledBG[ 0 ] ); mTiles = dir.entryList( QDir::Files ); for ( uint count = 0; count < mTiles.count(); ++count ) mMenuTiledBG->insertItem( mTiles[ count ], count ); connect( mMenuTiledBG, SIGNAL( activated( int ) ), SLOT( slotTiledBGSelected( int ) ) ); } else menuBG->setItemEnabled( menuBG->idAt( 1 ), false ); } mActionShowAddresses->plug( &menu ); mActionShowEmails->plug( &menu ); mActionShowPhones->plug( &menu ); mActionShowURLs->plug( &menu ); menu.exec( e->globalPos() ); break; case QMouseEvent::LeftButton: // find whether the pointer touches an email address, URL, // talk address or telephone number: if ( ( rc = mPainter->hitsEmail( point ) ) != -1 ) { emit sendEmail( addressee().emails()[ rc ] ); break; } if ( ( rc = mPainter->hitsURL( point ) ) != -1 ) { emit browse( addressee().url().prettyURL() ); break; } if ( ( rc = mPainter->hitsPhone( point ) ) != -1 ) { // not implemented yet break; } if ( ( rc = mPainter->hitsTalk( point ) ) != -1 ) { // not implemented yet break; } break; default: break; } mMenuBorderedBG = 0; mMenuTiledBG = 0; } void KABDetailedView::setAddressee( const KABC::Addressee &addr ) { BackgroundStyle style = None; QString dir, file, styleSetting; KABBasicLook::setAddressee( addr ); // TODO: preload path and styleSetting with possible preference values styleSetting = addressee().custom( "kab", "BackgroundStyle" ); style = (BackgroundStyle)styleSetting.toInt(); file = addressee().custom( "kab", "BackgroundImage" ); if ( !file.isEmpty() ) { switch ( style ) { case Tiled: dir = mTiledBGDir; break; case Bordered: dir = mBorderedBGDir; break; case None: default: break; } QStringList dirs = KGlobal::instance()->dirs()->findDirs( "data", dir ); mBackgroundStyle = None; if ( !dirs.isEmpty() ) { uint count = 0; for ( ; count < dirs.count(); ++count ) { QDir folder; folder.setPath( dirs[ count ] ); file = folder.absPath() + "/" + file; if ( getBackground( file, mCurrentBackground ) ) { mBackgroundStyle = style; break; } } if ( count == dirs.count() ) { kdDebug(5720) << "KABDetailedView::setEntry: " << file << " not locatable." << endl; } } } else { // no background here mBackgroundStyle = None; mCurrentBackground.resize( 0, 0 ); } repaint( false ); } void KABDetailedView::slotBorderedBGSelected( int index ) { if ( index >= 0 && (uint)index < mBorders.count() && !isReadOnly() ) { // get the selection and make it a full path QString path = mBorders[ index ]; mBackgroundStyle = Bordered; addressee().insertCustom( "kab", "BackgroundStyle", QString().setNum( mBackgroundStyle ) ); addressee().insertCustom( "kab", "BackgroundImage", path ); setAddressee( addressee() ); } } void KABDetailedView::slotTiledBGSelected( int index ) { if ( index >= 0 && (uint)index < mTiles.count() && !isReadOnly() ) { QString path = mTiles[ index ]; mBackgroundStyle = Tiled; addressee().insertCustom( "kab", "BackgroundStyle", QString().setNum( mBackgroundStyle ) ); addressee().insertCustom( "kab", "BackgroundImage", path ); setAddressee( addressee() ); } } void KABDetailedView::setReadOnly( bool state ) { KABBasicLook::setReadOnly( state ); repaint( false ); } void KABDetailedView::restoreSettings( KConfig *config ) { QFont general = KGlobalSettings::generalFont(); QFont fixed = KGlobalSettings::fixedFont(); QString gfont = general.family(); QString ffont = fixed.family(); int gpointsize = general.pixelSize(); if ( gpointsize == -1 ) gpointsize = general.pointSize(); int fpointsize = fixed.pixelSize(); if ( fpointsize == -1 ) fpointsize = fixed.pointSize(); config->setGroup( ConfigView ); // load the default background image: QString bgImage; mUseDefaultBGImage = config->readBoolEntry( ConfigView_UseDefaultBackground, true ); mDefaultBGColor = config->readColorEntry( ConfigView_DefaultBackgroundColor, &white ); bgImage = config->readEntry( ConfigView_DefaultBackgroundImage, "konqueror/tiles/kenwimer.png" ); if ( mUseDefaultBGImage ) { uint count = 0; QStringList dirs = KGlobal::instance()->dirs()->findDirs( "data", "/" ); if ( !dirs.isEmpty() ) { for ( count = 0; count < dirs.count(); ++count ) { if ( getBackground( dirs[ count ] + "/" + bgImage, mDefaultBGImage ) ) break; } } if ( count == dirs.count() ) { mUseDefaultBGImage = getBackground( bgImage, mDefaultBGImage ); if ( !mUseDefaultBGImage ) kdDebug(5720) << "KABDetailedView::configure: " << "default BG image selected, but could not be loaded." << endl; } } mDefaultBGColor = config->readColorEntry( ConfigView_DefaultBackgroundColor, &white ); mHeadLineBGColor = config->readColorEntry( ConfigView_HeadlineBGColor, &darkBlue ); mHeadLineTextColor = config->readColorEntry( ConfigView_HeadlineTextColor, &yellow ); mUseHeadLineBGColor = config->readBoolEntry( ConfigView_UseHeadlineBGColor, true ); if ( !mPainter ) mPainter = new KABEntryPainter; mPainter->setForegroundColor( black ); mPainter->setHeaderColor( mHeadLineTextColor ); mPainter->setUseHeaderColor( mUseHeadLineBGColor ); mPainter->setBackgroundColor( mHeadLineBGColor ); mPainter->setHeaderFont( QFont( gfont, gpointsize + 4, QFont::Bold, true ) ); mPainter->setHeadLineFont( QFont( gfont, gpointsize + 2, QFont::Bold, true ) ); mPainter->setBodyFont( QFont( gfont, gpointsize, QFont::Normal, false ) ); mPainter->setFixedFont( QFont( ffont, fpointsize, QFont::Normal, false ) ); mPainter->setCommentFont( QFont( gfont, gpointsize, QFont::Normal, false ) ); } -#ifndef KAB_EMBEDDED -#include "look_details.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_look_details.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/details/look_details.h b/kaddressbook/details/look_details.h index e8d50a9..b59d3a7 100644 --- a/kaddressbook/details/look_details.h +++ b/kaddressbook/details/look_details.h @@ -1,157 +1,157 @@ /* This file is part of KAddressBook. Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef LOOK_DETAILS_H #define LOOK_DETAILS_H #include <kabc/addressbook.h> #include <kaction.h> #include <klocale.h> #include <qmap.h> #include <qpixmap.h> #include <qptrlist.h> #include <qrect.h> #include "look_basic.h" class KABEntryPainter; class QComboBox; /** This class implements the detailed view. Currently, there is no possibility to change the entry in this view. */ class KABDetailedView : public KABBasicLook { Q_OBJECT public: /** Enum to select how the background is drawn. */ enum BackgroundStyle { None, Tiled, Bordered }; /** The constructor. */ KABDetailedView( QWidget *parent = 0, const char* name = 0 ); /** The virtual destructor. */ virtual ~KABDetailedView(); /** Set the addressee. */ void setAddressee( const KABC::Addressee& ); /** Overloaded from KABBasicLook. */ void setReadOnly( bool ); /** Overloaded from KABBasicLook. */ void restoreSettings( KConfig* ); public slots: void slotBorderedBGSelected( int index ); void slotTiledBGSelected( int index ); protected: void paintEvent( QPaintEvent* ); void mousePressEvent( QMouseEvent* ); void mouseMoveEvent( QMouseEvent* ); /** A method to retrieve a background image according to the path stored in the entry. It is either loaded from backgrounds, that acts as a cache, or from the file and added to @see backgrounds. */ bool getBackground( QString path, QPixmap& image ); private: QPtrList<QRect> mURLRects; QPtrList<QRect> mEmailRects; QPtrList<QRect> mPhoneRects; KABEntryPainter *mPainter; QMap<QString, QPixmap> mBackgroundMap; QPixmap mCurrentBackground; BackgroundStyle mBackgroundStyle; bool mUseDefaultBGImage; bool mUseHeadLineBGColor; QColor mDefaultBGColor; QColor mHeadLineBGColor; QColor mHeadLineTextColor; QPixmap mDefaultBGImage; KToggleAction *mActionShowAddresses; KToggleAction *mActionShowEmails; KToggleAction *mActionShowPhones; KToggleAction *mActionShowURLs; const int mGrid; QStringList mBorders; QStringList mTiles; - QPopupMenu *mMenuBorderedBG; - QPopupMenu *mMenuTiledBG; + Q3PopupMenu *mMenuBorderedBG; + Q3PopupMenu *mMenuTiledBG; static const QString mBorderedBGDir; static const QString mTiledBGDir; }; class KABDetailedViewFactory : public KABLookFactory { public: KABDetailedViewFactory( QWidget *parent = 0, const char *name = 0 ) : KABLookFactory( parent, name ) {} KABBasicLook *create() { return new KABDetailedView( mParent, mName ); } QString description() { return i18n( "Detailed Style: Display all details, no modifications." ); } }; #endif diff --git a/kaddressbook/details/look_html.cpp b/kaddressbook/details/look_html.cpp index bb30650..4ec1c7d 100644 --- a/kaddressbook/details/look_html.cpp +++ b/kaddressbook/details/look_html.cpp @@ -1,56 +1,56 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <addresseeview.h> #include "look_html.h" -#include <qscrollview.h> +#include <q3scrollview.h> #include "kabprefs.h" #include <kabc/addresseeview.h> KABHtmlView::KABHtmlView( QWidget *parent, const char *name ) : KABBasicLook( parent, name ) { mView = new KABC::AddresseeView( this ); mView->setFont( KABPrefs::instance()->mDetailsFont ); connect(this, SIGNAL(printMyView()), this , SLOT(printMe())); } KABHtmlView::~KABHtmlView() { } void KABHtmlView::printMe() { mView->printMe(); } void KABHtmlView::setAddressee( const KABC::Addressee &addr ) { mView->setFont( KABPrefs::instance()->mDetailsFont ); mView->setAddressee( addr ); } -#ifndef KAB_EMBEDDED -#include "look_html.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_look_html.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/emaileditwidget.cpp b/kaddressbook/emaileditwidget.cpp index e72face..09df47f 100644 --- a/kaddressbook/emaileditwidget.cpp +++ b/kaddressbook/emaileditwidget.cpp @@ -1,277 +1,279 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qcheckbox.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> #include <qstring.h> #include <qtoolbutton.h> #include <qtooltip.h> -#include <qlistbox.h> +#include <q3listbox.h> +//Added by qt3to4: +#include <Q3GridLayout> #ifndef KAB_EMBEDDED #include <kaccelmanager.h> #endif //KAB_EMBEDDED #include <kconfig.h> #include <kcombobox.h> #include <kdebug.h> #include <kglobal.h> #include <kdialog.h> #include <kiconloader.h> #include <klineedit.h> #include <klocale.h> #include <kmessagebox.h> #include "emaileditwidget.h" EmailEditWidget::EmailEditWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { - QGridLayout *topLayout = new QGridLayout( this, 2, 2 ); + Q3GridLayout *topLayout = new Q3GridLayout( this, 2, 2 ); topLayout->setSpacing( KDialog::spacingHint() ); QLabel* label = new QLabel( this ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "mail_send", KIcon::Desktop, 0) ); topLayout->addWidget( label, 0, 0 ); - label->setAlignment( AlignCenter ); + label->setAlignment( Qt::AlignCenter ); QPushButton *editButton = new QPushButton( i18n( "Edit Email Addresses..." ), this); topLayout->addWidget( editButton, 0, 1 ); label = new QLabel( i18n( "Email:" ), this ); topLayout->addWidget( label, 1, 0 ); mEmailEdit = new KLineEdit( this ); connect( mEmailEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); connect( mEmailEdit, SIGNAL( textChanged( const QString& ) ), SIGNAL( modified() ) ); label->setBuddy( mEmailEdit ); topLayout->addWidget( mEmailEdit, 1, 1 ); connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) ); topLayout->activate(); } EmailEditWidget::~EmailEditWidget() { } void EmailEditWidget::setEmails( const QStringList &list ) { mEmailList = list; bool blocked = mEmailEdit->signalsBlocked(); mEmailEdit->blockSignals( true ); if ( list.count() > 0 ) mEmailEdit->setText( list[ 0 ] ); else mEmailEdit->setText( "" ); mEmailEdit->blockSignals( blocked ); } QStringList EmailEditWidget::emails() { if ( mEmailEdit->text().isEmpty() ) { if ( mEmailList.count() > 0 ) mEmailList.remove( mEmailList.begin() ); } else { if ( mEmailList.count() > 0 ) mEmailList.remove( mEmailList.begin() ); mEmailList.prepend( mEmailEdit->text() ); } return mEmailList; } void EmailEditWidget::edit() { EmailEditDialog dlg( mEmailList, this ); if ( dlg.exec() ) { if ( dlg.changed() ) { mEmailList = dlg.emails(); mEmailEdit->setText( mEmailList[ 0 ] ); emit modified(); } } } void EmailEditWidget::textChanged( const QString &text ) { if ( mEmailList.count() > 0 ) mEmailList.remove( mEmailList.begin() ); mEmailList.prepend( text ); } EmailEditDialog::EmailEditDialog( const QStringList &list, QWidget *parent, const char *name ) : KDialogBase( KDialogBase::Plain, i18n( "Edit Email Addresses" ), KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, parent, name, true ) { QWidget *page = plainPage(); - QGridLayout *topLayout = new QGridLayout( page, 4, 3 ); + Q3GridLayout *topLayout = new Q3GridLayout( page, 4, 3 ); QLabel *label = new QLabel( i18n( "Email address:" ), page ); topLayout->addWidget( label, 0, 0 ); mEmailEdit = new KLineEdit( page ); label->setBuddy( mEmailEdit ); topLayout->addWidget( mEmailEdit, 0, 1 ); connect( mEmailEdit, SIGNAL( returnPressed() ), SLOT( add() ) ); connect( mEmailEdit, SIGNAL( textChanged( const QString& ) ), SLOT( emailChanged() ) ); mAddButton = new QPushButton( i18n( "Add" ), page ); mAddButton->setEnabled( false ); connect( mAddButton, SIGNAL( clicked() ), SLOT( add() ) ); topLayout->addWidget( mAddButton, 0, 2 ); - mEmailListBox = new QListBox( page ); + mEmailListBox = new Q3ListBox( page ); // Make sure there is room for the scrollbar mEmailListBox->setMinimumHeight( mEmailListBox->sizeHint().height() + 30 ); connect( mEmailListBox, SIGNAL( highlighted( int ) ), SLOT( selectionChanged( int ) ) ); topLayout->addMultiCellWidget( mEmailListBox, 1, 3, 0, 1 ); mEditButton = new QPushButton( i18n( "Change" ), page ); connect( mEditButton, SIGNAL( clicked() ), SLOT( edit() ) ); topLayout->addWidget( mEditButton, 1, 2 ); mRemoveButton = new QPushButton( i18n( "Remove" ), page ); connect( mRemoveButton, SIGNAL( clicked() ), SLOT( remove() ) ); topLayout->addWidget( mRemoveButton, 2, 2 ); mStandardButton = new QPushButton( i18n( "Set Standard" ), page ); connect( mStandardButton, SIGNAL( clicked() ), SLOT( standard() ) ); topLayout->addWidget( mStandardButton, 3, 2 ); topLayout->activate(); QStringList items = list; qDebug("EmailEditDialog::EmailEditDialog has to be changed (lowPrio)"); //US must be fixed !!! /* if ( items.remove( "" ) > 0 ) mChanged = true; else mChanged = false; */ mEmailListBox->insertStringList( items ); // set default state selectionChanged( -1 ); mEmailEdit->setFocus(); #ifndef KAB_EMBEDDED KAcceleratorManager::manage( this ); #else //KAB_EMBEDDED //US qDebug("EmailEditDialog::EmailEditDialog has to be changed"); #endif //KAB_EMBEDDED } EmailEditDialog::~EmailEditDialog() { } QStringList EmailEditDialog::emails() const { QStringList emails; for ( uint i = 0; i < mEmailListBox->count(); ++i ) emails << mEmailListBox->text( i ); return emails; } void EmailEditDialog::add() { mEmailListBox->insertItem( mEmailEdit->text() ); mEmailEdit->clear(); mEmailEdit->setFocus(); mChanged = true; } void EmailEditDialog::edit() { mEmailEdit->setText( mEmailListBox->currentText() ); mEmailListBox->removeItem( mEmailListBox->currentItem() ); mEmailEdit->setFocus(); } void EmailEditDialog::remove() { QString address = mEmailListBox->currentText(); QString text = i18n( "<qt>Are you sure that you want to remove the email address <b>%1</b>?</qt>" ).arg( address ); QString caption = i18n( "Confirm Remove" ); if ( KMessageBox::questionYesNo( this, text, caption ) == KMessageBox::Yes ) { mEmailListBox->removeItem( mEmailListBox->currentItem() ); mChanged = true; } } bool EmailEditDialog::changed() const { return mChanged; } void EmailEditDialog::standard() { QString text = mEmailListBox->currentText(); mEmailListBox->removeItem( mEmailListBox->currentItem() ); mEmailListBox->insertItem( text, 0 ); mEmailListBox->setSelected( 0, true ); mChanged = true; } void EmailEditDialog::selectionChanged( int index ) { bool value = ( index >= 0 ); // An item is selected mRemoveButton->setEnabled( value ); mEditButton->setEnabled( value ); mStandardButton->setEnabled( value ); } void EmailEditDialog::emailChanged() { mAddButton->setEnabled( !mEmailEdit->text().isEmpty() ); } -#ifndef KAB_EMBEDDED -#include "emaileditwidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_emaileditwidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/emaileditwidget.h b/kaddressbook/emaileditwidget.h index acdecaf..618acee 100644 --- a/kaddressbook/emaileditwidget.h +++ b/kaddressbook/emaileditwidget.h @@ -1,101 +1,101 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef EMAILEDITWIDGET_H #define EMAILEDITWIDGET_H #include <kabc/addressee.h> #include <kdialogbase.h> #include "addresseeconfig.h" -class QButtonGroup; +class Q3ButtonGroup; class QCheckBox; -class QListView; -class QListBox; -class QTextEdit; +class Q3ListView; +class Q3ListBox; +class Q3TextEdit; class QToolButton; class KComboBox; class KLineEdit; class KListView; /** This widget displays a list box of the email addresses as well as buttons to manipulate them (up, down, add, remove). */ class EmailEditWidget : public QWidget { Q_OBJECT public: EmailEditWidget( QWidget *parent, const char *name = 0 ); ~EmailEditWidget(); void setEmails( const QStringList &list ); QStringList emails(); signals: void modified(); private slots: void edit(); void textChanged( const QString& ); private: KLineEdit *mEmailEdit; QStringList mEmailList; }; class EmailEditDialog : public KDialogBase { Q_OBJECT public: EmailEditDialog( const QStringList &list, QWidget *parent, const char *name = 0 ); ~EmailEditDialog(); QStringList emails() const; bool changed() const; protected slots: void add(); void remove(); void edit(); void standard(); void selectionChanged( int ); void emailChanged(); private: KLineEdit *mEmailEdit; - QListBox *mEmailListBox; + Q3ListBox *mEmailListBox; QPushButton *mAddButton; QPushButton *mRemoveButton; QPushButton *mEditButton; QPushButton *mStandardButton; bool mChanged; }; #endif diff --git a/kaddressbook/extensionmanager.cpp b/kaddressbook/extensionmanager.cpp index 46defa1..5356224 100644 --- a/kaddressbook/extensionmanager.cpp +++ b/kaddressbook/extensionmanager.cpp @@ -1,249 +1,251 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlayout.h> #include <qapplication.h> +//Added by qt3to4: +#include <Q3HBoxLayout> #include <kactionclasses.h> #include <kconfig.h> #include <kdebug.h> #include <klocale.h> #ifndef KAB_EMBEDDED #include <ktrader.h> #else //KAB_EMBEDDED #include <features/mergewidget.h> #include <features/distributionlistwidget.h> #endif //KAB_EMBEDDED #include "addresseeeditorwidget.h" #include "kabcore.h" #include "kabprefs.h" #include "extensionmanager.h" ExtensionManager::ExtensionManager( KABCore *core, QWidget *parent, const char *name ) - : QScrollView( parent, name ), mCore( core ), mCurrentExtensionWidget( 0 ) + : Q3ScrollView( parent, name ), mCore( core ), mCurrentExtensionWidget( 0 ) { #ifdef KAB_EMBEDDED //US QPopupMenu *settingsmenu = (QPopupMenu*)mCore->getSettingsMenu(); QWidget *settingsmenu = (QWidget*)mCore->getViewMenu(); #endif //KAB_EMBEDDED mActionExtensions = new KSelectAction( i18n( "Show Extension Bar" ), 0, mCore->actionCollection(), "options_show_extensions" ); mActionExtensions->plug( settingsmenu ,0); connect( mActionExtensions, SIGNAL( activated( int ) ), SLOT( setActiveExtension( int ) ) ); mWidgetBox = new QWidget( viewport() ); - new QHBoxLayout (mWidgetBox ); + new Q3HBoxLayout (mWidgetBox ); addChild( mWidgetBox ); setResizePolicy(AutoOneFit); createExtensionWidgets(); hide(); } ExtensionManager::~ExtensionManager() { } void ExtensionManager::restoreSettings() { mActionExtensions->setCurrentItem( KABPrefs::instance()->mCurrentExtension ); int i = 1; mCurrentExtensionWidget = mExtensionWidgetList.at( i-1 ); while ( mCurrentExtensionWidget ) { if( i != KABPrefs::instance()->mCurrentExtension ) mCurrentExtensionWidget->hide(); mCurrentExtensionWidget = mExtensionWidgetList.at( ++i-1 ); } setActiveExtension( mActionExtensions->currentItem() ); } void ExtensionManager::saveSettings() { KABPrefs::instance()->mCurrentExtension = mActionExtensions->currentItem(); } void ExtensionManager::reconfigure() { saveSettings(); createExtensionWidgets(); restoreSettings(); } bool ExtensionManager::isQuickEditVisible() const { return ( mCurrentExtensionWidget && mCurrentExtensionWidget->identifier() == "contact_editor" ); } void ExtensionManager::setSelectionChanged() { if ( mCurrentExtensionWidget ) mCurrentExtensionWidget->contactsSelectionChanged(); } void ExtensionManager::setActiveExtension( int id ) { //qDebug("+++++++++++++++++++ExtensionManager::setActiveExtension %d ", id); if ( id == 0 ) { hide(); mCurrentExtensionWidget = 0; #ifndef DESKTOP_VERSION //US our screen is so small, that we better hide the detailscreen, just in case. //US mCore->setDetailsToState( ); #endif //KAB_EMBEDDED } else if ( id > 0 ) { if ( mCurrentExtensionWidget ) mCurrentExtensionWidget->hide(); mCurrentExtensionWidget = mExtensionWidgetList.at( id - 1 ); if ( mCurrentExtensionWidget ) { #ifndef DESKTOP_VERSION //US our screen is so small, that we better hide the detailscreen, just in case. //US mCore->setDetailsVisible( false ); #endif //KAB_EMBEDDED show(); mWidgetBox->show(); mCurrentExtensionWidget->show(); } else { hide(); mCurrentExtensionWidget = 0; #ifndef DESKTOP_VERSION //US our screen is so small, that we better hide the detailscreen, just in case. //US mCore->setDetailsToState( ); #endif //KAB_EMBEDDED } } emit changedActiveExtension( id ); } void ExtensionManager::createExtensionWidgets() { // clear extension widget list mExtensionWidgetList.setAutoDelete( true ); - QPtrListIterator<ExtensionWidget> wdgIt( mExtensionWidgetList ); + Q3PtrListIterator<ExtensionWidget> wdgIt( mExtensionWidgetList ); ExtensionWidget *wdg = 0; while ( ( wdg = wdgIt.current() ) != 0 ) mExtensionWidgetList.remove( wdg ); mExtensionWidgetList.setAutoDelete( false ); QStringList extensionNames( i18n( "None" ) ); // add addressee editor as default - QHBoxLayout *hbl = (QHBoxLayout *) mWidgetBox->layout();; + Q3HBoxLayout *hbl = (Q3HBoxLayout *) mWidgetBox->layout();; wdg = new AddresseeEditorWidget( mCore, true, mWidgetBox ); hbl->addWidget( wdg ); //wdg->hide(); connect( wdg, SIGNAL( modified( const KABC::Addressee::List& ) ), SIGNAL( modified( const KABC::Addressee::List& ) ) ); mExtensionWidgetList.append( wdg ); extensionNames.append( wdg->title() ); // load the other extensions QStringList activeExtensions = KABPrefs::instance()->mActiveExtensions; #ifndef KAB_EMBEDDED KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/Extension" ); KTrader::OfferList::ConstIterator it; for ( it = plugins.begin(); it != plugins.end(); ++it ) { if ( !(*it)->hasServiceType( "KAddressBook/Extension" ) ) continue; KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() ); if ( !factory ) { //kdDebug(5720) << "ExtensionManager::loadExtensions(): Factory creation failed" << endl; continue; } ExtensionFactory *extensionFactory = static_cast<ExtensionFactory*>( factory ); if ( !extensionFactory ) { //kdDebug(5720) << "ExtensionManager::loadExtensions(): Cast failed" << endl; continue; } if ( !activeExtensions.contains( extensionFactory->identifier() ) ) continue; wdg = extensionFactory->extension( mCore, this ); if ( wdg ) { //wdg->hide(); connect( wdg, SIGNAL( modified( const KABC::Addressee::List& ) ), SIGNAL( modified( const KABC::Addressee::List& ) ) ); mExtensionWidgetList.append( wdg ); extensionNames.append( wdg->title() ); } } #else //KAB_EMBEDDED //load Mergefactory/extension ExtensionFactory *extensionFactory = new MergeFactory(); if ( activeExtensions.contains( extensionFactory->identifier() ) ) { wdg = extensionFactory->extension( mCore, mWidgetBox ); if ( wdg ) { hbl->addWidget( wdg ); //wdg->hide(); connect( wdg, SIGNAL( modified( const KABC::Addressee::List& ) ), SIGNAL( modified( const KABC::Addressee::List& ) ) ); mExtensionWidgetList.append( wdg ); extensionNames.append( wdg->title() ); } } //load DistributionListfactory/extension extensionFactory = new DistributionListFactory(); if (activeExtensions.contains( extensionFactory->identifier() ) ) { wdg = extensionFactory->extension( mCore, mWidgetBox ); if ( wdg ) { hbl->addWidget( wdg ); //wdg->hide(); connect( wdg, SIGNAL( modified( const KABC::Addressee::List& ) ), SIGNAL( modified( const KABC::Addressee::List& ) ) ); mExtensionWidgetList.append( wdg ); extensionNames.append( wdg->title() ); } } hbl->addStretch(); #endif //KAB_EMBEDDED mActionExtensions->setItems( extensionNames ); mCurrentExtensionWidget = 0; } -#ifndef KAB_EMBEDDED -#include "extensionmanager.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_extensionmanager.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/extensionmanager.h b/kaddressbook/extensionmanager.h index 611a037..84c948b 100644 --- a/kaddressbook/extensionmanager.h +++ b/kaddressbook/extensionmanager.h @@ -1,89 +1,89 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef EXTENSIONMANAGER_H #define EXTENSIONMANAGER_H -#include <qhbox.h> -#include <qscrollview.h> -#include <qptrlist.h> +#include <q3hbox.h> +#include <q3scrollview.h> +#include <q3ptrlist.h> #include <extensionwidget.h> class KABCore; class KSelectAction; -class ExtensionManager : public QScrollView +class ExtensionManager : public Q3ScrollView { Q_OBJECT public: ExtensionManager( KABCore *core, QWidget *parent, const char *name = 0 ); ~ExtensionManager(); /** Restores the extension manager specific settings. */ void restoreSettings(); /** Saves the extension manager specific settings. */ void saveSettings(); /** Rereads the extension manager specific settings with some additional initialization stuff. */ void reconfigure(); /** Returns whether the quickedit extension is currently visible. */ bool isQuickEditVisible() const; public slots: void setSelectionChanged(); signals: void modified( const KABC::Addressee::List& ); void changedActiveExtension( int id ); private slots: void setActiveExtension( int id ); private: void createExtensionWidgets(); KABCore *mCore; QWidget *mWidgetBox; ExtensionWidget *mCurrentExtensionWidget; - QPtrList<ExtensionWidget> mExtensionWidgetList; + Q3PtrList<ExtensionWidget> mExtensionWidgetList; KSelectAction *mActionExtensions; }; #endif diff --git a/kaddressbook/extensionwidget.cpp b/kaddressbook/extensionwidget.cpp index 69f4aa8..7c3b415 100644 --- a/kaddressbook/extensionwidget.cpp +++ b/kaddressbook/extensionwidget.cpp @@ -1,84 +1,83 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include "configurewidget.h" #include "kabcore.h" #include "extensionwidget.h" ExtensionWidget::ExtensionWidget( KABCore *core, QWidget *parent, const char *name ) : QWidget( parent, name ), mCore( core ) { } ExtensionWidget::~ExtensionWidget() { } KABCore *ExtensionWidget::core() const { return mCore; } bool ExtensionWidget::contactsSelected() const { return mCore->selectedUIDs().count() != 0; } KABC::Addressee::List ExtensionWidget::selectedContacts() { KABC::Addressee::List list; QStringList uids = mCore->selectedUIDs(); QStringList::Iterator it; for ( it = uids.begin(); it != uids.end(); ++it ) list.append( mCore->addressBook()->findByUid( *it ) ); return list; } void ExtensionWidget::contactsSelectionChanged() { // do nothing } QString ExtensionWidget::title() const { return "<bug!!!>"; } QString ExtensionWidget::identifier() const { return "<bug!!!>"; } ConfigureWidget *ExtensionFactory::configureWidget( QWidget*, const char* ) { return 0; } -#ifndef KAB_EMBEDDED -#include "extensionwidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_extensionwidget.cpp" #endif //KAB_EMBEDDED - diff --git a/kaddressbook/extensionwidget.h b/kaddressbook/extensionwidget.h index fc91f21..9fcfba9 100644 --- a/kaddressbook/extensionwidget.h +++ b/kaddressbook/extensionwidget.h @@ -1,119 +1,119 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef EXTENSIONWIDGET_H #define EXTENSIONWIDGET_H #include <qwidget.h> #include <kabc/addressbook.h> #ifndef KAB_EMBEDDED #include <klibloader.h> #endif //KAB_EMBEDDED class ConfigureWidget; class KABCore; class ExtensionWidget : public QWidget { Q_OBJECT public: ExtensionWidget( KABCore *core, QWidget *parent, const char *name = 0 ); ~ExtensionWidget(); /** @return A pointer to the core object */ KABCore *core() const; /** Returns whether there are selected contacts in the view. */ bool contactsSelected() const; /** Returns a list of contacts that are selected in the view. Use @ref addresseesSelected() to test if there exists selected contacts. */ KABC::Addressee::List selectedContacts(); /** This method is called whenever the selection in the view changed. */ virtual void contactsSelectionChanged(); /** This method should be reimplemented and return the i18ned title of this widget. */ virtual QString title() const; /** This method should be reimplemented and return a unique identifier. */ virtual QString identifier() const; signals: void modified( const KABC::Addressee::List &list ); private: KABCore *mCore; class ExtensionWidgetPrivate; ExtensionWidgetPrivate *d; }; #ifndef KAB_EMBEDDED -//MOC_SKIP_BEGIN +#ifndef Q_MOC_RUN class ExtensionFactory : public KLibFactory -//MOC_SKIP_END +#endif #else //KAB_EMBEDDED class ExtensionFactory #endif //KAB_EMBEDDED { public: virtual ExtensionWidget *extension( KABCore *core, QWidget *parent, const char *name = 0 ) = 0; virtual ConfigureWidget *configureWidget( QWidget *parent, const char *name = 0 ); virtual bool configureWidgetAvailable() { return false; } /** This method should return the same identifier like the config widget. */ virtual QString identifier() const = 0; protected: virtual QObject* createObject( QObject*, const char*, const char*, const QStringList & ) { return 0; } }; #endif diff --git a/kaddressbook/features/distributionlistwidget.cpp b/kaddressbook/features/distributionlistwidget.cpp index bfcb121..996177b 100644 --- a/kaddressbook/features/distributionlistwidget.cpp +++ b/kaddressbook/features/distributionlistwidget.cpp @@ -1,501 +1,508 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ -#include <qbuttongroup.h> +#include <q3buttongroup.h> #include <qcombobox.h> #include <qlabel.h> #include <qlayout.h> -#include <qlistview.h> +#include <q3listview.h> #include <qpushbutton.h> #include <qradiobutton.h> +//Added by qt3to4: +#include <QDragMoveEvent> +#include <QDropEvent> +#include <Q3GridLayout> +#include <Q3Frame> +#include <Q3VBoxLayout> +#include <QDragEnterEvent> #ifndef KAB_EMBEDDED #include <kaccelmanager.h> #endif //KAB_EMBEDDED #include <kdebug.h> #include <klineeditdlg.h> #include <klocale.h> #include <kglobal.h> #include <kmessagebox.h> #include <kabc/addressbook.h> #include <kabc/addresseedialog.h> #include <kabc/distributionlist.h> #include <kabc/vcardconverter.h> #ifndef KAB_EMBEDDED #include <libkdepim/kvcarddrag.h> #endif //KAB_EMBEDDED #include "kabcore.h" #include "distributionlistwidget.h" #ifndef KAB_EMBEDDED class DistributionListFactory : public ExtensionFactory { public: ExtensionWidget *extension( KABCore *core, QWidget *parent, const char *name ) { return new DistributionListWidget( core, parent, name ); } QString identifier() const { return "distribution_list_editor"; } }; extern "C" { void *init_libkaddrbk_distributionlist() { return ( new DistributionListFactory ); } } #endif //KAB_EMBEDDED -class ContactItem : public QListViewItem +class ContactItem : public Q3ListViewItem { public: ContactItem( DistributionListView *parent, const KABC::Addressee &addressee, const QString &email = QString::null ) : - QListViewItem( parent ), + Q3ListViewItem( parent ), mAddressee( addressee ), mEmail( email ) { setText( 0, addressee.realName() ); if( email.isEmpty() ) { setText( 1, addressee.preferredEmail() ); setText( 2, i18n( "Yes" ) ); } else { setText( 1, email ); setText( 2, i18n( "No" ) ); } } KABC::Addressee addressee() const { return mAddressee; } QString email() const { return mEmail; } protected: bool acceptDrop( const QMimeSource* ) { return true; } private: KABC::Addressee mAddressee; QString mEmail; }; DistributionListWidget::DistributionListWidget( KABCore *core, QWidget *parent, const char *name ) : ExtensionWidget( core, parent, name ), mManager( 0 ) { - QGridLayout *topLayout = new QGridLayout( this, 3, 4, KDialog::marginHint(), + Q3GridLayout *topLayout = new Q3GridLayout( this, 3, 4, KDialog::marginHint(), KDialog::spacingHint() ); if (KGlobal::getOrientation() == KGlobal::Portrait) { mCreateListButton = new QPushButton( i18n( "New List" ), this ); mEditListButton = new QPushButton( i18n( "Ren List" ), this ); mRemoveListButton = new QPushButton( i18n( "Del List" ), this ); mAddContactButton = new QPushButton( i18n( "Add Cont." ), this ); mChangeEmailButton = new QPushButton( i18n( "Chge Email" ), this ); mRemoveContactButton = new QPushButton( i18n( "Del Cont." ), this ); } else { mCreateListButton = new QPushButton( i18n( "New List..." ), this ); mEditListButton = new QPushButton( i18n( "Rename List..." ), this ); mRemoveListButton = new QPushButton( i18n( "Remove List" ), this ); mAddContactButton = new QPushButton( i18n( "Add Contact" ), this ); mChangeEmailButton = new QPushButton( i18n( "Change Email..." ), this ); mRemoveContactButton = new QPushButton( i18n( "Remove Contact" ), this ); } mNameCombo = new QComboBox( this ); topLayout->addWidget( mNameCombo, 0, 0 ); connect( mNameCombo, SIGNAL( activated( int ) ), SLOT( updateContactView() ) ); topLayout->addWidget( mCreateListButton, 0, 1 ); connect( mCreateListButton, SIGNAL( clicked() ), SLOT( createList() ) ); topLayout->addWidget( mEditListButton, 0, 2 ); connect( mEditListButton, SIGNAL( clicked() ), SLOT( editList() ) ); topLayout->addWidget( mRemoveListButton, 0, 3 ); connect( mRemoveListButton, SIGNAL( clicked() ), SLOT( removeList() ) ); mContactView = new DistributionListView( this ); mContactView->addColumn( i18n( "Name" ) ); mContactView->addColumn( i18n( "Email" ) ); mContactView->addColumn( i18n( "Use Preferred" ) ); mContactView->setEnabled( false ); mContactView->setAllColumnsShowFocus( true ); mContactView->setMinimumHeight( 30 ); topLayout->addMultiCellWidget( mContactView, 1, 1, 0, 3 ); connect( mContactView, SIGNAL( selectionChanged() ), SLOT( selectionContactViewChanged() ) ); - connect( mContactView, SIGNAL( dropped( QDropEvent*, QListViewItem* ) ), - SLOT( dropped( QDropEvent*, QListViewItem* ) ) ); + connect( mContactView, SIGNAL( dropped( QDropEvent*, Q3ListViewItem* ) ), + SLOT( dropped( QDropEvent*, Q3ListViewItem* ) ) ); mAddContactButton->setEnabled( false ); topLayout->addWidget( mAddContactButton, 2, 0 ); connect( mAddContactButton, SIGNAL( clicked() ), SLOT( addContact() ) ); topLayout->addWidget( mChangeEmailButton, 2, 2 ); connect( mChangeEmailButton, SIGNAL( clicked() ), SLOT( changeEmail() ) ); topLayout->addWidget( mRemoveContactButton, 2, 3 ); connect( mRemoveContactButton, SIGNAL( clicked() ), SLOT( removeContact() ) ); mManager = new KABC::DistributionListManager( core->addressBook() ); mManager->load(); updateNameCombo(); #ifdef KAB_EMBEDDED // if (KGlobal::getOrientation() == KGlobal::Portrait) // parent->setMaximumSize( KGlobal::getDesktopWidth() , 150); #endif //KAB_EMBEDDED #ifndef KAB_EMBEDDED KAcceleratorManager::manage( this ); #endif //KAB_EMBEDDED } DistributionListWidget::~DistributionListWidget() { delete mManager; } void DistributionListWidget::save() { qDebug("DistributionListWidget::save"); mManager->save(); } void DistributionListWidget::selectionContactViewChanged() { ContactItem *contactItem = static_cast<ContactItem *>( mContactView->selectedItem() ); bool state = contactItem; mChangeEmailButton->setEnabled( state ); mRemoveContactButton->setEnabled( state ); } void DistributionListWidget::createList() { KLineEditDlg dlg( i18n( "Please enter name:" ), QString::null, this ); #ifdef KAB_EMBEDDED dlg.setFixedSize(200, 50); #endif //KAB_EMBEDDED dlg.setCaption( i18n( "New Distribution List" ) ); if ( !dlg.exec() ) return; new KABC::DistributionList( mManager, dlg.text() ); mNameCombo->clear(); mNameCombo->insertStringList( mManager->listNames() ); mNameCombo->setCurrentItem( mNameCombo->count() - 1 ); updateContactView(); changed(); } void DistributionListWidget::editList() { QString oldName = mNameCombo->currentText(); KLineEditDlg dlg( i18n( "Please change name:" ), oldName, this ); #ifdef KAB_EMBEDDED dlg.setFixedSize(200, 50); #endif //KAB_EMBEDDED dlg.setCaption( i18n("Distribution List") ); if ( !dlg.exec() ) return; KABC::DistributionList *list = mManager->list( oldName ); list->setName( dlg.text() ); mNameCombo->clear(); mNameCombo->insertStringList( mManager->listNames() ); mNameCombo->setCurrentItem( mNameCombo->count() - 1 ); updateContactView(); changed(); } void DistributionListWidget::removeList() { int result = KMessageBox::warningContinueCancel( this, i18n( "<qt>Delete distribution list <b>%1</b>?</qt>" ) .arg( mNameCombo->currentText() ), QString::null, i18n( "Delete" ) ); if ( result != KMessageBox::Continue ) return; delete mManager->list( mNameCombo->currentText() ); mNameCombo->removeItem( mNameCombo->currentItem() ); updateContactView(); changed(); } void DistributionListWidget::addContact() { KABC::DistributionList *list = mManager->list( mNameCombo->currentText() ); if ( !list ) return; KABC::Addressee::List addrList = selectedContacts(); KABC::Addressee::List::Iterator it; for ( it = addrList.begin(); it != addrList.end(); ++it ) list->insertEntry( *it ); updateContactView(); changed(); } void DistributionListWidget::removeContact() { KABC::DistributionList *list = mManager->list( mNameCombo->currentText() ); if ( !list ) return; ContactItem *contactItem = static_cast<ContactItem *>( mContactView->selectedItem() ); if ( !contactItem ) return; list->removeEntry( contactItem->addressee(), contactItem->email() ); delete contactItem; changed(); } void DistributionListWidget::changeEmail() { KABC::DistributionList *list = mManager->list( mNameCombo->currentText() ); if ( !list ) return; ContactItem *contactItem = static_cast<ContactItem *>( mContactView->selectedItem() ); if ( !contactItem ) return; QString email = EmailSelector::getEmail( contactItem->addressee().emails(), contactItem->email(), this ); list->removeEntry( contactItem->addressee(), contactItem->email() ); list->insertEntry( contactItem->addressee(), email ); updateContactView(); changed(); } void DistributionListWidget::updateContactView() { mContactView->clear(); KABC::DistributionList *list = mManager->list( mNameCombo->currentText() ); if ( !list ) { mEditListButton->setEnabled( false ); mRemoveListButton->setEnabled( false ); mChangeEmailButton->setEnabled( false ); mRemoveContactButton->setEnabled( false ); mContactView->setEnabled( false ); return; } else { mEditListButton->setEnabled( true ); mRemoveListButton->setEnabled( true ); mContactView->setEnabled( true ); } KABC::DistributionList::Entry::List entries = list->entries(); KABC::DistributionList::Entry::List::ConstIterator it; for( it = entries.begin(); it != entries.end(); ++it ) new ContactItem( mContactView, (*it).addressee, (*it).email ); ContactItem *contactItem = static_cast<ContactItem *>( mContactView->selectedItem() ); bool state = contactItem; mChangeEmailButton->setEnabled( state ); mRemoveContactButton->setEnabled( state ); } void DistributionListWidget::updateNameCombo() { mNameCombo->insertStringList( mManager->listNames() ); updateContactView(); } void DistributionListWidget::dropEvent( QDropEvent *e ) { KABC::DistributionList *distributionList = mManager->list( mNameCombo->currentText() ); if ( !distributionList ) return; QString vcards; #ifndef KAB_EMBEDDED if ( KVCardDrag::decode( e, vcards ) ) { #endif //KAB_EMBEDDED QStringList list = QStringList::split( "\r\n\r\n", vcards ); QStringList::Iterator it; KABC::VCardConverter converter; for ( it = list.begin(); it != list.end(); ++it ) { KABC::Addressee addr; if ( converter.vCardToAddressee( (*it).stripWhiteSpace(), addr ) ) distributionList->insertEntry( addr ); } changed(); updateContactView(); #ifndef KAB_EMBEDDED } #endif //KAB_EMBEDDED } void DistributionListWidget::contactsSelectionChanged() { mAddContactButton->setEnabled( contactsSelected() && mNameCombo->count() > 0 ); } QString DistributionListWidget::title() const { return i18n( "Distribution List Editor" ); } QString DistributionListWidget::identifier() const { return "distribution_list_editor"; } -void DistributionListWidget::dropped( QDropEvent *e, QListViewItem* ) +void DistributionListWidget::dropped( QDropEvent *e, Q3ListViewItem* ) { dropEvent( e ); } void DistributionListWidget::changed() { save(); } DistributionListView::DistributionListView( QWidget *parent, const char* name ) : KListView( parent, name ) { setDragEnabled( true ); setAcceptDrops( true ); setAllColumnsShowFocus( true ); } void DistributionListView::dragEnterEvent( QDragEnterEvent* e ) { #ifndef KAB_EMBEDDED - bool canDecode = QTextDrag::canDecode( e ); + bool canDecode = Q3TextDrag::canDecode( e ); e->accept( canDecode ); #endif //KAB_EMBEDDED } void DistributionListView::viewportDragMoveEvent( QDragMoveEvent *e ) { #ifndef KAB_EMBEDDED - bool canDecode = QTextDrag::canDecode( e ); + bool canDecode = Q3TextDrag::canDecode( e ); e->accept( canDecode ); #endif //KAB_EMBEDDED } void DistributionListView::viewportDropEvent( QDropEvent *e ) { emit dropped( e, 0 ); } void DistributionListView::dropEvent( QDropEvent *e ) { emit dropped( e, 0 ); } EmailSelector::EmailSelector( const QStringList &emails, const QString ¤t, QWidget *parent ) : KDialogBase( KDialogBase::Plain, i18n("Select Email Address"), Ok, Ok, parent ) { - QFrame *topFrame = plainPage(); - QBoxLayout *topLayout = new QVBoxLayout( topFrame ); + Q3Frame *topFrame = plainPage(); + Q3BoxLayout *topLayout = new Q3VBoxLayout( topFrame ); - mButtonGroup = new QButtonGroup( 1, Horizontal, i18n("Email Addresses"), + mButtonGroup = new Q3ButtonGroup( 1, Qt::Horizontal, i18n("Email Addresses"), topFrame ); topLayout->addWidget( mButtonGroup ); QStringList::ConstIterator it; for( it = emails.begin(); it != emails.end(); ++it ) { QRadioButton *button = new QRadioButton( *it, mButtonGroup ); if ( (*it) == current ) { button->setDown( true ); } } } QString EmailSelector::selected() { - QButton *button = mButtonGroup->selected(); + QAbstractButton *button = mButtonGroup->selected(); if ( button ) return button->text(); return QString::null; } QString EmailSelector::getEmail( const QStringList &emails, const QString ¤t, QWidget *parent ) { EmailSelector dlg( emails, current, parent ); dlg.exec(); return dlg.selected(); } -#ifndef KAB_EMBEDDED -#include "distributionlistwidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_distributionlistwidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/features/distributionlistwidget.h b/kaddressbook/features/distributionlistwidget.h index 82bac3d..f619389 100644 --- a/kaddressbook/features/distributionlistwidget.h +++ b/kaddressbook/features/distributionlistwidget.h @@ -1,143 +1,148 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef DISTRIBUTIONLISTWIDGET_H #define DISTRIBUTIONLISTWIDGET_H #include <kdialogbase.h> #include <klistview.h> #include "extensionwidget.h" +//Added by qt3to4: +#include <QDragEnterEvent> +#include <QDropEvent> +#include <QLabel> +#include <QDragMoveEvent> -class QButtonGroup; +class Q3ButtonGroup; class QComboBox; class QLabel; -class QListView; +class Q3ListView; class DistributionListView; class KABCore; namespace KABC { class AddressBook; class DistributionListManager; } class DistributionListWidget : public ExtensionWidget { Q_OBJECT public: DistributionListWidget( KABCore*, QWidget *parent, const char *name = 0 ); virtual ~DistributionListWidget(); void contactsSelectionChanged(); QString title() const; QString identifier() const; public slots: void save(); - void dropped( QDropEvent*, QListViewItem* ); + void dropped( QDropEvent*, Q3ListViewItem* ); private slots: void createList(); void editList(); void removeList(); void addContact(); void removeContact(); void changeEmail(); void updateNameCombo(); void updateContactView(); void selectionContactViewChanged(); void changed(); protected: void dropEvent( QDropEvent* ); private: QComboBox *mNameCombo; QLabel *mListLabel; DistributionListView *mContactView; KABC::DistributionListManager *mManager; QPushButton *mCreateListButton; QPushButton *mEditListButton; QPushButton *mRemoveListButton; QPushButton *mChangeEmailButton; QPushButton *mAddContactButton; QPushButton *mRemoveContactButton; }; /** @short Helper class */ class DistributionListView : public KListView { Q_OBJECT public: DistributionListView( QWidget *parent, const char* name = 0 ); protected: void dragEnterEvent( QDragEnterEvent *e ); void dropEvent( QDropEvent *e ); void viewportDragMoveEvent( QDragMoveEvent *e ); void viewportDropEvent( QDropEvent *e ); }; /** @short Helper class */ class EmailSelector : public KDialogBase { public: EmailSelector( const QStringList &emails, const QString ¤t, QWidget *parent ); QString selected(); static QString getEmail( const QStringList &emails, const QString ¤t, QWidget *parent ); private: - QButtonGroup *mButtonGroup; + Q3ButtonGroup *mButtonGroup; }; #ifdef KAB_EMBEDDED class DistributionListFactory : public ExtensionFactory { public: ExtensionWidget *extension( KABCore *core, QWidget *parent, const char *name ) { return new DistributionListWidget( core, parent, name ); } QString identifier() const { return "distribution_list_editor"; } }; #endif //KAB_EMBEDDED #endif diff --git a/kaddressbook/features/mergewidget.cpp b/kaddressbook/features/mergewidget.cpp index 2476e42..1becc2f 100644 --- a/kaddressbook/features/mergewidget.cpp +++ b/kaddressbook/features/mergewidget.cpp @@ -1,374 +1,376 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlayout.h> #include <qpushbutton.h> +//Added by qt3to4: +#include <Q3GridLayout> #ifndef KAB_EMBEDDED #include <kaccelmanager.h> #endif //KAB_EMBEDDED #include <kdebug.h> #include <klistview.h> #include <klocale.h> #include <kglobal.h> #include <kmessagebox.h> #include <kabc/addressbook.h> #include "kabcore.h" #include "mergewidget.h" #ifndef KAB_EMBEDDED class MergeFactory : public ExtensionFactory { public: ExtensionWidget *extension( KABCore *core, QWidget *parent, const char *name ) { return new MergeWidget( core, parent, name ); } QString identifier() const { return "merge"; } }; extern "C" { void *init_libkaddrbk_merge() { return ( new MergeFactory ); } } #endif //KAB_EMBEDDED -class ContactItem : public QListViewItem +class ContactItem : public Q3ListViewItem { public: ContactItem( KListView *parent, const KABC::Addressee &addressee ) - : QListViewItem( parent ), mAddressee( addressee ) + : Q3ListViewItem( parent ), mAddressee( addressee ) { KABC::Field::List fieldList = KABC::Field::defaultFields(); KABC::Field::List::ConstIterator it; int i = 0; for ( it = fieldList.begin(); it != fieldList.end(); ++it ) setText( i++, (*it)->value( mAddressee ) ); } KABC::Addressee addressee() const { return mAddressee; } private: KABC::Addressee mAddressee; }; MergeWidget::MergeWidget( KABCore *core, QWidget *parent, const char *name ) : ExtensionWidget( core, parent, name ), mBlockUpdate( false ) { #ifdef KAB_EMBEDDED if (KGlobal::getOrientation() == KGlobal::Portrait) parent->setMaximumSize( KGlobal::getDesktopWidth() , 180); #endif //KAB_EMBEDDED - QGridLayout *topLayout = new QGridLayout( this, 3, 2, KDialog::marginHint(), + Q3GridLayout *topLayout = new Q3GridLayout( this, 3, 2, KDialog::marginHint(), KDialog::spacingHint() ); mContactView = new KListView( this ); KABC::Field::List fieldList = KABC::Field::defaultFields(); KABC::Field::List::ConstIterator it; for ( it = fieldList.begin(); it != fieldList.end(); ++it ) mContactView->addColumn( (*it)->label() ); mContactView->setEnabled( false ); mContactView->setAllColumnsShowFocus( true ); topLayout->addMultiCellWidget( mContactView, 0, 2, 0, 0 ); connect( mContactView, SIGNAL( selectionChanged() ), SLOT( selectionContactViewChanged() ) ); mMergeAndRemoveButton = new QPushButton( i18n( "Merge and Remove" ), this ); mMergeAndRemoveButton->setEnabled( false ); topLayout->addWidget( mMergeAndRemoveButton, 0, 1 ); connect( mMergeAndRemoveButton, SIGNAL( clicked() ), SLOT( mergeAndRemove() ) ); mMergeButton = new QPushButton( i18n( "Merge" ), this ); mMergeButton->setEnabled( false ); topLayout->addWidget( mMergeButton, 1, 1 ); connect( mMergeButton, SIGNAL( clicked() ), SLOT( merge() ) ); #ifndef KAB_EMBEDDED KAcceleratorManager::manage( this ); #endif //KAB_EMBEDDED } MergeWidget::~MergeWidget() { } void MergeWidget::selectionContactViewChanged() { #ifndef KAB_EMBEDDED ContactItem *contactItem = dynamic_cast<ContactItem*>( mContactView->selectedItem() ); #else //KAB_EMBEDDED ContactItem *contactItem =(ContactItem*)( mContactView->selectedItem() ); #endif //KAB_EMBEDDED bool state = (contactItem != 0); mMergeAndRemoveButton->setEnabled( state ); mMergeButton->setEnabled( state ); } void MergeWidget::contactsSelectionChanged() { if ( mBlockUpdate ) return; if ( !contactsSelected() ) { mContactView->setEnabled( false ); mContactView->clear(); mMergeAndRemoveButton->setEnabled( false ); mMergeButton->setEnabled( false ); } else { KABC::Addressee::List list = selectedContacts(); if ( list.count() > 1 ) { mContactView->setEnabled( false ); mContactView->clear(); mMergeAndRemoveButton->setEnabled( false ); mMergeButton->setEnabled( false ); return; } else { mContactView->setEnabled( true ); mMasterAddressee = list[ 0 ]; updateView(); } } } void MergeWidget::updateView() { mContactView->clear(); KABC::AddressBook::Iterator it; KABC::AddressBook *ab = core()->addressBook(); if ( !ab ) return; for ( it = ab->begin(); it != ab->end(); ++it ) if ( (*it).uid() != mMasterAddressee.uid() ) new ContactItem( mContactView, *it ); } QString MergeWidget::title() const { return i18n( "Merge Contacts Editor" ); } QString MergeWidget::identifier() const { return "merge"; } void MergeWidget::mergeAndRemove() { #ifndef KAB_EMBEDDED ContactItem *item = dynamic_cast<ContactItem*>( mContactView->currentItem() ); #else //KAB_EMBEDDED ContactItem *item = (ContactItem*)( mContactView->currentItem() ); #endif //KAB_EMBEDDED if ( !item ) return; QString oldUID = item->addressee().uid(); doMerge( item->addressee() ); KABC::Addressee::List retval; retval << mMasterAddressee; emit modified( retval ); mBlockUpdate = true; - core()->deleteContacts( oldUID ); + core()->deleteContacts( QStringList(oldUID) ); core()->setContactSelected( mMasterAddressee.uid() ); mBlockUpdate = false; updateView(); } void MergeWidget::merge() { #ifndef KAB_EMBEDDED ContactItem *item = dynamic_cast<ContactItem*>( mContactView->currentItem() ); #else //KAB_EMBEDDED ContactItem *item = (ContactItem*)( mContactView->currentItem() ); #endif //KAB_EMBEDDED if ( !item ) return; doMerge( item->addressee() ); KABC::Addressee::List retval; retval << mMasterAddressee; emit modified( retval ); mBlockUpdate = true; core()->setContactSelected( mMasterAddressee.uid() ); mBlockUpdate = false; updateView(); } void MergeWidget::doMerge( const KABC::Addressee &addr ) { // ADR + LABEL KABC::Address::List addresses = addr.addresses(); KABC::Address::List masterAddresses = mMasterAddressee.addresses(); KABC::Address::List::Iterator addrIt ; for ( addrIt = addresses.begin(); addrIt != addresses.end(); ++addrIt ) { if ( !masterAddresses.contains( *addrIt ) ) mMasterAddressee.insertAddress( *addrIt ); } if ( mMasterAddressee.birthday().isNull() && !addr.birthday().isNull() ) mMasterAddressee.setBirthday( addr.birthday() ); // CATEGORIES QStringList::Iterator it; QStringList categories = addr.categories(); QStringList masterCategories = mMasterAddressee.categories(); QStringList newCategories( masterCategories ); for ( it = categories.begin(); it != categories.end(); ++it ) if ( !masterCategories.contains( *it ) ) newCategories.append( *it ); mMasterAddressee.setCategories( newCategories ); // CLASS if ( !mMasterAddressee.secrecy().isValid() && addr.secrecy().isValid() ) mMasterAddressee.setSecrecy( addr.secrecy() ); // EMAIL QStringList emails = addr.emails(); QStringList masterEmails = mMasterAddressee.emails(); for ( it = emails.begin(); it != emails.end(); ++it ) if ( !masterEmails.contains( *it ) ) mMasterAddressee.insertEmail( *it, false ); // FN if ( mMasterAddressee.formattedName().isEmpty() && !addr.formattedName().isEmpty() ) mMasterAddressee.setFormattedName( addr.formattedName() ); // GEO if ( !mMasterAddressee.geo().isValid() && addr.geo().isValid() ) mMasterAddressee.setGeo( addr.geo() ); /* // KEY // LOGO */ // MAILER if ( mMasterAddressee.mailer().isEmpty() && !addr.mailer().isEmpty() ) mMasterAddressee.setMailer( addr.mailer() ); // N if ( mMasterAddressee.assembledName().isEmpty() && !addr.assembledName().isEmpty() ) mMasterAddressee.setNameFromString( addr.assembledName() ); // NICKNAME if ( mMasterAddressee.nickName().isEmpty() && !addr.nickName().isEmpty() ) mMasterAddressee.setNickName( addr.nickName() ); // NOTE if ( mMasterAddressee.note().isEmpty() && !addr.note().isEmpty() ) mMasterAddressee.setNote( addr.note() ); // ORG if ( mMasterAddressee.organization().isEmpty() && !addr.organization().isEmpty() ) mMasterAddressee.setOrganization( addr.organization() ); /* // PHOTO */ // PROID if ( mMasterAddressee.productId().isEmpty() && !addr.productId().isEmpty() ) mMasterAddressee.setProductId( addr.productId() ); // REV if ( mMasterAddressee.revision().isNull() && !addr.revision().isNull() ) mMasterAddressee.setRevision( addr.revision() ); // ROLE if ( mMasterAddressee.role().isEmpty() && !addr.role().isEmpty() ) mMasterAddressee.setRole( addr.role() ); // SORT-STRING if ( mMasterAddressee.sortString().isEmpty() && !addr.sortString().isEmpty() ) mMasterAddressee.setSortString( addr.sortString() ); /* // SOUND */ // TEL KABC::PhoneNumber::List phones = addr.phoneNumbers(); KABC::PhoneNumber::List masterPhones = mMasterAddressee.phoneNumbers(); KABC::PhoneNumber::List::ConstIterator phoneIt; for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) if ( !masterPhones.contains( *it ) ) mMasterAddressee.insertPhoneNumber( *it ); // TITLE if ( mMasterAddressee.title().isEmpty() && !addr.title().isEmpty() ) mMasterAddressee.setTitle( addr.title() ); // TZ if ( !mMasterAddressee.timeZone().isValid() && addr.timeZone().isValid() ) mMasterAddressee.setTimeZone( addr.timeZone() ); // UID // ignore UID // URL if ( mMasterAddressee.url().isEmpty() && !addr.url().isEmpty() ) mMasterAddressee.setUrl( addr.url() ); // X- QStringList customs = addr.customs(); QStringList masterCustoms = mMasterAddressee.customs(); QStringList newCustoms( masterCustoms ); for ( it = customs.begin(); it != customs.end(); ++it ) if ( !masterCustoms.contains( *it ) ) newCustoms.append( *it ); mMasterAddressee.setCustoms( newCustoms ); } -#ifndef KAB_EMBEDDED -#include "mergewidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_mergewidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/features/mergewidget.h b/kaddressbook/features/mergewidget.h index 1063c80..bb16282 100644 --- a/kaddressbook/features/mergewidget.h +++ b/kaddressbook/features/mergewidget.h @@ -1,87 +1,87 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef MERGEWIDGET_H #define MERGEWIDGET_H #include <kdialogbase.h> #include <klistview.h> #include "extensionwidget.h" -class QListView; +class Q3ListView; class KABCore; namespace KABC { class AddressBook; } class MergeWidget : public ExtensionWidget { Q_OBJECT public: MergeWidget( KABCore*, QWidget *parent, const char *name = 0 ); virtual ~MergeWidget(); void contactsSelectionChanged(); QString title() const; QString identifier() const; private slots: void mergeAndRemove(); void merge(); void selectionContactViewChanged(); private: void updateView(); void doMerge( const KABC::Addressee &addr ); KListView *mContactView; QPushButton *mMergeAndRemoveButton; QPushButton *mMergeButton; KABC::Addressee mMasterAddressee; bool mBlockUpdate; }; #ifdef KAB_EMBEDDED class MergeFactory : public ExtensionFactory { public: ExtensionWidget *extension( KABCore *core, QWidget *parent, const char *name ) { return new MergeWidget( core, parent, name ); } QString identifier() const { return "merge"; } }; #endif //KAB_EMBEDDED #endif diff --git a/kaddressbook/filter.cpp b/kaddressbook/filter.cpp index 12ab1e3..6462310 100644 --- a/kaddressbook/filter.cpp +++ b/kaddressbook/filter.cpp @@ -1,238 +1,238 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kconfig.h> #include <kconfigbase.h> #include <kdebug.h> #include "kabprefs.h" #include "filter.h" #include <secrecy.h> Filter::Filter() : mName( QString::null ), mMatchRule( NotMatching ), mEnabled( true ), mInternal( false ) { mCriteria = ShowPublic | ShowPrivate| ShowConfidential ; noName = true; } Filter::Filter( const QString &name ) : mName( name ), mMatchRule( NotMatching ), mEnabled( true ), mInternal( false ) { mCriteria = ShowPublic | ShowPrivate| ShowConfidential ; noName = false; } Filter::~Filter() { } void Filter::setName( const QString &name ) { mName = name; noName = false; } const QString &Filter::name() const { return mName; } bool Filter::isInternal() const { return mInternal; } void Filter::apply( KABC::Addressee::List &addresseeList ) { if ( noName ) return; KABC::Addressee::List::Iterator iter; for ( iter = addresseeList.begin(); iter != addresseeList.end(); ) { if ( filterAddressee( *iter ) ) ++iter; else { #ifndef KAB_EMBEDDED iter = addresseeList.erase( iter ); #else //KAB_EMBEDDED iter = addresseeList.remove( iter ); #endif //KAB_EMBEDDED } } } bool Filter::filterAddressee( const KABC::Addressee &a ) { if ( noName ) return true; //qDebug("Filter::filterAddressee %s",mName.latin1() ); switch ( a.secrecy().type()) { case KABC::Secrecy::Public: if (! (mCriteria & ShowPublic )) return false; break; case KABC::Secrecy::Private: if (! (mCriteria & ShowPrivate )) return false; break; case KABC::Secrecy::Confidential: if (! (mCriteria & ShowConfidential )) return false; break; default: return false; break; } QStringList::Iterator iter; iter = mCategoryList.begin(); if ( iter == mCategoryList.end() ) return ( !(mMatchRule == Matching) ); for ( ; iter != mCategoryList.end(); ++iter ) { if ( a.hasCategory( *iter ) ) return ( mMatchRule == Matching ); } return !( mMatchRule == Matching ); } void Filter::setEnabled( bool on ) { mEnabled = on; } bool Filter::isEnabled() const { return mEnabled; } void Filter::setCategories( const QStringList &list ) { mCategoryList = list; } const QStringList &Filter::categories() const { return mCategoryList; } void Filter::save( KConfig *config ) { config->writeEntry( "Name", mName ); config->writeEntry( "Enabled", mEnabled ); config->writeEntry( "Categories", mCategoryList ); config->writeEntry( "MatchRule", (int)mMatchRule ); config->writeEntry( "Criteria", (int)mCriteria ); } void Filter::restore( KConfig *config ) { noName = false; mName = config->readEntry( "Name", "<internal error>" ); mEnabled = config->readBoolEntry( "Enabled", true ); mCategoryList = config->readListEntry( "Categories" ); mMatchRule = (MatchRule)config->readNumEntry( "MatchRule", Matching ); mCriteria = config->readNumEntry( "Criteria", (ShowPublic | ShowPrivate| ShowConfidential ) ); } void Filter::save( KConfig *config, QString baseGroup, Filter::List &list ) { { KConfigGroupSaver s( config, baseGroup ); // remove the old filters uint count = config->readNumEntry( "Count" ); /* // memory access violation here for ( uint i = 0; i < count; ++i ) config->deleteGroup( QString( "%1_%2" ).arg( baseGroup ).arg( i ) ); */ } int index = 0; Filter::List::Iterator iter; for ( iter = list.begin(); iter != list.end(); ++iter ) { if ( !(*iter).mInternal ) { KConfigGroupSaver s( config, QString( "%1_%2" ).arg( baseGroup ).arg( index ) ); (*iter).save( config ); index++; } } KConfigGroupSaver s( config, baseGroup ); config->writeEntry( "Count", index ); } Filter::List Filter::restore( KConfig *config, QString baseGroup ) { Filter::List list; int count = 0; Filter f; { KConfigGroupSaver s( config, baseGroup ); count = config->readNumEntry( "Count", 0 ); } for ( int i = 0; i < count; i++ ) { { KConfigGroupSaver s( config, QString( "%1_%2" ).arg( baseGroup ).arg( i ) ); f.restore( config ); } list.append( f ); } if ( list.isEmpty()) { QStringList cats = KABPrefs::instance()->mCustomCategories; for ( QStringList::Iterator it = cats.begin(); it != cats.end(); ++it ) { Filter filter; filter.noName = false; filter.mName = *it; filter.mEnabled = true; - filter.mCategoryList = *it; + filter.mCategoryList = QStringList(*it); filter.mMatchRule = Matching; filter.mInternal = true; list.append( filter ); } } return list; } void Filter::setMatchRule( MatchRule rule ) { mMatchRule = rule; } Filter::MatchRule Filter::matchRule() const { return mMatchRule; } diff --git a/kaddressbook/filter.h b/kaddressbook/filter.h index f4ae123..508436d 100644 --- a/kaddressbook/filter.h +++ b/kaddressbook/filter.h @@ -1,158 +1,158 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef FILTER_H #define FILTER_H #include <qstring.h> #include <qstringlist.h> -#include <qvaluelist.h> +#include <q3valuelist.h> #include <kabc/addressee.h> #include <kconfig.h> /** Filter for AddressBook related objects (Addressees) @todo This class should be switched to use shared data. */ class Filter { public: enum { ShowPublic = 1, ShowPrivate = 2, ShowConfidential = 4 }; void setCriteria(int c) { mCriteria = c ;} int criteria() const { return mCriteria;} - typedef QValueList<Filter> List; + typedef Q3ValueList<Filter> List; enum MatchRule { Matching = 0, NotMatching = 1 }; Filter(); Filter( const QString& name ); ~Filter(); /** Set the name of the filter. */ void setName( const QString &name ); /** @return The name of the filter. */ const QString &name() const; /** @return Whether the filter is an internal one. */ bool isInternal() const; /** Apply the filter to the addressee list. All addressees not passing the filter criterias will be removed from the list. If the MatchRule is NotMatch, then all the addressees matching the filter will be removed from the list. */ void apply( KABC::Addressee::List &addresseeList ); /** Apply the filter to the addressee. @return True if the addressee passes the criteria, false otherwise. The return values are opposite if the MatchRule is NotMatch. */ bool filterAddressee( const KABC::Addressee &a ); /** Enable or disable the filter */ void setEnabled( bool on ); /** @return True if this filter is enabled, false otherwise. */ bool isEnabled() const; /** Set the list of categories. This list is used to filter addressees. */ void setCategories( const QStringList &list ); /** @return The list of categories. */ const QStringList &categories() const; /** Saves the filter to the config file. The group should already be set. */ void save( KConfig *config ); /** Loads the filter from the config file. The group should already be set. */ void restore( KConfig *config ); /** Saves a list of filters to the config file. @param config The config file to use @param baseGroup The base groupname to use. The number of filters will be written to this group, then a _1, _2, etc will be append for each filter saved. @param list The list of filters to be saved. */ static void save( KConfig *config, QString baseGroup, Filter::List &list ); /** Restores a list of filters from a config file. @param config The config file to read from. @param baseGroup The base group name to be used to find the filters @return The list of filters. */ static Filter::List restore( KConfig *config, QString baseGroup ); /** Sets the filter rule. If the rule is Filter::Matching (default), then the filter will return true on items that match the filter. If the rule is Filter::NotMatching, then the filter will return true on items that do not match the filter. */ void setMatchRule( MatchRule rule ); /** @return The current match rule. */ MatchRule matchRule() const; private: bool noName; int mCriteria; QString mName; QStringList mCategoryList; MatchRule mMatchRule; bool mEnabled; bool mInternal; }; #endif diff --git a/kaddressbook/filtereditdialog.cpp b/kaddressbook/filtereditdialog.cpp index ef9b979..40698a7 100644 --- a/kaddressbook/filtereditdialog.cpp +++ b/kaddressbook/filtereditdialog.cpp @@ -1,315 +1,317 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ -#include <qbuttongroup.h> -#include <qhbox.h> +#include <q3buttongroup.h> +#include <q3hbox.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> #include <qradiobutton.h> #include <qcheckbox.h> #include <qregexp.h> #include <qstring.h> #include <qtoolbutton.h> #include <qtooltip.h> #include <qwidget.h> +//Added by qt3to4: +#include <Q3GridLayout> #include <kapplication.h> #include <kbuttonbox.h> #include <kdebug.h> #include <kiconloader.h> #include <klineedit.h> #include <klistbox.h> #include <klistview.h> #include <klocale.h> #include <kglobal.h> #include "kabprefs.h" #include "filtereditdialog.h" FilterEditDialog::FilterEditDialog( QWidget *parent, const char *name ) : KDialogBase( Plain, i18n( "Edit Address Book Filter" ), Help | Ok | Cancel, Ok, parent, name, /*US false*/ true, true ) { initGUI(); QStringList cats = KABPrefs::instance()->mCustomCategories; QStringList::Iterator iter; for ( iter = cats.begin(); iter != cats.end(); ++iter ) - mCategoriesView->insertItem( new QCheckListItem( mCategoriesView, (*iter), QCheckListItem::CheckBox ) ); + mCategoriesView->insertItem( new Q3CheckListItem( mCategoriesView, (*iter), Q3CheckListItem::CheckBox ) ); filterNameTextChanged( mNameEdit->text() ); } FilterEditDialog::~FilterEditDialog() { } void FilterEditDialog::setFilter( const Filter &filter ) { mNameEdit->setText( filter.name() ); QStringList categories = filter.categories(); - QListViewItem *item = mCategoriesView->firstChild(); + Q3ListViewItem *item = mCategoriesView->firstChild(); while ( item != 0 ) { if ( categories.contains( item->text( 0 ) ) ) { - QCheckListItem *checkItem = static_cast<QCheckListItem*>( item ); + Q3CheckListItem *checkItem = static_cast<Q3CheckListItem*>( item ); checkItem->setOn( true ); } item = item->nextSibling(); } if ( filter.matchRule() == Filter::Matching ) mMatchRuleGroup->setButton( 0 ); else mMatchRuleGroup->setButton( 1 ); int c = filter.criteria() ; mPublic->setChecked(c &Filter::ShowPublic); mPrivate->setChecked(c & Filter::ShowPrivate); mConfidential->setChecked(c & Filter::ShowConfidential); } Filter FilterEditDialog::filter() { Filter filter; filter.setName( mNameEdit->text() ); QStringList categories; - QListViewItem *item = mCategoriesView->firstChild(); + Q3ListViewItem *item = mCategoriesView->firstChild(); while ( item != 0 ) { - QCheckListItem *checkItem = static_cast<QCheckListItem*>( item ); + Q3CheckListItem *checkItem = static_cast<Q3CheckListItem*>( item ); if ( checkItem->isOn() ) categories.append( item->text( 0 ) ); item = item->nextSibling(); } filter.setCategories( categories ); if ( mMatchRuleGroup->find( 0 )->isOn() ) filter.setMatchRule( Filter::Matching ); else filter.setMatchRule( Filter::NotMatching ); int c = 0; if (mPublic->isChecked()) c |= Filter::ShowPublic; if (mPrivate->isChecked()) c |= Filter::ShowPrivate; if (mConfidential->isChecked()) c |= Filter::ShowConfidential; filter.setCriteria( c ) ; return filter; } void FilterEditDialog::initGUI() { #ifndef KAB_EMBEDDED resize( 490, 300 ); #else //KAB_EMBEDDED resize( KMIN(KGlobal::getDesktopWidth()-10, 490), KMIN(KGlobal::getDesktopHeight()-50, 300)); #endif //KAB_EMBEDDED QWidget *page = plainPage(); QLabel *label; - QGridLayout *topLayout = new QGridLayout( page, 3, 2, 0, spacingHint() ); + Q3GridLayout *topLayout = new Q3GridLayout( page, 3, 2, 0, spacingHint() ); label = new QLabel( i18n( "Name" ), page ); mNameEdit = new KLineEdit( page ); mNameEdit->setFocus(); topLayout->addWidget( label, 0, 0 ); topLayout->addWidget( mNameEdit, 0, 1 ); connect( mNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( filterNameTextChanged( const QString&) ) ); mCategoriesView = new KListView( page ); mCategoriesView->addColumn( i18n( "Categories" ) ); topLayout->addMultiCellWidget( mCategoriesView, 1, 1, 0, 1 ); - mMatchRuleGroup = new QHButtonGroup( i18n( "Category rule" ), page ); + mMatchRuleGroup = new Q3HButtonGroup( i18n( "Category rule" ), page ); mMatchRuleGroup->setExclusive( true ); QRadioButton *radio = new QRadioButton( i18n( "Include categories" ), mMatchRuleGroup ); //mMatchRuleGroup->insert( radio ); radio = new QRadioButton( i18n( "Exclude categories" ), mMatchRuleGroup ); radio->setChecked( true ); //mMatchRuleGroup->insert( radio ); topLayout->addMultiCellWidget( mMatchRuleGroup, 2, 2, 0, 1 ); - QHButtonGroup * mMatchPPCGroup = new QHButtonGroup(i18n( "Include contacts, that are:" ), page ); + Q3HButtonGroup * mMatchPPCGroup = new Q3HButtonGroup(i18n( "Include contacts, that are:" ), page ); mPublic = new QCheckBox( i18n( "public" ), mMatchPPCGroup ); mPrivate = new QCheckBox( i18n( "private" ), mMatchPPCGroup ); mConfidential = new QCheckBox( i18n( "confidential" ), mMatchPPCGroup ); mPublic->setChecked( true ); mPrivate->setChecked( true ); mConfidential->setChecked( true ); topLayout->addMultiCellWidget( mMatchPPCGroup, 3, 3, 0, 1 ); } void FilterEditDialog::filterNameTextChanged( const QString &text ) { enableButtonOK( !text.isEmpty() ); } void FilterEditDialog::slotHelp() { #ifndef KAB_EMBEDDED kapp->invokeHelp( "using-filters" ); #endif //KAB_EMBEDDED } FilterDialog::FilterDialog( QWidget *parent, const char *name ) : KDialogBase( Plain, i18n( "Edit Address Book Filters" ), Ok | Cancel, Ok, parent, name, /*US false*/true, true ) { initGUI(); } FilterDialog::~FilterDialog() { } void FilterDialog::setFilters( const Filter::List &list ) { mFilterList.clear(); mInternalFilterList.clear(); Filter::List::ConstIterator it; for ( it = list.begin(); it != list.end(); ++it ) { if ( (*it).isInternal() ) mInternalFilterList.append( *it ); else mFilterList.append( *it ); } refresh(); } Filter::List FilterDialog::filters() const { Filter::List list = mFilterList + mInternalFilterList; return list; } void FilterDialog::add() { #ifndef KAB_EMBEDDED FilterEditDialog dlg( this ); #else //KAB_EMBEDDED FilterEditDialog dlg( this->parentWidget() ); #endif //KAB_EMBEDDED if ( dlg.exec() ) mFilterList.append( dlg.filter() ); refresh(); mFilterListBox->setCurrentItem( mFilterListBox->count() - 1 ); } void FilterDialog::edit() { FilterEditDialog dlg( this ); uint pos = mFilterListBox->currentItem(); dlg.setFilter( mFilterList[ pos ] ); if ( dlg.exec() ) { mFilterList.remove( mFilterList.at( pos ) ); mFilterList.insert( mFilterList.at( pos ), dlg.filter() ); } refresh(); mFilterListBox->setCurrentItem( pos ); } void FilterDialog::remove() { mFilterList.remove( mFilterList.at( mFilterListBox->currentItem() ) ); selectionChanged( 0 ); refresh(); } void FilterDialog::refresh() { mFilterListBox->clear(); Filter::List::Iterator iter; for ( iter = mFilterList.begin(); iter != mFilterList.end(); ++iter ) mFilterListBox->insertItem( (*iter).name() ); } -void FilterDialog::selectionChanged( QListBoxItem *item ) +void FilterDialog::selectionChanged( Q3ListBoxItem *item ) { bool state = ( item != 0 ); mEditButton->setEnabled( state ); mRemoveButton->setEnabled( state ); } void FilterDialog::initGUI() { #ifndef KAB_EMBEDDED resize( 330, 200 ); #else //KAB_EMBEDDED resize( KMIN(KGlobal::getDesktopWidth()-10, 330), KMIN(KGlobal::getDesktopHeight()-50, 200)); #endif //KAB_EMBEDDED QWidget *page = plainPage(); - QGridLayout *topLayout = new QGridLayout( page, 1, 2, 0, spacingHint() ); + Q3GridLayout *topLayout = new Q3GridLayout( page, 1, 2, 0, spacingHint() ); mFilterListBox = new KListBox( page ); topLayout->addWidget( mFilterListBox, 0, 0 ); - connect( mFilterListBox, SIGNAL( selectionChanged( QListBoxItem * ) ), - SLOT( selectionChanged( QListBoxItem * ) ) ); - connect( mFilterListBox, SIGNAL( doubleClicked ( QListBoxItem * ) ), + connect( mFilterListBox, SIGNAL( selectionChanged( Q3ListBoxItem * ) ), + SLOT( selectionChanged( Q3ListBoxItem * ) ) ); + connect( mFilterListBox, SIGNAL( doubleClicked ( Q3ListBoxItem * ) ), SLOT( edit() ) ); - KButtonBox *buttonBox = new KButtonBox( page, Vertical ); + KButtonBox *buttonBox = new KButtonBox( page, Qt::Vertical ); buttonBox->addButton( i18n( "&Add..." ), this, SLOT( add() ) ); mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( edit() ) ); mEditButton->setEnabled( false ); mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( remove() ) ); mRemoveButton->setEnabled( false ); buttonBox->layout(); topLayout->addWidget( buttonBox, 0, 1 ); } -#ifndef KAB_EMBEDDED -#include "filtereditdialog.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_filtereditdialog.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/filtereditdialog.h b/kaddressbook/filtereditdialog.h index 5a8bad1..64d2976 100644 --- a/kaddressbook/filtereditdialog.h +++ b/kaddressbook/filtereditdialog.h @@ -1,109 +1,108 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #ifndef FILTEREDITDIALOG_H #define FILTEREDITDIALOG_H -class QButtonGroup; +#include <Q3HButtonGroup> class QString; class QToolButton; class QWidget; -class QListBoxItem; +class Q3ListBoxItem; class QCheckBox; class KLineEdit; class KListBox; class KListView; #include <kdialogbase.h> -#include <qhbuttongroup.h> #include "filter.h" class FilterDialog : public KDialogBase { Q_OBJECT public: FilterDialog( QWidget *parent, const char *name = 0 ); ~FilterDialog(); void setFilters( const Filter::List &list ); Filter::List filters() const; protected slots: void add(); void edit(); void remove(); - void selectionChanged( QListBoxItem* ); + void selectionChanged( Q3ListBoxItem* ); private: void initGUI(); void refresh(); Filter::List mFilterList; Filter::List mInternalFilterList; KListBox *mFilterListBox; QPushButton *mAddButton; QPushButton *mEditButton; QPushButton *mRemoveButton; }; class FilterEditDialog : public KDialogBase { Q_OBJECT public: FilterEditDialog( QWidget *parent, const char *name = 0 ); ~FilterEditDialog(); void setFilter( const Filter &filter ); Filter filter(); protected slots: void filterNameTextChanged( const QString& ); void slotHelp(); private: void initGUI(); Filter mFilter; KLineEdit *mNameEdit; KListView *mCategoriesView; - QHButtonGroup *mMatchRuleGroup; + Q3HButtonGroup *mMatchRuleGroup; QCheckBox *mPrivate; QCheckBox *mPublic; QCheckBox *mConfidential; QPushButton *mEditButton; QPushButton *mRemoveButton; }; #endif diff --git a/kaddressbook/geowidget.cpp b/kaddressbook/geowidget.cpp index 13cd084..caff3b2 100644 --- a/kaddressbook/geowidget.cpp +++ b/kaddressbook/geowidget.cpp @@ -1,629 +1,636 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kabc/geo.h> #ifndef KAB_EMBEDDED #include <kaccelmanager.h> #else //KAB_EMBEDDED -#include <qtextstream.h> +#include <q3textstream.h> +//Added by qt3to4: +#include <QPaintEvent> +#include <Q3GridLayout> +#include <Q3Frame> +#include <QMouseEvent> #include <kglobal.h> #endif //KAB_EMBEDDED +#include <QDesktopWidget> + #include <knuminput.h> #include <kcombobox.h> #include <kdebug.h> #include <kiconloader.h> #include <klocale.h> #include <kstandarddirs.h> #include <qcheckbox.h> #include <qfile.h> #include <qapplication.h> -#include <qgroupbox.h> +#include <q3groupbox.h> #include <qlabel.h> #include <qlayout.h> -#include <qlistbox.h> +#include <q3listbox.h> #include <qpainter.h> #include <qpixmap.h> #include <qpushbutton.h> #include <qregexp.h> #include <qstring.h> #include <stdlib.h> #include "geowidget.h" GeoWidget::GeoWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { QLabel *label = 0; - QGridLayout *topLayout = new QGridLayout( this, 4, 3 ); + Q3GridLayout *topLayout = new Q3GridLayout( this, 4, 3 ); topLayout->setMargin( KDialog::marginHint() ); topLayout->setSpacing( KDialog::spacingHint() ); label = new QLabel( this ); //US ambiguous call to loadIcon. Add an additional parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "package_network", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "package_network", KIcon::Desktop, 0 ) ); label->setAlignment( Qt::AlignTop ); topLayout->addMultiCellWidget( label, 0, 3, 0, 0 ); - label->setAlignment( AlignCenter ); + label->setAlignment( Qt::AlignCenter ); mGeoIsValid = new QCheckBox( i18n( "Use geo data" ), this ); topLayout->addMultiCellWidget( mGeoIsValid, 0, 0, 1, 2 ); label = new QLabel( i18n( "Latitude:" ), this ); topLayout->addWidget( label, 1, 1 ); mLatitudeBox = new KDoubleSpinBox( -90, 90, 1, 0, 6, this ); mLatitudeBox->setEnabled( false ); mLatitudeBox->setSuffix( "" ); topLayout->addWidget( mLatitudeBox, 1, 2 ); label->setBuddy( mLatitudeBox ); label = new QLabel( i18n( "Longitude:" ), this ); topLayout->addWidget( label, 2, 1 ); mLongitudeBox = new KDoubleSpinBox( -180, 180, 1, 0, 6, this ); mLongitudeBox->setEnabled( false ); mLongitudeBox->setSuffix( "" ); topLayout->addWidget( mLongitudeBox, 2, 2 ); label->setBuddy( mLongitudeBox ); mExtendedButton = new QPushButton( i18n( "Edit Geo Data..." ), this ); mExtendedButton->setEnabled( false ); topLayout->addMultiCellWidget( mExtendedButton, 3, 3, 1, 2 ); connect( mLatitudeBox, SIGNAL( valueChanged( double ) ), SIGNAL( changed() ) ); connect( mLongitudeBox, SIGNAL( valueChanged( double ) ), SIGNAL( changed() ) ); connect( mExtendedButton, SIGNAL( clicked() ), SLOT( editGeoData() ) ); connect( mGeoIsValid, SIGNAL( toggled( bool ) ), mLatitudeBox, SLOT( setEnabled( bool ) ) ); connect( mGeoIsValid, SIGNAL( toggled( bool ) ), mLongitudeBox, SLOT( setEnabled( bool ) ) ); connect( mGeoIsValid, SIGNAL( toggled( bool ) ), mExtendedButton, SLOT( setEnabled( bool ) ) ); connect( mGeoIsValid, SIGNAL( toggled( bool ) ), SIGNAL( changed() ) ); #ifndef KAB_EMBEDDED KAcceleratorManager::manage( this ); #endif //KAB_EMBEDDED } GeoWidget::~GeoWidget() { } void GeoWidget::setGeo( const KABC::Geo &geo ) { if ( geo.isValid() ) { mGeoIsValid->setChecked( true ); mLatitudeBox->setValue( geo.latitude() ); mLongitudeBox->setValue( geo.longitude() ); } else mGeoIsValid->setChecked( false ); } KABC::Geo GeoWidget::geo() const { KABC::Geo geo; if ( mGeoIsValid->isChecked() ) { geo.setLatitude( mLatitudeBox->value() ); geo.setLongitude( mLongitudeBox->value() ); } else { geo.setLatitude( 91 ); geo.setLongitude( 181 ); } return geo; } void GeoWidget::editGeoData() { GeoDialog dlg( this ); dlg.setLatitude( mLatitudeBox->value() ); dlg.setLongitude( mLongitudeBox->value() ); if ( dlg.exec() ) { mLatitudeBox->setValue( dlg.latitude() ); mLongitudeBox->setValue( dlg.longitude() ); emit changed(); } } GeoDialog::GeoDialog( QWidget *parent, const char *name ) : KDialogBase( Plain, i18n( "Geo Data Input" ), Ok | Cancel, Ok, parent, name, true, true ), mUpdateSexagesimalInput( true ) { - QFrame *page = plainPage(); + Q3Frame *page = plainPage(); - QGridLayout *topLayout = new QGridLayout( page, 1, 1, marginHintSmall(), + Q3GridLayout *topLayout = new Q3GridLayout( page, 1, 1, marginHintSmall(), spacingHint() ); //topLayout->setRowStretch( 1, 1 ); mMapWidget = new GeoMapWidget( page ); mCityCombo = new KComboBox( page ); - QGroupBox *sexagesimalGroup = new QGroupBox( 0, Vertical, i18n( "Sexagesimal" ), page ); - QGridLayout *sexagesimalLayout = new QGridLayout( sexagesimalGroup->layout(), + Q3GroupBox *sexagesimalGroup = new Q3GroupBox( 0, Qt::Vertical, i18n( "Sexagesimal" ), page ); + Q3GridLayout *sexagesimalLayout = new Q3GridLayout( sexagesimalGroup->layout(), 2, 5, spacingHint() ); QLabel *label; if ( QApplication::desktop()->width() < 320 ) { label = new QLabel( i18n( "La." ), sexagesimalGroup ); sexagesimalLayout->setSpacing ( spacingHintSmall() ); sexagesimalLayout->setMargin ( marginHintSmall() ); topLayout->setMargin ( 0 ); mCityCombo->setMaximumWidth( 220 ); sexagesimalGroup->setMaximumWidth( 220 ); } else label = new QLabel( i18n( "Latitude:" ), sexagesimalGroup ); sexagesimalLayout->addWidget( label, 0, 0 ); int maxWid = 60; if ( QApplication::desktop()->width() < 320 ) maxWid = 40; mLatDegrees = new QSpinBox( 0, 90, 1, sexagesimalGroup ); mLatDegrees->setSuffix( "" ); mLatDegrees->setWrapping( false ); sexagesimalLayout->addWidget( mLatDegrees, 0, 1 ); mLatDegrees->setMaximumWidth( maxWid ); mLatMinutes = new QSpinBox( 0, 59, 1, sexagesimalGroup ); mLatMinutes->setSuffix( "'" ); sexagesimalLayout->addWidget( mLatMinutes, 0, 2 ); mLatMinutes->setMaximumWidth( maxWid ); mLatSeconds = new QSpinBox( 0, 59, 1, sexagesimalGroup ); mLatSeconds->setSuffix( "\"" ); sexagesimalLayout->addWidget( mLatSeconds, 0, 3 ); mLatSeconds->setMaximumWidth( maxWid ); mLatDirection = new KComboBox( sexagesimalGroup ); mLatDirection->insertItem( i18n( "North" ) ); mLatDirection->insertItem( i18n( "South" ) ); sexagesimalLayout->addWidget( mLatDirection, 0, 4 ); if ( QApplication::desktop()->width() < 320 ) label = new QLabel( i18n( "Lo." ), sexagesimalGroup ); else label = new QLabel( i18n( "Longitude:" ), sexagesimalGroup ); sexagesimalLayout->addWidget( label, 1, 0 ); mLongDegrees = new QSpinBox( 0, 180, 1, sexagesimalGroup ); mLongDegrees->setSuffix( "" ); sexagesimalLayout->addWidget( mLongDegrees, 1, 1 ); mLongDegrees->setMaximumWidth( maxWid ); mLongMinutes = new QSpinBox( 0, 59, 1, sexagesimalGroup ); mLongMinutes->setSuffix( "'" ); sexagesimalLayout->addWidget( mLongMinutes, 1, 2 ); mLongMinutes->setMaximumWidth( maxWid ); mLongSeconds = new QSpinBox( 0, 59, 1, sexagesimalGroup ); mLongSeconds->setSuffix( "\"" ); sexagesimalLayout->addWidget( mLongSeconds, 1, 3 ); mLongSeconds->setMaximumWidth( maxWid ); mLongDirection = new KComboBox( sexagesimalGroup ); mLongDirection->insertItem( i18n( "East" ) ); mLongDirection->insertItem( i18n( "West" ) ); sexagesimalLayout->addWidget( mLongDirection, 1, 4 ); if ( true /*QApplication::desktop()->width() < 640*/ ) { topLayout->addWidget( mMapWidget, 0, 0 ); topLayout->addWidget( mCityCombo, 1, 0 ); topLayout->addWidget( sexagesimalGroup, 2, 0 ); } else { topLayout->addMultiCellWidget( mMapWidget, 0, 1, 0, 0 ); topLayout->addWidget( mCityCombo, 0, 1 ); topLayout->addWidget( sexagesimalGroup, 1, 1 ); } loadCityList(); connect( mMapWidget, SIGNAL( changed() ), SLOT( geoMapChanged() ) ); connect( mCityCombo, SIGNAL( activated( int ) ), SLOT( cityInputChanged() ) ); connect( mLatDegrees, SIGNAL( valueChanged( int ) ), SLOT( sexagesimalInputChanged() ) ); connect( mLatMinutes, SIGNAL( valueChanged( int ) ), SLOT( sexagesimalInputChanged() ) ); connect( mLatSeconds, SIGNAL( valueChanged( int ) ), SLOT( sexagesimalInputChanged() ) ); connect( mLatDirection, SIGNAL( activated( int ) ), SLOT( sexagesimalInputChanged() ) ); connect( mLongDegrees, SIGNAL( valueChanged( int ) ), SLOT( sexagesimalInputChanged() ) ); connect( mLongMinutes, SIGNAL( valueChanged( int ) ), SLOT( sexagesimalInputChanged() ) ); connect( mLongSeconds, SIGNAL( valueChanged( int ) ), SLOT( sexagesimalInputChanged() ) ); connect( mLongDirection, SIGNAL( activated( int ) ), SLOT( sexagesimalInputChanged() ) ); mLongitude = 0.0; mLatitude = 0.0; #ifndef DESKTOP_VERSION showMaximized(); #endif } GeoDialog::~GeoDialog() { } void GeoDialog::setLatitude( double latitude ) { mLatitude = latitude; updateInputs(); } double GeoDialog::latitude() const { return mLatitude; } void GeoDialog::setLongitude( double longitude ) { mLongitude = longitude; updateInputs(); } double GeoDialog::longitude() const { return mLongitude; } void GeoDialog::sexagesimalInputChanged() { mLatitude = (double)( mLatDegrees->value() + (double)mLatMinutes->value() / 60 + (double)mLatSeconds->value() / 3600 ); mLatitude *= ( mLatDirection->currentItem() == 1 ? -1 : 1 ); mLongitude = (double)( mLongDegrees->value() + (double)mLongMinutes->value() / 60 + (double)mLongSeconds->value() / 3600 ); mLongitude *= ( mLongDirection->currentItem() == 1 ? -1 : 1 ); mUpdateSexagesimalInput = false; updateInputs(); } void GeoDialog::geoMapChanged() { mLatitude = mMapWidget->latitude(); mLongitude = mMapWidget->longitude(); updateInputs(); } void GeoDialog::cityInputChanged() { if ( mCityCombo->currentItem() != 0 ) { GeoData data = mGeoDataMap[ mCityCombo->currentText() ]; mLatitude = data.latitude; mLongitude = data.longitude; } else mLatitude = mLongitude = 0; updateInputs(); } void GeoDialog::updateInputs() { // hmm, doesn't look nice, but there is no better way AFAIK mCityCombo->blockSignals( true ); mLatDegrees->blockSignals( true ); mLatMinutes->blockSignals( true ); mLatSeconds->blockSignals( true ); mLatDirection->blockSignals( true ); mLongDegrees->blockSignals( true ); mLongMinutes->blockSignals( true ); mLongSeconds->blockSignals( true ); mLongDirection->blockSignals( true ); mMapWidget->setLatitude( mLatitude ); mMapWidget->setLongitude( mLongitude ); mMapWidget->update(); if ( mUpdateSexagesimalInput ) { int degrees, minutes, seconds; double latitude = mLatitude; double longitude = mLongitude; latitude *= ( mLatitude < 0 ? -1 : 1 ); longitude *= ( mLongitude < 0 ? -1 : 1 ); degrees = (int)( latitude * 1 ); minutes = (int)( ( latitude - degrees ) * 60 ); seconds = (int)( (double)( (double)latitude - (double)degrees - ( (double)minutes / (double)60 ) ) * (double)3600 ); mLatDegrees->setValue( degrees ); mLatMinutes->setValue( minutes ); mLatSeconds->setValue( seconds ); mLatDirection->setCurrentItem( mLatitude < 0 ? 1 : 0 ); degrees = (int)( longitude * 1 ); minutes = (int)( ( longitude - degrees ) * 60 ); seconds = (int)( (double)( longitude - (double)degrees - ( (double)minutes / 60 ) ) * 3600 ); mLongDegrees->setValue( degrees ); mLongMinutes->setValue( minutes ); mLongSeconds->setValue( seconds ); mLongDirection->setCurrentItem( mLongitude < 0 ? 1 : 0 ); } mUpdateSexagesimalInput = true; int pos = nearestCity( mLongitude, mLatitude ); if ( pos != -1 ) mCityCombo->setCurrentItem( pos + 1 ); else mCityCombo->setCurrentItem( 0 ); mCityCombo->blockSignals( false ); mLatDegrees->blockSignals( false ); mLatMinutes->blockSignals( false ); mLatSeconds->blockSignals( false ); mLatDirection->blockSignals( false ); mLongDegrees->blockSignals( false ); mLongMinutes->blockSignals( false ); mLongSeconds->blockSignals( false ); mLongDirection->blockSignals( false ); } void GeoDialog::loadCityList() { mCityCombo->clear(); mGeoDataMap.clear(); QString fileName ; #ifdef DESKTOP_VERSION #ifndef _WIN32_ fileName = qApp->applicationDirPath () + "/kdepim/kaddressbook/zone.tab"; #else fileName = qApp->applicationDirPath () + "\\kdepim\\kaddressbook\\zone.tab"; #endif #else fileName = getenv("QPEDIR"); fileName += "/pics/kdepim/kaddressbook/zone.tab"; #endif QFile file( fileName); - if ( file.open( IO_ReadOnly ) ) { - QTextStream s( &file ); + if ( file.open( QIODevice::ReadOnly ) ) { + Q3TextStream s( &file ); QString line, country; QRegExp coord( "[+-]\\d+[+-]\\d+" ); QRegExp name( "[^\\s]+/[^\\s]+" ); int posc, posn, pos; while ( !s.eof() ) { line = s.readLine().stripWhiteSpace(); if ( line.isEmpty() || line[ 0 ] == '#' ) continue; country = line.left( 2 ); QString c, n; #ifdef DESKTOP_VERSION posc = coord.search( line, 0 ); #else posc = coord.find( line, 0 ); #endif // if ( pos >= 0 ) //c = line.mid( pos, coord.matchedLength() ); #ifdef DESKTOP_VERSION posn = name.search(line, posc); #else posn = name.find(line, posc); #endif if ( posn > 0 ) { c = line.mid( posc, posn-posc ).stripWhiteSpace(); //qDebug("*%s* ", c.latin1()); int nend = line.find(" ", posn ); if ( nend < 0 ) nend = line.length(); n = line.mid( posn, nend-posn).stripWhiteSpace(); //n.replace( '_', " " ); } if ( !c.isEmpty() && !n.isEmpty() ) { pos = c.find( "+", 1 ); if ( pos < 0 ) pos = c.find( "-", 1 ); if ( pos > 0 ) { GeoData data; data.latitude = calculateCoordinate( c.left( pos ) ); data.longitude = calculateCoordinate( c.mid( pos ) ); data.country = country; mGeoDataMap.insert( n, data ); } } } //US I have no mGeoDataMap.keys(). //US QStringList items( mGeoDataMap.keys() ); QStringList items; QMap<QString, GeoData>::ConstIterator it; for( it = mGeoDataMap.begin(); it != mGeoDataMap.end(); ++it ) items << it.key().latin1(); items.prepend( i18n( "Undefined" ) ); mCityCombo->insertStringList( items ); file.close(); } } double GeoDialog::calculateCoordinate( const QString &coordinate ) { int neg; int d = 0, m = 0, s = 0; QString str = coordinate; neg = str.left( 1 ) == "-"; str.remove( 0, 1 ); switch ( str.length() ) { case 4: d = str.left( 2 ).toInt(); m = str.mid( 2 ).toInt(); break; case 5: d = str.left( 3 ).toInt(); m = str.mid( 3 ).toInt(); break; case 6: d = str.left( 2 ).toInt(); m = str.mid( 2, 2 ).toInt(); s = str.right( 2 ).toInt(); break; case 7: d = str.left( 3 ).toInt(); m = str.mid( 3, 2 ).toInt(); s = str.right( 2 ).toInt(); break; default: break; } if ( neg ) return - ( d + m / 60.0 + s / 3600.0 ); else return d + m / 60.0 + s / 3600.0; } int GeoDialog::nearestCity( double x, double y ) { QMap<QString, GeoData>::Iterator it; int pos = 0; for ( it = mGeoDataMap.begin(); it != mGeoDataMap.end(); ++it, pos++ ) { double dist = ( (*it).longitude - x ) * ( (*it).longitude - x ) + ( (*it).latitude - y ) * ( (*it).latitude - y ); if ( dist < 1.5 ) return pos; } return -1; } GeoMapWidget::GeoMapWidget( QWidget *parent, const char *name ) : QWidget( parent, name ), mLatitude( 0 ), mLongitude( 0 ) { - setBackgroundMode( NoBackground ); + setBackgroundMode( Qt::NoBackground ); setFixedSize( 240, 120 ); update(); } GeoMapWidget::~GeoMapWidget() { } void GeoMapWidget::setLatitude( double latitude ) { mLatitude = latitude; } double GeoMapWidget::latitude()const { return mLatitude; } void GeoMapWidget::setLongitude( double longitude ) { mLongitude = longitude; } double GeoMapWidget::longitude()const { return mLongitude; } void GeoMapWidget::mousePressEvent( QMouseEvent *event ) { double latMid = height() / 2; double longMid = width() / 2; double latOffset = latMid - event->y(); double longOffset = event->x() - longMid; mLatitude = ( latOffset * 90 ) / latMid; mLongitude = ( longOffset * 180 ) / longMid; emit changed(); } void GeoMapWidget::paintEvent( QPaintEvent* ) { uint w = width(); uint h = height(); QPixmap world = KGlobal::iconLoader()->loadIcon( "world", KIcon::Desktop, 0 ); QPainter p; p.begin( &world, this ); p.setPen( QColor( 255, 0, 0 ) ); p.setBrush( QColor( 255, 0, 0 ) ); double latMid = h / 2; double longMid = w / 2; double latOffset = ( mLatitude * latMid ) / 90; double longOffset = ( mLongitude * longMid ) / 180; int x = (int)(longMid + longOffset); int y = (int)(latMid - latOffset); p.drawEllipse( x, y, 4, 4 ); p.end(); bitBlt( this, 0, 0, &world ); } -#ifndef KAB_EMBEDDED -#include "geowidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_geowidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/geowidget.h b/kaddressbook/geowidget.h index 3d39691..5b64370 100644 --- a/kaddressbook/geowidget.h +++ b/kaddressbook/geowidget.h @@ -1,155 +1,159 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef GEOWIDGET_H #define GEOWIDGET_H #include <qmap.h> #include <qwidget.h> +//Added by qt3to4: +#include <QLabel> +#include <QMouseEvent> +#include <QPaintEvent> #include <kdialogbase.h> namespace KABC { class Geo; } class GeoMapWidget; class KComboBox; class KDoubleSpinBox; class QCheckBox; class QLabel; class QSpinBox; class QPushButton; typedef struct { double latitude; double longitude; QString country; } GeoData; class GeoWidget : public QWidget { Q_OBJECT public: GeoWidget( QWidget *parent, const char *name = 0 ); ~GeoWidget(); /** Sets the geo object. */ void setGeo( const KABC::Geo &geo ); /** Returns a geo object. */ KABC::Geo geo() const; signals: void changed(); private slots: void editGeoData(); private: KDoubleSpinBox *mLatitudeBox; KDoubleSpinBox *mLongitudeBox; QCheckBox *mGeoIsValid; QPushButton *mExtendedButton; }; class GeoDialog : public KDialogBase { Q_OBJECT public: GeoDialog( QWidget *parent, const char *name = 0 ); ~GeoDialog(); void setLatitude( double latitude ); double latitude() const; void setLongitude( double longitude ); double longitude() const; private slots: void updateInputs(); void sexagesimalInputChanged(); void geoMapChanged(); void cityInputChanged(); private: void loadCityList(); double calculateCoordinate( const QString& ); int nearestCity( double, double ); GeoMapWidget *mMapWidget; KComboBox *mCityCombo; QSpinBox *mLatDegrees; QSpinBox *mLatMinutes; QSpinBox *mLatSeconds; KComboBox *mLatDirection; QSpinBox *mLongDegrees; QSpinBox *mLongMinutes; QSpinBox *mLongSeconds; KComboBox *mLongDirection; double mLatitude; double mLongitude; QMap<QString, GeoData> mGeoDataMap; bool mUpdateSexagesimalInput; }; class GeoMapWidget : public QWidget { Q_OBJECT public: GeoMapWidget( QWidget *parent, const char *name = 0 ); ~GeoMapWidget(); void setLatitude( double latitude ); double latitude()const; void setLongitude( double longitude ); double longitude()const; signals: void changed(); protected: virtual void mousePressEvent( QMouseEvent* ); virtual void paintEvent( QPaintEvent* ); private: double mLatitude; double mLongitude; }; #endif diff --git a/kaddressbook/imagewidget.cpp b/kaddressbook/imagewidget.cpp index eec5e08..6ecf66d 100644 --- a/kaddressbook/imagewidget.cpp +++ b/kaddressbook/imagewidget.cpp @@ -1,297 +1,301 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kabc/picture.h> #ifndef KAB_EMBEDDED #include <kaccelmanager.h> #include <kio/netaccess.h> #include <kimageio.h> #endif //KAB_EMBEDDED #include <kdebug.h> #include <kdialog.h> #include <kiconloader.h> #include <klocale.h> #include <kurlrequester.h> #include <kurl.h> #include <qcheckbox.h> -#include <qgroupbox.h> +#include <q3groupbox.h> #include <qlabel.h> #include <qlayout.h> #include <qpixmap.h> #include <qpushbutton.h> #include <qapplication.h> +#include <QDesktopWidget> +//Added by qt3to4: +#include <Q3GridLayout> +#include <Q3Frame> #include "imagewidget.h" ImageWidget::ImageWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { - QGridLayout *topLayout = new QGridLayout( this, 2, 1, KDialog::marginHint(), + Q3GridLayout *topLayout = new Q3GridLayout( this, 2, 1, KDialog::marginHint(), KDialog::spacingHint() ); - QGroupBox *photoBox = new QGroupBox( 0, Qt::Vertical, i18n( "Photo" ), this ); - QGridLayout *boxLayout = new QGridLayout( photoBox->layout(), 3, 2, + Q3GroupBox *photoBox = new Q3GroupBox( 0, Qt::Vertical, i18n( "Photo" ), this ); + Q3GridLayout *boxLayout = new Q3GridLayout( photoBox->layout(), 3, 2, KDialog::spacingHint() ); boxLayout->setRowStretch( 2, 1 ); mPhotoLabel = new QLabel( photoBox ); int fac = 9; if ( QApplication::desktop()->width() > 320 ) fac = 6; mPhotoLabel->setFixedSize( 50*9/fac, 70*9/fac ); mPhotoLabel->setScaledContents( true ); - mPhotoLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + mPhotoLabel->setFrameStyle( Q3Frame::Panel | Q3Frame::Sunken ); boxLayout->addMultiCellWidget( mPhotoLabel, 0, 3, 0, 0 ); mPhotoUrl = new KURLRequester( photoBox ); #ifndef KAB_EMBEDDED mPhotoUrl->setFilter( KImageIO::pattern() ); #else //KAB_EMBEDDED //US qDebug("ImageWidget::ImageWidget KImageIO not defined. Does this harm ???"); #endif //KAB_EMBEDDED boxLayout->addWidget( mPhotoUrl, 0, 1 ); - QHBox *hb1 = new QHBox ( photoBox ); + Q3HBox *hb1 = new Q3HBox ( photoBox ); mUsePhotoUrl = new QCheckBox( i18n( "Store as URL" ), hb1 ); mUsePhotoUrl->setEnabled( false ); boxLayout->addWidget( hb1, 1, 1 ); QPushButton * pb = new QPushButton( i18n( "Remove" ), hb1 ); connect( pb, SIGNAL( clicked() ),this, SLOT( removePhoto() ) ); boxLayout->addWidget( new QLabel( photoBox ), 2, 1 ); topLayout->addWidget( photoBox, 0, 0 ); - QGroupBox *logoBox = new QGroupBox( 0, Qt::Vertical, i18n( "Logo" ), this ); - boxLayout = new QGridLayout( logoBox->layout(), 3, 2, KDialog::spacingHint() ); + Q3GroupBox *logoBox = new Q3GroupBox( 0, Qt::Vertical, i18n( "Logo" ), this ); + boxLayout = new Q3GridLayout( logoBox->layout(), 3, 2, KDialog::spacingHint() ); boxLayout->setRowStretch( 2, 1 ); mLogoLabel = new QLabel( logoBox ); mLogoLabel->setFixedSize( 50*9/fac, 70*9/fac ); mLogoLabel->setScaledContents( true ); - mLogoLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + mLogoLabel->setFrameStyle( Q3Frame::Panel | Q3Frame::Sunken ); boxLayout->addMultiCellWidget( mLogoLabel, 0, 3, 0, 0 ); mLogoUrl = new KURLRequester( logoBox ); #ifndef KAB_EMBEDDED mLogoUrl->setFilter( KImageIO::pattern() ); #else //KAB_EMBEDDED //US qDebug("ImageWidget::ImageWidget KImageIO not defined 2"); #endif //KAB_EMBEDDED boxLayout->addWidget( mLogoUrl, 0, 1 ); - QHBox *hb2 = new QHBox ( logoBox ); + Q3HBox *hb2 = new Q3HBox ( logoBox ); mUseLogoUrl = new QCheckBox( i18n( "Store as URL" ), hb2 ); mUseLogoUrl->setEnabled( false ); boxLayout->addWidget( hb2, 1, 1 ); pb = new QPushButton( i18n( "Remove" ), hb2 ); connect( pb, SIGNAL( clicked() ),this, SLOT( removeLogo() ) ); boxLayout->addWidget( new QLabel( logoBox ), 2, 1 ); topLayout->addWidget( logoBox, 1, 0 ); connect( mPhotoUrl, SIGNAL( textChanged( const QString& ) ), SIGNAL( changed() ) ); connect( mPhotoUrl, SIGNAL( urlSelected( const QString& ) ), SLOT( loadPhoto() ) ); connect( mPhotoUrl, SIGNAL( urlSelected( const QString& ) ), SIGNAL( changed() ) ); connect( mPhotoUrl, SIGNAL( urlSelected( const QString& ) ), SLOT( updateGUI() ) ); connect( mUsePhotoUrl, SIGNAL( toggled( bool ) ), SIGNAL( changed() ) ); connect( mLogoUrl, SIGNAL( textChanged( const QString& ) ), SIGNAL( changed() ) ); connect( mLogoUrl, SIGNAL( urlSelected( const QString& ) ), SLOT( loadLogo() ) ); connect( mLogoUrl, SIGNAL( urlSelected( const QString& ) ), SIGNAL( changed() ) ); connect( mLogoUrl, SIGNAL( urlSelected( const QString& ) ), SLOT( updateGUI() ) ); connect( mUseLogoUrl, SIGNAL( toggled( bool ) ), SIGNAL( changed() ) ); #ifndef KAB_EMBEDDED KAcceleratorManager::manage( this ); #endif //KAB_EMBEDDED } ImageWidget::~ImageWidget() { } void ImageWidget::setPhoto( const KABC::Picture &photo ) { bool blocked = signalsBlocked(); blockSignals( true ); if ( photo.isIntern() ) { //US //US mPhotoLabel->setPixmap( photo.data() ); if (photo.data().isNull() != true) { QPixmap pm; pm.convertFromImage(photo.data()); mPhotoLabel->setPixmap( pm ); } mUsePhotoUrl->setChecked( false ); } else { mPhotoUrl->setURL( photo.url() ); if ( !photo.url().isEmpty() ) mUsePhotoUrl->setChecked( true ); loadPhoto(); } blockSignals( blocked ); } KABC::Picture ImageWidget::photo() const { KABC::Picture photo; if ( mUsePhotoUrl->isChecked() ) photo.setUrl( mPhotoUrl->url() ); else { - QPixmap *px = mPhotoLabel->pixmap(); + const QPixmap *px = mPhotoLabel->pixmap(); if ( px ) { #ifndef KAB_EMBEDDED if ( px->height() > px->width() ) photo.setData( px->convertToImage().scaleHeight( 140 ) ); else photo.setData( px->convertToImage().scaleWidth( 100 ) ); #else //KAB_EMBEDDED //US add teh nullcheck if (px->isNull() != true ) photo.setData( px->convertToImage() ); #endif //KAB_EMBEDDED photo.setType( "PNG" ); } } return photo; } void ImageWidget::setLogo( const KABC::Picture &logo ) { bool blocked = signalsBlocked(); blockSignals( true ); if ( logo.isIntern() ) { //US //US mLogoLabel->setPixmap( logo.data() ); if (logo.data().isNull() != true) { QPixmap pm; pm.convertFromImage(logo.data()); mLogoLabel->setPixmap( pm ); } mUseLogoUrl->setChecked( false ); } else { mLogoUrl->setURL( logo.url() ); if ( !logo.url().isEmpty() ) mUseLogoUrl->setChecked( true ); loadLogo(); } blockSignals( blocked ); } KABC::Picture ImageWidget::logo() const { KABC::Picture logo; if ( mUseLogoUrl->isChecked() ) logo.setUrl( mLogoUrl->url() ); else { - QPixmap *px = mLogoLabel->pixmap(); + const QPixmap *px = mLogoLabel->pixmap(); if ( px ) { #ifndef KAB_EMBEDDED if ( px->height() > px->width() ) logo.setData( px->convertToImage().scaleHeight( 140 ) ); else logo.setData( px->convertToImage().scaleWidth( 100 ) ); #else //KAB_EMBEDDED if (px->isNull() != true ) logo.setData( px->convertToImage() ); #endif //KAB_EMBEDDED logo.setType( "PNG" ); } } return logo; } void ImageWidget::removePhoto() { setPhoto(KABC::Picture() ); } void ImageWidget::removeLogo() { setLogo(KABC::Picture() ); } void ImageWidget::loadPhoto() { mPhotoLabel->setPixmap( loadPixmap( mPhotoUrl->url() ) ); } void ImageWidget::loadLogo() { mLogoLabel->setPixmap( loadPixmap( mLogoUrl->url() ) ); } void ImageWidget::updateGUI() { KURLRequester *ptr = (KURLRequester*)sender(); if ( ptr == mPhotoUrl ) mUsePhotoUrl->setEnabled( true ); else if ( ptr == mLogoUrl ) mUseLogoUrl->setEnabled( true ); } QPixmap ImageWidget::loadPixmap( const QString &url ) { QPixmap pixmap; if ( url.isEmpty() ) return pixmap; pixmap.load( url ); return pixmap; } -#ifndef KAB_EMBEDDED -#include "imagewidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_imagewidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/imagewidget.h b/kaddressbook/imagewidget.h index bbfba58..9320a6b 100644 --- a/kaddressbook/imagewidget.h +++ b/kaddressbook/imagewidget.h @@ -1,88 +1,91 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef IMAGEWIDGET_H #define IMAGEWIDGET_H #include <qwidget.h> +//Added by qt3to4: +#include <QPixmap> +#include <QLabel> #include <kabc/picture.h> #include <kdialogbase.h> class KURL; class KURLRequester; class QCheckBox; class QLabel; class ImageWidget : public QWidget { Q_OBJECT public: ImageWidget( QWidget *parent, const char *name = 0 ); ~ImageWidget(); /** Sets the photo object. */ void setPhoto( const KABC::Picture &photo ); /** Returns a photo object. */ KABC::Picture photo() const; /** Sets the logo object. */ void setLogo( const KABC::Picture &photo ); /** Returns a logo object. */ KABC::Picture logo() const; signals: void changed(); private slots: void loadPhoto(); void loadLogo(); void removePhoto(); void removeLogo(); void updateGUI(); private: QPixmap loadPixmap( const QString &url ); KURLRequester *mPhotoUrl; KURLRequester *mLogoUrl; QCheckBox *mUsePhotoUrl; QCheckBox *mUseLogoUrl; QLabel *mPhotoLabel; QLabel *mLogoLabel; }; #endif diff --git a/kaddressbook/incsearchwidget.cpp b/kaddressbook/incsearchwidget.cpp index 5f8b83d..a54d1cd 100644 --- a/kaddressbook/incsearchwidget.cpp +++ b/kaddressbook/incsearchwidget.cpp @@ -1,181 +1,185 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlabel.h> #include <qlayout.h> #include <qtooltip.h> #include <qapplication.h> +#include <QDesktopWidget> #include <qcombobox.h> +//Added by qt3to4: +#include <Q3HBoxLayout> #include <kdialog.h> #include <klineedit.h> #include <klocale.h> #include <kglobal.h> #include <kglobal.h> #include "kabprefs.h" #include "incsearchwidget.h" IncSearchWidget::IncSearchWidget( QWidget *parent, const char *name ) - : QWidget( parent, name ) { + setObjectName(name); + setParent(parent); #ifndef KAB_EMBEDDED //US setCaption( i18n( "Incremental Search" ) ); #endif //KAB_EMBEDDED - QHBoxLayout *layout = new QHBoxLayout( this, 2, KDialog::spacingHint() ); + Q3HBoxLayout *layout = new Q3HBoxLayout( this, 2, KDialog::spacingHint() ); #ifdef DESKTOP_VERSION QLabel *label = new QLabel( i18n( "Search:" ), this ); - label->setAlignment( QLabel::AlignVCenter | QLabel::AlignRight ); + label->setAlignment( Qt::AlignVCenter | Qt::AlignRight ); layout->addWidget( label ); #endif //KAB_EMBEDDED mSearchText = new KLineEdit( this ); layout->addWidget( mSearchText ); // #ifdef KAB_EMBEDDED // if (KGlobal::getOrientation() == KGlobal::Portrait) // mSearchText->setMaximumWidth(30); // #endif //KAB_EMBEDDED //mSearchText->setMaximumWidth(60); mFieldCombo = new QComboBox( false, this ); layout->addWidget( mFieldCombo ); mFieldCombo->setMaximumHeight( 34 ); QToolTip::add( mFieldCombo, i18n( "Select Incremental Search Field" ) ); // #ifndef KAB_EMBEDDED // resize( QSize(420, 50).expandedTo( sizeHint() ) ); // #else //KAB_EMBEDDED // resize( QSize(30, 10).expandedTo( sizeHint() ) ); // #endif //KAB_EMBEDDED // for performance reasons, we do a search on the pda only after return is pressed connect( mSearchText, SIGNAL( textChanged( const QString& ) ), SLOT( announceDoSearch2() ) ); connect( mFieldCombo, SIGNAL( activated( const QString& ) ), SLOT( announceDoSearch2() ) ); connect( mSearchText, SIGNAL( returnPressed() ), SLOT( announceDoSearch() ) ); connect( mFieldCombo, SIGNAL( activated( const QString& ) ), SLOT( announceFieldChanged() ) ); connect( mSearchText, SIGNAL( scrollUP() ), this, SIGNAL( scrollUP() )); connect( mSearchText, SIGNAL( scrollDOWN() ), this, SIGNAL( scrollDOWN() )); setFocusProxy( mSearchText ); } IncSearchWidget::~IncSearchWidget() { } void IncSearchWidget::announceDoSearch2() { if ( KABPrefs::instance()->mSearchWithReturn ) return; emit doSearch( mSearchText->text() ); //qDebug("emit dosreach "); } void IncSearchWidget::announceDoSearch() { emit doSearch( mSearchText->text() ); // qDebug("emit dosreach "); } void IncSearchWidget::announceFieldChanged() { emit fieldChanged(); } void IncSearchWidget::setSize() { if ( KABPrefs::instance()->mHideSearchOnSwitch && QApplication::desktop()->width() == 480) { setCurrentItem( 0 ); //mFieldCombo->setMaximumWidth( 0 ); mFieldCombo->hide(); mSearchText->setMaximumWidth( 200 ); } else { mFieldCombo->show(); QFontMetrics fm ( mFieldCombo->font() ); int wid = fm.width(i18n( "All Fields" ) ); #ifdef DESKTOP_VERSION mFieldCombo->setMinimumWidth( wid+60 ); wid = wid * 2; #endif mFieldCombo->setMaximumWidth( wid+60 ); mSearchText->setMaximumWidth( 1024 ); } } void IncSearchWidget::setFields( const KABC::Field::List &list ) { mFieldCombo->clear(); mFieldCombo->insertItem( i18n( "All Fields" ) ); KABC::Field::List::ConstIterator it; for ( it = list.begin(); it != list.end(); ++it ) { mFieldCombo->insertItem( (*it)->label() ); } mFieldList = list; announceDoSearch(); announceFieldChanged(); setSize(); } KABC::Field::List IncSearchWidget::fields() const { return mFieldList; } KABC::Field *IncSearchWidget::currentField()const { if ( mFieldCombo->currentItem() == -1 || mFieldCombo->currentItem() == 0 ) return 0; // for error or 'use all fields' else return mFieldList[ mFieldCombo->currentItem() - 1 ]; } void IncSearchWidget::setCurrentItem( int pos ) { mFieldCombo->setCurrentItem( pos ); announceFieldChanged(); } int IncSearchWidget::currentItem() const { return mFieldCombo->currentItem(); } -#ifndef KAB_EMBEDDED -#include "incsearchwidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_incsearchwidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/jumpbuttonbar.cpp b/kaddressbook/jumpbuttonbar.cpp index aebf8a6..740b7db 100644 --- a/kaddressbook/jumpbuttonbar.cpp +++ b/kaddressbook/jumpbuttonbar.cpp @@ -1,257 +1,260 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qevent.h> #include <qlayout.h> #include <qpushbutton.h> #include <qstring.h> -#include <qtl.h> +#include <q3tl.h> #include <qapplication.h> +#include <QDesktopWidget> +//Added by qt3to4: +#include <Q3GridLayout> #include <kabc/addressbook.h> #include <kabc/field.h> #include <kdebug.h> #include <klocale.h> #include "kabcore.h" #include "jumpbuttonbar.h" class JumpButton : public QPushButton { public: JumpButton( const QString &text, QWidget *parent, const QString &character ); void setCharacter( const QString &character ); QString character() const; private: QString mCharacter; }; JumpButton::JumpButton( const QString &text, QWidget *parent, const QString &character ) : QPushButton( text, parent ) { mCharacter = character; } void JumpButton::setCharacter( const QString &character ) { mCharacter = character; setText(mCharacter.upper() ); } QString JumpButton::character() const { return mCharacter; } JumpButtonBar::JumpButtonBar( KABCore *core, QWidget *parent, const char *name ) : QWidget( parent, name ), mCore( core ) { if ( QApplication::desktop()->width() < 480 ) - mButtonLayout = new QGridLayout( this, 1, 18 ); + mButtonLayout = new Q3GridLayout( this, 1, 18 ); else - mButtonLayout = new QGridLayout( this, 1, 20 ); + mButtonLayout = new Q3GridLayout( this, 1, 20 ); mButtonLayout->setAlignment( Qt::AlignTop ); recreateButtons(); } JumpButtonBar::~JumpButtonBar() { } QSizePolicy JumpButtonBar::sizePolicy() const { #ifndef KAB_EMBEDDED return QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum, QSizePolicy::Vertically ); #else //KAB_EMBEDDED return QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum); #endif //KAB_EMBEDDED } void JumpButtonBar::letterClicked() { JumpButton *button = (JumpButton*)sender(); QString character = button->character(); if ( character.length() == 2 ) character = character.left(1) +"-"+character.right(1); if ( !character.isNull() ) emit jumpToLetter( character ); //qDebug("emit *%s* ",character.latin1()); } void JumpButtonBar::recreateButtons() { // the easiest way to remove all buttons ;) //mButtons.setAutoDelete( true ); //mButtons.clear(); //mButtons.setAutoDelete( false ); mCharacters.clear(); QString character; KABC::AddressBook *ab = mCore->addressBook(); KABC::AddressBook::Iterator it; KABC::Field *field = mCore->currentSearchField(); if ( field ) { setEnabled( true ); } else { setEnabled( false ); return; } mCharacters.append( "*"); for ( it = ab->begin(); it != ab->end(); ++it ) { if ( !field->value( *it ).isEmpty() ) character = field->value( *it )[ 0 ].lower(); if ( character != "!" ) { if ( !character.isEmpty() && !mCharacters.contains( character ) && character.at( 0 ).isLetter ()) mCharacters.append( character ); } } if ( mCharacters.count() == 0 ) { setEnabled( false ); return; } int maxRows = mCharacters.count() / 2; // we use 2 columns if ( mCharacters.count() % 2 ) maxRows++; sortListLocaleAware( mCharacters ); bool skip2 = false; int skipcount = 0; int maxHei = 0; #ifdef DESKTOP_VERSION int maxChar = 16; int heightDiff = 200; int fixwid = 36; #else //default for 240x320 diaplay: int maxChar = 16; int heightDiff = 64; int fixwid = 20; if ( QApplication::desktop()->height() == 480 ) { maxChar = 16; heightDiff = 135; fixwid = 34; } else if ( QApplication::desktop()->height() >= 640 ) { maxChar = 20; heightDiff = 135; fixwid = 34; } #endif if ( mCharacters.count() > maxChar ) skipcount = mCharacters.count()- maxChar; maxHei = (QApplication::desktop()->height()-heightDiff)/(maxChar); maxRows = 28; bool skipcurrent = false; bool state = isUpdatesEnabled(); setUpdatesEnabled( false ); //qDebug("cc %d ",mCharacters.count() ); JumpButton *button = 0; int row = 0, col = 0; JumpButton* cur = mButtons.first(); for ( uint i = 0; i < mCharacters.count(); ++i ) { if ( skipcount > 0 && skipcurrent ) { --skipcount; if ( button ) { button->setCharacter( button->character() + mCharacters[ i ]); } } else { if ( cur ) { button = cur ; cur = mButtons.next(); button->setCharacter(mCharacters[ i ]); } else { button = new JumpButton( mCharacters[ i ].upper(), this, mCharacters[ i ] ); if ( fixwid ) button->setFixedWidth( fixwid ); mButtons.append( button ); connect( button, SIGNAL( clicked() ), this, SLOT( letterClicked() ) ); mButtonLayout->addWidget( button, row, col ); } if ( maxHei ) button->setMaximumHeight( maxHei ); button->show(); if ( col == maxRows ) { row = 0; col++; } else row++; } if ( i > 0 ) skipcurrent = !skipcurrent; } while ( cur ) { cur->hide(); cur = mButtons.next(); } mButtonLayout->activate(); setUpdatesEnabled( state ); update(); } void JumpButtonBar::sortListLocaleAware( QStringList &list ) { QStringList::Iterator beginIt = list.begin(); QStringList::Iterator endIt = list.end(); --endIt; if ( beginIt == endIt ) // don't need sorting return; QStringList::Iterator walkBackIt = endIt; while ( beginIt != endIt ) { QStringList::Iterator j1 = list.begin(); QStringList::Iterator j2 = j1; ++j2; while ( j1 != walkBackIt ) { #ifndef KAB_EMBEDDED if ( QString::localeAwareCompare( *j2, *j1 ) < 0 ) #else //KAB_EMBEDDED if ( QString::compare( *j2, *j1 ) < 0 ) #endif //KAB_EMBEDDED qSwap( *j1, *j2 ); ++j1; ++j2; } ++beginIt; --walkBackIt; } } -#ifndef KAB_EMBEDDED -#include "jumpbuttonbar.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_jumpbuttonbar.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/jumpbuttonbar.h b/kaddressbook/jumpbuttonbar.h index d534f2b..0589812 100644 --- a/kaddressbook/jumpbuttonbar.h +++ b/kaddressbook/jumpbuttonbar.h @@ -1,84 +1,87 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef JUMPBUTTONBAR_H #define JUMPBUTTONBAR_H #include <qsizepolicy.h> #include <qwidget.h> -#include <qptrlist.h> +#include <q3ptrlist.h> #include <qstringlist.h> +//Added by qt3to4: +#include <QResizeEvent> +#include <Q3GridLayout> class QChar; -class QGridLayout; +class Q3GridLayout; class QResizeEvent; class QPushButton; class JumpButton; namespace KABC { class Field; } class KABCore; /** Used to draw the jump button bar on the right of the view. */ class JumpButtonBar : public QWidget { Q_OBJECT public: JumpButtonBar( KABCore *core, QWidget *parent, const char *name = 0 ); ~JumpButtonBar(); QSizePolicy sizePolicy() const; public slots: /** This method removes all buttons from the GUI and recreates them according to the current global search field and the content of the address book. */ void recreateButtons(); signals: /** Emitted whenever a letter is selected by the user. */ void jumpToLetter( const QString &character ); protected slots: void letterClicked(); private: void sortListLocaleAware( QStringList &list ); KABCore *mCore; - QGridLayout *mButtonLayout; + Q3GridLayout *mButtonLayout; QStringList mCharacters; - QPtrList<JumpButton> mButtons; + Q3PtrList<JumpButton> mButtons; }; #endif diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp index ab2824c..03b44d1 100644 --- a/kaddressbook/kabcore.cpp +++ b/kaddressbook/kabcore.cpp @@ -1,3586 +1,3596 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Async a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /*s Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include "kabcore.h" #include <stdaddressbook.h> #include <klocale.h> #include <kfiledialog.h> #include <qtimer.h> #include <qlabel.h> #include <qregexp.h> #include <qlineedit.h> #include <qcheckbox.h> #include <qpushbutton.h> -#include <qprogressbar.h> +#include <q3progressbar.h> +#include <QDesktopWidget> +//Added by qt3to4: +#include <QResizeEvent> +#include <QPixmap> +#include <Q3ValueList> +#include <Q3HBoxLayout> +#include <Q3VBoxLayout> +#include <Q3CString> +#include <Q3PopupMenu> +#include <Q3PtrList> #include <libkdepim/phoneaccess.h> #ifndef KAB_EMBEDDED #include <qclipboard.h> #include <qdir.h> #include <qfile.h> #include <qapplicaton.h> -#include <qprogressbar.h> +#include <q3progressbar.h> #include <qlayout.h> #include <qregexp.h> -#include <qvbox.h> +#include <q3vbox.h> #include <kabc/addresseelist.h> #include <kabc/errorhandler.h> #include <kabc/resource.h> #include <kabc/vcardconverter.h> #include <kapplication.h> #include <kactionclasses.h> #include <kcmultidialog.h> #include <kdebug.h> #include <kdeversion.h> #include <kkeydialog.h> #include <kmessagebox.h> #include <kprinter.h> #include <kprotocolinfo.h> #include <kresources/selectdialog.h> #include <kstandarddirs.h> #include <ktempfile.h> #include <kxmlguiclient.h> #include <kaboutdata.h> #include <libkdepim/categoryselectdialog.h> #include "addresseeutil.h" #include "addresseeeditordialog.h" #include "extensionmanager.h" #include "kstdaction.h" #include "kaddressbookservice.h" #include "ldapsearchdialog.h" #include "printing/printingwizard.h" #else // KAB_EMBEDDED #include <kapplication.h> #include "KDGanttMinimizeSplitter.h" #include "kaddressbookmain.h" #include "kactioncollection.h" #include "addresseedialog.h" //US #include <addresseeview.h> -#include <qapp.h> +#include <qapplication.h> #include <qmenubar.h> //#include <qtoolbar.h> #include <qmessagebox.h> #include <kdebug.h> #include <kiconloader.h> // needed for SmallIcon #include <kresources/kcmkresources.h> #include <ktoolbar.h> #include <kprefsdialog.h> //#include <qlabel.h> #ifndef DESKTOP_VERSION #include <qpe/ir.h> #include <qpe/qpemenubar.h> #include <qtopia/qcopenvelope_qws.h> #else #include <qmenubar.h> #endif #endif // KAB_EMBEDDED #include "kcmconfigs/kcmkabconfig.h" #include "kcmconfigs/kcmkdepimconfig.h" #include "kpimglobalprefs.h" #include "externalapphandler.h" #include "xxportselectdialog.h" #include <kresources/selectdialog.h> #include <kmessagebox.h> #include <picture.h> #include <resource.h> //US#include <qsplitter.h> #include <qmap.h> #include <qdir.h> #include <qfile.h> -#include <qvbox.h> +#include <q3vbox.h> #include <qlayout.h> #include <qclipboard.h> -#include <qtextstream.h> +#include <q3textstream.h> #include <qradiobutton.h> -#include <qbuttongroup.h> +#include <q3buttongroup.h> #include <libkdepim/categoryselectdialog.h> #include <libkdepim/categoryeditdialog.h> #include <kabc/vcardconverter.h> #include "addresseeutil.h" #include "undocmds.h" #include "addresseeeditordialog.h" #include "viewmanager.h" #include "details/detailsviewcontainer.h" #include "kabprefs.h" #include "xxportmanager.h" #include "incsearchwidget.h" #include "jumpbuttonbar.h" #include "extensionmanager.h" #include "addresseeconfig.h" #include "nameeditdialog.h" #include <kcmultidialog.h> #ifdef _WIN32_ #ifdef _OL_IMPORT_ #include "kaimportoldialog.h" #include <libkdepim/ol_access.h> #endif #else #include <unistd.h> #endif // sync includes #include <libkdepim/ksyncprofile.h> #include <libkdepim/ksyncprefsdialog.h> class KABCatPrefs : public QDialog { public: KABCatPrefs( QWidget *parent=0, const char *name=0 ) : QDialog( parent, name, true ) { setCaption( i18n("Manage new Categories") ); - QVBoxLayout* lay = new QVBoxLayout( this ); + Q3VBoxLayout* lay = new Q3VBoxLayout( this ); lay->setSpacing( 3 ); lay->setMargin( 3 ); QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\naddressees\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); lay->addWidget( lab ); - QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); + Q3ButtonGroup* format = new Q3ButtonGroup( 1, Qt::Horizontal, i18n("New categories not in list:"), this ); lay->addWidget( format ); format->setExclusive ( true ) ; addCatBut = new QRadioButton(i18n("Add to category list"), format ); new QRadioButton(i18n("Remove from addressees"), format ); addCatBut->setChecked( true ); QPushButton * ok = new QPushButton( i18n("OK"), this ); lay->addWidget( ok ); QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); lay->addWidget( cancel ); connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); resize( 200, 200 ); } bool addCat() { return addCatBut->isChecked(); } private: QRadioButton* addCatBut; }; class KABFormatPrefs : public QDialog { public: KABFormatPrefs( QWidget *parent=0, const char *name=0 ) : QDialog( parent, name, true ) { setCaption( i18n("Set formatted name") ); - QVBoxLayout* lay = new QVBoxLayout( this ); + Q3VBoxLayout* lay = new Q3VBoxLayout( this ); lay->setSpacing( 3 ); lay->setMargin( 3 ); QLabel * lab = new QLabel( i18n("You can set the formatted name\nfor a list of contacts in one go."), this ); lay->addWidget( lab ); - QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("Set formatted name to:"), this ); + Q3ButtonGroup* format = new Q3ButtonGroup( 1, Qt::Horizontal, i18n("Set formatted name to:"), this ); lay->addWidget( format ); format->setExclusive ( true ) ; simple = new QRadioButton(i18n("Simple: James Bond"), format ); full = new QRadioButton(i18n("Full: Mr. James 007 Bond I"), format ); reverse = new QRadioButton(i18n("Reverse: Bond, James"), format ); company = new QRadioButton(i18n("Organization: MI6"), format ); simple->setChecked( true ); setCompany = new QCheckBox(i18n("Set formatted name to\norganization, if name empty"), this); lay->addWidget( setCompany ); QPushButton * ok = new QPushButton( i18n("Select contact list"), this ); lay->addWidget( ok ); QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); lay->addWidget( cancel ); connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); //resize( 200, 200 ); } public: QRadioButton* simple, *full, *reverse, *company; QCheckBox* setCompany; }; class KAex2phonePrefs : public QDialog { public: KAex2phonePrefs( QWidget *parent=0, const char *name=0 ) : QDialog( parent, name, true ) { setCaption( i18n("Export to phone options") ); - QVBoxLayout* lay = new QVBoxLayout( this ); + Q3VBoxLayout* lay = new Q3VBoxLayout( this ); lay->setSpacing( 3 ); lay->setMargin( 3 ); QLabel *lab; lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); - lab->setAlignment (AlignHCenter ); - QHBox* temphb; - temphb = new QHBox( this ); + lab->setAlignment (Qt::AlignHCenter ); + Q3HBox* temphb; + temphb = new Q3HBox( this ); new QLabel( i18n("I/O device: "), temphb ); mPhoneDevice = new QLineEdit( temphb); lay->addWidget( temphb ); - temphb = new QHBox( this ); + temphb = new Q3HBox( this ); new QLabel( i18n("Connection: "), temphb ); mPhoneConnection = new QLineEdit( temphb); lay->addWidget( temphb ); - temphb = new QHBox( this ); + temphb = new Q3HBox( this ); new QLabel( i18n("Model(opt.): "), temphb ); mPhoneModel = new QLineEdit( temphb); lay->addWidget( temphb ); // mWriteToSim = new QCheckBox( i18n("Write Contacts to SIM card\n(if not, write to phone memory)"), this ); // lay->addWidget( mWriteToSim ); lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ncontact data on phone!"), this ) ); - lab->setAlignment (AlignHCenter); + lab->setAlignment (Qt::AlignHCenter); QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); lay->addWidget( ok ); QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); lay->addWidget( cancel ); connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); resize( 220, 240 ); } public: QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; QCheckBox* mWriteToSim; }; bool pasteWithNewUid = true; #ifdef KAB_EMBEDDED KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ), mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ mReadWrite( readWrite ), mModified( false ), mMainWindow(client) #else //KAB_EMBEDDED KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ), mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), mReadWrite( readWrite ), mModified( false ) #endif //KAB_EMBEDDED { // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu); // syncManager->setBlockSave(false); mIncSearchWidget = 0; mMiniSplitter = 0; mExtensionBarSplitter = 0; mIsPart = !parent->inherits( "KAddressBookMain" ); mAddressBook = KABC::StdAddressBook::selfNoLoad(); KABC::StdAddressBook::setAutomaticSave( false ); #ifndef KAB_EMBEDDED mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); #endif //KAB_EMBEDDED connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), SLOT( addressBookChanged() ) ); #if 0 // LR moved to addressbook init method mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, "X-Department", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, "X-Profession", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, "X-AssistantsName", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, "X-ManagersName", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, "X-SpousesName", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, "X-Office", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, "X-IMAddress", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, "X-Anniversary", "KADDRESSBOOK" ); //US added this field to become compatible with Opie/qtopia addressbook // values can be "female" or "male" or "". An empty field represents undefined. mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, "X-Gender", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, "X-Children", "KADDRESSBOOK" ); mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, "X-FreeBusyUrl", "KADDRESSBOOK" ); #endif initGUI(); mIncSearchWidget->setFocus(); connect( mViewManager, SIGNAL( selected( const QString& ) ), SLOT( setContactSelected( const QString& ) ) ); connect( mViewManager, SIGNAL( executed( const QString& ) ), SLOT( executeContact( const QString& ) ) ); connect( mViewManager, SIGNAL( deleteRequest( ) ), SLOT( deleteContacts( ) ) ); connect( mViewManager, SIGNAL( modified() ), SLOT( setModified() ) ); connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); connect( mXXPortManager, SIGNAL( modified() ), SLOT( setModified() ) ); connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), SLOT( incrementalSearchJump( const QString& ) ) ); connect( mIncSearchWidget, SIGNAL( fieldChanged() ), mJumpButtonBar, SLOT( recreateButtons() ) ); connect( mDetails, SIGNAL( sendEmail( const QString& ) ), SLOT( sendMail( const QString& ) ) ); connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); connect( ExternalAppHandler::instance(), SIGNAL (requestForBirthdayList(const QString&, const QString&)),this, SLOT(requestForBirthdayList(const QString&, const QString&))); connect( ExternalAppHandler::instance(), SIGNAL (nextView()),this, SLOT(setDetailsToggle())); connect( ExternalAppHandler::instance(), SIGNAL (doRingSync()),this, SLOT( doRingSync())); connect( ExternalAppHandler::instance(), SIGNAL (callContactdialog()),this, SLOT(callContactdialog())); #ifndef KAB_EMBEDDED connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), mXXPortManager, SLOT( importVCard( const KURL& ) ) ); connect( mDetails, SIGNAL( browse( const QString& ) ), SLOT( browse( const QString& ) ) ); mAddressBookService = new KAddressBookService( this ); #endif //KAB_EMBEDDED mMessageTimer = new QTimer( this ); connect( mMessageTimer, SIGNAL( timeout() ), this, SLOT( setCaptionBack() ) ); mEditorDialog = 0; createAddresseeEditorDialog( this ); setModified( false ); mBRdisabled = false; #ifndef DESKTOP_VERSION infrared = 0; #endif //toggleBeamReceive( ); mMainWindow->toolBar()->show(); // we have a toolbar repainting error on the Zaurus when starting KA/Pi //QTimer::singleShot( 10, this , SLOT ( updateToolBar())); QTimer::singleShot( 100, this, SLOT ( loadDataAfterStart() )); } -void KABCore::receiveStart( const QCString& cmsg, const QByteArray& data ) +void KABCore::receiveStart( const Q3CString& cmsg, const QByteArray& data ) { //qDebug("KO: QCOP start message received: %s ", cmsg.data() ); mCStringMess = cmsg; mByteData = data; } void KABCore::loadDataAfterStart() { //qDebug("KABCore::loadDataAfterStart() "); ((StdAddressBook*)mAddressBook)->init( true ); mViewManager->refreshView(); #ifndef DESKTOP_VERSION - disconnect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), this, SLOT (receiveStart ( const QCString &, const QByteArray & ))); + disconnect(qApp, SIGNAL (appMessage ( const Q3CString &, const QByteArray & )), this, SLOT (receiveStart ( const Q3CString &, const QByteArray & ))); - QObject::connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & ))); + QObject::connect(qApp, SIGNAL (appMessage ( const Q3CString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const Q3CString &, const QByteArray & ))); if ( !mCStringMess.isEmpty() ) ExternalAppHandler::instance()->appMessage( mCStringMess, mByteData ); #endif // QTimer::singleShot( 10, this , SLOT ( updateToolBar())); setCaptionBack(); } void KABCore::updateToolBar() { static int iii = 0; ++iii; mMainWindow->toolBar()->repaintMe(); if ( iii < 4 ) QTimer::singleShot( 100*iii, this , SLOT ( updateToolBar())); } KABCore::~KABCore() { // save(); //saveSettings(); //KABPrefs::instance()->writeConfig(); delete AddresseeConfig::instance(); mAddressBook = 0; KABC::StdAddressBook::close(); delete syncManager; #ifndef DESKTOP_VERSION if ( infrared ) delete infrared; #endif } -void KABCore::receive( const QCString& cmsg, const QByteArray& data ) +void KABCore::receive( const Q3CString& cmsg, const QByteArray& data ) { //qDebug("KA: QCOP message received: %s ", cmsg.data() ); if ( cmsg == "setDocument(QString)" ) { - QDataStream stream( data, IO_ReadOnly ); + QDataStream stream( const_cast<QByteArray*>(&data), QIODevice::ReadOnly ); QString fileName; stream >> fileName; recieve( fileName ); return; } } void KABCore::toggleBeamReceive( ) { if ( mBRdisabled ) return; #ifndef DESKTOP_VERSION if ( infrared ) { qDebug("KA: AB disable BeamReceive "); delete infrared; infrared = 0; mActionBR->setChecked(false); return; } qDebug("KA: AB enable BeamReceive "); mActionBR->setChecked(true); infrared = new QCopChannel("QPE/Application/addressbook",this, "channelAB" ) ; - QObject::connect( infrared, SIGNAL (received ( const QCString &, const QByteArray & )),this, SLOT(receive( const QCString&, const QByteArray& ))); + QObject::connect( infrared, SIGNAL (received ( const Q3CString &, const QByteArray & )),this, SLOT(receive( const Q3CString&, const QByteArray& ))); #endif } void KABCore::disableBR(bool b) { #ifndef DESKTOP_VERSION if ( b ) { if ( infrared ) { toggleBeamReceive( ); } mBRdisabled = true; } else { if ( mBRdisabled ) { mBRdisabled = false; //toggleBeamReceive( ); } } #endif } void KABCore::recieve( QString fn ) { //qDebug("KABCore::recieve "); int count = mAddressBook->importFromFile( fn, true ); if ( count ) setModified( true ); mViewManager->refreshView(); message(i18n("%1 contact(s) received!").arg( count )); topLevelWidget()->showMaximized(); topLevelWidget()->raise(); } void KABCore::restoreSettings() { mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; bool state; if (mMultipleViewsAtOnce) state = KABPrefs::instance()->mDetailsPageVisible; else state = false; mActionDetails->setChecked( state ); setDetailsVisible( state ); state = KABPrefs::instance()->mJumpButtonBarVisible; mActionJumpBar->setChecked( state ); setJumpButtonBarVisible( state ); /*US QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; if ( splitterSize.count() == 0 ) { splitterSize.append( width() / 2 ); splitterSize.append( width() / 2 ); } mMiniSplitter->setSizes( splitterSize ); if ( mExtensionBarSplitter ) { splitterSize = KABPrefs::instance()->mExtensionsSplitter; if ( splitterSize.count() == 0 ) { splitterSize.append( width() / 2 ); splitterSize.append( width() / 2 ); } mExtensionBarSplitter->setSizes( splitterSize ); } */ mViewManager->restoreSettings(); mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); mExtensionManager->restoreSettings(); #ifdef DESKTOP_VERSION int wid = width(); if ( wid < 10 ) wid = 400; #else int wid = QApplication::desktop()->width(); if ( wid < 640 ) wid = QApplication::desktop()->height(); #endif - QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter; + Q3ValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter; if ( true /*splitterSize.count() == 0*/ ) { splitterSize.append( wid / 2 ); splitterSize.append( wid / 2 ); } mMiniSplitter->setSizes( splitterSize ); if ( mExtensionBarSplitter ) { //splitterSize = KABPrefs::instance()->mExtensionsSplitter; if ( true /*splitterSize.count() == 0*/ ) { splitterSize.append( wid / 2 ); splitterSize.append( wid / 2 ); } mExtensionBarSplitter->setSizes( splitterSize ); } #ifdef DESKTOP_VERSION KConfig *config = KABPrefs::instance()->getConfig(); config->setGroup("WidgetLayout"); QStringList list; list = config->readListEntry("MainLayout"); int x,y,w,h; if ( ! list.isEmpty() ) { x = list[0].toInt(); y = list[1].toInt(); w = list[2].toInt(); h = list[3].toInt(); KApplication::testCoords( &x,&y,&w,&h ); topLevelWidget()->setGeometry(x,y,w,h); } else { topLevelWidget()->setGeometry( 40 ,40 , 640, 440); } #endif } void KABCore::saveSettings() { KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); if ( mExtensionBarSplitter ) KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); #ifndef KAB_EMBEDDED KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); #endif //KAB_EMBEDDED mExtensionManager->saveSettings(); mViewManager->saveSettings(); KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); KABPrefs::instance()->writeConfig(); //qDebug("KA: KABCore::saveSettings() "); } KABC::AddressBook *KABCore::addressBook() const { return mAddressBook; } KConfig *KABCore::config() { #ifndef KAB_EMBEDDED return KABPrefs::instance()->config(); #else //KAB_EMBEDDED return KABPrefs::instance()->getConfig(); #endif //KAB_EMBEDDED } KActionCollection *KABCore::actionCollection() const { return mGUIClient->actionCollection(); } KABC::Field *KABCore::currentSearchField() const { if (mIncSearchWidget) return mIncSearchWidget->currentField(); else return 0; } QStringList KABCore::selectedUIDs() const { return mViewManager->selectedUids(); } KABC::Resource *KABCore::requestResource( QWidget *parent ) { - QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); + Q3PtrList<KABC::Resource> kabcResources = addressBook()->resources(); - QPtrList<KRES::Resource> kresResources; - QPtrListIterator<KABC::Resource> resIt( kabcResources ); + Q3PtrList<KRES::Resource> kresResources; + Q3PtrListIterator<KABC::Resource> resIt( kabcResources ); KABC::Resource *resource; while ( ( resource = resIt.current() ) != 0 ) { ++resIt; if ( !resource->readOnly() ) { KRES::Resource *res = static_cast<KRES::Resource*>( resource ); if ( res ) kresResources.append( res ); } } KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); return static_cast<KABC::Resource*>( res ); } #ifndef KAB_EMBEDDED KAboutData *KABCore::createAboutData() #else //KAB_EMBEDDED void KABCore::createAboutData() #endif //KAB_EMBEDDED { QString version; #include <../version> QMessageBox::about( this, "About KAddressbook/Pi", "KAddressbook/Platform-independent\n" "(KA/Pi) " +version + " - " + #ifdef DESKTOP_VERSION "Desktop Edition\n" #else "PDA-Edition\n" "for: Zaurus 5500 / 7x0 / 8x0\n" #endif "(c) 2004 Ulf Schenk\n" "(c) 2004-2005 Lutz Rogowski\nrogowski@kde.org\n" "(c) 1997-2003, The KDE PIM Team\n" "Tobias Koenig Maintainer\n" "Don Sanders Original author\n" "Cornelius Schumacher Co-maintainer\n" "Mike Pilone GUI and framework redesign\n" "Greg Stern DCOP interface\n" "Mark Westcot Contact pinning\n" "Michel Boyer de la Giroday LDAP Lookup\n" "Steffen Hansen LDAP Lookup" #ifdef _WIN32_ "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" #endif ); } void KABCore::setContactSelected( const QString &uid ) { KABC::Addressee addr = mAddressBook->findByUid( uid ); if ( !mDetails->isHidden() ) mDetails->setAddressee( addr ); if ( !addr.isEmpty() ) { emit contactSelected( addr.formattedName() ); KABC::Picture pic = addr.photo(); if ( pic.isIntern() ) { //US emit contactSelected( pic.data() ); //US instead use: QPixmap px; if (pic.data().isNull() != true) { px.convertFromImage(pic.data()); } emit contactSelected( px ); } } mExtensionManager->setSelectionChanged(); // update the actions bool selected = !uid.isEmpty(); if ( mReadWrite ) { mActionCut->setEnabled( selected ); mActionPaste->setEnabled( selected ); } mActionCopy->setEnabled( selected ); mActionDelete->setEnabled( selected ); mActionEditAddressee->setEnabled( selected ); mActionMail->setEnabled( selected ); mActionMailVCard->setEnabled( selected ); //if (mActionBeam) //mActionBeam->setEnabled( selected ); mActionWhoAmI->setEnabled( selected ); } void KABCore::sendMail() { sendMail( mViewManager->selectedEmails().join( ", " ) ); } void KABCore::sendMail( const QString& emaillist ) { // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " if (emaillist.contains(",") > 0) ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); else ExternalAppHandler::instance()->mailToOneContact( emaillist ); } void KABCore::mailVCard() { QStringList uids = mViewManager->selectedUids(); if ( !uids.isEmpty() ) mailVCard( uids ); } void KABCore::mailVCard( const QStringList& uids ) { QStringList urls; // QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); QString dirName = "/tmp/" + KApplication::randomString( 8 ); QDir().mkdir( dirName, true ); for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { KABC::Addressee a = mAddressBook->findByUid( *it ); if ( a.isEmpty() ) continue; QString name = a.givenName() + "_" + a.familyName() + ".vcf"; QString fileName = dirName + "/" + name; QFile outFile(fileName); - if ( outFile.open(IO_WriteOnly) ) { // file opened successfully + if ( outFile.open(QIODevice::WriteOnly) ) { // file opened successfully KABC::VCardConverter converter; QString vcard; converter.addresseeToVCard( a, vcard ); - QTextStream t( &outFile ); // use a text stream - t.setEncoding( QTextStream::UnicodeUTF8 ); + Q3TextStream t( &outFile ); // use a text stream + t.setEncoding( Q3TextStream::UnicodeUTF8 ); t << vcard; outFile.close(); urls.append( fileName ); } } bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); /*US kapp->invokeMailer( QString::null, QString::null, QString::null, QString::null, // subject QString::null, // body QString::null, urls ); // attachments */ } /** Beams the "WhoAmI contact. */ void KABCore::beamMySelf() { KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); if (!a.isEmpty()) { QStringList uids; uids << a.uid(); beamVCard(uids); } else { KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); } } void KABCore::updateMainWindow() { mMainWindow->showMaximized(); //mMainWindow->repaint(); } void KABCore::resizeEvent(QResizeEvent* e ) { if ( !mMiniSplitter ) { QWidget::resizeEvent( e ); return; } #ifndef DESKTOP_VERSION static int desktop_width = 0; //qDebug("KABCore::resizeEvent %d %d ",desktop_width,QApplication::desktop()->width() ); if ( desktop_width != QApplication::desktop()->width() ) if ( QApplication::desktop()->width() >= 480 ) { if (QApplication::desktop()->width() == 640 ) { // e.g. 640x480 //qDebug("640 "); if ( mMiniSplitter->orientation() == Qt::Vertical ) { //qDebug("switch V->H "); mMiniSplitter->setOrientation( Qt::Horizontal); mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); } if ( QApplication::desktop()->width() <= 640 ) { bool shot = mMainWindow->isVisible(); mMainWindow->showMinimized(); //mMainWindow->setMaximumSize( QApplication::desktop()->size() ); mViewManager->getFilterAction()->setComboWidth( 150 ); if ( mIncSearchWidget ) mIncSearchWidget->setSize(); if ( shot ) QTimer::singleShot( 1, this , SLOT ( updateMainWindow())); } } else if (QApplication::desktop()->width() == 480 ){// e.g. 480x640 //qDebug("480 "); if ( mMiniSplitter->orientation() == Qt::Horizontal ) { //qDebug("switch H->V "); mMiniSplitter->setOrientation( Qt::Vertical ); mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); } if ( QApplication::desktop()->width() <= 640 ) { //mMainWindow->setMaximumSize( QApplication::desktop()->size() ); bool shot = mMainWindow->isVisible(); mMainWindow->showMinimized(); if ( KABPrefs::instance()->mHideSearchOnSwitch ) { if ( mIncSearchWidget ) { mIncSearchWidget->setSize(); } } else { mViewManager->getFilterAction()->setComboWidth( 0 ); } if ( shot ) QTimer::singleShot( 1, this , SLOT ( updateMainWindow())); } } } desktop_width = QApplication::desktop()->width(); #endif QWidget::resizeEvent( e ); } void KABCore::export2phone() { QStringList uids; XXPortSelectDialog dlg( this, false, this ); if ( dlg.exec() ) uids = dlg.uids(); else return; if ( uids.isEmpty() ) return; // qDebug("count %d ", uids.count()); KAex2phonePrefs ex2phone; ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection ); ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice ); ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel ); if ( !ex2phone.exec() ) { return; } KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice, KPimGlobalPrefs::instance()->mEx2PhoneConnection, KPimGlobalPrefs::instance()->mEx2PhoneModel ); QString fileName = getPhoneFile(); if ( ! mAddressBook->export2PhoneFormat( uids ,fileName ) ) return; message(i18n("Exporting to phone...")); QTimer::singleShot( 1, this , SLOT ( writeToPhone())); } QString KABCore::getPhoneFile() { #ifdef DESKTOP_VERSION return locateLocal("tmp", "phonefile.vcf"); #else return "/tmp/phonefile.vcf"; #endif } void KABCore::writeToPhone( ) { if ( PhoneAccess::writeToPhone( getPhoneFile() ) ) message(i18n("Export to phone finished!")); else qDebug(i18n("KA: Error exporting to phone")); } void KABCore::beamVCard() { QStringList uids; XXPortSelectDialog dlg( this, false, this ); if ( dlg.exec() ) uids = dlg.uids(); else return; if ( uids.isEmpty() ) return; beamVCard( uids ); } void KABCore::beamVCard(const QStringList& uids) { // LR: we should use the /tmp dir on the Zaurus, // because: /tmp = RAM, (HOME)/kdepim = flash memory #ifdef DESKTOP_VERSION QString fileName = locateLocal("tmp", "kapibeamfile.vcf"); #else QString fileName = "/tmp/kapibeamfile.vcf"; #endif KABC::VCardConverter converter; QString description; QString datastream; for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { KABC::Addressee a = mAddressBook->findByUid( *it ); if ( a.isEmpty() ) continue; if (description.isEmpty()) description = a.formattedName(); QString vcard; converter.addresseeToVCard( a, vcard ); int start = 0; int next; while ( (next = vcard.find("TYPE=", start) )>= 0 ) { int semi = vcard.find(";", next); int dopp = vcard.find(":", next); int sep; if ( semi < dopp && semi >= 0 ) sep = semi ; else sep = dopp; datastream +=vcard.mid( start, next - start); datastream +=vcard.mid( next+5,sep -next -5 ).upper(); start = sep; } datastream += vcard.mid( start,vcard.length() ); } #ifndef DESKTOP_VERSION QFile outFile(fileName); - if ( outFile.open(IO_WriteOnly) ) { + if ( outFile.open(QIODevice::WriteOnly) ) { datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); - QTextStream t( &outFile ); // use a text stream + Q3TextStream t( &outFile ); // use a text stream //t.setEncoding( QTextStream::UnicodeUTF8 ); - t.setEncoding( QTextStream::Latin1 ); + t.setEncoding( Q3TextStream::Latin1 ); t <<datastream.latin1(); outFile.close(); Ir *ir = new Ir( this ); connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); ir->send( fileName, description, "text/x-vCard" ); } else { qDebug("KA: Error open temp beam file "); return; } #endif } void KABCore::beamDone( Ir *ir ) { #ifndef DESKTOP_VERSION delete ir; #endif topLevelWidget()->raise(); message( i18n("Beaming finished!") ); } void KABCore::browse( const QString& url ) { #ifndef KAB_EMBEDDED kapp->invokeBrowser( url ); #else //KAB_EMBEDDED qDebug("KABCore::browse must be fixed"); #endif //KAB_EMBEDDED } void KABCore::selectAllContacts() { mViewManager->setSelected( QString::null, true ); } void KABCore::deleteContacts() { QStringList uidList = mViewManager->selectedUids(); deleteContacts( uidList ); } void KABCore::deleteContacts( const QStringList &uids ) { if ( uids.count() > 0 ) { if ( KABPrefs::instance()->mAskForDelete ) { int count = uids.count(); if ( count > 5 ) count = 5; QString cNames; int i; for ( i = 0; i < count ; ++i ) { cNames += KGlobal::formatMessage( mAddressBook->findByUid( uids[i] ).realName() ,0) + "\n"; } if ( uids.count() > 5 ) cNames += i18n("...and %1 more\ncontact(s) selected").arg( uids.count() - 5 ); QString text = i18n( "Do you really\nwant to delete the\nsetected contact(s)?\n\n" ) + cNames ; if ( KMessageBox::questionYesNo( this, text ) != KMessageBox::Yes ) return; } PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); UndoStack::instance()->push( command ); RedoStack::instance()->clear(); // now if we deleted anything, refresh setContactSelected( QString::null ); setModified( true ); } } void KABCore::copyContacts() { KABC::Addressee::List addrList = mViewManager->selectedAddressees(); QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; QClipboard *cb = QApplication::clipboard(); cb->setText( clipText ); } void KABCore::cutContacts() { QStringList uidList = mViewManager->selectedUids(); //US if ( uidList.size() > 0 ) { if ( uidList.count() > 0 ) { PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); UndoStack::instance()->push( command ); RedoStack::instance()->clear(); setModified( true ); } } void KABCore::pasteContacts() { QClipboard *cb = QApplication::clipboard(); KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); pasteContacts( list ); } void KABCore::pasteContacts( KABC::Addressee::List &list ) { KABC::Resource *resource = requestResource( this ); KABC::Addressee::List::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) (*it).setResource( resource ); PwPasteCommand *command = new PwPasteCommand( this, list ); UndoStack::instance()->push( command ); RedoStack::instance()->clear(); setModified( true ); } void KABCore::setWhoAmI() { KABC::Addressee::List addrList = mViewManager->selectedAddressees(); if ( addrList.count() > 1 ) { KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); return; } QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].realName() ) ) == KMessageBox::Yes ) static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); } void KABCore::editCategories() { KPIM::CategoryEditDialog dlg ( KABPrefs::instance(), this, "", true ); dlg.exec(); } void KABCore::setCategories() { QStringList uids; XXPortSelectDialog dlgx( this, false, this ); if ( dlgx.exec() ) uids = dlgx.uids(); else return; if ( uids.isEmpty() ) return; // qDebug("count %d ", uids.count()); KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); if ( !dlg.exec() ) { message( i18n("Setting categories cancelled") ); return; } bool merge = false; QString msg = i18n( "Merge with existing categories?" ); if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) merge = true; message( i18n("Setting categories ... please wait!") ); QStringList categories = dlg.selectedCategories(); //QStringList uids = mViewManager->selectedUids(); QStringList::Iterator it; for ( it = uids.begin(); it != uids.end(); ++it ) { KABC::Addressee addr = mAddressBook->findByUid( *it ); if ( !addr.isEmpty() ) { if ( !merge ) addr.setCategories( categories ); else { QStringList addrCategories = addr.categories(); QStringList::Iterator catIt; for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { if ( !addrCategories.contains( *catIt ) ) addrCategories.append( *catIt ); } addr.setCategories( addrCategories ); } mAddressBook->insertAddressee( addr ); } } if ( uids.count() > 0 ) setModified( true ); message( i18n("Setting categories completed!") ); } void KABCore::setSearchFields( const KABC::Field::List &fields ) { mIncSearchWidget->setFields( fields ); } void KABCore::incrementalSearch( const QString& text ) { QString stext; if ( KABPrefs::instance()->mAutoSearchWithWildcard ) { stext = "*" + text; } else { stext = text; } mViewManager->doSearch( stext, mIncSearchWidget->currentField() ); } void KABCore::incrementalSearchJump( const QString& text ) { mViewManager->doSearch( text, mIncSearchWidget->currentField() ); } void KABCore::setModified() { setModified( true ); } void KABCore::setModifiedWOrefresh() { // qDebug("KABCore::setModifiedWOrefresh() "); mModified = true; mActionSave->setEnabled( mModified ); } void KABCore::setModified( bool modified ) { mModified = modified; mActionSave->setEnabled( mModified ); if ( modified ) mJumpButtonBar->recreateButtons(); mViewManager->refreshView(); } bool KABCore::modified() const { return mModified; } void KABCore::contactModified( const KABC::Addressee &addr ) { addrModified( addr ); #if 0 // debug only KABC::Addressee ad = addr; ad.computeCsum( "123"); #endif } void KABCore::addrModified( const KABC::Addressee &addr ,bool updateDetails ) { Command *command = 0; QString uid; // check if it exists already KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); if ( origAddr.isEmpty() ) command = new PwNewCommand( mAddressBook, addr ); else { command = new PwEditCommand( mAddressBook, origAddr, addr ); uid = addr.uid(); } UndoStack::instance()->push( command ); RedoStack::instance()->clear(); if ( updateDetails ) mDetails->setAddressee( addr ); setModified( true ); } void KABCore::newContact() { - QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); + Q3PtrList<KABC::Resource> kabcResources = mAddressBook->resources(); - QPtrList<KRES::Resource> kresResources; - QPtrListIterator<KABC::Resource> it( kabcResources ); + Q3PtrList<KRES::Resource> kresResources; + Q3PtrListIterator<KABC::Resource> it( kabcResources ); KABC::Resource *resource; while ( ( resource = it.current() ) != 0 ) { ++it; if ( !resource->readOnly() ) { KRES::Resource *res = static_cast<KRES::Resource*>( resource ); if ( res ) kresResources.append( res ); } } KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); resource = static_cast<KABC::Resource*>( res ); if ( resource ) { KABC::Addressee addr; addr.setResource( resource ); mEditorDialog->setAddressee( addr ); mEditorDialog->setCaption( i18n("Edit new contact")); KApplication::execDialog ( mEditorDialog ); } else return; // mEditorDict.insert( dialog->addressee().uid(), dialog ); } void KABCore::addEmail( QString aStr ) { #ifndef KAB_EMBEDDED QString fullName, email; KABC::Addressee::parseEmailAddress( aStr, fullName, email ); // Try to lookup the addressee matching the email address bool found = false; QStringList emailList; KABC::AddressBook::Iterator it; for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { emailList = (*it).emails(); if ( emailList.contains( email ) > 0 ) { found = true; (*it).setNameFromString( fullName ); editContact( (*it).uid() ); } } if ( !found ) { KABC::Addressee addr; addr.setNameFromString( fullName ); addr.insertEmail( email, true ); mAddressBook->insertAddressee( addr ); mViewManager->refreshView( addr.uid() ); editContact( addr.uid() ); } #else //KAB_EMBEDDED qDebug("KABCore::addEmail finsih method"); #endif //KAB_EMBEDDED } void KABCore::importVCard( const KURL &url, bool showPreview ) { mXXPortManager->importVCard( url, showPreview ); } void KABCore::importFromOL() { #ifdef _OL_IMPORT_ KABC::Addressee::List list = OL_access::instance()->importOLcontacts(); if ( list.count() > 0 ) { KABC::Addressee::List listNew; KABC::Addressee::List listExisting; KABC::Addressee::List::Iterator it; KABC::AddressBook::Iterator iter; for ( it = list.begin(); it != list.end(); ++it ) { if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) listNew.append( (*it) ); else listExisting.append( (*it) ); } QString mess = i18n("%1 contacts read from OL.\n\n%2 contacts added to addressbook!").arg( list.count()).arg( listNew.count() ); if ( listExisting.count() > 0 ) mess += "\n\n"+ i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ); KMessageBox::information( this, mess ); if ( listNew.count() > 0 ) { pasteWithNewUid = false; pasteContacts( listNew ); pasteWithNewUid = true; } } #endif } bool KABCore::readOLdata( KABC::AddressBook* local ) { #ifdef _OL_IMPORT_ QStringList folderList = OL_access::instance()->getFolderSelection( OL_CONTACT_DATA , i18n("Select Folder to sync")); KABC::Addressee::List list; if ( folderList.count() ) { OL_access::instance()->readContactData( OL_access::instance()->getFolderFromID( 0, folderList[1] ) , &list, true ); KABC::Addressee::List::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) { (*it).setExternalUID( (*it).uid() ); (*it).setOriginalExternalUID( (*it).uid() ); (*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); local->insertAddressee( (*it) , false, false ); } mOLsyncFolderID = folderList[1]; //KMessageBox::information( this, i18n("OLsync folder ID ") + mOLsyncFolderID ); } return list.count() > 0; #else return false; #endif } bool KABCore::writeOLdata( KABC::AddressBook* aBook ) { #ifdef _OL_IMPORT_ if ( !OL_access::instance()->setSelectedFolder( mOLsyncFolderID ) ) return false; KABC::AddressBook::Iterator it; for ( it = aBook->begin(); it != aBook->end(); ++it ) { if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { KABC::Addressee addressee = (*it); if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) { (*it) = OL_access::instance()->addAddressee( (*it) ); (*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { OL_access::instance()->deleteAddressee( (*it) ); } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { //changed (*it) = OL_access::instance()->changeAddressee( (*it) ); (*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM ); } } } return true; #else return false; #endif } void KABCore::importVCard( const QString &vCard, bool showPreview ) { mXXPortManager->importVCard( vCard, showPreview ); } //US added a second method without defaultparameter void KABCore::editContact2() { editContact( QString::null ); } void KABCore::editContact( const QString &uid ) { if ( mExtensionManager->isQuickEditVisible() ) return; // First, locate the contact entry QString localUID = uid; if ( localUID.isNull() ) { QStringList uidList = mViewManager->selectedUids(); if ( uidList.count() > 0 ) localUID = *( uidList.at( 0 ) ); } KABC::Addressee addr = mAddressBook->findByUid( localUID ); if ( !addr.isEmpty() ) { mEditorDialog->setAddressee( addr ); KApplication::execDialog ( mEditorDialog ); } } /** Shows or edits the detail view for the given uid. If the uid is QString::null, the method will try to find a selected addressee in the view. */ void KABCore::executeContact( const QString &uid /*US = QString::null*/ ) { if ( mMultipleViewsAtOnce ) { editContact( uid ); } else { setDetailsVisible( true ); mActionDetails->setChecked(true); } } void KABCore::save() { if (syncManager->blockSave()) return; if ( !mModified ) return; syncManager->setBlockSave(true); QString text = i18n( "There was an error while attempting to save\n the " "address book. Please check that some \nother application is " "not using it. " ); message(i18n("Saving ... please wait! "), false); //qApp->processEvents(); #ifndef KAB_EMBEDDED KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); if ( !b || !b->save() ) { KMessageBox::error( this, text, i18n( "Unable to Save" ) ); } #else //KAB_EMBEDDED KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); if ( !b || !b->save() ) { QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); } #endif //KAB_EMBEDDED message(i18n("Addressbook saved!")); setModified( false ); syncManager->setBlockSave(false); } void KABCore::undo() { UndoStack::instance()->undo(); // Refresh the view mViewManager->refreshView(); } void KABCore::redo() { RedoStack::instance()->redo(); // Refresh the view mViewManager->refreshView(); } void KABCore::setJumpButtonBar( bool visible ) { setJumpButtonBarVisible(visible ); saveSettings(); } void KABCore::setJumpButtonBarVisible( bool visible ) { if (mMultipleViewsAtOnce) { if ( visible ) mJumpButtonBar->show(); else mJumpButtonBar->hide(); } else { // show the jumpbar only if "the details are hidden" == "viewmanager are shown" if (mViewManager->isVisible()) { if ( visible ) mJumpButtonBar->show(); else mJumpButtonBar->hide(); } else { mJumpButtonBar->hide(); } } if ( visible ) { if ( mIncSearchWidget->currentItem() == 0 ) { message( i18n("Change search field enable jump bar") ); } } } void KABCore::setDetailsToState() { setDetailsVisible( mActionDetails->isChecked() ); } void KABCore::setDetailsToggle() { mActionDetails->setChecked( !mActionDetails->isChecked() ); setDetailsToState(); } void KABCore::setDetailsVisible( bool visible ) { if (visible && mDetails->isHidden()) { KABC::Addressee::List addrList = mViewManager->selectedAddressees(); if ( addrList.count() > 0 ) mDetails->setAddressee( addrList[ 0 ] ); } // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between // the listview and the detailview. We do that by changing the splitbar size. if (mMultipleViewsAtOnce) { if ( visible ) mDetails->show(); else mDetails->hide(); } else { if ( visible ) { mViewManager->hide(); mDetails->show(); mIncSearchWidget->setFocus(); } else { mViewManager->show(); mDetails->hide(); mViewManager->setFocusAV(); } setJumpButtonBarVisible( !visible ); } } void KABCore::extensionChanged( int id ) { //change the details view only for non desktop systems #ifndef DESKTOP_VERSION if (id == 0) { //the user disabled the extension. if (mMultipleViewsAtOnce) { // enable detailsview again setDetailsVisible( true ); mActionDetails->setChecked( true ); } else { //go back to the listview setDetailsVisible( false ); mActionDetails->setChecked( false ); mActionDetails->setEnabled(true); } } else { //the user enabled the extension. setDetailsVisible( false ); mActionDetails->setChecked( false ); if (!mMultipleViewsAtOnce) { mActionDetails->setEnabled(false); } mExtensionManager->setSelectionChanged(); } #endif// DESKTOP_VERSION } void KABCore::extensionModified( const KABC::Addressee::List &list ) { if ( list.count() != 0 ) { KABC::Addressee::List::ConstIterator it; for ( it = list.begin(); it != list.end(); ++it ) mAddressBook->insertAddressee( *it ); if ( list.count() > 1 ) setModified(); else setModifiedWOrefresh(); } if ( list.count() == 0 ) mViewManager->refreshView(); else mViewManager->refreshView( list[ 0 ].uid() ); } QString KABCore::getNameByPhone( const QString &phone ) { #ifndef KAB_EMBEDDED QRegExp r( "[/*/-/ ]" ); QString localPhone( phone ); bool found = false; QString ownerName = ""; KABC::AddressBook::Iterator iter; KABC::PhoneNumber::List::Iterator phoneIter; KABC::PhoneNumber::List phoneList; for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) { phoneList = (*iter).phoneNumbers(); for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() ); ++phoneIter) { // Get rid of separator chars so just the numbers are compared. if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) { ownerName = (*iter).formattedName(); found = true; } } } return ownerName; #else //KAB_EMBEDDED qDebug("KABCore::getNameByPhone finsih method"); return ""; #endif //KAB_EMBEDDED } void KABCore::openConfigGlobalDialog() { KPimPrefsGlobalDialog gc ( this ); gc.exec(); } void KABCore::openConfigDialog() { KDialogBase * ConfigureDialog = new KDialogBase ( KDialogBase::Plain , i18n("Configure KA/Pi"), KDialogBase::Default |KDialogBase::Cancel | KDialogBase::Apply | KDialogBase::Ok, KDialogBase::Ok,0, "name", true, true); KCMKabConfig* kabcfg = new KCMKabConfig( ConfigureDialog , "KCMKabConfig" ); ConfigureDialog->setMainWidget( kabcfg ); connect( ConfigureDialog, SIGNAL( applyClicked() ), this, SLOT( configurationChanged() ) ); connect( ConfigureDialog, SIGNAL( applyClicked() ), kabcfg, SLOT( save() ) ); connect( ConfigureDialog, SIGNAL( acceptClicked() ), this, SLOT( configurationChanged() ) ); connect( ConfigureDialog, SIGNAL( acceptClicked() ), kabcfg, SLOT( save() ) ); connect( ConfigureDialog, SIGNAL( defaultClicked() ), kabcfg, SLOT( defaults() ) ); saveSettings(); kabcfg->load(); #ifndef DESKTOP_VERSION if ( QApplication::desktop()->height() <= 480 ) ConfigureDialog->hideButtons(); ConfigureDialog->showMaximized(); #endif if ( ConfigureDialog->exec() ) KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); delete ConfigureDialog; } void KABCore::openLDAPDialog() { #ifndef KAB_EMBEDDED if ( !mLdapSearchDialog ) { mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this ); connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager, SLOT( refreshView() ) ); connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this, SLOT( setModified() ) ); } else mLdapSearchDialog->restoreSettings(); if ( mLdapSearchDialog->isOK() ) mLdapSearchDialog->exec(); #else //KAB_EMBEDDED qDebug("KABCore::openLDAPDialog() finsih method"); #endif //KAB_EMBEDDED } void KABCore::print() { #ifndef KAB_EMBEDDED KPrinter printer; if ( !printer.setup( this ) ) return; KABPrinting::PrintingWizard wizard( &printer, mAddressBook, mViewManager->selectedUids(), this ); wizard.exec(); #else //KAB_EMBEDDED qDebug("KABCore::print() finsih method"); #endif //KAB_EMBEDDED } void KABCore::addGUIClient( KXMLGUIClient *client ) { if ( mGUIClient ) mGUIClient->insertChildClient( client ); else KMessageBox::error( this, "no KXMLGUICLient"); } void KABCore::configurationChanged() { mExtensionManager->reconfigure(); } void KABCore::addressBookChanged() { /*US QDictIterator<AddresseeEditorDialog> it( mEditorDict ); while ( it.current() ) { if ( it.current()->dirty() ) { QString text = i18n( "Data has been changed externally. Unsaved " "changes will be lost." ); KMessageBox::information( this, text ); } it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) ); ++it; } */ if (mEditorDialog) { if (mEditorDialog->dirty()) { QString text = i18n( "Data has been changed externally. Unsaved " "changes will be lost." ); KMessageBox::information( this, text ); } QString currentuid = mEditorDialog->addressee().uid(); mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) ); } mViewManager->refreshView(); } AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent, const char *name ) { if ( mEditorDialog == 0 ) { mEditorDialog = new AddresseeEditorDialog( this, parent, name ? name : "editorDialog" ); connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ), SLOT( contactModified( const KABC::Addressee& ) ) ); //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ), // SLOT( slotEditorDestroyed( const QString& ) ) ; } return mEditorDialog; } void KABCore::slotEditorDestroyed( const QString &uid ) { //mEditorDict.remove( uid ); } void KABCore::initGUI() { #ifndef KAB_EMBEDDED - QHBoxLayout *topLayout = new QHBoxLayout( this ); + Q3HBoxLayout *topLayout = new Q3HBoxLayout( this ); topLayout->setSpacing( KDialogBase::spacingHint() ); mExtensionBarSplitter = new QSplitter( this ); mExtensionBarSplitter->setOrientation( Qt::Vertical ); mDetailsSplitter = new QSplitter( mExtensionBarSplitter ); - QVBox *viewSpace = new QVBox( mDetailsSplitter ); + Q3VBox *viewSpace = new Q3VBox( mDetailsSplitter ); mIncSearchWidget = new IncSearchWidget( viewSpace ); connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), SLOT( incrementalSearch( const QString& ) ) ); mViewManager = new ViewManager( this, viewSpace ); viewSpace->setStretchFactor( mViewManager, 1 ); mDetails = new ViewContainer( mDetailsSplitter ); mJumpButtonBar = new JumpButtonBar( this, this ); mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); topLayout->addWidget( mExtensionBarSplitter ); topLayout->setStretchFactor( mExtensionBarSplitter, 100 ); topLayout->addWidget( mJumpButtonBar ); //topLayout->setStretchFactor( mJumpButtonBar, 1 ); mXXPortManager = new XXPortManager( this, this ); #else //KAB_EMBEDDED //US initialize viewMenu before settingup viewmanager. // Viewmanager needs this menu to plugin submenues. - viewMenu = new QPopupMenu( this ); - settingsMenu = new QPopupMenu( this ); + viewMenu = new Q3PopupMenu( this ); + settingsMenu = new Q3PopupMenu( this ); //filterMenu = new QPopupMenu( this ); - ImportMenu = new QPopupMenu( this ); - ExportMenu = new QPopupMenu( this ); - syncMenu = new QPopupMenu( this ); - changeMenu= new QPopupMenu( this ); - beamMenu= new QPopupMenu( this ); + ImportMenu = new Q3PopupMenu( this ); + ExportMenu = new Q3PopupMenu( this ); + syncMenu = new Q3PopupMenu( this ); + changeMenu= new Q3PopupMenu( this ); + beamMenu= new Q3PopupMenu( this ); //US since we have no splitter for the embedded system, setup // a layout with two frames. One left and one right. - QBoxLayout *topLayout; + Q3BoxLayout *topLayout; // = new QHBoxLayout( this ); // QBoxLayout *topLayout = (QBoxLayout*)layout(); // QWidget *mainBox = new QWidget( this ); // QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox); #ifdef DESKTOP_VERSION - topLayout = new QHBoxLayout( this ); + topLayout = new Q3HBoxLayout( this ); mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); topLayout->addWidget(mMiniSplitter ); mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter ); mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); mViewManager = new ViewManager( this, mExtensionBarSplitter ); mDetails = new ViewContainer( mMiniSplitter ); mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); #else if ( QApplication::desktop()->width() > 480 ) { - topLayout = new QHBoxLayout( this ); + topLayout = new Q3HBoxLayout( this ); mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); } else { - topLayout = new QHBoxLayout( this ); + topLayout = new Q3HBoxLayout( this ); mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this); mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); } topLayout->addWidget(mMiniSplitter ); mViewManager = new ViewManager( this, mMiniSplitter ); mDetails = new ViewContainer( mMiniSplitter ); mExtensionManager = new ExtensionManager( this, mMiniSplitter ); #endif //eh->hide(); // topLayout->addWidget(mExtensionManager ); /*US #ifndef KAB_NOSPLITTER QHBoxLayout *topLayout = new QHBoxLayout( this ); //US topLayout->setSpacing( KDialogBase::spacingHint() ); topLayout->setSpacing( 10 ); mDetailsSplitter = new QSplitter( this ); QVBox *viewSpace = new QVBox( mDetailsSplitter ); mViewManager = new ViewManager( this, viewSpace ); viewSpace->setStretchFactor( mViewManager, 1 ); mDetails = new ViewContainer( mDetailsSplitter ); topLayout->addWidget( mDetailsSplitter ); topLayout->setStretchFactor( mDetailsSplitter, 100 ); #else //KAB_NOSPLITTER QHBoxLayout *topLayout = new QHBoxLayout( this ); //US topLayout->setSpacing( KDialogBase::spacingHint() ); topLayout->setSpacing( 10 ); // mDetailsSplitter = new QSplitter( this ); QVBox *viewSpace = new QVBox( this ); mViewManager = new ViewManager( this, viewSpace ); viewSpace->setStretchFactor( mViewManager, 1 ); mDetails = new ViewContainer( this ); topLayout->addWidget( viewSpace ); // topLayout->setStretchFactor( mDetailsSplitter, 100 ); topLayout->addWidget( mDetails ); #endif //KAB_NOSPLITTER */ syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu); syncManager->setBlockSave(false); connect(syncManager , SIGNAL( request_file(const QString &) ), this, SLOT( syncFileRequest(const QString &) ) ); connect(syncManager , SIGNAL( getFile( bool ,const QString &)), this, SLOT(getFile( bool ,const QString &) ) ); QString sync_file = sentSyncFile(); //qDebug("KABCore::initGUI()::setting tmp sync file to:%s ",sync_file.latin1()); syncManager->setDefaultFileName( sync_file ); //connect(syncManager , SIGNAL( ), this, SLOT( ) ); #endif //KAB_EMBEDDED initActions(); #ifdef KAB_EMBEDDED addActionsManually(); //US make sure the export and import menues are initialized before creating the xxPortManager. mXXPortManager = new XXPortManager( this, this ); // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() ); //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget); // mActionQuit->plug ( mMainWindow->toolBar()); //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() ); //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget); // mIncSearchWidget->hide(); connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), SLOT( incrementalSearch( const QString& ) ) ); connect( mIncSearchWidget, SIGNAL( scrollUP() ),mViewManager, SLOT( scrollUP() ) ); connect( mIncSearchWidget, SIGNAL( scrollDOWN() ),mViewManager, SLOT( scrollDOWN() ) ); mJumpButtonBar = new JumpButtonBar( this, this ); topLayout->addWidget( mJumpButtonBar ); //US topLayout->setStretchFactor( mJumpButtonBar, 10 ); // mMainWindow->getIconToolBar()->raise(); #endif //KAB_EMBEDDED } void KABCore::initActions() { //US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); #ifndef KAB_EMBEDDED connect( QApplication::clipboard(), SIGNAL( dataChanged() ), SLOT( clipboardDataChanged() ) ); #endif //KAB_EMBEDDED // file menu mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() ); //mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() ); - mActionPrint = new KAction( i18n( "&Print View" ), "fileprint", CTRL + Key_P, mViewManager, + mActionPrint = new KAction( i18n( "&Print View" ), "fileprint", Qt::CTRL + Qt::Key_P, mViewManager, SLOT( printView() ), actionCollection(), "kaddressbook_print" ); mActionPrintDetails = new KAction( i18n( "&Print Details" ), "fileprint", 0, mDetails, SLOT( printView() ), actionCollection(), "kaddressbook_print2" ); - mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this, + mActionSave = new KAction( i18n( "&Save" ), "filesave", Qt::CTRL+Qt::Key_S, this, SLOT( save() ), actionCollection(), "file_sync" ); - mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this, + mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", Qt::CTRL+Qt::Key_N, this, SLOT( newContact() ), actionCollection(), "file_new_contact" ); mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0, this, SLOT( mailVCard() ), actionCollection(), "file_mail_vcard"); mActionExport2phone = new KAction( i18n( "Export to phone" ), "ex2phone", 0, this, SLOT( export2phone() ), actionCollection(), "kaddressbook_ex2phone" ); mActionBeamVCard = 0; mActionBeam = 0; #ifndef DESKTOP_VERSION if ( Ir::supported() ) { mActionBeamVCard = new KAction( i18n( "Beam v&Card(s)..." ), "beam", 0, this, SLOT( beamVCard() ), actionCollection(), "kaddressbook_beam_vcard" ); mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this, SLOT( beamMySelf() ), actionCollection(), "kaddressbook_beam_myself" ); } #endif mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0, this, SLOT( editContact2() ), actionCollection(), "file_properties" ); #ifdef KAB_EMBEDDED // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() ); mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0, mMainWindow, SLOT( exit() ), actionCollection(), "quit" ); #endif //KAB_EMBEDDED // edit menu if ( mIsPart ) { - mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this, + mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", Qt::CTRL + Qt::Key_C, this, SLOT( copyContacts() ), actionCollection(), "kaddressbook_copy" ); - mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this, + mActionCut = new KAction( i18n( "Cu&t" ), "editcut", Qt::CTRL + Qt::Key_X, this, SLOT( cutContacts() ), actionCollection(), "kaddressbook_cut" ); - mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this, + mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", Qt::CTRL + Qt::Key_V, this, SLOT( pasteContacts() ), actionCollection(), "kaddressbook_paste" ); - mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this, + mActionSelectAll = new KAction( i18n( "Select &All" ), Qt::CTRL + Qt::Key_A, this, SLOT( selectAllContacts() ), actionCollection(), "kaddressbook_select_all" ); - mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this, + mActionUndo = new KAction( i18n( "&Undo" ), "undo", Qt::CTRL + Qt::Key_Z, this, SLOT( undo() ), actionCollection(), "kaddressbook_undo" ); - mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z, + mActionRedo = new KAction( i18n( "Re&do" ), "redo", Qt::CTRL + Qt::SHIFT + Qt::Key_Z, this, SLOT( redo() ), actionCollection(), "kaddressbook_redo" ); } else { mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() ); mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() ); mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() ); mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() ); mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() ); mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() ); } mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete", - Key_Delete, this, SLOT( deleteContacts() ), + Qt::Key_Delete, this, SLOT( deleteContacts() ), actionCollection(), "edit_delete" ); mActionUndo->setEnabled( false ); mActionRedo->setEnabled( false ); // settings menu #ifdef KAB_EMBEDDED //US special menuentry to configure the addressbook resources. On KDE // you do that through the control center !!! mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this, SLOT( configureResources() ), actionCollection(), "kaddressbook_configure_resources" ); #endif //KAB_EMBEDDED if ( mIsPart ) { mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this, SLOT( openConfigDialog() ), actionCollection(), "kaddressbook_configure" ); //US not implemented yet //mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0, // this, SLOT( configureKeyBindings() ), actionCollection(), // "kaddressbook_configure_shortcuts" ); #ifdef KAB_EMBEDDED mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() ); mActionConfigureToolbars->setEnabled( false ); #endif //KAB_EMBEDDED } else { mActionConfigKAddressbook = new KAction( i18n( "&Configure KA/Pi..." ), "configure", 0, this, SLOT( openConfigDialog() ), actionCollection(), "kaddressbook_configure" ); mActionConfigGlobal = new KAction( i18n( "Global Settings..." ), "configure", 0, this, SLOT( openConfigGlobalDialog() ), actionCollection(), "kaddressbook_configure" ); } mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0, actionCollection(), "options_show_jump_bar" ); connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBar( bool ) ) ); mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0, actionCollection(), "options_show_details" ); connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) ); mActionBR = new KToggleAction( i18n( "Beam receive enabled" ), "beam", 0, this, SLOT( toggleBeamReceive() ), actionCollection(), "kaddressbook_beam_rec" ); // misc // only enable LDAP lookup if we can handle the protocol #ifndef KAB_EMBEDDED if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) { new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0, this, SLOT( openLDAPDialog() ), actionCollection(), "ldap_lookup" ); } #else //KAB_EMBEDDED //qDebug("KABCore::initActions() LDAP has to be implemented"); #endif //KAB_EMBEDDED mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this, SLOT( setWhoAmI() ), actionCollection(), "set_personal" ); mActionCategories = new KAction( i18n( "Set Categories for Contacts..." ), 0, this, SLOT( setCategories() ), actionCollection(), "edit_set_categories" ); mActionEditCategories = new KAction( i18n( "Edit Category List..." ), 0, this, SLOT( editCategories() ), actionCollection(), "edit__categories" ); mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this, SLOT( removeVoice() ), actionCollection(), "remove_voice" ); mActionSetFormattedName = new KAction( i18n( "Set formatted name..." ), 0, this, SLOT( setFormattedName() ), actionCollection(), "set_formatted" ); mActionManageCategories= new KAction( i18n( "Manage new categories..." ), 0, this, SLOT( manageCategories() ), actionCollection(), "remove_voice" ); mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this, SLOT( importFromOL() ), actionCollection(), "import_OL" ); #ifdef KAB_EMBEDDED mActionLicence = new KAction( i18n( "Licence" ), 0, this, SLOT( showLicence() ), actionCollection(), "licence_about_data" ); mActionFaq = new KAction( i18n( "Faq" ), 0, this, SLOT( faq() ), actionCollection(), "faq_about_data" ); mActionWN = new KAction( i18n( "What's New?" ), 0, this, SLOT( whatsnew() ), actionCollection(), "wn" ); mActionStorageHowto = new KAction( i18n( "Storage HowTo" ), 0, this, SLOT( storagehowto() ), actionCollection(), "storage" ); mActionSyncHowto = new KAction( i18n( "Sync HowTo" ), 0, this, SLOT( synchowto() ), actionCollection(), "sync" ); mActionKdeSyncHowto = new KAction( i18n( "Kde Sync HowTo" ), 0, this, SLOT( kdesynchowto() ), actionCollection(), "kdesync" ); mActionMultiSyncHowto = new KAction( i18n( "Multi Sync HowTo" ), 0, this, SLOT( multisynchowto() ), actionCollection(), "multisync" ); mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, this, SLOT( createAboutData() ), actionCollection(), "kaddressbook_about_data" ); #endif //KAB_EMBEDDED clipboardDataChanged(); connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); } //US we need this function, to plug all actions into the correct menues. // KDE uses a XML format to plug the actions, but we work her without this overhead. void KABCore::addActionsManually() { //US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); #ifdef KAB_EMBEDDED - QPopupMenu *fileMenu = new QPopupMenu( this ); - QPopupMenu *editMenu = new QPopupMenu( this ); - QPopupMenu *helpMenu = new QPopupMenu( this ); + Q3PopupMenu *fileMenu = new Q3PopupMenu( this ); + Q3PopupMenu *editMenu = new Q3PopupMenu( this ); + Q3PopupMenu *helpMenu = new Q3PopupMenu( this ); KToolBar* tb = mMainWindow->toolBar(); mMainWindow->setToolBarsMovable (false ); #ifndef DESKTOP_VERSION if ( KABPrefs::instance()->mFullMenuBarVisible ) { #endif QMenuBar* mb = mMainWindow->menuBar(); //US setup menubar. //Disable the following block if you do not want to have a menubar. mb->insertItem( i18n("&File"), fileMenu ); mb->insertItem( i18n("&Edit"), editMenu ); mb->insertItem( i18n("&View"), viewMenu ); mb->insertItem( i18n("&Settings"), settingsMenu ); #ifdef DESKTOP_VERSION mb->insertItem( i18n("Synchronize"), syncMenu ); #else mb->insertItem( i18n("Sync"), syncMenu ); #endif //mb->insertItem( i18n("&Change"), changeMenu ); mb->insertItem( i18n("&Help"), helpMenu ); mIncSearchWidget = new IncSearchWidget( tb ); // tb->insertWidget(-1, 0, mIncSearchWidget); #ifndef DESKTOP_VERSION } else { //US setup toolbar QPEMenuBar *menuBarTB = new QPEMenuBar( tb ); - QPopupMenu *popupBarTB = new QPopupMenu( this ); + Q3PopupMenu *popupBarTB = new Q3PopupMenu( this ); menuBarTB->insertItem( SmallIcon( "z_menu" ) , popupBarTB); tb->insertWidget(-1, 0, menuBarTB); mIncSearchWidget = new IncSearchWidget( tb ); tb->enableMoving(false); popupBarTB->insertItem( i18n("&File"), fileMenu ); popupBarTB->insertItem( i18n("&Edit"), editMenu ); popupBarTB->insertItem( i18n("&View"), viewMenu ); popupBarTB->insertItem( i18n("&Settings"), settingsMenu ); popupBarTB->insertItem( i18n("Synchronize"), syncMenu ); mViewManager->getFilterAction()->plug ( popupBarTB); //popupBarTB->insertItem( i18n("&Change selected"), changeMenu ); popupBarTB->insertItem( i18n("&Help"), helpMenu ); if (QApplication::desktop()->width() > 320 ) { // mViewManager->getFilterAction()->plug ( tb); } } #endif mIncSearchWidget->setSize(); // mActionQuit->plug ( mMainWindow->toolBar()); //US Now connect the actions with the menue entries. #ifdef DESKTOP_VERSION mActionPrint->plug( fileMenu ); mActionPrintDetails->plug( fileMenu ); fileMenu->insertSeparator(); #endif mActionMail->plug( fileMenu ); fileMenu->insertSeparator(); mActionNewContact->plug( editMenu ); mActionNewContact->plug( tb ); mActionEditAddressee->plug( editMenu ); editMenu->insertSeparator(); // if ((KGlobal::getDesktopSize() > KGlobal::Small ) || // (!KABPrefs::instance()->mMultipleViewsAtOnce )) mActionEditAddressee->plug( tb ); // fileMenu->insertSeparator(); mActionSave->plug( fileMenu ); fileMenu->insertItem( "&Import", ImportMenu ); fileMenu->insertItem( "&Export", ExportMenu ); editMenu->insertItem( i18n("&Change"), changeMenu ); editMenu->insertSeparator(); #ifndef DESKTOP_VERSION if ( Ir::supported() ) fileMenu->insertItem( i18n("&Beam"), beamMenu ); #endif #if 0 // PENDING fix MailVCard fileMenu->insertSeparator(); mActionMailVCard->plug( fileMenu ); #endif #ifndef DESKTOP_VERSION if ( Ir::supported() ) mActionBR->plug( beamMenu ); if ( Ir::supported() ) mActionBeamVCard->plug( beamMenu ); if ( Ir::supported() ) mActionBeam->plug( beamMenu ); #endif fileMenu->insertSeparator(); mActionQuit->plug( fileMenu ); #ifdef _OL_IMPORT_ mActionImportOL->plug( ImportMenu ); #endif // edit menu mActionUndo->plug( editMenu ); mActionRedo->plug( editMenu ); editMenu->insertSeparator(); mActionCut->plug( editMenu ); mActionCopy->plug( editMenu ); mActionPaste->plug( editMenu ); mActionDelete->plug( editMenu ); editMenu->insertSeparator(); mActionSelectAll->plug( editMenu ); mActionSetFormattedName->plug( changeMenu ); mActionRemoveVoice->plug( changeMenu ); // settingsmings menu //US special menuentry to configure the addressbook resources. On KDE // you do that through the control center !!! // settingsMenu->insertSeparator(); mActionConfigKAddressbook->plug( settingsMenu, 0 ); mActionConfigGlobal->plug( settingsMenu, 1 ); mActionConfigResources->plug( settingsMenu,2 ); settingsMenu->insertSeparator(3); if ( mIsPart ) { //US not implemented yet //mActionConfigShortcuts->plug( settingsMenu ); //mActionConfigureToolbars->plug( settingsMenu ); } else { //US not implemented yet //mActionKeyBindings->plug( settingsMenu ); } mActionEditCategories->plug( settingsMenu ); mActionManageCategories->plug( settingsMenu ); mActionJumpBar->plug( viewMenu,0 ); mActionDetails->plug( viewMenu,0 ); //if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop ) mActionDetails->plug( tb ); settingsMenu->insertSeparator(); #ifndef DESKTOP_VERSION if ( Ir::supported() ) mActionBR->plug(settingsMenu ); settingsMenu->insertSeparator(); #endif mActionWhoAmI->plug( settingsMenu ); //mActionEditCategories->plug( changeMenu ); mActionCategories->plug( changeMenu ); //mActionManageCategories->plug( changeMenu ); //mActionCategories->plug( settingsMenu ); mActionWN->plug( helpMenu ); mActionStorageHowto->plug( helpMenu ); mActionSyncHowto->plug( helpMenu ); mActionKdeSyncHowto->plug( helpMenu ); mActionMultiSyncHowto->plug( helpMenu ); mActionFaq->plug( helpMenu ); mActionLicence->plug( helpMenu ); mActionAboutKAddressbook->plug( helpMenu ); if (KGlobal::getDesktopSize() > KGlobal::Small ) { mActionSave->plug( tb ); mViewManager->getFilterAction()->plug ( tb); //LR hide filteraction on started in 480x640 if (QApplication::desktop()->width() == 480 ) { mViewManager->getFilterAction()->setComboWidth( 0 ); } mActionUndo->plug( tb ); mActionDelete->plug( tb ); mActionRedo->plug( tb ); } else { mActionSave->plug( tb ); tb->enableMoving(false); } //mActionQuit->plug ( tb ); //tb->insertWidget(-1, 0, mIncSearchWidget, 6); //US link the searchwidget first to this. // The real linkage to the toolbar happens later. //US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); //US tb->insertItem( mIncSearchWidget ); /*US mIncSearchWidget = new IncSearchWidget( tb ); connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), SLOT( incrementalSearch( const QString& ) ) ); mJumpButtonBar = new JumpButtonBar( this, this ); //US topLayout->addWidget( mJumpButtonBar ); this->layout()->add( mJumpButtonBar ); */ #endif //KAB_EMBEDDED mActionExport2phone->plug( ExportMenu ); connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) ); syncManager->fillSyncMenu(); } void KABCore::showLicence() { KApplication::showLicence(); } void KABCore::manageCategories( ) { KABCatPrefs* cp = new KABCatPrefs(); cp->show(); int w =cp->sizeHint().width() ; int h = cp->sizeHint().height() ; int dw = QApplication::desktop()->width(); int dh = QApplication::desktop()->height(); cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); if ( !cp->exec() ) { delete cp; return; } int count = 0; int cc = 0; message( i18n("Please wait, processing categories...")); if ( cp->addCat() ) { KABC::AddressBook::Iterator it; QStringList catList = KABPrefs::instance()->mCustomCategories; for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { ++cc; if ( cc %10 == 0) message(i18n("Processing contact #%1").arg(cc)); QStringList catIncList = (*it).categories(); int i; for( i = 0; i< catIncList.count(); ++i ) { if ( !catList.contains (catIncList[i])) { catList.append( catIncList[i] ); //qDebug("add cat %s ", catIncList[i].latin1()); ++count; } } } catList.sort(); KABPrefs::instance()->mCustomCategories = catList; KABPrefs::instance()->writeConfig(); message(QString::number( count )+ i18n(" categories added to list! ")); } else { QStringList catList = KABPrefs::instance()->mCustomCategories; QStringList catIncList; QStringList newCatList; KABC::AddressBook::Iterator it; for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { ++cc; if ( cc %10 == 0) message(i18n("Processing contact #%1").arg(cc)); QStringList catIncList = (*it).categories(); int i; if ( catIncList.count() ) { newCatList.clear(); for( i = 0; i< catIncList.count(); ++i ) { if ( catList.contains (catIncList[i])) { newCatList.append( catIncList[i] ); } } newCatList.sort(); (*it).setCategories( newCatList ); mAddressBook->insertAddressee( (*it) ); } } setModified( true ); mViewManager->refreshView(); message( i18n("Removing categories done!")); } delete cp; } void KABCore::removeVoice() { if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No ) return; XXPortSelectDialog dlg( this, false, this ); if ( !dlg.exec() ) return; mAddressBook->setUntagged(); dlg.tagSelected(); message(i18n("Removing voice..."), false ); KABC::AddressBook::Iterator it; for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { if ( (*it).tagged() ) { (*it).removeVoice(); } } message(i18n("Refreshing view...") ); mViewManager->refreshView( "" ); Addressee add; mDetails->setAddressee( add ); message(i18n("Remove voice completed!") ); } void KABCore::setFormattedName() { KABFormatPrefs setpref; if ( !setpref.exec() ) { return; } XXPortSelectDialog dlg( this, false, this ); if ( !dlg.exec() ) return; mAddressBook->setUntagged(); dlg.tagSelected(); int count = 0; KABC::AddressBook::Iterator it; bool modified = false; for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { if ( (*it).tagged() ) { if ( (*it).uid().left( 2 ) == "la" ) if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) continue; ++count; if ( count %10 == 0 ) message(i18n("Changing contact #%1").arg( count ) ); QString fName; if ( setpref.simple->isChecked() ) fName = NameEditDialog::formattedName( (*it), NameEditDialog::SimpleName ); else if ( setpref.full->isChecked() ) fName = NameEditDialog::formattedName( (*it), NameEditDialog::FullName ); else if ( setpref.reverse->isChecked() ) fName = NameEditDialog::formattedName( (*it), NameEditDialog::ReverseName ); else fName = (*it).organization(); if ( setpref.setCompany->isChecked() ) if ( fName.isEmpty() || fName =="," ) fName = (*it).organization(); (*it).setFormattedName( fName ); (*it).setChanged( true ); modified = true; (*it).setRevision( QDateTime::currentDateTime() ); } } message(i18n("Refreshing view...") ); if ( modified ) setModified( true ); Addressee add; mDetails->setAddressee( add ); if ( count == 0 ) message(i18n("No contact changed!") ); else message(i18n("%1 contacts changed!").arg( count ) ); } void KABCore::clipboardDataChanged() { if ( mReadWrite ) mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); } void KABCore::updateActionMenu() { UndoStack *undo = UndoStack::instance(); RedoStack *redo = RedoStack::instance(); if ( undo->isEmpty() ) mActionUndo->setText( i18n( "Undo" ) ); else mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) ); mActionUndo->setEnabled( !undo->isEmpty() ); if ( !redo->top() ) mActionRedo->setText( i18n( "Redo" ) ); else mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) ); mActionRedo->setEnabled( !redo->isEmpty() ); } void KABCore::configureKeyBindings() { #ifndef KAB_EMBEDDED KKeyDialog::configure( actionCollection(), true ); #else //KAB_EMBEDDED qDebug("KABCore::configureKeyBindings() not implemented"); #endif //KAB_EMBEDDED } #ifdef KAB_EMBEDDED void KABCore::configureResources() { - KRES::KCMKResources dlg( this, "" , 0 ); + KRES::KCMKResources dlg( this, "" , QStringList() ); if ( !dlg.exec() ) return; KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") ); } #endif //KAB_EMBEDDED /* this method will be called through the QCop interface from Ko/Pi to select addresses * for the attendees list of an event. */ void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid) { qDebug("KABCore::requestForNameEmailUidList "); bool ok = false; mEmailSourceChannel = sourceChannel; mEmailSourceUID = uid; QTimer::singleShot( 10,this, SLOT ( callContactdialog() ) ); //callContactdialog(); #if 0 int wid = uid.toInt( &ok ); qDebug("UID %s ", uid.latin1()); if ( ok ) { if ( wid != QApplication::desktop()->width() ) { qDebug("KA/Pi: Request from different desktop geometry. Resizing ..."); message( i18n("Resizing, please wait...") ); mMainWindow->showMinimized(); /* { QCopEnvelope e("QPE/Application/kapi", "callContactdialog()"); } */ QTimer::singleShot( 1,this, SLOT ( resizeAndCallContactdialog() ) ); return; } } else { qDebug("KABCore::requestForNameEmailUidList:: Got invalid uid "); } callContactdialog(); //QCopEnvelope e("QPE/Application/kapi", "callContactdialog()"); #endif } void KABCore::resizeAndCallContactdialog() { updateMainWindow(); QTimer::singleShot( 10,this, SLOT ( callContactdialog() ) ); } void KABCore::doRingSync() { topLevelWidget()->raise(); syncManager->multiSync( false ); } void KABCore::callContactdialog() { static bool running = false; if (running) return; running = true; QStringList nameList; QStringList emailList; QStringList uidList; qDebug(" KABCore::callContactdialog:DESKTOP WIDTH %d ", QApplication::desktop()->width() ); KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); uint i=0; for (i=0; i < list.count(); i++) { nameList.append(list[i].realName()); emailList.append(list[i].preferredEmail()); uidList.append(list[i].uid()); } QString uid = mEmailSourceUID; //qDebug("%s %s ", sourceChannel.latin1(), uid.latin1()); bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(mEmailSourceChannel, uid, nameList, emailList, uidList); running = false; } /* this method will be called through the QCop interface from Ko/Pi to select birthdays * to put them into the calendar. */ void KABCore::requestForBirthdayList(const QString& sourceChannel, const QString& uid) { // qDebug("KABCore::requestForBirthdayList"); QStringList birthdayList; QStringList anniversaryList; QStringList realNameList; QStringList preferredEmailList; QStringList assembledNameList; QStringList uidList; KABC::AddressBook::Iterator it; int count = 0; for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { ++count; } - QProgressBar bar(count,0 ); + Q3ProgressBar bar(count,0 ); int w = 300; if ( QApplication::desktop()->width() < 320 ) w = 220; int h = bar.sizeHint().height() ; int dw = QApplication::desktop()->width(); int dh = QApplication::desktop()->height(); bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); bar.show(); bar.setCaption (i18n("Collecting birthdays - close to abort!") ); qApp->processEvents(); QDate bday; QString anni; QString formattedbday; for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { if ( ! bar.isVisible() ) return; bar.setProgress( count++ ); qApp->processEvents(); bday = (*it).birthday().date(); anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" ); if ( bday.isValid() || !anni.isEmpty()) { if (bday.isValid()) formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate); else formattedbday = "NOTVALID"; if (anni.isEmpty()) anni = "INVALID"; birthdayList.append(formattedbday); anniversaryList.append(anni); //should be ISODate realNameList.append((*it).realName()); preferredEmailList.append((*it).preferredEmail()); assembledNameList.append((*it).realName()); uidList.append((*it).uid()); //qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() ); } } bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList); } /* this method will be called through the QCop interface from other apps to show details of a contact. */ void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) { //qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1()); QString foundUid = QString::null; if ( ! uid.isEmpty() ) { Addressee adrr = mAddressBook->findByUid( uid ); if ( !adrr.isEmpty() ) { foundUid = uid; } if ( email == "sendbacklist" ) { //qDebug("ssssssssssssssssssssssend "); QStringList nameList; QStringList emailList; QStringList uidList; nameList.append(adrr.realName()); emailList = adrr.emails(); uidList.append( adrr.preferredEmail()); bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); return; } } if ( email == "sendbacklist" ) return; if (foundUid.isEmpty()) { //find the uid of the person first Addressee::List namelist; Addressee::List emaillist; if (!name.isEmpty()) namelist = mAddressBook->findByName( name ); if (!email.isEmpty()) emaillist = mAddressBook->findByEmail( email ); //qDebug("count %d %d ", namelist.count(),emaillist.count() ); //check if we have a match in Namelist and Emaillist if ((namelist.count() == 0) && (emaillist.count() > 0)) { foundUid = emaillist[0].uid(); } else if ((namelist.count() > 0) && (emaillist.count() == 0)) foundUid = namelist[0].uid(); else { for (int i = 0; i < namelist.count(); i++) { for (int j = 0; j < emaillist.count(); j++) { if (namelist[i] == emaillist[j]) { foundUid = namelist[i].uid(); } } } } } else { foundUid = uid; } if (!foundUid.isEmpty()) { // raise Ka/Pi if it is in the background #ifndef DESKTOP_VERSION #ifndef KORG_NODCOP //QCopEnvelope e("QPE/Application/kapi", "raise()"); #endif #endif mMainWindow->showMaximized(); mMainWindow-> raise(); mViewManager->setSelected( "", false); mViewManager->refreshView( "" ); mViewManager->setSelected( foundUid, true ); mViewManager->refreshView( foundUid ); if ( !mMultipleViewsAtOnce ) { setDetailsVisible( true ); mActionDetails->setChecked(true); } } } void KABCore::storagehowto() { KApplication::showFile( "KDE-Pim/Pi Storage HowTo", "kdepim/storagehowto.txt" ); } void KABCore::whatsnew() { KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); } void KABCore::synchowto() { KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" ); } void KABCore::kdesynchowto() { KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/Zaurus-KDE_syncHowTo.txt" ); } void KABCore::multisynchowto() { KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" ); } void KABCore::faq() { KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); } #include <libkcal/syncdefines.h> KABC::Addressee KABCore::getLastSyncAddressee() { Addressee lse; QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); if (lse.isEmpty()) { qDebug("KA: Creating new last-syncAddressee "); lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); QString sum = ""; if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) sum = "E: "; lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); lse.setRevision( mLastAddressbookSync ); - lse.setCategories( i18n("SyncEvent") ); + lse.setCategories( QStringList(i18n("SyncEvent")) ); mAddressBook->insertAddressee( lse ); } return lse; } int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) { //void setZaurusId(int id); // int zaurusId() const; // void setZaurusUid(int id); // int zaurusUid() const; // void setZaurusStat(int id); // int zaurusStat() const; // 0 equal // 1 take local // 2 take remote // 3 cancel QDateTime lastSync = mLastAddressbookSync; QDateTime localMod = local->revision(); QDateTime remoteMod = remote->revision(); QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { bool remCh, locCh; remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); //if ( remCh ) // qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); locCh = ( localMod > mLastAddressbookSync ); //qDebug("cahnged rem %d loc %d",remCh, locCh ); if ( !remCh && ! locCh ) { //qDebug("both not changed "); lastSync = localMod.addDays(1); if ( mode <= SYNC_PREF_ASK ) return 0; } else { if ( locCh ) { //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); lastSync = localMod.addDays( -1 ); if ( !remCh ) remoteMod =( lastSync.addDays( -1 ) ); } else { //qDebug(" not loc changed "); lastSync = localMod.addDays( 1 ); if ( remCh ) { //qDebug("rem changed "); remoteMod =( lastSync.addDays( 1 ) ); } } } full = true; if ( mode < SYNC_PREF_ASK ) mode = SYNC_PREF_ASK; } else { if ( localMod == remoteMod ) return 0; } //qDebug("%s %s --- %d %d", localMod.toString().latin1() , remoteMod.toString().latin1(), localMod.time().msec(), remoteMod.time().msec()); //qDebug("lastsync %s ", lastSync.toString().latin1() ); //full = true; //debug only if ( full ) { bool equ = ( (*local) == (*remote) ); if ( equ ) { //qDebug("equal "); if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); } if ( mode < SYNC_PREF_FORCE_LOCAL ) return 0; }//else //debug only //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); } int result; bool localIsNew; //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() ); if ( full && mode < SYNC_PREF_NEWEST ) mode = SYNC_PREF_ASK; switch( mode ) { case SYNC_PREF_LOCAL: if ( lastSync > remoteMod ) return 1; if ( lastSync > localMod ) return 2; return 1; break; case SYNC_PREF_REMOTE: if ( lastSync > localMod ) return 2; if ( lastSync > remoteMod ) return 1; return 2; break; case SYNC_PREF_NEWEST: if ( localMod > remoteMod ) return 1; else return 2; break; case SYNC_PREF_ASK: //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); if ( lastSync > remoteMod && lastSync > localMod) return 0; if ( lastSync > remoteMod ) return 1; if ( lastSync > localMod ) { return 2; } localIsNew = localMod >= remoteMod; //qDebug("conflict! ************************************** "); { KABC::AddresseeChooser acd ( *local,*remote, localIsNew , this ); result = acd.executeD(localIsNew); return result; } break; case SYNC_PREF_FORCE_LOCAL: return 1; break; case SYNC_PREF_FORCE_REMOTE: return 2; break; default: // SYNC_PREF_TAKE_BOTH not implemented break; } return 0; } bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) { bool syncOK = true; int addedAddressee = 0; int addedAddresseeR = 0; int deletedAddresseeR = 0; int deletedAddresseeL = 0; int changedLocal = 0; int changedRemote = 0; int filteredIN = 0; int filteredOUT = 0; QString mCurrentSyncName = syncManager->getCurrentSyncName(); QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); //QPtrList<Addressee> el = local->rawAddressees(); Addressee addresseeR; QString uid; int take; Addressee addresseeL; Addressee addresseeRSync; Addressee addresseeLSync; // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); bool fullDateRange = false; local->resetTempSyncStat(); mLastAddressbookSync = QDateTime::currentDateTime(); if ( syncManager->syncWithDesktop() ) { // remote->removeSyncInfo( QString());//remove all info if ( KSyncManager::mRequestedSyncEvent.isValid() ) { mLastAddressbookSync = KSyncManager::mRequestedSyncEvent; qDebug("KA: using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() ); } else { qDebug("KA: KSyncManager::mRequestedSyncEvent has invalid datatime "); } } QDateTime modifiedCalendar = mLastAddressbookSync; addresseeLSync = getLastSyncAddressee(); qDebug("KA: Last Sync %s ", addresseeLSync.revision().toString().latin1()); addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); if ( !addresseeR.isEmpty() ) { addresseeRSync = addresseeR; remote->removeAddressee(addresseeR ); } else { if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { addresseeRSync = addresseeLSync ; } else { //qDebug("FULLDATE 1"); fullDateRange = true; Addressee newAdd; addresseeRSync = newAdd; addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); addresseeRSync.setRevision( mLastAddressbookSync ); - addresseeRSync.setCategories( i18n("SyncAddressee") ); + addresseeRSync.setCategories( QStringList(i18n("SyncAddressee")) ); } } if ( addresseeLSync.revision() == mLastAddressbookSync ) { // qDebug("FULLDATE 2"); fullDateRange = true; } if ( ! fullDateRange ) { if ( addresseeLSync.revision() != addresseeRSync.revision() ) { // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); fullDateRange = true; //qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); } } // fullDateRange = true; // debug only! if ( fullDateRange ) mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); else mLastAddressbookSync = addresseeLSync.revision(); // for resyncing if own file has changed // PENDING fixme later when implemented #if 0 if ( mCurrentSyncDevice == "deleteaftersync" ) { mLastAddressbookSync = loadedFileVersion; qDebug("setting mLastAddressbookSync "); } #endif // ********** setting filters **************** Filter filterIN = mViewManager->getFilterByName( syncManager->mFilterInAB ); Filter filterOUT = mViewManager->getFilterByName( syncManager->mFilterOutAB ); //qDebug("*************************** "); // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); QStringList er = remote->uidList(); Addressee inR ;//= er.first(); Addressee inL; syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count()); int modulo = (er.count()/10)+1; int incCounter = 0; while ( incCounter < er.count()) { if (syncManager->isProgressBarCanceled()) return false; if ( incCounter % modulo == 0 ) syncManager->showProgressBar(incCounter); uid = er[ incCounter ]; bool skipIncidence = false; if ( uid.left(19) == QString("last-syncAddressee-") ) skipIncidence = true; QString idS,OidS; qApp->processEvents(); if ( !skipIncidence ) { inL = local->findByUid( uid ); inR = remote->findByUid( uid ); //inL.setResource( 0 ); //inR.setResource( 0 ); if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars if ( !inL.resource() || inL.resource()->includeInSync() ) { if ( (take = takeAddressee( &inL, &inR, mode, fullDateRange )) ) { //qDebug("take %d %s ", take, inL.summary().latin1()); if ( take == 3 ) return false; if ( take == 1 ) {// take local ********************** if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); local->insertAddressee( inL, false ); idS = inR.externalUID(); OidS = inR.originalExternalUID(); } else idS = inR.IDStr(); remote->removeAddressee( inR ); inR = inL; inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { inR.setOriginalExternalUID( OidS ); inR.setExternalUID( idS ); if ( syncManager->syncWithDesktop() ) { inR.setIDStr("changed" ); } //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" ); } else { inR.setIDStr( idS ); } inR.setResource( 0 ); remote->insertAddressee( inR , false); ++changedRemote; } else { // take == 2 take remote ********************** if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { if ( inR.revision().date().year() < 2004 ) inR.setRevision( modifiedCalendar ); } idS = inL.IDStr(); local->removeAddressee( inL ); inL = inR; inL.setIDStr( idS ); if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); } inL.setResource( 0 ); local->insertAddressee( inL , false ); ++changedLocal; } } } } else { // no conflict ********** add or delete remote if ( filterIN.name().isEmpty() || filterIN.filterAddressee( inR ) ) { if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { QString des = addresseeLSync.note(); if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); remote->insertAddressee( inR, false ); ++deletedAddresseeR; } else { inR.setRevision( modifiedCalendar ); remote->insertAddressee( inR, false ); inL = inR; inL.setIDStr( ":" ); inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); inL.setResource( 0 ); local->insertAddressee( inL , false); ++addedAddressee; } } else { if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { inR.setRevision( modifiedCalendar ); remote->insertAddressee( inR, false ); inR.setResource( 0 ); local->insertAddressee( inR, false ); ++addedAddressee; } else { // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); remote->removeAddressee( inR ); ++deletedAddresseeR; } } } else { ++filteredIN; } } } ++incCounter; } er.clear(); QStringList el = local->uidList(); modulo = (el.count()/10)+1; syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count()); incCounter = 0; while ( incCounter < el.count()) { qApp->processEvents(); if (syncManager->isProgressBarCanceled()) return false; if ( incCounter % modulo == 0 ) syncManager->showProgressBar(incCounter); uid = el[ incCounter ]; bool skipIncidence = false; if ( uid.left(19) == QString("last-syncAddressee-") ) skipIncidence = true; if ( !skipIncidence ) { inL = local->findByUid( uid ); if ( !inL.resource() || inL.resource()->includeInSync() ) { inR = remote->findByUid( uid ); if ( inR.isEmpty() ){ if ( filterOUT.name().isEmpty() || filterOUT.filterAddressee( inL ) ) { // no conflict ********** add or delete local if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); local->removeAddressee( inL ); ++deletedAddresseeL; } else { if ( ! syncManager->mWriteBackExistingOnly ) { inL.removeID(mCurrentSyncDevice ); ++addedAddresseeR; inL.setRevision( modifiedCalendar ); local->insertAddressee( inL, false ); inR = inL; inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); inR.setResource( 0 ); remote->insertAddressee( inR, false ); } } } else { if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { //qDebug("data %s ", inL.revision().toString().latin1()); // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); local->removeAddressee( inL ); ++deletedAddresseeL; } else { if ( ! syncManager->mWriteBackExistingOnly ) { ++addedAddresseeR; inL.setRevision( modifiedCalendar ); local->insertAddressee( inL, false ); inR = inL; inR.setIDStr( ":" ); inR.setResource( 0 ); remote->insertAddressee( inR, false ); } } } } else { ++filteredOUT; } } } } ++incCounter; } el.clear(); syncManager->hideProgressBar(); mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); // get rid of micro seconds QTime t = mLastAddressbookSync.time(); mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); addresseeLSync.setRevision( mLastAddressbookSync ); addresseeRSync.setRevision( mLastAddressbookSync ); addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); addresseeRSync.setNote( "" ) ; addresseeLSync.setNote( "" ); if ( mGlobalSyncMode == SYNC_MODE_NORMAL) remote->insertAddressee( addresseeRSync, false ); local->insertAddressee( addresseeLSync, false ); QString mes; mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR, filteredIN, filteredOUT ); qDebug( mes ); mes = i18n("Local addressbook changed!\n") +mes; if ( syncManager->mShowSyncSummary ) { if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, i18n("KA/Pi Synchronization"),i18n("Write back"))) { qDebug("KA: WB cancelled "); syncManager->mWriteBackFile = false; return syncOK; } } return syncOK; } //this is a overwritten callbackmethods from the syncinterface bool KABCore::sync(KSyncManager* manager, QString filename, int mode,QString resource) { //pending prepare addresseeview for output //pending detect, if remote file has REV field. if not switch to external sync mGlobalSyncMode = SYNC_MODE_NORMAL; if ( manager != syncManager ) qDebug("KABCore::sync:: ERROR! :: manager != syncManager "); QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); AddressBook abLocal(filename,"syncContact"); bool syncOK = false; if ( abLocal.load() ) { qDebug("KA: Sync::AB loaded %s,sync mode %d",filename.latin1(), mode ); bool external = false; bool isXML = false; if ( filename.right(4) == ".xml") { mGlobalSyncMode = SYNC_MODE_EXTERNAL; isXML = true; abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); } else { external = !manager->mIsKapiFile; if ( external ) { qDebug("KA: Sync::Setting vcf mode to external "); mGlobalSyncMode = SYNC_MODE_EXTERNAL; AddressBook::Iterator it; for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { (*it).setID( mCurrentSyncDevice, (*it).uid() ); (*it).computeCsum( mCurrentSyncDevice ); } } } //AddressBook::Iterator it; //QStringList vcards; //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { // qDebug("Name %s ", (*it).familyName().latin1()); //} syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); syncManager->hideProgressBar(); if ( syncOK ) { if ( syncManager->mWriteBackFile ) { if ( external ) abLocal.removeSyncAddressees( !isXML); qDebug("KA: Sync::Saving remote AB "); if ( ! abLocal.saveAB()) qDebug("KA: sync::Error writing back AB to file "); if ( external ) { // afterwrite processing abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ,isXML); } } } setModified(); } abLocal.removeResources(); if ( syncOK ) mViewManager->refreshView(); return syncOK; } void KABCore::removeSyncInfo( QString syncProfile) { qDebug("KA: AB:removeSyncInfo for profile %s ", syncProfile.latin1()); mAddressBook->removeSyncInfo( syncProfile ); setModified(); } bool KABCore::syncOL() { disableBR( true ); QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); AddressBook abLocal; if ( ! readOLdata( &abLocal ) ) return false; bool syncOK = false; message(i18n("Data from OL loaded..."), false); mGlobalSyncMode = SYNC_MODE_EXTERNAL; message(i18n("Sync preprocessing..."),false); abLocal.preOLSync( mAddressBook ,mCurrentSyncDevice ); message(i18n("Synchronizing..."),false); syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); syncManager->hideProgressBar(); if ( syncOK ) { if ( syncManager->mWriteBackFile ) { abLocal.removeSyncAddressees( false ); message(i18n("Saving address data to OL..."),false); //abLocal.saveAB(); writeOLdata( &abLocal ); message(i18n("Sync postprocessing..."),false); abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); } } else message( i18n("Sync cancelled or failed.") ); setModified(); abLocal.removeResources(); if ( syncOK ) { mViewManager->refreshView(); message(i18n("OL syncing finished.")); } disableBR( false ); return syncOK; } //this is a overwritten callbackmethods from the syncinterface bool KABCore::syncExternal(KSyncManager* manager, QString resource) { if ( resource == "phone" ) return syncPhone(); if ( resource == "ol" ) return syncOL(); disableBR( true ); if ( manager != syncManager ) qDebug("KABCore::syncExternal:: ERROR! :: manager != syncManager "); QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); AddressBook abLocal( resource,"syncContact"); bool syncOK = false; message(i18n("Loading DTM address data..."), false); if ( abLocal.load() ) { qDebug("KA: AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); mGlobalSyncMode = SYNC_MODE_EXTERNAL; message(i18n("Sync preprocessing..."),false); abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, false ); message(i18n("Synchronizing..."),false); syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); syncManager->hideProgressBar(); if ( syncOK ) { if ( syncManager->mWriteBackFile ) { abLocal.removeSyncAddressees( false ); message(i18n("Saving DTM address data..."),false); abLocal.saveAB(); message(i18n("Sync postprocessing..."),false); abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); } } else message( i18n("Sync cancelled or failed.") ); setModified(); } abLocal.removeResources(); if ( syncOK ) { mViewManager->refreshView(); message(i18n("DTM syncing finished.")); } disableBR( false ); return syncOK; } void KABCore::message( QString m, bool startTimer) { topLevelWidget()->setCaption( m ); qApp->processEvents(); if ( startTimer ) mMessageTimer->start( 15000, true ); else mMessageTimer->stop(); } bool KABCore::syncPhone() { QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); QString fileName = getPhoneFile(); if ( !PhoneAccess::readFromPhone( fileName) ) { message(i18n("Phone access failed!")); return false; } AddressBook abLocal( fileName,"syncContact"); bool syncOK = false; { abLocal.importFromFile( fileName ); qDebug("KA: AB phone loaded ,sync device %s",mCurrentSyncDevice.latin1()); mGlobalSyncMode = SYNC_MODE_EXTERNAL; abLocal.preparePhoneSync( mCurrentSyncDevice, true ); abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); syncManager->hideProgressBar(); if ( syncOK ) { if ( syncManager->mWriteBackFile ) { abLocal.removeSyncAddressees( true ); abLocal.saveABphone( fileName ); abLocal.findNewExtIds( fileName, mCurrentSyncDevice ); //abLocal.preparePhoneSync( mCurrentSyncDevice, false ); abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); } } setModified(); } abLocal.removeResources(); if ( syncOK ) mViewManager->refreshView(); return syncOK; } void KABCore::getFile( bool success ,const QString & resource) { if ( ! success ) { message( i18n("Error receiving file. Nothing changed!") ); return; } int count = mAddressBook->importFromFile( sentSyncFile() , false, true ,resource); if ( count ) setModified( true ); message( i18n("Pi-Sync successful!") ); mViewManager->refreshView(); } void KABCore::syncFileRequest(const QString & resource) { if ( KABPrefs::instance()->mPassiveSyncWithDesktop ) { syncManager->slotSyncMenu( 999 ); } if ( resource == "ALL" ) { mAddressBook->export2File( sentSyncFile() ); } else mAddressBook->export2File( sentSyncFile(), resource); } QString KABCore::sentSyncFile() { #ifdef DESKTOP_VERSION return locateLocal( "tmp", "copysyncab.vcf" ); #else return QString( "/tmp/copysyncab.vcf" ); #endif } void KABCore::setCaptionBack() { mMessageTimer->stop(); topLevelWidget()->setCaption( i18n("KA/Pi") ); } diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h index ec6a9ec..4351720 100644 --- a/kaddressbook/kabcore.h +++ b/kaddressbook/kabcore.h @@ -1,540 +1,544 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KABCORE_H #define KABCORE_H #include <kabc/field.h> #ifndef KAB_EMBEDDED #endif //KAB_EMBEDDED -#include <qdict.h> +#include <q3dict.h> #include <qtimer.h> #include <qwidget.h> -#include <qpopupmenu.h> +#include <q3popupmenu.h> +//Added by qt3to4: +#include <Q3CString> +#include <QPixmap> +#include <QResizeEvent> #include <ksyncmanager.h> #ifndef DESKTOP_VERSION #include <qcopchannel_qws.h> #endif namespace KABC { class AddressBook; } #ifndef KAB_EMBEDDED class KAboutData; class KConfig; class KAddressBookService; class LDAPSearchDialog; #else //KAB_EMBEDDED class KAddressBookMain; //US class QAction; #endif //KAB_EMBEDDED class KCMultiDialog; class KXMLGUIClient; class ExtensionManager; class XXPortManager; class JumpButtonBar; class IncSearchWidget; class KDGanttMinimizeSplitter; class KAction; class KActionCollection; class KToggleAction; class KSyncProfile; class QAction; class QMenuBar; class QSplitter; class ViewContainer; class ViewManager; class AddresseeEditorDialog; class Ir; class KABCore : public QWidget, public KSyncInterface { Q_OBJECT public: KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name = 0 ); ~KABCore(); #ifdef KAB_EMBEDDED //US added functionality - QPopupMenu* getViewMenu() {return viewMenu;} - QPopupMenu* getFilterMenu() {return filterMenu;} - QPopupMenu* getSettingsMenu() {return settingsMenu;} + Q3PopupMenu* getViewMenu() {return viewMenu;} + Q3PopupMenu* getFilterMenu() {return filterMenu;} + Q3PopupMenu* getSettingsMenu() {return settingsMenu;} void addActionsManually(); #endif //KAB_EMBEDDED /** Restores the global settings. */ void restoreSettings(); /** Returns a pointer to the StdAddressBook of the application. */ KABC::AddressBook *addressBook() const; /** Returns a pointer to the KConfig object of the application. */ static KConfig *config(); /** Returns a pointer to the global KActionCollection object. So other classes can register their actions easily. */ KActionCollection *actionCollection() const; /** Returns the current search field of the Incremental Search Widget. */ KABC::Field *currentSearchField() const; /** Returns the uid list of the currently selected contacts. */ QStringList selectedUIDs() const; /** Displays the ResourceSelectDialog and returns the selected resource or a null pointer if no resource was selected by the user. */ KABC::Resource *requestResource( QWidget *parent ); #ifndef KAB_EMBEDDED static KAboutData *createAboutData(); #endif //KAB_EMBEDDED #ifdef KAB_EMBEDDED - inline QPopupMenu* getImportMenu() { return ImportMenu;} - inline QPopupMenu* getExportMenu() { return ExportMenu;} + inline Q3PopupMenu* getImportMenu() { return ImportMenu;} + inline Q3PopupMenu* getExportMenu() { return ExportMenu;} #endif //KAB_EMBEDDED public slots: #ifdef KAB_EMBEDDED void createAboutData(); #endif //KAB_EMBEDDED void setDetailsToggle(); void showLicence(); void faq(); void whatsnew() ; void synchowto() ; void storagehowto() ; void multisynchowto() ; void kdesynchowto() ; void writeToPhone(); /** Is called whenever a contact is selected in the view. */ void setContactSelected( const QString &uid ); /** Opens the preferred mail composer with all selected contacts as arguments. */ void sendMail(); /** Opens the preferred mail composer with the given contacts as arguments. */ void sendMail( const QString& email ); void mailVCard(); void mailVCard(const QStringList& uids); /** Beams the "WhoAmI contact. */ void beamMySelf(); void beamVCard(); void export2phone(); void beamVCard(const QStringList& uids); void beamDone( Ir *ir ); /** Starts the preferred web browser with the given URL as argument. */ void browse( const QString& url ); /** Select all contacts in the view. */ void selectAllContacts(); /** Deletes all selected contacts from the address book. */ void deleteContacts(); /** Deletes given contacts from the address book. @param uids The uids of the contacts, which shall be deleted. */ void deleteContacts( const QStringList &uids ); /** Copys the selected contacts into clipboard for later pasting. */ void copyContacts(); /** Cuts the selected contacts and stores them for later pasting. */ void cutContacts(); /** Paste contacts from clipboard into the address book. */ void pasteContacts(); /** Paste given contacts into the address book. @param list The list of addressee, which shall be pasted. */ void pasteContacts( KABC::Addressee::List &list ); /** Sets the whoAmI contact, that is used by many other programs to get personal information about the current user. */ void setWhoAmI(); /** Displays the category dialog and applies the result to all selected contacts. */ void setCategories(); void manageCategories(); void editCategories(); /** Sets the field list of the Incremental Search Widget. */ void setSearchFields( const KABC::Field::List &fields ); /** Search with the current search field for a contact, that matches the given text, and selects it in the view. */ void incrementalSearch( const QString& text ); void incrementalSearchJump( const QString& text ); /** Marks the address book as modified. */ void setModified(); /** Marks the address book as modified without refreshing the view. */ void setModifiedWOrefresh(); /** Marks the address book as modified concerning the argument. */ void setModified( bool modified ); /** Returns whether the address book is modified. */ bool modified() const; /** Called whenever an contact is modified in the contact editor dialog or the quick edit. */ void contactModified( const KABC::Addressee &addr ); void addrModified( const KABC::Addressee &addr, bool updateDetails = true ); /** DCOP METHODS. */ void addEmail( QString addr ); void importVCard( const KURL& url, bool showPreview ); void importVCard( const QString& vCard, bool showPreview ); void newContact(); QString getNameByPhone( const QString& phone ); /** END DCOP METHODS */ /** Saves the contents of the AddressBook back to disk. */ void save(); /** Undos the last command using the undo stack. */ void undo(); /** Redos the last command that was undone, using the redo stack. */ void redo(); /** Shows the edit dialog for the given uid. If the uid is QString::null, the method will try to find a selected addressee in the view. */ void editContact( const QString &uid /*US = QString::null*/ ); //US added a second method without defaultparameter void editContact2(); /** Shows or edits the detail view for the given uid. If the uid is QString::null, the method will try to find a selected addressee in the view. */ void executeContact( const QString &uid /*US = QString::null*/ ); /** Launches the configuration dialog. */ void openConfigDialog(); void openConfigGlobalDialog(); /** Launches the ldap search dialog. */ void openLDAPDialog(); /** Creates a KAddressBookPrinter, which will display the print dialog and do the printing. */ void print(); /** Registers a new GUI client, so plugins can register its actions. */ void addGUIClient( KXMLGUIClient *client ); void requestForNameEmailUidList(const QString& sourceChannel, const QString& sessionuid); void requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid); void requestForBirthdayList(const QString& sourceChannel, const QString& sessionuid); signals: void contactSelected( const QString &name ); void contactSelected( const QPixmap &pixmap ); public slots: void loadDataAfterStart(); void recieve(QString cmsg ); void getFile( bool success,const QString & ); void syncFileRequest(const QString &); void setDetailsVisible( bool visible ); void setDetailsToState(); void saveSettings(); private slots: void updateToolBar(); void updateMainWindow(); - void receive( const QCString& cmsg, const QByteArray& data ); - void receiveStart( const QCString& cmsg, const QByteArray& data ); + void receive( const Q3CString& cmsg, const QByteArray& data ); + void receiveStart( const Q3CString& cmsg, const QByteArray& data ); void toggleBeamReceive( ); void disableBR(bool); void setJumpButtonBarVisible( bool visible ); void setJumpButtonBar( bool visible ); void setCaptionBack(); void resizeAndCallContactdialog(); void callContactdialog(); void doRingSync(); void importFromOL(); void extensionModified( const KABC::Addressee::List &list ); void extensionChanged( int id ); void clipboardDataChanged(); void updateActionMenu(); void configureKeyBindings(); void removeVoice(); void setFormattedName(); #ifdef KAB_EMBEDDED void configureResources(); #endif //KAB_EMBEDDED void slotEditorDestroyed( const QString &uid ); void configurationChanged(); void addressBookChanged(); private: - QCString mCStringMess; + Q3CString mCStringMess; QByteArray mByteData; QString mEmailSourceChannel; QString mEmailSourceUID; void resizeEvent(QResizeEvent* e ); bool mBRdisabled; #ifndef DESKTOP_VERSION QCopChannel* infrared; #endif QTimer *mMessageTimer; void initGUI(); void initActions(); QString getPhoneFile(); AddresseeEditorDialog *createAddresseeEditorDialog( QWidget *parent, const char *name = 0 ); KXMLGUIClient *mGUIClient; KABC::AddressBook *mAddressBook; ViewManager *mViewManager; // QSplitter *mDetailsSplitter; KDGanttMinimizeSplitter *mExtensionBarSplitter; ViewContainer *mDetails; KDGanttMinimizeSplitter* mMiniSplitter; XXPortManager *mXXPortManager; JumpButtonBar *mJumpButtonBar; IncSearchWidget *mIncSearchWidget; ExtensionManager *mExtensionManager; KCMultiDialog *mConfigureDialog; #ifndef KAB_EMBEDDED LDAPSearchDialog *mLdapSearchDialog; #endif //KAB_EMBEDDED // QDict<AddresseeEditorDialog> mEditorDict; AddresseeEditorDialog *mEditorDialog; bool mReadWrite; bool mModified; bool mIsPart; bool mMultipleViewsAtOnce; //US file menu KAction *mActionMail; KAction *mActionBeam; KToggleAction *mActionBR; KAction *mActionExport2phone; KAction* mActionPrint; KAction* mActionPrintDetails; KAction* mActionNewContact; KAction *mActionSave; KAction *mActionEditAddressee; KAction *mActionMailVCard; KAction *mActionBeamVCard; KAction *mActionQuit; //US edit menu KAction *mActionCopy; KAction *mActionCut; KAction *mActionPaste; KAction *mActionSelectAll; KAction *mActionUndo; KAction *mActionRedo; KAction *mActionDelete; //US settings menu KAction *mActionConfigResources; KAction *mActionConfigGlobal; KAction *mActionConfigKAddressbook; KAction *mActionConfigShortcuts; KAction *mActionConfigureToolbars; KAction *mActionKeyBindings; KToggleAction *mActionJumpBar; KToggleAction *mActionDetails; KAction *mActionWhoAmI; KAction *mActionCategories; KAction *mActionEditCategories; KAction *mActionManageCategories; KAction *mActionAboutKAddressbook; KAction *mActionLicence; KAction *mActionFaq; KAction *mActionWN; KAction *mActionSyncHowto; KAction *mActionStorageHowto; KAction *mActionKdeSyncHowto; KAction *mActionMultiSyncHowto; KAction *mActionDeleteView; - QPopupMenu *viewMenu; - QPopupMenu *filterMenu; - QPopupMenu *settingsMenu; - QPopupMenu *changeMenu; - QPopupMenu *beamMenu; + Q3PopupMenu *viewMenu; + Q3PopupMenu *filterMenu; + Q3PopupMenu *settingsMenu; + Q3PopupMenu *changeMenu; + Q3PopupMenu *beamMenu; //US QAction *mActionSave; - QPopupMenu *ImportMenu; - QPopupMenu *ExportMenu; + Q3PopupMenu *ImportMenu; + Q3PopupMenu *ExportMenu; //LR additional methods KAction *mActionRemoveVoice; KAction *mActionSetFormattedName; KAction * mActionImportOL; #ifndef KAB_EMBEDDED KAddressBookService *mAddressBookService; #endif //KAB_EMBEDDED class KABCorePrivate; KABCorePrivate *d; //US bool mBlockSaveFlag; #ifdef KAB_EMBEDDED KAddressBookMain *mMainWindow; // should be the same like mGUIClient #endif //KAB_EMBEDDED //this are the overwritten callbackmethods from the syncinterface virtual bool sync(KSyncManager* manager, QString filename, int mode,QString resource); virtual bool syncExternal(KSyncManager* manager, QString resource); virtual void removeSyncInfo( QString syncProfile); bool readOLdata( KABC::AddressBook* local ); bool writeOLdata( KABC::AddressBook* local ); bool syncOL(); bool syncPhone(); void message( QString m , bool startTimer = true); // LR ******************************* // sync stuff! QString sentSyncFile(); - QPopupMenu *syncMenu; + Q3PopupMenu *syncMenu; KSyncManager* syncManager; int mGlobalSyncMode; bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode); KABC::Addressee getLastSyncAddressee(); QDateTime mLastAddressbookSync; int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ); // ********************* //OL sync stuff QString mOLsyncFolderID; }; #endif diff --git a/kaddressbook/kabprefs.cpp b/kaddressbook/kabprefs.cpp index 42d541b..6f9c995 100644 --- a/kaddressbook/kabprefs.cpp +++ b/kaddressbook/kabprefs.cpp @@ -1,157 +1,157 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ //US#ifdef KAB_EMBEDDED //#include <qstring.h> //#endif //KAB_EMBEDDED -#include <qtextstream.h> +#include <q3textstream.h> #include <qfile.h> #include <qregexp.h> #include <stdlib.h> #include <libkdepim/kpimglobalprefs.h> #include <kconfig.h> #include <klocale.h> #include <kstaticdeleter.h> #include <kglobalsettings.h> //US#include <kdebug.h> // defines kdDebug() #include "kabprefs.h" #ifdef DESKTOP_VERSION #include <qapplication.h> #endif KABPrefs *KABPrefs::sInstance = 0; static KStaticDeleter<KABPrefs> staticDeleterAB; KABPrefs::KABPrefs() : KPimPrefs("kaddressbookrc") { KPrefs::setCurrentGroup( "Views" ); addItemBool( "HonorSingleClick", &mHonorSingleClick, false ); KPrefs::setCurrentGroup( "General" ); addItemBool( "AutomaticNameParsing", &mAutomaticNameParsing, true ); addItemInt( "CurrentIncSearchField", &mCurrentIncSearchField, 0 ); #ifdef KAB_EMBEDDED addItemBool("AskForDelete",&mAskForDelete,true); addItemBool("AskForQuit",&mAskForQuit,true); addItemBool("ToolBarHor",&mToolBarHor, true ); addItemBool("ToolBarUp",&mToolBarUp, false ); addItemBool("SearchWithReturn",&mSearchWithReturn, false ); addItemBool("AutoSearchWithWildcard",&mAutoSearchWithWildcard, false ); addItemBool("HideSearchOnSwitch",&mHideSearchOnSwitch, false ); addItemFont("DetailsFont",&mDetailsFont,KGlobalSettings::generalFont()); #endif //KAB_EMBEDDED KPrefs::setCurrentGroup( "MainWindow" ); bool m_visible = false; #ifdef DESKTOP_VERSION m_visible = true; #endif addItemBool( "FullMenuBarVisible", &mFullMenuBarVisible, m_visible ); addItemBool( "JumpButtonBarVisible", &mJumpButtonBarVisible, false ); addItemBool( "DetailsPageVisible", &mDetailsPageVisible, true ); addItemIntList( "ExtensionsSplitter", &mExtensionsSplitter ); addItemIntList( "DetailsSplitter", &mDetailsSplitter ); addItemBool( "MultipleViewsAtOnce", &mMultipleViewsAtOnce, true ); KPrefs::setCurrentGroup( "Extensions_General" ); QStringList defaultExtensions; defaultExtensions << "merge"; defaultExtensions << "distribution_list_editor"; addItemInt( "CurrentExtension", &mCurrentExtension, 0 ); addItemStringList( "ActiveExtensions", &mActiveExtensions, defaultExtensions ); KPrefs::setCurrentGroup( "Views" ); QString defaultView = i18n( "Default Table View" ); addItemString( "CurrentView", &mCurrentView, defaultView ); - addItemStringList( "ViewNames", &mViewNames, defaultView ); + addItemStringList( "ViewNames", &mViewNames, QStringList(defaultView) ); KPrefs::setCurrentGroup( "Filters" ); addItemInt( "CurrentFilter", &mCurrentFilter, 0 ); } KABPrefs::~KABPrefs() { //qDebug("KABPrefs::~KABPrefs() "); if (sInstance == this) sInstance = staticDeleterAB.setObject(0); } KABPrefs *KABPrefs::instance() { if ( !sInstance ) { #ifdef KAB_EMBEDDED sInstance = staticDeleterAB.setObject( new KABPrefs() ); #else //KAB_EMBEDDED //US the following line has changed ???. Why staticDeleterAB.setObject( sInstance, new KABPrefs() ); #endif //KAB_EMBEDDED sInstance->readConfig(); } return sInstance; } void KABPrefs::setCategoryDefaults() { mCustomCategories.clear(); mCustomCategories << i18n( "Business" ) << i18n( "Family" ) << i18n( "School" ) << i18n( "Customer" ) << i18n( "Friend" ); } // US introduce a nonconst way to return the config object. KConfig* KABPrefs::getConfig() { return config(); } void KABPrefs::usrReadConfig() { KPimPrefs::usrReadConfig(); } /*US void KABPrefs::usrSetDefaults() { KPimPrefs::usrSetDefaults(); } void KABPrefs::usrReadConfig() { KPimPrefs::usrReadConfig(); } void KABPrefs::usrWriteConfig() { KPimPrefs::usrWriteConfig(); } */ diff --git a/kaddressbook/kabprefs.h b/kaddressbook/kabprefs.h index ddbc0c0..aff725e 100644 --- a/kaddressbook/kabprefs.h +++ b/kaddressbook/kabprefs.h @@ -1,99 +1,101 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KABPREFS_H #define KABPREFS_H #include <qstringlist.h> -#include <qdict.h> +#include <q3dict.h> +//Added by qt3to4: +#include <Q3ValueList> #include <libkdepim/kpimprefs.h> class KConfig; class KABPrefs : public KPimPrefs { public: virtual ~KABPrefs(); static KABPrefs *instance(); // General bool mHonorSingleClick; bool mAutomaticNameParsing; int mCurrentIncSearchField; #ifdef KAB_EMBEDDED // US introduce a nonconst way to return the config object. KConfig* getConfig(); bool mToolBarHor; bool mToolBarUp; bool mAskForQuit; /** Set preferences to default values */ // void usrSetDefaults(); /** Read preferences from config file */ // void usrReadConfig(); /** Write preferences to config file */ // void usrWriteConfig(); #endif //KAB_EMBEDDED void usrReadConfig(); // GUI bool mFullMenuBarVisible; bool mJumpButtonBarVisible; bool mDetailsPageVisible; bool mMultipleViewsAtOnce; bool mSearchWithReturn; bool mAutoSearchWithWildcard; bool mHideSearchOnSwitch; bool mAskForDelete; - QValueList<int> mExtensionsSplitter; - QValueList<int> mDetailsSplitter; + Q3ValueList<int> mExtensionsSplitter; + Q3ValueList<int> mDetailsSplitter; // Extensions stuff int mCurrentExtension; QStringList mActiveExtensions; // Views stuff QString mCurrentView; QStringList mViewNames; // Filter int mCurrentFilter; void setCategoryDefaults(); QFont mDetailsFont; private: KABPrefs(); static KABPrefs *sInstance; }; #endif diff --git a/kaddressbook/kaddressbook.pro b/kaddressbook/kaddressbook.pro index cd38e5f..4eb1f7f 100644 --- a/kaddressbook/kaddressbook.pro +++ b/kaddressbook/kaddressbook.pro @@ -1,206 +1,208 @@ TEMPLATE = app CONFIG = qt warn_on TARGET = kapi DESTDIR= ../bin include( ../variables.pri ) INCLUDEPATH += . ./details ./features ./xxport ../libkdepim ../microkde ../microkde/kdecore ../microkde/kutils ../microkde/kio/kfile ../microkde/kio/kio ../microkde/kdeui ../microkde/kresources ../kabc ../ interfaces DEFINES += KAB_EMBEDDED KAB_NOSPLITTER DESKTOP_VERSION unix : { staticlib: { TARGET = kapi_linux -LIBS += ../bin/libmicrokabc_qtopia.a -LIBS += ../bin/libmicrokabc_file.a -LIBS += ../bin/libmicrokabc_dir.a -LIBS += ../bin/libmicrokdepim.a -LIBS += ../bin/libmicrokcal.a -LIBS += ../bin/libmicrokabc.a -LIBS += ../bin/libmicrokde.a -LIBS += ../bin/libmicrokabc_qtopia.a -LIBS += ../bin/libmicrokabc_file.a -LIBS += ../bin/libmicrokabc_dir.a -LIBS += ../bin/libmicrokdepim.a -LIBS += ../bin/libmicrokcal.a -LIBS += ../bin/libmicrokabc.a -LIBS += ../bin/libmicrokde.a +LIBS += ../bin/libxmicrokabc_qtopia.a +LIBS += ../bin/libxmicrokabc_file.a +LIBS += ../bin/libxmicrokabc_dir.a +LIBS += ../bin/libxmicrokdepim.a +LIBS += ../bin/libxmicrokcal.a +LIBS += ../bin/libxmicrokabc.a +LIBS += ../bin/libxmicrokde.a +LIBS += ../bin/libxmicrokabc_qtopia.a +LIBS += ../bin/libxmicrokabc_file.a +LIBS += ../bin/libxmicrokabc_dir.a +LIBS += ../bin/libxmicrokdepim.a +LIBS += ../bin/libxmicrokcal.a +LIBS += ../bin/libxmicrokabc.a +LIBS += ../bin/libxmicrokde.a LIBS += ../libical/lib/libical.a LIBS += ../libical/lib/libicalss.a } else { -LIBS += ../bin/libmicrokdepim.so -LIBS += ../bin/libmicrokde.so -LIBS += ../bin/libmicrokabc.so -LIBS += ../bin/libmicrokcal.so +LIBS += ../bin/libxmicrokdepim.so +LIBS += ../bin/libxmicrokde.so +LIBS += ../bin/libxmicrokabc.so +LIBS += ../bin/libxmicrokcal.so #LIBS += -lldap } OBJECTS_DIR = obj/unix MOC_DIR = moc/unix } win32: { RC_FILE = winicons.rc DEFINES += _WIN32_ -LIBS += ../bin/microkdepim.lib -LIBS += ../bin/microkcal.lib -LIBS += ../bin/microkde.lib -LIBS += ../bin/microkabc.lib +LIBS += ../bin/xmicrokdepim.lib +LIBS += ../bin/xmicrokcal.lib +LIBS += ../bin/xmicrokde.lib +LIBS += ../bin/xmicrokabc.lib QMAKE_LINK += /NODEFAULTLIB:LIBC OBJECTS_DIR = obj/win MOC_DIR = moc/win #olimport section importol { debug: { LIBS += mfc71ud.lib } release: { LIBS += mfc71u.lib } DEFINES += _OL_IMPORT_ HEADERS = ../outport/msoutl9.h \ kaimportoldialog.h SOURCES = ../outport/msoutl9.cpp \ kaimportoldialog.cpp #olimport section end TARGET = kapi_xp } else { TARGET = kapi_me } } INTERFACES = \ # filteredit_base.ui \ # kofilterview_base.ui \ HEADERS += \ features/mergewidget.h \ features/distributionlistwidget.h \ kcmconfigs/addresseewidget.h \ kcmconfigs/extensionconfigdialog.h \ kcmconfigs/kcmkabconfig.h \ kcmconfigs/kabconfigwidget.h \ addresseeeditordialog.h \ addresseeeditorwidget.h \ addresseditwidget.h \ addresseeconfig.h \ addresseeutil.h \ emaileditwidget.h \ filtereditdialog.h \ kaddressbookmain.h \ kabprefs.h \ kabcore.h \ viewmanager.h \ extensionmanager.h \ extensionwidget.h \ kaddressbookview.h \ geowidget.h \ imagewidget.h \ incsearchwidget.h \ jumpbuttonbar.h \ phoneeditwidget.h \ secrecywidget.h \ keywidget.h \ nameeditdialog.h \ filter.h \ addviewdialog.h \ configurewidget.h \ viewconfigurewidget.h \ viewconfigurefieldspage.h \ viewconfigurefilterpage.h \ typecombo.h \ undo.h \ undocmds.h \ xxportmanager.h \ xxportobject.h \ xxportselectdialog.h \ details/detailsviewcontainer.h \ details/look_basic.h \ details/look_html.h \ views/kaddressbookiconview.h \ views/kaddressbooktableview.h \ views/kaddressbookcardview.h \ views/configuretableviewdialog.h \ views/configurecardviewdialog.h \ views/cardview.h \ views/colorlistbox.h \ views/contactlistview.h \ xxport/vcard_xxport.h \ xxport/kde2_xxport.h \ xxport/csv_xxport.h \ xxport/csvimportdialog.h \ xxport/opie_xxport.h \ xxport/qtopia_xxport.h \ xxport/sharpdtm_xxport.h \ #details/look_details.h \ #mainwindoiw.h \ # alarmclient.h \ # calendarview.h \ # customlistviewitem.h \ # datenavigator.h SOURCES += \ addresseeeditordialog.cpp \ addresseeeditorwidget.cpp \ addresseditwidget.cpp \ addresseeconfig.cpp \ addresseeutil.cpp \ extensionmanager.cpp \ features/mergewidget.cpp \ features/distributionlistwidget.cpp \ kcmconfigs/addresseewidget.cpp \ kcmconfigs/extensionconfigdialog.cpp \ kcmconfigs/kcmkabconfig.cpp \ kcmconfigs/kabconfigwidget.cpp \ emaileditwidget.cpp \ filtereditdialog.cpp \ mainembedded.cpp \ kaddressbookmain.cpp \ kabcore.cpp \ kabprefs.cpp \ viewmanager.cpp \ kaddressbookview.cpp \ extensionwidget.cpp \ geowidget.cpp \ imagewidget.cpp \ incsearchwidget.cpp \ jumpbuttonbar.cpp \ phoneeditwidget.cpp \ secrecywidget.cpp \ keywidget.cpp \ nameeditdialog.cpp \ filter.cpp \ addviewdialog.cpp \ configurewidget.cpp \ viewconfigurewidget.cpp \ viewconfigurefieldspage.cpp \ viewconfigurefilterpage.cpp \ undo.cpp \ undocmds.cpp \ xxportmanager.cpp \ xxportobject.cpp \ xxportselectdialog.cpp \ details/detailsviewcontainer.cpp \ details/look_basic.cpp \ details/look_html.cpp \ views/kaddressbookiconview.cpp \ views/kaddressbooktableview.cpp \ views/kaddressbookcardview.cpp \ views/configuretableviewdialog.cpp \ views/configurecardviewdialog.cpp \ views/cardview.cpp \ views/contactlistview.cpp \ views/colorlistbox.cpp \ xxport/vcard_xxport.cpp \ xxport/kde2_xxport.cpp \ xxport/csv_xxport.cpp \ xxport/csvimportdialog.cpp \ xxport/opie_xxport.cpp \ xxport/qtopia_xxport.cpp \ xxport/sharpdtm_xxport.cpp \ #details/look_details.cpp \ #mainwindow.cpp \ # calendarview.cpp \ # timespanview.cpp +#The following line was inserted by qt3to4 +QT += xml qt3support diff --git a/kaddressbook/kaddressbookE.pro b/kaddressbook/kaddressbookE.pro index 64e3a4a..c4b2499 100644 --- a/kaddressbook/kaddressbookE.pro +++ b/kaddressbook/kaddressbookE.pro @@ -1,160 +1,160 @@ TEMPLATE = app CONFIG += qt warn_on TARGET = kapi OBJECTS_DIR = obj/$(PLATFORM) MOC_DIR = moc/$(PLATFORM) DESTDIR=$(QPEDIR)/bin INCLUDEPATH += . ./details ./features ./xxport ../libkdepim ../microkde ../microkde/kdecore ../microkde/kutils ../microkde/kio/kfile ../microkde/kio/kio ../microkde/kdeui ../microkde/kresources ../kabc ../qtcompat ../ interfaces $(QPEDIR)/include DEFINES += KAB_EMBEDDED KAB_NOSPLITTER #DEFINES += KORG_NODND KORG_NOPLUGINS KORG_NOKABC KORG_NOARCHIVE KORG_NOMAIL #DEFINES += KORG_NOPRINTER KORG_NODCOP KORG_NOKALARMD KORG_NORESOURCEVIEW KORG_NOSPLITTER #DEFINES += KORG_NOLVALTERNATION -LIBS += -lmicrokdepim -LIBS += -lmicrokde +LIBS += -lxmicrokdepim +LIBS += -lxmicrokde LIBS += -lmicroqtcompat -LIBS += -lmicrokabc +LIBS += -lxmicrokabc LIBS += -lqpe LIBS += -ljpeg LIBS += $(QTOPIALIB) LIBS += -L$(QPEDIR)/lib LIBS += -Wl,-export-dynamic LIBS += $(GCC3EXTRALIB1) LIBS += $(GCC3EXTRALIB2) INTERFACES = \ # filteredit_base.ui \ # kofilterview_base.ui \ HEADERS = \ features/mergewidget.h \ features/distributionlistwidget.h \ kcmconfigs/addresseewidget.h \ kcmconfigs/extensionconfigdialog.h \ kcmconfigs/kcmkabconfig.h \ kcmconfigs/kabconfigwidget.h \ addresseeeditordialog.h \ addresseeeditorwidget.h \ addresseditwidget.h \ addresseeconfig.h \ addresseeutil.h \ emaileditwidget.h \ filtereditdialog.h \ kaddressbookmain.h \ kabprefs.h \ kabcore.h \ viewmanager.h \ extensionmanager.h \ extensionwidget.h \ kaddressbookview.h \ geowidget.h \ imagewidget.h \ incsearchwidget.h \ jumpbuttonbar.h \ phoneeditwidget.h \ secrecywidget.h \ keywidget.h \ nameeditdialog.h \ filter.h \ addviewdialog.h \ configurewidget.h \ viewconfigurewidget.h \ viewconfigurefieldspage.h \ viewconfigurefilterpage.h \ typecombo.h \ undo.h \ undocmds.h \ xxportmanager.h \ xxportobject.h \ xxportselectdialog.h \ details/detailsviewcontainer.h \ details/look_basic.h \ details/look_html.h \ views/kaddressbookiconview.h \ views/kaddressbooktableview.h \ views/kaddressbookcardview.h \ views/configuretableviewdialog.h \ views/configurecardviewdialog.h \ views/cardview.h \ views/colorlistbox.h \ views/contactlistview.h \ xxport/vcard_xxport.h \ xxport/kde2_xxport.h \ xxport/csv_xxport.h \ xxport/csvimportdialog.h \ xxport/opie_xxport.h \ xxport/qtopia_xxport.h \ xxport/sharpdtm_xxport.h \ #details/look_details.h \ #mainwindoiw.h \ # alarmclient.h \ # calendarview.h \ # customlistviewitem.h \ # datenavigator.h SOURCES = \ addresseeeditordialog.cpp \ addresseeeditorwidget.cpp \ addresseditwidget.cpp \ addresseeconfig.cpp \ addresseeutil.cpp \ extensionmanager.cpp \ features/mergewidget.cpp \ features/distributionlistwidget.cpp \ kcmconfigs/addresseewidget.cpp \ kcmconfigs/extensionconfigdialog.cpp \ kcmconfigs/kcmkabconfig.cpp \ kcmconfigs/kabconfigwidget.cpp \ emaileditwidget.cpp \ filtereditdialog.cpp \ mainembedded.cpp \ kaddressbookmain.cpp \ kabcore.cpp \ kabprefs.cpp \ viewmanager.cpp \ kaddressbookview.cpp \ extensionwidget.cpp \ geowidget.cpp \ imagewidget.cpp \ incsearchwidget.cpp \ jumpbuttonbar.cpp \ phoneeditwidget.cpp \ secrecywidget.cpp \ keywidget.cpp \ nameeditdialog.cpp \ filter.cpp \ addviewdialog.cpp \ configurewidget.cpp \ viewconfigurewidget.cpp \ viewconfigurefieldspage.cpp \ viewconfigurefilterpage.cpp \ undo.cpp \ undocmds.cpp \ xxportmanager.cpp \ xxportobject.cpp \ xxportselectdialog.cpp \ details/detailsviewcontainer.cpp \ details/look_basic.cpp \ details/look_html.cpp \ views/kaddressbookiconview.cpp \ views/kaddressbooktableview.cpp \ views/kaddressbookcardview.cpp \ views/configuretableviewdialog.cpp \ views/configurecardviewdialog.cpp \ views/cardview.cpp \ views/contactlistview.cpp \ views/colorlistbox.cpp \ xxport/vcard_xxport.cpp \ xxport/kde2_xxport.cpp \ xxport/csv_xxport.cpp \ xxport/csvimportdialog.cpp \ xxport/opie_xxport.cpp \ xxport/qtopia_xxport.cpp \ xxport/sharpdtm_xxport.cpp \ #details/look_details.cpp \ #mainwindow.cpp \ # calendarview.cpp \ # timespanview.cpp diff --git a/kaddressbook/kaddressbookmain.cpp b/kaddressbook/kaddressbookmain.cpp index c417226..b317974 100644 --- a/kaddressbook/kaddressbookmain.cpp +++ b/kaddressbook/kaddressbookmain.cpp @@ -1,241 +1,243 @@ /* This file is part of KAddressbook. Copyright (c) 1999 Don Sanders <dsanders@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifdef KAB_EMBEDDED #include "kabprefs.h" #include <kglobal.h> #include <qmessagebox.h> -#include <qtoolbar.h> +#include <q3toolbar.h> #include <qapplication.h> +//Added by qt3to4: +#include <Q3CString> +#include <QCloseEvent> #else //KAB_EMBEDDED #include <kedittoolbar.h> #include <kkeydialog.h> #include <kmessagebox.h> #include <kstatusbar.h> #endif //KAB_EMBEDDED #include <klocale.h> #include "kabcore.h" #include "kaddressbookmain.h" #include "kactioncollection.h" #ifdef KAB_EMBEDDED KAddressBookMain::KAddressBookMain() : KMainWindow( 0, "abmain" ) #else //KAB_EMBEDDED -//MOC_SKIP_BEGIN +#ifndef Q_MOC_RUN KAddressBookMain::KAddressBookMain() : DCOPObject( "KAddressBookIface" ), KMainWindow( 0 ) -//MOC_SKIP_END +#endif #endif //KAB_EMBEDDED { setIcon(SmallIcon( "ka24" ) ); #if 0 //US for embedded systems, create the toolbar before we initiate KABCore. // KABCore will fill the toolbar with menues and icons - QMainWindow::ToolBarDock tbd; - tbd = Top; - iconToolBar = new QToolBar( this ); + Qt::ToolBarDock tbd; + tbd = Qt::DockTop; + iconToolBar = new Q3ToolBar( this ); addToolBar (iconToolBar , tbd ); iconToolBar->setHorizontalStretchable(true); //US iconToolBar->setWidth(300); #endif // 0 mCore = new KABCore( this, true, this ); #ifdef KAB_EMBEDDED setCaption( i18n( "KAddressbook/Pi" ) ); #else //KAB_EMBEDDED setCaption( i18n( "Address Book Browser" ) ); #endif //KAB_EMBEDDED //mCore->restoreSettings(); initActions(); setCentralWidget( mCore ); //US statusBar()->show(); #ifndef KAB_EMBEDDED setStandardToolBarMenuEnabled(true); createGUI( "kaddressbookui.rc", false ); #endif //KAB_EMBEDDED setAutoSaveSettings(); mCore->restoreSettings(); #ifndef DESKTOP_VERSION - QObject::connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), mCore, SLOT (receiveStart ( const QCString &, const QByteArray & ))); + QObject::connect(qApp, SIGNAL (appMessage ( const Q3CString &, const QByteArray & )), mCore, SLOT (receiveStart ( const Q3CString &, const QByteArray & ))); #endif } KAddressBookMain::~KAddressBookMain() { // mCore->saveSettings(); } void KAddressBookMain::showMinimized () { QWidget::showMinimized () ; } void KAddressBookMain::addEmail( QString addr ) { mCore->addEmail( addr ); } #ifndef KAB_EMBEDDED ASYNC KAddressBookMain::showContactEditor( QString uid ) { mCore->editContact( uid ); } #endif //KAB_EMBEDDED void KAddressBookMain::newContact() { mCore->newContact(); } QString KAddressBookMain::getNameByPhone( QString phone ) { return mCore->getNameByPhone( phone ); } void KAddressBookMain::save() { mCore->save(); } void KAddressBookMain::exit() { close( ); } void KAddressBookMain::saveProperties( KConfig* ) { } void KAddressBookMain::readProperties( KConfig* ) { } void KAddressBookMain::initActions() { #ifndef KAB_EMBEDDED KStdAction::quit( this, SLOT( close() ), actionCollection() ); KStdAction::configureToolbars( this, SLOT( configureToolbars() ), actionCollection() ); #else //KAB_EMBEDDED //US: transfered the setup of the actions into KABCore #endif //KAB_EMBEDDED } //US new method to setup menues and toolbars on embedded systems #ifdef KAB_EMBEDDED /* QToolBar * KAddressBookMain::getIconToolBar() { return iconToolBar; } */ void KAddressBookMain::createGUI() { } #endif //KAB_EMBEDDED void KAddressBookMain::configureToolbars() { #ifndef KAB_EMBEDDED saveMainWindowSettings( KGlobal::config(), "MainWindow" ); KEditToolbar dlg( factory() ); connect( &dlg, SIGNAL( newToolbarConfig() ), SLOT( slotNewToolbarConfig() ) ); dlg.exec(); #else //KAB_EMBEDDED qDebug("KAddressBookMain::configureToolbars() not implemented by ulf" ); #endif //KAB_EMBEDDED } void KAddressBookMain::slotNewToolbarConfig() { #ifndef KAB_EMBEDDED applyMainWindowSettings( KGlobal::config(), "MainWindow" ); #else //KAB_EMBEDDED qDebug("KAddressBookMain::slotNewToolbarConfig() not implemented by ulf" ); #endif //KAB_EMBEDDED } void KAddressBookMain::configureKeys() { #ifndef KAB_EMBEDDED KKeyDialog::configureKeys( actionCollection(), xmlFile(), true, this ); #else //KAB_EMBEDDED qDebug("KAddressBookMain::configureKeys() not implemented by ulf" ); #endif //KAB_EMBEDDED } void KAddressBookMain::closeEvent( QCloseEvent* ce ) { bool mModified = mCore->modified(); bool mAskForQuit = KABPrefs::instance()->mAskForQuit; QString mess = i18n( "Close KA/Pi?"); if ( mModified == true ) mess += i18n( "\nChanges will be saved!"); else mess += i18n( "\nNo unsaved changes detected!\nNothing will be saved!"); bool mQuit = true; if (mAskForQuit) { int res = QMessageBox::information( this, "KA/Pi", mess , i18n("Yes!"), i18n("No"), 0, 0 ); if (res == 0) mQuit = true; else mQuit = false; } if (mQuit == false) return; if (mModified == true) { save(); mCore->saveSettings(); //KABPrefs::instance()->writeConfig(); } ce->accept(); } -#ifndef KAB_EMBEDDED -#include "kaddressbookmain.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_kaddressbookmain.cpp" #endif //KAB_EMBEDDED - diff --git a/kaddressbook/kaddressbookmain.h b/kaddressbook/kaddressbookmain.h index b6d9b4b..d3f5cc7 100644 --- a/kaddressbook/kaddressbookmain.h +++ b/kaddressbook/kaddressbookmain.h @@ -1,121 +1,123 @@ /* This file is part of KAddressbook. Copyright (c) 1999 Don Sanders <dsanders@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KADDRESSBOOKMAIN_H #define KADDRESSBOOKMAIN_H -#include <qptrlist.h> +#include <q3ptrlist.h> +//Added by qt3to4: +#include <QCloseEvent> #ifdef KAB_EMBEDDED -class QToolBar; +class Q3ToolBar; #include <qaction.h> //#include <qmainwindow.h> #include <kmainwindow.h> #else //KAB_EMBEDDED #include <kaction.h> #include <kapplication.h> #include <kmainwindow.h> #include "kaddressbookiface.h" #endif //KAB_EMBEDDED class KABCore; class KConfig; /** This class serves as the main window for KAddressBook. It handles the menus, toolbars, and status bars. @short Main window class @author Don Sanders <dsanders@kde.org> @version 0.1 */ #ifdef KAB_EMBEDDED class KAddressBookMain : public KMainWindow #else //KAB_EMBEDDED -//MOC_SKIP_BEGIN +#ifndef Q_MOC_RUN class KAddressBookMain : public KMainWindow, virtual public KAddressBookIface -//MOC_SKIP_END +#endif #endif //KAB_EMBEDDED { Q_OBJECT public: KAddressBookMain(); virtual ~KAddressBookMain(); #ifdef KAB_EMBEDDED // QPEToolBar * getIconToolBar(); // QToolBar * getIconToolBar(); #endif //KAB_EMBEDDED public slots: void showMinimized () ; virtual void addEmail( QString addr ); #ifndef KAB_EMBEDDED -//MOC_SKIP_BEGIN +#ifndef Q_MOC_RUN virtual ASYNC showContactEditor( QString uid ); -//MOC_SKIP_END +#endif #endif //KAB_EMBEDDED virtual void newContact(); virtual QString getNameByPhone( QString phone ); virtual void save(); virtual void exit(); protected: void initActions(); #ifdef KAB_EMBEDDED //US new method to setup menues and toolbars on embedded systems void createGUI(); #endif //KAB_EMBEDDED /** This function is called when it is time for the app to save its properties for session management purposes. */ void saveProperties( KConfig* ); /** This function is called when this app is restored. The KConfig object points to the session management config file that was saved with @ref saveProperties */ void readProperties( KConfig* ); void closeEvent( QCloseEvent* ce ); protected slots: void configureToolbars(); void configureKeys(); void slotNewToolbarConfig(); private: KABCore *mCore; #ifdef KAB_EMBEDDED // QToolBar *iconToolBar; #endif //KAB_EMBEDDED }; #endif diff --git a/kaddressbook/kaddressbookview.cpp b/kaddressbook/kaddressbookview.cpp index 86898e2..4823b37 100644 --- a/kaddressbook/kaddressbookview.cpp +++ b/kaddressbook/kaddressbookview.cpp @@ -1,188 +1,190 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KAB_EMBEDDED #include <qapplication.h> #include <kabc/distributionlistdialog.h> #include <kconfig.h> #include <klocale.h> #include "viewmanager.h" #endif //KAB_EMBEDDED #include <qlayout.h> +//Added by qt3to4: +#include <Q3VBoxLayout> #include <kabc/distributionlistdialog.h> #include <kabc/addressbook.h> #include <kdebug.h> #include "kaddressbookview.h" KAddressBookView::KAddressBookView( KABC::AddressBook *ab, QWidget *parent, const char *name ) : QWidget( parent, name ), mAddressBook( ab ), mFieldList() { initGUI(); } KAddressBookView::~KAddressBookView() { } QRegExp KAddressBookView::getRegExp( const QString s ) { QRegExp re; if ( s.length() == 3 && s.mid(1,1) == "-" ) { QString pattern = "^[" + s.lower() +"]"; re.setCaseSensitive(false); re.setPattern( pattern ); } else { QString pattern = s.lower()+"*"; re.setWildcard(true); // most people understand these better. re.setCaseSensitive(false); re.setPattern( pattern ); } return re; } void KAddressBookView::readConfig( KConfig *config ) { mFieldList = KABC::Field::restoreFields( config, "KABCFields" ); if ( mFieldList.isEmpty() ) mFieldList = KABC::Field::defaultFields(); mDefaultFilterType = (DefaultFilterType)config->readNumEntry( "DefaultFilterType", 1 ); mDefaultFilterName = config->readEntry( "DefaultFilterName", QString::null ); } void KAddressBookView::writeConfig( KConfig* ) { // Most of writing the config is handled by the ConfigureViewDialog } QString KAddressBookView::selectedEmails() { bool first = true; QString emailAddrs; QStringList uidList = selectedUids(); KABC::Addressee addr; QString email; QStringList::Iterator it; for ( it = uidList.begin(); it != uidList.end(); ++it ) { addr = mAddressBook->findByUid( *it ); if ( !addr.isEmpty() ) { QString m = QString::null; if ( addr.emails().count() > 1 ) m = KABC::EmailSelector::getEmail( addr.emails(), addr.preferredEmail(), this ); email = addr.fullEmail( m ); if ( !first ) emailAddrs += ", "; else first = false; emailAddrs += email; } } return emailAddrs; } KABC::Addressee::List KAddressBookView::addressees() { KABC::Addressee::List addresseeList; KABC::AddressBook::Iterator it; for (it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { if ( mFilter.filterAddressee( *it ) ) addresseeList.append( *it ); } return addresseeList; } void KAddressBookView::initGUI() { // Create the layout - QVBoxLayout *layout = new QVBoxLayout( this ); + Q3VBoxLayout *layout = new Q3VBoxLayout( this ); // Add the view widget mViewWidget = new QWidget( this ); layout->addWidget( mViewWidget ); } KABC::Field::List KAddressBookView::fields() const { return mFieldList; } KABC::Field::List KAddressBookView::allFields() const { return KABC::Field::allFields(); } void KAddressBookView::setFilter( const Filter &filter ) { mFilter = filter; } KAddressBookView::DefaultFilterType KAddressBookView::defaultFilterType() const { return mDefaultFilterType; } const QString &KAddressBookView::defaultFilterName() const { return mDefaultFilterName; } KABC::AddressBook *KAddressBookView::addressBook() const { return mAddressBook; } QWidget *KAddressBookView::viewWidget() { return mViewWidget; } ViewConfigureWidget *ViewFactory::configureWidget( KABC::AddressBook *ab, QWidget *parent, const char *name ) { return new ViewConfigureWidget( ab, parent, name ); } -#ifndef KAB_EMBEDDED -#include "kaddressbookview.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_kaddressbookview.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/kaddressbookview.h b/kaddressbook/kaddressbookview.h index 3a3f71a..e423cd7 100644 --- a/kaddressbook/kaddressbookview.h +++ b/kaddressbook/kaddressbookview.h @@ -1,314 +1,316 @@ +//Added by qt3to4: +#include <QDropEvent> /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KADDRESSBOOKVIEW_H #define KADDRESSBOOKVIEW_H #ifndef KAB_EMBEDDED #include <klibloader.h> #endif //KAB_EMBEDDED class KConfig; class QDropEvent; #include <qstringlist.h> #include <kabc/field.h> #include <qwidget.h> #include <qregexp.h> #include "viewconfigurewidget.h" #include "filter.h" #ifdef DESKTOP_VERSION -#include <qpaintdevicemetrics.h> +#include <q3paintdevicemetrics.h> #include <qprinter.h> #include <qpainter.h> #endif namespace KABC { class AddressBook; } /** Base class for all views in kaddressbook. This class implements all the common methods needed to provide a view to the user. To implement a specific view (table, card, etc), just inherit from this class and implement all the pure virtuals. @author Mike Pilone <mpilone@slac.com> */ class KAddressBookView : public QWidget { Q_OBJECT public: enum DefaultFilterType { None = 0, Active = 1, Specific = 2 }; KAddressBookView( KABC::AddressBook *ab, QWidget *parent, const char *name ); virtual ~KAddressBookView(); /** Must be overloaded in subclasses. Should return a list of all the uids of selected contacts. */ virtual QStringList selectedUids() = 0; virtual void doSearch( const QString& s ,KABC::Field *field ) = 0; virtual void scrollUP() = 0; virtual void scrollDOWN() = 0; virtual void setFocusAV() = 0; /** Called whenever this view should read the config. This can be used as a sign that the config has changed, therefore the view should assume the worst and rebuild itself if necessary. For example, in a table view this method may be called when the user adds or removes columns from the view. If overloaded in the subclass, do not forget to call super class's method. @param config The KConfig object to read from. The group will already be set, so do not change the group. */ virtual void readConfig( KConfig *config ); /** Called whenever this view should write the config. The view should not write out information handled by the application, such as which fields are visible. The view should only write out information specific to itself (i.e.: All information in the ViewConfigWidget) If overloaded in the subclass, do not forget to call the super class's method. @param config The KConfig object to read from. The group will already be set, so do not change the group. */ virtual void writeConfig( KConfig *config ); /** Returns a QString with all the selected email addresses concatenated together with a ',' seperator. */ virtual QString selectedEmails(); /** Return the type of the view: Icon, Table, etc. Please make sure that this is the same value that ViewWrapper::type() will return for your view. */ virtual QString type() const = 0; /** Returns a list of the fields that should be displayed. The list is composed of the fields proper names (ie: Home Address), so the view may need to translate them in order to get the value from the addressee. This list is generated from the config file, so it is advisable to call this method whenever a readConfig() is called in order to get the newest list of fields. */ KABC::Field::List fields() const; KABC::Field::List allFields() const; /** Sets the active filter. This filter will be used for filtering the list of addressees to display. The view will <b>not</b> automatically refresh itself, so in most cases you will want to call KAddressBookView::refresh() after this method. */ void setFilter( const Filter& ); /** @return The default filter type selection. If the selection is SpecificFilter, the name of the filter can be retrieved with defaultFilterName() */ DefaultFilterType defaultFilterType() const; /** @return The name of the default filter. This string is only valid if defaultFilterType() is returning SpecificFilter. */ const QString &defaultFilterName() const; /** @return The address book. */ KABC::AddressBook *addressBook() const; void printMyView() { emit printView() ;} public slots: /** Must be overloaded in subclasses to refresh the view. Refreshing includes updating the view to ensure that only items in the document are visible. If <i>uid</i> is valid, only the addressee with uid needs to be refreshed. This is an optimization only. */ virtual void refresh( QString uid = QString::null ) = 0; /** This method must be overloaded in subclasses. Select (highlight) the addressee matching <i>uid</i>. If uid is equal to QString::null, then all addressees should be selected. */ #ifndef KAB_EMBEDDED -//MOC_SKIP_BEGIN +#ifndef Q_MOC_RUN virtual void setSelected( QString uid = QString::null, bool selected = true ) = 0; -//MOC_SKIP_END +#endif #else //KAB_EMBEDDED //US my moc can not handle the default parameters. Is this a problem ??? virtual void setSelected( QString uid, bool selected) = 0; #endif //KAB_EMBEDDED signals: void printView(); /** This signal should be emitted by a subclass whenever an addressee is modified. */ void modified(); /** This signal should be emitted by a subclass whenever an addressee is selected. Selected means that the addressee was given the focus. Some widgets may call this 'highlighted'. The view is responsible for emitting this signal multiple times if multiple items are selected, with the last item selected being the last emit. @param uid The uid of the selected addressee. @see KListView */ void selected( const QString &uid ); void deleteRequest(); /** This signal should be emitted by a subclass whenever an addressee is executed. This is defined by the KDE system wide config, but it either means single or doubleclicked. @param ui The uid of the selected addressee @see KListView */ void executed( const QString &uid ); /** This signal is emitted whenever a user attempts to start a drag in the view. The slot connected to this signal would usually want to create a QDragObject. */ void startDrag(); /** This signal is emitted whenever the user drops something on the view. The individual view should handle checking if the item is droppable (ie: if it is a vcard). */ void dropped( QDropEvent* ); protected: /** Returns a list of the addressees that should be displayed. This method should always be used by the subclass to get a list of addressees. This method internally takes many factors into account, including the current filter. */ KABC::Addressee::List addressees(); /** This method returns the widget that should be used as the parent for all view components. By using this widget as the parent and not 'this', the view subclass has the option of placing other widgets around the view (ie: search fields, etc). Do not delete this widget! */ QWidget *viewWidget(); QRegExp getRegExp( const QString ); private: void initGUI(); DefaultFilterType mDefaultFilterType; Filter mFilter; QString mDefaultFilterName; KABC::AddressBook *mAddressBook; KABC::Field::List mFieldList; QWidget *mViewWidget; }; #ifndef KAB_EMBEDDED -//MOC_SKIP_BEGIN +#ifndef Q_MOC_RUN class ViewFactory : public KLibFactory -//MOC_SKIP_END +#endif #else //KAB_EMBEDDED class ViewFactory #endif //KAB_EMBEDDED { public: virtual KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ) = 0; /** @return The type of the view. This is normally a small one word string (ie: Table, Icon, Tree, etc). */ virtual QString type() const = 0; /** @return The description of the view. This should be a 3 to 4 line string (don't actually use return characters in the string) describing the features offered by the view. */ virtual QString description() const = 0; /** Creates a config dialog for the view type. The default implementation will return a ViewConfigDialog. This default dialog will allow the user to set the visible fields only. If you need more config options (as most views will), this method can be overloaded to return your sublcass of ViewConfigDialog. If this method is over loaded the base classes method should <B>not</B> be called. */ virtual ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ); protected: virtual QObject* createObject( QObject*, const char*, const char*, const QStringList & ) { return 0; } }; #endif diff --git a/kaddressbook/kcmconfigs/addresseewidget.cpp b/kaddressbook/kcmconfigs/addresseewidget.cpp index 168d39e..8055085 100644 --- a/kaddressbook/kcmconfigs/addresseewidget.cpp +++ b/kaddressbook/kcmconfigs/addresseewidget.cpp @@ -1,238 +1,242 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ -#include <qgroupbox.h> +#include <q3groupbox.h> #include <qlabel.h> #include <qlayout.h> -#include <qlistbox.h> +#include <q3listbox.h> #include <qpushbutton.h> #include <qapplication.h> +#include <QDesktopWidget> +//Added by qt3to4: +#include <Q3GridLayout> +#include <Q3HBoxLayout> #include <kbuttonbox.h> #include <kcombobox.h> #include <kconfig.h> #include <kdialog.h> #include <klocale.h> #include <kglobal.h> #include <klineedit.h> #include <kstandarddirs.h> #include "addresseewidget.h" NamePartWidget::NamePartWidget( const QString &title, QWidget *parent, const char *name ) : QWidget( parent, name ) { if (KGlobal::getOrientation() == KGlobal::Portrait) { - QGridLayout* layout = new QGridLayout( this, 1, 1, KDialog::marginHintSmall(), + Q3GridLayout* layout = new Q3GridLayout( this, 1, 1, KDialog::marginHintSmall(), KDialog::spacingHintSmall() ); QLabel *label = new QLabel( i18n( title ), this ); layout->addWidget( label, 0, 1 ); - mBox = new QListBox( this ); + mBox = new Q3ListBox( this ); mBox->setMaximumSize(70, 70); layout->addMultiCellWidget( mBox, 0, 1, 0, 0 ); KButtonBox *bbox = new KButtonBox( this, Qt::Vertical ); mAddButton = bbox->addButton( i18n( "Add" ), this, SLOT( add() ) ); mRemoveButton = bbox->addButton( i18n( "Rem" ), this, SLOT( remove() ) ); bbox->layout(); layout->addMultiCellWidget( bbox, 0, 1, 2,2); mEdit = new KLineEdit( this ); layout->addWidget( mEdit, 1, 1 ); //mEdit->setMinimumWidth(50); // layout->addWidget( group ); } else { - QHBoxLayout *layout = new QHBoxLayout( this ); + Q3HBoxLayout *layout = new Q3HBoxLayout( this ); - QGroupBox *group = new QGroupBox( 0, Qt::Vertical, title, this ); - QGridLayout *groupLayout = new QGridLayout( group->layout(), 2, 2, + Q3GroupBox *group = new Q3GroupBox( 0, Qt::Vertical, title, this ); + Q3GridLayout *groupLayout = new Q3GridLayout( group->layout(), 2, 2, KDialog::spacingHint() ); - mBox = new QListBox( group ); + mBox = new Q3ListBox( group ); groupLayout->addWidget( mBox, 0, 0 ); KButtonBox *bbox = new KButtonBox( group, Qt::Vertical ); mAddButton = bbox->addButton( i18n( "Add" ), this, SLOT( add() ) ); mRemoveButton = bbox->addButton( i18n( "Remove" ), this, SLOT( remove() ) ); bbox->layout(); groupLayout->addWidget( bbox, 0, 1 ); mEdit = new KLineEdit( group ); groupLayout->addMultiCellWidget( mEdit, 1, 1, 0, 1 ); layout->addWidget( group ); } mAddButton->setEnabled( false ); mRemoveButton->setEnabled( false ); - connect( mBox, SIGNAL( selectionChanged( QListBoxItem* ) ), - SLOT( selectionChanged( QListBoxItem* ) ) ); + connect( mBox, SIGNAL( selectionChanged( Q3ListBoxItem* ) ), + SLOT( selectionChanged( Q3ListBoxItem* ) ) ); connect( mEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); connect( mEdit, SIGNAL( returnPressed() ), SLOT( add() ) ); } NamePartWidget::~NamePartWidget() { } void NamePartWidget::setNameParts( const QStringList &list ) { mBox->clear(); mBox->insertStringList( list ); } QStringList NamePartWidget::nameParts() const { QStringList parts; for ( uint i = 0; i < mBox->count(); ++i ) parts.append( mBox->text( i ) ); return parts; } void NamePartWidget::add() { if ( !mEdit->text().isEmpty() ) { mBox->insertItem( mEdit->text() ); emit modified(); } mEdit->setText( "" ); } void NamePartWidget::remove() { mBox->removeItem( mBox->currentItem() ); if ( mBox->count() == 0 ) selectionChanged( 0 ); emit modified(); } -void NamePartWidget::selectionChanged( QListBoxItem *item ) +void NamePartWidget::selectionChanged( Q3ListBoxItem *item ) { mRemoveButton->setEnabled( item != 0 ); } void NamePartWidget::textChanged( const QString& text ) { mAddButton->setEnabled( !text.isEmpty() ); } AddresseeWidget::AddresseeWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { - QGridLayout *layout; + Q3GridLayout *layout; mPrefix = new NamePartWidget( i18n( "Prefixes" ), this ); mInclusion = new NamePartWidget( i18n( "Inclusions" ), this ); mSuffix = new NamePartWidget( i18n( "Suffixes" ), this ); QString dfn; if (QApplication::desktop()->width() > 320 ) dfn = i18n( "Default formatted name:" ); else dfn = i18n( "Def. formatted name:" ); QLabel *label = new QLabel( dfn, this ); mFormattedNameCombo = new KComboBox( this ); mFormattedNameCombo->insertItem( i18n( "Empty" ) ); mFormattedNameCombo->insertItem( i18n( "Simple Name" ) ); mFormattedNameCombo->insertItem( i18n( "Full Name" ) ); mFormattedNameCombo->insertItem( i18n( "Reverse Name" ) ); if (KGlobal::getOrientation() == KGlobal::Portrait) { - layout = new QGridLayout( this, 4, 2, KDialog::marginHintSmall(), + layout = new Q3GridLayout( this, 4, 2, KDialog::marginHintSmall(), KDialog::spacingHintSmall() ); layout->addMultiCellWidget( mPrefix, 0, 0, 0, 1 ); layout->addMultiCellWidget( mInclusion, 1, 1, 0, 1 ); layout->addMultiCellWidget( mSuffix, 2, 2, 0, 1 ); layout->addWidget( label, 3, 0 ); layout->addWidget( mFormattedNameCombo, 3, 1 ); } else { - layout = new QGridLayout( this, 2, 3, KDialog::marginHint(), + layout = new Q3GridLayout( this, 2, 3, KDialog::marginHint(), KDialog::spacingHint() ); layout->addWidget( mPrefix, 0, 0 ); layout->addWidget( mInclusion, 0, 1 ); layout->addWidget( mSuffix, 0, 2 ); layout->addWidget( label, 1, 0 ); layout->addMultiCellWidget( mFormattedNameCombo, 1, 1, 1, 2 ); } connect( mPrefix, SIGNAL( modified() ), SIGNAL( modified() ) ); connect( mInclusion, SIGNAL( modified() ), SIGNAL( modified() ) ); connect( mSuffix, SIGNAL( modified() ), SIGNAL( modified() ) ); connect( mFormattedNameCombo, SIGNAL( activated( int ) ), SIGNAL( modified() ) ); } AddresseeWidget::~AddresseeWidget() { } void AddresseeWidget::restoreSettings() { KConfig config( locateLocal("config", "kabcrc") ); config.setGroup( "General" ); mPrefix->setNameParts( config.readListEntry( "Prefixes" ) ); mInclusion->setNameParts( config.readListEntry( "Inclusions" ) ); mSuffix->setNameParts( config.readListEntry( "Suffixes" ) ); mFormattedNameCombo->setCurrentItem( config.readNumEntry( "FormattedNameType", 1 ) ); } void AddresseeWidget::saveSettings() { qDebug("AddresseeWidget::saveSettings() "); KConfig config( locateLocal("config","kabcrc") ); config.setGroup( "General" ); config.writeEntry( "Prefixes", mPrefix->nameParts() ); config.writeEntry( "Inclusions", mInclusion->nameParts() ); config.writeEntry( "Suffixes", mSuffix->nameParts() ); config.writeEntry( "FormattedNameType", mFormattedNameCombo->currentItem() ); } -#ifndef KAB_EMBEDDED -#include "addresseewidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_addresseewidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/kcmconfigs/addresseewidget.h b/kaddressbook/kcmconfigs/addresseewidget.h index 09330c8..f2a95a8 100644 --- a/kaddressbook/kcmconfigs/addresseewidget.h +++ b/kaddressbook/kcmconfigs/addresseewidget.h @@ -1,87 +1,87 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef ADDRESSEEWIDGET_H #define ADDRESSEEWIDGET_H #include <qwidget.h> class KComboBox; class KLineEdit; -class QListBox; -class QListBoxItem; +class Q3ListBox; +class Q3ListBoxItem; class QPushButton; class NamePartWidget : public QWidget { Q_OBJECT public: NamePartWidget( const QString &title, QWidget *parent, const char *name = 0 ); ~NamePartWidget(); void setNameParts( const QStringList &list ); QStringList nameParts() const; signals: void modified(); private slots: void add(); void remove(); - void selectionChanged( QListBoxItem* ); + void selectionChanged( Q3ListBoxItem* ); void textChanged( const QString& ); private: KLineEdit *mEdit; - QListBox *mBox; + Q3ListBox *mBox; QPushButton *mAddButton; QPushButton *mRemoveButton; }; class AddresseeWidget : public QWidget { Q_OBJECT public: AddresseeWidget( QWidget *parent, const char *name = 0 ); ~AddresseeWidget(); void restoreSettings(); void saveSettings(); signals: void modified(); private: KComboBox *mFormattedNameCombo; NamePartWidget *mPrefix; NamePartWidget *mInclusion; NamePartWidget *mSuffix; }; #endif diff --git a/kaddressbook/kcmconfigs/extensionconfigdialog.cpp b/kaddressbook/kcmconfigs/extensionconfigdialog.cpp index e87b000..33b66ad 100644 --- a/kaddressbook/kcmconfigs/extensionconfigdialog.cpp +++ b/kaddressbook/kcmconfigs/extensionconfigdialog.cpp @@ -1,59 +1,62 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlayout.h> +//Added by qt3to4: +#include <Q3GridLayout> +#include <Q3Frame> #include <klocale.h> #include "configurewidget.h" #include "extensionconfigdialog.h" ExtensionConfigDialog::ExtensionConfigDialog( ExtensionFactory *factory, KConfig *config, QWidget *parent, const char *name ) : KDialogBase( Plain, i18n( "Extension Settings" ), Ok | Cancel, Ok, parent, name, true, true ), mWidget( 0 ), mConfig( config ) { - QFrame *page = plainPage(); - QGridLayout *layout = new QGridLayout( page, 1, 1, marginHint(), spacingHint() ); + Q3Frame *page = plainPage(); + Q3GridLayout *layout = new Q3GridLayout( page, 1, 1, marginHint(), spacingHint() ); mWidget = factory->configureWidget( page, "ExtensionConfigWidget" ); layout->addWidget( mWidget, 0, 0 ); mWidget->restoreSettings( mConfig ); } ExtensionConfigDialog::~ExtensionConfigDialog() { } void ExtensionConfigDialog::slotOk() { mWidget->saveSettings( mConfig ); KDialogBase::slotOk(); } -#ifndef KAB_EMBEDDED -#include "extensionconfigdialog.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_extensionconfigdialog.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/kcmconfigs/kabconfigwidget.cpp b/kaddressbook/kcmconfigs/kabconfigwidget.cpp index 9e4db74..d2b7ef1 100644 --- a/kaddressbook/kcmconfigs/kabconfigwidget.cpp +++ b/kaddressbook/kcmconfigs/kabconfigwidget.cpp @@ -1,424 +1,427 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qcheckbox.h> -#include <qframe.h> -#include <qgroupbox.h> +#include <q3frame.h> +#include <q3groupbox.h> #include <qlayout.h> #include <qpushbutton.h> #include <qtabwidget.h> #include <qcombobox.h> #include <qlineedit.h> #include <qlabel.h> #include <qfile.h> -#include <qvbox.h> +#include <q3vbox.h> +//Added by qt3to4: +#include <Q3HBoxLayout> +#include <Q3PtrList> +#include <Q3VBoxLayout> #include <kconfig.h> #include <kdebug.h> #include <kdialog.h> #include <klistview.h> #include <klocale.h> #include <kglobal.h> #include <kmessagebox.h> #include <kstandarddirs.h> #ifndef KAB_EMBEDDED #include <ktrader.h> #else // KAB_EMBEDDED #include <mergewidget.h> #include <distributionlistwidget.h> #endif // KAB_EMBEDDED #include "addresseewidget.h" #include "extensionconfigdialog.h" #include "extensionwidget.h" #include "kabprefs.h" #include "kabconfigwidget.h" #include <kglobalsettings.h> -class ExtensionItem : public QCheckListItem +class ExtensionItem : public Q3CheckListItem { public: #ifndef KAB_EMBEDDED - ExtensionItem( QListView *parent, const QString &text ); + ExtensionItem( Q3ListView *parent, const QString &text ); void setService( const KService::Ptr &ptr ); #else //KAB_EMBEDDED - ExtensionItem( QListView *parent, const QString &text, const QString &name, const QString &comment ); + ExtensionItem( Q3ListView *parent, const QString &text, const QString &name, const QString &comment ); void setFactory( ExtensionFactory* fac ); #endif //KAB_EMBEDDED bool configWidgetAvailable() const; ExtensionFactory *factory() const; virtual QString text( int column ) const; private: #ifndef KAB_EMBEDDED KService::Ptr mPtr; #else //KAB_EMBEDDED ExtensionFactory* mFactory; QString mName; QString mComment; #endif //KAB_EMBEDDED }; KABConfigWidget::KABConfigWidget( KABPrefs* prefs, QWidget *parent, const char *name ) : KPrefsWidget( prefs, parent, name ) { - QVBoxLayout *topLayout = new QVBoxLayout( this, 0, + Q3VBoxLayout *topLayout = new Q3VBoxLayout( this, 0, KDialog::spacingHintSmall() ); QTabWidget *tabWidget = new QTabWidget( this ); topLayout->addWidget( tabWidget ); // General page QWidget *generalPage = new QWidget( this ); - QVBoxLayout *layout = new QVBoxLayout( generalPage, KDialog::marginHintSmall(), + Q3VBoxLayout *layout = new Q3VBoxLayout( generalPage, KDialog::marginHintSmall(), KDialog::spacingHintSmall() ); QWidget *hBox = new QWidget( generalPage, "qhbox" ); - QHBoxLayout *hboxLayout = new QHBoxLayout( hBox); + Q3HBoxLayout *hboxLayout = new Q3HBoxLayout( hBox); KPrefsWidFont *detailsFont = addWidFont(i18n("phone:123"),i18n("Details view font"), &(KABPrefs::instance()->mDetailsFont),hBox); hboxLayout->addWidget(detailsFont->label()); hboxLayout->addWidget(detailsFont->preview()); hboxLayout->addWidget(detailsFont->button()); hboxLayout->setMargin(KDialog::marginHintSmall() ); hboxLayout->setSpacing(KDialog::spacingHintSmall()); //hBox->setBackgroundColor( black); layout->addWidget( hBox ); //general groupbox QWidget *vBox = new QWidget( generalPage, "qvbox" ); - QVBoxLayout *boxLayout = new QVBoxLayout( vBox ); + Q3VBoxLayout *boxLayout = new Q3VBoxLayout( vBox ); boxLayout->setAlignment( Qt::AlignTop ); boxLayout->setMargin(KDialog::marginHintSmall() ); boxLayout->setSpacing( KDialog::spacingHintSmall() ); mMenuBarBox = new QCheckBox( i18n( "Full Menu bar (restart)" ), vBox, "mremenuturn" ); boxLayout->addWidget( mMenuBarBox ); mSearchReturnBox = new QCheckBox( i18n( "Search only after <return> key pressed" ), vBox, "mreturn" ); boxLayout->addWidget( mSearchReturnBox ); mAutoSearchWithWildcardBox = new QCheckBox( i18n( "Search with '*' prefix (wildcard)" ), vBox, "mwildcard" ); boxLayout->addWidget( mAutoSearchWithWildcardBox); mHideSearchOnSwitchBox = new QCheckBox( i18n( "Shrink searchfield in portrait view" ), vBox, "mswitch" ); boxLayout->addWidget( mHideSearchOnSwitchBox ); #ifdef DESKTOP_VERSION mHideSearchOnSwitchBox->hide(); #endif mViewsSingleClickBox = new QCheckBox( i18n( "Show edit dialog on single click" ), vBox, "msingle" ); boxLayout->addWidget( mViewsSingleClickBox ); mNameParsing = new QCheckBox( i18n( "Automatic name parsing for new contacts" ), vBox, "mparse" ); boxLayout->addWidget( mNameParsing ); mMultipleViewsAtOnce = new QCheckBox( i18n( "Display List and Details at once (restart)" ), vBox, "mdisplay" ); boxLayout->addWidget( mMultipleViewsAtOnce ); mAskForDelete = new QCheckBox( i18n( "Ask before delete contact" ), vBox, "mdel" ); boxLayout->addWidget( mAskForDelete ); mAskForQuit = new QCheckBox( i18n( "Show exit confirmation" ), vBox, "mquit" ); boxLayout->addWidget( mAskForQuit ); layout->addWidget( vBox ); tabWidget->addTab( generalPage, i18n( "General" ) ); // Extension page QWidget *extensionPage = new QWidget( this ); - QVBoxLayout *extensionLayout = new QVBoxLayout( extensionPage, KDialog::marginHintSmall(), + Q3VBoxLayout *extensionLayout = new Q3VBoxLayout( extensionPage, KDialog::marginHintSmall(), KDialog::spacingHintSmall() ); //extensions groupbox - QGroupBox* groupBox = new QGroupBox( 0, Qt::Vertical, i18n( "Extensions (restart)" ), extensionPage ); - boxLayout = new QVBoxLayout( groupBox->layout() ); + Q3GroupBox* groupBox = new Q3GroupBox( 0, Qt::Vertical, i18n( "Extensions (restart)" ), extensionPage ); + boxLayout = new Q3VBoxLayout( groupBox->layout() ); boxLayout->setAlignment( Qt::AlignTop ); boxLayout->setMargin(KDialog::marginHintSmall()); boxLayout->setSpacing(KDialog::spacingHintSmall()); groupBox->layout()->setMargin(1) ; groupBox->layout()->setSpacing(0); mExtensionView = new KListView( groupBox ); mExtensionView->setAllColumnsShowFocus( true ); mExtensionView->addColumn( i18n( "Name" ) ); mExtensionView->addColumn( i18n( "Description" ) ); //mExtensionView->setMaximumHeight(80); boxLayout->addWidget( mExtensionView ); mConfigureButton = new QPushButton( i18n( "Configure..." ), groupBox ); mConfigureButton->setEnabled( false ); boxLayout->addWidget( mConfigureButton ); extensionLayout->addWidget( groupBox ); connect( mMenuBarBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); connect( mNameParsing, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); connect( mViewsSingleClickBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); connect( mSearchReturnBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); connect( mAutoSearchWithWildcardBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); connect( mHideSearchOnSwitchBox, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); connect( mMultipleViewsAtOnce, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); connect( mAskForQuit, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); connect( mAskForDelete, SIGNAL( toggled( bool ) ), this, SLOT( modified() ) ); - connect( mExtensionView, SIGNAL( selectionChanged( QListViewItem* ) ), - SLOT( selectionChanged( QListViewItem* ) ) ); - connect( mExtensionView, SIGNAL( clicked( QListViewItem* ) ), - SLOT( itemClicked( QListViewItem* ) ) ); + connect( mExtensionView, SIGNAL( selectionChanged( Q3ListViewItem* ) ), + SLOT( selectionChanged( Q3ListViewItem* ) ) ); + connect( mExtensionView, SIGNAL( clicked( Q3ListViewItem* ) ), + SLOT( itemClicked( Q3ListViewItem* ) ) ); connect( mConfigureButton, SIGNAL( clicked() ), SLOT( configureExtension() ) ); tabWidget->addTab( extensionPage, i18n( "Extensions" ) ); // Addressee page mAddresseeWidget = new AddresseeWidget( this ); tabWidget->addTab( mAddresseeWidget, i18n( "Contact" ) ); connect( mAddresseeWidget, SIGNAL( modified() ), SLOT( modified() ) ); } void KABConfigWidget::usrReadConfig() { KABPrefs* prefs = KABPrefs::instance(); bool blocked = signalsBlocked(); blockSignals( true ); mMenuBarBox->setChecked( prefs->mFullMenuBarVisible); mNameParsing->setChecked( prefs->mAutomaticNameParsing ); mViewsSingleClickBox->setChecked( prefs->mHonorSingleClick ); mSearchReturnBox->setChecked( prefs->mSearchWithReturn ); mAutoSearchWithWildcardBox->setChecked( prefs->mAutoSearchWithWildcard ); mHideSearchOnSwitchBox->setChecked( prefs->mHideSearchOnSwitch ); mMultipleViewsAtOnce->setChecked( prefs->mMultipleViewsAtOnce ); mAskForQuit->setChecked( prefs->mAskForQuit ); mAskForDelete->setChecked( prefs->mAskForDelete ); mAddresseeWidget->restoreSettings(); restoreExtensionSettings(); blockSignals( blocked ); } void KABConfigWidget::usrWriteConfig() { KABPrefs* prefs = KABPrefs::instance(); prefs->mFullMenuBarVisible = mMenuBarBox->isChecked(); prefs->mAutomaticNameParsing = mNameParsing->isChecked(); prefs->mHonorSingleClick = mViewsSingleClickBox->isChecked(); prefs->mSearchWithReturn = mSearchReturnBox->isChecked(); prefs->mAutoSearchWithWildcard = mAutoSearchWithWildcardBox->isChecked(); prefs->mHideSearchOnSwitch = mHideSearchOnSwitchBox->isChecked(); prefs->mMultipleViewsAtOnce = mMultipleViewsAtOnce->isChecked(); prefs->mAskForQuit = mAskForQuit->isChecked(); prefs->mAskForDelete = mAskForDelete->isChecked(); mAddresseeWidget->saveSettings(); saveExtensionSettings(); } void KABConfigWidget::restoreExtensionSettings() { QStringList activeExtensions = KABPrefs::instance()->mActiveExtensions; mExtensionView->clear(); #ifndef KAB_EMBEDDED KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/Extension" ); KTrader::OfferList::ConstIterator it; for ( it = plugins.begin(); it != plugins.end(); ++it ) { if ( !(*it)->hasServiceType( "KAddressBook/Extension" ) ) continue; ExtensionItem *item = new ExtensionItem( mExtensionView, (*it)->name() ); item->setService( *it ); if ( activeExtensions.contains( item->factory()->identifier() ) ) item->setOn( true ); } #else //KAB_EMBEDDED ExtensionFactory *extensionFactory = new MergeFactory(); ExtensionItem *item = new ExtensionItem( mExtensionView, "Merge", "Merge", "Merge contacts"); item->setFactory( extensionFactory ); if ( activeExtensions.contains( extensionFactory->identifier() ) ) item->setOn( true ); extensionFactory = new DistributionListFactory(); item = new ExtensionItem( mExtensionView, "Distribution List", "Distribution List", "Manage Distribution Lists"); item->setFactory( extensionFactory ); if ( activeExtensions.contains( extensionFactory->identifier() ) ) item->setOn( true ); #endif //KAB_EMBEDDED } void KABConfigWidget::saveExtensionSettings() { QStringList activeExtensions; - QPtrList<QListViewItem> list; - QListViewItemIterator it( mExtensionView ); + Q3PtrList<Q3ListViewItem> list; + Q3ListViewItemIterator it( mExtensionView ); while ( it.current() ) { ExtensionItem *item = static_cast<ExtensionItem*>( it.current() ); if ( item ) { if ( item->isOn() ) activeExtensions.append( item->factory()->identifier() ); } ++it; } KABPrefs::instance()->mActiveExtensions = activeExtensions; } void KABConfigWidget::configureExtension() { ExtensionItem *item = static_cast<ExtensionItem*>( mExtensionView->currentItem() ); if ( !item ) return; #ifndef KAB_EMBEDDED KConfig config( "kaddressbookrc" ); #else //KAB_EMBEDDED KConfig config( locateLocal("config", "kaddressbookrc") ); #endif //KAB_EMBEDDED config.setGroup( QString( "Extensions_%1" ).arg( item->factory()->identifier() ) ); ExtensionConfigDialog dlg( item->factory(), &config, this ); dlg.exec(); config.sync(); } -void KABConfigWidget::selectionChanged( QListViewItem *i ) +void KABConfigWidget::selectionChanged( Q3ListViewItem *i ) { ExtensionItem *item = static_cast<ExtensionItem*>( i ); if ( !item ) return; mConfigureButton->setEnabled( item->configWidgetAvailable() ); } -void KABConfigWidget::itemClicked( QListViewItem *item ) +void KABConfigWidget::itemClicked( Q3ListViewItem *item ) { if ( item != 0 ) modified(); } #ifndef KAB_EMBEDDED -ExtensionItem::ExtensionItem( QListView *parent, const QString &text ) - : QCheckListItem( parent, text, CheckBox ) +ExtensionItem::ExtensionItem( Q3ListView *parent, const QString &text ) + : Q3CheckListItem( parent, text, CheckBox ) { } void ExtensionItem::setService( const KService::Ptr &ptr ) { mPtr = ptr; } #else //KAB_EMBEDDED -ExtensionItem::ExtensionItem( QListView *parent, const QString &text, const QString &name, const QString &comment ) - : QCheckListItem( parent, text, CheckBox ) +ExtensionItem::ExtensionItem( Q3ListView *parent, const QString &text, const QString &name, const QString &comment ) + : Q3CheckListItem( parent, text, CheckBox ) { mName = name; mComment = comment; } void ExtensionItem::setFactory( ExtensionFactory* fac ) { mFactory = fac; } #endif //KAB_EMBEDDED bool ExtensionItem::configWidgetAvailable() const { #ifndef KAB_EMBEDDED KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() ); if ( !factory ) return false; ExtensionFactory *extensionFactory = static_cast<ExtensionFactory*>( factory ); if ( !extensionFactory ) return false; return extensionFactory->configureWidgetAvailable(); #else //KAB_EMBEDDED return mFactory->configureWidgetAvailable(); #endif //KAB_EMBEDDED } ExtensionFactory *ExtensionItem::factory() const { #ifndef KAB_EMBEDDED KLibFactory *factory = KLibLoader::self()->factory( mPtr->library().latin1() ); if ( !factory ) return 0; return static_cast<ExtensionFactory*>( factory ); #else //KAB_EMBEDDED return mFactory; #endif //KAB_EMBEDDED } QString ExtensionItem::text( int column ) const { #ifndef KAB_EMBEDDED if ( column == 0 ) return mPtr->name(); else if ( column == 1 ) return mPtr->comment(); else return QString::null; #else //KAB_EMBEDDED if ( column == 0 ) return mName; else if ( column == 1 ) return mComment; else return QString::null; #endif //KAB_EMBEDDED } -#ifndef KAB_EMBEDDED -#include "kabconfigwidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_kabconfigwidget.cpp" #endif //KAB_EMBEDDED - diff --git a/kaddressbook/kcmconfigs/kabconfigwidget.h b/kaddressbook/kcmconfigs/kabconfigwidget.h index f2a6b1b..4b6e58c 100644 --- a/kaddressbook/kcmconfigs/kabconfigwidget.h +++ b/kaddressbook/kcmconfigs/kabconfigwidget.h @@ -1,78 +1,78 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KABCONFIGWIDGET_H #define KABCONFIGWIDGET_H #include <kprefswidget.h> class QCheckBox; -class QListViewItem; +class Q3ListViewItem; class QPushButton; class QComboBox; class QLineEdit; class KListView; class KABPrefs; class AddresseeWidget; class KABConfigWidget : public KPrefsWidget { Q_OBJECT public: KABConfigWidget(KABPrefs *prefs, QWidget *parent, const char *name = 0 ); protected: /** Implement this to read custom configuration widgets. */ virtual void usrReadConfig(); /** Implement this to write custom configuration widgets. */ virtual void usrWriteConfig(); private slots: void configureExtension(); - void selectionChanged( QListViewItem* ); - void itemClicked( QListViewItem* ); + void selectionChanged( Q3ListViewItem* ); + void itemClicked( Q3ListViewItem* ); private: void restoreExtensionSettings(); void saveExtensionSettings(); KListView *mExtensionView; QCheckBox *mSearchReturnBox; QCheckBox *mNameParsing; QCheckBox *mViewsSingleClickBox; QCheckBox *mAutoSearchWithWildcardBox; QCheckBox *mHideSearchOnSwitchBox; QCheckBox *mMultipleViewsAtOnce; QCheckBox *mAskForQuit; QCheckBox *mMenuBarBox; QCheckBox *mAskForDelete; QPushButton *mConfigureButton; AddresseeWidget *mAddresseeWidget; }; #endif diff --git a/kaddressbook/kcmconfigs/kcmkabconfig.cpp b/kaddressbook/kcmconfigs/kcmkabconfig.cpp index cbfedbd..55ffcd8 100644 --- a/kaddressbook/kcmconfigs/kcmkabconfig.cpp +++ b/kaddressbook/kcmconfigs/kcmkabconfig.cpp @@ -1,92 +1,94 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlayout.h> +//Added by qt3to4: +#include <Q3VBoxLayout> #ifndef KAB_EMBEDDED #include <kaboutdata.h> #endif //KAB_EMBEDDED #include <kdebug.h> //#include <klocale.h> //#include <stdlib.h> #include "kabconfigwidget.h" #include "kcmkabconfig.h" #include "kabprefs.h" #include "kprefs.h" extern "C" { KCModule *create_kabconfig( QWidget *parent, const char * ) { return new KCMKabConfig( parent, "kcmkabconfig" ); } } KCMKabConfig::KCMKabConfig( QWidget *parent, const char *name ) : KCModule( KABPrefs::instance(), parent, name ) { //abort(); - QVBoxLayout *layout = new QVBoxLayout( this ); + Q3VBoxLayout *layout = new Q3VBoxLayout( this ); mConfigWidget = new KABConfigWidget( (KABPrefs*)getPreferences(), this, "KABConfigWidget" ); layout->addWidget( mConfigWidget ); layout->setSpacing( 0 ); layout->setMargin( 0 ); connect( mConfigWidget, SIGNAL( changed( bool ) ), SIGNAL( changed( bool ) ) ); } void KCMKabConfig::load() { mConfigWidget->readConfig(); } void KCMKabConfig::save() { mConfigWidget->writeConfig(); } void KCMKabConfig::defaults() { mConfigWidget->setDefaults(); } #ifndef KAB_EMBEDDED const KAboutData* KCMKabConfig::aboutData() const { KAboutData *about = new KAboutData( I18N_NOOP( "kcmkabconfig" ), I18N_NOOP( "KAddressBook Configure Dialog" ), 0, 0, KAboutData::License_GPL, I18N_NOOP( "(c), 2003 Tobias Koenig" ) ); about->addAuthor( "Tobias Koenig", 0, "tokoe@kde.org" ); return about; } #endif //KAB_EMBEDDED -#ifndef KAB_EMBEDDED -#include "kcmkabconfig.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_kcmkabconfig.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/keywidget.cpp b/kaddressbook/keywidget.cpp index c117d34..8ebee19 100644 --- a/kaddressbook/keywidget.cpp +++ b/kaddressbook/keywidget.cpp @@ -1,277 +1,279 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qfile.h> #include <qinputdialog.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> +//Added by qt3to4: +#include <Q3GridLayout> #ifndef KAB_EMBEDDED #include <kaccelmanager.h> #include <kio/netaccess.h> #include <kmessagebox.h> #else //KAB_EMBEDDED #include <qmap.h> #include <qmessagebox.h> -#include <qtextstream.h> +#include <q3textstream.h> #include <kurl.h> #endif //KAB_EMBEDDED #include <kapplication.h> #include <kcombobox.h> #include <kdialog.h> #include <kfiledialog.h> #include <klocale.h> #include <ktempfile.h> #include "keywidget.h" KeyWidget::KeyWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { - QGridLayout *layout = new QGridLayout( this, 2, 2, KDialog::marginHint(), + Q3GridLayout *layout = new Q3GridLayout( this, 2, 2, KDialog::marginHint(), KDialog::spacingHint() ); QLabel *label = new QLabel( i18n( "Keys:" ), this ); layout->addWidget( label, 0, 0 ); mKeyCombo = new KComboBox( this ); layout->addWidget( mKeyCombo, 0, 1 ); mAddButton = new QPushButton( i18n( "Add" ), this ); layout->addWidget( mAddButton, 1, 0 ); mRemoveButton = new QPushButton( i18n( "Remove" ), this ); mRemoveButton->setEnabled( false ); layout->addWidget( mRemoveButton, 1, 1 ); mExportButton = new QPushButton( i18n( "Export" ), this ); mExportButton->setEnabled( false ); layout->addMultiCellWidget( mExportButton, 2, 2, 0, 1 ); connect( mAddButton, SIGNAL( clicked() ), SLOT( addKey() ) ); connect( mRemoveButton, SIGNAL( clicked() ), SLOT( removeKey() ) ); connect( mExportButton, SIGNAL( clicked() ), SLOT( exportKey() ) ); } KeyWidget::~KeyWidget() { } void KeyWidget::setKeys( const KABC::Key::List &list ) { mKeyList = list; updateKeyCombo(); } KABC::Key::List KeyWidget::keys() const { return mKeyList; } void KeyWidget::addKey() { QMap<QString, int> keyMap; QStringList keyTypeNames; QStringList existingKeyTypes; KABC::Key::List::Iterator listIt; for ( listIt = mKeyList.begin(); listIt != mKeyList.end(); ++listIt ) { if ( (*listIt).type() != KABC::Key::Custom ) existingKeyTypes.append( KABC::Key::typeLabel( (*listIt).type() ) ); } KABC::Key::TypeList typeList = KABC::Key::typeList(); KABC::Key::TypeList::Iterator it; for ( it = typeList.begin(); it != typeList.end(); ++it ) { if ( (*it) != KABC::Key::Custom && !existingKeyTypes.contains( KABC::Key::typeLabel( *it ) ) ) { keyMap.insert( KABC::Key::typeLabel( *it ), *it ); keyTypeNames.append( KABC::Key::typeLabel( *it ) ); } } bool ok; QString name = QInputDialog::getItem( i18n( "Key type" ), i18n( "Select the key type." ), keyTypeNames, 0, true, &ok ); if ( !ok || name.isEmpty() ) return; int type = keyMap[ name ]; if ( !keyTypeNames.contains( name ) ) type = KABC::Key::Custom; #ifndef KAB_EMBEDDED KURL url = KFileDialog::getOpenURL(); if ( url.isEmpty() ) return; QString tmpFile; if ( KIO::NetAccess::download( url, tmpFile ) ) { QFile file( tmpFile ); - if ( !file.open( IO_ReadOnly ) ) { + if ( !file.open( QIODevice::ReadOnly ) ) { QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) ); KMessageBox::error( this, text.arg( url.url() ) ); return; } #else //KAB_EMBEDDED QString keyfile = KFileDialog::getOpenFileName( "huhu", "Select Key", this ); if ( keyfile.isEmpty() ) return; { QFile file( keyfile ); - if ( !file.open( IO_ReadOnly ) ) { + if ( !file.open( QIODevice::ReadOnly ) ) { QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) ); QString caption( i18n( "Error" ) ); QMessageBox::critical( this, caption, text.arg( keyfile ) ); return; } #endif //KAB_EMBEDDED - QTextStream s( &file ); + Q3TextStream s( &file ); QString data; - s.setEncoding( QTextStream::UnicodeUTF8 ); + s.setEncoding( Q3TextStream::UnicodeUTF8 ); s >> data; file.close(); KABC::Key key( data, type ); if ( type == KABC::Key::Custom ) key.setCustomTypeString( name ); mKeyList.append( key ); emit changed(); #ifndef KAB_EMBEDDED KIO::NetAccess::removeTempFile( tmpFile ); #endif //KAB_EMBEDDED } updateKeyCombo(); } void KeyWidget::removeKey() { int pos = mKeyCombo->currentItem(); if ( pos == -1 ) return; QString type = mKeyCombo->currentText(); QString text = i18n( "<qt>Do you really want to remove the key <b>%1</b>?</qt>" ); #ifndef KAB_EMBEDDED if ( KMessageBox::questionYesNo( this, text.arg( type ) ) == KMessageBox::No ) return; #else //KAB_EMBEDDED QString caption = i18n( "Confirm Delete" ); if (QMessageBox::information( this, caption, text.arg( type ), i18n("Yes!"), i18n("No"), 0, 0 ) == 1) return; #endif //KAB_EMBEDDED mKeyList.remove( mKeyList.at( pos ) ); emit changed(); updateKeyCombo(); } void KeyWidget::exportKey() { KABC::Key key = (*mKeyList.at( mKeyCombo->currentItem() ) ); #ifndef KAB_EMBEDDED KURL url = KFileDialog::getSaveURL(); KTempFile tempFile; - QTextStream *s = tempFile.textStream(); - s->setEncoding( QTextStream::UnicodeUTF8 ); + Q3TextStream *s = tempFile.textStream(); + s->setEncoding( Q3TextStream::UnicodeUTF8 ); (*s) << key.textData(); tempFile.close(); KIO::NetAccess::upload( tempFile.name(), url, kapp->mainWidget() ); #else //KAB_EMBEDDED QString keyfile = KFileDialog::getSaveFileName( "huhu", "Save Key", this ); if ( keyfile.isEmpty() ) return; QFile file( keyfile ); - if ( !file.open( IO_ReadWrite ) ) { + if ( !file.open( QIODevice::ReadWrite ) ) { QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) ); QString caption( i18n( "Error" ) ); QMessageBox::critical( this, caption, text.arg( keyfile ) ); return; } - QTextStream s( &file ); - s.setEncoding( QTextStream::UnicodeUTF8 ); + Q3TextStream s( &file ); + s.setEncoding( Q3TextStream::UnicodeUTF8 ); s << key.textData(); file.close(); #endif //KAB_EMBEDDED } void KeyWidget::updateKeyCombo() { int pos = mKeyCombo->currentItem(); mKeyCombo->clear(); KABC::Key::List::Iterator it; for ( it = mKeyList.begin(); it != mKeyList.end(); ++it ) { if ( (*it).type() == KABC::Key::Custom ) mKeyCombo->insertItem( (*it).customTypeString() ); else mKeyCombo->insertItem( KABC::Key::typeLabel( (*it).type() ) ); } mKeyCombo->setCurrentItem( pos ); bool state = ( mKeyList.count() != 0 ); mRemoveButton->setEnabled( state ); mExportButton->setEnabled( state ); } -#ifndef KAB_EMBEDDED -#include "keywidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_keywidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/mainembedded.cpp b/kaddressbook/mainembedded.cpp index 2f3531d..e373105 100644 --- a/kaddressbook/mainembedded.cpp +++ b/kaddressbook/mainembedded.cpp @@ -1,119 +1,118 @@ #ifndef DESKTOP_VERSION #include <qpe/qpeapplication.h> #include <qcopchannel_qws.h> #include <stdlib.h> #else #include <qapplication.h> #include <qwindowsstyle.h> -#include <qplatinumstyle.h> -#include <qmainwindow.h> +#include <q3mainwindow.h> #include <qmessagebox.h> #include <stdlib.h> #endif #include <qtextcodec.h> #include <kstandarddirs.h> #include <qregexp.h> #include <kglobal.h> #include <stdio.h> #include <qdir.h> #include "kabprefs.h" #include "kaddressbookmain.h" #include "externalapphandler.h" #include <libkdepim/kpimglobalprefs.h> void dumpMissing(); int main( int argc, char **argv ) { + if(!getenv("QPEDIR")) putenv("QPEDIR=/usr/lib/kdepimpi"); #ifndef DESKTOP_VERSION QPEApplication a( argc, argv ); a.setKeepRunning (); #else QApplication a( argc, argv ); - QApplication::setStyle( new QPlatinumStyle ()); #ifdef _WIN32_ QString hdir ( getenv( "HOME") ); if ( hdir.isEmpty() ) { QString hd ("C:/" ); //QMessageBox::information(0,"hh",QDir::homeDirPath()+" xx" +hd ); if ( QDir::homeDirPath().lower() == hd.lower() ) { _putenv( "HOME=C:"); //QMessageBox::information(0,"hh",QString ( getenv( "HOME") ) ); } } else { QDir app_dir; if ( !app_dir.exists(hdir) ) app_dir.mkdir (hdir); } #endif #endif bool exitHelp = false; if ( argc > 1 ) { QString command = argv[1]; if ( command == "-help" ){ printf("KA/E command line commands:\n"); printf(" no command: Start KA/E in usual way\n"); printf(" -help: This output\n"); printf(" KA/E is exiting now. Bye!\n"); exitHelp = true; } } if ( ! exitHelp ) { KGlobal::setAppName( "kaddressbook" ); #ifndef DESKTOP_VERSION if ( QApplication::desktop()->width() > 320 ) KGlobal::iconLoader()->setIconPath(QString(getenv("QPEDIR"))+"/pics/kdepim/kaddressbook/icons22/"); else KGlobal::iconLoader()->setIconPath(QString(getenv("QPEDIR"))+"/pics/kdepim/kaddressbook/icons16/"); #else QString fileName ; fileName = qApp->applicationDirPath () + "/kdepim/kaddressbook/icons22/"; KGlobal::iconLoader()->setIconPath(QDir::convertSeparators(fileName)); QApplication::addLibraryPath ( qApp->applicationDirPath () ); #endif KStandardDirs::setAppDir( QDir::convertSeparators(locateLocal("data", "kaddressbook"))); // init language KPimGlobalPrefs::instance()->setGlobalConfig(); QApplication::setFont( KPimGlobalPrefs::instance()->mApplicationFont ); KAddressBookMain m ; //US MainWindow m; #ifndef DESKTOP_VERSION a.showMainWidget( &m ); #else a.setMainWidget( &m ); m.show(); #endif m.setCaption(i18n("Loading addressbook data ... please wait" )); a.exec(); #ifdef DESKTOP_VERSION KConfig *config = KABPrefs::instance()->getConfig(); config->setGroup("WidgetLayout"); QStringList list ;//= config->readListEntry("MainLayout"); int x,y,w,h; QWidget* wid; wid = &m; x = wid->geometry().x(); y = wid->geometry().y(); w = wid->width(); h = wid->height(); list.clear(); list << QString::number( x ); list << QString::number( y ); list << QString::number( w ); list << QString::number( h ); config->writeEntry("MainLayout",list ); config->sync(); #endif dumpMissing(); KPimGlobalPrefs::instance()->writeConfig(); } qDebug("KA: Bye! "); } diff --git a/kaddressbook/nameeditdialog.cpp b/kaddressbook/nameeditdialog.cpp index 199f3d6..96822d8 100644 --- a/kaddressbook/nameeditdialog.cpp +++ b/kaddressbook/nameeditdialog.cpp @@ -1,300 +1,302 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlayout.h> #include <qlabel.h> -#include <qlistbox.h> -#include <qlistview.h> +#include <q3listbox.h> +#include <q3listview.h> #include <qtooltip.h> #include <qpushbutton.h> #include <qcheckbox.h> #include <qstring.h> +//Added by qt3to4: +#include <Q3GridLayout> #ifndef KAB_EMBEDDED #include <kaccelmanager.h> #else //KAB_EMBEDDED #include <kstandarddirs.h> #endif //KAB_EMBEDDED #include <kapplication.h> #include <kbuttonbox.h> #include <kconfig.h> #include <klineedit.h> #include <klistview.h> #include <kcombobox.h> #include <klocale.h> #include <kglobal.h> #include <kdebug.h> #include <kiconloader.h> #include <kmessagebox.h> #include "nameeditdialog.h" NameEditDialog::NameEditDialog( const KABC::Addressee &addr, int type, QWidget *parent, const char *name ) : KDialogBase( Plain, i18n( "Edit Contact Name" ), Help | Ok | Cancel, Ok, parent, name, true ) { QWidget *page = plainPage(); - QGridLayout *layout = new QGridLayout( page, 5, 3 ); + Q3GridLayout *layout = new Q3GridLayout( page, 5, 3 ); layout->setSpacing( spacingHint() ); layout->addColSpacing( 2, 100 ); QLabel *label; label = new QLabel( i18n( "Honorific prefixes:" ), page ); layout->addWidget( label, 0, 0 ); mPrefixCombo = new KComboBox( page ); mPrefixCombo->setDuplicatesEnabled( false ); mPrefixCombo->setEditable( true ); label->setBuddy( mPrefixCombo ); layout->addMultiCellWidget( mPrefixCombo, 0, 0, 1, 2 ); label = new QLabel( i18n( "Given name:" ), page ); layout->addWidget( label, 1, 0 ); mGivenNameEdit = new KLineEdit( page ); label->setBuddy( mGivenNameEdit ); layout->addMultiCellWidget( mGivenNameEdit, 1, 1, 1, 2 ); label = new QLabel( i18n( "Additional names:" ), page ); layout->addWidget( label, 2, 0 ); mAdditionalNameEdit = new KLineEdit( page ); label->setBuddy( mAdditionalNameEdit ); layout->addMultiCellWidget( mAdditionalNameEdit, 2, 2, 1, 2 ); label = new QLabel( i18n( "Family names:" ), page ); layout->addWidget( label, 3, 0 ); mFamilyNameEdit = new KLineEdit( page ); label->setBuddy( mFamilyNameEdit ); layout->addMultiCellWidget( mFamilyNameEdit, 3, 3, 1, 2 ); label = new QLabel( i18n( "Honorific suffixes:" ), page ); layout->addWidget( label, 4, 0 ); mSuffixCombo = new KComboBox( page ); mSuffixCombo->setDuplicatesEnabled( false ); mSuffixCombo->setEditable( true ); label->setBuddy( mSuffixCombo ); layout->addMultiCellWidget( mSuffixCombo, 4, 4, 1, 2 ); mFormattedNameCombo = new KComboBox( page ); mFormattedNameCombo->setMaximumWidth(100); layout->addMultiCellWidget( mFormattedNameCombo, 5, 5, 0, 0 ); connect( mFormattedNameCombo, SIGNAL( activated( int ) ), SLOT( typeChanged( int ) ) ); mFormattedNameEdit = new KLineEdit( page ); mFormattedNameEdit->setEnabled( type == CustomName ); layout->addMultiCellWidget( mFormattedNameEdit, 5, 5, 1, 2 ); mParseBox = new QCheckBox( i18n( "Parse name automatically" ), page ); connect( mParseBox, SIGNAL( toggled(bool) ), SLOT( parseBoxChanged(bool) ) ); connect( mParseBox, SIGNAL( toggled(bool) ), SLOT( modified() ) ); layout->addMultiCellWidget( mParseBox, 6, 6, 0, 2 ); // Fill in the values mFamilyNameEdit->setText( addr.familyName() ); mGivenNameEdit->setText( addr.givenName() ); mAdditionalNameEdit->setText( addr.additionalName() ); mFormattedNameEdit->setText( addr.formattedName() ); // Prefix and suffix combos //US KConfig config( "kabcrc" ); KConfig config( locateLocal("config", "kabcrc") ); config.setGroup( "General" ); QStringList sTitle; sTitle += i18n( "Dr." ); sTitle += i18n( "Miss" ); sTitle += i18n( "Mr." ); sTitle += i18n( "Mrs." ); sTitle += i18n( "Ms." ); sTitle += i18n( "Prof." ); sTitle += config.readListEntry( "Prefixes" ); sTitle.sort(); QStringList sSuffix; sSuffix += i18n( "I" ); sSuffix += i18n( "II" ); sSuffix += i18n( "III" ); sSuffix += i18n( "Jr." ); sSuffix += i18n( "Sr." ); sSuffix += config.readListEntry( "Suffixes" ); sSuffix.sort(); mPrefixCombo->insertStringList( sTitle ); mSuffixCombo->insertStringList( sSuffix ); #ifndef KAB_EMBEDDED mPrefixCombo->setCurrentText( addr.prefix() ); mSuffixCombo->setCurrentText( addr.suffix() ); #else //KAB_EMBEDDED mPrefixCombo->setEditText( addr.prefix() ); mSuffixCombo->setEditText( addr.suffix() ); #endif //KAB_EMBEDDED AddresseeConfig::instance()->setUid( addr.uid() ); mParseBox->setChecked( AddresseeConfig::instance()->automaticNameParsing() ); #ifndef KAB_EMBEDDED KAcceleratorManager::manage( this ); #endif //KAB_EMBEDDED connect( mPrefixCombo, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mPrefixCombo, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) ); connect( mGivenNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mGivenNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) ); connect( mAdditionalNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mAdditionalNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) ); connect( mFamilyNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mFamilyNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) ); connect( mSuffixCombo, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); connect( mSuffixCombo, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) ); connect( mFormattedNameCombo, SIGNAL( activated( int ) ), SLOT( modified() ) ); connect( mFormattedNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) ); updateTypeCombo(); mFormattedNameCombo->setCurrentItem( type ); mChanged = false; } NameEditDialog::~NameEditDialog() { } QString NameEditDialog::familyName() const { return mFamilyNameEdit->text(); } QString NameEditDialog::givenName() const { return mGivenNameEdit->text(); } QString NameEditDialog::prefix() const { return mPrefixCombo->currentText(); } QString NameEditDialog::suffix() const { return mSuffixCombo->currentText(); } QString NameEditDialog::additionalName() const { return mAdditionalNameEdit->text(); } QString NameEditDialog::customFormattedName() const { return mFormattedNameEdit->text(); } int NameEditDialog::formattedNameType() const { return mFormattedNameCombo->currentItem(); } bool NameEditDialog::changed() const { return mChanged; } QString NameEditDialog::formattedName( const KABC::Addressee &addr, int type ) { QString retval; switch ( type ) { case SimpleName: retval = addr.givenName() + " " + addr.familyName(); break; case FullName: retval =addr.prefix() + " " + addr.givenName() + " " + addr.additionalName() + " " + addr.familyName() + " " + addr.suffix(); break; case ReverseName: if ( !addr.familyName().isEmpty() ) { retval = addr.familyName(); if ( !addr.givenName().isEmpty() ) retval += ", " + addr.givenName(); } else retval = addr.givenName(); break; default: return ""; break; } return retval.stripWhiteSpace (); } void NameEditDialog::parseBoxChanged( bool value ) { //AddresseeConfig::instance()->setUid( addr.uid() ); AddresseeConfig::instance()->setAutomaticNameParsing( value ); } void NameEditDialog::typeChanged( int pos ) { mFormattedNameEdit->setEnabled( pos == 0 ); } void NameEditDialog::modified() { mChanged = true; } void NameEditDialog::updateTypeCombo() { KABC::Addressee addr; addr.setPrefix( mPrefixCombo->currentText() ); addr.setGivenName( mGivenNameEdit->text() ); addr.setAdditionalName( mAdditionalNameEdit->text() ); addr.setFamilyName( mFamilyNameEdit->text() ); addr.setSuffix( mSuffixCombo->currentText() ); int pos = mFormattedNameCombo->currentItem(); mFormattedNameCombo->clear(); mFormattedNameCombo->insertItem( i18n( "Custom" ) ); mFormattedNameCombo->insertItem( formattedName( addr, SimpleName ) ); mFormattedNameCombo->insertItem( formattedName( addr, FullName ) ); mFormattedNameCombo->insertItem( formattedName( addr, ReverseName ) ); mFormattedNameCombo->setCurrentItem( pos ); } void NameEditDialog::slotHelp() { #ifndef KAB_EMBEDDED kapp->invokeHelp( "managing-contacts-automatic-nameparsing" ); #else //KAB_EMBEDDED qDebug("NameEditDialog::slotHelp Help is not supported yet"); #endif //KAB_EMBEDDED } -#ifndef KAB_EMBEDDED -#include "nameeditdialog.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_nameeditdialog.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/old_mainwindow.cpp b/kaddressbook/old_mainwindow.cpp index 0e886d9..7a445c7 100644 --- a/kaddressbook/old_mainwindow.cpp +++ b/kaddressbook/old_mainwindow.cpp @@ -1,1093 +1,1093 @@ #include <qlabel.h> #include <qapp.h> #include <qmessagebox.h> #include <qaction.h> #include <kdebug.h> // defined kdDebug() #include <klocale.h> // defines i18n (microkde) #include "kabprefs.h" #ifndef DESKTOP_VERSION #include <qpe/qpetoolbar.h> #include <qpe/qpemenubar.h> #include <qpe/resource.h> #else #include <qtoolbar.h> #include <qmenubar.h> #include <resource.h> #endif /* #include <stdlib.h> #include <qaction.h> #include <qpainter.h> #include <qwhatsthis.h> #include <qpopupmenu.h> #include <qmessagebox.h> #include <qlineedit.h> #include <qfile.h> #include <qfileinfo.h> #include <qwmatrix.h> #ifndef DESKTOP_VERSION #include <qpe/global.h> #include <qpe/qpemenubar.h> #include <qpe/qpetoolbar.h> #include <qpe/resource.h> #include <qpe/qpeapplication.h> #include <qtopia/alarmserver.h> #include <qtopia/qcopenvelope_qws.h> #else #include <qtoolbar.h> #include <qdir.h> #include <qapplication.h> //#include <resource.h> #endif #include <libkcal/calendarlocal.h> #include <libkcal/todo.h> //#include "calendarview.h" //#include "koviewmanager.h" //#include "koagendaview.h" //#include "kodialogmanager.h" //#include "kdialogbase.h" //#include "koprefs.h" //#include "kfiledialog.h" //#include "koglobals.h" //#include "kconfig.h" //#include "simplealarmclient.h" */ //US using namespace KACore; #include "mainwindow.h" MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : QMainWindow( parent, name ) { #ifdef DESKTOP_VERSION setFont( QFont("Arial"), 14 ); #endif // mBlockAtStartup = true; kdDebug() << "MainWindow()::MainWindow()" << endl; // mFlagKeyPressed = false; setCaption("KAddressbook/Pi"); KABPrefs *p = KABPrefs::instance(); if ( QApplication::desktop()->height() > 480 ) { //US if ( p->mHourSize == 4 ) //US p->mHourSize = 6; } QMainWindow::ToolBarDock tbd; if ( p->mToolBarHor ) { if ( p->mToolBarUp ) tbd = Bottom; else tbd = Top; } else { if ( p->mToolBarUp ) tbd = Right; else tbd = Left; } iconToolBar = new QPEToolBar( this ); addToolBar (iconToolBar , tbd ); /*US mBlockSaveFlag = false; mCalendarModifiedFlag = false; */ QLabel* splash = new QLabel(i18n("KA/Pi is starting ... "), this ); splash->setAlignment ( AlignCenter ); setCentralWidget( splash ); #ifndef DESKTOP_VERSION showMaximized(); #endif qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ()); // setDefaultPreferences(); /* mCalendar = new CalendarLocal(); mView = new CalendarView( mCalendar, this,"mCalendar " ); mView->hide(); //mView->resize(splash->size() ); */ initActions(); #ifndef DESKTOP_VERSION //US iconToolBar->show(); qApp->processEvents(); #endif qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ()); int vh = height() ; int vw = width(); qDebug("Toolbar hei %d ",iconToolBar->height() ); /*US if ( iconToolBar->orientation () == Qt:: Horizontal ) { vh -= iconToolBar->height(); } else { vw -= iconToolBar->height(); } */ //mView->setMaximumSize( splash->size() ); //mView->resize( splash->size() ); //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); /* mView->readSettings(); if( !QFile::exists( defaultFileName() ) ) { mView->saveCalendar( defaultFileName() ); } mView->openCalendar( defaultFileName() ); processIncidenceSelection( 0 ); connect( mView, SIGNAL( incidenceSelected( Incidence * ) ), SLOT( processIncidenceSelection( Incidence * ) ) ); connect( mView, SIGNAL( modifiedChanged( bool ) ), SLOT( slotModifiedChanged( bool ) ) ); connect( mView, SIGNAL( signalmodified() ), SLOT( checkAlarms( ) ) ); connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) ); connect( &alarmTimer, SIGNAL( timeout() ), SLOT( writeAlarm() ) ); mView->setModified( false ); mBlockAtStartup = false; mView->setModified( false ); setCentralWidget( mView ); mView->show(); */ delete splash; qApp->processEvents(); //US qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); } MainWindow::~MainWindow() { qDebug("MainWindow::~MainWindow() "); kdDebug() << "MainWindow()::~MainWindow()" << endl; //save toolbar location /* KOPrefs *p = KOPrefs::instance(); p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); p->mToolBarUp = iconToolBar->x() > width()/2 || iconToolBar->y() > height()/2; alarmTimer.stop(); mView->writeSettings(); writeAlarm(); if ( mCalendarModifiedFlag ) save(); delete mCalendar; */ } void MainWindow::closeEvent( QCloseEvent* ce ) { if ( ! KABPrefs::instance()->mAskForQuit ) { ce->accept(); return; } switch( QMessageBox::information( this, "KA/Pi", i18n("Do you really want\nto close KA/Pi?"), i18n("Close!"), i18n("No"), 0, 0 ) ) { case 0: ce->accept(); break; case 1: ce->ignore(); break; case 2: default: break; } } void MainWindow::recieve( const QCString& cmsg, const QByteArray& data ) { /* QDataStream stream( data, IO_ReadOnly ); // QMessageBox::about( this, "About KOrganizer/Pi", "*" +msg +"*" ); if ( cmsg == "-writeFile" ) { mView->viewManager()->showWhatsNextView(); save(); setCaption( i18n("File written on AD request")); showMaximized(); raise(); #ifndef DESKTOP_VERSION QCopEnvelope e3("kosaved", "blabla"); #endif return; } if ( cmsg == "-newCountdown" ) { qDebug("newCountdown "); } QString msg ;; QString allmsg = cmsg; while ( allmsg.length() > 0 ) { int nextC = allmsg.find( "-", 1 ); if ( nextC == -1 ) { msg = allmsg; allmsg = ""; } else{ msg = allmsg.left( nextC ); allmsg = allmsg.mid( nextC, allmsg.length()-nextC ); } //qDebug("msg: %s all: %s ", msg.latin1(), allmsg.latin1() ); if ( msg == "-newEvent" ) { mView->newEvent(); } if ( msg == "-newTodo" ) { mView->newTodo(); } if ( msg == "-showWN" ) { mView->viewManager()->showWhatsNextView(); } if ( msg == "-showTodo" ) { mView->viewManager()->showTodoView(); } if ( msg == "-showList" ) { mView->viewManager()->showListView(); } else if ( msg == "-showDay" ) { mView->viewManager()->showDayView(); } else if ( msg == "-showWWeek" ) { mView->viewManager()->showWorkWeekView(); } else if ( msg == "-showWeek" ) { mView->viewManager()->showWeekView(); } else if ( msg == "-showTodo" ) { mView->viewManager()->showTodoView(); } else if ( msg == "-showJournal" ) { mView->viewManager()->showJournalView(); } else if ( msg == "-showKO" ) { mView->viewManager()->showNextXView(); } else if ( msg == "-showWNext" ) { mView->viewManager()->showWhatsNextView(); } } showMaximized(); raise(); */ } QPixmap MainWindow::loadPixmap( QString name ) { return KGlobal::iconLoader().loadPixmap( name ); /*US use the advanced version of the iconloader #ifdef DESKTOP_VERSION QPixmap pixmapLoader; QString file; file = QDir::homeDirPath()+"/kaddressbook/pics/" + name+".png"; //qDebug("pixmap name %s ", file.latin1()); pixmapLoader.load( file ); return pixmapLoader; #else return Resource::loadPixmap( name ); #endif */ } void MainWindow::initActions() { iconToolBar->clear(); KABPrefs *p = KABPrefs::instance(); QPEMenuBar *menuBar1 = new QPEMenuBar( iconToolBar ); - QPopupMenu *menuBar = new QPopupMenu( this ); + Q3PopupMenu *menuBar = new Q3PopupMenu( this ); menuBar1->insertItem( "ME", menuBar); - QPopupMenu *fileMenu = new QPopupMenu( this ); - QPopupMenu *editMenu = new QPopupMenu( this ); - QPopupMenu *viewMenu = new QPopupMenu( this ); - QPopupMenu *settingsMenu = new QPopupMenu( this ); - QPopupMenu *importMenu = new QPopupMenu( this ); + Q3PopupMenu *fileMenu = new Q3PopupMenu( this ); + Q3PopupMenu *editMenu = new Q3PopupMenu( this ); + Q3PopupMenu *viewMenu = new Q3PopupMenu( this ); + Q3PopupMenu *settingsMenu = new Q3PopupMenu( this ); + Q3PopupMenu *importMenu = new Q3PopupMenu( this ); menuBar1->setMaximumWidth( menuBar1->sizeHint().width() ); QIconSet icon; icon = loadPixmap( pathString + "newtodo" ); configureToolBarMenu->insertItem(icon, "New todo", 20 ); QAction* nt_action = new QAction( "New Todo", icon, "New Todo...", 0, this ); nt_action->addTo( actionMenu ); connect( nt_action, SIGNAL( activated() ), mView, SLOT( newTodo() ) ); /* QAction *action; QIconSet icon; // QPopupMenu *configureMenu= new QPopupMenu( menuBar ); configureToolBarMenu = new QPopupMenu( this ); configureToolBarMenu->setCheckable( true ); #ifdef DESKTOP_VERSION QString pathString = ""; #else QString pathString = "kaddressbook/"; #endif if ( QApplication::desktop()->width() < 480 ) pathString += "icons16/"; configureAgendaMenu = new QPopupMenu( menuBar ); configureAgendaMenu->setCheckable( true ); configureAgendaMenu->insertItem("Toggle Allday", 1 ); configureAgendaMenu->insertSeparator(); configureAgendaMenu->insertItem("Tiny", 4 ); configureAgendaMenu->insertItem("Small", 6 ); configureAgendaMenu->insertItem("Medium", 8 ); configureAgendaMenu->insertItem("Normal", 10 ); configureAgendaMenu->insertItem("Large", 12 ); configureAgendaMenu->insertItem("Big", 14 ); configureAgendaMenu->insertItem("Bigger", 16 ); configureAgendaMenu->insertItem("Biggest", 18 ); //configureMenu->insertItem( "AgendaSize",configureAgendaMenu ); icon = loadPixmap( pathString + "newevent" ); icon = loadPixmap( pathString + "newevent" ); configureToolBarMenu->insertItem("Stretched TB", 5 ); configureToolBarMenu->insertSeparator(); configureToolBarMenu->insertItem(icon, "New event", 10 ); QAction* ne_action = new QAction( "New Event", icon, "New Event...", 0, this ); ne_action->addTo( actionMenu ); */ /* connect( ne_action, SIGNAL( activated() ), mView, SLOT( newEvent() ) ); icon = loadPixmap( pathString + "newtodo" ); configureToolBarMenu->insertItem(icon, "New todo", 20 ); QAction* nt_action = new QAction( "New Todo", icon, "New Todo...", 0, this ); nt_action->addTo( actionMenu ); connect( nt_action, SIGNAL( activated() ), mView, SLOT( newTodo() ) ); action = new QAction( "Toggle FilterView", QPixmap(), "Toggle FilterView", 0, this ); action->addTo( viewMenu ); connect( action, SIGNAL( activated() ), mView, SLOT( toggleFilter() ) ); viewMenu->insertSeparator(); icon = loadPixmap( pathString + "picker" ); action = new QAction( "Date Picker", icon, "Date Picker", 0, this ); action->addTo( viewMenu ); connect( action, SIGNAL( activated() ), mView, SLOT( showDatePicker() ) ); action->addTo( iconToolBar ); viewMenu->insertSeparator(); icon = loadPixmap( pathString + "list" ); configureToolBarMenu->insertItem(icon, "Event list", 30 ); QAction* showlist_action = new QAction( "List", icon, "List", 0, this ); showlist_action->addTo( viewMenu ); connect( showlist_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showListView() ) ); icon = loadPixmap( pathString + "day" ); configureToolBarMenu->insertItem(icon, "One day", 40 ); QAction* day1_action = new QAction( "Day", icon, "Day", 0, this ); day1_action->addTo( viewMenu ); // action->addTo( toolBar ); connect( day1_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showDayView() ) ); icon = loadPixmap( pathString + "workweek" ); configureToolBarMenu->insertItem(icon, "Work week", 50 ); QAction* day5_action = new QAction( "Work Week", icon, "Work Week", 0, this ); day5_action->addTo( viewMenu ); connect( day5_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showWorkWeekView() ) ); icon = loadPixmap( pathString + "week" ); configureToolBarMenu->insertItem(icon, "Week", 60 ); QAction* day7_action = new QAction( "Week", icon, "Week", 0, this ); day7_action->addTo( viewMenu ); connect( day7_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showWeekView() ) ); icon = loadPixmap( pathString + "month" ); configureToolBarMenu->insertItem(icon, "Month", 70 ); QAction* month_action = new QAction( "Month", icon, "Month", 0, this ); month_action->addTo( viewMenu ); connect( month_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showMonthView() ) ); icon = loadPixmap( pathString + "todo" ); configureToolBarMenu->insertItem(icon, "Todo list", 80 ); QAction* todoview_action = new QAction( "Todo", icon, "Todo", 0, this ); todoview_action->addTo( viewMenu ); connect( todoview_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showTodoView() ) ); icon = loadPixmap( pathString + "journal" ); configureToolBarMenu->insertItem(icon, "Journal", 90 ); QAction* viewjournal_action = new QAction( "Journal", icon, "Journal", 0, this ); viewjournal_action->addTo( viewMenu ); connect( viewjournal_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showJournalView() ) ); icon = loadPixmap( pathString + "xdays" ); configureToolBarMenu->insertItem(icon, "Next days", 100,4 ); QAction* xdays_action = new QAction( "Next days", icon, "Next Days", 0, this ); xdays_action->addTo( viewMenu ); connect( xdays_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showNextXView() ) ); icon = loadPixmap( pathString + "whatsnext" ); configureToolBarMenu->insertItem(icon, "Whats next", 110, 4 ); QAction* whatsnext_action = new QAction( "What's Next", icon, "What's Next", 0, this ); whatsnext_action->addTo( viewMenu ); connect( whatsnext_action, SIGNAL( activated() ), mView->viewManager(), SLOT( showWhatsNextView() ) ); #if 0 action = new QAction( "view_timespan", "Time Span", 0, this ); action->addTo( viewMenu ); connect( action, SIGNAL( activated() ), mView->viewManager(), SLOT( showTimeSpanView() ) ); #endif menuBar->insertItem( "View", viewMenu ); #if 0 QPopupMenu *navigationMenu = new QPopupMenu( menuBar ); action = new QAction( "Go backward", "Go Backward", 0, navigationMenu ); action->addTo( navigationMenu ); connect( action, SIGNAL( activated() ), mView, SLOT( goPrevious() ) ); action = new QAction( "Go forward", "Go Forward", 0, navigationMenu ); action->addTo( navigationMenu ); connect( action, SIGNAL( activated() ), mView, SLOT( goNext() ) ); menuBar->insertItem( "Go", navigationMenu ); #endif mNewSubTodoAction = new QAction( "new_subtodo", "New Sub-Todo...", 0, this ); mNewSubTodoAction->addTo( actionMenu ); connect( mNewSubTodoAction, SIGNAL( activated() ), mView, SLOT( newSubTodo() ) ); actionMenu->insertSeparator(); mShowAction = new QAction( "show_incidence", "Show...", 0, this ); mShowAction->addTo( actionMenu ); connect( mShowAction, SIGNAL( activated() ), mView, SLOT( showIncidence() ) ); mEditAction = new QAction( "edit_incidence", "Edit...", 0, this ); mEditAction->addTo( actionMenu ); connect( mEditAction, SIGNAL( activated() ), mView, SLOT( editIncidence() ) ); mDeleteAction = new QAction( "delete_incidence", "Delete...", 0, this ); mDeleteAction->addTo( actionMenu ); connect( mDeleteAction, SIGNAL( activated() ), mView, SLOT( deleteIncidence() ) ); actionMenu->insertSeparator(); action = new QAction( "purge_completed", i18n("Purge Completed"), 0, this ); action->addTo( actionMenu ); connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) ); icon = loadPixmap( pathString + "search" ); QAction* search_action = new QAction( "search", icon, "Search...", 0, this ); configureToolBarMenu->insertItem(icon, "Search", 120 , 4); search_action->addTo( actionMenu ); connect( search_action, SIGNAL( activated() ), mView->dialogManager(), SLOT( showSearchDialog() ) ); icon = loadPixmap( pathString + "today" ); configureToolBarMenu->insertItem(icon, "Today", 130); QAction* today_action = new QAction( "Today", icon, "Go to Today", 0, this ); today_action->addTo( actionMenu ); connect( today_action, SIGNAL( activated() ), mView, SLOT( goToday() ) ); //#if 0 actionMenu->insertSeparator(); action = new QAction( "configure", "Configure...", 0, this ); action->addTo( actionMenu ); connect( action, SIGNAL( activated() ), mView, SLOT( edit_options() ) ); //#endif // actionMenu->insertSeparator(); action = new QAction( "import_qtopia", "Import (*.ics/*.vcs) file", 0, this ); action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( importIcal() ) ); action = new QAction( "import_quick", "Import last file", 0, this ); action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( quickImportIcal() ) ); importMenu->insertSeparator(); action = new QAction( "import_qtopia", "Import Opie/Qtopia Cal.", 0, this ); action->addTo( importMenu ); importMenu->insertSeparator(); connect( action, SIGNAL( activated() ), SLOT( importQtopia() ) ); action = new QAction( "load_cal", "Load Calendar Backup", 0, this ); action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) ); action = new QAction( "save_cal", "Save Calendar Backup", 0, this ); action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) ); importMenu->insertSeparator(); action = new QAction( "import_qtopia", "Export VCalendar", 0, this ); action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) ); QPopupMenu *syncMenu = new QPopupMenu( this ); action = new QAction( "syncssh", "Remote via ssh/scp(not implemented)", 0, this ); action->addTo( syncMenu ); connect( action, SIGNAL( activated() ), SLOT( syncSSH() ) ); action = new QAction( "synclocal", "With local file(not implemented)", 0, this ); action->addTo( syncMenu ); connect( action, SIGNAL( activated() ), SLOT( syncLocalFile() ) ); action = new QAction( "quicksynclocal", "With last file(not implemented)", 0, this ); action->addTo( syncMenu ); connect( action, SIGNAL( activated() ), SLOT( quickSyncLocalFile() ) ); menuBar->insertItem( "Actions", actionMenu ); menuBar->insertItem( "Load/Save", importMenu ); menuBar->insertItem( "Synchronize", syncMenu ); //menuBar->insertItem( "Configure",configureMenu ); //configureMenu->insertItem( "Toolbar",configureToolBarMenu ); menuBar->insertItem( "AgendaSize",configureAgendaMenu ); menuBar->insertItem( "Toolbar",configureToolBarMenu ); QPopupMenu *helpMenu = new QPopupMenu( menuBar ); icon = loadPixmap( "korganizer/korganizer" ); action = new QAction( "Key bindings", "Key Bindings...", 0, this ); action->addTo( helpMenu ); connect( action, SIGNAL( activated() ), SLOT( keyBindings() ) ); action = new QAction( "Auto saving", "Auto saving...", 0, this ); action->addTo( helpMenu ); connect( action, SIGNAL( activated() ), SLOT( aboutAutoSaving() ) ); action = new QAction( "Problemd", "Known Problems...", 0,this ); action->addTo( helpMenu ); connect( action, SIGNAL( activated() ), SLOT( aboutKnownBugs() ) ); action = new QAction( "about", "About...", 0, this ); action->addTo( helpMenu ); connect( action, SIGNAL( activated() ), SLOT( about() ) ); menuBar->insertItem( "Help", helpMenu ); */ //menuBar->insertSeparator(); // ****************************************************** // menubar icons iconToolBar->setHorizontalStretchable (true ); //menuBar->insertItem( iconToolBar ); //xdays_action /* if (p-> mShowIconNewEvent) ne_action->addTo( iconToolBar ); if (p->mShowIconNewTodo ) nt_action->addTo( iconToolBar ); if (p-> mShowIconSearch) search_action->addTo( iconToolBar ); if (p-> mShowIconNext) whatsnext_action->addTo( iconToolBar ); if (p-> mShowIconNextDays) xdays_action->addTo( iconToolBar ); if (p-> mShowIconList) showlist_action->addTo( iconToolBar ); if (p-> mShowIconDay1) day1_action->addTo( iconToolBar ); if (p-> mShowIconDay5) day5_action->addTo( iconToolBar ); if (p-> mShowIconDay7) day7_action->addTo( iconToolBar ); if (p-> mShowIconMonth) month_action->addTo( iconToolBar ); if (p-> mShowIconTodoview) todoview_action->addTo( iconToolBar ); if (p-> mShowIconJournal) viewjournal_action->addTo( iconToolBar ); icon = loadPixmap( pathString + "2leftarrowB" ); configureToolBarMenu->insertItem(icon, "Prev. month", 200, 14); if (p-> mShowIconBackFast) { action = new QAction( "Prev month", icon, "Go Backward",0 , this ); connect( action, SIGNAL( activated() ), mView, SLOT( goPreviousMonth() ) ); action->addTo( iconToolBar ); } icon = loadPixmap( pathString + "1leftarrowB" ); configureToolBarMenu->insertItem(icon, "Go previous", 210,15); if (p-> mShowIconBack) { action = new QAction( "Go previous", icon, "Go Backward",0 , this ); connect( action, SIGNAL( activated() ), mView, SLOT( goPrevious() ) ); action->addTo( iconToolBar ); } if (p-> mShowIconToday) today_action->addTo( iconToolBar ); icon = loadPixmap( pathString + "1rightarrowB" ); configureToolBarMenu->insertItem(icon, "Go next", 220); if (p-> mShowIconForward) { action = new QAction( "Go next", icon, "Go Backward",0 , this ); connect( action, SIGNAL( activated() ), mView, SLOT( goNext() ) ); action->addTo( iconToolBar ); } icon = loadPixmap( pathString + "2rightarrowB" ); configureToolBarMenu->insertItem(icon, "Next month", 230); if (p-> mShowIconForwardFast) { action = new QAction( "Next month", icon, "Go Backward",0 , this ); connect( action, SIGNAL( activated() ), mView, SLOT( goNextMonth() ) ); action->addTo( iconToolBar ); } */ configureToolBarMenu->insertItem("WhatsThis", 300); /* if (p-> mShowIconNewEvent) configureToolBarMenu->setItemChecked( 10, true ); if (p->mShowIconNewTodo ) configureToolBarMenu->setItemChecked( 20, true ); if (p-> mShowIconSearch) configureToolBarMenu->setItemChecked( 120, true ); if (p-> mShowIconList) configureToolBarMenu->setItemChecked( 30, true ); if (p-> mShowIconDay1) configureToolBarMenu->setItemChecked( 40, true ); if (p-> mShowIconDay5) configureToolBarMenu->setItemChecked( 50, true ); if (p-> mShowIconDay7) configureToolBarMenu->setItemChecked( 60, true ); if (p-> mShowIconMonth) configureToolBarMenu->setItemChecked( 70, true ); if (p-> mShowIconTodoview) configureToolBarMenu->setItemChecked( 80, true ); if (p-> mShowIconBackFast) configureToolBarMenu->setItemChecked( 200, true ); if (p-> mShowIconBack) configureToolBarMenu->setItemChecked( 210, true ); if (p-> mShowIconToday) configureToolBarMenu->setItemChecked( 130, true ); if (p-> mShowIconForward) configureToolBarMenu->setItemChecked( 220, true ); if (p-> mShowIconForwardFast) configureToolBarMenu->setItemChecked( 230, true ); if (p-> mShowIconNextDays) configureToolBarMenu->setItemChecked( 100, true ); if (p-> mShowIconNext) configureToolBarMenu->setItemChecked( 110, true ); if (p-> mShowIconJournal) configureToolBarMenu->setItemChecked( 90, true ); if (p-> mShowIconWhatsThis) configureToolBarMenu->setItemChecked( 300, true ); QLabel* dummy = new QLabel( iconToolBar ); dummy->setBackgroundColor( iconToolBar->backgroundColor() ); if (!p-> mShowIconStretch) iconToolBar->setStretchableWidget ( dummy ) ; else configureToolBarMenu->setItemChecked( 5, true ); if (p-> mShowIconWhatsThis) QWhatsThis::whatsThisButton ( iconToolBar ); connect( configureToolBarMenu, SIGNAL( activated( int ) ),this, SLOT(configureToolBar( int ) ) ); configureAgenda( p->mHourSize ); connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) ); */ } /* void MainWindow::setDefaultPreferences() { KOPrefs *p = KOPrefs::instance(); p->mCompactDialogs = true; p->mConfirm = true; p->mEnableQuickTodo = false; } */ void MainWindow::about() { QMessageBox::about( this, "About KOrganizer/Pi", "KOrganizer/Platform-independent\n" "(KO/Pi) 1.6.0e - " #ifdef DESKTOP_VERSION "Desktop Edition\n" #else "PDA-Edition\n" "for: Zaurus 5500 / 7x0 / 8x0\n" #endif "(c) 2004 Lutz Rogowski\n" "Email:lutz@pi-sync.net\n" "KO/Pi is based on KOrganizer\n" "(c) 2002,2003 Cornelius Schumacher\n" "Email: schumacher@kde.org\n" "KOrganizer/Pi is licensed\n" "under the GPL.\n" "KO/Pi can be compiled for\n" "Linux, Zaurus-PDA and Windows\n" "www.korganizer.org\n" ); } /* void MainWindow::keyBindings() { QMessageBox* msg; msg = new QMessageBox( "Key bindings KOrganizer/Pi", "Space: Toggle Fullscreen | P: Date Picker\n" "H: This dialog | I: Show info | S: Search\n" "F: Toggle Filterview | 1-4: Select Filter\n" "N: Show next days | W: Whats next\n " "V: Todo view | L: Event list view\n" "T: Goto today | T+<ctrl>: New Todo\n" "E: Edit item | E+<ctrl>: New Event\n" "5: Work week view | 7: Week view\n" "D: One day view | M: Month view\n" "+,- : Zoom in/out Agenda | A: Toggle Allday\n" "<ctrl>+<up>/<down>: Scroll todo view\n" "<right>,C: Next week | <right>+<ctrl>: Next month\n" "<left>,X: Prev. week | <left>+<ctrl>: Prev. month\n" "<del>,<backspace>: Delete sel. item\n", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton ); msg->exec(); delete msg; } void MainWindow::aboutAutoSaving() { QMessageBox* msg; msg = new QMessageBox( "Auto Saving in KOrganizer/Pi", "After changing something, the data is\n" "automatically saved to the file\n" "~/Applications/korganizer/mycalendar.ics\n " "after (configureable) one minute.\n" "For safety reasons there is one autosaving\n" "after 10 minutes (of idle time) again. The \n" "data is saved automatically when closing KO/Pi\n" "You can create a backup file \n" "with: Load/Save - Save Calendar Backup\n", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); msg->exec(); delete msg; } void MainWindow::aboutKnownBugs() { QMessageBox* msg; msg = new QMessageBox( "Known Problems in KOrganizer/Pi", "1) The QWhatsThis help is not working.\n" "There is only a black rectangle displayed\n" "when clicking on an event.\n " "2) Audio alarm is available!\n" "as an additional small application\n" "3) Syncing is missing.\n" "Syncing via ssh/scp will be available in\n" "KOrganizer/Pi 2.0\n" "\n" "Please report unexpected behaviour to\n" "lutz@pi-sync.net\n", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); msg->exec(); delete msg; } QString MainWindow::defaultFileName() { #ifndef DESKTOP_VERSION return Global::applicationFileName( "korganizer", "mycalendar.ics" ); #else // pending QString file; file = QDir::homeDirPath()+"/korganizer/mycalendar.ics"; return QDir::convertSeparators( file ); #endif } void MainWindow::processIncidenceSelection( Incidence *incidence ) { if ( !incidence ) { enableIncidenceActions( false ); mNewSubTodoAction->setEnabled( false ); setCaptionToDates(); return; } QString startString = ""; if ( incidence->type() != "Todo" ) { if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { startString = ": "+incidence->dtStart().time().toString().left(5); startString += " "+ incidence->dtStart().date().toString(); startString += "-"+incidence->dtEnd().time().toString().left(5); startString += " "+ incidence->dtEnd().date().toString(); } else { if ( incidence->dtStart().time() != incidence->dtEnd().time() ) startString = ": "+incidence->dtStart().time().toString().left(5)+"-"+incidence->dtEnd().time().toString().left(5); startString +=" "+incidence->dtStart().date().toString(); } } else startString = ": (Prio "+QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +"\% completed"; setCaption( incidence->summary()+startString); enableIncidenceActions( true ); if ( incidence->type() == "Event" ) { mShowAction->setText( i18n("Show Event...") ); mEditAction->setText( i18n("Edit Event...") ); mDeleteAction->setText( i18n("Delete Event...") ); mNewSubTodoAction->setEnabled( false ); } else if ( incidence->type() == "Todo" ) { mShowAction->setText( i18n("Show Todo...") ); mEditAction->setText( i18n("Edit Todo...") ); mDeleteAction->setText( i18n("Delete Todo...") ); mNewSubTodoAction->setEnabled( true ); } else { mShowAction->setText( i18n("Show...") ); mShowAction->setText( i18n("Edit...") ); mShowAction->setText( i18n("Delete...") ); mNewSubTodoAction->setEnabled( false ); } } void MainWindow::enableIncidenceActions( bool enabled ) { mShowAction->setEnabled( enabled ); mEditAction->setEnabled( enabled ); mDeleteAction->setEnabled( enabled ); } void MainWindow::importQtopia() { #ifndef DESKTOP_VERSION int result = QMessageBox::warning( this, "KO/Pi: Warning!", "When importing a calendar twice\n" "duplicated events will be ignored!\n" "You can create a backup file with\n" "Load/Save - Save Calendar Backup\n" "to revert importing", "Import!", "Cancel", 0, 0, 1 ); if ( result == 0 ) { QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; mView->importQtopia( categories, datebook, todolist ); } #else int result = QMessageBox::warning( this, "KO/Pi: Warning!", "NOT SUPPORTED \n" "ON DESKTOP!\n", "OK", "Cancel", 0, 0, 1 ); #endif } void MainWindow::checkAlarms() { if ( mBlockAtStartup ) return; alarmTimer.start( 1000 * 3); } void MainWindow::slotModifiedChanged( bool changed ) { if ( mBlockAtStartup ) return; int msec; // we store the changes after 1 minute, // and for safety reasons after 10 minutes again if ( !mBlockSaveFlag ) msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; else msec = 1000 * 600; mSaveTimer.start( msec, true ); // 1 minute qDebug("KO: Saving File in %d secs!", msec/1000); mCalendarModifiedFlag = true; } void MainWindow::writeAlarm() { if ( mBlockAtStartup ) return; //QCopEnvelope e3("koalarm", "-showWN"); QDateTime nextA ; QDateTime reference ( QDate( 2000, 1, 1 ) ); QString summary; alarmTimer.stop(); Calendar* cal = mView->calendar(); if ( ! cal ){ qDebug("KO: Calendar undefined. No alarm notification"); return; } nextA = cal->nextAlarm( 720 ); summary = cal->nextSummary(); qDebug("KO: Next Alarm %s %s", nextA.toString().latin1(), summary.latin1()); if ( nextA < QDateTime::currentDateTime().addDays( 720-1 ) ) { KConfig *config = KOGlobals::config(); config->setGroup("NextSystemAlarm"); QString date, sum; date = config->readEntry("TimeDateinSecs", "xxx"); bool ok = false; int shsecs = date.toInt(&ok ); QDateTime scheduledAlarm; QDateTime eventDateTime = cal->nextAlarmEvent(); sum = config->readEntry("Summary", "sss"); if ( ok ) { scheduledAlarm = reference.addSecs( shsecs ); //qDebug("sheduledAlarm %s ", scheduledAlarm.toString().latin1()); if ( scheduledAlarm == nextA && sum == summary ) { qDebug("KO: Same alarm time+summary - nothing to do! "); return; } } if ( ok ) { // delete alarm from system //qDebug("delete Alarm %s ", scheduledAlarm.toString().latin1()); #ifndef DESKTOP_VERSION AlarmServer::deleteAlarm ( scheduledAlarm,"koalarm" , sum.latin1() ); #endif } // add new alarm to system qDebug("KO: Add Alarm: %s ", nextA.toString().latin1() ); #ifndef DESKTOP_VERSION AlarmServer::addAlarm ( nextA,"koalarm", summary.latin1() ); #endif // write new alarm to config file //qDebug("Entry %s %s ", date.latin1(), sum.latin1()); int secs = reference.secsTo( nextA ); //qDebug(" secs %d ", secs); setCaption( i18n("Next Alarm: ")+ nextA.toString() +"-"+summary ); config->writeEntry("TimeDateinSecs",QString::number ( secs )); config->writeEntry("Summary",summary); config->writeEntry("TimeDate",nextA.toString()); config->writeEntry("WriteDateTime",QDateTime::currentDateTime().toString()); config->writeEntry("EventStartDateTime",eventDateTime.toString()); config->writeEntry("SystemNotifyInSecs",QString::number (QDateTime::currentDateTime().secsTo( nextA ) )); config->sync(); } } void MainWindow::save() { if ( mBlockSaveFlag ) return; mBlockSaveFlag = true; QTime neededSaveTime = QDateTime::currentDateTime().time(); setCaption("KO/Pi:Saving Data to File ..." ); qDebug("KO: Start saving data to file!"); mView->saveCalendar( defaultFileName() ); int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); qDebug("KO: Needed %d ms for saving.",msNeeded ); QString savemes; savemes.sprintf("KO/Pi:File Saved. Needed %d sec, %d ms",(msNeeded/1000)%100,msNeeded%1000 ); setCaption(savemes); mCalendarModifiedFlag = false; mBlockSaveFlag = false; } void MainWindow::keyReleaseEvent ( QKeyEvent * e) { if ( !e->isAutoRepeat() ) { mFlagKeyPressed = false; } } void MainWindow::keyPressEvent ( QKeyEvent * e ) { qApp->processEvents(); if ( e->isAutoRepeat() && !mFlagKeyPressed ) { e->ignore(); // qDebug(" ignore %d",e->isAutoRepeat() ); return; } if (! e->isAutoRepeat() ) mFlagKeyPressed = true; KOPrefs *p = KOPrefs::instance(); bool showSelectedDates = false; int size; //qDebug("MainWindow::keyPressEvent "); switch ( e->key() ) { case Qt::Key_Right: if ( e->state() == Qt::ControlButton ) mView->goNextMonth(); else mView->goNext(); showSelectedDates = true; break; case Qt::Key_Left: if ( e->state() == Qt::ControlButton ) mView->goPreviousMonth(); else mView->goPrevious(); showSelectedDates = true; break; case Qt::Key_Down: mView->viewManager()->agendaView()->scrollOneHourDown(); break; case Qt::Key_Up: mView->viewManager()->agendaView()->scrollOneHourUp(); break; case Qt::Key_I: mView->showIncidence(); break; case Qt::Key_Delete: case Qt::Key_Backspace: diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp index df3b551..3661677 100644 --- a/kaddressbook/phoneeditwidget.cpp +++ b/kaddressbook/phoneeditwidget.cpp @@ -1,731 +1,737 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlayout.h> #include <qlabel.h> #include <qtooltip.h> #include <qpushbutton.h> #include <qcheckbox.h> #include <qstring.h> -#include <qlistbox.h> -#include <qlistview.h> -#include <qbuttongroup.h> -#include <qhbox.h> +#include <q3listbox.h> +#include <q3listview.h> +#include <q3buttongroup.h> +#include <q3hbox.h> #include <qcursor.h> #include <qtimer.h> #include <qapplication.h> +//Added by qt3to4: +#include <Q3ValueList> +#include <Q3GridLayout> +#include <Q3Frame> +#include <Q3PopupMenu> +#include <Q3VBoxLayout> #include <kbuttonbox.h> #include <klistview.h> #include <kapplication.h> #include <qapplication.h> #include <kconfig.h> #include <kmessagebox.h> #include <klineedit.h> #include <kcombobox.h> #include <klocale.h> #include <kdebug.h> #include <kglobal.h> #include <kiconloader.h> #include <kabc/phonenumber.h> #include "typecombo.h" #include "phoneeditwidget.h" PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) : QWidget(parent,name) { - QGridLayout* gridLayout = new QGridLayout ( this, 2,2 ); + Q3GridLayout* gridLayout = new Q3GridLayout ( this, 2,2 ); QLabel *temp = new QLabel( "", this ); temp->setAlignment( Qt::AlignCenter ); temp->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); QPushButton *addBut = new QPushButton ( "add", this ); addBut->setPixmap ( SmallIcon("plus")); addBut->setMaximumSize( addBut->sizeHint().height(),addBut->sizeHint().height() ); connect(addBut,SIGNAL(clicked ()),SLOT(addNumber())); - sv = new QScrollView( this ); - sv->setFrameStyle ( QFrame::Plain ); + sv = new Q3ScrollView( this ); + sv->setFrameStyle ( Q3Frame::Plain ); sv->setLineWidth ( 0 ); sv->setMidLineWidth ( 0 ); mw = new QWidget ( sv->viewport() ); sv->addChild(mw); - sv->setResizePolicy( QScrollView::AutoOneFit ); - mainLayout = new QVBoxLayout ( mw ); + sv->setResizePolicy( Q3ScrollView::AutoOneFit ); + mainLayout = new Q3VBoxLayout ( mw ); mainLayout->setMargin( 0 ); mainLayout->setSpacing( 0 ); gridLayout->setMargin( 2 ); gridLayout->setSpacing( 4 ); if ( QApplication::desktop()->width() == 240 || QApplication::desktop()->width() == 480 ) { gridLayout->addWidget( addBut, 0, 0 ); gridLayout->addWidget( temp, 0, 1 ); gridLayout->addMultiCellWidget( sv, 1,1 , 0,1 ); } else { gridLayout->addWidget( temp, 1, 0 ); gridLayout->addWidget( addBut, 0, 0 ); gridLayout->addMultiCellWidget( sv, 0, 1, 1,1 ); } setDefaults(); mTypeNumberEditList.setAutoDelete( true ); - mPopup = new QPopupMenu( this ); + mPopup = new Q3PopupMenu( this ); QStringList list = PhoneNumber::supportedTypeListNames(); mPopupCount = list.count(); int i = 0; while ( i < mPopupCount ) { mPopup->insertItem( list[ i ], i ); ++i; } connect(mPopup,SIGNAL(activated(int)),this,SLOT(addNumberInt( int))); } PhoneEditWidget::~PhoneEditWidget() { } void PhoneEditWidget::setDefaults() { mTypeNumberEditList.clear(); PhoneTypeNumberEdit* edit = appendEditCombo(); KABC::PhoneNumber phoneNumber; phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref ); edit->setPhoneNumber( phoneNumber ); edit = appendEditCombo(); KABC::PhoneNumber phoneNumber2; phoneNumber2.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref ); edit->setPhoneNumber( phoneNumber2 ); edit = appendEditCombo(); KABC::PhoneNumber phoneNumber3; phoneNumber3.setType( KABC::PhoneNumber::Cell ); edit->setPhoneNumber( phoneNumber3 ); } void PhoneEditWidget::addNumberInt( int index ) { PhoneTypeNumberEdit* edit = appendEditCombo(); KABC::PhoneNumber phoneNumber; phoneNumber.setType( PhoneNumber::supportedTypeList()[index] ); edit->setPhoneNumber( phoneNumber ); //verticalScrollBar()->setValue( 1024); QTimer::singleShot( 0, this, SLOT ( bottomVisible() ) ); } void PhoneEditWidget::bottomVisible() { sv->setContentsPos ( 0, 1024 ); } void PhoneEditWidget::addNumber() { int i = 0; while ( i < mPopupCount ) { mPopup->setItemEnabled( i, true ); ++i; } PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); while ( edit ) { if ( edit->currentType() < mPopupCount -1 ) mPopup->setItemEnabled( edit->currentType(), false ); edit = mTypeNumberEditList.next(); } mPopup->popup( QCursor::pos() ); } PhoneTypeNumberEdit* PhoneEditWidget::appendEditCombo() { PhoneTypeNumberEdit* edit = new PhoneTypeNumberEdit( mw ); connect ( edit, SIGNAL ( typeChange( int , int) ), this, SIGNAL ( typeChange( int , int)) ); connect ( edit, SIGNAL ( modified() ), this, SIGNAL ( modified() ) ); connect ( edit, SIGNAL ( deleteMe( PhoneTypeNumberEdit* ) ), this, SLOT ( deleteEdit( PhoneTypeNumberEdit*) ) ); connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) ); mainLayout->add( edit ); mTypeNumberEditList.append( edit ); return edit; } void PhoneEditWidget::deleteEdit( PhoneTypeNumberEdit* ew ) { mPendingDelete = ew; QTimer::singleShot( 0, this, SLOT ( pendingDelete() ) ); } void PhoneEditWidget::pendingDelete() { mTypeNumberEditList.removeRef( mPendingDelete ); emit modified(); } void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li ) { if ( li.isEmpty() ) { setDefaults(); return; } mTypeNumberEditList.clear(); KABC::PhoneNumber::List::Iterator it; KABC::PhoneNumber::List list2 = li; KABC::PhoneNumber::List list ; PhoneNumber::TypeList tList = PhoneNumber::supportedTypeList(); int i = 0; int max = tList.count(); while ( i < max-1 ) { for ( it = list2.begin(); it != list2.end(); ++it ) { if ( (*it).type() == tList[i] ) { list.append( (*it ) ); break; } } ++i; } for ( it = list2.begin(); it != list2.end(); ++it ) { if ( (*it).type() == tList[ max-1 ] ) list.append( (*it ) ); } for ( it = list.begin(); it != list.end(); ++it ) { PhoneTypeNumberEdit* editNew = appendEditCombo(); editNew->setPhoneNumber( (*it ) ); } } KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() { KABC::PhoneNumber::List retList; PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); while ( edit ) { if ( edit->isValid() ) { retList.append( edit->phoneNumber()); } edit = mTypeNumberEditList.next(); } return retList; } #if 0 PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { - QGridLayout *layout = new QGridLayout( this, 4, 1 ); + Q3GridLayout *layout = new Q3GridLayout( this, 4, 1 ); //US layout->setSpacing( KDialog::spacingHint() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); QLabel* label = new QLabel( this ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); - label->setAlignment( AlignCenter ); + label->setAlignment( Qt::AlignCenter ); //US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); layout->addWidget( label, 0, 0 ); QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ), this ); if ( QApplication::desktop()->width() < 640 ) layout->addWidget( editButton, 0, 1 ); else layout->addMultiCellWidget( editButton, 0, 0, 1, 3); mPrefCombo = new PhoneTypeCombo( mPhoneList, this ); mPrefEdit = new KLineEdit( this ); //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) ); mPrefCombo->setLineEdit( mPrefEdit ); layout->addWidget( mPrefCombo, 1, 0 ); layout->addWidget( mPrefEdit, 1, 1 ); int x = 1, y = 2; if ( QApplication::desktop()->width() < 640 ) { ++x; y = 0; } mSecondCombo = new PhoneTypeCombo( mPhoneList, this ); mSecondEdit = new KLineEdit( this ); mSecondCombo->setLineEdit( mSecondEdit ); layout->addWidget( mSecondCombo, x, y++ ); layout->addWidget( mSecondEdit, x, y++ ); y = 0; ++x; mThirdCombo = new PhoneTypeCombo( mPhoneList, this ); mThirdEdit = new KLineEdit( this ); mThirdCombo->setLineEdit( mThirdEdit ); layout->addWidget( mThirdCombo, x, y++ ); layout->addWidget( mThirdEdit, x, y++ ); if ( QApplication::desktop()->width() < 640 ) { ++x; y = 0; } mFourthCombo = new PhoneTypeCombo( mPhoneList, this ); mFourthEdit = new KLineEdit( this ); mFourthCombo->setLineEdit( mFourthEdit ); layout->addWidget( mFourthCombo, x, y++ ); layout->addWidget( mFourthEdit, x, y++ ); // Four numbers don't fit in the current dialog if ( QApplication::desktop()->width() < 640 ) { mFourthCombo->hide(); mFourthEdit->hide(); } else { QFontMetrics fm ( font () ) ; int wid = fm.width( "Messenger" ) +60; mPrefCombo->setMaximumWidth( wid ); mSecondCombo->setMaximumWidth( wid ); mThirdCombo->setMaximumWidth( wid ); mFourthCombo->setMaximumWidth( wid ); } connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ), SLOT( slotPrefEditChanged() ) ); connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ), SLOT( slotSecondEditChanged() ) ); connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ), SLOT( slotThirdEditChanged() ) ); connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ), SLOT( slotFourthEditChanged() ) ); connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) ); connect( mPrefCombo, SIGNAL( activated( int ) ), SLOT( updatePrefEdit() ) ); connect( mSecondCombo, SIGNAL( activated( int ) ), SLOT( updateSecondEdit() ) ); connect( mThirdCombo, SIGNAL( activated( int ) ), SLOT( updateThirdEdit() ) ); connect( mFourthCombo, SIGNAL( activated( int ) ), SLOT( updateFourthEdit() ) ); } PhoneEditWidget::~PhoneEditWidget() { } void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list ) { mPhoneList.clear(); // Insert types for existing numbers. mPrefCombo->insertTypeList( list ); - QValueList<int> defaultTypes; + Q3ValueList<int> defaultTypes; defaultTypes << KABC::PhoneNumber::Home; defaultTypes << KABC::PhoneNumber::Work; defaultTypes << KABC::PhoneNumber::Cell; defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); // Insert default types. // Doing this for mPrefCombo is enough because the list is shared by all // combos. - QValueList<int>::ConstIterator it; + Q3ValueList<int>::ConstIterator it; for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) { if ( !mPrefCombo->hasType( *it ) ) mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) ); } updateCombos(); mPrefCombo->selectType( defaultTypes[ 0 ] ); mSecondCombo->selectType( defaultTypes[ 1 ] ); mThirdCombo->selectType( defaultTypes[ 2 ] ); mFourthCombo->selectType( defaultTypes[ 3 ] ); updateLineEdits(); } void PhoneEditWidget::updateLineEdits() { updatePrefEdit(); updateSecondEdit(); updateThirdEdit(); updateFourthEdit(); } void PhoneEditWidget::updateCombos() { mPrefCombo->updateTypes(); mSecondCombo->updateTypes(); mThirdCombo->updateTypes(); mFourthCombo->updateTypes(); } KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() { KABC::PhoneNumber::List retList; KABC::PhoneNumber::List::Iterator it; for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it ) if ( !(*it).number().isEmpty() ) retList.append( *it ); return retList; } void PhoneEditWidget::edit() { PhoneEditDialog dlg( mPhoneList, this ); if ( dlg.exec() ) { if ( dlg.changed() ) { KABC::PhoneNumber::List list = dlg.phoneNumbers(); setPhoneNumbers( list ); updateCombos(); updateLineEdits(); emit modified(); } } } void PhoneEditWidget::updatePrefEdit() { updateEdit( mPrefCombo ); } void PhoneEditWidget::updateSecondEdit() { updateEdit( mSecondCombo ); } void PhoneEditWidget::updateThirdEdit() { updateEdit( mThirdCombo ); } void PhoneEditWidget::updateFourthEdit() { updateEdit( mFourthCombo ); } void PhoneEditWidget::updateEdit( PhoneTypeCombo *combo ) { QLineEdit *edit = combo->lineEdit(); if ( !edit ) return; #if 0 if ( edit == mPrefEdit ) kdDebug(5720) << " prefEdit" << endl; if ( edit == mSecondEdit ) kdDebug(5720) << " secondEdit" << endl; if ( edit == mThirdEdit ) kdDebug(5720) << " thirdEdit" << endl; if ( edit == mFourthEdit ) kdDebug(5720) << " fourthEdit" << endl; #endif PhoneNumber::List::Iterator it = combo->selectedElement(); if ( it != mPhoneList.end() ) { edit->setText( (*it).number() ); } else { kdDebug(5720) << "PhoneEditWidget::updateEdit(): no selected element" << endl; } } void PhoneEditWidget::slotPrefEditChanged() { updatePhoneNumber( mPrefCombo ); } void PhoneEditWidget::slotSecondEditChanged() { updatePhoneNumber( mSecondCombo ); } void PhoneEditWidget::slotThirdEditChanged() { updatePhoneNumber( mThirdCombo ); } void PhoneEditWidget::slotFourthEditChanged() { updatePhoneNumber( mFourthCombo ); } void PhoneEditWidget::updatePhoneNumber( PhoneTypeCombo *combo ) { QLineEdit *edit = combo->lineEdit(); if ( !edit ) return; PhoneNumber::List::Iterator it = combo->selectedElement(); if ( it != mPhoneList.end() ) { (*it).setNumber( edit->text() ); } updateOtherEdit( combo, mPrefCombo ); updateOtherEdit( combo, mSecondCombo ); updateOtherEdit( combo, mThirdCombo ); updateOtherEdit( combo, mFourthCombo ); emit modified(); } void PhoneEditWidget::updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo ) { if ( combo == otherCombo ) return; if ( combo->currentItem() == otherCombo->currentItem() ) { updateEdit( otherCombo ); } } /////////////////////////////////////////// // PhoneEditDialog -class PhoneViewItem : public QListViewItem +class PhoneViewItem : public Q3ListViewItem { public: - PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number ); + PhoneViewItem( Q3ListView *parent, const KABC::PhoneNumber &number ); void setPhoneNumber( const KABC::PhoneNumber &number ) { mPhoneNumber = number; makeText(); } QString key() { return mPhoneNumber.id(); } QString country() { return ""; } QString region() { return ""; } QString number() { return ""; } KABC::PhoneNumber phoneNumber() { return mPhoneNumber; } private: void makeText(); KABC::PhoneNumber mPhoneNumber; }; -PhoneViewItem::PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number ) - : QListViewItem( parent ), mPhoneNumber( number ) +PhoneViewItem::PhoneViewItem( Q3ListView *parent, const KABC::PhoneNumber &number ) + : Q3ListViewItem( parent ), mPhoneNumber( number ) { #ifdef DESKTOP_VERSION setRenameEnabled ( 0, true ); #endif makeText(); } void PhoneViewItem::makeText() { /** * Will be used in future versions of kaddressbook/libkabc setText( 0, mPhoneNumber.country() ); setText( 1, mPhoneNumber.region() ); setText( 2, mPhoneNumber.number() ); setText( 3, mPhoneNumber.typeLabel() ); */ setText( 0, mPhoneNumber.number() ); setText( 1, mPhoneNumber.typeLabel() ); } PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name ) : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ), KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, parent, name, true) { mPhoneNumberList = list; QWidget *page = plainPage(); - QGridLayout *layout = new QGridLayout( page, 1, 2 ); + Q3GridLayout *layout = new Q3GridLayout( page, 1, 2 ); layout->setSpacing( spacingHint() ); mListView = new KListView( page ); mListView->setAllColumnsShowFocus( true ); mListView->addColumn( i18n( "Number" ) ); mListView->addColumn( i18n( "Type" ) ); - KButtonBox *buttonBox = new KButtonBox( page, Vertical ); + KButtonBox *buttonBox = new KButtonBox( page, Qt::Vertical ); buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) ); mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) ); mEditButton->setEnabled( false ); mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) ); mRemoveButton->setEnabled( false ); buttonBox->layout(); layout->addWidget( mListView, 0, 0 ); layout->addWidget( buttonBox, 0, 1 ); connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) ); - connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber())); + connect( mListView, SIGNAL(doubleClicked( Q3ListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber())); KABC::PhoneNumber::List::Iterator it; for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it ) new PhoneViewItem( mListView, *it ); if (QApplication::desktop()->width() < 480 ) showMaximized(); else resize( 400, 400 ); mChanged = false; } PhoneEditDialog::~PhoneEditDialog() { qDebug("PhoneEditDialog::~PhoneEditDialog() "); } void PhoneEditDialog::slotAddPhoneNumber() { KABC::PhoneNumber tmp( "", 0 ); PhoneTypeDialog dlg( tmp, this ); if ( dlg.exec() ) { - QListViewItem* i = mListView->firstChild(); + Q3ListViewItem* i = mListView->firstChild(); KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); bool insert = true; while ( i ) { PhoneViewItem* p = ( PhoneViewItem* ) i; KABC::PhoneNumber pn = p->phoneNumber(); if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) { if ( p->text(0).isEmpty()) { p->setPhoneNumber( phoneNumber ); mPhoneNumberList.remove( pn ); mPhoneNumberList.append( phoneNumber ); insert = false; break; } } i = i->nextSibling(); } if ( insert ) { mPhoneNumberList.append( phoneNumber ); new PhoneViewItem( mListView, phoneNumber ); } mChanged = true; } } void PhoneEditDialog::slotRemovePhoneNumber() { PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); if ( !item ) return; mPhoneNumberList.remove( item->phoneNumber() ); - QListViewItem *currItem = mListView->currentItem(); + Q3ListViewItem *currItem = mListView->currentItem(); mListView->takeItem( currItem ); delete currItem; mChanged = true; } void PhoneEditDialog::slotEditPhoneNumber() { PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); if ( !item ) return; PhoneTypeDialog dlg( item->phoneNumber(), this ); if ( dlg.exec() ) { slotRemovePhoneNumber(); KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); mPhoneNumberList.append( phoneNumber ); new PhoneViewItem( mListView, phoneNumber ); mChanged = true; } } void PhoneEditDialog::slotSelectionChanged() { bool state = ( mListView->currentItem() != 0 ); mRemoveButton->setEnabled( state ); mEditButton->setEnabled( state ); } const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers() { return mPhoneNumberList; } bool PhoneEditDialog::changed() const { return mChanged; } /////////////////////////////////////////// // PhoneTypeDialog PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, QWidget *parent, const char *name) : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ), KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, parent, name, true), mPhoneNumber( phoneNumber ) { QWidget *page = plainPage(); QLabel *label = 0; - QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() ); + Q3GridLayout *layout = new Q3GridLayout( page, 3, 2, marginHint(), spacingHint() ); label = new QLabel( i18n( "Number:" ), page ); layout->addWidget( label, 0, 0 ); mNumber = new KLineEdit( page ); layout->addWidget( mNumber, 0, 1 ); mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page ); layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 ); - mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page ); + mGroup = new Q3ButtonGroup( 2, Qt::Horizontal, i18n( "Types" ), page ); layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 ); // fill widgets mNumber->setText( mPhoneNumber.number() ); mTypeList = KABC::PhoneNumber::typeList(); mTypeList.remove( KABC::PhoneNumber::Pref ); KABC::PhoneNumber::TypeList::Iterator it; for ( it = mTypeList.begin(); it != mTypeList.end(); ++it ) new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup ); for ( int i = 0; i < mGroup->count(); ++i ) { int type = mPhoneNumber.type(); QCheckBox *box = (QCheckBox*)mGroup->find( i ); box->setChecked( type & mTypeList[ i ] ); } mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref ); mNumber->setFocus(); mNumber->setSelection( 0, 1024); } KABC::PhoneNumber PhoneTypeDialog::phoneNumber() { mPhoneNumber.setNumber( mNumber->text() ); int type = 0; for ( int i = 0; i < mGroup->count(); ++i ) { QCheckBox *box = (QCheckBox*)mGroup->find( i ); if ( box->isChecked() ) type += mTypeList[ i ]; } if ( mPreferredBox->isChecked() ) mPhoneNumber.setType( type | KABC::PhoneNumber::Pref ); else mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref ); return mPhoneNumber; } #endif -#ifndef KAB_EMBEDDED -#include "phoneeditwidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_phoneeditwidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/phoneeditwidget.h b/kaddressbook/phoneeditwidget.h index 5bb4226..2be3e2b 100644 --- a/kaddressbook/phoneeditwidget.h +++ b/kaddressbook/phoneeditwidget.h @@ -1,186 +1,190 @@ #ifndef PHONEEDITWIDGET_H #define PHONEEDITWIDGET_H /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kdialogbase.h> #include <kiconloader.h> #include <qpushbutton.h> #include <qlayout.h> -#include <qpopupmenu.h> +#include <q3popupmenu.h> #include <qapplication.h> +#include <QDesktopWidget> -#include <qptrlist.h> -#include <qscrollview.h> +#include <q3ptrlist.h> +#include <q3scrollview.h> +//Added by qt3to4: +#include <Q3HBoxLayout> +#include <Q3VBoxLayout> #include "addresseeconfig.h" #include "typecombo.h" -class QButtonGroup; +class Q3ButtonGroup; class QCheckBox; class PhoneTypeNumberEdit; #include <klineedit.h> #include <kcombobox.h> #include <kabc/phonenumber.h> typedef TypeCombo<KABC::PhoneNumber> PhoneTypeCombo; /** Widget for editing phone numbers. */ class PhoneEditWidget : public QWidget { Q_OBJECT public: PhoneEditWidget( QWidget *parent, const char *name = 0 ); ~PhoneEditWidget(); void setPhoneNumbers( const KABC::PhoneNumber::List &list ); KABC::PhoneNumber::List phoneNumbers(); // void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* ); //KABC::PhoneNumber currentPhoneNumber( KComboBox*, int ); signals: void modified(); void typeChange( int oldType, int newType ); private slots: void bottomVisible(); void addNumberInt( int ); void deleteEdit( PhoneTypeNumberEdit* ew ); void addNumber(); void pendingDelete(); protected: private: - QScrollView* sv; - QPopupMenu *mPopup; + Q3ScrollView* sv; + Q3PopupMenu *mPopup; int mPopupCount; PhoneTypeNumberEdit* mPendingDelete; void setDefaults(); PhoneTypeNumberEdit* appendEditCombo(); QWidget* mw; - QVBoxLayout* mainLayout; - QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList; + Q3VBoxLayout* mainLayout; + Q3PtrList <PhoneTypeNumberEdit> mTypeNumberEditList; }; class PhoneTypeNumberEdit : public QWidget { Q_OBJECT public: PhoneTypeNumberEdit( QWidget *parent, const char *name = 0 ) :QWidget( parent ) { - QHBoxLayout * lay = new QHBoxLayout( this ); + Q3HBoxLayout * lay = new Q3HBoxLayout( this ); lay->setSpacing( 2 ); lay->setMargin( 0 ); mMinusButton = new QPushButton ( this ); mMinusButton->setPixmap ( SmallIcon("minus")); mCombo = new KComboBox( this ); if ( QApplication::desktop()->width() <= 640 ) - mCombo->setSizeLimit ( 6 ); + mCombo->setMaxVisibleItems ( 6 ); mNumber = new KLineEdit( this ); mMinusButton->setMaximumHeight( mNumber->sizeHint().height() + 6); lay->addWidget( mMinusButton ); lay->addWidget( mCombo ); lay->addWidget( mNumber ); connect( mMinusButton , SIGNAL ( clicked() ), this, SLOT ( deleteNumber() ) ); connect( mCombo , SIGNAL ( activated ( int ) ), this, SLOT ( comboTypeChange( int ) ) ); connect( mNumber , SIGNAL ( textChanged ( const QString & ) ), this, SLOT ( textChanged ( const QString & ) ) ); mCombo->insertStringList( PhoneNumber::supportedTypeListNames() ); } ~PhoneTypeNumberEdit() { // qDebug("~PhoneTypeNumberEdit() "); } void setPhoneNumber( const KABC::PhoneNumber &phoneNumber ) { mPhoneNumber = phoneNumber; int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); mCombo->setCurrentItem( index ); mNumber->setText( mPhoneNumber.number() ); show(); mNumber->setFocus(); } KABC::PhoneNumber phoneNumber() { mPhoneNumber.setNumber( mNumber->text() ); int index = mCombo->currentItem(); mPhoneNumber.setType( PhoneNumber::supportedTypeList()[index] ); return mPhoneNumber; } bool isValid() { if ( mNumber->text().isEmpty() )return false; return true; } int currentType() { return mCombo->currentItem(); } private slots: void typeExternalChanged( int oldType, int newType ) { if ( mPhoneNumber.type() == newType ) { mPhoneNumber.setType(oldType); int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); mCombo->setCurrentItem( index ); } } void deleteNumber() { emit deleteMe( this ); } void comboTypeChange( int index ) { int old = mPhoneNumber.type(); int newT = PhoneNumber::supportedTypeList()[index]; if ( old != newT ) { emit modified(); if ( newT != PhoneNumber::Voice ) emit typeChange ( old, newT ); mPhoneNumber.setType(newT ); } } void textChanged ( const QString & ) { emit modified(); } signals: void typeChange( int oldType, int newType ); void modified(); void deleteMe( PhoneTypeNumberEdit* ); private: KABC::PhoneNumber mPhoneNumber; QPushButton* mMinusButton; KComboBox *mCombo; KLineEdit *mNumber; }; #endif diff --git a/kaddressbook/secrecywidget.cpp b/kaddressbook/secrecywidget.cpp index 4a2acc8..1c237c0 100644 --- a/kaddressbook/secrecywidget.cpp +++ b/kaddressbook/secrecywidget.cpp @@ -1,70 +1,72 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qlayout.h> +//Added by qt3to4: +#include <Q3VBoxLayout> #include <kabc/secrecy.h> #include <kcombobox.h> #include <kdialog.h> #include "secrecywidget.h" SecrecyWidget::SecrecyWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { - QVBoxLayout *layout = new QVBoxLayout( this, KDialog::marginHint(), + Q3VBoxLayout *layout = new Q3VBoxLayout( this, KDialog::marginHint(), KDialog::spacingHint() ); mSecrecyCombo = new KComboBox( this ); layout->addWidget( mSecrecyCombo ); KABC::Secrecy::TypeList list = KABC::Secrecy::typeList(); KABC::Secrecy::TypeList::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) mSecrecyCombo->insertItem( KABC::Secrecy::typeLabel( *it ), *it ); connect( mSecrecyCombo, SIGNAL( activated( const QString& ) ), SIGNAL( changed() ) ); } SecrecyWidget::~SecrecyWidget() { } void SecrecyWidget::setSecrecy( const KABC::Secrecy &secrecy ) { //US to avoid an indexoutofbounds error if value is invalid if (secrecy.isValid()) mSecrecyCombo->setCurrentItem( secrecy.type() ); } KABC::Secrecy SecrecyWidget::secrecy() const { KABC::Secrecy secrecy; secrecy.setType( mSecrecyCombo->currentItem() ); return secrecy; } -#ifndef KAB_EMBEDDED -#include "secrecywidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_secrecywidget.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/undo.cpp b/kaddressbook/undo.cpp index 4442087..a6c1580 100644 --- a/kaddressbook/undo.cpp +++ b/kaddressbook/undo.cpp @@ -1,119 +1,119 @@ /* This file is part of KAddressBook. Copyright (C) 1999 Don Sanders <sanders@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include "undo.h" /////////////////////////////// // StackBase void StackBase::push(Command *c) { mCommandStack.push(c); emit changed(); } bool StackBase::isEmpty() { return mCommandStack.isEmpty(); } Command *StackBase::top() { return mCommandStack.top(); } void StackBase::clear() { mCommandStack.clear(); emit changed(); } Command *StackBase::pop() { Command *c = mCommandStack.pop(); if (c) emit changed(); return c; } /////////////////////////////// // UndoStack UndoStack* UndoStack::instance_ = 0; UndoStack::UndoStack() : StackBase() { // setAutoDelete( true ); } UndoStack* UndoStack::instance() { if (!instance_) instance_ = new UndoStack(); return instance_; } void UndoStack::undo() { if (isEmpty()) return; Command *command = pop(); command->undo(); RedoStack::instance()->push( command ); } //////////////////// // RedoStack RedoStack* RedoStack::instance_ = 0; RedoStack::RedoStack() { mCommandStack.setAutoDelete( true ); } RedoStack* RedoStack::instance() { if (!instance_) instance_ = new RedoStack(); return instance_; } void RedoStack::redo() { Command *command; if (isEmpty()) return; command = pop(); command->redo(); UndoStack::instance()->push( command ); } -#ifndef KAB_EMBEDDED -#include "undo.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_undo.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/undo.h b/kaddressbook/undo.h index 843bc26..a8ba2ee 100644 --- a/kaddressbook/undo.h +++ b/kaddressbook/undo.h @@ -1,95 +1,95 @@ /* This file is part of KAddressBook. Copyright (C) 1999 Don Sanders <sanders@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef UNDO_H #define UNDO_H #include <qobject.h> -#include <qptrstack.h> +#include <q3ptrstack.h> #include <qstring.h> class Command { public: Command() {} virtual ~Command() {}; virtual QString name() = 0; virtual void redo() = 0; // egcs requires these methods to have virtual void undo() = 0; // implementations (Seems like a bug) // pure virtual may not work }; /** The Undo and Redo stacks now no longer inherit directly from a stack. * They now contain a stack internally and inherit from StackBase, which * has a signal for when the stack is modified. This is need to keep * the edit menu and toolbar up to date. * * Really this is a simple observable stack. */ class StackBase : public QObject { Q_OBJECT public: StackBase() : QObject() {} void push(Command *c); bool isEmpty(); Command *top(); void clear(); signals: void changed(); protected: /** Protect the pop method so users must call undo/redo to properly * use the stack, however the subclasses need it to modify the stack. */ Command *pop(); - QPtrStack<Command> mCommandStack; + Q3PtrStack<Command> mCommandStack; }; class UndoStack : public StackBase { public: static UndoStack *instance(); void undo(); protected: UndoStack(); static UndoStack* instance_; }; class RedoStack : public StackBase { public: static RedoStack *instance(); void redo(); protected: RedoStack(); static RedoStack* instance_; }; #endif diff --git a/kaddressbook/undocmds.cpp b/kaddressbook/undocmds.cpp index 5807dc0..e900b00 100644 --- a/kaddressbook/undocmds.cpp +++ b/kaddressbook/undocmds.cpp @@ -1,242 +1,242 @@ /* This file is part of KAddressBook. Copyright (C) 1999 Don Sanders <sanders@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ -#include <qtextstream.h> +#include <q3textstream.h> #include <qapplication.h> #include <qclipboard.h> #include <klocale.h> #include <kdebug.h> #include <kapplication.h> #include <kabc/addressbook.h> #include "addresseeutil.h" #include "addresseeconfig.h" #include "kabcore.h" #include "undocmds.h" extern bool pasteWithNewUid; ///////////////////////////////// // PwDelete Methods PwDeleteCommand::PwDeleteCommand(KABC::AddressBook *doc, const QStringList &uidList) : Command(), mDocument(doc), mAddresseeList(), mUidList(uidList) { redo(); } PwDeleteCommand::~PwDeleteCommand() { } QString PwDeleteCommand::name() { return i18n( "Delete" ); } void PwDeleteCommand::undo() { // Put it back in the document KABC::Addressee::List::Iterator iter; for (iter = mAddresseeList.begin(); iter != mAddresseeList.end(); ++iter) { mDocument->insertAddressee(*iter); } mAddresseeList.clear(); } void PwDeleteCommand::redo() { // Just remove it from the document. This is enough to make the user // Think the item has been deleted KABC::Addressee a; QStringList::Iterator iter; for (iter = mUidList.begin(); iter != mUidList.end(); ++iter) { a = mDocument->findByUid(*iter); mDocument->removeAddressee(a); mAddresseeList.append(a); AddresseeConfig::instance()->remove(a.uid()); } } ///////////////////////////////// // PwPaste Methods PwPasteCommand::PwPasteCommand( KABCore *core, const KABC::Addressee::List &list ) : Command(), mCore( core ), mAddresseeList( list ) { redo(); } QString PwPasteCommand::name() { return i18n( "Paste" ); } void PwPasteCommand::undo() { KABC::Addressee::List::Iterator it; for ( it = mAddresseeList.begin(); it != mAddresseeList.end(); ++it ) mCore->addressBook()->removeAddressee( *it ); } void PwPasteCommand::redo() { QStringList uids; KABC::Addressee::List::Iterator it; for ( it = mAddresseeList.begin(); it != mAddresseeList.end(); ++it ) { /* we have to set a new uid for the contact, otherwise insertAddressee() ignore it. */ if ( pasteWithNewUid ) (*it).setUid( KApplication::randomString( 10 ) ); uids.append( (*it).uid() ); mCore->addressBook()->insertAddressee( *it ); } if ( uids.count() < 4 ) { QStringList::Iterator uidIt; for ( uidIt = uids.begin(); uidIt != uids.end(); ++uidIt ) mCore->editContact( *uidIt ); } } ///////////////////////////////// // PwNew Methods PwNewCommand::PwNewCommand( KABC::AddressBook *doc, const KABC::Addressee &a ) : Command(), mDocument( doc ), mA( a ) { mDocument->insertAddressee(mA); } PwNewCommand::~PwNewCommand() { } QString PwNewCommand::name() { return i18n( "New Contact" ); } void PwNewCommand::undo() { mDocument->removeAddressee( mA ); } void PwNewCommand::redo() { mDocument->insertAddressee( mA ); } ///////////////////////////////// // PwEdit Methods PwEditCommand::PwEditCommand(KABC::AddressBook *doc, const KABC::Addressee &oldA, const KABC::Addressee &newA ) : Command(), mDocument(doc), mOldA(oldA), mNewA(newA) { redo(); } PwEditCommand::~PwEditCommand() { } QString PwEditCommand::name() { return i18n( "Entry Edit" ); } void PwEditCommand::undo() { mDocument->insertAddressee(mOldA); } void PwEditCommand::redo() { mDocument->insertAddressee(mNewA); } ///////////////////////////////// // PwCut Methods PwCutCommand::PwCutCommand(KABC::AddressBook *doc, const QStringList &uidList) : Command(), mDocument(doc), mAddresseeList(), mUidList(uidList), mClipText(), mOldText() { redo(); } QString PwCutCommand::name() { return i18n( "Cut" ); } void PwCutCommand::undo() { KABC::Addressee::List::Iterator iter; for (iter = mAddresseeList.begin(); iter != mAddresseeList.end(); ++iter) { mDocument->insertAddressee(*iter); } mAddresseeList.clear(); QClipboard *cb = QApplication::clipboard(); //US #ifndef KAB_EMBEDDED kapp->processEvents(); #else //KAB_EMBEDDED qApp->processEvents(); #endif //KAB_EMBEDDED cb->setText( mOldText ); } void PwCutCommand::redo() { KABC::Addressee a; QStringList::Iterator iter; for (iter = mUidList.begin(); iter != mUidList.end(); ++iter) { a = mDocument->findByUid(*iter); mDocument->removeAddressee(a); mAddresseeList.append(a); } // Convert to clipboard mClipText = AddresseeUtil::addresseesToClipboard(mAddresseeList); QClipboard *cb = QApplication::clipboard(); mOldText = cb->text(); //US #ifndef KAB_EMBEDDED kapp->processEvents(); #else //KAB_EMBEDDED qApp->processEvents(); #endif //KAB_EMBEDDED cb->setText( mClipText ); } diff --git a/kaddressbook/viewconfigurefieldspage.cpp b/kaddressbook/viewconfigurefieldspage.cpp index 5daae1a..7366a0b 100644 --- a/kaddressbook/viewconfigurefieldspage.cpp +++ b/kaddressbook/viewconfigurefieldspage.cpp @@ -1,351 +1,355 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KAB_EMBEDDED #include <kcombobox.h> #include <qpushbutton.h> #include <kdebug.h> #else //KAB_EMBEDDED #include <qcombobox.h> #endif //KAB_EMBEDDED #include <kiconloader.h> #include <kdialog.h> #include <klocale.h> #include <qtoolbutton.h> #include <qapplication.h> +#include <QDesktopWidget> #include <qlabel.h> -#include <qlistbox.h> +#include <q3listbox.h> #include <qlayout.h> +//Added by qt3to4: +#include <Q3GridLayout> +#include <Q3BoxLayout> #include "viewconfigurefieldspage.h" -class FieldItem : public QListBoxText +class FieldItem : public Q3ListBoxText { public: - FieldItem( QListBox *parent, KABC::Field *field ) - : QListBoxText( parent, field->label() ), mField( field ) {} + FieldItem( Q3ListBox *parent, KABC::Field *field ) + : Q3ListBoxText( parent, field->label() ), mField( field ) {} - FieldItem( QListBox *parent, KABC::Field *field, int index ) - : QListBoxText( parent, field->label(), parent->item( index ) ), + FieldItem( Q3ListBox *parent, KABC::Field *field, int index ) + : Q3ListBoxText( parent, field->label(), parent->item( index ) ), mField( field ) {} KABC::Field *field() { return mField; } private: KABC::Field *mField; }; ViewConfigureFieldsPage::ViewConfigureFieldsPage( KABC::AddressBook *ab, QWidget *parent, const char *name ) : QWidget( parent, name ), mAddressBook( ab ) { initGUI(); } void ViewConfigureFieldsPage::restoreSettings( KConfig *config ) { KABC::Field::List fields = KABC::Field::restoreFields( config, "KABCFields" ); if ( fields.isEmpty() ) fields = KABC::Field::defaultFields(); KABC::Field::List::ConstIterator it; for( it = fields.begin(); it != fields.end(); ++it ) new FieldItem( mSelectedBox, *it ); slotShowFields( mCategoryCombo->currentItem() ); } void ViewConfigureFieldsPage::saveSettings( KConfig *config ) { KABC::Field::List fields; for( uint i = 0; i < mSelectedBox->count(); ++i ) { FieldItem *fieldItem = static_cast<FieldItem *>( mSelectedBox->item( i ) ); fields.append( fieldItem->field() ); } KABC::Field::saveFields( config, "KABCFields", fields ); } void ViewConfigureFieldsPage::slotShowFields( int index ) { int currentPos = mUnSelectedBox->currentItem(); mUnSelectedBox->clear(); int category; if ( index == 0 ) category = KABC::Field::All; else category = 1 << ( index - 1 ); KABC::Field::List allFields = mAddressBook->fields( category ); KABC::Field::List::ConstIterator it; for ( it = allFields.begin(); it != allFields.end(); ++it ) { - QListBoxItem *item = mSelectedBox->firstItem(); + Q3ListBoxItem *item = mSelectedBox->firstItem(); while( item ) { FieldItem *fieldItem = static_cast<FieldItem *>( item ); if ( (*it)->equals( fieldItem->field() ) ) break; item = item->next(); } if ( !item ) new FieldItem( mUnSelectedBox, *it ); } mUnSelectedBox->sort(); mUnSelectedBox->setCurrentItem( currentPos ); } void ViewConfigureFieldsPage::slotSelect() { // insert selected items in the unselected list to the selected list, // directoy under the current item if selected, or at the bottonm if // nothing is selected in the selected list int where = mSelectedBox->currentItem(); //US QListBoxItem::isSelected()) is not available in QT 2.x. Use selected instead. if ( !(where > -1 && mSelectedBox->item( where )->selected()) ) where = mSelectedBox->count() - 1; for ( uint i = 0; i < mUnSelectedBox->count(); ++i ) if ( mUnSelectedBox->isSelected( mUnSelectedBox->item( i ) ) ) { FieldItem *fieldItem = static_cast<FieldItem *>( mUnSelectedBox->item( i ) ); new FieldItem( mSelectedBox, fieldItem->field(), where ); where++; } slotShowFields( mCategoryCombo->currentItem() ); } void ViewConfigureFieldsPage::slotUnSelect() { for ( uint i = 0; i < mSelectedBox->count(); ++i ) if ( mSelectedBox->isSelected( mSelectedBox->item( i ) ) ) { mSelectedBox->removeItem( i ); --i; } slotShowFields( mCategoryCombo->currentItem() ); } void ViewConfigureFieldsPage::slotButtonsEnabled() { bool state = false; // add button: enabled if any items are selected in the unselected list for( uint i = 0; i < mUnSelectedBox->count(); ++i ) //US QListBoxItem::isSelected()) is not available in QT 2.x. Use selected instead. if ( mUnSelectedBox->item( i )->selected() ) { state = true; break; } mAddButton->setEnabled( state ); int j = mSelectedBox->currentItem(); state = ( j > -1 && mSelectedBox->isSelected( j ) ); // up button: enabled if there is a current item > 0 and that is selected mUpButton->setEnabled( ( j > 0 && state ) ); // down button: enabled if there is a current item < count - 2 and that is selected mDownButton->setEnabled( ( j > -1 && j < (int)mSelectedBox->count() - 1 && state ) ); // remove button: enabled if any items are selected in the selected list state = false; for ( uint i = 0; i < mSelectedBox->count(); ++i ) //US QListBoxItem::isSelected()) is not available in QT 2.x. Use selected instead. if ( mSelectedBox->item( i )->selected() ) { state = true; break; } mRemoveButton->setEnabled( state ); } void ViewConfigureFieldsPage::slotMoveUp() { int i = mSelectedBox->currentItem(); if ( i > 0 ) { - QListBoxItem *item = mSelectedBox->item( i ); + Q3ListBoxItem *item = mSelectedBox->item( i ); mSelectedBox->takeItem( item ); mSelectedBox->insertItem( item, i - 1 ); mSelectedBox->setCurrentItem( item ); mSelectedBox->setSelected( i - 1, true ); } } void ViewConfigureFieldsPage::slotMoveDown() { int i = mSelectedBox->currentItem(); if ( i > -1 && i < (int)mSelectedBox->count() - 1 ) { - QListBoxItem *item = mSelectedBox->item( i ); + Q3ListBoxItem *item = mSelectedBox->item( i ); mSelectedBox->takeItem( item ); mSelectedBox->insertItem( item, i + 1 ); mSelectedBox->setCurrentItem( item ); mSelectedBox->setSelected( i + 1, true ); } } void ViewConfigureFieldsPage::initGUI() { //US change the orientation dependent on the following flag // right the flag is set only staticly. // 0 = 640x480 ; 1 = 240x320 bool orientation = 1; setCaption( i18n("Select Fields to Display") ); - QGridLayout *gl = 0; + Q3GridLayout *gl = 0; if (orientation == 0) - gl = new QGridLayout( this , 6, 4, 0, KDialog::spacingHint() ); + gl = new Q3GridLayout( this , 6, 4, 0, KDialog::spacingHint() ); else - gl = new QGridLayout( this , 4, 6, 0, KDialog::spacingHint() ); + gl = new Q3GridLayout( this , 4, 6, 0, KDialog::spacingHint() ); #ifndef KAB_EMBEDDED mCategoryCombo = new KComboBox( false, this ); #else //KAB_EMBEDDED mCategoryCombo = new QComboBox( false, this ); #endif //KAB_EMBEDDED if ( QApplication::desktop()->width() < 320 ) mCategoryCombo->setMaximumWidth( 70 ); mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::All ) ); mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Frequent ) ); mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Address ) ); mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Email ) ); mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Personal ) ); mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Organization ) ); mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::CustomCategory ) ); connect( mCategoryCombo, SIGNAL( activated(int) ), SLOT( slotShowFields(int) ) ); gl->addWidget( mCategoryCombo, 0, 0 ); QLabel *label = new QLabel( i18n( "&Selected\nfields:" ), this ); if (orientation == 0) gl->addWidget( label, 0, 2 ); else gl->addWidget( label, 2, 0 ); - mUnSelectedBox = new QListBox( this ); - mUnSelectedBox->setSelectionMode( QListBox::Extended ); + mUnSelectedBox = new Q3ListBox( this ); + mUnSelectedBox->setSelectionMode( Q3ListBox::Extended ); mUnSelectedBox->setMinimumHeight( 80 ); if (orientation == 0) gl->addWidget( mUnSelectedBox, 1, 0 ); else gl->addWidget( mUnSelectedBox, 0, 1 ); - mSelectedBox = new QListBox( this ); + mSelectedBox = new Q3ListBox( this ); //if ( QApplication::desktop()->width() < 320 ) { // mUnSelectedBox->setMaximumWidth( 134 ); // mSelectedBox->setMaximumWidth( 134 ); //} - mSelectedBox->setSelectionMode( QListBox::Extended ); + mSelectedBox->setSelectionMode( Q3ListBox::Extended ); mSelectedBox->setMinimumHeight( 80 ); label->setBuddy( mSelectedBox ); if (orientation == 0) gl->addWidget( mSelectedBox, 1, 2 ); else gl->addWidget( mSelectedBox, 2, 1 ); - QBoxLayout *vb1 = 0; + Q3BoxLayout *vb1 = 0; if (orientation == 0) - vb1 = new QBoxLayout( QBoxLayout::TopToBottom, KDialog::spacingHint() ); + vb1 = new Q3BoxLayout( Q3BoxLayout::TopToBottom, KDialog::spacingHint() ); else - vb1 = new QBoxLayout( QBoxLayout::LeftToRight, KDialog::spacingHint() ); + vb1 = new Q3BoxLayout( Q3BoxLayout::LeftToRight, KDialog::spacingHint() ); vb1->addStretch(); mAddButton = new QToolButton( this ); if (orientation == 0) mAddButton->setIconSet( SmallIconSet( "1rightarrow" ) ); else mAddButton->setIconSet( SmallIconSet( "1downarrow" ) ); connect( mAddButton, SIGNAL( clicked() ), SLOT( slotSelect() ) ); vb1->addWidget( mAddButton ); mRemoveButton = new QToolButton( this ); if (orientation == 0) mRemoveButton->setIconSet( SmallIconSet( "1leftarrow" ) ); else mRemoveButton->setIconSet( SmallIconSet( "1uparrow" ) ); connect( mRemoveButton, SIGNAL( clicked() ), SLOT( slotUnSelect() ) ); vb1->addWidget( mRemoveButton ); vb1->addStretch(); if (orientation == 0) gl->addLayout( vb1, 1, 1 ); else gl->addLayout( vb1, 1, 1 ); - QBoxLayout *vb2 = 0; + Q3BoxLayout *vb2 = 0; if (orientation == 0) - vb2 = new QBoxLayout( QBoxLayout::TopToBottom, KDialog::spacingHint() ); + vb2 = new Q3BoxLayout( Q3BoxLayout::TopToBottom, KDialog::spacingHint() ); else - vb2 = new QBoxLayout( QBoxLayout::LeftToRight, KDialog::spacingHint() ); + vb2 = new Q3BoxLayout( Q3BoxLayout::LeftToRight, KDialog::spacingHint() ); vb2->addStretch(); mUpButton = new QToolButton( this ); mUpButton->setIconSet( SmallIconSet( "1uparrow" ) ); connect( mUpButton, SIGNAL( clicked() ), SLOT( slotMoveUp() ) ); vb2->addWidget( mUpButton ); mDownButton = new QToolButton( this ); mDownButton->setIconSet( SmallIconSet( "1downarrow" ) ); connect( mDownButton, SIGNAL( clicked() ), SLOT( slotMoveDown() ) ); vb2->addWidget( mDownButton ); vb2->addStretch(); if (orientation == 0) gl->addLayout( vb2, 1, 3 ); else gl->addLayout( vb2, 3, 1 ); QSize sizeHint = mUnSelectedBox->sizeHint(); // make sure we fill the list with all items, so that we can // get the maxItemWidth we need to not truncate the view slotShowFields( 0 ); //sizeHint = sizeHint.expandedTo( mSelectedBox->sizeHint() ); //sizeHint.setWidth( mUnSelectedBox->maxItemWidth() ); // mUnSelectedBox->setMinimumSize( sizeHint ); //mSelectedBox->setMinimumSize( sizeHint ); gl->activate(); connect( mUnSelectedBox, SIGNAL( selectionChanged() ), SLOT( slotButtonsEnabled() ) ); connect( mSelectedBox, SIGNAL( selectionChanged() ), SLOT( slotButtonsEnabled() ) ); - connect( mSelectedBox, SIGNAL( currentChanged( QListBoxItem * ) ), SLOT( slotButtonsEnabled() ) ); + connect( mSelectedBox, SIGNAL( currentChanged( Q3ListBoxItem * ) ), SLOT( slotButtonsEnabled() ) ); slotButtonsEnabled(); } -#ifndef KAB_EMBEDDED -#include "viewconfigurefieldspage.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_viewconfigurefieldspage.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/viewconfigurefieldspage.h b/kaddressbook/viewconfigurefieldspage.h index b27668c..42d132f 100644 --- a/kaddressbook/viewconfigurefieldspage.h +++ b/kaddressbook/viewconfigurefieldspage.h @@ -1,81 +1,81 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef VIEWCONFIGUREFIELDSPAGE_H #define VIEWCONFIGUREFIELDSPAGE_H #include <qwidget.h> #include <kabc/field.h> #include <kabc/addressbook.h> #ifndef KAB_EMBEDDED class KComboBox; #else //KAB_EMBEDDED class QComboBox; #endif //KAB_EMBEDDED -class QListBox; -class QListBoxItem; +class Q3ListBox; +class Q3ListBoxItem; class QPushButton; class QToolButton; class ViewConfigureFieldsPage : public QWidget { Q_OBJECT public: ViewConfigureFieldsPage( KABC::AddressBook *ab, QWidget *parent = 0, const char *name = 0 ); void restoreSettings( KConfig* ); void saveSettings( KConfig* ); public slots: void slotSelect(); void slotUnSelect(); void slotMoveUp(); void slotMoveDown(); void slotShowFields( int ); void slotButtonsEnabled(); private: void initGUI(); #ifndef KAB_EMBEDDED KComboBox *mCategoryCombo; #else //KAB_EMBEDDED QComboBox *mCategoryCombo; #endif //KAB_EMBEDDED - QListBox *mSelectedBox; - QListBox *mUnSelectedBox; + Q3ListBox *mSelectedBox; + Q3ListBox *mUnSelectedBox; QToolButton *mAddButton; QToolButton *mRemoveButton; QToolButton *mUpButton; QToolButton *mDownButton; KABC::AddressBook *mAddressBook; }; #endif diff --git a/kaddressbook/viewconfigurefilterpage.cpp b/kaddressbook/viewconfigurefilterpage.cpp index b085a5e..cdb778b 100644 --- a/kaddressbook/viewconfigurefilterpage.cpp +++ b/kaddressbook/viewconfigurefilterpage.cpp @@ -1,137 +1,140 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KAB_EMBEDDED #include <kcombobox.h> #else //KAB_EMBEDDED #include <qcombobox.h> #endif //KAB_EMBEDDED -#include <qbuttongroup.h> +#include <q3buttongroup.h> #include <qlabel.h> #include <qlayout.h> #include <qradiobutton.h> +//Added by qt3to4: +#include <Q3HBoxLayout> +#include <Q3VBoxLayout> #include <kconfig.h> #include <kdialog.h> #include <klocale.h> #include "filter.h" #include "viewconfigurefilterpage.h" ViewConfigureFilterPage::ViewConfigureFilterPage( QWidget *parent, const char *name ) : QWidget( parent, name ) { - QBoxLayout *topLayout = new QVBoxLayout( this, 0, KDialog::spacingHint() ); + Q3BoxLayout *topLayout = new Q3VBoxLayout( this, 0, KDialog::spacingHint() ); - mFilterGroup = new QButtonGroup(); + mFilterGroup = new Q3ButtonGroup(); connect( mFilterGroup, SIGNAL( clicked( int ) ), SLOT( buttonClicked( int ) ) ); QLabel *label = new QLabel( i18n( "The default filter will be activated whenever" " this view is displayed. This feature allows you to configure views that only" " interact with certain types of information based on the filter. Once the view" " is activated, the filter can be changed at anytime." ), this ); label->setAlignment( Qt::AlignLeft | Qt::AlignTop | Qt::WordBreak ); topLayout->addWidget( label ); QWidget *spacer = new QWidget( this ); spacer->setMinimumHeight( 5 ); topLayout->addWidget( spacer ); QRadioButton *button = new QRadioButton( i18n( "No default filter" ), this ); mFilterGroup->insert( button ); topLayout->addWidget( button ); button = new QRadioButton( i18n( "Use last active filter" ), this ); mFilterGroup->insert( button ); topLayout->addWidget( button ); - QBoxLayout *comboLayout = new QHBoxLayout(); + Q3BoxLayout *comboLayout = new Q3HBoxLayout(); topLayout->addLayout( comboLayout ); button = new QRadioButton( i18n( "Use filter:" ), this ); mFilterGroup->insert( button ); comboLayout->addWidget( button ); #ifndef KAB_EMBEDDED mFilterCombo = new KComboBox( this ); #else //KAB_EMBEDDED mFilterCombo = new QComboBox( this ); #endif //KAB_EMBEDDED comboLayout->addWidget( mFilterCombo ); } ViewConfigureFilterPage::~ViewConfigureFilterPage() { delete mFilterGroup; } void ViewConfigureFilterPage::restoreSettings( KConfig *config ) { mFilterCombo->clear(); //US I had to adjust the whole method in order to work with QComboBoxes // in case of the Platformindependent version QString defaultfiltername = config->readEntry( "DefaultFilterName" ); int id = config->readNumEntry( "DefaultFilterType", 1 ); mFilterGroup->setButton( id ); buttonClicked( id ); // Load the filter combo Filter::List list = Filter::restore( config, "Filter" ); Filter::List::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) { mFilterCombo->insertItem( (*it).name() ); if ( id == 2 && (*it).name() == defaultfiltername) // has default filter { mFilterCombo->insertItem( (*it).name(), 0); } else { mFilterCombo->insertItem( (*it).name() ); } } } void ViewConfigureFilterPage::saveSettings( KConfig *config ) { config->writeEntry( "DefaultFilterName", mFilterCombo->currentText() ); config->writeEntry( "DefaultFilterType", mFilterGroup->id( mFilterGroup->selected() ) ); } void ViewConfigureFilterPage::buttonClicked( int id ) { mFilterCombo->setEnabled( id == 2 ); } -#ifndef KAB_EMBEDDED -#include "viewconfigurefilterpage.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_viewconfigurefilterpage.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/viewconfigurefilterpage.h b/kaddressbook/viewconfigurefilterpage.h index 3be9564..fb39a61 100644 --- a/kaddressbook/viewconfigurefilterpage.h +++ b/kaddressbook/viewconfigurefilterpage.h @@ -1,63 +1,63 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef VIEWCONFIGUREFILTERPAGE #define VIEWCONFIGUREFILTERPAGE #include <qwidget.h> -class QButtonGroup; +class Q3ButtonGroup; #ifndef KAB_EMBEDDED class KComboBox; #else //KAB_EMBEDDED class QComboBox; #endif //KAB_EMBEDDED class KConfig; class ViewConfigureFilterPage : public QWidget { Q_OBJECT public: ViewConfigureFilterPage( QWidget *parent, const char *name = 0 ); ~ViewConfigureFilterPage(); void restoreSettings( KConfig* ); void saveSettings( KConfig* ); protected slots: void buttonClicked( int id ); private: #ifndef KAB_EMBEDDED KComboBox *mFilterCombo; #else //KAB_EMBEDDED QComboBox *mFilterCombo; #endif //KAB_EMBEDDED - QButtonGroup *mFilterGroup; + Q3ButtonGroup *mFilterGroup; }; #endif diff --git a/kaddressbook/viewconfigurewidget.cpp b/kaddressbook/viewconfigurewidget.cpp index 666e188..047df8c 100644 --- a/kaddressbook/viewconfigurewidget.cpp +++ b/kaddressbook/viewconfigurewidget.cpp @@ -1,159 +1,160 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KAB_EMBEDDED -#include <qvbox.h> +#include <q3vbox.h> #include <kapplication.h> #include <kconfig.h> #include <kdebug.h> #include <kiconloader.h> #include "viewmanager.h" #endif //KAB_EMBEDDED #include <qlayout.h> +//Added by qt3to4: +#include <Q3VBoxLayout> +#include <QPixmap> #include <kjanuswidget.h> #include <kglobal.h> #include <klocale.h> #include "viewconfigurewidget.h" #include "viewconfigurefieldspage.h" #include "viewconfigurefilterpage.h" ViewConfigureWidget::ViewConfigureWidget( KABC::AddressBook *ab, QWidget *parent, const char *name ) : ConfigureWidget( ab, parent, name ) { - QVBoxLayout *topLayout = new QVBoxLayout( this ); + Q3VBoxLayout *topLayout = new Q3VBoxLayout( this ); mMainWidget = new KJanusWidget( this, "JanusWidget", KJanusWidget::Tabbed ); topLayout->addWidget( mMainWidget ); // Add the first page, the attributes - QVBox *page = addPage( i18n( "Fields" ), QString::null, + Q3VBox *page = addPage( i18n( "Fields" ), QString::null, KGlobal::iconLoader()->loadIcon( "view_detailed", KIcon::Panel, 16 ) ); // Add the select fields page mFieldsPage = new ViewConfigureFieldsPage( addressBook(), (QWidget*)page ); //US mFieldsPage->setMinimumSize(300,300); // Add the second page, the filter selection page = addPage( i18n( "Default Filter" ), QString::null, KGlobal::iconLoader()->loadIcon( "filter", KIcon::Panel, 16 ) ); mFilterPage = new ViewConfigureFilterPage( (QWidget*)page ); //qDebug("+++++ViewConfigureWidget::ViewConfigureWidget "); } ViewConfigureWidget::~ViewConfigureWidget() { //qDebug("-----ViewConfigureWidget::~ViewConfigureWidget() "); } void ViewConfigureWidget::restoreSettings( KConfig *config ) { mFieldsPage->restoreSettings( config ); mFilterPage->restoreSettings( config ); } void ViewConfigureWidget::saveSettings( KConfig *config ) { mFieldsPage->saveSettings( config ); mFilterPage->saveSettings( config ); } -QVBox *ViewConfigureWidget::addPage( const QString &item, const QString &header, +Q3VBox *ViewConfigureWidget::addPage( const QString &item, const QString &header, const QPixmap &pixmap ) { return mMainWidget->addVBoxPage( item, header, pixmap ); } -#include <qframe.h> +#include <q3frame.h> #include <qlabel.h> #include <qlayout.h> #include <stdlib.h> ViewConfigureDialog::ViewConfigureDialog( ViewConfigureWidget *wdg, const QString &viewName, QWidget *parent, const char *name ) : KDialogBase( Swallow, i18n( "Modify View: " ) + viewName, Help | Ok | Cancel, Ok, parent, name, true, true ), mConfigWidget( wdg ) { //US, I have to change the way, how to connect the ViewConfigureWidget. It looks // like it has changed. //QFrame *topFrame = plainPage(); if ( mConfigWidget ) { mConfigWidget->reparent(this, QPoint(0,0), true); // QVBoxLayout * layout = new QVBoxLayout( this ); //layout->addWidget(mConfigWidget ); //mConfigWidget->reparent(topFrame, QPoint(1,1), true); setMainWidget( mConfigWidget ); } } ViewConfigureDialog::~ViewConfigureDialog() { } void ViewConfigureDialog::setWidget( ViewConfigureWidget *wdg ) { mConfigWidget = wdg ; setMainWidget( mConfigWidget ); } void ViewConfigureDialog::restoreSettings( KConfig *config ) { mConfigWidget->restoreSettings( config ); } void ViewConfigureDialog::saveSettings( KConfig *config ) { mConfigWidget->saveSettings( config ); } void ViewConfigureDialog::slotHelp() { #ifndef KAB_EMBEDDED kapp->invokeHelp( "using-views" ); #else //KAB_EMBEDDED qDebug("ViewConfigureDialog::slotHelp not yet implemented"); #endif //KAB_EMBEDDED } -#ifndef KAB_EMBEDDED -#include "viewconfigurewidget.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_viewconfigurewidget.cpp" #endif //KAB_EMBEDDED - - diff --git a/kaddressbook/viewconfigurewidget.h b/kaddressbook/viewconfigurewidget.h index 0c2b77c..e3b9b12 100644 --- a/kaddressbook/viewconfigurewidget.h +++ b/kaddressbook/viewconfigurewidget.h @@ -1,106 +1,106 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can rremovePageedistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef VIEWCONFIGUREWIDGET_H #define VIEWCONFIGUREWIDGET_H #include "configurewidget.h" -class QVBox; +class Q3VBox; #include <kdialogbase.h> #include <qpixmap.h> class KJanusWidget; class QString; class ViewConfigureFieldsPage; class ViewConfigureFilterPage; class ViewConfigureDialog; /** This widget is the base class for all view configuration widgets. The author of a view may wish to inherit from this widget and add config pages that add custom config options. The default implementation of this widget is to show a page with the select fields widget. For simple views this may be sufficient. */ class ViewConfigureWidget : public ConfigureWidget { Q_OBJECT public: ViewConfigureWidget( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ); virtual ~ViewConfigureWidget(); /** Reads the configuration from the config object and sets the values in the GUI. If this method is overloaded, be sure to call the base class's method. Do not change the group of the config object in this method. */ virtual void restoreSettings( KConfig *config ); /** Writes the configuration from the GUI to the config object. If this method is overloaded, be sure to call the base class's method. Do not change the group of the config object in this method. */ virtual void saveSettings( KConfig *config ); /** Use this method to add new pages to the widget. */ - QVBox *addPage( const QString &item, const QString &header = QString::null, + Q3VBox *addPage( const QString &item, const QString &header = QString::null, const QPixmap &pixmap = QPixmap() ); private: KJanusWidget *mMainWidget; ViewConfigureFieldsPage *mFieldsPage; ViewConfigureFilterPage *mFilterPage; }; class ViewConfigureDialog : public KDialogBase { Q_OBJECT public: ViewConfigureDialog( ViewConfigureWidget *wdg, const QString &viewName, QWidget *parent, const char *name = 0 ); ~ViewConfigureDialog(); void restoreSettings( KConfig* ); void saveSettings( KConfig* ); void setWidget( ViewConfigureWidget *wdg ); protected slots: void slotHelp(); private: ViewConfigureWidget *mConfigWidget; }; #endif diff --git a/kaddressbook/viewmanager.cpp b/kaddressbook/viewmanager.cpp index b5d9419..5cfe3ad 100644 --- a/kaddressbook/viewmanager.cpp +++ b/kaddressbook/viewmanager.cpp @@ -1,748 +1,752 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #ifndef KAB_EMBEDDED #include <libkdepim/kvcarddrag.h> #include <kabc/vcardconverter.h> #include <kconfig.h> #include <kdeversion.h> #include <kiconloader.h> #include <klocale.h> #include <kmessagebox.h> #include <kmultipledrag.h> #include <ktrader.h> #include <kurldrag.h> #include "addresseeutil.h" #else //KAB_EMBEDDED #include "views/kaddressbookiconview.h" #include "views/kaddressbooktableview.h" #include "views/kaddressbookcardview.h" #include "kaddressbookview.h" #include <qaction.h> #include <qmessagebox.h> -#include <qpopupmenu.h> +#include <q3popupmenu.h> +//Added by qt3to4: +#include <Q3HBoxLayout> +#include <QDropEvent> #include <kconfigbase.h> #endif //KAB_EMBEDDED #include <kdebug.h> #include <kactionclasses.h> #include <qlayout.h> #include <qapplication.h> -#include <qwidgetstack.h> +#include <QDesktopWidget> +#include <q3widgetstack.h> #include <kabc/addressbook.h> #include "filtereditdialog.h" #include "addviewdialog.h" #include "kabcore.h" #include "kabprefs.h" #include "viewmanager.h" ViewManager::ViewManager( KABCore *core, QWidget *parent, const char *name ) : QWidget( parent, name ), mCore( core ), mActiveView( 0 ) { initGUI(); initActions(); mViewDict.setAutoDelete( true ); createViewFactories(); } ViewManager::~ViewManager() { unloadViews(); mViewFactoryDict.clear(); } void ViewManager::scrollUP() { if ( mActiveView ) mActiveView->scrollUP(); } void ViewManager::scrollDOWN() { if ( mActiveView ) mActiveView->scrollDOWN(); } void ViewManager::restoreSettings() { mViewNameList = KABPrefs::instance()->mViewNames; QString activeViewName = KABPrefs::instance()->mCurrentView; mActionSelectView->setItems( mViewNameList ); // Filter mFilterList = Filter::restore( mCore->config(), "Filter" ); mActionSelectFilter->setItems( filterNames() ); mActionSelectFilter->setCurrentItem( KABPrefs::instance()->mCurrentFilter ); int cw = 150; if ( QApplication::desktop()->width() >= 800 ) cw = 200; if (QApplication::desktop()->width() == 480 && !KABPrefs::instance()->mHideSearchOnSwitch) cw = 0; mActionSelectFilter->setComboWidth( cw ); // Tell the views to reread their config, since they may have // been modified by global settings QString _oldgroup = mCore->config()->group(); - QDictIterator<KAddressBookView> it( mViewDict ); + Q3DictIterator<KAddressBookView> it( mViewDict ); for ( it.toFirst(); it.current(); ++it ) { KConfigGroupSaver saver( mCore->config(), it.currentKey() ); it.current()->readConfig( mCore->config() ); } setActiveView( activeViewName ); mActionDeleteView->setEnabled( mViewNameList.count() > 1 ); } void ViewManager::saveSettings() { QString _oldgroup = mCore->config()->group(); - QDictIterator<KAddressBookView> it( mViewDict ); + Q3DictIterator<KAddressBookView> it( mViewDict ); for ( it.toFirst(); it.current(); ++it ) { KConfigGroupSaver saver( mCore->config(), it.currentKey() ); #ifdef DESKTOP_VERSION (*it)->writeConfig( mCore->config() ); #else (*it).writeConfig( mCore->config() ); #endif } Filter::save( mCore->config(), "Filter", mFilterList ); KABPrefs::instance()->mCurrentFilter = mActionSelectFilter->currentItem(); // write the view name list KABPrefs::instance()->mViewNames = mViewNameList; KABPrefs::instance()->mCurrentView = mActiveView->caption(); } QStringList ViewManager::selectedUids() const { if ( mActiveView ) return mActiveView->selectedUids(); else return QStringList(); } QStringList ViewManager::selectedEmails() const { if ( mActiveView ) - return mActiveView->selectedEmails(); + return QStringList(mActiveView->selectedEmails()); else return QStringList(); } KABC::Addressee::List ViewManager::selectedAddressees() const { KABC::Addressee::List list; if ( mActiveView ) { QStringList uids = mActiveView->selectedUids(); QStringList::Iterator it; for ( it = uids.begin(); it != uids.end(); ++it ) { KABC::Addressee addr = mCore->addressBook()->findByUid( *it ); if ( !addr.isEmpty() ) list.append( addr ); } } return list; } //US added another method with no parameter, since my moc compiler does not support default parameters. void ViewManager::setSelected() { setSelected( QString::null, true ); } void ViewManager::setSelected( const QString &uid, bool selected ) { if ( mActiveView ) mActiveView->setSelected( uid, selected ); } void ViewManager::setListSelected(QStringList list) { int i, count = list.count(); for ( i = 0; i < count;++i ) setSelected( list[i], true ); } void ViewManager::unloadViews() { mViewDict.clear(); mActiveView = 0; } void ViewManager::selectView( const QString &name ) { setActiveView( name ); mCore->saveSettings(); } void ViewManager::setActiveView( const QString &name ) { KAddressBookView *view = 0; // Check that this isn't the same as the current active view if ( mActiveView && ( mActiveView->caption() == name ) ) return; // At this point we know the view that should be active is not // currently active. We will try to find the new on in the list. If // we can't find it, it means it hasn't been instantiated, so we will // create it on demand. view = mViewDict.find( name ); // Check if we found the view. If we didn't, then we need to create it if ( view == 0 ) { KConfig *config = mCore->config(); KConfigGroupSaver saver( config, name ); QString type = config->readEntry( "Type", "Table" ); kdDebug(5720) << "ViewManager::setActiveView: creating view - " << name << endl; ViewFactory *factory = mViewFactoryDict.find( type ); if ( factory ) view = factory->view( mCore->addressBook(), mViewWidgetStack ); if ( view ) { if ( !mViewNameList.contains( name ) ) { mViewNameList.append( name ); } view->setCaption( name ); mViewDict.insert( name, view ); //US my version needs an int as second parameter to addWidget mViewWidgetStack->addWidget( view, -1 ); view->readConfig( config ); // The manager just relays the signals connect( view, SIGNAL( selected( const QString& ) ), SIGNAL( selected( const QString & ) ) ); connect( view, SIGNAL( executed( const QString& ) ), SIGNAL( executed( const QString& ) ) ); connect( view, SIGNAL( deleteRequest( ) ), SIGNAL( deleteRequest( ) ) ); connect( view, SIGNAL( modified() ), SIGNAL( modified() ) ); connect( view, SIGNAL( dropped( QDropEvent* ) ), SLOT( dropped( QDropEvent* ) ) ); connect( view, SIGNAL( startDrag() ), SLOT( startDrag() ) ); } } // If we found or created the view, raise it and refresh it if ( view ) { mActiveView = view; mViewWidgetStack->raiseWidget( view ); // Set the proper filter in the view. By setting the combo // box, the activated slot will be called, which will push // the filter to the view and refresh it. if ( view->defaultFilterType() == KAddressBookView::None ) { mActionSelectFilter->setCurrentItem( 0 ); setActiveFilter( 0 ); } else if ( view->defaultFilterType() == KAddressBookView::Active ) { setActiveFilter( mActionSelectFilter->currentItem() ); } else { uint pos = filterPosition( view->defaultFilterName() ); mActionSelectFilter->setCurrentItem( pos ); setActiveFilter( pos ); } //US qDebug("ViewManager::setActiveView 6" ); // Update the inc search widget to show the fields in the new active // view. mCore->setSearchFields( mActiveView->fields() ); //US performance optimization. setActiveFilter calls also mActiveView->refresh() //US mActiveView->refresh(); mActionSelectView->setItems( mViewNameList ); mActionSelectView->setCurrentItem( mViewNameList.findIndex( mActiveView->caption() ) ); } else { qDebug("ViewManager::setActiveView: unable to find view" ); } } //US added another method with no parameter, since my moc compiler does not support default parameters. void ViewManager::refreshView() { refreshView( QString::null ); } void ViewManager::refreshView( const QString &uid ) { if ( mActiveView ) mActiveView->refresh( uid ); } void ViewManager::setFocusAV() { if ( mActiveView ) mActiveView->setFocusAV(); } void ViewManager::editView() { if ( !mActiveView ) return; ViewFactory *factory = mViewFactoryDict.find( mActiveView->type() ); ViewConfigureWidget *wdg = 0; ViewConfigureDialog* dlg = 0; if ( factory ) { // Save the filters so the dialog has the latest set Filter::save( mCore->config(), "Filter", mFilterList ); dlg = new ViewConfigureDialog( 0, mActiveView->caption(), this, "conf_dlg" ); wdg = factory->configureWidget( mCore->addressBook(), dlg,"conf_wid" ); } else { qDebug("ViewManager::editView()::cannot find viewfactory "); return; } if ( wdg ) { dlg->setWidget( wdg ); #ifndef DESKTOP_VERSION //dlg.setMaximumSize( 640, 480 ); //dlg->setGeometry( 40,40, 400, 300); dlg->showMaximized(); #endif KConfigGroupSaver saver( mCore->config(), mActiveView->caption() ); dlg->restoreSettings( mCore->config() ); if ( dlg->exec() ) { dlg->saveSettings( mCore->config() ); mActiveView->readConfig( mCore->config() ); // Set the proper filter in the view. By setting the combo // box, the activated slot will be called, which will push // the filter to the view and refresh it. if ( mActiveView->defaultFilterType() == KAddressBookView::None ) { mActionSelectFilter->setCurrentItem( 0 ); setActiveFilter( 0 ); } else if ( mActiveView->defaultFilterType() == KAddressBookView::Active ) { setActiveFilter( mActionSelectFilter->currentItem() ); } else { uint pos = filterPosition( mActiveView->defaultFilterName() ); mActionSelectFilter->setCurrentItem( pos ); setActiveFilter( pos ); } mCore->setSearchFields( mActiveView->fields() ); //US performance optimization. setActiveFilter calls also mActiveView->refresh() //US mActiveView->refresh(); //US this is a bugfix, that we get notified if we change a views configuration emit modified(); } } delete dlg; } void ViewManager::deleteView() { QString text = i18n( "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>" ) .arg( mActiveView->caption() ); QString caption = i18n( "Confirm Delete" ); if (QMessageBox::information( this, caption, text, i18n("Yes!"), i18n("No"), 0, 0 ) == 0) { mViewNameList.remove( mActiveView->caption() ); // remove the view from the config file KConfig *config = mCore->config(); config->deleteGroup( mActiveView->caption() ); mViewDict.remove( mActiveView->caption() ); mActiveView = 0; // we are in an invalid state now, but that should be fixed after // we emit the signal mActionSelectView->setItems( mViewNameList ); if ( mViewNameList.count() > 0 ) { mActionSelectView->setCurrentItem( 0 ); setActiveView( mViewNameList[ 0 ] ); } mActionDeleteView->setEnabled( mViewNameList.count() > 1 ); } } void ViewManager::addView() { AddViewDialog dialog( &mViewFactoryDict, this ); if ( dialog.exec() ) { QString newName = dialog.viewName(); QString type = dialog.viewType(); // Check for name conflicts bool firstConflict = true; int numTries = 1; while ( mViewNameList.contains( newName ) > 0 ) { if ( !firstConflict ) { newName = newName.left( newName.length() - 4 ); firstConflict = false; } newName = QString( "%1 <%2>" ).arg( newName ).arg( numTries ); numTries++; } // Add the new one to the list mViewNameList.append( newName ); // write the view to the config file, KConfig *config = mCore->config(); config->deleteGroup( newName ); KConfigGroupSaver saver( config, newName ); config->writeEntry( "Type", type ); // try to set the active view mActionSelectView->setItems( mViewNameList ); mActionSelectView->setCurrentItem( mViewNameList.findIndex( newName ) ); setActiveView( newName ); editView(); mActionDeleteView->setEnabled( mViewNameList.count() > 1 ); } } void ViewManager::createViewFactories() { #ifndef KAB_EMBEDDED KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/View" ); KTrader::OfferList::ConstIterator it; for ( it = plugins.begin(); it != plugins.end(); ++it ) { if ( !(*it)->hasServiceType( "KAddressBook/View" ) ) continue; KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() ); if ( !factory ) { kdDebug(5720) << "ViewManager::createViewFactories(): Factory creation failed" << endl; continue; } ViewFactory *viewFactory = static_cast<ViewFactory*>( factory ); if ( !viewFactory ) { kdDebug(5720) << "ViewManager::createViewFactories(): Cast failed" << endl; continue; } mViewFactoryDict.insert( viewFactory->type(), viewFactory ); } #else //KAB_EMBEDDED ViewFactory* viewFactory = new IconViewFactory(); mViewFactoryDict.insert( viewFactory->type(), viewFactory ); // qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1()); viewFactory = new TableViewFactory(); mViewFactoryDict.insert( viewFactory->type(), viewFactory ); // qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1()); viewFactory = new CardViewFactory(); mViewFactoryDict.insert( viewFactory->type(), viewFactory ); // qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1()); #endif //KAB_EMBEDDED } void ViewManager::dropped( QDropEvent *e ) { #ifndef KAB_EMBEDDED QString clipText, vcards; KURL::List urls; if ( KURLDrag::decode( e, urls) ) { KURL::List::Iterator it = urls.begin(); int c = urls.count(); if ( c > 1 ) { QString questionString = i18n( "Import one contact into your addressbook?", "Import %n contacts into your addressbook?", c ); if ( KMessageBox::questionYesNo( this, questionString, i18n( "Import Contacts?" ) ) == KMessageBox::Yes ) { for ( ; it != urls.end(); ++it ) emit urlDropped( *it ); } } else if ( c == 1 ) emit urlDropped( *it ); } else if ( KVCardDrag::decode( e, vcards ) ) { KABC::Addressee addr; KABC::VCardConverter converter; QStringList list = QStringList::split( "\r\n\r\n", vcards ); QStringList::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) { if ( converter.vCardToAddressee( (*it).stripWhiteSpace(), addr ) ) { KABC::Addressee a = mCore->addressBook()->findByUid( addr.uid() ); if ( a.isEmpty() ) { mCore->addressBook()->insertAddressee( addr ); emit modified(); } } } mActiveView->refresh(); } #else //KAB_EMBEDDED qDebug("ViewManager::dropped() has to be changed!!" ); #endif //KAB_EMBEDDED } void ViewManager::startDrag() { kdDebug(5720) << "ViewManager::startDrag: starting to drag" << endl; #ifndef KAB_EMBEDDED // Get the list of all the selected addressees KABC::Addressee::List addrList; QStringList uidList = selectedUids(); QStringList::Iterator iter; for ( iter = uidList.begin(); iter != uidList.end(); ++iter ) addrList.append( mCore->addressBook()->findByUid( *iter ) ); KMultipleDrag *drag = new KMultipleDrag( this ); - drag->addDragObject( new QTextDrag( AddresseeUtil::addresseesToClipboard(addrList), this ) ); + drag->addDragObject( new Q3TextDrag( AddresseeUtil::addresseesToClipboard(addrList), this ) ); KABC::Addressee::List::Iterator it; QStringList vcards; for ( it = addrList.begin(); it != addrList.end(); ++it ) { QString vcard = QString::null; KABC::VCardConverter converter; if ( converter.addresseeToVCard( *it, vcard ) ) vcards.append( vcard ); } drag->addDragObject( new KVCardDrag( vcards.join( "\r\n" ), this ) ); drag->setPixmap( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop ) ); drag->dragCopy(); #else //KAB_EMBEDDED qDebug("ViewManager::startDrag() has to be changed!!" ); #endif //KAB_EMBEDDED } void ViewManager::doSearch( const QString& s,KABC::Field *field ) { if ( mActiveView ) mActiveView->doSearch( s, field ); } void ViewManager::setActiveFilter( int index ) { Filter currentFilter; if ( ( index - 1 ) < 0 ) currentFilter = Filter(); else currentFilter = mFilterList[ index - 1 ]; // Check if we have a view. Since the filter combo is created before // the view, this slot could be called before there is a valid view. if ( mActiveView ) { mActiveView->setFilter( currentFilter ); mActiveView->refresh(); emit selected( QString::null ); } } void ViewManager::configureFilters() { FilterDialog dlg( this ); dlg.setFilters( mFilterList ); if ( dlg.exec() ) mFilterList = dlg.filters(); uint pos = mActionSelectFilter->currentItem(); mActionSelectFilter->setItems( filterNames() ); mActionSelectFilter->setCurrentItem( pos ); setActiveFilter( pos ); int cw = 150; if ( QApplication::desktop()->width() >= 800 ) cw = 200; if (QApplication::desktop()->width() == 480 && !KABPrefs::instance()->mHideSearchOnSwitch) cw = 0; mActionSelectFilter->setComboWidth( cw ); saveSettings(); } QStringList ViewManager::filterNames() const { QStringList names( i18n( "No Filter" ) ); Filter::List::ConstIterator it; for ( it = mFilterList.begin(); it != mFilterList.end(); ++it ) names.append( (*it).name() ); return names; } Filter ViewManager::getFilterByName( const QString &name ) const { Filter::List::ConstIterator it; for ( it = mFilterList.begin(); it != mFilterList.end(); ++it ) if ( name == (*it).name() ) return (*it); return Filter(); } int ViewManager::filterPosition( const QString &name ) const { int pos = 0; Filter::List::ConstIterator it; for ( it = mFilterList.begin(); it != mFilterList.end(); ++it, ++pos ) if ( name == (*it).name() ) return pos + 1; return 0; } void ViewManager::initActions() { //US <ActionList name="view_loadedviews"/> //US <Separator/> #ifdef KAB_EMBEDDED - QPopupMenu *viewmenu = (QPopupMenu*)mCore->getViewMenu(); - QPopupMenu *settingsmenu = (QPopupMenu*)mCore->getSettingsMenu(); - QPopupMenu *filtermenu = (QPopupMenu*)mCore->getFilterMenu(); + Q3PopupMenu *viewmenu = (Q3PopupMenu*)mCore->getViewMenu(); + Q3PopupMenu *settingsmenu = (Q3PopupMenu*)mCore->getSettingsMenu(); + Q3PopupMenu *filtermenu = (Q3PopupMenu*)mCore->getFilterMenu(); #endif //KAB_EMBEDDED mActionSelectView = new KSelectAction( i18n( "Select View" ), 0, mCore->actionCollection(), "select_view" ); #if KDE_VERSION >= 309 mActionSelectView->setMenuAccelsEnabled( false ); #endif connect( mActionSelectView, SIGNAL( activated( const QString& ) ), SLOT( selectView( const QString& ) ) ); #ifdef KAB_EMBEDDED mActionSelectView->plug(viewmenu); viewmenu->insertSeparator(); #endif //KAB_EMBEDDED KAction *action; action = new KAction( i18n( "Modify View..." ), "configure", 0, this, SLOT( editView() ), mCore->actionCollection(), "view_modify" ); #ifndef KAB_EMBEDDED action->setWhatsThis( i18n( "By pressing this button a dialog opens that allows you to modify the view of the addressbook. There you can add or remove fields that you want to be shown or hidden in the addressbook like the name for example." ) ); #else //KAB_EMBEDDED action->plug(viewmenu); #endif //KAB_EMBEDDED action = new KAction( i18n( "Add View..." ), "window_new", 0, this, SLOT( addView() ), mCore->actionCollection(), "view_add" ); #ifndef KAB_EMBEDDED action->setWhatsThis( i18n( "You can add a new view by choosing one of the dialog that appears after pressing the button. You have to give the view a name, so that you can distinguish between the different views." ) ); #else //KAB_EMBEDDED action->plug(viewmenu); #endif //KAB_EMBEDDED mActionDeleteView = new KAction( i18n( "Delete View" ), "view_remove", 0, this, SLOT( deleteView() ), mCore->actionCollection(), "view_delete" ); #ifndef KAB_EMBEDDED mActionDeleteView->setWhatsThis( i18n( "By pressing this button you can delete the actual view, which you have added before." ) ); #else //KAB_EMBEDDED mActionDeleteView->plug(viewmenu); viewmenu->insertSeparator(); #endif //KAB_EMBEDDED #ifndef KAB_EMBEDDED action = new KAction( i18n( "Refresh View" ), "reload", 0, this, SLOT( refreshView(const QString &) ), mCore->actionCollection(), "view_refresh" ); action->setWhatsThis( i18n( "The view will be refreshed by pressing this button." ) ); #else //KAB_EMBEDDED action = new KAction( i18n( "Refresh View" ), "reload", 0, this, SLOT( refreshView()), mCore->actionCollection(), "view_refresh" ); action->plug(viewmenu); //viewmenu->insertSeparator(); #endif //KAB_EMBEDDED action = new KAction( i18n( "Edit &Filters..." ), "filter", 0, this, SLOT( configureFilters() ), mCore->actionCollection(), "options_edit_filters" ); mActionSelectFilter = new KSelectAction( i18n( "Select Filter" ), "filter", mCore->actionCollection(), "select_filter" ); #if KDE_VERSION >= 309 mActionSelectFilter->setMenuAccelsEnabled( false ); #endif connect( mActionSelectFilter, SIGNAL( activated( int ) ), SLOT( setActiveFilter( int ) ) ); #ifdef KAB_EMBEDDED action->plug(settingsmenu); mActionSelectFilter->plug(viewmenu,0); #endif //KAB_EMBEDDED } void ViewManager::initGUI() { - QHBoxLayout *layout = new QHBoxLayout( this, 0, 0 ); - mViewWidgetStack = new QWidgetStack( this ); + Q3HBoxLayout *layout = new Q3HBoxLayout( this, 0, 0 ); + mViewWidgetStack = new Q3WidgetStack( this ); layout->addWidget( mViewWidgetStack ); } -#ifndef KAB_EMBEDDED -#include "viewmanager.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_viewmanager.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/viewmanager.h b/kaddressbook/viewmanager.h index ab5d372..4bbdbc7 100644 --- a/kaddressbook/viewmanager.h +++ b/kaddressbook/viewmanager.h @@ -1,161 +1,163 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef VIEWMANAGER_H #define VIEWMANAGER_H #include <qwidget.h> #include <qstringlist.h> +//Added by qt3to4: +#include <QDropEvent> #include <kaddressbookview.h> -#include <qdict.h> +#include <q3dict.h> #include "filter.h" class KAction; class KSelectAction; class KABCore; -class QWidgetStack; +class Q3WidgetStack; class QDropEvent; namespace KABC { class AddressBook; } /** The view manager manages the views and everything related to them. The manager will load the views at startup and display a view when told to make one active. The view manager will also create and manage all dialogs directly related to views (ie: AddView, ConfigureView, DeleteView, etc). */ class ViewManager : public QWidget { Q_OBJECT public: ViewManager( KABCore *core, QWidget *parent, const char *name = 0 ); ~ViewManager(); void restoreSettings(); void saveSettings(); void doSearch( const QString& s ,KABC::Field *field ); void unloadViews(); KSelectAction * getFilterAction() { return mActionSelectFilter; } Filter getFilterByName( const QString &name ) const; QStringList selectedUids() const; QStringList selectedEmails() const; KABC::Addressee::List selectedAddressees() const; void setListSelected(QStringList); void setFocusAV(); public slots: void printView() { if (mActiveView) mActiveView->printMyView() ;} void scrollUP(); void scrollDOWN(); //US void setSelected( const QString &uid = QString::null, bool selected = true ); void setSelected( const QString &uid, bool); //US added another method with no parameter, since my moc compiler does not support default parameters. void setSelected(); //US added another method with no parameter, since my moc compiler does not support default parameters. void refreshView(); void refreshView( const QString &uid); void editView(); void deleteView(); void addView(); protected slots: /** Called whenever the user drops something in the active view. This method will try to decode what was dropped, and if it was a valid addressee, add it to the addressbook. */ void dropped( QDropEvent* ); /** Called whenever the user attempts to start a drag in the view. This method will convert all the selected addressees into text (vcard) and create a drag object. */ void startDrag(); signals: /** Emitted whenever the user selects an entry in the view. */ void selected( const QString &uid ); void deleteRequest( ); /** Emitted whenever the user activates an entry in the view. */ void executed( const QString &uid ); /** Emitted whenever the address book is modified in some way. */ void modified(); /** Emitted whenever a url is dragged on a view. */ void urlDropped( const KURL& ); private slots: void selectView( const QString &name ); void setActiveView( const QString &name ); void setActiveFilter( int index ); void configureFilters(); private: void createViewFactories(); QStringList filterNames() const; int filterPosition( const QString &name ) const; QStringList viewNames() const; int viewPosition( const QString &name ) const; void initActions(); void initGUI(); KABCore *mCore; Filter mCurrentFilter; Filter::List mFilterList; - QDict<KAddressBookView> mViewDict; - QDict<ViewFactory> mViewFactoryDict; + Q3Dict<KAddressBookView> mViewDict; + Q3Dict<ViewFactory> mViewFactoryDict; QStringList mViewNameList; - QWidgetStack *mViewWidgetStack; + Q3WidgetStack *mViewWidgetStack; KAddressBookView *mActiveView; KAction *mActionDeleteView; KSelectAction *mActionSelectFilter; KSelectAction *mActionSelectView; }; #endif diff --git a/kaddressbook/views/cardview.cpp b/kaddressbook/views/cardview.cpp index b6e053f..1a29f41 100644 --- a/kaddressbook/views/cardview.cpp +++ b/kaddressbook/views/cardview.cpp @@ -1,1750 +1,1758 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ //BEGIN Includes #include "cardview.h" #include <limits.h> #include <qpainter.h> #include <qtimer.h> #include <qdatetime.h> #include <qlabel.h> #include <qstyle.h> #include <qcursor.h> #include <qtooltip.h> #include <qapplication.h> +//Added by qt3to4: +#include <QKeyEvent> +#include <Q3PtrList> +#include <QResizeEvent> +#include <QFocusEvent> +#include <QMouseEvent> +#include <QEvent> +#include <QWheelEvent> #include "kabprefs.h" #include <kdebug.h> #include <kglobalsettings.h> //END includes #define MIN_ITEM_WIDTH 80 //BEGIN Helpers ////////////////////////////////////// // CardViewTip class CardViewTip : public QLabel { public: CardViewTip(QWidget *parent=0, const char *name=0) : QLabel( parent, name ) { setPalette( QToolTip::palette() ); setFrameStyle( Panel|Plain ); setMidLineWidth(0); setIndent(1); } ~CardViewTip() {}; protected: void leaveEvent( QEvent * ) { hide(); } }; ////////////////////////////////////// // CardViewItemList // // Warning: make sure you use findRef() instead of find() to find an // item! Only the pointer value is unique in the list. // -class CardViewItemList : public QPtrList<CardViewItem> +class CardViewItemList : public Q3PtrList<CardViewItem> { protected: - virtual int compareItems(QPtrCollection::Item item1, - QPtrCollection::Item item2) + virtual int compareItems(Q3PtrCollection::Item item1, + Q3PtrCollection::Item item2) { CardViewItem *cItem1 = (CardViewItem*)item1; CardViewItem *cItem2 = (CardViewItem*)item2; if ( cItem1 == cItem2 ) return 0; if ((cItem1 == 0) || (cItem2 == 0)) return cItem1 ? -1 : 1; if (cItem1->caption() < cItem2->caption()) return -1; else if (cItem1->caption() > cItem2->caption()) return 1; return 0; } private: /*int find( const CardViewItem * ) { qDebug("DON'T USE CardViewItemList::find( item )! Use findRef( item )!"); }*/ }; ////////////////////////////////////// // CardViewSeparator class CardViewSeparator { friend class CardView; public: CardViewSeparator(CardView *view) : mView(view) { mRect = QRect(0, 0, view->separatorWidth(), 0); } ~CardViewSeparator() {} void paintSeparator(QPainter *p, QColorGroup &cg) { p->fillRect(0, 0, mRect.width(), mRect.height(), cg.brush(QColorGroup::Button)); } void repaintSeparator() { mView->repaintContents(mRect); } private: CardView *mView; QRect mRect; }; //END Helpers //BEGIN Private Data class CardViewPrivate { public: CardViewPrivate() : mSelectionMode( CardView::Multi ), mDrawCardBorder( true ), mDrawFieldLabels( true ), mDrawSeparators( true), mSepWidth( 2 ), mShowEmptyFields( false ), mLayoutDirty( true ), mLastClickOnItem( false ), mItemMargin( 0 ), mItemSpacing( 10 ), mItemWidth( 200 ), mMaxFieldLines( INT_MAX ), mCurrentItem( 0L ), mLastClickPos( QPoint(0, 0) ), mResizeAnchor(0), mRubberBandAnchor( 0 ), mCompText( QString::null ) {}; CardViewItemList mItemList; - QPtrList<CardViewSeparator> mSeparatorList; + Q3PtrList<CardViewSeparator> mSeparatorList; QFontMetrics *mFm; QFontMetrics *mBFm; // bold font QFont mHeaderFont; // custom header font CardView::SelectionMode mSelectionMode; bool mDrawCardBorder; bool mDrawFieldLabels; bool mDrawSeparators; int mSepWidth; bool mShowEmptyFields; bool mLayoutDirty; bool mLastClickOnItem; uint mItemMargin; // internal margin in items uint mItemSpacing; // spacing between items, column seperators and border int mItemWidth; // width of all items uint mMaxFieldLines; // Max lines to dispaly pr field CardViewItem *mCurrentItem; QPoint mLastClickPos; QTimer *mTimer; // times out if mouse rests for more than 500 msecs CardViewTip *mTip; // passed to the item under a resting cursor to display full text bool mOnSeparator; // set/reset on mouse movement // for resizing by dragging the separators int mResizeAnchor; // uint, ulong? the mouse down separator left int mRubberBandAnchor; // for erasing rubber bands // data used for resizing. // as they are beeded by each mouse move while resizing, we store them here, // saving 8 calculations in each mouse move. int colspace; // amount of space between items pr column uint first; // the first col to anchor at for painting rubber bands int firstX; // X position of first in pixel int pressed; // the colummn that was pressed on at resizing start int span; // pressed - first // key completion QString mCompText; // current completion string QDateTime mCompUpdated; // ...was updated at this time }; class CardViewItemPrivate { public: CardViewItemPrivate() : mSelected( false ), x( 0 ), y( 0 ){}; QString mCaption; - QPtrList< CardViewItem::Field > mFieldList; + Q3PtrList< CardViewItem::Field > mFieldList; bool mSelected; int x; // horizontal position, set by the view int y; // vertical position, set by the view int maxLabelWidth; // the width of the widest label, according to the view font. int hcache; // height cache }; //END Private Data //BEGIN CardViewItem CardViewItem::CardViewItem(CardView *parent, QString caption) : d(new CardViewItemPrivate()), mView(parent) { d->mCaption = caption; initialize(); } CardViewItem::~CardViewItem() { // Remove ourself from the view if (mView != 0) mView->takeItem(this); delete d; d = 0; } void CardViewItem::initialize() { d->mSelected = false; d->mFieldList.setAutoDelete(true); d->maxLabelWidth = 0; d->hcache=0; //calcRect(); // Add ourself to the view if (mView != 0) mView->insertItem(this); } void CardViewItem::paintCard(QPainter *p, QColorGroup &cg) { if (!mView) return; QPen pen; QBrush brush; QFontMetrics fm = *(mView->d->mFm); QFontMetrics bFm = *(mView->d->mBFm); bool drawLabels = mView->d->mDrawFieldLabels; bool drawBorder = mView->d->mDrawCardBorder; int mg = mView->itemMargin(); int w = mView->itemWidth() - (mg*2); int h = height() - (mg*2); const int colonWidth( fm.width(":") ); int labelXPos = 2 + mg; int labelWidth = QMIN( w/2 - 4 - mg, d->maxLabelWidth + colonWidth + 4 ); int valueXPos = labelWidth + 4 + mg; int valueWidth = w - labelWidth - 4 - mg; p->setFont( mView->font() ); labelWidth -= colonWidth; // extra space for the colon if (!drawLabels) { valueXPos = labelXPos; valueWidth = w - 4; } // Draw a simple box if (isSelected()) pen = QPen(cg.highlight(), 1); else pen = QPen(cg.button(), 1); p->setPen(pen); // Draw the border - this is only draw if the user asks for it. if (drawBorder) p->drawRect( mg, mg, w, h ); // set the proper pen color for the caption box if (isSelected()) brush = cg.brush(QColorGroup::Highlight); else brush = cg.brush(QColorGroup::Button); p->fillRect(mg, mg, w, 4 + bFm.height(), brush); // Now paint the caption p->save(); QFont bFont = mView->headerFont(); //bFont.setBold(true); p->setFont(bFont); if (isSelected()) p->setPen(cg.highlightedText()); else p->setPen(cg.buttonText()); p->drawText(2+mg, 2+mg + bFm.ascent()/*bFm.height()*//*-bFm.descent()*//*-bFm.leading()*/, trimString(d->mCaption, w-4, bFm)); p->restore(); // Go through the fields and draw them - QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); + Q3PtrListIterator< CardViewItem::Field > iter(d->mFieldList); QString label, value; int yPos = mg + 4 + bFm.height()/* + 1*/ + fm.height(); // why the + 1 ??? (anders) p->setPen(cg.text()); int fh = fm.height(); int cln( 0 ); QString tmp; int maxLines = mView->maxFieldLines(); for (iter.toFirst(); iter.current(); ++iter) { value = (*iter)->second; if ( value.isEmpty() && ! mView->d->mShowEmptyFields ) continue; if (drawLabels) { label = trimString((*iter)->first, labelWidth, fm); p->drawText(labelXPos, yPos, label + ":"); } /* US original for (cln=0; cln <= maxLines; cln++) { tmp = value.section('\n',cln,cln); if ( !tmp.isEmpty() ) p->drawText( valueXPos, yPos + cln*fh, trimString( tmp, valueWidth, fm ) ); else break; } */ //US new implementation QStringList strlst = QStringList::split('\n', value, true); for (cln=0; cln <= maxLines && cln <= (int)strlst.count(); cln++) { tmp = strlst[cln]; if ( !tmp.isEmpty() ) p->drawText( valueXPos, yPos + cln*fh, trimString( tmp, valueWidth, fm ) ); else break; } if ( cln == 0 ) cln = 1; yPos += cln * fh + 2; } // if we are the current item and the view has focus, draw focus rect if ( mView->currentItem() == this && mView->hasFocus() ) { /*US mView->style().drawPrimitive( QStyle::PE_FocusRect, p, QRect(0, 0, mView->itemWidth(), h+(2*mg)), cg, QStyle::Style_FocusAtBorder, QStyleOption( isSelected() ? cg.highlight() : cg.base() ) ); */ const QColor pHighl = isSelected() ? cg.highlight() : cg.base(); const QRect r(0, 0, mView->itemWidth(), h+(2*mg)); #ifndef DESKTOP_VERSION mView->style().drawFocusRect(p, r, cg, &pHighl, true); #endif } } const QString &CardViewItem::caption() const { return d->mCaption; } int CardViewItem::height( bool allowCache ) const { // use cache if ( allowCache && d->hcache ) return d->hcache; // Base height: // 2 for line width // 2 for top caption pad // 2 for bottom caption pad // 2 pad for the end // + 2 times the advised margin int baseHeight = 8 + ( 2 * mView->itemMargin() ); // size of font for each field // 2 pad for each field // anders: if the view does not show empty fields, check for value bool sef = mView->showEmptyFields(); int fh = mView->d->mFm->height();//lineSpacing(); // font height //int sp = QMAX( 0, 2- mView->d->mFm->leading() ); // field spacing NOTE make a property int fieldHeight = 0; int lines; int maxLines( mView->maxFieldLines() ); - QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); + Q3PtrListIterator< CardViewItem::Field > iter(d->mFieldList); for (iter.toFirst(); iter.current(); ++iter) { if ( !sef && (*iter)->second.isEmpty() ) continue; - lines = QMIN( (*iter)->second.contains('\n') + 1, maxLines ); + lines = QMIN( (*iter)->second.count('\n') + 1, maxLines ); fieldHeight += ( lines * fh ) + 2;//sp; } // height of caption font (bold) fieldHeight += mView->d->mBFm->height(); d->hcache = baseHeight + fieldHeight; return d->hcache; } bool CardViewItem::isSelected() const { return d->mSelected; } void CardViewItem::setSelected(bool selected) { d->mSelected = selected; } void CardViewItem::insertField(const QString &label, const QString &value) { CardViewItem::Field *f = new CardViewItem::Field(label, value); d->mFieldList.append(f); d->hcache=0; if (mView) { mView->setLayoutDirty(true); d->maxLabelWidth = QMAX( mView->d->mFm->width( label ), d->maxLabelWidth ); } } void CardViewItem::removeField(const QString &label) { CardViewItem::Field *f; - QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); + Q3PtrListIterator< CardViewItem::Field > iter(d->mFieldList); for (iter.toFirst(); iter.current(); ++iter) { f = *iter; if (f->first == label) break; } if (*iter) d->mFieldList.remove(*iter); d->hcache = 0; if (mView) mView->setLayoutDirty(true); } void CardViewItem::clearFields() { d->mFieldList.clear(); d->hcache = 0; if (mView) mView->setLayoutDirty(true); } QString CardViewItem::trimString(const QString &text, int width, QFontMetrics &fm) { if (fm.width(text) <= width) return text; QString dots = "..."; int dotWidth = fm.width(dots); QString trimmed; int charNum = 0; while (fm.width(trimmed) + dotWidth < width) { trimmed += text[charNum]; charNum++; } // Now trim the last char, since it put the width over the top trimmed = trimmed.left(trimmed.length()-1); trimmed += dots; return trimmed; } CardViewItem *CardViewItem::nextItem() { CardViewItem *item = 0; if (mView) item = mView->itemAfter(this); return item; } void CardViewItem::repaintCard() { if (mView) mView->repaintItem(this); } void CardViewItem::setCaption(const QString &caption) { d->mCaption = caption; repaintCard(); } QString CardViewItem::fieldValue(const QString &label) { - QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); + Q3PtrListIterator< CardViewItem::Field > iter(d->mFieldList); for (iter.toFirst(); iter.current(); ++iter) if ((*iter)->first == label) return (*iter)->second; return QString(); } void CardViewItem::showFullString( const QPoint &itempos, CardViewTip *tip ) { bool trimmed( false ); QString s; int mrg = mView->itemMargin(); int y = mView->d->mBFm->height() + 6 + mrg; int w = mView->itemWidth() - (2*mrg); int lw; bool drawLabels = mView->drawFieldLabels(); bool isLabel = drawLabels && itempos.x() < w/2 ? true : false; if ( itempos.y() < y ) { if ( itempos.y() < 8 + mrg || itempos.y() > y - 4 ) return; // this is the caption s = caption(); trimmed = mView->d->mBFm->width( s ) > w - 4; y = 2 + mrg; lw = 0; isLabel=true; } else { // find the field Field *f = fieldAt( itempos ); if ( !f || ( !mView->showEmptyFields() && f->second.isEmpty() ) ) return; // y position: // header font height + 4px hader margin + 2px leading + item margin // + actual field index * (fontheight + 2px leading) int maxLines = mView->maxFieldLines(); bool se = mView->showEmptyFields(); int fh = mView->d->mFm->height(); // { Field *_f; for (_f = d->mFieldList.first(); _f != f; _f = d->mFieldList.next()) if ( se || ! _f->second.isEmpty() ) - y += ( QMIN(_f->second.contains('\n')+1, maxLines) * fh ) + 2; + y += ( QMIN(_f->second.count('\n')+1, maxLines) * fh ) + 2; // } if ( isLabel && itempos.y() > y + fh ) return; // label or data? s = isLabel ? f->first : f->second; // trimmed? int colonWidth = mView->d->mFm->width(":"); lw = drawLabels ? // label width QMIN( w/2 - 4 - mrg, d->maxLabelWidth + colonWidth + 4 ) : 0; int mw = isLabel ? lw - colonWidth : w - lw - (mrg*2); // max width for string if ( isLabel ) { trimmed = mView->d->mFm->width( s ) > mw - colonWidth; } else { QRect r( mView->d->mFm->boundingRect( 0, 0, INT_MAX, INT_MAX, Qt::AlignTop|Qt::AlignLeft, s ) ); - trimmed = r.width() > mw || r.height()/fh > QMIN(s.contains('\n') + 1, maxLines); + trimmed = r.width() > mw || r.height()/fh > QMIN(s.count('\n') + 1, maxLines); } } if ( trimmed ) { tip->setFont( (isLabel && !lw) ? mView->headerFont() : mView->font() ); // if condition is true, a header tip->setText( s ); tip->adjustSize(); // find a proper position int lx; lx = isLabel || !drawLabels ? mrg : lw + mrg + 2 /*-1*/; QPoint pnt(mView->contentsToViewport( QPoint(d->x, d->y) )); pnt += QPoint(lx, y); if ( pnt.x() < 0 ) pnt.setX( 0 ); if ( pnt.x() + tip->width() > mView->visibleWidth() ) pnt.setX( mView->visibleWidth() - tip->width() ); if ( pnt.y() + tip->height() > mView->visibleHeight() ) pnt.setY( QMAX( 0, mView->visibleHeight() - tip->height() ) ); // show tip->move( pnt ); tip->show(); } } CardViewItem::Field *CardViewItem::fieldAt( const QPoint & itempos ) const { int ypos = mView->d->mBFm->height() + 7 + mView->d->mItemMargin; int iy = itempos.y(); // skip below caption if ( iy <= ypos ) return 0; // try find a field bool showEmpty = mView->showEmptyFields(); int fh = mView->d->mFm->height(); int maxLines = mView->maxFieldLines(); Field *f; for ( f = d->mFieldList.first(); f; f = d->mFieldList.next() ) { if ( showEmpty || !f->second.isEmpty() ) - ypos += ( QMIN( f->second.contains('\n')+1, maxLines ) *fh)+2; + ypos += ( QMIN( f->second.count('\n')+1, maxLines ) *fh)+2; if ( iy <= ypos ) break; } return f ? f : 0; } //END CardViewItem //BEGIN CardView CardView::CardView(QWidget *parent, const char *name) - : QScrollView(parent, name), + : Q3ScrollView(parent, name), d(new CardViewPrivate()) { mFlagKeyPressed = false; mFlagBlockKeyPressed = false; d->mItemList.setAutoDelete(true); d->mSeparatorList.setAutoDelete(true); QFont f = font(); d->mFm = new QFontMetrics(f); f.setBold(true); d->mHeaderFont = f; d->mBFm = new QFontMetrics(f); d->mTip = ( new CardViewTip( viewport() ) ), d->mTip->hide(); d->mTimer = ( new QTimer(this, "mouseTimer") ), viewport()->setMouseTracking( true ); viewport()->setFocusProxy(this); - viewport()->setFocusPolicy(WheelFocus); - viewport()->setBackgroundMode(PaletteBase); + viewport()->setFocusPolicy(Qt::WheelFocus); + viewport()->setBackgroundMode(Qt::PaletteBase); connect( d->mTimer, SIGNAL(timeout()), this, SLOT(tryShowFullText()) ); //US setBackgroundMode(PaletteBackground, PaletteBase); - setBackgroundMode(PaletteBackground); + setBackgroundMode(Qt::PaletteBackground); // no reason for a vertical scrollbar setVScrollBarMode(AlwaysOff); } CardView::~CardView() { delete d->mFm; delete d->mBFm; delete d; d = 0; } void CardView::insertItem(CardViewItem *item) { d->mItemList.inSort(item); setLayoutDirty(true); } void CardView::takeItem(CardViewItem *item) { if ( d->mCurrentItem == item ) d->mCurrentItem = item->nextItem(); d->mItemList.take(d->mItemList.findRef(item)); setLayoutDirty(true); } void CardView::clear() { d->mItemList.clear(); setLayoutDirty(true); } CardViewItem *CardView::currentItem() { if ( ! d->mCurrentItem && d->mItemList.count() ) d->mCurrentItem = d->mItemList.first(); return d->mCurrentItem; } void CardView::setCurrentItem( CardViewItem *item ) { if ( !item ) return; else if ( item->cardView() != this ) { kdDebug(5720)<<"CardView::setCurrentItem: Item ("<<item<<") not owned! Backing out.."<<endl; return; } else if ( item == currentItem() ) { return; } if ( d->mSelectionMode == Single ) { setSelected( item, true ); } else { CardViewItem *it = d->mCurrentItem; d->mCurrentItem = item; if ( it ) it->repaintCard(); item->repaintCard(); } if ( ! d->mOnSeparator ) ensureItemVisible( item ); emit currentChanged( item ); } CardViewItem *CardView::itemAt(const QPoint &viewPos) { CardViewItem *item = 0; - QPtrListIterator<CardViewItem> iter(d->mItemList); + Q3PtrListIterator<CardViewItem> iter(d->mItemList); bool found = false; for (iter.toFirst(); iter.current() && !found; ++iter) { item = *iter; //if (item->d->mRect.contains(viewPos)) if (QRect(item->d->x, item->d->y, d->mItemWidth, item->height()).contains(viewPos)) found = true; } if (found) return item; return 0; } QRect CardView::itemRect(const CardViewItem *item) { //return item->d->mRect; return QRect(item->d->x, item->d->y, d->mItemWidth, item->height()); } void CardView::ensureItemVisible(const CardViewItem *item) { ensureVisible(item->d->x , item->d->y, d->mItemSpacing, 0); ensureVisible(item->d->x + d->mItemWidth, item->d->y, d->mItemSpacing, 0); } void CardView::repaintItem(const CardViewItem *item) { //repaintContents(item->d->mRect); repaintContents( QRect(item->d->x, item->d->y, d->mItemWidth, item->height()) ); } void CardView::setSelectionMode(CardView::SelectionMode mode) { selectAll(false); d->mSelectionMode = mode; } CardView::SelectionMode CardView::selectionMode() const { return d->mSelectionMode; } void CardView::selectAll(bool state) { - QPtrListIterator<CardViewItem> iter(d->mItemList); + Q3PtrListIterator<CardViewItem> iter(d->mItemList); if (!state) { for (iter.toFirst(); iter.current(); ++iter) { if ((*iter)->isSelected()) { (*iter)->setSelected(false); (*iter)->repaintCard(); } } //emit selectionChanged(); // WARNING FIXME emit selectionChanged(0); } else if (d->mSelectionMode != CardView::Single) { for (iter.toFirst(); iter.current(); ++iter) { (*iter)->setSelected(true); } if (d->mItemList.count() > 0) { // emit, since there must have been at least one selected emit selectionChanged(); //repaint();//??? viewport()->update(); } } } void CardView::setSelected(CardViewItem *item, bool selected) { if ((item == 0) || (item->isSelected() == selected)) return; if ( selected && d->mCurrentItem != item ) { CardViewItem *it = d->mCurrentItem; d->mCurrentItem = item; if ( it ) it->repaintCard(); } if (d->mSelectionMode == CardView::Single) { bool b = signalsBlocked(); blockSignals(true); selectAll(false); blockSignals(b); if (selected) { item->setSelected(selected); item->repaintCard(); emit selectionChanged(); emit selectionChanged(item); } else { emit selectionChanged(); emit selectionChanged(0); } } else if (d->mSelectionMode == CardView::Multi) { item->setSelected(selected); item->repaintCard(); emit selectionChanged(); } else if (d->mSelectionMode == CardView::Extended) { bool b = signalsBlocked(); blockSignals(true); selectAll(false); blockSignals(b); item->setSelected(selected); item->repaintCard(); emit selectionChanged(); } } bool CardView::isSelected(CardViewItem *item) const { return (item && item->isSelected()); } CardViewItem *CardView::selectedItem() const { // find the first selected item - QPtrListIterator<CardViewItem> iter(d->mItemList); + Q3PtrListIterator<CardViewItem> iter(d->mItemList); for (iter.toFirst(); iter.current(); ++iter) { if ((*iter)->isSelected()) return *iter; } return 0; } CardViewItem *CardView::firstItem() const { return d->mItemList.first(); } int CardView::childCount() const { return d->mItemList.count(); } /*US CardViewItem *CardView::findItem(const QString &text, const QString &label, Qt::StringComparisonMode compare) { // IF the text is empty, we will return null, since empty text will // match anything! if (text.isEmpty()) return 0; QPtrListIterator<CardViewItem> iter(d->mItemList); if (compare & Qt::BeginsWith) { QString value; for (iter.toFirst(); iter.current(); ++iter) { value = (*iter)->fieldValue(label).upper(); if (value.startsWith(text.upper())) return *iter; } } else { kdDebug(5720) << "CardView::findItem: search method not implemented" << endl; } return 0; } */ uint CardView::columnWidth() { return d->mDrawSeparators ? d->mItemWidth + ( 2 * d->mItemSpacing ) + d->mSepWidth : d->mItemWidth + d->mItemSpacing; } void CardView::drawContents(QPainter *p, int clipx, int clipy, int clipw, int cliph) { //QScrollView::drawContents(p, clipx, clipy, clipw, cliph); if (d->mLayoutDirty) calcLayout(); //kdDebug() << "CardView::drawContents: " << clipx << ", " << clipy // << ", " << clipw << ", " << cliph << endl; QColorGroup cg = viewport()->palette().active(); // allow setting costum colors in the viewport pale int cX, cY; contentsToViewport ( clipx, clipy, cX, cY ); QRect clipRect(clipx, clipy, clipw, cliph); QRect cardRect; QRect sepRect; CardViewItem *item; CardViewSeparator *sep; // make sure the viewport is a pure background viewport()->erase( QRect ( cX, cY , clipw, cliph ) ); // Now tell the cards to draw, if they are in the clip region - QPtrListIterator<CardViewItem> iter(d->mItemList); + Q3PtrListIterator<CardViewItem> iter(d->mItemList); for (iter.toFirst(); iter.current(); ++iter) { item = *iter; cardRect.setRect( item->d->x, item->d->y, d->mItemWidth, item->height() ); if (clipRect.intersects(cardRect) || clipRect.contains(cardRect)) { //kdDebug() << "\trepainting card at: " << cardRect.x() << ", " // << cardRect.y() << endl; // Tell the card to paint p->save(); p->translate(cardRect.x(), cardRect.y()); item->paintCard(p, cg); p->restore(); } } // Followed by the separators if they are in the clip region - QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); + Q3PtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); for (sepIter.toFirst(); sepIter.current(); ++sepIter) { sep = *sepIter; sepRect = sep->mRect; if (clipRect.intersects(sepRect) || clipRect.contains(sepRect)) { p->save(); p->translate(sepRect.x(), sepRect.y()); sep->paintSeparator(p, cg); p->restore(); } } } void CardView::resizeEvent(QResizeEvent *e) { - QScrollView::resizeEvent(e); + Q3ScrollView::resizeEvent(e); setLayoutDirty(true); } void CardView::calcLayout() { //kdDebug() << "CardView::calcLayout:" << endl; // Start in the upper left corner and layout all the // cars using their height and width int maxWidth = 0; int maxHeight = 0; int xPos = 0; int yPos = 0; int cardSpacing = d->mItemSpacing; // delete the old separators d->mSeparatorList.clear(); - QPtrListIterator<CardViewItem> iter(d->mItemList); + Q3PtrListIterator<CardViewItem> iter(d->mItemList); CardViewItem *item = 0; CardViewSeparator *sep = 0; xPos += cardSpacing; for (iter.toFirst(); iter.current(); ++iter) { item = *iter; yPos += cardSpacing; if (yPos + item->height() + cardSpacing >= height() - horizontalScrollBar()->height()) { maxHeight = QMAX(maxHeight, yPos); // Drawing in this column would be greater than the height // of the scroll view, so move to next column yPos = cardSpacing; xPos += cardSpacing + maxWidth; if (d->mDrawSeparators) { // Create a separator since the user asked sep = new CardViewSeparator(this); sep->mRect.moveTopLeft(QPoint(xPos, yPos+d->mItemMargin)); xPos += d->mSepWidth + cardSpacing; d->mSeparatorList.append(sep); } maxWidth = 0; } item->d->x = xPos; item->d->y = yPos; yPos += item->height(); maxWidth = QMAX(maxWidth, d->mItemWidth); } xPos += maxWidth; resizeContents( xPos + cardSpacing, maxHeight ); // Update the height of all the separators now that we know the // max height of a column - QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); + Q3PtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); for (sepIter.toFirst(); sepIter.current(); ++sepIter) { (*sepIter)->mRect.setHeight(maxHeight - 2*cardSpacing - 2*d->mItemMargin); } d->mLayoutDirty = false; } CardViewItem *CardView::itemAfter(CardViewItem *item) { /*int pos = */d->mItemList.findRef(item); return d->mItemList.next();//at(pos+1); } uint CardView::itemMargin() { return d->mItemMargin; } void CardView::setItemMargin( uint margin ) { if ( margin == d->mItemMargin ) return; d->mItemMargin = margin; setLayoutDirty( true ); } uint CardView::itemSpacing() { return d->mItemSpacing; } void CardView::setItemSpacing( uint spacing ) { if ( spacing == d->mItemSpacing ) return; d->mItemSpacing = spacing; setLayoutDirty( true ); } void CardView::contentsMousePressEvent(QMouseEvent *e) { - QScrollView::contentsMousePressEvent(e); + Q3ScrollView::contentsMousePressEvent(e); QPoint pos = e->pos(); d->mLastClickPos = pos; CardViewItem *item = itemAt(pos); if (item == 0) { d->mLastClickOnItem = false; if ( d->mOnSeparator) { d->mResizeAnchor = e->x()+contentsX(); d->colspace = (2*d->mItemSpacing) /*+ (2*d->mItemMargin)*/; int ccw = d->mItemWidth + d->colspace + d->mSepWidth; d->first = (contentsX()+d->mSepWidth)/ccw; d->pressed = (d->mResizeAnchor+d->mSepWidth)/ccw; d->span = d->pressed - d->first; d->firstX = d->first * ccw; if ( d->firstX ) d->firstX -= d->mSepWidth; // (no sep in col 0) } else { selectAll(false); } return; } d->mLastClickOnItem = true; CardViewItem *other = d->mCurrentItem; setCurrentItem( item ); // Always emit the selection emit clicked(item); // Check the selection type and update accordingly if (d->mSelectionMode == CardView::Single) { // make sure it isn't already selected if (item->isSelected()) return; bool b = signalsBlocked(); blockSignals(true); selectAll(false); blockSignals(b); item->setSelected(true); item->repaintCard(); emit selectionChanged(item); } else if (d->mSelectionMode == CardView::Multi) { // toggle the selection item->setSelected(!item->isSelected()); item->repaintCard(); emit selectionChanged(); } else if (d->mSelectionMode == CardView::Extended) { if ((e->button() & Qt::LeftButton) && (e->state() & Qt::ShiftButton)) { if ( item == other ) return; bool s = ! item->isSelected(); - if ( s && ! (e->state() & ControlButton) ) + if ( s && ! (e->state() & Qt::ControlButton) ) { bool b = signalsBlocked(); blockSignals(true); selectAll(false); blockSignals(b); } int from, to, a, b; a = d->mItemList.findRef( item ); b = d->mItemList.findRef( other ); from = a < b ? a : b; to = a > b ? a : b; //kdDebug()<<"selecting items "<<from<<" - "<<to<<" ( "<<s<<" )"<<endl; CardViewItem *aItem; for ( ; from <= to; from++ ) { aItem = d->mItemList.at( from ); aItem->setSelected( s ); repaintItem( aItem ); } emit selectionChanged(); } else if ((e->button() & Qt::LeftButton) && (e->state() & Qt::ControlButton)) { item->setSelected(!item->isSelected()); item->repaintCard(); emit selectionChanged(); } else if (e->button() & Qt::LeftButton) { bool b = signalsBlocked(); blockSignals(true); selectAll(false); blockSignals(b); item->setSelected(true); item->repaintCard(); emit selectionChanged(); } } } void CardView::contentsMouseReleaseEvent(QMouseEvent *e) { - QScrollView::contentsMouseReleaseEvent(e); + Q3ScrollView::contentsMouseReleaseEvent(e); if ( d->mResizeAnchor ) { // finish the resizing: unsetCursor(); // hide rubber bands int newiw = d->mItemWidth - ((d->mResizeAnchor - d->mRubberBandAnchor)/d->span); drawRubberBands( 0 ); // we should move to reflect the new position if we are scrolled. if ( contentsX() ) { int newX = QMAX( 0, ( d->pressed * ( newiw + d->colspace + d->mSepWidth ) ) - e->x() ); setContentsPos( newX, contentsY() ); } // set new item width setItemWidth( newiw ); // reset anchors d->mResizeAnchor = 0; d->mRubberBandAnchor = 0; return; } // If there are accel keys, we will not emit signals if ((e->state() & Qt::ShiftButton) || (e->state() & Qt::ControlButton)) return; // Get the item at this position CardViewItem *item = itemAt(e->pos()); if (item && KABPrefs::instance()->mHonorSingleClick) { emit executed(item); } } void CardView::contentsMouseDoubleClickEvent(QMouseEvent *e) { - QScrollView::contentsMouseDoubleClickEvent(e); + Q3ScrollView::contentsMouseDoubleClickEvent(e); CardViewItem *item = itemAt(e->pos()); if (item) { d->mCurrentItem = item; } if (item && !KABPrefs::instance()->mHonorSingleClick) { emit executed(item); } else emit doubleClicked(item); } void CardView::contentsMouseMoveEvent( QMouseEvent *e ) { // resizing if ( d->mResizeAnchor ) { int x = e->x(); if ( x != d->mRubberBandAnchor ) drawRubberBands( x ); return; } if (d->mLastClickOnItem && (e->state() & Qt::LeftButton) && ((e->pos() - d->mLastClickPos).manhattanLength() > 4)) { startDrag(); return; } d->mTimer->start( 500 ); // see if we are over a separator // only if we actually have them painted? if ( d->mDrawSeparators ) { int colcontentw = d->mItemWidth + (2*d->mItemSpacing); int colw = colcontentw + d->mSepWidth; int m = e->x()%colw; if ( m >= colcontentw && m > 0 ) { - setCursor( SplitVCursor ); // Why does this fail sometimes? + setCursor( Qt::SplitVCursor ); // Why does this fail sometimes? d->mOnSeparator = true; } else { - setCursor( ArrowCursor ); + setCursor( Qt::ArrowCursor ); d->mOnSeparator = false; } } } void CardView::enterEvent( QEvent * ) { d->mTimer->start( 500 ); } void CardView::leaveEvent( QEvent * ) { d->mTimer->stop(); if (d->mOnSeparator) { d->mOnSeparator = false; - setCursor( ArrowCursor ); + setCursor( Qt::ArrowCursor ); } } void CardView::focusInEvent( QFocusEvent * ) { if (!d->mCurrentItem && d->mItemList.count() ) { setCurrentItem( d->mItemList.first() ); } else if ( d->mCurrentItem ) { d->mCurrentItem->repaintCard(); } } void CardView::focusOutEvent( QFocusEvent * ) { if (d->mCurrentItem) d->mCurrentItem->repaintCard(); } void CardView::keyPressEvent( QKeyEvent *e ) { if ( ! ( childCount() && d->mCurrentItem ) ) { e->ignore(); return; } if ( mFlagBlockKeyPressed ) return; qApp->processEvents(); if ( e->isAutoRepeat() && !mFlagKeyPressed ) { e->accept(); return; } if (! e->isAutoRepeat() ) mFlagKeyPressed = true; uint pos = d->mItemList.findRef( d->mCurrentItem ); CardViewItem *aItem = 0L; // item that gets the focus CardViewItem *old = d->mCurrentItem; switch ( e->key() ) { - case Key_Up: + case Qt::Key_Up: if ( pos > 0 ) { aItem = d->mItemList.at( pos - 1 ); setCurrentItem( aItem ); } break; - case Key_Down: + case Qt::Key_Down: if ( pos < d->mItemList.count() - 1 ) { aItem = d->mItemList.at( pos + 1 ); setCurrentItem( aItem ); } break; - case Key_Left: + case Qt::Key_Left: { // look for an item in the previous/next column, starting from // the vertical middle of the current item. // FIXME use nice calculatd measures!!! QPoint aPoint( d->mCurrentItem->d->x, d->mCurrentItem->d->y ); aPoint -= QPoint( 30,-(d->mCurrentItem->height()/2) ); aItem = itemAt( aPoint ); // maybe we hit some space below an item while ( !aItem && aPoint.y() > 27 ) { aPoint -= QPoint( 0, 16 ); aItem = itemAt( aPoint ); } if ( aItem ) setCurrentItem( aItem ); } break; - case Key_Right: + case Qt::Key_Right: { // FIXME use nice calculated measures!!! QPoint aPoint( d->mCurrentItem->d->x + d->mItemWidth, d->mCurrentItem->d->y ); aPoint += QPoint( 30,(d->mCurrentItem->height()/2) ); aItem = itemAt( aPoint ); while ( !aItem && aPoint.y() > 27 ) { aPoint -= QPoint( 0, 16 ); aItem = itemAt( aPoint ); } if ( aItem ) setCurrentItem( aItem ); } break; - case Key_Home: + case Qt::Key_Home: aItem = d->mItemList.first(); setCurrentItem( aItem ); break; - case Key_End: + case Qt::Key_End: aItem = d->mItemList.last(); setCurrentItem( aItem ); break; - case Key_Prior: // PageUp + case Qt::Key_Prior: // PageUp { // QListView: "Make the item above the top visible and current" // TODO if contentsY(), pick the top item of the leftmost visible column if ( contentsX() <= 0 ) return; int cw = columnWidth(); int theCol = ( QMAX( 0, ( contentsX()/cw) * cw ) ) + d->mItemSpacing; aItem = itemAt( QPoint( theCol + 1, d->mItemSpacing + 1 ) ); if ( aItem ) setCurrentItem( aItem ); } break; - case Key_Next: // PageDown + case Qt::Key_Next: // PageDown { // QListView: "Make the item below the bottom visible and current" // find the first not fully visible column. // TODO: consider if a partly visible (or even hidden) item at the // bottom of the rightmost column exists int cw = columnWidth(); int theCol = ( (( contentsX() + visibleWidth() )/cw) * cw ) + d->mItemSpacing + 1; // if separators are on, we may need to we may be one column further right if only the spacing/sep is hidden if ( d->mDrawSeparators && cw - (( contentsX() + visibleWidth() )%cw) <= int( d->mItemSpacing + d->mSepWidth ) ) theCol += cw; // make sure this is not too far right while ( theCol > contentsWidth() ) theCol -= columnWidth(); aItem = itemAt( QPoint( theCol, d->mItemSpacing + 1 ) ); if ( aItem ) setCurrentItem( aItem ); } break; - case Key_Space: + case Qt::Key_Space: setSelected( d->mCurrentItem, !d->mCurrentItem->isSelected() ); emit selectionChanged(); break; - case Key_Return: - case Key_Enter: + case Qt::Key_Return: + case Qt::Key_Enter: { emit returnPressed( d->mCurrentItem ); emit executed( d->mCurrentItem ); } break; default: - if ( (e->state() & ControlButton) && e->key() == Key_A ) + if ( (e->state() & Qt::ControlButton) && e->key() == Qt::Key_A ) { // select all selectAll( true ); break; } // if we have a string, do autosearch else if ( ! e->text().isEmpty() && e->text()[0].isPrint() ) { } break; } // handle selection if ( aItem ) { if ( d->mSelectionMode == CardView::Extended ) { - if ( (e->state() & ShiftButton) ) + if ( (e->state() & Qt::ShiftButton) ) { // shift button: toggle range // if control button is pressed, leave all items // and toggle selection current->old current // otherwise, ?????? bool s = ! aItem->isSelected(); int from, to, a, b; a = d->mItemList.findRef( aItem ); b = d->mItemList.findRef( old ); from = a < b ? a : b; to = a > b ? a : b; if ( to - from > 1 ) { bool b = signalsBlocked(); blockSignals(true); selectAll(false); blockSignals(b); } //kdDebug()<<"selecting items "<<from<<" - "<<to<<" ( "<<s<<" )"<<endl; CardViewItem *item; for ( ; from <= to; from++ ) { item = d->mItemList.at( from ); item->setSelected( s ); repaintItem( item ); } emit selectionChanged(); } - else if ( (e->state() & ControlButton) ) + else if ( (e->state() & Qt::ControlButton) ) { // control button: do nothing } else { // no button: move selection to this item bool b = signalsBlocked(); blockSignals(true); selectAll(false); blockSignals(b); setSelected( aItem, true ); emit selectionChanged(); } } } } void CardView::contentsWheelEvent( QWheelEvent * e ) { scrollBy(2*e->delta()/-3, 0); } void CardView::setLayoutDirty(bool dirty) { if (d->mLayoutDirty != dirty) { d->mLayoutDirty = dirty; repaint(); } } void CardView::setDrawCardBorder(bool enabled) { if (enabled != d->mDrawCardBorder) { d->mDrawCardBorder = enabled; repaint(); } } bool CardView::drawCardBorder() const { return d->mDrawCardBorder; } void CardView::setDrawColSeparators(bool enabled) { if (enabled != d->mDrawSeparators) { d->mDrawSeparators = enabled; setLayoutDirty(true); } } bool CardView::drawColSeparators() const { return d->mDrawSeparators; } void CardView::setDrawFieldLabels(bool enabled) { if (enabled != d->mDrawFieldLabels) { d->mDrawFieldLabels = enabled; repaint(); } } bool CardView::drawFieldLabels() const { return d->mDrawFieldLabels; } void CardView::setShowEmptyFields(bool show) { if (show != d->mShowEmptyFields) { d->mShowEmptyFields = show; setLayoutDirty(true); } } bool CardView::showEmptyFields() const { return d->mShowEmptyFields; } void CardView::startDrag() { // The default implementation is a no-op. It must be // reimplemented in a subclass to be useful } void CardView::tryShowFullText() { d->mTimer->stop(); // if we have an item QPoint cpos = viewportToContents( viewport()->mapFromGlobal( QCursor::pos() ) ); CardViewItem *item = itemAt( cpos ); if ( item ) { // query it for a value to display //QString s = item ? item->caption() : "(no item)"; //kdDebug()<<"MOUSE REST: "<<s<<endl; QPoint ipos = cpos - itemRect( item ).topLeft(); item->showFullString( ipos, d->mTip ); } } void CardView::drawRubberBands( int pos ) { if ( pos && ((pos-d->firstX)/d->span) - d->colspace - d->mSepWidth < MIN_ITEM_WIDTH ) return; int tmpcw = (d->mRubberBandAnchor-d->firstX)/d->span; int x = d->firstX + tmpcw - d->mSepWidth - contentsX(); int h = visibleHeight(); QPainter p( viewport() ); - p.setRasterOp( XorROP ); - p.setPen( gray ); - p.setBrush( gray ); + p.setCompositionMode( QPainter::CompositionMode_Xor ); + p.setPen( Qt::gray ); + p.setBrush( Qt::gray ); uint n = d->first; // erase if ( d->mRubberBandAnchor ) do { p.drawRect( x, 0, 2, h ); x += tmpcw; n++; } while ( x < visibleWidth() && n < d->mSeparatorList.count() ); // paint new if ( ! pos ) return; tmpcw = (pos - d->firstX)/d->span; n = d->first; x = d->firstX + tmpcw - d->mSepWidth - contentsX(); do { p.drawRect( x, 0, 2, h ); x += tmpcw; n++; } while ( x < visibleWidth() && n < d->mSeparatorList.count() ); d->mRubberBandAnchor = pos; } int CardView::itemWidth() const { return d->mItemWidth; } void CardView::setItemWidth( int w ) { if ( w == d->mItemWidth ) return; if ( w < MIN_ITEM_WIDTH ) w = MIN_ITEM_WIDTH; d->mItemWidth = w; setLayoutDirty( true ); #ifndef KAB_EMBEDDED updateContents(); #else //KAB_EMBEDDED //US updateContents( d->contentsX(), d->contentsY(), visibleWidth(), visibleHeight() ); qDebug("CardView::setItemWidth has to be verified"); updateContents( contentsX(), contentsY(), visibleWidth(), visibleHeight() ); #endif //KAB_EMBEDDED } void CardView::setHeaderFont( const QFont &fnt ) { d->mHeaderFont = fnt; delete d->mBFm; d->mBFm = new QFontMetrics( fnt ); } QFont CardView::headerFont() const { return d->mHeaderFont; } void CardView::setFont( const QFont &fnt ) { - QScrollView::setFont( fnt ); + Q3ScrollView::setFont( fnt ); delete d->mFm; d->mFm = new QFontMetrics( fnt ); } int CardView::separatorWidth() { return d->mSepWidth; } void CardView::setSeparatorWidth( int width ) { d->mSepWidth = width; setLayoutDirty( true ); // hmm, actually I could just adjust the x'es... } int CardView::maxFieldLines() const { return d->mMaxFieldLines; } void CardView::setMaxFieldLines( int howmany ) { d->mMaxFieldLines = howmany ? howmany : INT_MAX; // FIXME update, forcing the items to recalc height!! } void CardView::keyReleaseEvent ( QKeyEvent * e ) { if ( mFlagBlockKeyPressed ) return; if ( !e->isAutoRepeat() ) { mFlagBlockKeyPressed = true; qApp->processEvents(); mFlagBlockKeyPressed = false; mFlagKeyPressed = false; } - QScrollView::keyReleaseEvent ( e ); + Q3ScrollView::keyReleaseEvent ( e ); } //END Cardview -#ifndef KAB_EMBEDDED -#include "cardview.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_cardview.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/views/cardview.h b/kaddressbook/views/cardview.h index 2ea3771..9c245ea 100644 --- a/kaddressbook/views/cardview.h +++ b/kaddressbook/views/cardview.h @@ -1,476 +1,484 @@ #ifndef CARDVIEW_H #define CARDVIEW_H -#include <qscrollview.h> -#include <qptrlist.h> +#include <q3scrollview.h> +#include <q3ptrlist.h> #include <qstring.h> #include <qrect.h> #include <qpair.h> #include <qpoint.h> +//Added by qt3to4: +#include <QWheelEvent> +#include <QResizeEvent> +#include <QFocusEvent> +#include <QLabel> +#include <QMouseEvent> +#include <QKeyEvent> +#include <QEvent> class QLabel; class QPainter; class QResizeEvent; class QMouseEvent; class CardView; class CardViewPrivate; class CardViewItemPrivate; class CardViewTip; /** Represents a single card (item) in the card view. A card has a caption * and a list of fields. A Field is a label<->value pair. The labels in a * card should be unique, since they will be used to index the values. */ class CardViewItem { friend class CardView; public: /** A single field in the card view. The first item is the label * and the second item is the value. */ typedef QPair<QString, QString> Field; /** Constructor. * * @param parent The CardView that this card should be displayed on. * @param caption The caption of the card. This is the text that will * appear at the top of the card. This is also the string that will * be used to sort the cards in the view. */ CardViewItem(CardView *parent, QString caption = QString::null); virtual ~CardViewItem(); /** @return The caption of the card, or QString::null if none was ever * set. */ const QString &caption() const; /** Sets the caption of the card. This is the text that will * appear at the top of the card. This is also the string that will * be used to sort the cards in the view. */ void setCaption(const QString &caption); /** Paints the card using the given painter and color group. The * card will handle painting itself selected if it is selected. */ virtual void paintCard(QPainter *p, QColorGroup &cg); /** Repaints the card. This is done by sending a repaint event to the * view with the clip rect defined as this card. */ virtual void repaintCard(); /** Adds a field to the card. * * @param label The label of the field. The field labels must be unique * within a card. * @param The value of the field. */ void insertField(const QString &label, const QString &value); /** Removes the field with label <i>label</i> from the card. */ void removeField(const QString &label); /** @return The value of the field with label <i>label</i>. */ QString fieldValue(const QString &label); /** Removes all the fields from this card. */ void clearFields(); /** @return The next card item. The order of the items will be the same * as the display order in the view. 0 will be returned if this is the * last card. */ CardViewItem *nextItem(); /** @return True if this card is currently selected, false otherwise. */ bool isSelected() const; /** Called by the parent card view when the mouse has been resting for * a certain amount of time. If the label or value at pos is obscured * (trimmed) make the label display the full text. */ void showFullString( const QPoint &pos, CardViewTip *tip ); /** @return a pointer to the Field at the position itempos * in this item. 0 is returned if itempos is in the caption. * @param itempos the position in item coordinates */ Field *fieldAt( const QPoint &itempos ) const; CardView *cardView() { return mView; }; /** @return The height of this item as rendered, in pixels. if @p allowCache is true, the item may use an internally cached value rather than recalculating from scratch. The argument is mainly to allow the cardView to change global settings (like maxFieldLines) that might influence the items heights */ int height( bool allowCache=true ) const; protected: /** Sets the card as selected. This is usually only called from the * card view. */ void setSelected(bool selected); private: /** Sets the default values. */ void initialize(); /** Trims a string to the width <i>width</i> using the font metrics * to determine the width of each char. If the string is longer than * <i>width</i>, then the string will be trimmed and a '...' will * be appended. */ QString trimString(const QString &text, int width, QFontMetrics &fm); CardViewItemPrivate *d; CardView *mView; }; /** The CardView is a method of displaying data in cards. This idea is * similar to the idea of a rolodex or business cards. Each card has a * caption and a list of fields, which are label<->value pairs. The CardView * displays multiple cards in a grid. The Cards are sorted based on their * caption. * * The CardView class is designed to mirror the API of the QListView or * QIconView. The CardView is also completely independant of KAddressBook and * can be used elsewhere. With the exception of a few simple config checks, * the CardView is also 100% independant of KDE. */ -class CardView : public QScrollView +class CardView : public Q3ScrollView { friend class CardViewItem; Q_OBJECT public: /** Constructor. */ CardView(QWidget *parent, const char *name); virtual ~CardView(); /** Inserts the item into the card view. This method does not have * to be called if you created the item with a proper parent. Once * inserted, the CardView takes ownership of the item. */ void insertItem(CardViewItem *item); /** Takes the item from the view. The item will not be deleted and * ownership of the item is returned to the caller. */ void takeItem(CardViewItem *item); /** Clears the view and deletes all card view items */ void clear(); /** @return The current item, the item that has the focus. * Whenever the view has focus, this item has a focus rectangle painted * at it's border. * @sa setCurrentItem() */ CardViewItem *currentItem(); /** Sets the CardViewItem @p item to the current item in the view. */ void setCurrentItem( CardViewItem *item ); /** @return The item found at the given point, or 0 if there is no item * at that point. */ CardViewItem *itemAt(const QPoint &viewPos); /** @return The bounding rect of the given item. */ QRect itemRect(const CardViewItem *item); /** Ensures that the given item is in the viewable area of the widget */ void ensureItemVisible(const CardViewItem *item); /** Repaints the given item. */ void repaintItem(const CardViewItem *item); enum SelectionMode { Single, Multi, Extended, NoSelection }; /** Sets the selection mode. * * @see QListView */ void setSelectionMode(SelectionMode mode); /** @return The current selection mode. */ SelectionMode selectionMode() const; /** Selects or deselects the given item. This method honors the current * selection mode, so if other items are selected, they may be unselected. */ void setSelected(CardViewItem *item, bool selected); /** Selects or deselects all items. */ void selectAll(bool state); /** @return True if the given item is selected, false otherwise. */ bool isSelected(CardViewItem *item) const; /** @return The first selected item. In single select mode, this will be * the only selected item, in other modes this will be the first selected * item, but others may exist. 0 if no item is selected. */ CardViewItem *selectedItem() const; /** @return The first item in the view. This may be 0 if no items have * been inserted. This method combined with CardViewItem::nextItem() * can be used to iterator through the list of items. */ CardViewItem *firstItem() const; /** @return The item after the given item or 0 if the item is the last * item. */ CardViewItem *itemAfter(CardViewItem *item); /** @return The number of items in the view. */ int childCount() const; /** Attempts to find the first item matching the params. * * @param text The text to match. * @param label The label of the field to match against. * @param compare The compare method to use in doing the search. * * @return The first matching item, or 0 if no items match. */ /*US CardViewItem *findItem(const QString &text, const QString &label, Qt::StringComparisonMode compare = Qt::BeginsWith); */ /** Returns the amounts of pixels required for one column. * This depends on wheather drawSeparators is enabled: * If so, it is itemWidth + 2*itemSpacing + separatorWidth * If not, it is itemWidth + itemSpacing * @see itemWidth(), setItemWidth(), itemSpacing() and setItemSpacing() */ uint columnWidth(); /** Sets if the border around a card should be draw. The border is a thing * (1 or 2 pixel) line that bounds the card. When drawn, it shows when * a card is highlighted and when it isn't. */ void setDrawCardBorder(bool enabled); /** @return True if borders are drawn, false otherwise. */ bool drawCardBorder() const; /** Sets if the column separator should be drawn. The column separator * is a thin verticle line (1 or 2 pixels) that is used to separate the * columns in the list view. The separator is just for esthetics and it * does not serve a functional purpose. */ void setDrawColSeparators(bool enabled); /** @return True if column separators are drawn, false otherwise. */ bool drawColSeparators() const; /** Sets if the field labels should be drawn. The field labels are the * unique strings used to identify the fields. Sometimes drawing these * labels makes sense as a source of clarity for the user, othertimes they * waste too much space and do not assist the user. */ void setDrawFieldLabels(bool enabled); /** @return True if the field labels are drawn, false otherwise. */ bool drawFieldLabels() const; /** Sets if fields with no value should be drawn (of cause the label only, * but it allows for embedded editing sometimes...) */ void setShowEmptyFields(bool show); /** @return Wheather empty fields should be shown */ bool showEmptyFields() const; /** @return the advisory internal margin in items. Setting a value above 1 means * a space between the item contents and the focus recttangle drawn around * the current item. The default value is 0. * The value should be used by CardViewItem and derived classes. * Note that this should not be greater than half of the minimal item width, * which is 80. It is currently not checked, so setting a value greater than 40 * will probably mean a crash in the items painting routine. * @private Note: I looked for a value in QStyle::PixelMetric to use, but I could * not see a usefull one. One may turn up in a future version of Qt. */ uint itemMargin(); /** Sets the internal item margin. @see itemMargin(). */ void setItemMargin( uint margin ); /** @return the item spacing. * The item spacing is the space (in pixels) between each item in a * column, between the items and column separators if drawn, and between * the items and the borders of the widget. The default value is set to * 10. * @private Note: There is no usefull QStyle::PixelMetric to use for this atm. * An option would be using KDialog::spacingHint(). */ uint itemSpacing(); /** Sets the item spacing. * @see itemSpacing() */ void setItemSpacing( uint spacing ); /** @return the width made available to the card items. */ int itemWidth() const; /** Sets the width made available to card items. */ void setItemWidth( int width ); /** Sets the header font */ void setHeaderFont( const QFont &fnt ); /** @return the header font */ QFont headerFont() const; /** @reimp */ void setFont( const QFont &fnt ); /** Sets the column separator width */ void setSeparatorWidth( int width ); /** @return the column separator width */ int separatorWidth(); /** Sets the maximum number of lines to display pr field. If set to 0 (the default) all lines will be displayed. */ void setMaxFieldLines( int howmany ); /** @return the maximum number of lines pr field */ int maxFieldLines() const; signals: /** Emitted whenever the selection changes. This means a user highlighted * a new item or unhighlighted a currently selected item. */ void selectionChanged(); /** Same as above method, only it carries the item that was selected. This * method will only be emitted in single select mode, since it defineds * which item was selected. */ void selectionChanged(CardViewItem *); /** This method is emitted whenever an item is clicked. */ void clicked(CardViewItem *); /** Emitted whenever the user 'executes' an item. This is dependant on * the KDE global config. This could be a single click or a doubleclick. * Also emitted when the return key is pressed on an item. */ void executed(CardViewItem *); /** Emitted whenever the user double clicks on an item. */ void doubleClicked(CardViewItem *); /** Emitted when the current item changes */ void currentChanged( CardViewItem * ); /** Emitted when the return key is pressed in an item. */ void returnPressed( CardViewItem * ); protected: bool mFlagKeyPressed; bool mFlagBlockKeyPressed; virtual void keyPressEvent ( QKeyEvent * ); virtual void keyReleaseEvent ( QKeyEvent * ); /** Determines which cards intersect that region and tells them to paint * themselves. */ void drawContents(QPainter *p, int clipx, int clipy, int clipw, int cliph); /** Sets the layout to dirty and repaints. */ void resizeEvent(QResizeEvent *e); /** Changes the direction the canvas scolls. */ void contentsWheelEvent(QWheelEvent *e); /** Sets the layout to dirty and calls for a repaint. */ void setLayoutDirty(bool dirty); /** Does the math based on the bounding rect of the cards to properly * lay the cards out on the screen. This is only done if the layout is * marked as dirty. */ void calcLayout(); // virtual void mousePressEvent(QMouseEvent *e); // virtual void mouseReleaseEvent(QMouseEvent *e); // virtual void mouseMoveEvent(QMouseEvent *e); virtual void contentsMousePressEvent(QMouseEvent *e); virtual void contentsMouseMoveEvent(QMouseEvent *e); virtual void contentsMouseReleaseEvent(QMouseEvent *e); virtual void contentsMouseDoubleClickEvent(QMouseEvent *e); virtual void enterEvent( QEvent * ); virtual void leaveEvent( QEvent * ); virtual void focusInEvent( QFocusEvent * ); virtual void focusOutEvent( QFocusEvent * ); /** Overload this method to be told when a drag should be started. * In most cases you will want to start a drag event with the currently * selected item. */ virtual void startDrag(); private slots: /** Called by a timer to display a label with truncated text. * Pop up a label, if there is a field with obscured text or * label at the cursor position. */ void tryShowFullText(); private: /** draws and erases the rubber bands while columns are resized. * @p pos is the horizontal position inside the viewport to use as * the anchor. * If pos is 0, only erase is done. */ void drawRubberBands( int pos ); CardViewPrivate *d; }; #endif diff --git a/kaddressbook/views/colorlistbox.cpp b/kaddressbook/views/colorlistbox.cpp index 2bddca6..46a59a1 100644 --- a/kaddressbook/views/colorlistbox.cpp +++ b/kaddressbook/views/colorlistbox.cpp @@ -1,245 +1,250 @@ /* * kmail: KDE mail client * This file: Copyright (C) 2000 Espen Sand, espen@kde.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #include <qpainter.h> +//Added by qt3to4: +#include <QDragEnterEvent> +#include <QDropEvent> +#include <QDragMoveEvent> +#include <QDragLeaveEvent> #include <kcolordialog.h> #ifndef KAB_EMBEDDED #include <kcolordrag.h> #endif //KAB_EMBEDDED #include "colorlistbox.h" #ifdef DESKTOP_VERSION #include <qcolordialog.h> #endif -ColorListBox::ColorListBox( QWidget *parent, const char *name, WFlags f ) +ColorListBox::ColorListBox( QWidget *parent, const char *name, Qt::WFlags f ) :KListBox( parent, name, f ), mCurrentOnDragEnter(-1) { connect( this, SIGNAL(selected(int)), this, SLOT(newColor(int)) ); - connect( this, SIGNAL(clicked(QListBoxItem *)), this, SLOT(slotNewColor(QListBoxItem *)) ); + connect( this, SIGNAL(clicked(Q3ListBoxItem *)), this, SLOT(slotNewColor(Q3ListBoxItem *)) ); setAcceptDrops( true); } void ColorListBox::setEnabled( bool state ) { if( state == isEnabled() ) { return; } - QListBox::setEnabled( state ); + Q3ListBox::setEnabled( state ); for( uint i=0; i<count(); i++ ) { updateItem( i ); } } void ColorListBox::setColor( uint index, const QColor &color ) { if( index < count() ) { ColorListItem *colorItem = (ColorListItem*)item(index); colorItem->setColor(color); updateItem( colorItem ); } } QColor ColorListBox::color( uint index ) const { if( index < count() ) { ColorListItem *colorItem = (ColorListItem*)item(index); return( colorItem->color() ); } else { - return( black ); + return( Qt::black ); } } -void ColorListBox::slotNewColor(QListBoxItem * i) +void ColorListBox::slotNewColor(Q3ListBoxItem * i) { if ( i ) newColor( index( i ) ); } void ColorListBox::newColor( int index ) { if( isEnabled() == false ) { return; } if( (uint)index < count() ) { QColor c = color( index ); #ifndef KAB_EMBEDDED if( KColorDialog::getColor( c, this ) != QDialog::Rejected ) { setColor( index, c ); } #else //KAB_EMBEDDED #ifdef DESKTOP_VERSION QColor col = QColorDialog::getColor ( c ); if ( col.isValid () ) { setColor( index, col ); } #else KColorDialog* k = new KColorDialog( this ); k->setColor( c ); int res = k->exec(); if ( res ) { setColor( index, k->getColor() ); } delete k; #endif #endif //KAB_EMBEDDED } } void ColorListBox::dragEnterEvent( QDragEnterEvent *e ) { #ifndef KAB_EMBEDDED if( KColorDrag::canDecode(e) && isEnabled() ) { mCurrentOnDragEnter = currentItem(); e->accept( true ); } else { mCurrentOnDragEnter = -1; e->accept( false ); } #else //KAB_EMBEDDED qDebug("ColorListBox::dragEnterEvent drag&drop currently not supported"); #endif //KAB_EMBEDDED } void ColorListBox::dragLeaveEvent( QDragLeaveEvent * ) { #ifndef KAB_EMBEDDED if( mCurrentOnDragEnter != -1 ) { setCurrentItem( mCurrentOnDragEnter ); mCurrentOnDragEnter = -1; } #else //KAB_EMBEDDED qDebug("ColorListBox::dragLeaveEvent drag&drop currently not supported"); #endif //KAB_EMBEDDED } void ColorListBox::dragMoveEvent( QDragMoveEvent *e ) { #ifndef KAB_EMBEDDED if( KColorDrag::canDecode(e) && isEnabled() ) { ColorListItem *item = (ColorListItem*)itemAt( e->pos() ); if( item != 0 ) { setCurrentItem ( item ); } } #else //KAB_EMBEDDED qDebug("ColorListBox::dragMoveEvent drag&drop currently not supported"); #endif //KAB_EMBEDDED } void ColorListBox::dropEvent( QDropEvent *e ) { #ifndef KAB_EMBEDDED QColor color; if( KColorDrag::decode( e, color ) ) { int index = currentItem(); if( index != -1 ) { ColorListItem *colorItem = (ColorListItem*)item(index); colorItem->setColor(color); triggerUpdate( false ); // Redraw item } mCurrentOnDragEnter = -1; } #else //KAB_EMBEDDED qDebug("ColorListBox::dropEvent drag&drop currently not supported"); #endif //KAB_EMBEDDED } ColorListItem::ColorListItem( const QString &text, const QColor &color ) - : QListBoxItem(), mColor( color ), mBoxWidth( 30 ) + : Q3ListBoxItem(), mColor( color ), mBoxWidth( 30 ) { setText( text ); } const QColor &ColorListItem::color( void ) { return( mColor ); } void ColorListItem::setColor( const QColor &color ) { mColor = color; } void ColorListItem::paint( QPainter *p ) { QFontMetrics fm = p->fontMetrics(); int h = fm.height(); p->drawText( mBoxWidth+3*2, fm.ascent() + fm.leading()/2, text() ); p->setPen( Qt::black ); p->drawRect( 3, 1, mBoxWidth, h-1 ); p->fillRect( 4, 2, mBoxWidth-2, h-3, mColor ); } -int ColorListItem::height(const QListBox *lb ) const +int ColorListItem::height(const Q3ListBox *lb ) const { return( lb->fontMetrics().lineSpacing()+1 ); } -int ColorListItem::width(const QListBox *lb ) const +int ColorListItem::width(const Q3ListBox *lb ) const { return( mBoxWidth + lb->fontMetrics().width( text() ) + 6 ); } -#ifndef KAB_EMBEDDED -#include "colorlistbox.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_colorlistbox.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/views/colorlistbox.h b/kaddressbook/views/colorlistbox.h index bb91484..31a8085 100644 --- a/kaddressbook/views/colorlistbox.h +++ b/kaddressbook/views/colorlistbox.h @@ -1,77 +1,82 @@ /* * kmail: KDE mail client * This file: Copyright (C) 2000 Espen Sand, espen@kde.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #ifndef _COLOR_LISTBOX_H_ #define _COLOR_LISTBOX_H_ #include <klistbox.h> +//Added by qt3to4: +#include <QDragMoveEvent> +#include <QDragLeaveEvent> +#include <QDropEvent> +#include <QDragEnterEvent> class QDragEnterEvent; class QDragLeaveEvent; class QDragMoveEvent; class QDropEvent; class ColorListBox : public KListBox { Q_OBJECT public: - ColorListBox( QWidget *parent=0, const char * name=0, WFlags f=0 ); + ColorListBox( QWidget *parent=0, const char * name=0, Qt::WFlags f=0 ); void setColor( uint index, const QColor &color ); QColor color( uint index ) const; public slots: virtual void setEnabled( bool state ); protected: void dragEnterEvent( QDragEnterEvent *e ); void dragLeaveEvent( QDragLeaveEvent *e ); void dragMoveEvent( QDragMoveEvent *e ); void dropEvent( QDropEvent *e ); private slots: void newColor( int index ); - void slotNewColor(QListBoxItem * i); + void slotNewColor(Q3ListBoxItem * i); private: int mCurrentOnDragEnter; }; -class ColorListItem : public QListBoxItem +class ColorListItem : public Q3ListBoxItem { public: ColorListItem( const QString &text, const QColor &color=Qt::black ); const QColor &color( void ); void setColor( const QColor &color ); protected: virtual void paint( QPainter * ); - virtual int height( const QListBox * ) const; - virtual int width( const QListBox * ) const; + virtual int height( const Q3ListBox * ) const; + virtual int width( const Q3ListBox * ) const; private: QColor mColor; int mBoxWidth; }; #endif diff --git a/kaddressbook/views/configurecardviewdialog.cpp b/kaddressbook/views/configurecardviewdialog.cpp index e0fbd21..b6327fe 100644 --- a/kaddressbook/views/configurecardviewdialog.cpp +++ b/kaddressbook/views/configurecardviewdialog.cpp @@ -1,369 +1,372 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qstring.h> #include <qlayout.h> #include <qlabel.h> #include <qcheckbox.h> -#include <qvbox.h> -#include <qgroupbox.h> +#include <q3vbox.h> +#include <q3groupbox.h> #include <qspinbox.h> #include <qtabwidget.h> -#include <qwhatsthis.h> +#include <q3whatsthis.h> +//Added by qt3to4: +#include <Q3GridLayout> +#include <Q3Frame> #include <kdebug.h> #include <kglobal.h> #include <kglobalsettings.h> #include <klocale.h> #include <kiconloader.h> #include <kconfig.h> #include <kfontdialog.h> #ifndef KAB_EMBEDDED #include <kpushbutton.h> #else //KAB_EMBEDDED #include <qpushbutton.h> #endif //KAB_EMBEDDED #include "colorlistbox.h" #include "configurecardviewdialog.h" ///////////////////////////////// // ConfigureCardViewDialog ConfigureCardViewWidget::ConfigureCardViewWidget( KABC::AddressBook *ab, QWidget *parent, const char *name ) : ViewConfigureWidget( ab, parent, name ) { #ifndef KAB_EMBEDDED QWidget *page = addPage( i18n( "Look & Feel" ), QString::null, DesktopIcon( "looknfeel" ) ); #else //KAB_EMBEDDED QWidget *page = addPage( i18n( "Look & Feel" ), QString::null, KGlobal::iconLoader()->loadIcon( "looknfeel", KIcon::Panel ) ); #endif //KAB_EMBEDDED mAdvancedPage = new CardViewLookNFeelPage( page ); } ConfigureCardViewWidget::~ConfigureCardViewWidget() { } void ConfigureCardViewWidget::restoreSettings( KConfig *config ) { ViewConfigureWidget::restoreSettings( config ); mAdvancedPage->restoreSettings( config ); } void ConfigureCardViewWidget::saveSettings( KConfig *config ) { ViewConfigureWidget::saveSettings( config ); mAdvancedPage->saveSettings( config ); } //////////////////////// // CardViewLookNFeelPage CardViewLookNFeelPage::CardViewLookNFeelPage( QWidget *parent, const char *name ) - : QVBox( parent, name ) + : Q3VBox( parent, name ) { initGUI(); } CardViewLookNFeelPage::~CardViewLookNFeelPage() { } void CardViewLookNFeelPage::restoreSettings( KConfig *config ) { // colors cbEnableCustomColors->setChecked( config->readBoolEntry( "EnableCustomColors", false ) ); QColor c; qDebug("CardViewLookNFeelPage::restoreSettings make base color configurable"); #ifndef KAB_EMBEDDED c = KGlobalSettings::baseColor(); #else //KAB_EMBEDDED c = QColor(0,0,0); #endif //KAB_EMBEDDED c = colorGroup().background(); lbColors->insertItem( new ColorListItem( i18n("Background Color"), config->readColorEntry( "BackgroundColor", &c ) ) ); c = colorGroup().foreground(); lbColors->insertItem( new ColorListItem( i18n("Text Color"), config->readColorEntry( "TextColor", &c ) ) ); c = colorGroup().button(); lbColors->insertItem( new ColorListItem( i18n("Header, Border and Separator Color"), config->readColorEntry( "HeaderColor", &c ) ) ); c = colorGroup().buttonText(); lbColors->insertItem( new ColorListItem( i18n("Header Text Color"), config->readColorEntry( "HeaderTextColor", &c ) ) ); c = colorGroup().highlight(); lbColors->insertItem( new ColorListItem( i18n("Highlight Color"), config->readColorEntry( "HighlightColor", &c ) ) ); c = colorGroup().highlightedText(); lbColors->insertItem( new ColorListItem( i18n("Highlighted Text Color"), config->readColorEntry( "HighlightedTextColor", &c ) ) ); enableColors(); // fonts QFont fnt = font(); updateFontLabel( config->readFontEntry( "TextFont", &fnt ), (QLabel*)lTextFont ); fnt.setBold( true ); updateFontLabel( config->readFontEntry( "HeaderFont", &fnt ), (QLabel*)lHeaderFont ); cbEnableCustomFonts->setChecked( config->readBoolEntry( "EnableCustomFonts", false ) ); enableFonts(); // layout sbMargin->setValue( config->readNumEntry( "ItemMargin", 0 ) ); sbSpacing->setValue( config->readNumEntry( "ItemSpacing", 10 ) ); sbSepWidth->setValue( config->readNumEntry( "SeparatorWidth", 2 ) ); cbDrawSeps->setChecked( config->readBoolEntry( "DrawSeparators", true ) ); cbDrawBorders->setChecked( config->readBoolEntry( "DrawBorder", true ) ); // behaviour cbShowFieldLabels->setChecked( config->readBoolEntry( "DrawFieldLabels", false ) ); cbShowEmptyFields->setChecked( config->readBoolEntry( "ShowEmptyFields", false ) ); } void CardViewLookNFeelPage::saveSettings( KConfig *config ) { // colors config->writeEntry( "EnableCustomColors", cbEnableCustomColors->isChecked() ); if ( cbEnableCustomColors->isChecked() ) // ?? - Hmmm. { config->writeEntry( "BackgroundColor", lbColors->color( 0 ) ); config->writeEntry( "TextColor", lbColors->color( 1 ) ); config->writeEntry( "HeaderColor", lbColors->color( 2 ) ); config->writeEntry( "HeaderTextColor", lbColors->color( 3 ) ); config->writeEntry( "HighlightColor", lbColors->color( 4 ) ); config->writeEntry( "HighlightedTextColor", lbColors->color( 5 ) ); } // fonts config->writeEntry( "EnableCustomFonts", cbEnableCustomFonts->isChecked() ); if ( cbEnableCustomFonts->isChecked() ) { config->writeEntry( "TextFont", lTextFont->font() ); config->writeEntry( "HeaderFont", lHeaderFont->font() ); } // layout config->writeEntry( "ItemMargin", sbMargin->value() ); config->writeEntry( "ItemSpacing", sbSpacing->value() ); config->writeEntry( "SeparatorWidth", sbSepWidth->value() ); config->writeEntry("DrawBorder", cbDrawBorders->isChecked()); config->writeEntry("DrawSeparators", cbDrawSeps->isChecked()); // behaviour config->writeEntry("DrawFieldLabels", cbShowFieldLabels->isChecked()); config->writeEntry("ShowEmptyFields", cbShowEmptyFields->isChecked()); } void CardViewLookNFeelPage::setTextFont() { QFont f( lTextFont->font() ); #ifndef KAB_EMBEDDED if ( KFontDialog::getFont( f, false, this ) == QDialog::Accepted ) updateFontLabel( f, lTextFont ); #else //KAB_EMBEDDED bool ok; QFont fout = KFontDialog::getFont( f, ok); if ( ok ) updateFontLabel( fout, lTextFont ); #endif //KAB_EMBEDDED } void CardViewLookNFeelPage::setHeaderFont() { QFont f( lHeaderFont->font() ); #ifndef KAB_EMBEDDED if ( KFontDialog::getFont( f,false, this ) == QDialog::Accepted ) updateFontLabel( f, lHeaderFont ); #else //KAB_EMBEDDED bool ok; QFont fout = KFontDialog::getFont( f, ok); if ( ok ) updateFontLabel( fout, lHeaderFont ); #endif //KAB_EMBEDDED } void CardViewLookNFeelPage::enableFonts() { vbFonts->setEnabled( cbEnableCustomFonts->isChecked() ); if ( cbEnableCustomFonts->isChecked() ) vbFonts->setFocus(); } void CardViewLookNFeelPage::enableColors() { lbColors->setEnabled( cbEnableCustomColors->isChecked() ); if ( cbEnableCustomColors->isChecked() ) lbColors->setFocus(); } void CardViewLookNFeelPage::initGUI() { int spacing = KDialog::spacingHint(); int margin = KDialog::marginHint(); QTabWidget *tabs = new QTabWidget( this ); // Layout - QVBox *loTab = new QVBox( this, "layouttab" ); + Q3VBox *loTab = new Q3VBox( this, "layouttab" ); loTab->setSpacing( spacing ); loTab->setMargin( margin ); - QGroupBox *gbGeneral = new QGroupBox( 1, Qt::Horizontal, i18n("General"), loTab ); + Q3GroupBox *gbGeneral = new Q3GroupBox( 1, Qt::Horizontal, i18n("General"), loTab ); cbDrawSeps = new QCheckBox( i18n("Draw &separators"), gbGeneral ); - QHBox *hbSW = new QHBox( gbGeneral ); + Q3HBox *hbSW = new Q3HBox( gbGeneral ); QLabel *lSW = new QLabel( i18n("Separator &width:"), hbSW ); sbSepWidth = new QSpinBox( 1, 50, 1, hbSW ); lSW->setBuddy( sbSepWidth); - QHBox *hbPadding = new QHBox( gbGeneral ); + Q3HBox *hbPadding = new Q3HBox( gbGeneral ); QLabel *lSpacing = new QLabel( i18n("&Padding:"), hbPadding ); sbSpacing = new QSpinBox( 0, 100, 1, hbPadding ); lSpacing->setBuddy( sbSpacing ); - QGroupBox *gbCards = new QGroupBox( 1, Qt::Horizontal, i18n("Cards"), loTab ); + Q3GroupBox *gbCards = new Q3GroupBox( 1, Qt::Horizontal, i18n("Cards"), loTab ); - QHBox *hbMargin = new QHBox( gbCards ); + Q3HBox *hbMargin = new Q3HBox( gbCards ); QLabel *lMargin = new QLabel( i18n("&Margin:"), hbMargin ); sbMargin = new QSpinBox( 0, 100, 1, hbMargin ); lMargin->setBuddy( sbMargin ); cbDrawBorders = new QCheckBox( i18n("Draw &borders"), gbCards ); loTab->setStretchFactor( new QWidget( loTab ), 1 ); - QWhatsThis::add( sbMargin, i18n( + Q3WhatsThis::add( sbMargin, i18n( "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, " "incrementing the item margin will add space between the focus rectangle and the item data." ) ); - QWhatsThis::add( lMargin, QWhatsThis::textFor( sbMargin ) ); - QWhatsThis::add( sbSpacing, i18n( + /* TODO:hacker: Q3WhatsThis::add( lMargin, Q3WhatsThis::textFor( sbMargin ) ); */ + Q3WhatsThis::add( sbSpacing, i18n( "The Item Spacing decides the distance (in pixels) between the items and anything else: the view " "borders, other items or column separators." ) ); - QWhatsThis::add( lSpacing, QWhatsThis::textFor( sbSpacing ) ); - QWhatsThis::add( sbSepWidth, i18n("Sets the width of column separators") ); - QWhatsThis::add( lSW, QWhatsThis::textFor( sbSepWidth ) ); + /* TODO:hacker: Q3WhatsThis::add( lSpacing, Q3WhatsThis::textFor( sbSpacing ) ); */ + Q3WhatsThis::add( sbSepWidth, i18n("Sets the width of column separators") ); + /* TODO:hacker: Q3WhatsThis::add( lSW, Q3WhatsThis::textFor( sbSepWidth ) ); */ tabs->addTab( loTab, i18n("&Layout") ); // Colors - QVBox *colorTab = new QVBox( this, "colortab" ); + Q3VBox *colorTab = new Q3VBox( this, "colortab" ); colorTab->setSpacing( spacing ); colorTab->setMargin( spacing ); cbEnableCustomColors = new QCheckBox( i18n("&Enable custom Colors"), colorTab ); connect( cbEnableCustomColors, SIGNAL(clicked()), this, SLOT(enableColors()) ); lbColors = new ColorListBox( colorTab ); tabs->addTab( colorTab, i18n("&Colors") ); - QWhatsThis::add( cbEnableCustomColors, i18n( + Q3WhatsThis::add( cbEnableCustomColors, i18n( "If custom colors are enabled, you may choose the colors for the view below. " "Otherwise colors from your current KDE color scheme are used." ) ); - QWhatsThis::add( lbColors, i18n( + Q3WhatsThis::add( lbColors, i18n( "Double click or press RETURN on a item to select a color for the related strings in the view." ) ); // Fonts - QVBox *fntTab = new QVBox( this, "fonttab" ); + Q3VBox *fntTab = new Q3VBox( this, "fonttab" ); fntTab->setSpacing( spacing ); fntTab->setMargin( spacing ); cbEnableCustomFonts = new QCheckBox( i18n("&Enable custom fonts"), fntTab ); connect( cbEnableCustomFonts, SIGNAL(clicked()), this, SLOT(enableFonts()) ); vbFonts = new QWidget( fntTab ); - QGridLayout *gFnts = new QGridLayout( vbFonts, 2, 3 ); + Q3GridLayout *gFnts = new Q3GridLayout( vbFonts, 2, 3 ); gFnts->setSpacing( spacing ); gFnts->setAutoAdd( true ); gFnts->setColStretch( 1, 1 ); QLabel *lTFnt = new QLabel( i18n("&Text font:"), vbFonts ); lTextFont = new QLabel( vbFonts ); - lTextFont->setFrameStyle( QFrame::Panel|QFrame::Sunken ); + lTextFont->setFrameStyle( Q3Frame::Panel|Q3Frame::Sunken ); #ifndef KAB_EMBEDDED btnFont = new KPushButton( i18n("Choose..."), vbFonts ); #else //KAB_EMBEDDED btnFont = new QPushButton( i18n("Choose..."), vbFonts ); #endif //KAB_EMBEDDED lTFnt->setBuddy( btnFont ); connect( btnFont, SIGNAL(clicked()), this, SLOT(setTextFont()) ); QLabel *lHFnt = new QLabel( i18n("&Header font:"), vbFonts ); lHeaderFont = new QLabel( vbFonts ); - lHeaderFont->setFrameStyle( QFrame::Panel|QFrame::Sunken ); + lHeaderFont->setFrameStyle( Q3Frame::Panel|Q3Frame::Sunken ); #ifndef KAB_EMBEDDED btnHeaderFont = new KPushButton( i18n("Choose..."), vbFonts ); #else //KAB_EMBEDDED btnHeaderFont = new QPushButton( i18n("Choose..."), vbFonts ); #endif //KAB_EMBEDDED lHFnt->setBuddy( btnHeaderFont ); connect( btnHeaderFont, SIGNAL(clicked()), this, SLOT(setHeaderFont()) ); fntTab->setStretchFactor( new QWidget( fntTab ), 1 ); - QWhatsThis::add( cbEnableCustomFonts, i18n( + Q3WhatsThis::add( cbEnableCustomFonts, i18n( "If custom fonts are enabled, you may choose which fonts to use for this view below. " "Otherwise the default KDE font will be used, in bold style for the header and " "normal style for the data." ) ); tabs->addTab( fntTab, i18n("&Fonts") ); // Behaviour - QVBox *behaviourTab = new QVBox( this ); + Q3VBox *behaviourTab = new Q3VBox( this ); behaviourTab->setMargin( margin ); behaviourTab->setSpacing( spacing ); cbShowEmptyFields = new QCheckBox( i18n("Show &empty fields"), behaviourTab ); cbShowFieldLabels = new QCheckBox( i18n("Show field &labels"), behaviourTab ); behaviourTab->setStretchFactor( new QWidget( behaviourTab ), 1 ); tabs->addTab( behaviourTab, i18n("Be&havior") ); } void CardViewLookNFeelPage::updateFontLabel( QFont fnt, QLabel *l ) { l->setFont( fnt ); l->setText( QString( fnt.family() + " %1" ).arg( fnt.pointSize() ) ); } -#ifndef KAB_EMBEDDED -#include "configurecardviewdialog.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_configurecardviewdialog.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/views/configurecardviewdialog.h b/kaddressbook/views/configurecardviewdialog.h index 7a62226..4af475d 100644 --- a/kaddressbook/views/configurecardviewdialog.h +++ b/kaddressbook/views/configurecardviewdialog.h @@ -1,117 +1,119 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef CONFIGURECARDVIEWDIALOG_H #define CONFIGURECARDVIEWDIALOG_H #include "viewconfigurewidget.h" -#include <qvbox.h> +#include <q3vbox.h> #include <qwidget.h> #include <qfont.h> +//Added by qt3to4: +#include <QLabel> class QString; class QWidget; class QCheckBox; class QLabel; class KConfig; namespace KABC { class AddressBook; } class CardViewLookAndFeelPage; /** Configure dialog for the card view. This dialog inherits from the standard view dialog in order to add a custom page for the card view. */ class ConfigureCardViewWidget : public ViewConfigureWidget { public: ConfigureCardViewWidget( KABC::AddressBook *ab, QWidget *parent, const char *name ); virtual ~ConfigureCardViewWidget(); virtual void restoreSettings( KConfig* ); virtual void saveSettings( KConfig* ); private: class CardViewLookNFeelPage *mAdvancedPage; }; /** Card View Advanced LookNFeel settings widget: this is a tabbed widget with 3 tabs: Fonts * text font * header font Colors * background color * text color * highlight color * title/sep text color * title/sep bg color Layout * item margin * item spacing */ -class CardViewLookNFeelPage : public QVBox { +class CardViewLookNFeelPage : public Q3VBox { Q_OBJECT public: CardViewLookNFeelPage( QWidget *parent=0, const char *name=0 ); ~CardViewLookNFeelPage(); void restoreSettings( KConfig* ); void saveSettings( KConfig* ); private slots: void setTextFont(); void setHeaderFont(); void enableFonts(); void enableColors(); private: void initGUI(); void updateFontLabel( QFont, QLabel * ); QCheckBox *cbEnableCustomFonts, *cbEnableCustomColors, *cbDrawSeps, *cbDrawBorders, *cbShowFieldLabels, *cbShowEmptyFields; class ColorListBox *lbColors; QLabel *lTextFont, *lHeaderFont; #ifndef KAB_EMBEDDED class KPushButton *btnFont, *btnHeaderFont; #else //KAB_EMBEDDED class QPushButton *btnFont, *btnHeaderFont; #endif //KAB_EMBEDDED class QSpinBox *sbMargin, *sbSpacing, *sbSepWidth; class QWidget *vbFonts; }; #endif diff --git a/kaddressbook/views/configuretableviewdialog.cpp b/kaddressbook/views/configuretableviewdialog.cpp index c329cd9..7ed897a 100644 --- a/kaddressbook/views/configuretableviewdialog.cpp +++ b/kaddressbook/views/configuretableviewdialog.cpp @@ -1,345 +1,348 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qstring.h> #include <qwidget.h> #include <qlayout.h> #include <qlabel.h> #include <qradiobutton.h> #include <qcheckbox.h> -#include <qvbox.h> -#include <qbuttongroup.h> +#include <q3vbox.h> +#include <q3buttongroup.h> #include <qtabwidget.h> -#include <qwhatsthis.h> +#include <q3whatsthis.h> #include <qpushbutton.h> +//Added by qt3to4: +#include <Q3GridLayout> +#include <Q3Frame> #include <kglobal.h> #include <klocale.h> #include <klineedit.h> #include <kurlrequester.h> #include <kiconloader.h> #include <kfontdialog.h> #ifndef KAB_EMBEDDED #include <kimageio.h> #else //KAB_EMBEDDED #endif //KAB_EMBEDDED #include <kconfig.h> #include "colorlistbox.h" #include "configuretableviewdialog.h" ConfigureTableViewWidget::ConfigureTableViewWidget( KABC::AddressBook *ab, QWidget *parent, const char *name ) : ViewConfigureWidget( ab, parent, name ) { QWidget *page = addPage( i18n( "Look & Feel" ), QString::null, KGlobal::iconLoader()->loadIcon( "looknfeel", KIcon::Panel ) ); mPage = new LookAndFeelPage( page ); } ConfigureTableViewWidget::~ConfigureTableViewWidget() { } void ConfigureTableViewWidget::restoreSettings( KConfig *config ) { ViewConfigureWidget::restoreSettings( config ); mPage->restoreSettings( config ); } void ConfigureTableViewWidget::saveSettings( KConfig *config ) { ViewConfigureWidget::saveSettings( config ); mPage->saveSettings( config ); } LookAndFeelPage::LookAndFeelPage(QWidget *parent, const char *name) - : QVBox(parent, name) + : Q3VBox(parent, name) { initGUI(); // Set initial state enableBackgroundToggled(mBackgroundBox->isChecked()); } void LookAndFeelPage::restoreSettings( KConfig *config ) { mAlternateButton->setChecked(config->readBoolEntry("ABackground", true)); mLineButton->setChecked(config->readBoolEntry("SingleLine", false)); mToolTipBox->setChecked(config->readBoolEntry("ToolTips", true)); if (!mAlternateButton->isChecked() & !mLineButton->isChecked()) mNoneButton->setChecked(true); mBackgroundBox->setChecked(config->readBoolEntry("Background", false)); mBackgroundName->lineEdit()->setText(config->readEntry("BackgroundName")); // colors cbEnableCustomColors->setChecked( config->readBoolEntry( "EnableCustomColors", false ) ); QColor c; //qDebug("LookAndFeelPage::restoreSettings make base color configurable"); #ifndef KAB_EMBEDDED c = KGlobalSettings::baseColor(); #else //KAB_EMBEDDED c = QColor(0,0,0); #endif //KAB_EMBEDDED c = colorGroup().background(); lbColors->insertItem( new ColorListItem( i18n("Background Color"), config->readColorEntry( "BackgroundColor", &c ) ) ); c = colorGroup().foreground(); lbColors->insertItem( new ColorListItem( i18n("Text Color"), config->readColorEntry( "TextColor", &c ) ) ); c = colorGroup().button(); lbColors->insertItem( new ColorListItem( i18n("Header Background Color"), config->readColorEntry( "HeaderBackgroundColor", &c ) ) ); c = colorGroup().buttonText(); lbColors->insertItem( new ColorListItem( i18n("Header Text Color"), config->readColorEntry( "HeaderTextColor", &c ) ) ); c = colorGroup().highlight(); lbColors->insertItem( new ColorListItem( i18n("Highlight Color"), config->readColorEntry( "HighlightColor", &c ) ) ); c = colorGroup().highlightedText(); lbColors->insertItem( new ColorListItem( i18n("Highlighted Text Color"), config->readColorEntry( "HighlightedTextColor", &c ) ) ); c = colorGroup().background(); lbColors->insertItem( new ColorListItem( i18n("Alternating Background Color"), config->readColorEntry( "AlternatingBackgroundColor", &c ) ) ); enableColors(); // fonts QFont fnt = font(); updateFontLabel( config->readFontEntry( "TextFont", &fnt ), (QLabel*)lTextFont ); fnt.setBold( true ); updateFontLabel( config->readFontEntry( "HeaderFont", &fnt ), (QLabel*)lHeaderFont ); cbEnableCustomFonts->setChecked( config->readBoolEntry( "EnableCustomFonts", false ) ); enableFonts(); } void LookAndFeelPage::saveSettings( KConfig *config ) { config->writeEntry("ABackground", mAlternateButton->isChecked()); config->writeEntry("SingleLine", mLineButton->isChecked()); config->writeEntry("ToolTips", mToolTipBox->isChecked()); config->writeEntry("Background", mBackgroundBox->isChecked()); config->writeEntry("BackgroundName", mBackgroundName->lineEdit()->text()); // colors config->writeEntry( "EnableCustomColors", cbEnableCustomColors->isChecked() ); if ( cbEnableCustomColors->isChecked() ) // ?? - Hmmm. { config->writeEntry( "BackgroundColor", lbColors->color( 0 ) ); config->writeEntry( "TextColor", lbColors->color( 1 ) ); config->writeEntry( "HeaderBackgroundColor", lbColors->color( 2 ) ); config->writeEntry( "HeaderTextColor", lbColors->color( 3 ) ); config->writeEntry( "HighlightColor", lbColors->color( 4 ) ); config->writeEntry( "HighlightedTextColor", lbColors->color( 5 ) ); config->writeEntry( "AlternatingBackgroundColor", lbColors->color( 6 ) ); } // fonts config->writeEntry( "EnableCustomFonts", cbEnableCustomFonts->isChecked() ); if ( cbEnableCustomFonts->isChecked() ) { config->writeEntry( "TextFont", lTextFont->font() ); config->writeEntry( "HeaderFont", lHeaderFont->font() ); } } void LookAndFeelPage::setTextFont() { QFont f( lTextFont->font() ); #ifndef KAB_EMBEDDED if ( KFontDialog::getFont( f, false, this ) == QDialog::Accepted ) updateFontLabel( f, lTextFont ); #else //KAB_EMBEDDED bool ok; QFont fout = KFontDialog::getFont( f, ok); if ( ok ) updateFontLabel( fout, lTextFont ); #endif //KAB_EMBEDDED } void LookAndFeelPage::setHeaderFont() { QFont f( lHeaderFont->font() ); #ifndef KAB_EMBEDDED if ( KFontDialog::getFont( f,false, this ) == QDialog::Accepted ) updateFontLabel( f, lHeaderFont ); #else //KAB_EMBEDDED bool ok; QFont fout = KFontDialog::getFont( f, ok); if ( ok ) updateFontLabel( fout, lHeaderFont ); #endif //KAB_EMBEDDED } void LookAndFeelPage::enableFonts() { vbFonts->setEnabled( cbEnableCustomFonts->isChecked() ); if ( cbEnableCustomFonts->isChecked() ) vbFonts->setFocus(); } void LookAndFeelPage::enableColors() { lbColors->setEnabled( cbEnableCustomColors->isChecked() ); if ( cbEnableCustomColors->isChecked() ) lbColors->setFocus(); } void LookAndFeelPage::initGUI() { int spacing = KDialog::spacingHint(); int margin = KDialog::marginHint(); QTabWidget *tabs = new QTabWidget( this ); // General - QVBox *generalTab = new QVBox( this, "generaltab" ); + Q3VBox *generalTab = new Q3VBox( this, "generaltab" ); generalTab->setSpacing( spacing ); generalTab->setMargin( margin ); - QButtonGroup *group = new QButtonGroup(1, Qt::Horizontal, + Q3ButtonGroup *group = new Q3ButtonGroup(1, Qt::Horizontal, i18n("Row Separator"), generalTab); mAlternateButton = new QRadioButton(i18n("Alternating backgrounds"), group, "mAlternateButton"); mLineButton = new QRadioButton(i18n("Single line"), group, "mLineButton"); mNoneButton = new QRadioButton(i18n("None"), group, "mNoneButton"); mBackgroundBox = new QCheckBox(i18n("Enable background image:"), generalTab, "mBackgroundBox"); connect(mBackgroundBox, SIGNAL(toggled(bool)), SLOT(enableBackgroundToggled(bool))); // LR image not implemented mBackgroundBox->setEnabled( false ); mBackgroundName = new KURLRequester(generalTab, "mBackgroundName"); #ifndef KAB_EMBEDDED mBackgroundName->setMode(KFile::File | KFile::ExistingOnly | KFile::LocalOnly); mBackgroundName->setFilter(KImageIO::pattern(KImageIO::Reading)); #endif //KAB_EMBEDDED // ToolTip Checkbox mToolTipBox = new QCheckBox(i18n("Enable contact tooltips"), generalTab, "mToolTipBox"); tabs->addTab( generalTab, i18n("&General") ); // Colors - QVBox *colorTab = new QVBox( this, "colortab" ); + Q3VBox *colorTab = new Q3VBox( this, "colortab" ); colorTab->setSpacing( spacing ); colorTab->setMargin( spacing ); cbEnableCustomColors = new QCheckBox( i18n("&Enable custom Colors"), colorTab ); connect( cbEnableCustomColors, SIGNAL(clicked()), this, SLOT(enableColors()) ); lbColors = new ColorListBox( colorTab ); tabs->addTab( colorTab, i18n("&Colors") ); - QWhatsThis::add( cbEnableCustomColors, i18n( + Q3WhatsThis::add( cbEnableCustomColors, i18n( "If custom colors are enabled, you may choose the colors for the view below. " "Otherwise colors from your current KDE color scheme are used." ) ); - QWhatsThis::add( lbColors, i18n( + Q3WhatsThis::add( lbColors, i18n( "Double click or press RETURN on a item to select a color for the related strings in the view." ) ); // Fonts - QVBox *fntTab = new QVBox( this, "fonttab" ); + Q3VBox *fntTab = new Q3VBox( this, "fonttab" ); fntTab->setSpacing( spacing ); fntTab->setMargin( spacing ); cbEnableCustomFonts = new QCheckBox( i18n("&Enable custom fonts"), fntTab ); connect( cbEnableCustomFonts, SIGNAL(clicked()), this, SLOT(enableFonts()) ); vbFonts = new QWidget( fntTab ); - QGridLayout *gFnts = new QGridLayout( vbFonts, 2, 3 ); + Q3GridLayout *gFnts = new Q3GridLayout( vbFonts, 2, 3 ); gFnts->setSpacing( spacing ); gFnts->setAutoAdd( true ); gFnts->setColStretch( 1, 1 ); QLabel *lTFnt = new QLabel( i18n("&Text font:"), vbFonts ); lTextFont = new QLabel( vbFonts ); - lTextFont->setFrameStyle( QFrame::Panel|QFrame::Sunken ); + lTextFont->setFrameStyle( Q3Frame::Panel|Q3Frame::Sunken ); #ifndef KAB_EMBEDDED btnFont = new KPushButton( i18n("Choose..."), vbFonts ); #else //KAB_EMBEDDED btnFont = new QPushButton( i18n("Choose..."), vbFonts ); #endif //KAB_EMBEDDED lTFnt->setBuddy( btnFont ); connect( btnFont, SIGNAL(clicked()), this, SLOT(setTextFont()) ); QLabel *lHFnt = new QLabel( i18n("&Header font:"), vbFonts ); lHeaderFont = new QLabel( vbFonts ); - lHeaderFont->setFrameStyle( QFrame::Panel|QFrame::Sunken ); + lHeaderFont->setFrameStyle( Q3Frame::Panel|Q3Frame::Sunken ); #ifndef KAB_EMBEDDED btnHeaderFont = new KPushButton( i18n("Choose..."), vbFonts ); #else //KAB_EMBEDDED btnHeaderFont = new QPushButton( i18n("Choose..."), vbFonts ); #endif //KAB_EMBEDDED lHFnt->setBuddy( btnHeaderFont ); connect( btnHeaderFont, SIGNAL(clicked()), this, SLOT(setHeaderFont()) ); fntTab->setStretchFactor( new QWidget( fntTab ), 1 ); - QWhatsThis::add( cbEnableCustomFonts, i18n( + Q3WhatsThis::add( cbEnableCustomFonts, i18n( "If custom fonts are enabled, you may choose which fonts to use for this view below. " "Otherwise the default KDE font will be used, in bold style for the header and " "normal style for the data." ) ); tabs->addTab( fntTab, i18n("&Fonts") ); } void LookAndFeelPage::enableBackgroundToggled(bool enabled) { mBackgroundName->setEnabled(enabled); } void LookAndFeelPage::updateFontLabel( QFont fnt, QLabel *l ) { l->setFont( fnt ); l->setText( QString( fnt.family() + " %1" ).arg( fnt.pointSize() ) ); } -#ifndef KAB_EMBEDDED -#include "configuretableviewdialog.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_configuretableviewdialog.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/views/configuretableviewdialog.h b/kaddressbook/views/configuretableviewdialog.h index 003ccf8..8125fc9 100644 --- a/kaddressbook/views/configuretableviewdialog.h +++ b/kaddressbook/views/configuretableviewdialog.h @@ -1,103 +1,105 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef CONFIGURETABLEVIEWDIALOG_H #define CONFIGURETABLEVIEWDIALOG_H #include "viewconfigurewidget.h" -#include <qvbox.h> +#include <q3vbox.h> +//Added by qt3to4: +#include <QLabel> class QString; class QWidget; class QRadioButton; class QCheckBox; class KURLRequester; class KConfig; class QLabel; namespace KABC { class AddressBook; } class LookAndFeelPage; /** Configure dialog for the table view. This dialog inherits from the standard view dialog in order to add a custom page for the table view. */ class ConfigureTableViewWidget : public ViewConfigureWidget { public: ConfigureTableViewWidget( KABC::AddressBook *ab, QWidget *parent, const char *name ); virtual ~ConfigureTableViewWidget(); virtual void restoreSettings( KConfig* ); virtual void saveSettings( KConfig* ); private: void initGUI(); LookAndFeelPage *mPage; }; /** Internal class. It is only defined here for moc */ -class LookAndFeelPage : public QVBox +class LookAndFeelPage : public Q3VBox { Q_OBJECT public: LookAndFeelPage( QWidget *parent, const char *name = 0 ); ~LookAndFeelPage() {} void restoreSettings( KConfig* ); void saveSettings( KConfig* ); protected slots: void enableBackgroundToggled( bool ); void setTextFont(); void setHeaderFont(); void enableFonts(); void enableColors(); private: void initGUI(); void updateFontLabel( QFont, QLabel * ); QCheckBox *cbEnableCustomFonts, *cbEnableCustomColors; class ColorListBox *lbColors; QLabel *lTextFont, *lHeaderFont; class QPushButton *btnFont, *btnHeaderFont; class QWidget* vbFonts; QRadioButton *mAlternateButton; QRadioButton *mLineButton; QRadioButton *mNoneButton; QCheckBox *mToolTipBox; KURLRequester *mBackgroundName; QCheckBox *mBackgroundBox; }; #endif diff --git a/kaddressbook/views/contactlistview.cpp b/kaddressbook/views/contactlistview.cpp index 9accf78..227645d 100644 --- a/kaddressbook/views/contactlistview.cpp +++ b/kaddressbook/views/contactlistview.cpp @@ -1,429 +1,435 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ -#include <qheader.h> -#include <qiconset.h> +#include <q3header.h> +#include <qicon.h> #include <qimage.h> -#include <qdragobject.h> +#include <q3dragobject.h> #include <qcombobox.h> #include <qpainter.h> #include <qbrush.h> #include <qevent.h> #include <qapplication.h> +//Added by qt3to4: +#include <QDropEvent> +#include <QPixmap> +#include <QMouseEvent> +#include <QKeyEvent> #include <klocale.h> #include <kglobalsettings.h> #include <kiconloader.h> #include <kdebug.h> #include <kconfig.h> #include <kapplication.h> #include <kurl.h> #include "kaddressbooktableview.h" #include "contactlistview.h" ///////////////////////////////// // DynamicTip Methods DynamicTip::DynamicTip( ContactListView *parent) - : QToolTip( parent ) + /* TODO:hacker:: QToolTip( parent ) */ { } void DynamicTip::maybeTip( const QPoint &pos ) { + /* TODO:hacker: static bool ishidden = true; if (!parentWidget()->inherits( "ContactListView" )) return; ContactListView *plv = (ContactListView*)parentWidget(); if (!plv->tooltips()) return; QPoint posVp = plv->viewport()->pos(); - QListViewItem *lvi = plv->itemAt( pos - posVp ); + Q3ListViewItem *lvi = plv->itemAt( pos - posVp ); if (!lvi) return; #ifndef KAB_EMBEDDED ContactListViewItem *plvi = dynamic_cast< ContactListViewItem* >(lvi); #else //KAB_EMBEDDED ContactListViewItem *plvi = (ContactListViewItem*)(lvi); #endif //KAB_EMBEDDED if (!plvi) return; if (ishidden) { QString s; QRect r = plv->itemRect( lvi ); r.moveBy( posVp.x(), posVp.y() ); //kdDebug() << "Tip rec: " << r.x() << "," << r.y() << "," << r.width() // << "," << r.height() << endl; KABC::Addressee a = plvi->addressee(); if (a.isEmpty()) return; s += i18n("label: value", "%1: %2").arg(a.formattedNameLabel()) .arg(a.formattedName()); s += '\n'; s += i18n("label: value", "%1: %2").arg(a.organizationLabel()) .arg(a.organization()); QString notes = a.note().stripWhiteSpace(); if ( !notes.isEmpty() ) { notes += '\n'; s += '\n' + i18n("label: value", "%1: \n").arg(a.noteLabel()); QFontMetrics fm( font() ); // Begin word wrap code based on QMultiLineEdit code int i = 0; bool doBreak = false; int linew = 0; int lastSpace = -1; int a = 0; int lastw = 0; while ( i < int(notes.length()) ) { doBreak = FALSE; if ( notes[i] != '\n' ) linew += fm.width( notes[i] ); if ( lastSpace >= a && notes[i] != '\n' ) if (linew >= parentWidget()->width()) { doBreak = TRUE; if ( lastSpace > a ) { i = lastSpace; linew = lastw; } else i = QMAX( a, i-1 ); } if ( notes[i] == '\n' || doBreak ) { s += notes.mid( a, i - a + (doBreak?1:0) ) +"\n"; a = i + 1; lastSpace = a; linew = 0; } if ( notes[i].isSpace() ) { lastSpace = i; lastw = linew; } if ( lastSpace <= a ) { lastw = linew; } ++i; } } tip( r, s ); } else hide(); ishidden = !ishidden; - + */ } /////////////////////////// // ContactListViewItem Methods ContactListViewItem::ContactListViewItem(const KABC::Addressee &a, ContactListView *parent, KABC::AddressBook *doc, const KABC::Field::List &fields ) : KListViewItem(parent), mAddressee(a), mFields( fields ), parentListView( parent ), mDocument(doc) { refresh(); } QString ContactListViewItem::key(int column, bool ascending) const { #ifndef DESKTOP_VERSION int lan = KGlobal::locale()->language(); //qDebug("language %d ", lan); if ( lan == 1 ) { //GERMAN - QString ret = QListViewItem::key(column, ascending).lower().utf8(); + QString ret = Q3ListViewItem::key(column, ascending).lower().utf8(); int start = -1; while ( (start = ret.find( 'ä', start+1)) > 0 ) { ret.at(start-1) = 'a'; } start = -1; while ( (start = ret.find( 'ö', start+1)) > 0 ) { ret.at(start-1) = 'o'; } start = -1; while ( (start = ret.find( 'ü', start+1)) > 0 ) { ret.at(start-1) = 'o'; } start = -1; while ( (start = ret.find( 'ß', start+1)) > 0 ) { ret.at(start-1) = 's'; } //qDebug("conv string %s ", ret.latin1()); return ret; } else #endif - return QListViewItem::key(column, ascending).lower(); + return Q3ListViewItem::key(column, ascending).lower(); } void ContactListViewItem::paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align) { KListViewItem::paintCell(p, cg, column, width, align); if ( !p ) return; if (parentListView->singleLine()) { p->setPen( parentListView->alternateColor() ); p->drawLine( 0, height() - 1, width, height() - 1 ); } } ContactListView *ContactListViewItem::parent() { return parentListView; } void ContactListViewItem::refresh() { // Update our addressee, since it may have changed else were mAddressee = mDocument->findByUid(mAddressee.uid()); if (mAddressee.isEmpty()) return; int i = 0; KABC::Field::List::ConstIterator it; for( it = mFields.begin(); it != mFields.end(); ++it ) { setText( i++, (*it)->value( mAddressee ) ); } } /////////////////////////////// // ContactListView ContactListView::ContactListView(KAddressBookTableView *view, KABC::AddressBook* /* doc */, QWidget *parent, const char *name ) : KListView( parent, name ), pabWidget( view ), oldColumn( 0 ) { mFlagBlockKeyPressed = false; mFlagKeyPressed = false; mABackground = true; mSingleLine = false; mToolTips = true; mAlternateColor = KGlobalSettings::alternateBackgroundColor(); setAlternateBackgroundEnabled(mABackground); setAcceptDrops( true ); viewport()->setAcceptDrops( true ); setAllColumnsShowFocus( true ); setShowSortIndicator(true); setSelectionModeExt( KListView::Extended ); setDropVisualizer(false); // setFrameStyle(QFrame::NoFrame); //setLineWidth ( 0 ); //setMidLineWidth ( 0 ); //setMargin ( 0 ); #ifndef KAB_EMBEDDED connect(this, SIGNAL(dropped(QDropEvent*)), this, SLOT(itemDropped(QDropEvent*))); #endif //KAB_EMBEDDED new DynamicTip( this ); } void ContactListView::printMe() { #ifdef DESKTOP_VERSION QPrinter printer; if (!printer.setup() ) return; QPainter p; p.begin ( &printer ); - QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); + Q3PaintDeviceMetrics m = Q3PaintDeviceMetrics ( &printer ); float dx, dy; int wid = (m.width() * 9)/10; dx = (float) wid/(float)contentsWidth (); dy = (float)(m.height()) / (float)contentsHeight (); float scale; // scale to fit the width or height of the paper if ( dx < dy ) scale = dx; else scale = dy; p.translate( m.width()/10,0 ); p.scale( scale, scale ); qDebug("scale %f ", scale); drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); p.end(); qDebug("Why does it not print??? "); #endif } void ContactListView::setAlternateColor(const QColor &m_AlternateColor) { mAlternateColor = m_AlternateColor; } void ContactListView::paintEmptyArea( QPainter * p, const QRect & rect ) { QBrush b = palette().brush(QPalette::Active, QColorGroup::Base); // Get the brush, which will have the background pixmap if there is one. if (b.pixmap()) { p->drawTiledPixmap( rect.left(), rect.top(), rect.width(), rect.height(), *(b.pixmap()), rect.left() + contentsX(), rect.top() + contentsY() ); } else { // Do a normal paint KListView::paintEmptyArea(p, rect); } } void ContactListView::contentsMousePressEvent(QMouseEvent* e) { presspos = e->pos(); KListView::contentsMousePressEvent(e); } // To initiate a drag operation void ContactListView::contentsMouseMoveEvent( QMouseEvent *e ) { - if ((e->state() & LeftButton) && (e->pos() - presspos).manhattanLength() > 4 ) { + if ((e->state() & Qt::LeftButton) && (e->pos() - presspos).manhattanLength() > 4 ) { emit startAddresseeDrag(); } else KListView::contentsMouseMoveEvent( e ); } bool ContactListView::acceptDrag(QDropEvent *e) const { #ifndef KAB_EMBEDDED - return QTextDrag::canDecode(e); + return Q3TextDrag::canDecode(e); #else //KAB_EMBEDDED qDebug("ContactListView::acceptDrag has to be fixed"); return false; #endif //KAB_EMBEDDED } void ContactListView::itemDropped(QDropEvent *e) { contentsDropEvent(e); } void ContactListView::contentsDropEvent( QDropEvent *e ) { emit addresseeDropped(e); } void ContactListView::setAlternateBackgroundEnabled(bool enabled) { mABackground = enabled; if (mABackground) { setAlternateBackground(mAlternateColor); } else { setAlternateBackground(QColor()); } } void ContactListView::setBackgroundPixmap(const QString &filename) { if (filename.isEmpty()) { unsetPalette(); } else { qDebug("ContactListView::setBackgroundPixmap has to be verified"); //US setPaletteBackgroundPixmap(QPixmap(filename)); KListView::setBackgroundPixmap((const QPixmap&)QPixmap(filename)); } } void ContactListView::keyPressEvent ( QKeyEvent * e ) { if ( mFlagBlockKeyPressed ) return; qApp->processEvents(); if ( e->isAutoRepeat() && !mFlagKeyPressed ) { e->accept(); return; } if (! e->isAutoRepeat() ) mFlagKeyPressed = true; KListView::keyPressEvent ( e ); } void ContactListView::keyReleaseEvent ( QKeyEvent * e ) { if ( mFlagBlockKeyPressed ) return; if ( !e->isAutoRepeat() ) { mFlagBlockKeyPressed = true; qApp->processEvents(); mFlagBlockKeyPressed = false; mFlagKeyPressed = false; } KListView::keyReleaseEvent ( e ); } -#ifndef KAB_EMBEDDED -#include "contactlistview.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_contactlistview.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/views/contactlistview.h b/kaddressbook/views/contactlistview.h index 46477e1..c92b002 100644 --- a/kaddressbook/views/contactlistview.h +++ b/kaddressbook/views/contactlistview.h @@ -1,134 +1,138 @@ #ifndef CONTACTLISTVIEW_H #define CONTACTLISTVIEW_H #include <qcolor.h> #include <qpixmap.h> #include <qtooltip.h> #include <qstring.h> +//Added by qt3to4: +#include <QDropEvent> +#include <QMouseEvent> +#include <QKeyEvent> #include <klistview.h> #include <kabc/field.h> #include <kabc/addressee.h> #include <kabc/addressbook.h> class QDropEvent; class KAddressBookTableView; class ContactListView; /** The whole tooltip design needs a lot of work. Currently it is * hacked together to function. */ -class DynamicTip : public QToolTip +class DynamicTip /* TODO:hacker: : public QToolTip */ { public: DynamicTip( ContactListView * parent ); protected: void maybeTip( const QPoint & ); private: }; class ContactListViewItem : public KListViewItem { public: ContactListViewItem(const KABC::Addressee &a, ContactListView* parent, KABC::AddressBook *doc, const KABC::Field::List &fields ); const KABC::Addressee &addressee() const { return mAddressee; } virtual void refresh(); virtual ContactListView* parent(); virtual QString key ( int, bool ) const; /** Adds the border around the cell if the user wants it. * This is how the single line config option is implemented. */ virtual void paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align ); private: KABC::Addressee mAddressee; KABC::Field::List mFields; ContactListView *parentListView; KABC::AddressBook *mDocument; }; ///////////////////////////////////////////// // ContactListView class ContactListView : public KListView { Q_OBJECT public: ContactListView(KAddressBookTableView *view, KABC::AddressBook *doc, QWidget *parent, const char *name = 0L ); virtual ~ContactListView() {} //void resort(); /** Returns true if tooltips should be displayed, false otherwise */ bool tooltips() const { return mToolTips; } void setToolTipsEnabled(bool enabled) { mToolTips = enabled; } bool alternateBackground() const { return mABackground; } void setAlternateBackgroundEnabled(bool enabled); bool singleLine() const { return mSingleLine; } void setSingleLineEnabled(bool enabled) { mSingleLine = enabled; } const QColor &alternateColor() const { return mAlternateColor; } void setAlternateColor(const QColor &mAlternateColor); /** Sets the background pixmap to <i>filename</i>. If the * QString is empty (QString::isEmpty()), then the background * pixmap will be disabled. */ void setBackgroundPixmap(const QString &filename); protected: bool mFlagKeyPressed; bool mFlagBlockKeyPressed; virtual void keyPressEvent ( QKeyEvent * ); virtual void keyReleaseEvent ( QKeyEvent * ); /** Paints the background pixmap in the empty area. This method is needed * since Qt::FixedPixmap will not scroll with the list view. */ virtual void paintEmptyArea( QPainter * p, const QRect & rect ); virtual void contentsMousePressEvent(QMouseEvent*); void contentsMouseMoveEvent( QMouseEvent *e ); void contentsDropEvent( QDropEvent *e ); virtual bool acceptDrag(QDropEvent *e) const; protected slots: void itemDropped(QDropEvent *e); public slots: void printMe(); signals: void startAddresseeDrag(); void addresseeDropped(QDropEvent *); private: KAddressBookTableView *pabWidget; int oldColumn; int column; bool ascending; bool mABackground; bool mSingleLine; bool mToolTips; QColor mAlternateColor; QPoint presspos; }; #endif diff --git a/kaddressbook/views/kaddressbookcardview.cpp b/kaddressbook/views/kaddressbookcardview.cpp index b503652..1e5a556 100644 --- a/kaddressbook/views/kaddressbookcardview.cpp +++ b/kaddressbook/views/kaddressbookcardview.cpp @@ -1,525 +1,530 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ -#include <qdragobject.h> +#include <q3dragobject.h> #include <qevent.h> -#include <qiconview.h> +#include <q3iconview.h> #include <qlayout.h> #include <qstringlist.h> #include <qregexp.h> #include <qapplication.h> +//Added by qt3to4: +#include <QDropEvent> +#include <QKeyEvent> +#include <Q3VBoxLayout> +#include <QDragEnterEvent> #include <kabc/addressbook.h> #include <kabc/addressee.h> #include <kconfig.h> #include <kdebug.h> #include <klocale.h> #include "kabprefs.h" #include "viewmanager.h" #include "kaddressbookcardview.h" #ifndef KAB_EMBEDDED extern "C" { void *init_libkaddrbk_cardview() { return ( new CardViewFactory ); } } #endif //KAB_EMBEDDED //////////////////////////////// // AddresseeCardViewItem (internal class) class AddresseeCardViewItem : public CardViewItem { public: AddresseeCardViewItem(const KABC::Field::List &fields, bool showEmptyFields, KABC::AddressBook *doc, const KABC::Addressee &a, CardView *parent) : CardViewItem(parent, a.realName() ), mFields( fields ), mShowEmptyFields(showEmptyFields), mDocument(doc), mAddressee(a) { if ( mFields.isEmpty() ) { mFields = KABC::Field::defaultFields(); } refresh(); } const KABC::Addressee &addressee() const { return mAddressee; } void refresh() { // Update our addressee, since it may have changed elsewhere mAddressee = mDocument->findByUid(mAddressee.uid()); if (!mAddressee.isEmpty()) { clearFields(); // Try all the selected fields until we find one with text. // This will limit the number of unlabeled icons in the view KABC::Field::List::Iterator iter; for (iter = mFields.begin(); iter != mFields.end(); ++iter) { // insert empty fields or not? not doing so saves a bit of memory and CPU // (during geometry calculations), but prevents having equally // wide label columns in all cards, unless CardViewItem/CardView search // globally for the widest label. (anders) //if (mShowEmptyFields || !(*iter)->value( mAddressee ).isEmpty()) insertField((*iter)->label(), (*iter)->value( mAddressee )); } // We might want to make this the first field. hmm... -mpilone setCaption( mAddressee.realName() ); } } private: KABC::Field::List mFields; bool mShowEmptyFields; KABC::AddressBook *mDocument; KABC::Addressee mAddressee; }; /////////////////////////////// // AddresseeCardView AddresseeCardView::AddresseeCardView(QWidget *parent, const char *name) : CardView(parent, name) { setAcceptDrops(true); } AddresseeCardView::~AddresseeCardView() { } void AddresseeCardView::printMe() { #ifdef DESKTOP_VERSION QPrinter printer; if (!printer.setup() ) return; QPainter p; p.begin ( &printer ); - QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); + Q3PaintDeviceMetrics m = Q3PaintDeviceMetrics ( &printer ); float dx, dy; int wid = (m.width() * 9)/10; dx = (float) wid/(float)contentsWidth (); dy = (float)(m.height()) / (float)contentsHeight (); float scale; // scale to fit the width or height of the paper if ( dx < dy ) scale = dx; else scale = dy; p.translate( m.width()/10,0 ); p.scale( scale, scale ); drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); p.end(); repaint(); #endif } void AddresseeCardView::dragEnterEvent(QDragEnterEvent *e) { #ifndef KAB_EMBEDDED - if (QTextDrag::canDecode(e)) + if (Q3TextDrag::canDecode(e)) e->accept(); #else //KAB_EMBEDDED qDebug("AddresseeCardView::dragEnterEvent drag&drop is not implemented"); #endif //KAB_EMBEDDED } void AddresseeCardView::dropEvent(QDropEvent *e) { emit addresseeDropped(e); } void AddresseeCardView::startDrag() { emit startAddresseeDrag(); } /////////////////////////////// // KAddressBookCardView KAddressBookCardView::KAddressBookCardView( KABC::AddressBook *ab, QWidget *parent, const char *name ) : KAddressBookView( ab, parent, name ) { mShowEmptyFields = false; // Init the GUI - QVBoxLayout *layout = new QVBoxLayout(viewWidget()); + Q3VBoxLayout *layout = new Q3VBoxLayout(viewWidget()); mCardView = new AddresseeCardView(viewWidget(), "mCardView"); mCardView->setSelectionMode(CardView::Extended); layout->addWidget(mCardView); // Connect up the signals connect(mCardView, SIGNAL(executed(CardViewItem *)), this, SLOT(addresseeExecuted(CardViewItem *))); connect(mCardView, SIGNAL(selectionChanged()), this, SLOT(addresseeSelected())); connect(mCardView, SIGNAL(addresseeDropped(QDropEvent*)), this, SIGNAL(dropped(QDropEvent*))); connect(mCardView, SIGNAL(startAddresseeDrag()), this, SIGNAL(startDrag())); connect(this, SIGNAL(printView()), mCardView , SLOT(printMe())); } KAddressBookCardView::~KAddressBookCardView() { } void KAddressBookCardView::setFocusAV() { if ( mCardView ) mCardView->setFocus(); } void KAddressBookCardView::scrollUP() { QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 ); QApplication::postEvent( mCardView, ev ); ev = new QKeyEvent ( QEvent::KeyRelease, Qt::Key_Up, 0,0 ); QApplication::postEvent( mCardView, ev ); } void KAddressBookCardView::scrollDOWN() { QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 ); QApplication::postEvent( mCardView, ev ); ev = new QKeyEvent ( QEvent::KeyRelease, Qt::Key_Down, 0,0 ); QApplication::postEvent( mCardView, ev ); } void KAddressBookCardView::readConfig(KConfig *config) { KAddressBookView::readConfig(config); // costum colors? if ( config->readBoolEntry( "EnableCustomColors", false ) ) { QPalette p( mCardView->palette() ); QColor c = p.color(QPalette::Normal, QColorGroup::Base ); p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::Text ); p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::Button ); p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::ButtonText ); p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::Highlight ); p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); mCardView->viewport()->setPalette( p ); } else { // needed if turned off during a session. mCardView->viewport()->setPalette( mCardView->palette() ); } //custom fonts? QFont f( font() ); if ( config->readBoolEntry( "EnableCustomFonts", false ) ) { mCardView->setFont( config->readFontEntry( "TextFont", &f) ); f.setBold( true ); mCardView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); } else { mCardView->setFont( f ); f.setBold( true ); mCardView->setHeaderFont( f ); } mCardView->setDrawCardBorder(config->readBoolEntry("DrawBorder", true)); mCardView->setDrawColSeparators(config->readBoolEntry("DrawSeparators", true)); mCardView->setDrawFieldLabels(config->readBoolEntry("DrawFieldLabels",false)); mShowEmptyFields = config->readBoolEntry("ShowEmptyFields", false); mCardView->setShowEmptyFields( mShowEmptyFields ); mCardView->setItemWidth( config->readNumEntry( "ItemWidth", 200 ) ); mCardView->setItemMargin( config->readNumEntry( "ItemMargin", 0 ) ); mCardView->setItemSpacing( config->readNumEntry( "ItemSpacing", 10 ) ); mCardView->setSeparatorWidth( config->readNumEntry( "SeparatorWidth", 2 ) ); #if 0 // LR KABPrefs::instance()->mHonorSingleClick is handled and fixed in cardviews contentsMouseDoubleClickEven disconnect(mCardView, SIGNAL(executed(CardViewItem *)), this, SLOT(addresseeExecuted(CardViewItem *))); if (KABPrefs::instance()->mHonorSingleClick) connect(mCardView, SIGNAL(executed(CardViewItem *)), this, SLOT(addresseeExecuted(CardViewItem *))); else connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)), this, SLOT(addresseeExecuted(CardViewItem *))); #endif connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)), this, SLOT(addresseeExecuted(CardViewItem *))); } void KAddressBookCardView::writeConfig( KConfig *config ) { config->writeEntry( "ItemWidth", mCardView->itemWidth() ); KAddressBookView::writeConfig( config ); } void KAddressBookCardView::doSearch( const QString& s,KABC::Field *field ) { mCardView->clear(); if ( s.isEmpty() || s == "*" ) { refresh(); return; } QRegExp re = getRegExp( s ); if (!re.isValid()) return; mCardView->viewport()->setUpdatesEnabled( false ); KABC::Addressee::List addresseeList = addressees(); KABC::Addressee::List::Iterator it; if ( field ) { for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) continue; #if QT_VERSION >= 0x030000 if (re.search(field->value( *it ).lower()) == 0) #else if (re.match(field->value( *it ).lower()) == 0) #endif new AddresseeCardViewItem(fields(), mShowEmptyFields, addressBook(), *it, mCardView); } } else { KABC::Field::List fieldList = allFields(); KABC::Field::List::ConstIterator fieldIt; for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) continue; bool match = false; for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { #if QT_VERSION >= 0x030000 if (re.search((*fieldIt)->value( *it ).lower()) == 0) #else if (re.match((*fieldIt)->value( *it ).lower()) == 0) #endif { new AddresseeCardViewItem(fields(), mShowEmptyFields, addressBook(), *it, mCardView); match = true; break; } } if ( ! match ) { if ( (*it).matchPhoneNumber( &re ) ) { new AddresseeCardViewItem(fields(), mShowEmptyFields, addressBook(), *it, mCardView); match = true; break; } } if ( ! match ) { if ( (*it).matchAddress( &re ) ) { new AddresseeCardViewItem(fields(), mShowEmptyFields, addressBook(), *it, mCardView); match = true; break; } } } } mCardView->viewport()->setUpdatesEnabled( true ); mCardView->viewport()->update(); if ( mCardView->firstItem() ) { mCardView->setCurrentItem ( mCardView->firstItem() ); mCardView->setSelected ( mCardView->firstItem() , true ); } else emit selected(QString::null); } QStringList KAddressBookCardView::selectedUids() { QStringList uidList; CardViewItem *item; AddresseeCardViewItem *aItem; for (item = mCardView->firstItem(); item; item = item->nextItem()) { if (item->isSelected()) { #ifndef KAB_EMBEDDED aItem = dynamic_cast<AddresseeCardViewItem*>(item); #else //KAB_EMBEDDED aItem = (AddresseeCardViewItem*)(item); #endif //KAB_EMBEDDED if (aItem) uidList << aItem->addressee().uid(); } } return uidList; } void KAddressBookCardView::refresh(QString uid) { CardViewItem *item; AddresseeCardViewItem *aItem; if (uid.isNull()) { // Rebuild the view mCardView->viewport()->setUpdatesEnabled( false ); mCardView->clear(); KABC::Addressee::List addresseeList = addressees(); KABC::Addressee::List::Iterator iter; for (iter = addresseeList.begin(); iter != addresseeList.end(); ++iter) { if ( (*iter).uid().left(2) == "la" && (*iter).uid().left(19) == QString("last-syncAddressee-") ) continue; aItem = new AddresseeCardViewItem(fields(), mShowEmptyFields, addressBook(), *iter, mCardView); } mCardView->viewport()->setUpdatesEnabled( true ); mCardView->viewport()->update(); // by default nothing is selected emit selected(QString::null); } else { // Try to find the one to refresh bool found = false; for (item = mCardView->firstItem(); item && !found; item = item->nextItem()) { #ifndef KAB_EMBEDDED aItem = dynamic_cast<AddresseeCardViewItem*>(item); #else //KAB_EMBEDDED aItem = (AddresseeCardViewItem*)(item); #endif //KAB_EMBEDDED if ((aItem) && (aItem->addressee().uid() == uid)) { aItem->refresh(); found = true; } } } } void KAddressBookCardView::setSelected(QString uid, bool selected) { CardViewItem *item; AddresseeCardViewItem *aItem; if (uid.isNull()) { mCardView->selectAll(selected); } else { bool found = false; for (item = mCardView->firstItem(); item && !found; item = item->nextItem()) { #ifndef KAB_EMBEDDED aItem = dynamic_cast<AddresseeCardViewItem*>(item); #else //KAB_EMBEDDED aItem = (AddresseeCardViewItem*)(item); #endif //KAB_EMBEDDED if ((aItem) && (aItem->addressee().uid() == uid)) { mCardView->setSelected(aItem, selected); mCardView->ensureItemVisible(item); found = true; } } } } //US added an additional method without parameter void KAddressBookCardView::setSelected() { setSelected(QString::null, true); } void KAddressBookCardView::addresseeExecuted(CardViewItem *item) { #ifndef KAB_EMBEDDED AddresseeCardViewItem *aItem = dynamic_cast<AddresseeCardViewItem*>(item); #else //KAB_EMBEDDED AddresseeCardViewItem *aItem = (AddresseeCardViewItem*)(item); #endif //KAB_EMBEDDED if (aItem) { //kdDebug()<<"... even has a valid item:)"<<endl; emit executed(aItem->addressee().uid()); } } void KAddressBookCardView::addresseeSelected() { CardViewItem *item; AddresseeCardViewItem *aItem; bool found = false; for (item = mCardView->firstItem(); item && !found; item = item->nextItem()) { if (item->isSelected()) { #ifndef KAB_EMBEDDED aItem = dynamic_cast<AddresseeCardViewItem*>(item); #else //KAB_EMBEDDED aItem = (AddresseeCardViewItem*)(item); #endif //KAB_EMBEDDED if ( aItem ) { emit selected(aItem->addressee().uid()); found = true; } } } if (!found) emit selected(QString::null); } -#ifndef KAB_EMBEDDED -#include "kaddressbookcardview.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_kaddressbookcardview.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/views/kaddressbookcardview.h b/kaddressbook/views/kaddressbookcardview.h index 2a71f7e..8f8e48b 100644 --- a/kaddressbook/views/kaddressbookcardview.h +++ b/kaddressbook/views/kaddressbookcardview.h @@ -1,122 +1,125 @@ #ifndef KADDRESSBOOKCARDVIEW_H #define KADDRESSBOOKCARDVIEW_H /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qstring.h> +//Added by qt3to4: +#include <QDragEnterEvent> +#include <QDropEvent> #ifndef KAB_EMBEDDED #include <kiconview.h> #else //KAB_EMBEDDED #include <klocale.h> #endif //KAB_EMBEDDED #include "cardview.h" #include "kaddressbookview.h" #include "configurecardviewdialog.h" class QDragEnterEvent; class QDragEntryEvent; class QDropEvent; class KConfig; class AddresseeCardView; /** This view uses the CardView class to create a card view. At some point in the future I think this will be the default view of KAddressBook. */ class KAddressBookCardView : public KAddressBookView { Q_OBJECT public: KAddressBookCardView( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ); virtual ~KAddressBookCardView(); void doSearch( const QString& s,KABC::Field *field ); virtual QStringList selectedUids(); virtual QString type() const { return "Card"; } virtual void readConfig(KConfig *config); virtual void writeConfig(KConfig *); virtual void scrollUP(); virtual void scrollDOWN(); virtual void setFocusAV(); public slots: void refresh(QString uid = QString::null); void setSelected(QString uid/*US = QString::null*/, bool selected/*US = true*/); //US added an additional method without parameter void setSelected(); protected slots: void addresseeExecuted(CardViewItem *item); void addresseeSelected(); private: AddresseeCardView *mCardView; bool mShowEmptyFields; }; class AddresseeCardView : public CardView { Q_OBJECT public: AddresseeCardView(QWidget *parent, const char *name = 0); ~AddresseeCardView(); public slots: void printMe(); signals: void startAddresseeDrag(); void addresseeDropped(QDropEvent *); protected: virtual void dragEnterEvent(QDragEnterEvent *); virtual void dropEvent(QDropEvent *); virtual void startDrag(); }; class CardViewFactory : public ViewFactory { public: KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) { return new KAddressBookCardView( ab, parent, name ); } QString type() const { return "Card"; } QString description() const { return i18n( "Rolodex style cards represent contacts." ); } ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ) { return new ConfigureCardViewWidget( ab, parent, name ); } }; #endif diff --git a/kaddressbook/views/kaddressbookiconview.cpp b/kaddressbook/views/kaddressbookiconview.cpp index d6ddec3..3a41a4b 100644 --- a/kaddressbook/views/kaddressbookiconview.cpp +++ b/kaddressbook/views/kaddressbookiconview.cpp @@ -1,481 +1,489 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KAB_EMBEDDED -#include <qiconview.h> +#include <q3iconview.h> #include <qstringlist.h> #include <kabc/addressee.h> #include <kconfig.h> #include <kdebug.h> #include <kglobal.h> #include <kiconloader.h> #include <klocale.h> #else //KAB_EMBEDDED #endif //KAB_EMBEDDED +//Added by qt3to4: +#include <QDropEvent> +#include <Q3ValueList> +#include <QPixmap> +#include <QKeyEvent> +#include <QEvent> +#include <Q3VBoxLayout> + #include <kabc/addressbook.h> #include "kabprefs.h" #include "viewmanager.h" #include "kaddressbookiconview.h" #include <qlayout.h> #include <qregexp.h> #include <qapplication.h> #include <kglobal.h> /*US transfered to the headerfile class IconViewFactory : public ViewFactory { public: KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) { return new KAddressBookIconView( ab, parent, name ); } QString type() const { return "Icon"; } QString description() const { return i18n( "Icons represent contacts. Very simple view." ); } }; */ extern "C" { void *init_libkaddrbk_iconview() { return ( new IconViewFactory ); } } //////////////////////////////// // AddresseeIconView (internal class) #ifndef KAB_EMBEDDED AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name) : KIconView(parent, name) #else //KAB_EMBEDDED AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name) - : QIconView(parent, name) + : Q3IconView(parent, name) #endif //KAB_EMBEDDED { - setSelectionMode( QIconView::Extended ); - setResizeMode( QIconView::Adjust ); + setSelectionMode( Q3IconView::Extended ); + setResizeMode( Q3IconView::Adjust ); setWordWrapIconText( true ); setGridX( 100 ); setItemsMovable(false); setSorting(true, true); //US ??? setMode( KIconView::Select ); #ifndef KAB_EMBEDDED - connect(this, SIGNAL(dropped(QDropEvent*, const QValueList<QIconDragItem>&)), - this, SLOT(itemDropped(QDropEvent*, const QValueList<QIconDragItem>&))); + connect(this, SIGNAL(dropped(QDropEvent*, const Q3ValueList<Q3IconDragItem>&)), + this, SLOT(itemDropped(QDropEvent*, const Q3ValueList<Q3IconDragItem>&))); #endif //KAB_EMBEDDED } AddresseeIconView::~AddresseeIconView() { } void AddresseeIconView::itemDropped(QDropEvent *e, - const QValueList<QIconDragItem> &) + const Q3ValueList<Q3IconDragItem> &) { emit addresseeDropped(e); } -QDragObject *AddresseeIconView::dragObject() +Q3DragObject *AddresseeIconView::dragObject() { emit startAddresseeDrag(); // We never want IconView to start the drag return 0; } //////////////////////////////// // AddresseeIconViewItem (internal class) #ifndef KAB_EMBEDDED class AddresseeIconViewItem : public KIconViewItem #else //KAB_EMBEDDED -class AddresseeIconViewItem : public QIconViewItem +class AddresseeIconViewItem : public Q3IconViewItem #endif //KAB_EMBEDDED { public: #ifndef KAB_EMBEDDED AddresseeIconViewItem(const KABC::Field::List &fields, KABC::AddressBook *doc, const KABC::Addressee &a, - QIconView *parent) + Q3IconView *parent) : KIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) #else //KAB_EMBEDDED AddresseeIconViewItem(const KABC::Field::List &fields, KABC::AddressBook *doc, const KABC::Addressee &a, - QIconView *parent) - : QIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) + Q3IconView *parent) + : Q3IconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) #endif //KAB_EMBEDDED { if ( mFields.isEmpty() ) { mFields = KABC::Field::defaultFields(); } refresh(); } const KABC::Addressee &addressee() const { return mAddressee; } void refresh() { // Update our addressee, since it may have changed elsewhere mAddressee = mDocument->findByUid(mAddressee.uid()); if (!mAddressee.isEmpty()) setText( mAddressee.givenName() + " " + mAddressee.familyName() ); QPixmap icon; KABC::Picture pic = mAddressee.photo(); if ( pic.data().isNull() ) pic = mAddressee.logo(); if ( pic.isIntern() && !pic.data().isNull() ) { QImage img = pic.data(); #ifndef KAB_EMBEDDED if ( img.width() > img.height() ) icon = img.scaleWidth( 32 ); else icon = img.scaleHeight( 32 ); #else //KAB_EMBEDDED int wid = pic.data().width(); int hei = pic.data().height(); int max = 48; if ( wid > max || hei > max ) { if ( wid > hei ) { hei = (hei*max)/wid; wid = max; } else { wid = (wid*max)/hei; hei = max; } } qDebug("AddresseeIconViewItem::refresh - scale here dependend of the displaysize and the right factor"); icon.convertFromImage(img.smoothScale(wid, hei)); #endif //KAB_EMBEDDED } else { icon = KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop, 128 ); } setPixmap( icon ); } private: KABC::Field::List mFields; KABC::AddressBook *mDocument; KABC::Addressee mAddressee; }; /////////////////////////////// // KAddressBookView KAddressBookIconView::KAddressBookIconView( KABC::AddressBook *ab, QWidget *parent, const char *name) : KAddressBookView( ab, parent, name ) { // Init the GUI - QVBoxLayout *layout = new QVBoxLayout(viewWidget()); + Q3VBoxLayout *layout = new Q3VBoxLayout(viewWidget()); mIconView = new AddresseeIconView(viewWidget(), "mIconView"); layout->addWidget(mIconView); // Connect up the signals //US method executed is part of KIconView //US connect(mIconView, SIGNAL(executed(QIconViewItem *)), //US this, SLOT(addresseeExecuted(QIconViewItem *))); - connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), - this, SLOT(addresseeExecuted(QIconViewItem *))); + connect(mIconView, SIGNAL(selectionChanged(Q3IconViewItem *)), + this, SLOT(addresseeExecuted(Q3IconViewItem *))); connect(mIconView, SIGNAL(selectionChanged()), this, SLOT(addresseeSelected())); connect(mIconView, SIGNAL(addresseeDropped(QDropEvent*)), this, SIGNAL(dropped(QDropEvent*))); connect(mIconView, SIGNAL(startAddresseeDrag()), this, SIGNAL(startDrag())); } KAddressBookIconView::~KAddressBookIconView() { } void KAddressBookIconView::setFocusAV() { if ( mIconView ) mIconView->setFocus(); } void KAddressBookIconView::scrollUP() { QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 ); QApplication::postEvent( mIconView, ev ); } void KAddressBookIconView::scrollDOWN() { QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 ); QApplication::postEvent( mIconView, ev ); } void KAddressBookIconView::readConfig(KConfig *config) { KAddressBookView::readConfig(config); //US method executed is part of KIconView //US disconnect(mIconView, SIGNAL(executed(QIconViewItem *)), //US this, SLOT(addresseeExecuted(QIconViewItem *))); - disconnect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), - this, SLOT(addresseeExecuted(QIconViewItem *))); + disconnect(mIconView, SIGNAL(selectionChanged(Q3IconViewItem *)), + this, SLOT(addresseeExecuted(Q3IconViewItem *))); //US method executed is part of KIconView. Use selectionChanged instead /*US if (KABPrefs::instance()->mHonorSingleClick) connect(mIconView, SIGNAL(executed(QIconViewItem *)), this, SLOT(addresseeExecuted(QIconViewItem *))); else connect(mIconView, SIGNAL(doubleClicked(QIconViewItem *)), this, SLOT(addresseeExecuted(QIconViewItem *))); */ - connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), - this, SLOT(addresseeExecuted(QIconViewItem *))); + connect(mIconView, SIGNAL(selectionChanged(Q3IconViewItem *)), + this, SLOT(addresseeExecuted(Q3IconViewItem *))); } void KAddressBookIconView::doSearch( const QString& s ,KABC::Field *field ) { mIconView->clear(); mIconList.clear(); if ( s.isEmpty() || s == "*" ) { refresh(); return; } QRegExp re = getRegExp( s ); if (!re.isValid()) return; KABC::Addressee::List addresseeList = addressees(); KABC::Addressee::List::Iterator it; if ( field ) { for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) continue; #if QT_VERSION >= 0x030000 if (re.search(field->value( *it ).lower()) == 0) #else if (re.match(field->value( *it ).lower()) == 0) #endif mIconList.append(new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); } } else { KABC::Field::List fieldList = allFields(); KABC::Field::List::ConstIterator fieldIt; for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) continue; bool match = false; for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { #if QT_VERSION >= 0x030000 if (re.search((*fieldIt)->value( *it ).lower()) == 0) #else if (re.match((*fieldIt)->value( *it ).lower()) == 0) #endif { mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); match = true; break; } } if ( ! match ) { if ( (*it).matchPhoneNumber( &re ) ) { mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); match = true; break; } } if ( ! match ) { if ( (*it).matchAddress( &re ) ) { mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); match = true; break; } } } } mIconView->arrangeItemsInGrid( true ); if ( mIconView->firstItem() ) { mIconView->setCurrentItem ( mIconView->firstItem() ); mIconView->setSelected ( mIconView->firstItem() , true ); } else emit selected(QString::null); } QStringList KAddressBookIconView::selectedUids() { QStringList uidList; - QIconViewItem *item; + Q3IconViewItem *item; AddresseeIconViewItem *aItem; for (item = mIconView->firstItem(); item; item = item->nextItem()) { if (item->isSelected()) { #ifndef KAB_EMBEDDED aItem = dynamic_cast<AddresseeIconViewItem*>(item); #else //KAB_EMBEDDED aItem = (AddresseeIconViewItem*)(item); #endif //KAB_EMBEDDED if (aItem) uidList << aItem->addressee().uid(); } } return uidList; } void KAddressBookIconView::refresh(QString uid) { - QIconViewItem *item; + Q3IconViewItem *item; AddresseeIconViewItem *aItem; if ( uid.isNull() ) { // Rebuild the view mIconView->clear(); mIconList.clear(); KABC::Addressee::List addresseeList = addressees(); KABC::Addressee::List::Iterator iter; for ( iter = addresseeList.begin(); iter != addresseeList.end(); ++iter ) { if ( (*iter).uid().left(2) == "la" && (*iter).uid().left(19) == QString("last-syncAddressee-") ) continue; aItem = new AddresseeIconViewItem( fields(), addressBook(), *iter, mIconView ); } mIconView->arrangeItemsInGrid( true ); for ( item = mIconView->firstItem(); item; item = item->nextItem() ) { #ifndef KAB_EMBEDDED AddresseeIconViewItem* aivi = dynamic_cast<AddresseeIconViewItem*>( item ); #else //KAB_EMBEDDED AddresseeIconViewItem* aivi = (AddresseeIconViewItem*)( item ); #endif //KAB_EMBEDDED mIconList.append( aivi ); } } else { // Try to find the one to refresh for ( item = mIconView->firstItem(); item; item = item->nextItem() ) { #ifndef KAB_EMBEDDED aItem = dynamic_cast<AddresseeIconViewItem*>(item); #else //KAB_EMBEDDED aItem = (AddresseeIconViewItem*)(item); #endif //KAB_EMBEDDED if ((aItem) && (aItem->addressee().uid() == uid)) { aItem->refresh(); mIconView->arrangeItemsInGrid( true ); return; } } refresh( QString::null ); } } void KAddressBookIconView::setSelected(QString uid, bool selected) { - QIconViewItem *item; + Q3IconViewItem *item; AddresseeIconViewItem *aItem; if (uid.isNull()) { mIconView->selectAll(selected); } else { bool found = false; for (item = mIconView->firstItem(); item && !found; item = item->nextItem()) { #ifndef KAB_EMBEDDED aItem = dynamic_cast<AddresseeIconViewItem*>(item); #else //KAB_EMBEDDED aItem = (AddresseeIconViewItem*)(item); #endif //KAB_EMBEDDED if ((aItem) && (aItem->addressee().uid() == uid)) { mIconView->setSelected(aItem, selected); mIconView->ensureItemVisible( aItem ); found = true; } } } } -void KAddressBookIconView::addresseeExecuted(QIconViewItem *item) +void KAddressBookIconView::addresseeExecuted(Q3IconViewItem *item) { #ifndef KAB_EMBEDDED AddresseeIconViewItem *aItem = dynamic_cast<AddresseeIconViewItem*>(item); #else //KAB_EMBEDDED AddresseeIconViewItem *aItem = (AddresseeIconViewItem*)(item); #endif //KAB_EMBEDDED if (aItem) { emit executed(aItem->addressee().uid()); } } void KAddressBookIconView::addresseeSelected() { - QIconViewItem *item; + Q3IconViewItem *item; AddresseeIconViewItem *aItem; bool found = false; for (item = mIconView->firstItem(); item && !found; item = item->nextItem()) { if (item->isSelected()) { #ifndef KAB_EMBEDDED aItem = dynamic_cast<AddresseeIconViewItem*>(item); #else //KAB_EMBEDDED aItem = (AddresseeIconViewItem*)(item); #endif //KAB_EMBEDDED if (aItem) { emit selected(aItem->addressee().uid()); found = true; } } } if (!found) emit selected(QString::null); } -#ifndef KAB_EMBEDDED -#include "kaddressbookiconview.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_kaddressbookiconview.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/views/kaddressbookiconview.h b/kaddressbook/views/kaddressbookiconview.h index b0b9fea..6fad4c6 100644 --- a/kaddressbook/views/kaddressbookiconview.h +++ b/kaddressbook/views/kaddressbookiconview.h @@ -1,134 +1,137 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef KADDRESSBOOKICONVIEW_H #define KADDRESSBOOKICONVIEW_H #include <qstring.h> +//Added by qt3to4: +#include <Q3ValueList> +#include <QDropEvent> #ifndef KAB_EMBEDDED #include <kiconview.h> #else //KAB_EMBEDDED -#include <qiconview.h> -#include <qptrlist.h> +#include <q3iconview.h> +#include <q3ptrlist.h> #include <klocale.h> #endif //KAB_EMBEDDED #include "kaddressbookview.h" -class QIconViewItem; +class Q3IconViewItem; class KConfig; class AddresseeIconView; class AddresseeIconViewItem; -class QIconDragItem; +class Q3IconDragItem; class KAddressBookIconView; namespace KABC { class AddressBook; } /** This is an example kaddressbook view that is implemented using * KIconView. This view is not the most useful view, but it displays * how simple implementing a new view can be. */ class KAddressBookIconView : public KAddressBookView { Q_OBJECT public: KAddressBookIconView( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ); virtual ~KAddressBookIconView(); virtual QStringList selectedUids(); virtual QString type() const { return "Icon"; } void doSearch( const QString& s ,KABC::Field *field ); virtual void readConfig(KConfig *config); virtual void scrollUP(); virtual void scrollDOWN(); virtual void setFocusAV(); public slots: void refresh(QString uid = QString::null); #ifndef KAB_EMBEDDED -//MOC_SKIP_BEGIN +#ifndef Q_MOC_RUN void setSelected(QString uid = QString::null, bool selected = true); -//MOC_SKIP_END +#endif #else //KAB_EMBEDDED //US my MOC do not like default parameters ??? void setSelected(QString uid, bool selected); #endif //KAB_EMBEDDED protected slots: - void addresseeExecuted(QIconViewItem *item); + void addresseeExecuted(Q3IconViewItem *item); void addresseeSelected(); private: AddresseeIconView *mIconView; - QPtrList<AddresseeIconViewItem> mIconList; + Q3PtrList<AddresseeIconViewItem> mIconList; }; #ifndef KAB_EMBEDDED -//MOC_SKIP_BEGIN +#ifndef Q_MOC_RUN class AddresseeIconView : public KIconView -//MOC_SKIP_END +#endif #else //KAB_EMBEDDED -class AddresseeIconView : public QIconView +class AddresseeIconView : public Q3IconView #endif //KAB_EMBEDDED { Q_OBJECT public: AddresseeIconView(QWidget *parent, const char *name); ~AddresseeIconView(); signals: void addresseeDropped(QDropEvent *); void startAddresseeDrag(); protected: - virtual QDragObject *dragObject(); + virtual Q3DragObject *dragObject(); protected slots: - void itemDropped(QDropEvent *, const QValueList<QIconDragItem> &); + void itemDropped(QDropEvent *, const Q3ValueList<Q3IconDragItem> &); }; class IconViewFactory : public ViewFactory { public: KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) { return new KAddressBookIconView( ab, parent, name ); } QString type() const { return "Icon"; } QString description() const { return i18n( "Icons represent contacts. Very simple view." ); } }; /* extern "C" { void *init_libkaddrbk_iconview() { return ( new IconViewFactory ); } } */ #endif diff --git a/kaddressbook/views/kaddressbooktableview.cpp b/kaddressbook/views/kaddressbooktableview.cpp index 272f2eb..7efaaa9 100644 --- a/kaddressbook/views/kaddressbooktableview.cpp +++ b/kaddressbook/views/kaddressbooktableview.cpp @@ -1,492 +1,496 @@ // $Id$ -#include <qvbox.h> -#include <qlistbox.h> +#include <q3vbox.h> +#include <q3listbox.h> #include <qwidget.h> #include <qfile.h> #include <qimage.h> #include <qcombobox.h> #include <qapplication.h> -#include <qdragobject.h> +#include <q3dragobject.h> #include <qevent.h> -#include <qurl.h> +#include <q3url.h> #include <qpixmap.h> +//Added by qt3to4: +#include <QDropEvent> +#include <QKeyEvent> +#include <Q3VBoxLayout> #include <kabc/addressbook.h> #include <kapplication.h> #include <kconfig.h> #include <kcolorbutton.h> #include <kdebug.h> #include <kglobal.h> #include <kiconloader.h> #include <klineedit.h> #include <klocale.h> #include <kmessagebox.h> #include <kurl.h> #include <kurlrequester.h> //US#include "configuretableviewdialog.h" #include "contactlistview.h" #include "kabprefs.h" #include "undocmds.h" #include "viewmanager.h" #include <qlayout.h> -#include <qheader.h> +#include <q3header.h> #include <qregexp.h> #include "kaddressbooktableview.h" KAddressBookTableView::KAddressBookTableView( KABC::AddressBook *ab, QWidget *parent, const char *name ) : KAddressBookView( ab, parent, name ) { - mainLayout = new QVBoxLayout( viewWidget(), 2 ); + mainLayout = new Q3VBoxLayout( viewWidget(), 2 ); // The list view will be created when the config is read. mListView = 0; } KAddressBookTableView::~KAddressBookTableView() { } void KAddressBookTableView::setFocusAV() { if ( mListView ) mListView->setFocus(); } void KAddressBookTableView::scrollUP() { QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 ); QApplication::postEvent( mListView, ev ); ev = new QKeyEvent ( QEvent::KeyRelease, Qt::Key_Up, 0,0 ); QApplication::postEvent( mListView, ev ); } void KAddressBookTableView::scrollDOWN() { QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 ); QApplication::postEvent( mListView, ev ); ev = new QKeyEvent ( QEvent::KeyRelease, Qt::Key_Down, 0,0 ); QApplication::postEvent( mListView, ev ); } void KAddressBookTableView::reconstructListView() { if (mListView) { disconnect(mListView, SIGNAL(selectionChanged()), this, SLOT(addresseeSelected())); - disconnect(mListView, SIGNAL(executed(QListViewItem*)), - this, SLOT(addresseeExecuted(QListViewItem*))); - disconnect(mListView, SIGNAL(doubleClicked(QListViewItem*)), - this, SLOT(addresseeExecuted(QListViewItem*))); + disconnect(mListView, SIGNAL(executed(Q3ListViewItem*)), + this, SLOT(addresseeExecuted(Q3ListViewItem*))); + disconnect(mListView, SIGNAL(doubleClicked(Q3ListViewItem*)), + this, SLOT(addresseeExecuted(Q3ListViewItem*))); disconnect(mListView, SIGNAL(startAddresseeDrag()), this, SIGNAL(startDrag())); - disconnect(mListView, SIGNAL(returnPressed(QListViewItem*)), - this, SLOT(addresseeExecuted(QListViewItem*))); + disconnect(mListView, SIGNAL(returnPressed(Q3ListViewItem*)), + this, SLOT(addresseeExecuted(Q3ListViewItem*))); disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, SIGNAL(dropped(QDropEvent*))); delete mListView; } mListView = new ContactListView( this, addressBook(), viewWidget() ); connect(this, SIGNAL(printView()), mListView , SLOT(printMe())); //US set singleClick manually, because it is no global configparameter in embedded space mListView->setSingleClick(KABPrefs::instance()->mHonorSingleClick); // Add the columns KABC::Field::List fieldList = fields(); KABC::Field::List::ConstIterator it; int c = 0; for( it = fieldList.begin(); it != fieldList.end(); ++it ) { mListView->addColumn( (*it)->label() ); - mListView->setColumnWidthMode(c++, QListView::Manual); + mListView->setColumnWidthMode(c++, Q3ListView::Manual); //US // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1()); } connect(mListView, SIGNAL(selectionChanged()), this, SLOT(addresseeSelected())); connect(mListView, SIGNAL(startAddresseeDrag()), this, SIGNAL(startDrag())); connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, SIGNAL(dropped(QDropEvent*))); if (KABPrefs::instance()->mHonorSingleClick) { // qDebug("KAddressBookTableView::reconstructListView single"); - connect(mListView, SIGNAL(executed(QListViewItem*)), - this, SLOT(addresseeExecuted(QListViewItem*))); + connect(mListView, SIGNAL(executed(Q3ListViewItem*)), + this, SLOT(addresseeExecuted(Q3ListViewItem*))); } else { // qDebug("KAddressBookTableView::reconstructListView double"); - connect(mListView, SIGNAL(doubleClicked(QListViewItem*)), - this, SLOT(addresseeExecuted(QListViewItem*))); + connect(mListView, SIGNAL(doubleClicked(Q3ListViewItem*)), + this, SLOT(addresseeExecuted(Q3ListViewItem*))); } - connect(mListView, SIGNAL(returnPressed(QListViewItem*)), - this, SLOT(addresseeExecuted(QListViewItem*))); + connect(mListView, SIGNAL(returnPressed(Q3ListViewItem*)), + this, SLOT(addresseeExecuted(Q3ListViewItem*))); connect(mListView, SIGNAL(signalDelete()), this, SLOT(addresseeDeleted())); //US performceimprovement. Refresh is done from the outside //US refresh(); mListView->setSorting( 0, true ); mainLayout->addWidget( mListView ); mainLayout->activate(); mListView->show(); } void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field ) { mListView->clear(); if ( s.isEmpty() || s == "*" ) { refresh(); return; } QRegExp re = getRegExp( s ); if (!re.isValid()) return; KABC::Addressee::List addresseeList = addressees(); KABC::Addressee::List::Iterator it; if ( field ) { for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) continue; #if QT_VERSION >= 0x030000 if (re.search(field->value( *it ).lower()) == 0) #else if (re.match(field->value( *it ).lower()) == 0) #endif ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); } } else { KABC::Field::List fieldList = allFields(); KABC::Field::List::ConstIterator fieldIt; for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) continue; bool match = false; for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { #if QT_VERSION >= 0x030000 if (re.search((*fieldIt)->value( *it ).lower()) == 0) #else if (re.match((*fieldIt)->value( *it ).lower()) == 0) #endif { //qDebug("match %s %s %s", pattern.latin1(), (*fieldIt)->value( *it ).latin1(), (*fieldIt)->label().latin1() ); ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); match = true; break; } } if ( ! match ) { if ( (*it).matchPhoneNumber( &re ) ) { ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); match = true; break; } } if ( ! match ) { if ( (*it).matchAddress( &re ) ) { ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); match = true; break; } } } } // Sometimes the background pixmap gets messed up when we add lots // of items. //mListView->repaint(); if ( mListView->firstChild() ) { mListView->setCurrentItem ( mListView->firstChild() ); mListView->setSelected ( mListView->firstChild(), true ); } else emit selected(QString::null); } void KAddressBookTableView::writeConfig(KConfig *config) { KAddressBookView::writeConfig(config); mListView->saveLayout(config, config->group()); } void KAddressBookTableView::readConfig(KConfig *config) { KAddressBookView::readConfig( config ); // The config could have changed the fields, so we need to reconstruct // the listview. reconstructListView(); // costum colors? if ( config->readBoolEntry( "EnableCustomColors", false ) ) { QPalette p( mListView->palette() ); QColor c = p.color(QPalette::Normal, QColorGroup::Base ); p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::Text ); p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::Button ); p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::ButtonText ); p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::Highlight ); p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); #ifndef KAB_EMBEDDED c = KGlobalSettings::alternateBackgroundColor(); #else //KAB_EMBEDDED c = QColor(240, 240, 240); #endif //KAB_EMBEDDED c = config->readColorEntry ("AlternatingBackgroundColor", &c); mListView->setAlternateColor(c); //US mListView->viewport()->setPalette( p ); mListView->setPalette( p ); } else { // needed if turned off during a session. //US mListView->viewport()->setPalette( mListView->palette() ); mListView->setPalette( mListView->palette() ); } //custom fonts? QFont f( font() ); if ( config->readBoolEntry( "EnableCustomFonts", false ) ) { mListView->setFont( config->readFontEntry( "TextFont", &f) ); f.setBold( true ); //US mListView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); mListView->header()->setFont( config->readFontEntry( "HeaderFont", &f ) ); } else { mListView->setFont( f ); f.setBold( true ); //US mListView->setHeaderFont( f ); mListView->header()->setFont( f ); } // Set the list view options mListView->setAlternateBackgroundEnabled(config->readBoolEntry("ABackground", true)); mListView->setSingleLineEnabled(config->readBoolEntry("SingleLine", false)); mListView->setToolTipsEnabled(config->readBoolEntry("ToolTips", true)); if (config->readBoolEntry("Background", false)) mListView->setBackgroundPixmap(config->readEntry("BackgroundName")); // Restore the layout of the listview mListView->restoreLayout(config, config->group()); } void KAddressBookTableView::refresh(QString uid) { // For now just repopulate. In reality this method should // check the value of uid, and if valid iterate through // the listview to find the entry, then tell it to refresh. if (uid.isNull()) { // Clear the list view QString currentUID, nextUID; #ifndef KAB_EMBEDDED ContactListViewItem *currentItem = dynamic_cast<ContactListViewItem*>( mListView->currentItem() ); #else //KAB_EMBEDDED ContactListViewItem *currentItem = (ContactListViewItem*)( mListView->currentItem() ); #endif //KAB_EMBEDDED if ( currentItem ) { #ifndef KAB_EMBEDDED ContactListViewItem *nextItem = dynamic_cast<ContactListViewItem*>( currentItem->itemBelow() ); #else //KAB_EMBEDDED ContactListViewItem *nextItem = (ContactListViewItem*)( currentItem->itemBelow() ); #endif //KAB_EMBEDDED if ( nextItem ) nextUID = nextItem->addressee().uid(); currentUID = currentItem->addressee().uid(); } mListView->clear(); currentItem = 0; KABC::Addressee::List addresseeList = addressees(); KABC::Addressee::List::Iterator it; for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) continue; ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); if ( (*it).uid() == currentUID ) currentItem = item; else if ( (*it).uid() == nextUID && !currentItem ) currentItem = item; } // Sometimes the background pixmap gets messed up when we add lots // of items. mListView->repaint(); if ( !currentItem ) currentItem = (ContactListViewItem *)mListView->firstChild(); if ( currentItem ) { mListView->setCurrentItem( currentItem ); mListView->ensureItemVisible( currentItem ); mListView->setSelected( currentItem, true ); } } else { // Only need to update on entry. Iterate through and try to find it ContactListViewItem *ceItem; - QListViewItemIterator it( mListView ); + Q3ListViewItemIterator it( mListView ); while ( it.current() ) { #ifndef KAB_EMBEDDED ceItem = dynamic_cast<ContactListViewItem*>( it.current() ); #else //KAB_EMBEDDED ceItem = (ContactListViewItem*)( it.current() ); #endif //KAB_EMBEDDED if ( ceItem && ceItem->addressee().uid() == uid ) { ceItem->refresh(); return; } ++it; } refresh( QString::null ); } } QStringList KAddressBookTableView::selectedUids() { QStringList uidList; - QListViewItem *item; + Q3ListViewItem *item; ContactListViewItem *ceItem; for(item = mListView->firstChild(); item; item = item->itemBelow()) { if (mListView->isSelected( item )) { #ifndef KAB_EMBEDDED ceItem = dynamic_cast<ContactListViewItem*>(item); #else //KAB_EMBEDDED ceItem = (ContactListViewItem*)(item); #endif //KAB_EMBEDDED if (ceItem != 0L) uidList << ceItem->addressee().uid(); } } if ( uidList.count() == 0 ) if ( mListView->currentItem() ) { ceItem = (ContactListViewItem*)(mListView->currentItem()) ; uidList << ceItem->addressee().uid(); } return uidList; } void KAddressBookTableView::setSelected(QString uid, bool selected) { - QListViewItem *item; + Q3ListViewItem *item; ContactListViewItem *ceItem; if (uid.isNull()) { mListView->selectAll(selected); } else { for(item = mListView->firstChild(); item; item = item->itemBelow()) { #ifndef KAB_EMBEDDED ceItem = dynamic_cast<ContactListViewItem*>(item); #else //KAB_EMBEDDED ceItem = (ContactListViewItem*)(item); #endif //KAB_EMBEDDED if ((ceItem != 0L) && (ceItem->addressee().uid() == uid)) { mListView->setSelected(item, selected); if (selected) mListView->ensureItemVisible(item); } } } } void KAddressBookTableView::addresseeSelected() { // We need to try to find the first selected item. This might not be the // last selected item, but when QListView is in multiselection mode, // there is no way to figure out which one was // selected last. - QListViewItem *item; + Q3ListViewItem *item; bool found =false; for (item = mListView->firstChild(); item && !found; item = item->nextSibling()) { if (item->isSelected()) { found = true; #ifndef KAB_EMBEDDED ContactListViewItem *ceItem = dynamic_cast<ContactListViewItem*>(item); #else //KAB_EMBEDDED ContactListViewItem *ceItem = (ContactListViewItem*)(item); #endif //KAB_EMBEDDED if ( ceItem ) emit selected(ceItem->addressee().uid()); } } if (!found) emit selected(QString::null); } -void KAddressBookTableView::addresseeExecuted(QListViewItem *item) +void KAddressBookTableView::addresseeExecuted(Q3ListViewItem *item) { if (item) { #ifndef KAB_EMBEDDED ContactListViewItem *ceItem = dynamic_cast<ContactListViewItem*>(item); #else //KAB_EMBEDDED ContactListViewItem *ceItem = (ContactListViewItem*)(item); #endif //KAB_EMBEDDED if (ceItem) { emit executed(ceItem->addressee().uid()); } } else { emit executed(QString::null); } } void KAddressBookTableView::addresseeDeleted() { emit deleteRequest(); } -#ifndef KAB_EMBEDDED -#include "kaddressbooktableview.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_kaddressbooktableview.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/views/kaddressbooktableview.h b/kaddressbook/views/kaddressbooktableview.h index 38db7b4..c3cb038 100644 --- a/kaddressbook/views/kaddressbooktableview.h +++ b/kaddressbook/views/kaddressbooktableview.h @@ -1,118 +1,120 @@ #ifndef KADDRESSBOOKTABLEVIEW_H #define KADDRESSBOOKTABLEVIEW_H #ifndef KAB_EMBEDDED #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <qwidget.h> -#include <qlistview.h> +#include <q3listview.h> #include <qstring.h> #include <qdialog.h> -#include <qtabdialog.h> +#include <q3tabdialog.h> #include <qstringlist.h> -#include <qvaluelist.h> +#include <q3valuelist.h> #include "undo.h" #else //KAB_EMBEDDED #include "views/configuretableviewdialog.h" #endif //KAB_EMBEDDED #include "klocale.h" #include "kaddressbookview.h" +//Added by qt3to4: +#include <Q3VBoxLayout> -class QListViewItem; -class QListBox; -class QVBoxLayout; +class Q3ListViewItem; +class Q3ListBox; +class Q3VBoxLayout; class KConfig; class ContactListViewItem; class ContactListView; namespace KABC { class AddressBook; } /** * This class is the table view for kaddressbook. This view is a KListView * with multiple columns for the selected fields. * * @short Table View * @author Don Sanders <dsanders@kde.org> * @version 0.1 */ class KAddressBookTableView : public KAddressBookView { friend class ContactListView; Q_OBJECT public: KAddressBookTableView( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ); virtual ~KAddressBookTableView(); virtual void refresh(QString uid = QString::null); virtual QStringList selectedUids(); virtual void setSelected(QString uid = QString::null, bool selected = false); virtual void readConfig(KConfig *config); virtual void writeConfig(KConfig *config); virtual QString type() const { return "Table"; } void doSearch( const QString& s ,KABC::Field *field ); virtual void scrollUP(); virtual void scrollDOWN(); virtual void setFocusAV(); public slots: virtual void reconstructListView(); protected slots: /** Called whenever the user selects an addressee in the list view. */ void addresseeSelected(); void addresseeDeleted(); /** Called whenever the user executes an addressee. In terms of the * list view, this is probably a double click */ - void addresseeExecuted(QListViewItem*); + void addresseeExecuted(Q3ListViewItem*); private: - QVBoxLayout *mainLayout; + Q3VBoxLayout *mainLayout; ContactListView *mListView; }; class TableViewFactory : public ViewFactory { public: KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) { return new KAddressBookTableView( ab, parent, name ); } QString type() const { return "Table"; } QString description() const { return i18n( "A listing of contacts in a table. Each cell of " "the table holds a field of the contact." ); } ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ) { return new ConfigureTableViewWidget( ab, parent, name ); } }; /*US extern "C" { void *init_libkaddrbk_tableview() { return ( new TableViewFactory ); } } */ #endif diff --git a/kaddressbook/xxport/csv_xxport.cpp b/kaddressbook/xxport/csv_xxport.cpp index 7281003..ed5807f 100644 --- a/kaddressbook/xxport/csv_xxport.cpp +++ b/kaddressbook/xxport/csv_xxport.cpp @@ -1,194 +1,192 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include <qfile.h> #include <qregexp.h> -#include <qtextstream.h> +#include <q3textstream.h> #include <qtextcodec.h> #include <kfiledialog.h> #ifndef KAB_EMBEDDED #include <kio/netaccess.h> #endif //KAB_EMBEDDED #include <klocale.h> #include <kmessagebox.h> #include <ktempfile.h> #include <kurl.h> #include "csvimportdialog.h" #include "csv_xxport.h" #ifndef KAB_EMBEDDED class CSVXXPortFactory : public XXPortFactory { public: XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name ) { return new CSVXXPort( ab, parent, name ); } }; #endif //KAB_EMBEDDED extern "C" { #ifndef KAB_EMBEDDED void *init_libkaddrbk_csv_xxport() #else //KAB_EMBEDDED void *init_microkaddrbk_csv_xxport() #endif //KAB_EMBEDDED { return ( new CSVXXPortFactory() ); } } CSVXXPort::CSVXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name ) : XXPortObject( ab, parent, name ) { createImportAction( i18n( "Import CSV List..." ) ); createExportAction( i18n( "Export CSV List..." ) ); } bool CSVXXPort::exportContacts( const KABC::AddresseeList &list, const QString& ) { #ifndef KAB_EMBEDDED KURL url = KFileDialog::getSaveURL( "addressbook.csv" ); if ( url.isEmpty() ) return true; if ( !url.isLocalFile() ) { KTempFile tmpFile; if ( tmpFile.status() != 0 ) { QString txt = i18n( "<qt>Unable to open file <b>%1</b>.%2.</qt>" ); KMessageBox::error( parentWidget(), txt.arg( url.url() ) .arg( strerror( tmpFile.status() ) ) ); return false; } doExport( tmpFile.file(), list ); tmpFile.close(); return KIO::NetAccess::upload( tmpFile.name(), url, parentWidget() ); } else { QFile file( url.path() ); - if ( !file.open( IO_WriteOnly ) ) { + if ( !file.open( QIODevice::WriteOnly ) ) { QString txt = i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ); KMessageBox::error( parentWidget(), txt.arg( url.path() ) ); return false; } doExport( &file, list ); file.close(); return true; } #else //KAB_EMBEDDED QString fileName = KFileDialog::getSaveFileName( "addressbook.csv", i18n("Save file"), parentWidget() ); if ( fileName.isEmpty() ) return false; QFile file( fileName ); - if ( !file.open( IO_WriteOnly ) ) { + if ( !file.open( QIODevice::WriteOnly ) ) { QString txt = i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ); KMessageBox::error( parentWidget(), txt.arg( fileName ) ); return false; } doExport( &file, list ); file.close(); return true; #endif //KAB_EMBEDDED } KABC::AddresseeList CSVXXPort::importContacts( const QString& ) const { CSVImportDialog dlg( addressBook(), parentWidget() ); if ( dlg.exec() ) return dlg.contacts(); else return KABC::AddresseeList(); } void CSVXXPort::doExport( QFile *fp, const KABC::AddresseeList &list ) { - QTextStream t( fp ); + Q3TextStream t( fp ); t.setCodec( QTextCodec::codecForName("utf8") ); KABC::AddresseeList::ConstIterator iter; KABC::Field::List fields = addressBook()->fields(); KABC::Field::List::Iterator fieldIter; bool first = true; // First output the column headings for ( fieldIter = fields.begin(); fieldIter != fields.end(); ++fieldIter ) { if ( !first ) t << ","; t << "\"" << (*fieldIter)->label() << "\""; first = false; } t << "\n"; // Then all the addressee objects KABC::Addressee addr; for ( iter = list.begin(); iter != list.end(); ++iter ) { addr = *iter; first = true; for ( fieldIter = fields.begin(); fieldIter != fields.end(); ++fieldIter ) { if ( !first ) t << ","; t << "\"" << (*fieldIter)->value( addr ) << "\""; first = false; } t << "\n"; } } -#ifndef KAB_EMBEDDED -#include "csv_xxport.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_csv_xxport.cpp" #endif //KAB_EMBEDDED - - diff --git a/kaddressbook/xxport/csvimportdialog.cpp b/kaddressbook/xxport/csvimportdialog.cpp index 862241e..7959cac 100644 --- a/kaddressbook/xxport/csvimportdialog.cpp +++ b/kaddressbook/xxport/csvimportdialog.cpp @@ -1,969 +1,973 @@ /* This file is part of KAddressBook. Copyright (C) 2003 Tobias Koenig <tokoe@kde.org> based on the code of KSpread's CSV Import Dialog This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ -#include <qbuttongroup.h> +#include <q3buttongroup.h> #include <qcheckbox.h> #include <qcombobox.h> #ifdef DESKTOP_VERSION #include <qinputdialog.h> #else #include <qtcompat/qinputdialog.h> #endif #include <qlabel.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qradiobutton.h> -#include <qtable.h> +#include <q3table.h> #include <qlayout.h> -#include <qtextstream.h> +#include <q3textstream.h> #include <qfile.h> +//Added by qt3to4: +#include <Q3HBoxLayout> +#include <Q3ValueList> +#include <Q3GridLayout> #include <kapplication.h> #include <kdebug.h> #include <kdialogbase.h> #include <kfiledialog.h> #include <klineedit.h> #include <klocale.h> #include <kglobal.h> #include <kmessagebox.h> #include <kstandarddirs.h> #include <kurlrequester.h> #ifdef DESKTOP_VERSION -#include "qtable.h" +#include "q3table.h" #else #include "qcombotableitem.h" #endif #include "csvimportdialog.h" CSVImportDialog::CSVImportDialog( KABC::AddressBook *ab, QWidget *parent, const char * name ) : KDialogBase( Plain, i18n ( "CSV Import Dialog" ), Ok | Cancel | User1 | User2, Ok, parent, name, true, true ), mAdjustRows( false ), mStartLine( 0 ), mTextQuote( '"' ), mDelimiter( "," ), mAddressBook( ab ) { initGUI(); mTypeMap.insert( i18n( "Undefined" ), Undefined ); mTypeMap.insert( KABC::Addressee::formattedNameLabel(), FormattedName ); mTypeMap.insert( KABC::Addressee::familyNameLabel(), FamilyName ); mTypeMap.insert( KABC::Addressee::givenNameLabel(), GivenName ); mTypeMap.insert( KABC::Addressee::additionalNameLabel(), AdditionalName ); mTypeMap.insert( KABC::Addressee::prefixLabel(), Prefix ); mTypeMap.insert( KABC::Addressee::suffixLabel(), Suffix ); mTypeMap.insert( KABC::Addressee::nickNameLabel(), NickName ); mTypeMap.insert( KABC::Addressee::birthdayLabel(), Birthday ); mTypeMap.insert( KABC::Addressee::homeAddressStreetLabel(), HomeAddressStreet ); mTypeMap.insert( KABC::Addressee::homeAddressLocalityLabel(), HomeAddressLocality ); mTypeMap.insert( KABC::Addressee::homeAddressRegionLabel(), HomeAddressRegion ); mTypeMap.insert( KABC::Addressee::homeAddressPostalCodeLabel(), HomeAddressPostalCode ); mTypeMap.insert( KABC::Addressee::homeAddressCountryLabel(), HomeAddressCountry ); mTypeMap.insert( KABC::Addressee::homeAddressLabelLabel(), HomeAddressLabel ); mTypeMap.insert( KABC::Addressee::businessAddressStreetLabel(), BusinessAddressStreet ); mTypeMap.insert( KABC::Addressee::businessAddressLocalityLabel(), BusinessAddressLocality ); mTypeMap.insert( KABC::Addressee::businessAddressRegionLabel(), BusinessAddressRegion ); mTypeMap.insert( KABC::Addressee::businessAddressPostalCodeLabel(), BusinessAddressPostalCode ); mTypeMap.insert( KABC::Addressee::businessAddressCountryLabel(), BusinessAddressCountry ); mTypeMap.insert( KABC::Addressee::businessAddressLabelLabel(), BusinessAddressLabel ); mTypeMap.insert( KABC::Addressee::homePhoneLabel(), HomePhone ); mTypeMap.insert( KABC::Addressee::businessPhoneLabel(), BusinessPhone ); mTypeMap.insert( KABC::Addressee::mobilePhoneLabel(), MobilePhone ); mTypeMap.insert( KABC::Addressee::homeFaxLabel(), HomeFax ); mTypeMap.insert( KABC::Addressee::businessFaxLabel(), BusinessFax ); mTypeMap.insert( KABC::Addressee::mobileWorkPhoneLabel(), MobileWorkPhone ); mTypeMap.insert( KABC::Addressee::isdnLabel(), Isdn ); mTypeMap.insert( KABC::Addressee::pagerLabel(), Pager ); mTypeMap.insert( KABC::Addressee::emailLabel(), Email ); mTypeMap.insert( KABC::Addressee::mailerLabel(), Mailer ); mTypeMap.insert( KABC::Addressee::titleLabel(), Title ); mTypeMap.insert( KABC::Addressee::roleLabel(), Role ); mTypeMap.insert( KABC::Addressee::organizationLabel(), Organization ); mTypeMap.insert( KABC::Addressee::noteLabel(), Note ); mTypeMap.insert( KABC::Addressee::urlLabel(), URL ); mTypeMap.insert( KABC::Addressee::categoryLabel(), Categories ); mCustomCounter = mTypeMap.count(); int count = mCustomCounter; KABC::Field::List fields = mAddressBook->fields( KABC::Field::CustomCategory ); KABC::Field::List::Iterator it; for ( it = fields.begin(); it != fields.end(); ++it, ++count ) mTypeMap.insert( (*it)->label(), count ); connect( mDelimiterBox, SIGNAL( clicked( int ) ), this, SLOT( delimiterClicked( int ) ) ); connect( mDelimiterEdit, SIGNAL( returnPressed() ), this, SLOT( returnPressed() ) ); connect( mDelimiterEdit, SIGNAL( textChanged ( const QString& ) ), this, SLOT( textChanged ( const QString& ) ) ); connect( mComboLine, SIGNAL( activated( const QString& ) ), this, SLOT( lineSelected( const QString& ) ) ); connect( mComboCodec, SIGNAL( activated( const QString& ) ), this, SLOT( codecChanged( const QString& ) ) ); connect( mComboQuote, SIGNAL( activated( const QString& ) ), this, SLOT( textquoteSelected( const QString& ) ) ); connect( mIgnoreDuplicates, SIGNAL( stateChanged( int ) ), this, SLOT( ignoreDuplicatesChanged( int ) ) ); connect( mUrlRequester, SIGNAL( returnPressed( const QString& ) ), this, SLOT( setFile( const QString& ) ) ); connect( mUrlRequester, SIGNAL( urlSelected( const QString& ) ), this, SLOT( setFile( const QString& ) ) ); connect( mUrlRequester->lineEdit(), SIGNAL( textChanged ( const QString& ) ), this, SLOT( urlChanged( const QString& ) ) ); connect( this, SIGNAL( user1Clicked() ), this, SLOT( applyTemplate() ) ); connect( this, SIGNAL( user2Clicked() ), this, SLOT( saveTemplate() ) ); // if ( QApplication::desktop()->width() < 321 ) - QIconSet icon = SmallIcon("filesave"); + QIcon icon = SmallIcon("filesave"); findButton( User2 )->setIconSet (icon ) ; icon = SmallIcon("fileopen"); findButton( User1 )->setIconSet (icon ) ; int wid = findButton( User2 )->sizeHint().height(); findButton( User2 )->setMaximumWidth( wid+4 ); findButton( User1 )->setMaximumWidth( wid+4 ); } CSVImportDialog::~CSVImportDialog() { } KABC::AddresseeList CSVImportDialog::contacts() const { KABC::AddresseeList contacts; for ( int row = 1; row < mTable->numRows(); ++row ) { KABC::Addressee a; bool emptyRow = true; KABC::Address addrHome( KABC::Address::Home ); KABC::Address addrWork( KABC::Address::Work ); for ( int col = 0; col < mTable->numCols(); ++col ) { - QComboTableItem *item = static_cast<QComboTableItem*>( mTable->item( 0, col ) ); + Q3ComboTableItem *item = static_cast<Q3ComboTableItem*>( mTable->item( 0, col ) ); if ( !item ) { qDebug( "ERROR: item cast failed" ); continue; } QString value = mTable->text( row, col ); if ( !value.isEmpty() ) emptyRow = false; switch ( posToType( item->currentItem() ) ) { case Undefined: continue; break; case FormattedName: a.setFormattedName( value ); break; case GivenName: a.setGivenName( value ); break; case FamilyName: a.setFamilyName( value ); break; case AdditionalName: a.setAdditionalName( value ); break; case Prefix: a.setPrefix( value ); break; case Suffix: a.setSuffix( value ); break; case NickName: a.setNickName( value ); break; case Birthday: //US //the generated code had the following format: a.setBirthday( QDate::fromString( value, Qt::ISODate ) ); // But Qt::IsoDate and QDate::fromString was not specified. Do I have the wrong QT version ? { QDate dt = KGlobal::locale()->readDate( value, "%Y-%m-%d"); // = Qt::ISODate - a.setBirthday(dt); + a.setBirthday(QDateTime(dt)); } break; case Email: if ( !value.isEmpty() ) a.insertEmail( value, true ); break; case Role: a.setRole( value ); break; case Title: a.setTitle( value ); break; case Mailer: a.setMailer( value ); break; case URL: a.setUrl( value ); break; case Organization: a.setOrganization( value ); break; case Note: if ( a.note().isEmpty() ) a.setNote( value ); else { a.setNote( a.note()+"\n"+value ); } break; case Categories: a.insertCategory( value ); break; case HomePhone: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Home ); a.insertPhoneNumber( number ); } break; case BusinessPhone: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Work ); a.insertPhoneNumber( number ); } break; case MobilePhone: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Cell ); a.insertPhoneNumber( number ); } break; case HomeFax: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); a.insertPhoneNumber( number ); } break; case BusinessFax: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); a.insertPhoneNumber( number ); } break; case MobileWorkPhone: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Car ); a.insertPhoneNumber( number ); } break; case Isdn: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Isdn ); a.insertPhoneNumber( number ); } break; case Pager: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Pager ); a.insertPhoneNumber( number ); } break; case HomeAddressStreet: addrHome.setStreet( value ); break; case HomeAddressLocality: addrHome.setLocality( value ); break; case HomeAddressRegion: addrHome.setRegion( value ); break; case HomeAddressPostalCode: addrHome.setPostalCode( value ); break; case HomeAddressCountry: addrHome.setCountry( value ); break; case HomeAddressLabel: addrHome.setLabel( value ); break; case BusinessAddressStreet: addrWork.setStreet( value ); break; case BusinessAddressLocality: addrWork.setLocality( value ); break; case BusinessAddressRegion: addrWork.setRegion( value ); break; case BusinessAddressPostalCode: addrWork.setPostalCode( value ); break; case BusinessAddressCountry: addrWork.setCountry( value ); break; case BusinessAddressLabel: addrWork.setLabel( value ); break; default: KABC::Field::List fields = mAddressBook->fields( KABC::Field::CustomCategory ); KABC::Field::List::Iterator it; int counter = 0; for ( it = fields.begin(); it != fields.end(); ++it ) { if ( counter == (int)( posToType( item->currentItem() ) - mCustomCounter ) ) { (*it)->setValue( a, value ); break; } ++counter; } break; } } if ( !addrHome.isEmpty() ) a.insertAddress( addrHome ); if ( !addrWork.isEmpty() ) a.insertAddress( addrWork ); if ( !emptyRow && !a.isEmpty() ) contacts.append( a ); } return contacts; } void CSVImportDialog::initGUI() { QWidget* page = plainPage(); - QGridLayout *layout = new QGridLayout( page, 1, 1, marginHintSmall(), + Q3GridLayout *layout = new Q3GridLayout( page, 1, 1, marginHintSmall(), spacingHintSmall() ); - QHBoxLayout *hbox = new QHBoxLayout(); + Q3HBoxLayout *hbox = new Q3HBoxLayout(); hbox->setSpacing( spacingHint() ); QLabel *label = new QLabel( i18n( "File to import:" ), page ); hbox->addWidget( label ); mUrlRequester = new KURLRequester( page ); mUrlRequester->setFilter( "*.csv" ); hbox->addWidget( mUrlRequester ); layout->addMultiCellLayout( hbox, 0, 0, 0, 2 ); // Delimiter: comma, semicolon, tab, space, other - mDelimiterBox = new QButtonGroup( i18n( "Delimiter" ), page ); + mDelimiterBox = new Q3ButtonGroup( i18n( "Delimiter" ), page ); mDelimiterBox->setColumnLayout( 0, Qt::Vertical ); mDelimiterBox->layout()->setSpacing( spacingHint() ); mDelimiterBox->layout()->setMargin( marginHint() ); - QGridLayout *delimiterLayout = new QGridLayout( mDelimiterBox->layout() ); + Q3GridLayout *delimiterLayout = new Q3GridLayout( mDelimiterBox->layout() ); delimiterLayout->setAlignment( Qt::AlignTop ); layout->addMultiCellWidget( mDelimiterBox, 1, 1, 0, 2 ); mRadioComma = new QRadioButton( i18n( "Comma" ), mDelimiterBox ); mRadioComma->setChecked( true ); delimiterLayout->addWidget( mRadioComma, 0, 0 ); mRadioSemicolon = new QRadioButton( i18n( "Semicolon" ), mDelimiterBox ); delimiterLayout->addWidget( mRadioSemicolon, 0, 1 ); mRadioTab = new QRadioButton( i18n( "Tabulator" ), mDelimiterBox ); delimiterLayout->addWidget( mRadioTab, 1, 0 ); mRadioSpace = new QRadioButton( i18n( "Space" ), mDelimiterBox ); delimiterLayout->addWidget( mRadioSpace, 1, 1 ); mRadioOther = new QRadioButton( i18n( "Other" ), mDelimiterBox ); delimiterLayout->addWidget( mRadioOther, 0, 2 ); mDelimiterEdit = new QLineEdit( mDelimiterBox ); delimiterLayout->addWidget( mDelimiterEdit, 1, 2 ); mComboLine = new QComboBox( false, page ); mComboLine->insertItem( i18n( "1" ) ); layout->addWidget( mComboLine, 3, 1 ); mComboQuote = new QComboBox( false, page ); mComboQuote->insertItem( i18n( "\"" ), 0 ); mComboQuote->insertItem( i18n( "'" ), 1 ); mComboQuote->insertItem( i18n( "None" ), 2 ); layout->addWidget( mComboQuote, 3, 0 ); mComboCodec = new QComboBox( false, page ); mComboCodec->insertItem( i18n( "UTF8" ), 0 ); mComboCodec->insertItem( i18n( "LATIN1" ), 1 ); mComboCodec->insertItem( i18n( "LOCALE" ), 2 ); layout->addWidget( mComboCodec, 3, 2 ); label = new QLabel( i18n( "Start at line:" ), page ); layout->addWidget( label, 2, 1 ); label = new QLabel( i18n( "Textquote:" ), page ); layout->addWidget( label, 2, 0 ); label = new QLabel( i18n( "Codec:" ), page ); layout->addWidget( label, 2, 2 ); mIgnoreDuplicates = new QCheckBox( page ); mIgnoreDuplicates->setText( i18n( "Ignore duplicate delimiters" ) ); layout->addMultiCellWidget( mIgnoreDuplicates, 4, 4, 0, 2 ); - mTable = new QTable( 0, 0, page ); - mTable->setSelectionMode( QTable::NoSelection ); + mTable = new Q3Table( 0, 0, page ); + mTable->setSelectionMode( Q3Table::NoSelection ); //mTable->horizontalHeader()->hide(); layout->addMultiCellWidget( mTable, 5, 5, 0, 2 ); /*US setButtonText( User1, i18n( "Apply Template" ) ); setButtonText( User2, i18n( "Save Template" ) ); */ enableButtonOK( false ); findButton( User1 )->setEnabled( false ); findButton( User2 )->setEnabled( false ); #ifdef DESKTOP_VERSION resize( 640, 480 ); #else showMaximized(); #endif } void CSVImportDialog::fillTable() { int row, column; bool lastCharDelimiter = false; bool ignoreDups = mIgnoreDuplicates->isChecked(); enum { S_START, S_QUOTED_FIELD, S_MAYBE_END_OF_QUOTED_FIELD, S_END_OF_QUOTED_FIELD, S_MAYBE_NORMAL_FIELD, S_NORMAL_FIELD } state = S_START; QChar x; QString field = ""; // store previous assignment - QValueList<int> mTypeOld = mTypeStore; + Q3ValueList<int> mTypeOld = mTypeStore; mTypeStore.clear(); for ( column = 0; column < mTable->numCols(); ++column ) { - QComboTableItem *item = static_cast<QComboTableItem*>( mTable->item( 0, column ) ); + Q3ComboTableItem *item = static_cast<Q3ComboTableItem*>( mTable->item( 0, column ) ); if ( !item || mClearTypeStore ) mTypeStore.append( typeToPos( Undefined ) ); else if ( item ) mTypeStore.append( item->currentItem() ); } clearTable(); row = column = 1; if ( mComboCodec->currentItem () == 0 ) { mData = QString::fromUtf8( mFileArray.data() ); } else if ( mComboCodec->currentItem () == 1 ) { mData = QString::fromLatin1( mFileArray.data() ); } else { mData = QString::fromLocal8Bit( mFileArray.data() ); } - QTextStream inputStream( mData, IO_ReadOnly ); + Q3TextStream inputStream( mData, QIODevice::ReadOnly ); if ( mComboCodec->currentItem () == 0 ) { - inputStream.setEncoding( QTextStream::UnicodeUTF8 ); + inputStream.setEncoding( Q3TextStream::UnicodeUTF8 ); } else if ( mComboCodec->currentItem () == 1 ) { - inputStream.setEncoding( QTextStream::Latin1 ); + inputStream.setEncoding( Q3TextStream::Latin1 ); } else { - inputStream.setEncoding( QTextStream::Locale ); + inputStream.setEncoding( Q3TextStream::Locale ); } int maxColumn = 0; while ( !inputStream.atEnd() ) { inputStream >> x; // read one char if ( x == '\r' ) inputStream >> x; // eat '\r', to handle DOS/LOSEDOWS files correctly switch ( state ) { case S_START : if ( x == mTextQuote ) { state = S_QUOTED_FIELD; - } else if ( x == mDelimiter ) { + } else if ( QString(x) == mDelimiter ) { if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) ++column; lastCharDelimiter = true; } else if ( x == '\n' ) { ++row; column = 1; } else { field += x; state = S_MAYBE_NORMAL_FIELD; } break; case S_QUOTED_FIELD : if ( x == mTextQuote ) { state = S_MAYBE_END_OF_QUOTED_FIELD; } else if ( x == '\n' && mTextQuote.isNull() ) { setText( row - mStartLine + 1, column, field ); field = ""; if ( x == '\n' ) { ++row; column = 1; } else { if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) ++column; lastCharDelimiter = true; } state = S_START; } else { field += x; } break; case S_MAYBE_END_OF_QUOTED_FIELD : if ( x == mTextQuote ) { field += x; state = S_QUOTED_FIELD; - } else if ( x == mDelimiter || x == '\n' ) { + } else if ( QString(x) == mDelimiter || x == '\n' ) { setText( row - mStartLine + 1, column, field ); field = ""; if ( x == '\n' ) { ++row; column = 1; } else { if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) ++column; lastCharDelimiter = true; } state = S_START; } else { state = S_END_OF_QUOTED_FIELD; } break; case S_END_OF_QUOTED_FIELD : - if ( x == mDelimiter || x == '\n' ) { + if ( QString(x) == mDelimiter || x == '\n' ) { setText( row - mStartLine + 1, column, field ); field = ""; if ( x == '\n' ) { ++row; column = 1; } else { if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) ++column; lastCharDelimiter = true; } state = S_START; } else { state = S_END_OF_QUOTED_FIELD; } break; case S_MAYBE_NORMAL_FIELD : if ( x == mTextQuote ) { field = ""; state = S_QUOTED_FIELD; break; } case S_NORMAL_FIELD : - if ( x == mDelimiter || x == '\n' ) { + if ( QString(x) == mDelimiter || x == '\n' ) { setText( row - mStartLine + 1, column, field ); field = ""; if ( x == '\n' ) { ++row; column = 1; } else { if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) ++column; lastCharDelimiter = true; } state = S_START; } else { field += x; } } - if ( x != mDelimiter ) + if ( QString(x) != mDelimiter ) lastCharDelimiter = false; if ( column > maxColumn ) maxColumn = column; } // file with only one line without '\n' if ( field.length() > 0 ) { setText( row - mStartLine + 1, column, field ); ++row; field = ""; } adjustRows( row - mStartLine ); mTable->setNumCols( maxColumn ); //US begin QStringList keys; uint iii = 0, count = mTypeMap.count(); while ( iii < count ) { keys << "dummy"; ++iii; } QMap<QString, uint>::ConstIterator it; for ( it = mTypeMap.begin(); it != mTypeMap.end(); ++it) keys[( it.data() )] = it.key(); //US end for ( column = 0; column < mTable->numCols(); ++column ) { //US QComboTableItem *item = new QComboTableItem( mTable, mTypeMap.keys() ); - QComboTableItem *item = new QComboTableItem( mTable, keys ); + Q3ComboTableItem *item = new Q3ComboTableItem( mTable, keys ); mTable->setItem( 0, column, item ); if ( column < mTypeStore.count() ) item->setCurrentItem( mTypeStore[ column ] ); else item->setCurrentItem( typeToPos( Undefined ) ); mTable->adjustColumn( column ); } } void CSVImportDialog::clearTable() { for ( int row = 0; row < mTable->numRows(); ++row ) for ( int column = 0; column < mTable->numCols(); ++column ) mTable->clearCell( row, column ); } void CSVImportDialog::fillComboBox() { mComboLine->clear(); for ( int row = 1; row < mTable->numRows() + 1; ++row ) mComboLine->insertItem( QString::number( row ), row - 1 ); } void CSVImportDialog::setText( int row, int col, const QString& text ) { if ( row < 1 ) // skipped by the user return; if ( mTable->numRows() < row ) { mTable->setNumRows( row + 5000 ); // We add 5000 at a time to limit recalculations mAdjustRows = true; } if ( mTable->numCols() < col ) mTable->setNumCols( col + 50 ); // We add 50 at a time to limit recalculation mTable->setText( row - 1, col - 1, text ); } /* * Called after the first fillTable() when number of rows are unknown. */ void CSVImportDialog::adjustRows( int rows ) { if ( mAdjustRows ) { mTable->setNumRows( rows ); mAdjustRows = false; } } void CSVImportDialog::returnPressed() { if ( mDelimiterBox->id( mDelimiterBox->selected() ) != 4 ) return; mDelimiter = mDelimiterEdit->text(); fillTable(); } void CSVImportDialog::textChanged ( const QString& ) { mRadioOther->setChecked ( true ); delimiterClicked( 4 ); // other } void CSVImportDialog::codecChanged ( const QString& ) { fillTable(); } void CSVImportDialog::delimiterClicked( int id ) { switch ( id ) { case 0: // comma mDelimiter = ","; break; case 4: // other mDelimiter = mDelimiterEdit->text(); break; case 2: // tab mDelimiter = "\t"; break; case 3: // space mDelimiter = " "; break; case 1: // semicolon mDelimiter = ";"; break; } fillTable(); } void CSVImportDialog::textquoteSelected( const QString& mark ) { if ( mComboQuote->currentItem() == 2 ) mTextQuote = 0; else mTextQuote = mark[ 0 ]; fillTable(); } void CSVImportDialog::lineSelected( const QString& line ) { mStartLine = line.toInt() - 1; fillTable(); } void CSVImportDialog::slotOk() { bool assigned = false; for ( int column = 0; column < mTable->numCols(); ++column ) { - QComboTableItem *item = static_cast<QComboTableItem*>( mTable->item( 0, + Q3ComboTableItem *item = static_cast<Q3ComboTableItem*>( mTable->item( 0, column ) ); if ( item && posToType( item->currentItem() ) != Undefined ) assigned = true; } if ( assigned ) KDialogBase::slotOk(); else KMessageBox::sorry( this, i18n( "You have to assign at least one column." ) ); } void CSVImportDialog::applyTemplate() { QMap<uint,int> columnMap; QMap<QString, QString> fileMap; QStringList templates; // load all template files /*US QStringList list = KGlobal::dirs()->findAllResources( "data" , QString( kapp->name() ) + "/csv-templates/*.desktop", true, true ); */ QStringList list = KGlobal::dirs()->findAllResources( "data" , KGlobal::getAppName() + "/csv-templates/*.desktop", true, true ); for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { //US KSimpleConfig config( *it, true ); KConfig config( *it ); if ( !config.hasGroup( "csv column map" ) ) continue; config.setGroup( "Misc" ); templates.append( config.readEntry( "Name" ) ); fileMap.insert( config.readEntry( "Name" ), *it ); } // let the user chose, what to take bool ok = false; QString tmp; tmp = QInputDialog::getItem( i18n( "Template Selection" ), i18n( "Please select a template\nthat matches the CSV file." ), templates, 0, false, &ok, this ); if ( !ok ) return; //US KSimpleConfig config( fileMap[ tmp ], true ); KConfig config( fileMap[ tmp ] ); config.setGroup( "General" ); //US uint numColumns = config.readUnsignedNumEntry( "Columns" ); uint numColumns = (uint)config.readNumEntry( "Columns" ); mDelimiterEdit->setText( config.readEntry( "DelimiterOther" ) ); mDelimiterBox->setButton( config.readNumEntry( "DelimiterType" ) ); delimiterClicked( config.readNumEntry( "DelimiterType" ) ); int quoteType = config.readNumEntry( "QuoteType" ); mComboQuote->setCurrentItem( quoteType ); textquoteSelected( mComboQuote->currentText() ); // create the column map config.setGroup( "csv column map" ); for ( uint i = 0; i < numColumns; ++i ) { int col = config.readNumEntry( QString::number( i ) ); columnMap.insert( i, col ); } // apply the column map for ( uint column = 0; column < columnMap.count(); ++column ) { int type = columnMap[ column ]; - QComboTableItem *item = static_cast<QComboTableItem*>( mTable->item( 0, + Q3ComboTableItem *item = static_cast<Q3ComboTableItem*>( mTable->item( 0, column ) ); if ( item ) item->setCurrentItem( typeToPos( type ) ); } } void CSVImportDialog::saveTemplate() { /*US QString fileName = KFileDialog::getSaveFileName( locateLocal( "data", QString( kapp->name() ) + "/csv-templates/" ), "*.desktop", this ); */ QString fileName = KFileDialog::getSaveFileName( locateLocal( "data", KGlobal::getAppName() + "/csv-templates/" )+ "*.desktop",i18n("Save file name") , this ); if ( fileName.isEmpty() ) return; if ( !fileName.contains( ".desktop" ) ) fileName += ".desktop"; QString name = QInputDialog::getText( i18n( "Template name" ), i18n( "Please enter a name for the template" ) ); if ( name.isEmpty() ) return; KConfig config( fileName ); config.setGroup( "General" ); config.writeEntry( "Columns", mTable->numCols() ); config.writeEntry( "DelimiterType", mDelimiterBox->id( mDelimiterBox->selected() ) ); config.writeEntry( "DelimiterOther", mDelimiterEdit->text() ); config.writeEntry( "QuoteType", mComboQuote->currentItem() ); config.setGroup( "Misc" ); config.writeEntry( "Name", name ); config.setGroup( "csv column map" ); for ( uint column = 0; column < mTable->numCols(); ++column ) { - QComboTableItem *item = static_cast<QComboTableItem*>( mTable->item( 0, + Q3ComboTableItem *item = static_cast<Q3ComboTableItem*>( mTable->item( 0, column ) ); if ( item ) config.writeEntry( QString::number( column ), posToType( item->currentItem() ) ); else config.writeEntry( QString::number( column ), 0 ); } config.sync(); } QString CSVImportDialog::getText( int row, int col ) { return mTable->text( row, col ); } uint CSVImportDialog::posToType( int pos ) const { return pos; #if 0 uint counter = 0; QMap<QString, uint>::ConstIterator it; for ( it = mTypeMap.begin(); it != mTypeMap.end(); ++it, ++counter ) if ( counter == (uint)pos ) return it.data(); return 0; #endif } int CSVImportDialog::typeToPos( uint type ) const { return type; #if 0 uint counter = 0; QMap<QString, uint>::ConstIterator it; for ( it = mTypeMap.begin(); it != mTypeMap.end(); ++it, ++counter ) if ( it.data() == type ) return counter; return -1; #endif } void CSVImportDialog::ignoreDuplicatesChanged( int ) { fillTable(); } void CSVImportDialog::setFile( const QString &fileName ) { if ( fileName.isEmpty() ) return; QFile file( fileName ); - if ( !file.open( IO_ReadOnly ) ) { + if ( !file.open( QIODevice::ReadOnly ) ) { KMessageBox::sorry( this, i18n( "Cannot open input file!" ) ); file.close(); return; } mFileArray = file.readAll(); file.close(); mClearTypeStore = true; clearTable(); mTable->setNumCols( 0 ); mTable->setNumRows( 0 ); fillTable(); mClearTypeStore = false; fillComboBox(); } void CSVImportDialog::urlChanged( const QString &file ) { bool state = !file.isEmpty(); enableButtonOK( state ); findButton( User1 )->setEnabled( state ); findButton( User2 )->setEnabled( state ); } -#ifndef KAB_EMBEDDED -#include <csvimportdialog.moc> +#ifndef KAB_EMBEDDED_ +#include <moc_csvimportdialog.cpp> #endif //KAB_EMBEDDED diff --git a/kaddressbook/xxport/csvimportdialog.h b/kaddressbook/xxport/csvimportdialog.h index 2661420..520f3fa 100644 --- a/kaddressbook/xxport/csvimportdialog.h +++ b/kaddressbook/xxport/csvimportdialog.h @@ -1,126 +1,126 @@ /* This file is part of KAddressBook. Copyright (C) 2003 Tobias Koenig <tokoe@kde.org> based on the code of KSpread's CSV Import Dialog This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #ifndef CSV_IMPORT_DLG_H #define CSV_IMPORT_DLG_H #include <kabc/addressbook.h> #include <kabc/addresseelist.h> #include <kdialogbase.h> -#include <qvaluelist.h> +#include <q3valuelist.h> class KURLRequester; -class QButtonGroup; +class Q3ButtonGroup; class QComboBox; class QCheckBox; class QLineEdit; class QPushButton; class QRadioButton; -class QTable; +class Q3Table; class CSVImportDialog : public KDialogBase { Q_OBJECT public: CSVImportDialog( KABC::AddressBook *ab, QWidget *parent, const char *name = 0 ); ~CSVImportDialog(); KABC::AddresseeList contacts() const; protected slots: virtual void slotOk(); private slots: void returnPressed(); void delimiterClicked( int id ); void lineSelected( const QString& line ); void textquoteSelected( const QString& mark ); void textChanged ( const QString & ); void ignoreDuplicatesChanged( int ); void setFile( const QString& ); void urlChanged( const QString& ); void codecChanged ( const QString& ); void applyTemplate(); void saveTemplate(); private: enum { Undefined, FormattedName, FamilyName, GivenName, AdditionalName, Prefix, Suffix, NickName, Birthday, HomeAddressStreet, HomeAddressLocality, HomeAddressRegion, HomeAddressPostalCode, HomeAddressCountry, HomeAddressLabel, BusinessAddressStreet, BusinessAddressLocality, BusinessAddressRegion, BusinessAddressPostalCode, BusinessAddressCountry, BusinessAddressLabel, HomePhone, BusinessPhone, MobilePhone, HomeFax, BusinessFax, MobileWorkPhone, Isdn, Pager, Email, Mailer, Title, Role, Organization, Note, URL, Categories }; - QTable* mTable; - QButtonGroup* mDelimiterBox; + Q3Table* mTable; + Q3ButtonGroup* mDelimiterBox; QRadioButton* mRadioComma; QRadioButton* mRadioSemicolon; QRadioButton* mRadioTab; QRadioButton* mRadioSpace; QRadioButton* mRadioOther; QLineEdit* mDelimiterEdit; QComboBox* mComboLine; QComboBox* mComboQuote; QComboBox* mComboCodec; QCheckBox* mIgnoreDuplicates; KURLRequester* mUrlRequester; void initGUI(); void fillTable(); void clearTable(); void fillComboBox(); void setText( int row, int col, const QString& text ); void adjustRows( int rows ); QString getText( int row, int col ); uint posToType( int pos ) const; int typeToPos( uint type ) const; bool mAdjustRows; int mStartLine; QChar mTextQuote; QString mDelimiter; QString mData; QByteArray mFileArray; QMap<QString, uint> mTypeMap; KABC::AddressBook *mAddressBook; int mCustomCounter; bool mClearTypeStore; - QValueList<int> mTypeStore; + Q3ValueList<int> mTypeStore; }; #endif diff --git a/kaddressbook/xxport/kde2_xxport.cpp b/kaddressbook/xxport/kde2_xxport.cpp index 03efc1b..72d3fc2 100644 --- a/kaddressbook/xxport/kde2_xxport.cpp +++ b/kaddressbook/xxport/kde2_xxport.cpp @@ -1,121 +1,121 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include <qfile.h> #include <kdebug.h> #include <kfiledialog.h> #ifndef KAB_EMBEDDED #include <kio/netaccess.h> #endif //KAB_EMBEDDED #include <klocale.h> #include <kmessagebox.h> #include <kprocess.h> #include <kstandarddirs.h> #include <ktempfile.h> #include <kurl.h> #include "xxportmanager.h" #include "kde2_xxport.h" #ifndef KAB_EMBEDDED class KDE2XXPortFactory : public XXPortFactory { public: XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name ) { return new KDE2XXPort( ab, parent, name ); } }; #endif //KAB_EMBEDDED extern "C" { #ifndef KAB_EMBEDDED void *init_libkaddrbk_kde2_xxport() #else //KAB_EMBEDDED void *init_microkaddrbk_kde2_xxport() #endif //KAB_EMBEDDED { return ( new KDE2XXPortFactory() ); } } KDE2XXPort::KDE2XXPort( KABC::AddressBook *ab, QWidget *parent, const char *name ) : XXPortObject( ab, parent, name ) { createImportAction( i18n( "Import KDE 2 Addressbook..." ) ); } KABC::AddresseeList KDE2XXPort::importContacts( const QString& ) const { QString fileName = locateLocal( "data", "kabc/std.vcf" ); if ( !QFile::exists( fileName ) ) { KMessageBox::sorry( parentWidget(), i18n( "<qt>Couldn't find a KDE 2 address book <b>%1</b>.</qt>" ).arg( fileName ) ); return KABC::AddresseeList(); } #ifndef KAB_EMBEDDED int result = KMessageBox::questionYesNoCancel( parentWidget(), i18n( "Override previously imported entries?" ), i18n( "Import KDE 2 Addressbook" ) ); #else //KAB_EMBEDDED int result = KMessageBox::warningYesNoCancel( parentWidget(), i18n( "Override previously imported entries?" ), i18n( "Import KDE 2 Addressbook" ) ); #endif //KAB_EMBEDDED if ( !result ) return KABC::AddresseeList(); KProcess proc; if ( result == KMessageBox::Yes ) { proc << "kab2kabc"; proc << "--override"; } else if ( result == KMessageBox::No ) proc << "kab2kabc"; else kdDebug(5720) << "KAddressBook::importKDE2(): Unknow return value." << endl; proc.start( KProcess::Block ); addressBook()->load(); return KABC::AddresseeList(); } -#ifndef KAB_EMBEDDED -#include "kde2_xxport.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_kde2_xxport.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/xxport/vcard_xxport.cpp b/kaddressbook/xxport/vcard_xxport.cpp index 9a8fa68..64b9071 100644 --- a/kaddressbook/xxport/vcard_xxport.cpp +++ b/kaddressbook/xxport/vcard_xxport.cpp @@ -1,272 +1,274 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include <qfile.h> -#include <qtextstream.h> +#include <q3textstream.h> #include <qfileinfo.h> +//Added by qt3to4: +#include <Q3CString> #include <kabc/vcardconverter.h> #include <kabc/vcardparser/vcardtool.h> #include <kfiledialog.h> #ifndef KAB_EMBEDDED #include <kio/netaccess.h> #endif //KAB_EMBEDDED #include <klocale.h> #include <kmessagebox.h> #include <ktempfile.h> #include <kurl.h> #include "xxportmanager.h" #include "vcard_xxport.h" #ifndef KAB_EMBEDDED class VCardXXPortFactory : public XXPortFactory { public: XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name ) { return new VCardXXPort( ab, parent, name ); } }; #endif //KAB_EMBEDDED extern "C" { #ifndef KAB_EMBEDDED void *init_libkaddrbk_vcard_xxport() #else //KAB_EMBEDDED void *init_microkaddrbk_vcard_xxport() #endif //KAB_EMBEDDED { return ( new VCardXXPortFactory() ); } } VCardXXPort::VCardXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name ) : XXPortObject( ab, parent, name ) { createImportAction( i18n( "Import vCard..." ) ); //US KABC::VCardConverter does not support the export of 2.1 addressbooks. //US createExportAction( i18n( "Export vCard 2.1..." ), "v21" ); createExportAction( i18n( "Export vCard 3.0..." ), "v30" ); } bool VCardXXPort::exportContacts( const KABC::AddresseeList &list, const QString &data ) { QString name; if ( list.count() == 1 ) name = list[ 0 ].givenName() + "_" + list[ 0 ].familyName() + ".vcf"; else name = "addressbook.vcf"; #ifndef KAB_EMBEDDED QString fileName = KFileDialog::getSaveFileName( name ); #else //KAB_EMBEDDED QString fileName = KFileDialog::getSaveFileName( name, i18n("Save file"), parentWidget() ); #endif //KAB_EMBEDDED if ( fileName.isEmpty() ) return false; QFile outFile( fileName ); - if ( !outFile.open( IO_WriteOnly ) ) { + if ( !outFile.open( QIODevice::WriteOnly ) ) { QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" ); KMessageBox::error( parentWidget(), text.arg( fileName ) ); return false; } - QTextStream t( &outFile ); - t.setEncoding( QTextStream::UnicodeUTF8 ); + Q3TextStream t( &outFile ); + t.setEncoding( Q3TextStream::UnicodeUTF8 ); KABC::Addressee::List::ConstIterator it; for ( it = list.begin(); it != list.end(); ++it ) { KABC::VCardConverter converter; QString vcard; KABC::VCardConverter::Version version; if ( data == "v21" ) version = KABC::VCardConverter::v2_1; else version = KABC::VCardConverter::v3_0; converter.addresseeToVCard( *it, vcard, version ); t << vcard << "\r\n\r\n"; } outFile.close(); return true; } KABC::AddresseeList VCardXXPort::importContacts( const QString& ) const { QString fileName; KABC::AddresseeList addrList; KURL url; #ifndef KAB_EMBEDDED if ( !XXPortManager::importData.isEmpty() ) addrList = parseVCard( XXPortManager::importData ); else { if ( XXPortManager::importURL.isEmpty() ) { url = KFileDialog::getLoadFileName( QString::null, i18n("Select vCard to Import"), parentWidget() ); } else url = XXPortManager::importURL; if ( url.isEmpty() ) return addrList; QString caption( i18n( "vCard Import Failed" ) ); if ( KIO::NetAccess::download( url, fileName ) ) { QFile file( fileName ); - file.open( IO_ReadOnly ); + file.open( QIODevice::ReadOnly ); QByteArray rawData = file.readAll(); file.close(); QString data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); addrList = parseVCard( data ); if ( !url.isLocalFile() ) KIO::NetAccess::removeTempFile( fileName ); } else { QString text = i18n( "<qt>Unable to access <b>%1</b>.</qt>" ); KMessageBox::error( parentWidget(), text.arg( url.url() ), caption ); } } #else //KAB_EMBEDDED if ( !XXPortManager::importData.isEmpty() ) addrList = parseVCard( XXPortManager::importData ); else { if ( XXPortManager::importURL.isEmpty() ) { fileName = KFileDialog::getOpenFileName( QString::null, i18n("Select vCard to Import"), parentWidget() ); if ( fileName.isEmpty() ) return addrList; QFileInfo fi ( fileName ); if ( !fi.isFile() ) return addrList; } else { //US url = XXPortManager::importURL; qDebug("VCardXXPort::importContacts Urls at the moment not supported"); if ( url.isEmpty() ) return addrList; } QFile file( fileName ); - if ( file.open( IO_ReadOnly ) ) { - QCString rawData ( file.readAll().data(),file.size()+1); + if ( file.open( QIODevice::ReadOnly ) ) { + Q3CString rawData ( file.readAll().data(),file.size()+1); file.close(); int start = 0; #ifndef DESKTOP_VERSION while ( start < rawData.size()-2 ) { if ( rawData.at( start ) == '\r' ) if ( rawData.at( start+1 ) == '\n' ) if ( rawData.at( start+2 ) == ' ' ) { rawData.remove(start,3); --start; } ++start; } #endif int ret = KMessageBox::warningYesNoCancel( 0, i18n("Select import format!\nDefault and standard is Utf8.\nLatin1 may be the right\nfor some West Europian languages."), i18n("Import Format"), i18n("Utf8"), i18n("Latin1") ); if ( ret == KMessageBox::Cancel ) return addrList; if ( ret == KMessageBox::Yes ) addrList = parseVCard( QString::fromUtf8( rawData.data() ) ); else addrList = parseVCard( QString::fromLatin1( rawData.data() ) ); } } #endif //KAB_EMBEDDED return addrList; } KABC::AddresseeList VCardXXPort::parseVCard( const QString &data ) const { KABC::VCardTool tool; KABC::AddresseeList addrList; addrList = tool.parseVCards( data ); // LR : I switched to the code, which is in current cvs HEAD /* uint numVCards = data.contains( "BEGIN:VCARD", false ); QStringList dataList = QStringList::split( "\r\n\r\n", data ); for ( uint i = 0; i < numVCards && i < dataList.count(); ++i ) { KABC::Addressee addr; bool ok = false; if ( dataList[ i ].contains( "VERSION:3.0" ) ) ok = converter.vCardToAddressee( dataList[ i ], addr, KABC::VCardConverter::v3_0 ); else if ( dataList[ i ].contains( "VERSION:2.1" ) ) ok = converter.vCardToAddressee( dataList[ i ], addr, KABC::VCardConverter::v2_1 ); else { KMessageBox::sorry( parentWidget(), i18n( "Not supported vCard version." ) ); continue; } if ( !addr.isEmpty() && ok ) addrList.append( addr ); else { QString text = i18n( "The selected file does not include a valid vCard. " "Please check the file and try again." ); KMessageBox::sorry( parentWidget(), text ); } } */ if ( addrList.isEmpty() ) { QString text = i18n( "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n" ); KMessageBox::sorry( parentWidget(), text ); } return addrList; } -#ifndef KAB_EMBEDDED -#include "vcard_xxport.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_vcard_xxport.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/xxportmanager.cpp b/kaddressbook/xxportmanager.cpp index 405f7ec..95b240d 100644 --- a/kaddressbook/xxportmanager.cpp +++ b/kaddressbook/xxportmanager.cpp @@ -1,270 +1,269 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include <qlayout.h> #include <qlist.h> +//Added by qt3to4: +#include <Q3VBoxLayout> #include <kabc/addressbook.h> #include <kabc/resource.h> #include <kdebug.h> #include <kdialogbase.h> #include <klocale.h> #include <kmessagebox.h> #ifndef KAB_EMBEDDED #include <ktrader.h> #else //KAB_EMBEDDED extern "C" { void* init_microkaddrbk_csv_xxport(); void* init_microkaddrbk_kde2_xxport(); void* init_microkaddrbk_vcard_xxport(); // void* init_microkaddrbk_opie_xxport(); void* init_microkaddrbk_qtopia_xxport(); void* init_microkaddrbk_sharpdtm_xxport(); } #endif //KAB_EMBEDDED #include <addresseeview.h> #include "kabcore.h" #include "undocmds.h" #include "xxportselectdialog.h" #include "xxportmanager.h" #include "nameeditdialog.h" KURL XXPortManager::importURL = KURL(); QString XXPortManager::importData = QString::null; class PreviewDialog : public KDialogBase { public: PreviewDialog( const KABC::Addressee &addr, QWidget *parent, const char *name = 0 ); }; XXPortManager::XXPortManager( KABCore *core, QObject *parent, const char *name ) : QObject( parent, name ), mCore( core ), mShowPreview( false ) { loadPlugins(); } XXPortManager::~XXPortManager() { } void XXPortManager::restoreSettings() { } void XXPortManager::saveSettings() { } void XXPortManager::importVCard( const KURL &url ) { importVCard( url, false ); } void XXPortManager::importVCard( const KURL &url, bool showPreview ) { importURL = url; mShowPreview = showPreview; slotImport( "vcard", "<empty>" ); mShowPreview = false; importURL = KURL(); } void XXPortManager::importVCard( const QString &vCard, bool showPreview ) { importData = vCard; mShowPreview = showPreview; slotImport( "vcard", "<empty>" ); mShowPreview = false; importData = ""; } void XXPortManager::slotImport( const QString &identifier, const QString &data ) { XXPortObject *obj = mXXPortObjects[ identifier ]; if ( !obj ) { KMessageBox::error( mCore, i18n( "<qt>No import plugin available for <b>%1</b>.</qt>" ).arg( identifier ) ); return; } KABC::Resource *resource = mCore->requestResource( mCore ); if ( !resource ) return; KABC::AddresseeList list = obj->importContacts( data ); bool useUndo = ( list.count() < 25 ); #ifdef DESKTOP_VERSION useUndo = true; #endif mShowPreview = true; KABC::AddresseeList::Iterator it; bool imported = false; int count = 0; KConfig config( locateLocal("config", "kabcrc") ); config.setGroup( "General" ); int FormattedNameType = config.readNumEntry( "FormattedNameType", 1 ); for ( it = list.begin(); it != list.end(); ++it ) { if ( mShowPreview ) { PreviewDialog dlg( *it, mCore ); connect( &dlg, SIGNAL( closeClicked() ), this, SLOT ( noPreview()) ); if ( !dlg.exec() ) { if ( mShowPreview ) continue; } } (*it).setResource( resource ); if ( (*it).formattedName().isEmpty() ) (*it).setFormattedName( NameEditDialog::formattedName( (*it), FormattedNameType ) ); if ( useUndo ) { ++count; // We use a PwNewCommand so the user can undo it. PwNewCommand *command = new PwNewCommand( mCore->addressBook(), *it ); UndoStack::instance()->push( command ); RedoStack::instance()->clear(); } else { ++count; mCore->addressBook()->insertAddressee( (*it), true, true ); } imported = true; } if ( imported ) { KMessageBox::information( mCore, i18n( "%1 contacts\nsuccessfully\nimported.").arg( count) ); emit modified(); } } void XXPortManager::noPreview() { mShowPreview = false; } void XXPortManager::slotExport( const QString &identifier, const QString &data ) { XXPortObject *obj = mXXPortObjects[ identifier ]; if ( !obj ) { KMessageBox::error( mCore, i18n( "<qt>No export plugin available for <b>%1</b>.</qt>" ).arg( identifier ) ); return; } KABC::AddresseeList addrList; XXPortSelectDialog dlg( mCore, obj->requiresSorting(), mCore ); if ( dlg.exec() ) addrList = dlg.contacts(); else return; if ( !obj->exportContacts( addrList, data ) ) KMessageBox::error( mCore, i18n( "Unable to export contacts." ) ); else KMessageBox::information( mCore, i18n( "contacts successfully exported." ) ); } void XXPortManager::loadPlugins() { mXXPortObjects.clear(); #ifndef KAB_EMBEDDED KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/XXPort" ); KTrader::OfferList::ConstIterator it; for ( it = plugins.begin(); it != plugins.end(); ++it ) { if ( !(*it)->hasServiceType( "KAddressBook/XXPort" ) ) continue; KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() ); if ( !factory ) { kdDebug(5720) << "XXPortManager::loadExtensions(): Factory creation failed" << endl; continue; } XXPortFactory *xxportFactory = static_cast<XXPortFactory*>( factory ); if ( !xxportFactory ) { kdDebug(5720) << "XXPortManager::loadExtensions(): Cast failed" << endl; continue; } #else //KAB_EMBEDDED - QList<XXPortFactory> factorylist; + QList<XXPortFactory*> factorylist; factorylist.append(static_cast<XXPortFactory*>(init_microkaddrbk_csv_xxport())); factorylist.append(static_cast<XXPortFactory*>(init_microkaddrbk_kde2_xxport())); factorylist.append(static_cast<XXPortFactory*>(init_microkaddrbk_vcard_xxport())); //US factorylist.append(static_cast<XXPortFactory*>(init_microkaddrbk_opie_xxport())); factorylist.append(static_cast<XXPortFactory*>(init_microkaddrbk_qtopia_xxport())); factorylist.append(static_cast<XXPortFactory*>(init_microkaddrbk_sharpdtm_xxport())); - QListIterator<XXPortFactory> it(factorylist); - for ( ; it.current(); ++it ) - { - XXPortFactory *xxportFactory = it.current(); + for(QList<XXPortFactory*>::iterator it=factorylist.begin();it!=factorylist.end();++it) { + XXPortFactory *xxportFactory = *it; #endif //KAB_EMBEDDED XXPortObject *obj = xxportFactory->xxportObject( mCore->addressBook(), mCore ); if ( obj ) { mCore->addGUIClient( obj ); mXXPortObjects.insert( obj->identifier(), obj ); connect( obj, SIGNAL( exportActivated( const QString&, const QString& ) ), this, SLOT( slotExport( const QString&, const QString& ) ) ); connect( obj, SIGNAL( importActivated( const QString&, const QString& ) ), this, SLOT( slotImport( const QString&, const QString& ) ) ); } } } PreviewDialog::PreviewDialog( const KABC::Addressee &addr, QWidget *parent, const char *name ) : KDialogBase( Plain, i18n( "Import this contact?" ), Ok | User1| User2, Ok, parent, name, true, true ,i18n( "Import all!" ),i18n( "No" ) ) { QWidget *page = plainPage(); - QVBoxLayout *layout = new QVBoxLayout( page, marginHint(), spacingHint() ); + Q3VBoxLayout *layout = new Q3VBoxLayout( page, marginHint(), spacingHint() ); connect( this, SIGNAL( user1Clicked() ), this, SLOT ( slotClose() ) ); connect( this, SIGNAL( user2Clicked() ), this, SLOT ( slotCancel() ) ); KABC::AddresseeView *view = new KABC::AddresseeView( page ); view->setAddressee( addr ); layout->addWidget( view ); #ifdef DESKTOP_VERSION resize( 640, 480 ); #else showMaximized(); #endif } -#ifndef KAB_EMBEDDED -#include "xxportmanager.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_xxportmanager.cpp" #endif //KAB_EMBEDDED - diff --git a/kaddressbook/xxportmanager.h b/kaddressbook/xxportmanager.h index e801d9b..0528922 100644 --- a/kaddressbook/xxportmanager.h +++ b/kaddressbook/xxportmanager.h @@ -1,80 +1,80 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #ifndef XXPORTMANAGER_H #define XXPORTMANAGER_H -#include <qdict.h> +#include <q3dict.h> #include <qobject.h> #include <kurl.h> #include "xxportobject.h" class KABCore; class XXPortManager : public QObject { Q_OBJECT public: XXPortManager( KABCore *core, QObject *parent, const char *name = 0 ); ~XXPortManager(); void restoreSettings(); void saveSettings(); static KURL importURL; static QString importData; public slots: void importVCard( const KURL &url ); void importVCard( const KURL &url, bool showPreview ); void importVCard( const QString &vCard, bool showPreview ); signals: void modified(); protected slots: void noPreview(); void slotImport( const QString&, const QString& ); void slotExport( const QString&, const QString& ); private: void loadPlugins(); - QDict<XXPortObject> mXXPortObjects; + Q3Dict<XXPortObject> mXXPortObjects; KABCore *mCore; bool mShowPreview; }; #endif diff --git a/kaddressbook/xxportobject.cpp b/kaddressbook/xxportobject.cpp index bd9d986..2d8d0ff 100644 --- a/kaddressbook/xxportobject.cpp +++ b/kaddressbook/xxportobject.cpp @@ -1,276 +1,276 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include <qmap.h> #include <qfile.h> #include <qsignalmapper.h> #include <kaction.h> #include <kmessagebox.h> #include <factory.h> #include "kabcore.h" #include "addressee.h" #include "tmpaddressbook.h" #include "xxportobject.h" class XXPortObject::XXPortObjectPrivate { public: QSignalMapper *mExportMapper; QSignalMapper *mImportMapper; }; XXPortObject::XXPortObject( KABC::AddressBook *ab, QWidget *parent, const char *name ) : QObject( parent, name ), mAddressBook( ab ), mParentWidget( parent ), d( new XXPortObjectPrivate ) { d->mExportMapper = new QSignalMapper( this ); d->mImportMapper = new QSignalMapper( this ); connect( d->mExportMapper, SIGNAL( mapped( const QString& ) ), SLOT( slotExportActivated( const QString& ) ) ); connect( d->mImportMapper, SIGNAL( mapped( const QString& ) ), SLOT( slotImportActivated( const QString& ) ) ); } XXPortObject::~XXPortObject() { delete d; d = 0; } bool XXPortObject::exportContacts( const KABC::AddresseeList&, const QString& ) { // do nothing return false; } KABC::AddresseeList XXPortObject::importContacts( const QString& ) const { // do nothing return KABC::AddresseeList(); } void XXPortObject::createImportAction( const QString &label, const QString &data ) { #ifdef KAB_EMBEDDED KABCore* kabcore = (KABCore*)mParentWidget; #endif //KAB_EMBEDDED QString id = "file_import_" + identifier() + ( data.isEmpty() ? QString( "" ) : "_" + data ); #ifndef KAB_EMBEDDED KAction *action = new KAction( label, 0, d->mImportMapper, SLOT( map() ), actionCollection(), id.latin1() ); #else //KAB_EMBEDDED KAction *action = new KAction( label, 0, d->mImportMapper, SLOT( map() ), kabcore->actionCollection(), id.latin1() ); #endif //KAB_EMBEDDED d->mImportMapper->setMapping( action, ( data.isEmpty() ? QString( "<empty>" ) : data ) ); #ifndef KAB_EMBEDDED setXMLFile( identifier() + "_xxportui.rc" ); #endif //KAB_EMBEDDED #ifdef KAB_EMBEDDED action->plug((QWidget*)kabcore->getImportMenu()); #endif //KAB_EMBEDDED } void XXPortObject::createExportAction( const QString &label, const QString &data ) { #ifdef KAB_EMBEDDED KABCore* kabcore = (KABCore*)mParentWidget; #endif //KAB_EMBEDDED QString id = "file_export_" + identifier() + ( data.isEmpty() ? QString( "" ) : "_" + data ); #ifndef KAB_EMBEDDED KAction *action = new KAction( label, 0, d->mExportMapper, SLOT( map() ), actionCollection(), id.latin1() ); #else //KAB_EMBEDDED KAction *action = new KAction( label, 0, d->mExportMapper, SLOT( map() ), kabcore->actionCollection(), id.latin1() ); #endif //KAB_EMBEDDED d->mExportMapper->setMapping( action, ( data.isEmpty() ? QString( "<empty>" ) : data ) ); #ifndef KAB_EMBEDDED setXMLFile( identifier() + "_xxportui.rc" ); #endif //KAB_EMBEDDED #ifdef KAB_EMBEDDED action->plug((QWidget*)kabcore->getExportMenu()); #endif //KAB_EMBEDDED } KABC::AddressBook *XXPortObject::addressBook() const { return mAddressBook; } QWidget *XXPortObject::parentWidget() const { return mParentWidget; } void XXPortObject::slotExportActivated( const QString &data ) { emit exportActivated( identifier(), ( data == "<empty>" ? QString::null : data ) ); } void XXPortObject::slotImportActivated( const QString &data ) { emit importActivated( identifier(), ( data == "<empty>" ? QString::null : data ) ); } /******************************************************************** * *******************************************************************/ XXPortResourceObject::XXPortResourceObject( KABC::AddressBook *ab, QWidget *parent, const char *name ) : XXPortObject( ab, parent, name ), mFactory(0) { mFactory = KRES::Factory::self( "tmpcontact" ); } XXPortResourceObject::~XXPortResourceObject() { //do not delete the factory. It is a singleton, and selfcontained } bool XXPortResourceObject::isAvailable() { return (mFactory != 0); } bool XXPortResourceObject::_exportContacts( const KABC::AddresseeList &list, const QString& identifier, const QString& fileName ) { //create new resource KABC::Resource* mResource = (KABC::Resource*)(mFactory->resource( this->identifier(), 0 )); if (mResource == 0) return false; if (fileName != QString::null) { mResource->setFileName( fileName ); } else return false; KABC::TmpAddressBook tmpAB; bool res = tmpAB.addResource( mResource ); if (res == false) { delete mResource; return false; } if ( QFile::exists ( fileName ) ) { res = tmpAB.load(); if (res == false) { //removeResource deletes also the resource object, if the linkcount is 0 tmpAB.removeResource( mResource ); return false; } //Now check if the file has already entries, and ask the user if he wants to delete them first. if (tmpAB.begin() != tmpAB.end()) { QString text( i18n( "Do you want to remove<br>all existing entries from<br>%1<br>before exporting.?" ) ); if ( KMessageBox::questionYesNo( parentWidget(), text.arg( fileName ) ) == KMessageBox::Yes ) { // Clean the database.. tmpAB.clear(); } } } KABC::Addressee::List::ConstIterator it; for ( it = list.begin(); it != list.end(); ++it ) { tmpAB.insertAddressee(*it); } KABC::Ticket * ticket = tmpAB.requestSaveTicket(mResource); res = false; if (ticket != 0) res = tmpAB.save( ticket ); //removeResource deletes also the resource object, if the linkcount is 0 tmpAB.removeResource( mResource ); return res; } KABC::AddresseeList XXPortResourceObject::_importContacts( const QString& identifier, const QString& fileName ) const { KABC::Resource* mResource = (KABC::Resource*)(mFactory->resource( this->identifier(), 0 )); if (mResource == 0) return KABC::AddresseeList(); KABC::AddresseeList adrlst; if (fileName != QString::null) mResource->setFileName( fileName ); KABC::TmpAddressBook tmpAB; bool res = tmpAB.addResource( mResource ); if (res == false) { delete mResource; return KABC::AddresseeList(); } res = tmpAB.load(); adrlst = tmpAB.allAddressees(); //remove resource deletes also the Resourceobject, if the linkcount is 0 tmpAB.removeResource( mResource ); return adrlst; } -#ifndef KAB_EMBEDDED -#include "xxportobject.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_xxportobject.cpp" #endif //KAB_EMBEDDED diff --git a/kaddressbook/xxportselectdialog.cpp b/kaddressbook/xxportselectdialog.cpp index 278cab0..088bffa 100644 --- a/kaddressbook/xxportselectdialog.cpp +++ b/kaddressbook/xxportselectdialog.cpp @@ -1,342 +1,345 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Anders Lund <anders.lund@lund.tdcadsl.dk> Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /* Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include <kabc/addressbook.h> #include <kapplication.h> #include <kcombobox.h> #include <klocale.h> #include <kglobal.h> #include <qapplication.h> -#include <qbuttongroup.h> +#include <QDesktopWidget> +#include <q3buttongroup.h> #include <qcombobox.h> -#include <qheader.h> +#include <q3header.h> #include <qlabel.h> #include <qlayout.h> -#include <qlistview.h> +#include <q3listview.h> #include <qpushbutton.h> #include <qradiobutton.h> #include <qstringlist.h> -#include <qwhatsthis.h> +#include <q3whatsthis.h> +//Added by qt3to4: +#include <Q3GridLayout> +#include <Q3Frame> +#include <Q3VBoxLayout> #include "kabcore.h" #include "kabprefs.h" #include "xxportselectdialog.h" XXPortSelectDialog::XXPortSelectDialog( KABCore *core, bool sort, QWidget* parent, const char* name ) : KDialogBase( Plain, i18n( "Choose contact selection" ), Help | Ok | Cancel, Ok, parent, name, true, true ), mCore( core ), mUseSorting( sort ) { initGUI(); connect( mFiltersCombo, SIGNAL( activated( int ) ), SLOT( filterChanged( int ) ) ); - connect( mCategoriesView, SIGNAL( clicked( QListViewItem* ) ), - SLOT( categoryClicked( QListViewItem* ) ) ); + connect( mCategoriesView, SIGNAL( clicked( Q3ListViewItem* ) ), + SLOT( categoryClicked( Q3ListViewItem* ) ) ); // setup filters #ifndef KAB_EMBEDDED mFilters = Filter::restore( kapp->config(), "Filter" ); Filter::List::iterator filterIt; #else //KAB_EMBEDDED mFilters = Filter::restore( KGlobal::config(), "Filter" ); Filter::List::Iterator filterIt; #endif //KAB_EMBEDDED QStringList filters; for ( filterIt = mFilters.begin(); filterIt != mFilters.end(); ++filterIt ) filters.append( (*filterIt).name() ); mFiltersCombo->insertStringList( filters ); mUseFilters->setEnabled( filters.count() > 0 ); // setup categories QStringList categories = KABPrefs::instance()->mCustomCategories; QStringList::Iterator it; for ( it = categories.begin(); it != categories.end(); ++it ) - new QCheckListItem( mCategoriesView, *it, QCheckListItem::CheckBox ); + new Q3CheckListItem( mCategoriesView, *it, Q3CheckListItem::CheckBox ); mUseCategories->setEnabled( categories.count() > 0 ); int count = mCore->selectedUIDs().count(); mUseSelection->setEnabled( count != 0 ); mUseSelection->setChecked( count > 1 ); mSortTypeCombo->insertItem( i18n( "Ascending" ) ); mSortTypeCombo->insertItem( i18n( "Descending" ) ); mFields = mCore->addressBook()->fields( KABC::Field::All ); KABC::Field::List::Iterator fieldIt; for ( fieldIt = mFields.begin(); fieldIt != mFields.end(); ++fieldIt ) mFieldCombo->insertItem( (*fieldIt)->label() ); } QStringList XXPortSelectDialog::uids() { QStringList uidlist; KABC::AddresseeList list = contacts(); KABC::Addressee::List::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) uidlist.append((*it).uid()); return uidlist; } void XXPortSelectDialog::tagSelected() { if ( mUseSelection->isChecked() ) { QStringList selection = mCore->selectedUIDs(); KABC::AddressBook::Iterator it; for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) { if ( selection.findIndex((*it).uid()) >= 0 ) (*it).setTagged( true ); } } else if ( mUseFilters->isChecked() ) { // find contacts that can pass selected filter Filter::List::Iterator filterIt; for ( filterIt = mFilters.begin(); filterIt != mFilters.end(); ++filterIt ) if ( (*filterIt).name() == mFiltersCombo->currentText() ) break; KABC::AddressBook::Iterator it; for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) { if ( (*filterIt).filterAddressee( *it ) ) (*it).setTagged( true ); } } else if ( mUseCategories->isChecked() ) { QStringList categorieList = categories(); KABC::AddressBook::Iterator it; for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) { QStringList tmp( (*it).categories() ); QStringList::Iterator tmpIt; for ( tmpIt = tmp.begin(); tmpIt != tmp.end(); ++tmpIt ) if ( categorieList.contains( *tmpIt ) ) { (*it).setTagged( true ); break; } } } else { // create a string list of all entries: KABC::AddressBook::Iterator it; for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) (*it).setTagged( true ); } } KABC::AddresseeList XXPortSelectDialog::contacts() { KABC::AddresseeList list; if ( mUseSelection->isChecked() ) { QStringList::Iterator it; QStringList selection = mCore->selectedUIDs(); for ( it = selection.begin(); it != selection.end(); ++it ) { KABC::Addressee addr = mCore->addressBook()->findByUid( *it ); if ( !addr.isEmpty() ) if ( addr.uid().left( 19 ) != QString("last-syncAddressee-") ) list.append( addr ); } } else if ( mUseFilters->isChecked() ) { // find contacts that can pass selected filter Filter::List::Iterator filterIt; for ( filterIt = mFilters.begin(); filterIt != mFilters.end(); ++filterIt ) if ( (*filterIt).name() == mFiltersCombo->currentText() ) break; KABC::AddressBook::Iterator it; for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) { if ( (*filterIt).filterAddressee( *it ) ) if ((*it).uid().left( 19 ) != QString("last-syncAddressee-") ) list.append( *it ); } } else if ( mUseCategories->isChecked() ) { QStringList categorieList = categories(); KABC::AddressBook::Iterator it; for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) { QStringList tmp( (*it).categories() ); QStringList::Iterator tmpIt; for ( tmpIt = tmp.begin(); tmpIt != tmp.end(); ++tmpIt ) if ( categorieList.contains( *tmpIt ) ) { if ((*it).uid().left( 19 ) != QString("last-syncAddressee-") ) list.append( *it ); break; } } } else { // create a string list of all entries: KABC::AddressBook::Iterator it; for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) if ((*it).uid().left( 19 ) != QString("last-syncAddressee-") ) list.append( *it ); } if ( mUseSorting ) { list.setReverseSorting( mSortTypeCombo->currentItem() == 1 ); uint pos = mFieldCombo->currentItem(); if ( pos < mFields.count() ) list.sortByField( mFields[ pos ] ); } return list; } QStringList XXPortSelectDialog::categories() const { QStringList list; - QListViewItemIterator it( mCategoriesView ); + Q3ListViewItemIterator it( mCategoriesView ); for ( ; it.current(); ++it ) { - QCheckListItem* qcli = static_cast<QCheckListItem*>(it.current()); + Q3CheckListItem* qcli = static_cast<Q3CheckListItem*>(it.current()); if ( qcli->isOn() ) list.append( it.current()->text( 0 ) ); } return list; } void XXPortSelectDialog::filterChanged( int ) { mUseFilters->setChecked( true ); } -void XXPortSelectDialog::categoryClicked( QListViewItem *i ) +void XXPortSelectDialog::categoryClicked( Q3ListViewItem *i ) { - QCheckListItem *qcli = static_cast<QCheckListItem*>( i ); + Q3CheckListItem *qcli = static_cast<Q3CheckListItem*>( i ); if ( qcli->isOn() ) mUseCategories->setChecked( true ); } void XXPortSelectDialog::slotHelp() { #ifndef KAB_EMBEDDED kapp->invokeHelp( "import-and-export" ); #else //KAB_EMBEDDED qDebug("XXPortSelectDialog::slotHelp is not implemented yet"); #endif //KAB_EMBEDDED } void XXPortSelectDialog::initGUI() { - QFrame *page = plainPage(); + Q3Frame *page = plainPage(); - QVBoxLayout *topLayout = new QVBoxLayout( page, KDialog::marginHintSmall(), + Q3VBoxLayout *topLayout = new Q3VBoxLayout( page, KDialog::marginHintSmall(), KDialog::spacingHintSmall() ); QLabel *label = new QLabel( i18n( "Which contacts do you want to select?" ), page ); topLayout->addWidget( label ); - mButtonGroup = new QButtonGroup( i18n( "Contact Selection" ), page ); + mButtonGroup = new Q3ButtonGroup( i18n( "Contact Selection" ), page ); mButtonGroup->setColumnLayout( 0, Qt::Vertical ); mButtonGroup->layout()->setSpacing( KDialog::spacingHint() ); mButtonGroup->layout()->setMargin( KDialog::marginHint() ); - QGridLayout *groupLayout = new QGridLayout( mButtonGroup->layout() ); + Q3GridLayout *groupLayout = new Q3GridLayout( mButtonGroup->layout() ); groupLayout->setAlignment( Qt::AlignTop ); mUseWholeBook = new QRadioButton( i18n( "&All" ), mButtonGroup ); mUseWholeBook->setChecked( true ); - QWhatsThis::add( mUseWholeBook, i18n( "Select the entire address book" ) ); + Q3WhatsThis::add( mUseWholeBook, i18n( "Select the entire address book" ) ); groupLayout->addWidget( mUseWholeBook, 0, 0 ); mUseSelection = new QRadioButton( i18n( "&Selected" ), mButtonGroup ); - QWhatsThis::add( mUseSelection, i18n( "Only contacts selected in KAddressBook.\n" + Q3WhatsThis::add( mUseSelection, i18n( "Only contacts selected in KAddressBook.\n" "This option is disabled if no contacts are selected." ) ); groupLayout->addWidget( mUseSelection, 1, 0 ); mUseFilters = new QRadioButton( i18n( "By matching &filter" ), mButtonGroup ); - QWhatsThis::add( mUseFilters, i18n( "Only contacts matching the selected filter.\n" + Q3WhatsThis::add( mUseFilters, i18n( "Only contacts matching the selected filter.\n" "This option is disabled if you haven't defined any filters" ) ); groupLayout->addWidget( mUseFilters, 2, 0 ); mUseCategories = new QRadioButton( i18n( "By Cate&gories" ), mButtonGroup ); - QWhatsThis::add( mUseCategories, i18n( "Only contacts who are members of a category that is checked on the list to the left.\n" + Q3WhatsThis::add( mUseCategories, i18n( "Only contacts who are members of a category that is checked on the list to the left.\n" "This option is disabled if you have no categories." ) ); groupLayout->addWidget( mUseCategories, 3, 0 ); mFiltersCombo = new QComboBox( false, mButtonGroup ); mFiltersCombo->setSizePolicy(QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - QWhatsThis::add( mFiltersCombo, i18n( "Select a filter to decide which contacts to select." ) ); + Q3WhatsThis::add( mFiltersCombo, i18n( "Select a filter to decide which contacts to select." ) ); groupLayout->addWidget( mFiltersCombo, 2, 1 ); - mCategoriesView = new QListView( mButtonGroup ); + mCategoriesView = new Q3ListView( mButtonGroup ); mCategoriesView->addColumn( "" ); mCategoriesView->header()->hide(); - QWhatsThis::add( mCategoriesView, i18n( "Check the categories whose members you want to select." ) ); + Q3WhatsThis::add( mCategoriesView, i18n( "Check the categories whose members you want to select." ) ); groupLayout->addWidget( mCategoriesView, 3, 1 ); mCategoriesView->setSizePolicy(QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); //if (QApplication::desktop()->height() == 480 ) // mCategoriesView->setMaximumHeight( 240 ); topLayout->addWidget( mButtonGroup ); - QButtonGroup *sortingGroup = new QButtonGroup( i18n( "Sorting" ), page ); + Q3ButtonGroup *sortingGroup = new Q3ButtonGroup( i18n( "Sorting" ), page ); sortingGroup->setColumnLayout( 0, Qt::Vertical ); - QGridLayout *sortLayout = new QGridLayout( sortingGroup->layout(), 2, 2, + Q3GridLayout *sortLayout = new Q3GridLayout( sortingGroup->layout(), 2, 2, KDialog::spacingHint() ); sortLayout->setAlignment( Qt::AlignTop ); label = new QLabel( i18n( "Criterion:" ), sortingGroup ); sortLayout->addWidget( label, 0, 0 ); #ifndef KAB_EMBEDDED mFieldCombo = new KComboBox( false, sortingGroup ); #else //KAB_EMBEDDED //US Combobox is not editable anyway mFieldCombo = new KComboBox( sortingGroup ); #endif //KAB_EMBEDDED sortLayout->addWidget( mFieldCombo, 0, 1 ); label = new QLabel( i18n( "Order:" ), sortingGroup ); sortLayout->addWidget( label, 1, 0 ); #ifndef KAB_EMBEDDED mSortTypeCombo = new KComboBox( false, sortingGroup ); #else //KAB_EMBEDDED //US Combobox is not editable anyway mSortTypeCombo = new KComboBox( sortingGroup ); #endif //KAB_EMBEDDED sortLayout->addWidget( mSortTypeCombo, 1, 1 ); topLayout->addWidget( sortingGroup ); if ( !mUseSorting ) sortingGroup->hide(); if (QApplication::desktop()->width() <= 640 ) { showMaximized(); #ifndef DESKTOP_VERSION hideButtons(); #endif } } -#ifndef KAB_EMBEDDED -#include "xxportselectdialog.moc" +#ifndef KAB_EMBEDDED_ +#include "moc_xxportselectdialog.cpp" #endif //KAB_EMBEDDED - - diff --git a/kaddressbook/xxportselectdialog.h b/kaddressbook/xxportselectdialog.h index 28b1fef..208f4f9 100644 --- a/kaddressbook/xxportselectdialog.h +++ b/kaddressbook/xxportselectdialog.h @@ -1,83 +1,83 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Anders Lund <anders.lund@lund.tdcadsl.dk> Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef XXPORTSELECTDIALOG_H #define XXPORTSELECTDIALOG_H #include <kabc/addresseelist.h> #include <kabc/field.h> #include <kdialogbase.h> #include "filter.h" -class QButtonGroup; +class Q3ButtonGroup; class QComboBox; -class QListView; -class QListViewItem; +class Q3ListView; +class Q3ListViewItem; class QRadioButton; class KABCore; class KComboBox; class XXPortSelectDialog : public KDialogBase { Q_OBJECT public: XXPortSelectDialog( KABCore *core, bool sort, QWidget* parent, const char* name = 0 ); KABC::AddresseeList contacts(); void tagSelected(); QStringList uids(); private slots: void filterChanged( int ); - void categoryClicked( QListViewItem * i ); + void categoryClicked( Q3ListViewItem * i ); protected slots: void slotHelp(); private: void initGUI(); QStringList categories() const; - QButtonGroup* mButtonGroup; + Q3ButtonGroup* mButtonGroup; QRadioButton* mUseCategories; QRadioButton* mUseFilters; QRadioButton* mUseWholeBook; QRadioButton* mUseSelection; QComboBox* mFiltersCombo; - QListView* mCategoriesView; + Q3ListView* mCategoriesView; KComboBox *mFieldCombo; KComboBox *mSortTypeCombo; KABCore *mCore; KABC::AddresseeList mAddresseeList; Filter::List mFilters; KABC::Field::List mFields; bool mUseSorting; }; #endif |