00001 #include "btconfigwidget.h"
00002 #include "iolayerbase.h"
00003 #include "comboboxhelper.h"
00004
00005 #include <qlabel.h>
00006 #include <qlayout.h>
00007 #include <qlineedit.h>
00008 #include <qcombobox.h>
00009 #include <qhbox.h>
00010 #include <qradiobutton.h>
00011
00012
00013
00014
00015 BTConfigWidget::BTConfigWidget( const QString& name,
00016 QWidget* parent,
00017 const char* na )
00018 : ProfileDialogConnectionWidget( name, parent, na ) {
00019
00020 m_lay = new QVBoxLayout( this );
00021
00022 m_device = new QLabel( tr( "Device" ), this );
00023 QHBox *deviceBox = new QHBox( this );
00024 m_devRadio = new QRadioButton( deviceBox );
00025 connect( m_devRadio, SIGNAL( toggled(bool) ), this, SLOT( slotDevRadio(bool) ) );
00026 m_deviceCmb = new QComboBox( deviceBox );
00027 m_deviceCmb->setEditable( TRUE );
00028
00029 QLabel *macLabel = new QLabel( this );
00030 macLabel->setText( tr( "Or peer mac address" ) );
00031 QHBox *macBox = new QHBox( this );
00032 m_macRadio = new QRadioButton( macBox );
00033 connect( m_macRadio, SIGNAL( toggled(bool) ), this, SLOT( slotMacRadio(bool) ) );
00034 m_mac = new QLineEdit( macBox );
00035
00036 m_base = new IOLayerBase(this, "base");
00037
00038 m_lay->addWidget( m_device );
00039 m_lay->addWidget( deviceBox );
00040 m_lay->addWidget( macLabel );
00041 m_lay->addWidget( macBox );
00042 m_lay->addWidget( m_base );
00043
00044 m_deviceCmb->insertItem( "/dev/ttyU0" );
00045 m_deviceCmb->insertItem( "/dev/ttyU1" );
00046 }
00047
00048 BTConfigWidget::~BTConfigWidget() {
00049
00050 }
00051 void BTConfigWidget::load( const Profile& prof ) {
00052 int rad_flow = prof.readNumEntry("Flow");
00053 int rad_parity = prof.readNumEntry("Parity");
00054 int speed = prof.readNumEntry("Speed");
00055 QString mac = prof.readEntry("Mac");
00056
00057 if (!mac.isEmpty() ) {
00058 m_mac->setText( mac );
00059 } else {
00060 m_devRadio->setChecked( true );
00061 }
00062
00063 if (rad_flow == 1) {
00064 m_base->setFlow( IOLayerBase::Hardware );
00065 } else if (rad_flow == 2) {
00066 m_base->setFlow( IOLayerBase::Software );
00067 } else if (rad_flow == 0) {
00068 m_base->setFlow( IOLayerBase::None );
00069 }
00070
00071 if (rad_parity == 1) {
00072 m_base->setParity( IOLayerBase::Even );
00073 } else if ( rad_parity == 2 ) {
00074 m_base->setParity( IOLayerBase::Odd );
00075 } else {
00076 m_base->setParity( IOLayerBase::NonePar );
00077 }
00078
00079 switch( speed ) {
00080 case 115200:
00081 m_base->setSpeed(IOLayerBase::Baud_115200 );
00082 break;
00083 case 57600:
00084 m_base->setSpeed( IOLayerBase::Baud_57600 );
00085 break;
00086 case 38400:
00087 m_base->setSpeed(IOLayerBase::Baud_38400 );
00088 break;
00089 case 19200:
00090 m_base->setSpeed( IOLayerBase::Baud_19200 );
00091 break;
00092 case 4800:
00093 m_base->setSpeed( IOLayerBase::Baud_4800 );
00094 break;
00095 case 2400:
00096 m_base->setSpeed( IOLayerBase::Baud_2400 );
00097 break;
00098 case 1200:
00099 m_base->setSpeed( IOLayerBase::Baud_1200 );
00100 break;
00101 case 9600:
00102 default:
00103 m_base->setSpeed(IOLayerBase::Baud_9600 );
00104 break;
00105 }
00106
00107 if ( prof.readEntry("Device").isEmpty() ) return;
00108 ComboboxHelper::setCurrent( prof.readEntry("Device"), m_deviceCmb );
00109
00110 }
00111
00112
00113
00114
00115
00116 void BTConfigWidget::save( Profile& prof ) {
00117 int flow, parity, speed;
00118 flow = parity = speed = 0;
00119 prof.writeEntry("Device", m_deviceCmb->currentText() );
00120
00121
00122 switch( m_base->flow() ) {
00123 case IOLayerBase::None:
00124 flow = 0;
00125 break;
00126 case IOLayerBase::Software:
00127 flow = 2;
00128 break;
00129 case IOLayerBase::Hardware:
00130 flow = 1;
00131 break;
00132 }
00133
00134 switch( m_base->parity() ) {
00135 case IOLayerBase::Odd:
00136 parity = 2;
00137 break;
00138 case IOLayerBase::Even:
00139 parity = 1;
00140 break;
00141 case IOLayerBase::NonePar:
00142 parity = 0;
00143 break;
00144 }
00145
00146 switch( m_base->speed() ) {
00147 case IOLayerBase::Baud_115200:
00148 speed = 115200;
00149 break;
00150 case IOLayerBase::Baud_57600:
00151 speed = 57600;
00152 break;
00153 case IOLayerBase::Baud_38400:
00154 speed = 38400;
00155 break;
00156 case IOLayerBase::Baud_19200:
00157 speed = 19200;
00158 break;
00159 case IOLayerBase::Baud_4800:
00160 speed = 4800;
00161 break;
00162 case IOLayerBase::Baud_2400:
00163 speed = 2400;
00164 break;
00165 case IOLayerBase::Baud_1200:
00166 speed = 1200;
00167 break;
00168 default:
00169 case IOLayerBase::Baud_9600:
00170 speed = 9600;
00171 break;
00172 }
00173
00174 prof.writeEntry("Flow", flow);
00175 prof.writeEntry("Parity", parity);
00176 prof.writeEntry("Speed", speed);
00177 prof.writeEntry("Mac", m_mac->text() );
00178 }
00179
00180 void BTConfigWidget::slotMacRadio( bool on ) {
00181 if ( on ) {
00182 m_devRadio->setChecked( false );
00183 m_deviceCmb->setEnabled( false );
00184 m_mac->setEnabled( true );
00185 } else {
00186 m_devRadio->setChecked( true );
00187 }
00188 }
00189
00190 void BTConfigWidget::slotDevRadio( bool on ) {
00191 if ( on ) {
00192 m_macRadio->setChecked( false );
00193 m_deviceCmb->setEnabled( true );
00194 m_mac->setEnabled( false );
00195 } else {
00196 m_macRadio->setChecked( true );
00197 }
00198 }