kitchensync Library API Documentation

configpart.cpp

00001 /*
00002     This file is part of KitchenSync.
00003 
00004     Copyright (c) 2002 Holger Freyther <freyther@kde.org>
00005     Copyright (c) 2002 Maximilian Reiß <harlekin@handhelds.org>
00006 
00007     This library is free software; you can redistribute it and/or
00008     modify it under the terms of the GNU Library General Public
00009     License as published by the Free Software Foundation; either
00010     version 2 of the License, or (at your option) any later version.
00011 
00012     This library is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015     Library General Public License for more details.
00016 
00017     You should have received a copy of the GNU Library General Public License
00018     along with this library; see the file COPYING.LIB.  If not, write to
00019     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00020     Boston, MA 02111-1307, USA.
00021 */
00022 
00023 #include <qcheckbox.h>
00024 #include <qgroupbox.h>
00025 #include <qlabel.h>
00026 #include <qlayout.h>
00027 #include <qlineedit.h>
00028 //#include <qspacer.h>
00029 #include <qcombobox.h>
00030 
00031 #include <kapplication.h>
00032 #include <klocale.h>
00033 
00034 #include "configpart.h"
00035 
00036 using namespace KSync;
00037 
00038 namespace {
00039     void setCurrent( const QString& str, QComboBox* box ) {
00040         if (str.isEmpty() ) return;
00041         uint b = box->count();
00042         for ( uint i = 0; i < b; i++ ) {
00043             if ( box->text(i) == str ) {
00044                 box->setCurrentItem(i );
00045                 return;
00046             }
00047         }
00048         box->insertItem( str );
00049         box->setCurrentItem( b );
00050     }
00051 }
00052 
00053 ConfigPart::ConfigPart(const Kapabilities &kaps, QWidget *parent, const char *name )
00054   : ConfigWidget( parent, name )
00055 {
00056     init();
00057     initialize( kaps );
00058     m_kap = kaps;
00059 }
00060 ConfigPart::ConfigPart(const Kapabilities& kaps, const Kapabilities &src,
00061                QWidget* parent, const char* name )
00062     : ConfigWidget( parent, name ) {
00063     init();
00064     initialize( kaps );
00065     apply( src );
00066     m_kap = kaps;
00067 }
00068 ConfigPart::~ConfigPart() {
00069 }
00070 void ConfigPart::setCapabilities( const Kapabilities& caps) {
00071     apply( caps );
00072 }
00073 void ConfigPart::initialize(const Kapabilities &kaps ){
00074 //    kaps.dump();
00075     m_mainLayout = new QGridLayout( this, 6, 3 );
00076 
00077     if (  kaps.supportsMetaSyncing() ) {
00078         m_ckbMetaSyncing = new QCheckBox(i18n( "Enable metasyncing"),  this );
00079         m_mainLayout->addWidget(m_ckbMetaSyncing,  0,  0);
00080         m_ckbMetaSyncing->setChecked( kaps.isMetaSyncingEnabled() );
00081     }
00082 
00083     QLabel *lbl;
00084     push = false;
00085     if ( kaps.supportsPushSync() ) {
00086         push = true;
00087         lbl = new QLabel(i18n("You can push syncs to this device"), this );
00088     }else
00089         lbl = new QLabel(i18n("You need to start the synchronization from your device"),  this );
00090     m_mainLayout->addWidget(lbl,  1,  0 );
00091 
00092     if ( kaps.canAutoHandle() )
00093         m_lblAutoHandle = new QLabel( i18n("This konnector establishes a connection to the device"),  this );
00094     else
00095         m_lblAutoHandle = new QLabel( i18n("To function properly you need to establish a connection"), this );
00096     m_mainLayout->addWidget( m_lblAutoHandle,  2,  0 );
00097 
00098     // Connection
00099     // column 0 = Label, 1= ComboBox, 2 = Space, 3 = Label, 4 = Combo
00100     m_grpConnection = new QGroupBox( i18n("Connection"),  this );
00101     m_conLayout = new QGridLayout(m_grpConnection,  4,  5);
00102 
00103     if ( !kaps.needsNetworkConnection() || kaps.canAutoHandle() ) {
00104 
00105         m_grpConnection->setEnabled( false );
00106     }else{
00107         m_grpConnection->setEnabled( true );
00108     }
00109 
00110     m_conLayout->setMargin( 12 );
00111     QSpacerItem *iti1b = new QSpacerItem(2, 10, QSizePolicy::Fixed,
00112                                          QSizePolicy::Fixed );
00113     m_conLayout->addItem( iti1b,  0, 0);
00114 
00115     // Source
00116     m_lblSrcIp = new QLabel(i18n("Source address: "),  m_grpConnection);
00117     m_conSrcIp = new QComboBox(m_grpConnection);
00118     m_conSrcIp->setEditable( TRUE );
00119     m_lblSrcIp->setBuddy( m_conSrcIp );
00120     m_conLayout->addWidget(m_lblSrcIp, 1, 0 );
00121     m_conLayout->addWidget(m_conSrcIp, 1, 1 );
00122     if (!kaps.needsIPs() || !kaps.needsSrcIP() ) {
00123         m_lblSrcIp->setEnabled( false );
00124         m_conSrcIp->setEnabled( false );
00125     }else{
00126         m_conSrcIp->insertItem( kaps.srcIP() );
00127     }
00128 
00129     //Destination
00130     m_lblDestIp = new QLabel(i18n("Destination address: "),  m_grpConnection );
00131     m_conDestIp = new QComboBox(m_grpConnection);
00132     m_conDestIp->setEditable( TRUE );
00133     m_lblDestIp->setBuddy( m_conDestIp );
00134     m_conLayout->addWidget( m_lblDestIp, 1, 3 );
00135     m_conLayout->addWidget( m_conDestIp, 1, 4 );
00136     if (!kaps.needsIPs() || !kaps.needsDestIP() ) {
00137         m_lblDestIp->setEnabled( false );
00138         m_conDestIp->setEnabled( false );
00139     }else{
00140         QStringList ips = kaps.ipProposals();
00141         QStringList::ConstIterator it;
00142         for ( it = ips.begin(); it != ips.end(); ++it ) {
00143             m_conDestIp->insertItem( (*it) );
00144         }
00145         //m_conDestIp->insertItem(kaps.destIP(),  0 );
00146     }
00147     //user
00148     m_lblUser = new QLabel(i18n("User:"), m_grpConnection );
00149     m_conUser = new QComboBox(m_grpConnection );
00150     m_conUser->setEditable( TRUE );
00151     m_lblUser->setBuddy( m_conUser );
00152     m_conLayout->addWidget( m_lblUser,  2,  0 );
00153     m_conLayout->addWidget( m_conUser,  2,  1 );
00154 
00155     //pass
00156     m_lblPass = new QLabel(i18n("Password:"),  m_grpConnection );
00157     m_conPass = new QComboBox( m_grpConnection );
00158     m_conPass->setEditable( TRUE );
00159     m_lblPass->setBuddy( m_conPass );
00160     m_conLayout->addWidget( m_lblPass,  2,  3 );
00161     m_conLayout->addWidget( m_conPass,  2,  4 );
00162 
00163     if ( kaps.needAuthentication() ) {
00164         QValueList<QPair<QString, QString> > list = kaps.userProposals();
00165         QValueList<QPair<QString, QString> >::ConstIterator it;
00166         for (it = list.begin(); it != list.end(); ++it ) {
00167             m_conUser->insertItem( (*it).first );
00168             m_conPass->insertItem( (*it).second);
00169         }
00170         m_conUser->insertItem(kaps.user(),  0);
00171         m_conPass->insertItem(kaps.password(),  0 );
00172     }else{
00173         m_lblPass->setEnabled( false );
00174         m_conPass->setEnabled( false );
00175         m_lblUser->setEnabled( false );
00176         m_conUser->setEnabled( false );
00177     }
00178     // port
00179     m_lblPort = new QLabel( i18n("Port:"),  m_grpConnection);
00180     m_conPort = new QComboBox( m_grpConnection );
00181     m_conPort->setEditable(TRUE);
00182     m_lblPort->setBuddy( m_conPort );
00183     m_conLayout->addWidget( m_lblPort,  3,  0 );
00184     m_conLayout->addWidget( m_conPort,  3,  1 );
00185     QMemArray<int> ints = kaps.ports();
00186     if ( ints.isEmpty() ) {
00187         m_lblPort->setEnabled( false );
00188         m_conPort->setEnabled( false );
00189     }else{
00190         for (uint i = 0; i < ints.size(); i++ ) {
00191             m_conPort->insertItem( QString::number( ints[i] ) );
00192         }
00193         //_conPort->insertItem( QString::number( kaps.currentPort() ),  0 );
00194     }
00195 
00196     // add the Connection Groupbox
00197     m_mainLayout->addWidget( m_grpConnection,  3,  0 );
00198 
00199     // Model specific
00200     m_grpModel = new QGroupBox( i18n("Model"),  this );
00201     m_grpLayout = new QGridLayout( m_grpModel, 6,  2 );
00202 
00203     m_grpLayout->setMargin( 12 );
00204     QSpacerItem *iti1c = new QSpacerItem(2, 10, QSizePolicy::Fixed,
00205                                          QSizePolicy::Fixed );
00206     m_grpLayout->addItem( iti1c,  0, 0);
00207     // Devices
00208     m_lblDevice = new QLabel( i18n("Device: "), m_grpModel );
00209     m_cmbDevice = new QComboBox( m_grpModel );
00210     m_cmbDevice->setEditable( false );
00211     m_lblDevice->setBuddy( m_cmbDevice );
00212     m_grpLayout->addWidget( m_lblDevice, 1,  0 );
00213     m_grpLayout->addWidget( m_cmbDevice, 1,  1 );
00214     QStringList devices = kaps.models();
00215     if ( devices.isEmpty() ) {
00216         m_lblDevice->setEnabled( false );
00217         m_cmbDevice->setEnabled( false );
00218     }else{
00219         for ( QStringList::ConstIterator it = devices.begin(); it != devices.end(); ++it ) {
00220             m_cmbDevice->insertItem( (*it) );
00221         }
00222         //m_cmbDevice->insertItem( kaps.currentModel() , 0);
00223     }
00224     // the device Name
00225     m_lblName = new QLabel( i18n("Name:"), m_grpModel );
00226     m_lneName = new QLineEdit(m_grpModel );
00227     m_lblName->setBuddy( m_lneName );
00228     m_lblName->setEnabled( kaps.needsModelName() );
00229     m_lneName->setEnabled( kaps.needsModelName() );
00230     m_grpLayout->addWidget( m_lblName, 2, 0 );
00231     m_grpLayout->addWidget( m_lneName, 2, 1 );
00232 
00233 
00234     // Connection Mode usb, paralell, net,....
00235     m_lblConnection = new QLabel( i18n("Connection:"),  m_grpModel );
00236     m_cmbConnection = new QComboBox( m_grpModel );
00237     m_cmbConnection->setEditable( TRUE );
00238     m_lblConnection->setBuddy( m_cmbConnection );
00239     m_grpLayout->addWidget( m_lblConnection, 3, 0 );
00240     m_grpLayout->addWidget( m_cmbConnection, 3, 1 );
00241     QStringList conList = kaps.connectionModes();
00242     if ( conList.isEmpty() ) {
00243         m_lblConnection->setEnabled( false );
00244         m_cmbConnection->setEnabled( false );
00245     }else{
00246         for ( QStringList::ConstIterator it = conList.begin(); it != conList.end(); ++it ) {
00247             m_cmbConnection->insertItem( (*it) );
00248         }
00249         //m_cmbConnection->insertItem( kaps.currentConnectionMode(), 0);
00250 
00251     }
00252     //Mode USER
00253     m_grpUser = new QLabel( i18n("User:"),  m_grpModel );
00254     m_cmbUser = new QComboBox( m_grpModel );
00255     m_cmbUser->setEditable( TRUE );
00256     m_grpUser->setBuddy( m_cmbUser );
00257     m_grpLayout->addWidget(m_grpUser,  4, 0);
00258     m_grpLayout->addWidget(m_cmbUser,  4, 1);
00259     m_grpUser->setEnabled( false );
00260     m_cmbUser->setEnabled( false );
00261 
00262     // MODE PASS
00263     m_grpPass = new QLabel( i18n("Pass:"),  m_grpModel );
00264     m_cmbPass = new QComboBox( m_grpModel );
00265     m_grpPass->setBuddy( m_cmbPass );
00266     m_cmbPass->setEditable( TRUE );
00267     m_grpLayout->addWidget( m_grpPass,  5, 0 );
00268     m_grpLayout->addWidget( m_cmbPass,  5, 1 );
00269     m_grpPass->setEnabled( false );
00270     m_cmbPass->setEnabled( false );
00271 
00272     m_mainLayout->addWidget( m_grpModel,  4,  0 );
00273 
00274     QMap<QString, QString> specs = kaps.extras();
00275     if ( !specs.isEmpty() ) {
00276         m_grpDevice = new QGroupBox( i18n("Device Specific"),  this );
00277         m_devLay = new QGridLayout(m_grpDevice, specs.count()+1, 2);
00278         QSpacerItem *iti1d = new QSpacerItem(4, 14, QSizePolicy::Fixed,
00279                                              QSizePolicy::Fixed );
00280         m_devLay->setMargin( 12 );
00281         m_devLay->addItem( iti1d,  0,  0 );
00282         int i = 0;
00283         QLabel *lbl;
00284         QLineEdit *edit;
00285         m_devGroup.clear();
00286         for ( QMap<QString,  QString>::ConstIterator it = specs.begin(); it != specs.end(); ++it ) {
00287             lbl = new QLabel(it.key() , m_grpDevice );
00288             edit = new QLineEdit(m_grpDevice,  it.key().latin1() );
00289             edit->setText( it.data() );
00290             lbl->setBuddy(edit);
00291             m_devGroup.insert(it.key(),  edit);
00292 
00293             m_devLay->addWidget( lbl,  i,  0 );
00294             m_devLay->addWidget( edit, i,  1 );
00295             ++i;
00296         }
00297         m_mainLayout->addWidget( m_grpDevice,  5,  0 );
00298     }
00299 }
00300 Kapabilities ConfigPart::capabilities()const
00301 {
00302     Kapabilities kaps = m_kap;
00303     // ok first read all the extras which is fairly easy
00304     if ( !m_devGroup.isEmpty() ) {
00305         for ( QMap<QString, QLineEdit*>::ConstIterator it = m_devGroup.begin(); it != m_devGroup.end(); ++it ) {
00306             kaps.setExtraOption( it.key(), it.data()->text() );
00307         }
00308     }
00309     // meta syncing
00310     if ( m_ckbMetaSyncing != 0 ) {
00311         kaps.setMetaSyncingEnabled( m_ckbMetaSyncing->isChecked() );
00312     }
00313     // GRP IPs + User + Password
00314     if ( m_grpConnection != 0 && m_grpConnection->isEnabled() ) {
00315         if ( m_conSrcIp->isEnabled() )
00316             kaps.setSrcIP( m_conSrcIp->currentText() );
00317         if ( m_conDestIp->isEnabled( ) )
00318             kaps.setDestIP(m_conDestIp->currentText() );
00319         if ( m_conUser->isEnabled() )
00320             kaps.setUser( m_conUser->currentText() );
00321         if ( m_conPass->isEnabled() )
00322             kaps.setPassword( m_conPass->currentText() );
00323         if ( m_conPort->isEnabled() )
00324             kaps.setCurrentPort( m_conPort->currentText().toInt() );
00325     }
00326     if ( m_cmbPass != 0 && m_cmbPass->isEnabled() )
00327         ;
00328     if ( m_cmbUser != 0 && m_cmbUser->isEnabled() )
00329         ;
00330     if ( m_cmbDevice != 0 && m_cmbDevice->isEnabled() )
00331         kaps.setCurrentModel(m_cmbDevice->currentText() );
00332     if ( m_cmbConnection != 0 && m_cmbConnection->isEnabled() )
00333         kaps.setCurrentConnectionMode( m_cmbConnection->currentText() );
00334 
00335     /* model name */
00336     if ( m_lneName->isEnabled() ) {
00337         QString str = m_lneName->text().isEmpty() ? kapp->randomString(10): m_lneName->text();
00338         kaps.setModelName( str );
00339     }
00340 
00341     return kaps;
00342 }
00343 
00344 void ConfigPart::init()
00345 {
00346     m_ckbMetaSyncing = 0;
00347     m_mainLayout = 0;
00348     m_lblAutoHandle = 0;
00349     m_grpConnection = 0;
00350     m_conLayout = 0;
00351 //    m_conSpacer = 0;
00352     m_conSrcIp = 0;
00353     m_conDestIp = 0;
00354     m_conUser = 0;
00355     m_conPass = 0;
00356     m_conPort = 0;
00357 
00358     m_lblSrcIp = 0;
00359     m_lblDestIp = 0;
00360     m_lblUser = 0;
00361     m_lblPass = 0;
00362     m_lblPort = 0;
00363 
00364     m_grpModel = 0;
00365     m_grpLayout = 0;
00366     m_lblDevice = 0;
00367     m_lblConnection = 0;
00368     m_cmbDevice = 0;
00369     m_cmbConnection = 0;
00370 
00371     m_grpDevice = 0;
00372     m_devLay = 0;
00373     m_grpFetch = 0;
00374     m_fetchAdd = 0;
00375 
00376     m_fetchBrowse = 0;
00377     m_fetchRem = 0;
00378     m_view = 0;
00379 
00380     m_lneName =0;
00381     m_lblName =0;
00382 }
00383 /*
00384  * here we're going to apply the choices
00385  */
00386 void ConfigPart::apply( const Kapabilities& caps ) {
00387     if (m_kap.needsIPs() || m_kap.needsSrcIP() ) {
00388         setCurrent( caps.srcIP(), m_conSrcIp );
00389     }
00390     if (m_kap.needsIPs() || m_kap.needsDestIP() ) {
00391         setCurrent( caps.destIP(), m_conDestIp );
00392     }
00393     if (m_kap.needAuthentication() ) {
00394         setCurrent( caps.user(), m_conUser );
00395         setCurrent( caps.password(), m_conPass );
00396     }
00397     if ( !m_kap.models().isEmpty() ) {
00398         setCurrent( caps.currentModel(), m_cmbDevice );
00399     }
00400     if ( m_kap.needsModelName() ) {
00401         m_lneName->setText( caps.modelName() );
00402     }
00403     if ( !m_kap.connectionModes().isEmpty() ) {
00404         setCurrent( caps.currentConnectionMode(), m_cmbConnection );
00405     }
00406     QMap<QString, QString> specs = caps.extras();
00407     for ( QMap<QString, QString>::ConstIterator it = specs.begin(); it != specs.end(); ++it ) {
00408         if (!m_devGroup.contains( it.key() ) ) continue;
00409         QLineEdit* edit = m_devGroup[it.key()];
00410         if (edit)
00411             edit->setText( it.data() );
00412     }
00413     if (!m_kap.ports().isEmpty() ) {
00414         setCurrent( QString::number( caps.currentPort() ), m_conPort );
00415     }
00416 }
KDE Logo
This file is part of the documentation for kitchensync Library Version 3.3.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Dec 21 14:23:39 2007 by doxygen 1.4.2 written by Dimitri van Heesch, © 1997-2003