kitchensync

profiledialog.cpp

00001 /*
00002     This file is part of KitchenSync.
00003 
00004     Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
00005     Copyright (c) 2002 Maximilian Reiß <harlekin@handhelds.org>
00006     Copyright (c) 2004 Cornelius Schumacher <schumacher@kde.org>
00007 
00008     This library is free software; you can redistribute it and/or
00009     modify it under the terms of the GNU Library General Public
00010     License as published by the Free Software Foundation; either
00011     version 2 of the License, or (at your option) any later version.
00012 
00013     This library is distributed in the hope that it will be useful,
00014     but WITHOUT ANY WARRANTY; without even the implied warranty of
00015     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016     Library General Public License for more details.
00017 
00018     You should have received a copy of the GNU Library General Public License
00019     along with this library; see the file COPYING.LIB.  If not, write to
00020     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00021     Boston, MA 02110-1301, USA.
00022 */
00023 
00024 #include "profiledialog.h"
00025 
00026 #include "profileitem.h"
00027 #include "profilewizard.h"
00028 
00029 #include <klocale.h>
00030 #include <kpushbutton.h>
00031 #include <klistview.h>
00032 
00033 #include <qlayout.h>
00034 #include <qlabel.h>
00035 #include <qpushbutton.h>
00036 
00037 using namespace KSync;
00038 
00039 ProfileDialog::ProfileDialog( const Profile::List &profiles,
00040                               const ActionPartService::List &parts )
00041   : KDialogBase( Plain, i18n("Configure Profiles"), Ok | Cancel, Ok, 0, 0, true,
00042                  false ),
00043     mAvailableParts( parts )
00044 {
00045   QWidget *topWidget = plainPage();
00046 
00047   QBoxLayout *topLayout = new QVBoxLayout( topWidget );
00048   topLayout->setSpacing( spacingHint() );
00049 
00050   QLabel *label = new QLabel( "<qt><b>" + i18n("Setup Profiles") + "</b></qt>", topWidget );
00051   topLayout->addWidget( label );
00052 
00053   label = new QLabel(
00054       i18n("A Profile contains information about which Parts\n"
00055            "should get loaded and used for the synchronization\n"
00056            "process." ),
00057       topWidget );
00058   topLayout->addWidget( label );
00059 
00060   QBoxLayout *listLayout = new QHBoxLayout( topLayout );
00061 
00062   mProfileList = new KListView( topWidget );
00063   mProfileList->addColumn( i18n( "Name" ) );
00064   mProfileList->setAllColumnsShowFocus( true );
00065   mProfileList->setFullWidth( true );
00066   listLayout->addWidget( mProfileList );  
00067   connect( mProfileList, SIGNAL( selectionChanged( QListViewItem* ) ),
00068            SLOT( slotSelectionChanged() ) );
00069 
00070   QBoxLayout *buttonLayout = new QVBoxLayout( listLayout );
00071   
00072   QPushButton *button = new QPushButton( i18n("Add..."), topWidget );
00073   buttonLayout->addWidget( button );
00074   connect( button, SIGNAL( clicked() ), SLOT( slotAdd() ) );
00075   
00076   mEditButton = new QPushButton( i18n("Edit..."), topWidget );
00077   buttonLayout->addWidget( mEditButton );
00078   connect( mEditButton, SIGNAL( clicked() ), SLOT( slotEdit() ) );
00079   
00080   mRemoveButton = new QPushButton( i18n("Remove"), topWidget );
00081   buttonLayout->addWidget( mRemoveButton );
00082   connect( mRemoveButton, SIGNAL( clicked() ), SLOT( slotRemove() ) );
00083   
00084   buttonLayout->addStretch();
00085 
00086   initListView( profiles );
00087 
00088   slotSelectionChanged();
00089 }
00090 
00091 ProfileDialog::~ProfileDialog()
00092 {
00093 }
00094 
00095 void ProfileDialog::initListView( const Profile::List& profiles )
00096 {
00097   Profile::List::ConstIterator it;
00098   for ( it = profiles.begin(); it != profiles.end(); ++it ) {
00099     new ProfileItem( mProfileList, (*it) );
00100   }
00101 }
00102 
00103 Profile::List ProfileDialog::profiles() const
00104 {
00105   Profile::List profiles;
00106 
00107   QListViewItemIterator it( mProfileList );
00108   for ( ; it.current(); ++it ) {
00109     ProfileItem *item = static_cast<ProfileItem *>( it.current() );
00110     profiles.append( item->profile() );
00111   }
00112 
00113   return profiles;
00114 }
00115 
00116 void ProfileDialog::slotRemove()
00117 {
00118   delete mProfileList->selectedItem();
00119 }
00120 
00121 void ProfileDialog::slotAdd()
00122 {
00123   ProfileWizard wiz( mAvailableParts );
00124 
00125   if ( wiz.exec() ) {
00126     new ProfileItem( mProfileList, wiz.profile() );
00127   }
00128 }
00129 
00130 void ProfileDialog::slotEdit()
00131 {
00132   ProfileItem *item =
00133       static_cast<ProfileItem *>( mProfileList->selectedItem() );
00134   if ( !item ) return;
00135 
00136   ProfileWizard wiz( item->profile(), mAvailableParts );
00137   if ( wiz.exec() ) {
00138     item->setProfile( wiz.profile() );
00139   }
00140 }
00141 
00142 void ProfileDialog::slotSelectionChanged()
00143 {
00144   bool state = (mProfileList->selectedItem() != 0);
00145 
00146   mEditButton->setEnabled( state );
00147   mRemoveButton->setEnabled( state );
00148 }
00149 
00150 #include "profiledialog.moc"
KDE Home | KDE Accessibility Home | Description of Access Keys