Diffstat (limited to 'noncore/net/opietooth/manager/bluebase.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/net/opietooth/manager/bluebase.cpp | 84 |
1 files changed, 53 insertions, 31 deletions
diff --git a/noncore/net/opietooth/manager/bluebase.cpp b/noncore/net/opietooth/manager/bluebase.cpp index 3f2f138..598ce16 100644 --- a/noncore/net/opietooth/manager/bluebase.cpp +++ b/noncore/net/opietooth/manager/bluebase.cpp @@ -10,24 +10,26 @@ * * * 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. * * * ***************************************************************************/ #include "bluebase.h" #include "scandialog.h" #include "hciconfwrapper.h" +#include <stdlib.h> + #include <qframe.h> #include <qlabel.h> #include <qpushbutton.h> #include <qlayout.h> #include <qvariant.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h> #include <qtabwidget.h> #include <qscrollview.h> #include <qvbox.h> #include <qmessagebox.h> @@ -35,48 +37,49 @@ #include <qlineedit.h> #include <qlistview.h> #include <qdir.h> #include <qpopupmenu.h> #include <qtimer.h> #include <qpe/resource.h> #include <qpe/config.h> #include <remotedevice.h> #include <services.h> +#include "devicehandler.h" #include "btconnectionitem.h" using namespace OpieTooth; BlueBase::BlueBase( QWidget* parent, const char* name, WFlags fl ) : BluetoothBase( parent, name, fl ) { m_localDevice = new Manager( "hci0" ); connect( PushButton2, SIGNAL( clicked() ), this, SLOT(startScan() ) ); connect( configApplyButton, SIGNAL(clicked() ), this, SLOT(applyConfigChanges() ) ); // not good since lib is async // connect( ListView2, SIGNAL( expanded ( QListViewItem* ) ), // this, SLOT( addServicesToDevice( QListViewItem * ) ) ); connect( ListView2, SIGNAL( clicked( QListViewItem* )), this, SLOT( startServiceActionClicked( QListViewItem* ) ) ); connect( ListView2, SIGNAL( rightButtonClicked( QListViewItem *, const QPoint &, int ) ), this, SLOT(startServiceActionHold( QListViewItem *, const QPoint &, int) ) ); connect( m_localDevice , SIGNAL( foundServices( const QString& , Services::ValueList ) ), this, SLOT( addServicesToDevice( const QString& , Services::ValueList ) ) ); connect( m_localDevice, SIGNAL( available( const QString&, bool ) ), this, SLOT( deviceActive( const QString& , bool ) ) ); - connect( m_localDevice, SIGNAL( connections( Connection::ValueList ) ), - this, SLOT( addConnectedDevices( Connection::ValueList ) ) ); + connect( m_localDevice, SIGNAL( connections( ConnectionState::ValueList ) ), + this, SLOT( addConnectedDevices( ConnectionState::ValueList ) ) ); //Load all icons needed m_offPix = Resource::loadPixmap( "editdelete" ); m_onPix = Resource::loadPixmap( "installed" ); QPalette pal = this->palette(); QColor col = pal.color( QPalette::Active, QColorGroup::Background ); pal.setColor( QPalette::Active, QColorGroup::Button, col ); pal.setColor( QPalette::Inactive, QColorGroup::Button, col ); pal.setColor( QPalette::Normal, QColorGroup::Button, col ); pal.setColor( QPalette::Disabled, QColorGroup::Button, col ); this->setPalette( pal ); @@ -94,24 +97,25 @@ using namespace OpieTooth; Services s1; s1.setServiceName( "Serial" ); s1.insertClassId(1, "BlueNic"); (void) new BTServiceItem( topLV2, s1 ); s1.setServiceName( "BlueNic" ); s1.insertClassId(2, "Obex"); (void) new BTServiceItem( topLV2, s1 ); writeToHciConfig(); // search conncetions addConnectedDevices(); m_iconLoader = new BTIconLoader(); + readSavedDevices(); } /** * Reads all options from the config file */ void BlueBase::readConfig() { Config cfg( "bluetoothmanager" ); cfg.setGroup( "bluezsettings" ); m_deviceName = cfg.readEntry( "name" , "No name" ); // name the device should identify with m_defaultPasskey = cfg.readEntryCrypt( "passkey" , "" ); // <- hmm, look up how good the trolls did that, maybe too weak @@ -131,89 +135,78 @@ using namespace OpieTooth; cfg.writeEntry( "name" , m_deviceName ); cfg.writeEntryCrypt( "passkey" , m_defaultPasskey ); cfg.writeEntry( "useEncryption" , m_useEncryption ); cfg.writeEntry( "enableAuthentification" , m_enableAuthentification ); cfg.writeEntry( "enablePagescan" , m_enablePagescan ); cfg.writeEntry( "enableInquiryscan" , m_enableInquiryscan ); writeToHciConfig(); } void BlueBase::writeToHciConfig() { - - HciConfWrapper hciconf ( "/tmp/hcid.conf" ); + qWarning("writeToHciConfig"); + HciConfWrapper hciconf ( "/etc/bluetooth/hcid.conf" ); + hciconf.load(); hciconf.setPinHelper( "/bin/QtPalmtop/bin/blue-pin" ); // hciconf->setPinHelper( "/bin/QtPalmtop/bin/blue-pin" ); hciconf.setName( m_deviceName ); hciconf.setEncrypt( m_useEncryption ); hciconf.setAuth( m_enableAuthentification ); hciconf.setPscan( m_enablePagescan ); hciconf.setIscan( m_enableInquiryscan ); + hciconf.save(); } /** * Read the list of allready known devices * */ void BlueBase::readSavedDevices() { QValueList<RemoteDevice> loadedDevices; + DeviceHandler handler; + loadedDevices = handler.load(); - QDir deviceListSave( QDir::homeDirPath() + "/Settings/bluetooth/"); - // list of .conf files - QStringList devicesFileList = deviceListSave.entryList(); - - // cut .conf of to get the mac and also read the name entry in it. - - for ( QStringList::Iterator it = devicesFileList.begin(); it != devicesFileList.end(); ++it ) { - - QString name; - QString mac; - qDebug((*it).latin1() ); - Config conf((*it)); - conf.setGroup("Info"); - name = conf.readEntry("name", "Error"); - qDebug("MAC: " + mac); - qDebug("NAME: " + name); - RemoteDevice currentDevice( mac , name ); - loadedDevices.append( currentDevice ); - } addSearchedDevices( loadedDevices ); } /** * Write the list of allready known devices * */ void BlueBase::writeSavedDevices() { QListViewItemIterator it( ListView2 ); BTListItem* item; BTDeviceItem* device; - + RemoteDevice::ValueList list; for ( ; it.current(); ++it ) { item = (BTListItem*)it.current(); if(item->typeId() != BTListItem::Device ) continue; device = (BTDeviceItem*)item; - // seperate config file for each device, to store more information in future. - qDebug( "/Settings/bluetooth/" + device->mac() + ".conf"); - Config conf( QDir::homeDirPath() + "/Settings/bluetooth/" + device->mac() + ".conf", Config::File ); - conf.setGroup( "Info" ); - conf.writeEntry( "name", device->name() ); + + list.append( device->remoteDevice() ); } + /* + * if not empty save the List through DeviceHandler + */ + if ( list.isEmpty() ) + return; + DeviceHandler handler; + handler.save( list ); } /** * Set up the gui */ void BlueBase::initGui() { StatusLabel->setText( status() ); // maybe move it to getStatus() cryptCheckBox->setChecked( m_useEncryption ); authCheckBox->setChecked( m_enableAuthentification ); pagescanCheckBox->setChecked( m_enablePagescan ); inquiryscanCheckBox->setChecked( m_enableInquiryscan ); @@ -254,24 +247,27 @@ using namespace OpieTooth; } /** * Add fresh found devices from scan dialog to the listing * */ void BlueBase::addSearchedDevices( const QValueList<RemoteDevice> &newDevices ) { BTDeviceItem * deviceItem; QValueList<RemoteDevice>::ConstIterator it; for( it = newDevices.begin(); it != newDevices.end() ; ++it ) { + if (find( (*it) )) // is already inserted + continue; + deviceItem = new BTDeviceItem( ListView2 , (*it) ); deviceItem->setExpandable ( true ); // look if device is avail. atm, async deviceActive( (*it) ); // ggf auch hier? addServicesToDevice( deviceItem ); } } @@ -324,28 +320,32 @@ void BlueBase::startServiceActionHold( QListViewItem * item, const QPoint & poin * one if the factory returns 0 * PopupMenu deletion is kind of weird. * If escaped( -1 ) or any of our items were chosen we'll * delete the PopupMenu otherwise it's the responsibility of * the PopupMenu to delete itself * */ else if ( ((BTListItem*)item)->type() == "service") { BTServiceItem* service = (BTServiceItem*)item; QMap<int, QString> list = service->services().classIdList(); QMap<int, QString>::Iterator it = list.begin(); QPopupMenu *popup =0l; - if ( it != list.end() ) + if ( it != list.end() ) { + qWarning("Searching id %d %s", it.key(), it.data().latin1() ); popup = m_popHelper.find( it.key(), service->services(), service->parent() ); + }else { + qWarning("Empty"); + } if ( popup == 0l ) { qWarning("factory returned 0l"); popup = new QPopupMenu(); } int test1 = popup->insertItem( tr("Test1:"), 0); int con = popup->insertItem( tr("connect"), 1); int del = popup->insertItem( tr("delete"), 2); ret = popup->exec( point ); @@ -396,27 +396,28 @@ void BlueBase::startServiceActionHold( QListViewItem * item, const QPoint & poin QValueList<OpieTooth::Services>::Iterator it2; BTServiceItem * serviceItem; if (!servicesList.isEmpty() ) { // add services QMap<int, QString> list; QMap<int, QString>::Iterator classIt; for( it2 = servicesList.begin(); it2 != servicesList.end(); ++it2 ) { serviceItem = new BTServiceItem( deviceItem , (*it2) ); list = (*it2).classIdList(); classIt = list.begin(); - int classId; + int classId=0; if ( classIt != list.end() ) classId = classIt.key(); + serviceItem->setPixmap( 0, m_iconLoader->serviceIcon( classId ) ); } } else { Services s1; s1.setServiceName( tr("no serives found") ); serviceItem = new BTServiceItem( deviceItem, s1 ); } // now remove them from the list m_deviceList.remove( it ); } @@ -501,12 +502,33 @@ void BlueBase::startServiceActionHold( QListViewItem * item, const QPoint & poin void BlueBase::setInfo() { StatusLabel->setText( status() ); } /** * Decontructor */ BlueBase::~BlueBase() { writeSavedDevices(); delete m_iconLoader; } +/** + * find searches the ListView for a BTDeviceItem containig + * the same Device if found return true else false + * @param dev RemoteDevice to find + * @return returns true if found + */ +bool BlueBase::find( const RemoteDevice& rem ) { + QListViewItemIterator it( ListView2 ); + BTListItem* item; + BTDeviceItem* device; + for (; it.current(); ++it ) { + item = (BTListItem*) it.current(); + if ( item->typeId() != BTListItem::Device ) + continue; + + device = (BTDeviceItem*)item; + if ( rem.equals( device->remoteDevice() ) ) + return true; + } + return false; // not found +} |