18 files changed, 813 insertions, 62 deletions
diff --git a/noncore/net/opietooth/blue-pin/blue-pin.pro b/noncore/net/opietooth/blue-pin/blue-pin.pro index 102a937..fbf9dbe 100644 --- a/noncore/net/opietooth/blue-pin/blue-pin.pro +++ b/noncore/net/opietooth/blue-pin/blue-pin.pro @@ -1,17 +1,14 @@ -TEMPLATE = app -#CONFIG = qt warn_on debug -CONFIG = qt warn_on release +CONFIG = qt warn_on release quick-app HEADERS = pindlg.h SOURCES = main.cc pindlg.cc INCLUDEPATH += $(OPIEDIR)/include INCLUDEPATH += $(OPIEDIR)/noncore/opietooth/lib DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe INTERFACES = pindlgbase.ui -DESTDIR = $(OPIEDIR)/bin TARGET = bluepin TRANSLATIONS = ../../../../i18n/de/bluepin.ts \ ../../../../i18n/nl/bluepin.ts \ ../../../../i18n/da/bluepin.ts \ ../../../../i18n/xx/bluepin.ts \ @@ -27,8 +24,7 @@ TRANSLATIONS = ../../../../i18n/de/bluepin.ts \ ../../../../i18n/pt_BR/bluepin.ts \ ../../../../i18n/sl/bluepin.ts \ ../../../../i18n/zh_CN/bluepin.ts \ ../../../../i18n/zh_TW/bluepin.ts - include ( $(OPIEDIR)/include.pro ) diff --git a/noncore/net/opietooth/manager/.cvsignore b/noncore/net/opietooth/manager/.cvsignore index 3fb67fe..19c03a7 100644 --- a/noncore/net/opietooth/manager/.cvsignore +++ b/noncore/net/opietooth/manager/.cvsignore @@ -4,6 +4,10 @@ bluetoothbase.cpp bluetoothbase.h devicedialog.cpp devicedialog.h moc_* scandialog.cpp scandialog.h +rfcommassigndialogbase.cpp +rfcommassigndialogbase.h +rfcommdialogitembase.cpp +rfcommdialogitembase.h diff --git a/noncore/net/opietooth/manager/bluebase.cpp b/noncore/net/opietooth/manager/bluebase.cpp index 54808fa..2e68984 100644 --- a/noncore/net/opietooth/manager/bluebase.cpp +++ b/noncore/net/opietooth/manager/bluebase.cpp @@ -17,12 +17,13 @@ #include "bluebase.h" #include "scandialog.h" #include "hciconfwrapper.h" #include "devicehandler.h" #include "btconnectionitem.h" +#include "rfcommassigndialogimpl.h" #include <remotedevice.h> #include <services.h> #include <stdlib.h> @@ -56,12 +57,14 @@ 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() ) ); + + connect( rfcommBindButton, SIGNAL( clicked() ), this, SLOT( rfcommDialog() ) ); // 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 ) ), @@ -242,12 +245,26 @@ void BlueBase::applyConfigChanges() { writeConfig(); QMessageBox::information( this, tr("Test") , tr("Changes were applied.") ); } /** + * Launch Rfcomm Bind dialog + * + */ +void BlueBase::rfcommDialog() { + RfcommAssignDialog rfcommAssign ( this, "RfcommAssignDialog", true, WStyle_ContextHelp ); + + rfcommAssign.showMaximized(); + + if ( rfcommAssign.exec() == QDialog::Accepted ) { + rfcommAssign.saveConfig(); + } +} + +/** * Add fresh found devices from scan dialog to the listing * */ void BlueBase::addSearchedDevices( const QValueList<RemoteDevice> &newDevices ) { BTDeviceItem * deviceItem; QValueList<RemoteDevice>::ConstIterator it; diff --git a/noncore/net/opietooth/manager/bluebase.h b/noncore/net/opietooth/manager/bluebase.h index 743062c..a8ab3db 100644 --- a/noncore/net/opietooth/manager/bluebase.h +++ b/noncore/net/opietooth/manager/bluebase.h @@ -38,18 +38,21 @@ namespace OpieTooth { Q_OBJECT public: BlueBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~BlueBase(); + static QString appName() { return QString::fromLatin1("bluetooth-manager"); } + protected: private slots: void startScan(); + private: bool find( const RemoteDevice& device ); void readConfig(); void writeConfig(); void readSavedDevices(); void writeSavedDevices(); @@ -86,12 +89,13 @@ namespace OpieTooth { void startServiceActionClicked( QListViewItem *item ); void startServiceActionHold( QListViewItem *, const QPoint &, int ); void deviceActive( const QString& mac, bool connected ); void applyConfigChanges(); void addSignalStrength(); void addSignalStrength( const QString& mac, const QString& strengh ); + void rfcommDialog(); }; } #endif diff --git a/noncore/net/opietooth/manager/bluetoothbase.ui b/noncore/net/opietooth/manager/bluetoothbase.ui index 9ff970f..bb906a1 100644 --- a/noncore/net/opietooth/manager/bluetoothbase.ui +++ b/noncore/net/opietooth/manager/bluetoothbase.ui @@ -8,41 +8,41 @@ </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>224</width> - <height>320</height> + <width>258</width> + <height>407</height> </rect> </property> <property stdset="1"> <name>caption</name> <string>Form1</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> - <vbox> - <property stdset="1"> - <name>margin</name> - <number>0</number> - </property> - <property stdset="1"> - <name>spacing</name> - <number>0</number> - </property> <widget> <class>QTabWidget</class> <property stdset="1"> <name>name</name> <cstring>Status</cstring> </property> + <property stdset="1"> + <name>geometry</name> + <rect> + <x>1</x> + <y>1</y> + <width>245</width> + <height>289</height> + </rect> + </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> @@ -200,77 +200,111 @@ <name>title</name> <string>Config</string> </attribute> <vbox> <property stdset="1"> <name>margin</name> - <number>2</number> + <number>11</number> </property> <property stdset="1"> <name>spacing</name> - <number>2</number> + <number>6</number> + </property> + <widget> + <class>QGroupBox</class> + <property stdset="1"> + <name>name</name> + <cstring>GroupBox1</cstring> + </property> + <property stdset="1"> + <name>title</name> + <string>Bluetooh Basic Config</string> + </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>11</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> </property> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> - <cstring>Layout2</cstring> + <cstring>Layout7</cstring> </property> <hbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> + <class>QLayoutWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>Layout6</cstring> + </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>deviceNameLabel</cstring> </property> <property stdset="1"> <name>text</name> <string>Device Name</string> </property> </widget> <widget> - <class>QLineEdit</class> + <class>QLabel</class> <property stdset="1"> <name>name</name> - <cstring>deviceNameLine</cstring> + <cstring>passkeyLabel</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Default Passkey</string> </property> </widget> - </hbox> + </vbox> </widget> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> - <cstring>Layout3</cstring> + <cstring>Layout5</cstring> </property> - <hbox> + <vbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> - <class>QLabel</class> + <class>QLineEdit</class> <property stdset="1"> <name>name</name> - <cstring>passkeyLabel</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>Default Passkey</string> + <cstring>deviceNameLine</cstring> </property> </widget> <widget> <class>QLineEdit</class> <property stdset="1"> <name>name</name> @@ -278,12 +312,14 @@ </property> <property stdset="1"> <name>echoMode</name> <enum>Password</enum> </property> </widget> + </vbox> + </widget> </hbox> </widget> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> @@ -355,12 +391,25 @@ <string>Apply</string> </property> </widget> </vbox> </widget> <widget> + <class>QPushButton</class> + <property stdset="1"> + <name>name</name> + <cstring>rfcommBindButton</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Rfcomm Bind Table</string> + </property> + </widget> + </vbox> + </widget> + <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>tab</cstring> </property> <attribute> @@ -387,9 +436,8 @@ <string>Status Label</string> </property> </widget> </vbox> </widget> </widget> - </vbox> </widget> </UI> diff --git a/noncore/net/opietooth/manager/main.cpp b/noncore/net/opietooth/manager/main.cpp index a86e36d..82aeebd 100644 --- a/noncore/net/opietooth/manager/main.cpp +++ b/noncore/net/opietooth/manager/main.cpp @@ -16,23 +16,10 @@ * (at your option) any later version. * * * ***************************************************************************/ #include "bluebase.h" #include <qpe/qpeapplication.h> +#include <opie/oapplicationfactory.h> - -QPEApplication *BluetoothApp; - -int main( int argc, char ** argv ) { - QPEApplication a(argc, argv); - BluetoothApp=&a; - - OpieTooth::BlueBase t; - - // t.setCaption( OpieTooth::BlueBase::tr("Bluetooth Manager") ); - a.showMainWidget(&t); - - return a.exec(); -} - +OPIE_EXPORT_APP( OApplicationFactory<OpieTooth::BlueBase> ) diff --git a/noncore/net/opietooth/manager/manager.pro b/noncore/net/opietooth/manager/manager.pro index 9841740..6ff4ebb 100644 --- a/noncore/net/opietooth/manager/manager.pro +++ b/noncore/net/opietooth/manager/manager.pro @@ -1,33 +1,33 @@ -TEMPLATE = app -CONFIG = qt warn_on debug -#CONFIG = qt warn_on release +CONFIG = qt warn_on release quick-app HEADERS = btconnectionitem.h btdeviceitem.h \ btserviceitem.h stdpopups.h \ popuphelper.h bluebase.h \ scandialog.h btlistitem.h \ hciconfwrapper.h bticonloader.h \ pppdialog.h obexdialog.h \ + rfcommassigndialogimpl.h rfcommassigndialogitem.h \ devicehandler.h rfcpopup.h obexpopup.h \ - rfcommhelper.h panpopup.h dunpopup.h + rfcommhelper.h panpopup.h dunpopup.h rfcommconfhandler.h SOURCES = btconnectionitem.cpp btdeviceitem.cpp \ btserviceitem.cpp stdpopups.cpp \ popuphelper.cpp main.cpp \ bluebase.cpp scandialog.cpp \ btlistitem.cpp hciconfwrapper.cpp \ bticonloader.cpp pppdialog.cpp \ + rfcommassigndialogimpl.cpp rfcommassigndialogitem.cpp \ obexdialog.cpp devicehandler.cpp \ rfcpopup.cpp obexpopup.cpp \ - rfcommhelper.cpp panpopup.cpp dunpopup.cpp + rfcommhelper.cpp panpopup.cpp dunpopup.cpp rfcommconfhandler.cpp INCLUDEPATH += $(OPIEDIR)/include INCLUDEPATH += $(OPIEDIR)/noncore/net/opietooth/lib DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lopietooth -lopie -INTERFACES = bluetoothbase.ui devicedialog.ui -DESTDIR = $(OPIEDIR)/bin +INTERFACES = bluetoothbase.ui devicedialog.ui rfcommassigndialogbase.ui rfcommdialogitembase.ui + TARGET = bluetooth-manager TRANSLATIONS = ../../../../i18n/de/bluetooth-manager.ts \ ../../../../i18n/nl/bluetooth-manager.ts \ ../../../../i18n/da/bluetooth-manager.ts \ ../../../../i18n/xx/bluetooth-manager.ts \ diff --git a/noncore/net/opietooth/manager/rfcommassigndialogbase.ui b/noncore/net/opietooth/manager/rfcommassigndialogbase.ui new file mode 100644 index 0000000..aefa698 --- a/dev/null +++ b/noncore/net/opietooth/manager/rfcommassigndialogbase.ui @@ -0,0 +1,44 @@ +<!DOCTYPE UI><UI> +<class>RfcommAssignDialogBase</class> +<widget> + <class>QDialog</class> + <property stdset="1"> + <name>name</name> + <cstring>RfcommAssignDialogBase</cstring> + </property> + <property stdset="1"> + <name>geometry</name> + <rect> + <x>0</x> + <y>0</y> + <width>444</width> + <height>343</height> + </rect> + </property> + <property stdset="1"> + <name>caption</name> + <string>Rfcomm Bind</string> + </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>11</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>TextLabel1</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Bind device to a interface</string> + </property> + </widget> + </vbox> +</widget> +</UI> diff --git a/noncore/net/opietooth/manager/rfcommassigndialogimpl.cpp b/noncore/net/opietooth/manager/rfcommassigndialogimpl.cpp new file mode 100644 index 0000000..b5cc074 --- a/dev/null +++ b/noncore/net/opietooth/manager/rfcommassigndialogimpl.cpp @@ -0,0 +1,120 @@ + +#include "rfcommassigndialogimpl.h" +#include "rfcommassigndialogitem.h" +#include "rfcommconfhandler.h" + +#include <qpe/config.h> + +#include <qlayout.h> + +using namespace OpieTooth; + +// TODO: write only the file in bluebase? +// muss rfcommd dann neu gestartet werden +// sollte rfcomm bind all nicht eh default config sein ( polled das? - d.h. sobald nen gerät in der nähe ist bindet es? + + +RfcommAssignDialog::RfcommAssignDialog( QWidget* parent, const char* name, bool modal, WFlags fl ) + : RfcommAssignDialogBase( parent, name, modal, fl ) { + + m_range = 5; + + m_scrollView = new QScrollView( this ); + m_scrollView->setResizePolicy( QScrollView::AutoOneFit ); + m_scrollView->setHScrollBarMode( QScrollView::AlwaysOff ); + + RfcommAssignDialogBaseLayout->addWidget( m_scrollView ); + + m_box = new QVBox( m_scrollView->viewport() ); + m_scrollView->addChild( m_box ); + + confHandler = new RfCommConfHandler( "/etc/bluetooth/rfcomm.conf" ); + + loadConfig(); +} + +RfcommAssignDialog::~RfcommAssignDialog() { + if ( confHandler ) { + delete confHandler; + } +} + + +void RfcommAssignDialog::newDevice( const QString & mac ) { + + for ( int i = 0 ; i < m_range; i++ ) { + + QMap<QString, RfCommConfObject*>::Iterator it; + it = confHandler->foundEntries().find( QString("%1").arg( i ) ); + // make sure that rfcommX is not assigned yet + if ( it == confHandler->foundEntries().end() ) { + QDialog dialog( this, "newdevice", true, WStyle_ContextHelp ); + dialog.showMaximized(); + RfcommDialogItem *newDev = new RfcommDialogItem( &dialog ); + newDev->setIdent( i ); + newDev->setMac( mac ); + + if ( dialog.exec() == QDialog::Accepted ) { + RfcommDialogItem *rfcomm = new RfcommDialogItem( m_box ); + m_itemList.insert( i , rfcomm ); + rfcomm->setIdent( i ); + rfcomm->setMac( mac ); + rfcomm->setChannel( newDev->channel() ); + rfcomm->setComment( newDev->comment() ); + qDebug( "New device set up" ); + } + } + } +} + +void RfcommAssignDialog::loadConfig() { + + //Config cfg( "bluetoothmanager-rfcommbind" ); + + for ( int i = 0 ; i < m_range; i++ ) { + // cfg.setGroup( QString("%1").arg( i ) ); + RfcommDialogItem *rfcomm = new RfcommDialogItem( m_box ); + m_itemList.insert( i , rfcomm ); + rfcomm->setIdent( i ); + QMap<QString, RfCommConfObject*>::Iterator it; + it = confHandler->foundEntries().find( QString("%1").arg( i ) ); + if ( it != confHandler->foundEntries().end() ) { + qDebug( "Found key in foundEntries() " ); + rfcomm->setMac( it.data()->mac() ); + rfcomm->setChannel( it.data()->channel() ); + rfcomm->setComment( it.data()->comment() ); + } + /* Use rfcomm.conf directly for now + * rfcomm->setMac( cfg.readEntry( "mac", "" ) ); + * rfcomm->setChannel( cfg.readNumEntry( "channel", 1 ) ); + * rfcomm->setComment( cfg.readEntry( "comment", "" ) ); + */ + } +} + + +void RfcommAssignDialog::saveConfig() { + + //Config cfg( "bluetoothmanager-rfcommbind" ); + + QMap< int, RfcommDialogItem*>::Iterator it; + + QMap< QString, RfCommConfObject*> outMap; + + for( it = m_itemList.begin(); it != m_itemList.end(); ++it ) { + + //cfg.setGroup( QString("%1").arg( it.key() ) ); + RfcommDialogItem *rfcomm = it.data(); + + + outMap.insert( QString( "%1").arg( it.key() ), new RfCommConfObject( it.key(), rfcomm->mac(), rfcomm->channel(), rfcomm->comment() ) ); + + + //cfg.writeEntry( "mac", rfcomm->mac() ); + //cfg.writeEntry( "channel", rfcomm->channel() ); + //cfg.writeEntry( "comment", rfcomm->comment() ); + } + + confHandler->save( outMap ); + +} diff --git a/noncore/net/opietooth/manager/rfcommassigndialogimpl.h b/noncore/net/opietooth/manager/rfcommassigndialogimpl.h new file mode 100644 index 0000000..9983632 --- a/dev/null +++ b/noncore/net/opietooth/manager/rfcommassigndialogimpl.h @@ -0,0 +1,39 @@ +#ifndef RFCOMMASSIGN +#define RFCOMMASSIGN + +#include "rfcommassigndialogbase.h" +#include "rfcommassigndialogitem.h" +#include "rfcommconfhandler.h" + +#include <qscrollview.h> +#include <qmap.h> +#include <qvbox.h> + +namespace OpieTooth { + + class RfcommAssignDialog: public RfcommAssignDialogBase { + + Q_OBJECT + + public: + + RfcommAssignDialog( QWidget* parent = 0, const char* name = 0,bool modal = 0, WFlags fl = 0 ); + ~RfcommAssignDialog(); + + void loadConfig(); + void saveConfig(); + + void newDevice( const QString & mac ); + + private: + QScrollView *m_scrollView; + // how many rfcomm devices are possible + int m_range; + QMap< int, RfcommDialogItem* > m_itemList; + QVBox *m_box; + RfCommConfHandler *confHandler; +}; + +} + +#endif diff --git a/noncore/net/opietooth/manager/rfcommassigndialogitem.cpp b/noncore/net/opietooth/manager/rfcommassigndialogitem.cpp new file mode 100644 index 0000000..1e7130f --- a/dev/null +++ b/noncore/net/opietooth/manager/rfcommassigndialogitem.cpp @@ -0,0 +1,54 @@ + +#include "rfcommassigndialogitem.h" + +#include <qlineedit.h> +#include <qcombobox.h> +#include <qlabel.h> +#include <qgroupbox.h> + +using namespace OpieTooth; + + +RfcommDialogItem::RfcommDialogItem( QWidget* parent, const char* name, WFlags fl ) + : RfcommDialogItemBase( parent, name, fl ) { + +} + +RfcommDialogItem::~RfcommDialogItem() { +} + + +int RfcommDialogItem::ident() { + return m_ident; +} + +QString RfcommDialogItem::mac() { + return m_macAddress->text(); +} + +int RfcommDialogItem::channel() { + return m_channelDropdown->currentItem(); +} + +QString RfcommDialogItem::comment() { + return m_commentLine->text(); +} + +void RfcommDialogItem::setIdent( int ident ) { + m_ident = ident; + m_identLabel->setTitle( QString( "rfcomm%1").arg( ident ) ); +} + +void RfcommDialogItem::setMac( const QString &mac ) { + m_macAddress->setText( mac ); +} + +void RfcommDialogItem::setChannel( int channel ) { + m_channelDropdown->setCurrentItem( channel ); +} + +void RfcommDialogItem::setComment( const QString &comment ) { + m_commentLine->setText( comment ); +} + + diff --git a/noncore/net/opietooth/manager/rfcommassigndialogitem.h b/noncore/net/opietooth/manager/rfcommassigndialogitem.h new file mode 100644 index 0000000..34a794f --- a/dev/null +++ b/noncore/net/opietooth/manager/rfcommassigndialogitem.h @@ -0,0 +1,40 @@ +#ifndef RFCOMMDIALOGITEM +#define RFCOMMDIALOGITEM + +#include "rfcommdialogitembase.h" + +#include <qwidget.h> + +namespace OpieTooth { + + class RfcommDialogItem : public RfcommDialogItemBase { + + Q_OBJECT + + public: + RfcommDialogItem( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); + ~RfcommDialogItem(); + + // number if the rfcomm device + int ident(); + // devices mac address + QString mac(); + int channel(); + QString comment(); + + void setIdent( int ident ); + void setMac( const QString& mac ); + void setChannel( int channel ); + void setComment( const QString& comment ); + + private: + + + int m_ident; + +}; + + +} + +#endif diff --git a/noncore/net/opietooth/manager/rfcommconfhandler.cpp b/noncore/net/opietooth/manager/rfcommconfhandler.cpp new file mode 100644 index 0000000..20453e8 --- a/dev/null +++ b/noncore/net/opietooth/manager/rfcommconfhandler.cpp @@ -0,0 +1,114 @@ + +#include <qtextstream.h> + +#include "rfcommconfhandler.h" + + +using namespace OpieTooth; + +// move to lib + + +RfCommConfObject::RfCommConfObject( int number, QString mac, int channel, QString comment ) { + m_number = number; + m_mac = mac; + m_channel = channel; + m_comment = comment; + // m_foundEntries = 0; +} + +void RfCommConfObject::setNumber( int number ) { + m_number = number; +} + +void RfCommConfObject::setMac( QString mac ) { + m_mac = mac; +} + +void RfCommConfObject::setChannel( int channel ) { + m_channel = channel; +} + +void RfCommConfObject::setComment( QString comment ) { + m_comment = comment; +} + + +RfCommConfObject::~RfCommConfObject() { +} + + +RfCommConfHandler::RfCommConfHandler( const QString & filename ) { + + m_filename = filename; + load(); +} + +RfCommConfHandler::~RfCommConfHandler() { + +} + +void RfCommConfHandler::save( QMap<QString, RfCommConfObject*> devices ) { + + QFile rfCommConf( "/tmp/test" ); + QTextStream outStream( &rfCommConf ); + if ( rfCommConf.open( IO_WriteOnly ) ) { + + QMap<QString, RfCommConfObject*>::Iterator it; + for( it = devices.begin(); it != devices.end(); ++it ) { + outStream << "rfcomm" + QString("%1").arg( it.data()->number() ) + " {\n"; + outStream << " device " + it.data()->mac() + ";\n"; + outStream << " channel " + QString( "%1" ).arg( it.data()->channel() ) + ";\n"; + outStream << " comment \"" + it.data()->comment() + "\";\n"; + outStream << "}\n\n"; + } + + rfCommConf.close(); + } +} + + +QMap<QString, RfCommConfObject*> RfCommConfHandler::foundEntries() { + return m_foundEntries; +} + +void RfCommConfHandler::load() { + + QFile rfCommConf( m_filename ); + if ( rfCommConf.open( IO_ReadOnly ) ) { + + QStringList list; + QTextStream inStream( &rfCommConf ); + list = QStringList::split( "\n", inStream.read() ); + + QString number; + QString mac; + QString channel; + QString comment; + + for ( QStringList::Iterator line=list.begin(); line != list.end(); line++ ) { + + QString tmpLine = ( *line ).stripWhiteSpace(); + + if ( tmpLine.startsWith("rfcomm") ) { + QString number = tmpLine.mid( 6,1 ); + qDebug( tmpLine ); + qDebug( "TEST " + number ); + } else if ( tmpLine.startsWith( "}" ) ) { + m_foundEntries.insert( number, new RfCommConfObject( number.toInt(), mac, channel.toInt(), comment ) ); + } else if ( tmpLine.startsWith( "device" ) ) { + mac = tmpLine.mid( 7, 17 ); + qDebug( "mac" + mac ); + } else if ( tmpLine.startsWith( "channel" ) ) { + channel = tmpLine.mid( 8, 1 ); + qDebug ( "Channel :" + channel ); + } else if ( tmpLine.startsWith( "comment" ) ) { + comment = tmpLine.mid( 9, tmpLine.find( ';' ) - 9 - 1 ); + qDebug( "Comment: " + comment ); + } + } + rfCommConf.close(); + } + save( m_foundEntries ); + qDebug( QString( "ENTries: %1").arg( m_foundEntries.count() ) ); +} diff --git a/noncore/net/opietooth/manager/rfcommconfhandler.h b/noncore/net/opietooth/manager/rfcommconfhandler.h new file mode 100644 index 0000000..e13c833 --- a/dev/null +++ b/noncore/net/opietooth/manager/rfcommconfhandler.h @@ -0,0 +1,54 @@ +#ifndef RFCOMMCONFHANDLER +#define RFCOMMCONFHANDLER + +#include <qstring.h> +#include <qfile.h> +#include <qobject.h> +#include <qmap.h> + +namespace OpieTooth { + + class RfCommConfObject { + + public: + RfCommConfObject( int number, QString mac, int channel, QString comment ); + ~RfCommConfObject(); + + void setNumber( int number ); + int number() { return m_number; }; + void setMac( QString mac ); + QString mac() { return m_mac; }; + void setChannel( int channel ); + int channel() { return m_channel; }; + void setComment( QString comment ); + QString comment() { return m_comment; }; + + + private: + int m_number; + QString m_mac; + int m_channel; + QString m_comment; + + }; + + class RfCommConfHandler { + + public: + RfCommConfHandler( const QString & filename ); + ~RfCommConfHandler(); + + void save( QMap<QString, RfCommConfObject*> devices ); + + QMap<QString, RfCommConfObject*> foundEntries(); + + private: + void load(); + + QString m_filename; + QMap<QString, RfCommConfObject*> m_foundEntries; + }; + +} + +#endif diff --git a/noncore/net/opietooth/manager/rfcommdialogitembase.ui b/noncore/net/opietooth/manager/rfcommdialogitembase.ui new file mode 100644 index 0000000..dafca52 --- a/dev/null +++ b/noncore/net/opietooth/manager/rfcommdialogitembase.ui @@ -0,0 +1,216 @@ +<!DOCTYPE UI><UI> +<class>RfcommDialogItemBase</class> +<widget> + <class>QWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>RfcommDialogItemBase</cstring> + </property> + <property stdset="1"> + <name>geometry</name> + <rect> + <x>0</x> + <y>0</y> + <width>345</width> + <height>95</height> + </rect> + </property> + <property stdset="1"> + <name>caption</name> + <string>Form2</string> + </property> + <property> + <name>layoutMargin</name> + </property> + <property> + <name>layoutSpacing</name> + </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>0</number> + </property> + <widget> + <class>QGroupBox</class> + <property stdset="1"> + <name>name</name> + <cstring>m_identLabel</cstring> + </property> + <property> + <name>layoutMargin</name> + </property> + <property> + <name>layoutSpacing</name> + </property> + <grid> + <property stdset="1"> + <name>margin</name> + <number>5</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>5</number> + </property> + <widget row="0" column="0" > + <class>QLayoutWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>Layout3</cstring> + </property> + <hbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>TextLabel4</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Mac</string> + </property> + </widget> + <widget> + <class>QLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>m_macAddress</cstring> + </property> + </widget> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>TextLabel5</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Channel</string> + </property> + </widget> + <widget> + <class>QComboBox</class> + <item> + <property> + <name>text</name> + <string>0</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>1</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>2</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>3</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>4</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>5</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>6</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>7</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>8</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>9</string> + </property> + </item> + <item> + <property> + <name>text</name> + <string>10</string> + </property> + </item> + <property stdset="1"> + <name>name</name> + <cstring>m_channelDropdown</cstring> + </property> + </widget> + </hbox> + </widget> + <widget row="1" column="0" > + <class>QLayoutWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>Layout4</cstring> + </property> + <hbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>TextLabel3</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Comment:</string> + </property> + </widget> + <widget> + <class>QLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>m_commentLine</cstring> + </property> + </widget> + </hbox> + </widget> + </grid> + </widget> + </vbox> +</widget> +</UI> diff --git a/noncore/net/opietooth/manager/rfcpopup.cpp b/noncore/net/opietooth/manager/rfcpopup.cpp index cc87b6c..d95f14b 100644 --- a/noncore/net/opietooth/manager/rfcpopup.cpp +++ b/noncore/net/opietooth/manager/rfcpopup.cpp @@ -1,23 +1,27 @@ #include <qtimer.h> #include "pppdialog.h" #include "rfcpopup.h" +#include "rfcommassigndialogimpl.h" using namespace OpieTooth; /* * c'tor init the QAction */ -RfcCommPopup::RfcCommPopup() +RfcCommPopup::RfcCommPopup( OpieTooth::BTDeviceItem* item ) : QPopupMenu() { qWarning("RfcCommPopup c'tor"); QAction* a; + + m_item = item; + /* connect action */ a = new QAction( ); // so it's get deleted a->setText("Connect"); a->addTo( this ); connect( a, SIGNAL( activated() ), this, SLOT( slotConnect() ) ); @@ -30,16 +34,16 @@ RfcCommPopup::RfcCommPopup() connect( a, SIGNAL( activated() ) , this, SLOT( slotDisconnect() ) ); /* foo action */ a = new QAction( ); - a->setText("Foo"); + a->setText("Bind table"); a->addTo( this ); connect( a, SIGNAL( activated() ), - this, SLOT( slotFoo() ) ); + this, SLOT( slotBind() ) ); /* bar action */ a = new QAction( ); a->setText( "Bar" ); a->addTo( this ); @@ -71,14 +75,21 @@ void RfcCommPopup::slotConnect() { void RfcCommPopup::slotDisconnect() { qWarning("slot disconnected"); } -void RfcCommPopup::slotFoo() { - qWarning("slotFoo"); +void RfcCommPopup::slotBind() { + RfcommAssignDialog rfcommAssign ( this, "RfcommAssignDialog", true, WStyle_ContextHelp ); + + rfcommAssign.showMaximized(); + rfcommAssign.newDevice( m_item->mac() ); + + if ( rfcommAssign.exec() == QDialog::Accepted ) { + rfcommAssign.saveConfig(); + } } void RfcCommPopup::slotBar() { qWarning("slotBar"); }; diff --git a/noncore/net/opietooth/manager/rfcpopup.h b/noncore/net/opietooth/manager/rfcpopup.h index c388f65..74b9117 100644 --- a/noncore/net/opietooth/manager/rfcpopup.h +++ b/noncore/net/opietooth/manager/rfcpopup.h @@ -1,36 +1,39 @@ #ifndef RFCPOPUP_H #define RFCPOPUP_H #include <qpopupmenu.h> #include <qaction.h> +#include "btdeviceitem.h" + namespace OpieTooth { /** * A simple reference implementation for * the popup helper factory. * This class derives from QPopupMenu and uses * plugged QActions to do all the nasty in it's * slots. After the work is done everything must * be deleted. */ class RfcCommPopup : public QPopupMenu { Q_OBJECT public: - RfcCommPopup(); + RfcCommPopup( OpieTooth::BTDeviceItem* ); ~RfcCommPopup(); private: QAction* m_con; QAction* m_dis; - QAction* m_foo; + QAction* m_bind; QAction* m_bar; + OpieTooth::BTDeviceItem *m_item; private slots: void slotConnect(); void slotDisconnect(); - void slotFoo(); + void slotBind(); void slotBar(); }; }; #endif diff --git a/noncore/net/opietooth/manager/stdpopups.cpp b/noncore/net/opietooth/manager/stdpopups.cpp index 38b8ee7..e1f8396 100644 --- a/noncore/net/opietooth/manager/stdpopups.cpp +++ b/noncore/net/opietooth/manager/stdpopups.cpp @@ -6,13 +6,13 @@ #include "stdpopups.h" extern "C" { QPopupMenu* newRfcComPopup( const OpieTooth::Services& service, OpieTooth::BTDeviceItem* item ) { - return new OpieTooth::RfcCommPopup(/* servive, item*/ ); // fix spellin RfComm vs. RfcComm and paramaters + return new OpieTooth::RfcCommPopup(/* servive,*/ item ); // fix spellin RfComm vs. RfcComm and paramaters //return 0l; } QPopupMenu* newObexPushPopup( const OpieTooth::Services&, OpieTooth::BTDeviceItem* ) { return new OpieTooth::ObexPopup(); } QPopupMenu* newPanPopup( const OpieTooth::Services& service, OpieTooth::BTDeviceItem* item ) { |