00001 #include "modemconfigwidget.h"
00002 #include "dialdialog.h"
00003 #include "comboboxhelper.h"
00004
00005
00006 #include <qpe/qpeapplication.h>
00007
00008
00009 #include <qlabel.h>
00010 #include <qlayout.h>
00011 #include <qcombobox.h>
00012 #include <qpushbutton.h>
00013 #include <qhbox.h>
00014
00015
00016 ModemConfigWidget::ModemConfigWidget( const QString& name, QWidget* parent,
00017 const char* na )
00018 : ProfileDialogConnectionWidget( name, parent, na ) {
00019
00020 m_lay = new QVBoxLayout( this );
00021 m_device = new QLabel(tr( "Modem is attached to:" ), this );
00022 m_deviceCmb = new QComboBox(this );
00023 m_deviceCmb->setEditable( TRUE );
00024
00025 QLabel* telLabel = new QLabel( this );
00026 telLabel->setText( tr( "Enter telefon number here:" ) );
00027 QHBox *buttonBox = new QHBox( this );
00028 m_telNumber = new QLineEdit( buttonBox );
00029 QPushButton *atButton = new QPushButton( buttonBox );
00030 atButton->setText( tr( "AT commands" ) );
00031 connect( atButton, SIGNAL( clicked() ), this, SLOT( slotAT() ) );
00032
00033 QPushButton *dialButton = new QPushButton( buttonBox );
00034 dialButton->setText( tr( "Enter number" ) );
00035 connect( dialButton, SIGNAL( clicked() ), this, SLOT( slotDial() ) );
00036
00037 m_base = new IOLayerBase( this, "base" );
00038
00039 m_lay->addWidget( m_device );
00040 m_lay->addWidget( m_deviceCmb );
00041 m_lay->addWidget( telLabel );
00042 m_lay->addWidget( buttonBox );
00043 m_lay->addWidget( m_base );
00044 m_lay->addStretch( 0 );
00045
00046 m_deviceCmb->insertItem( "/dev/ttyS0" );
00047 m_deviceCmb->insertItem( "/dev/ttyS1" );
00048 m_deviceCmb->insertItem( "/dev/ttyS2" );
00049
00050 atConf = new ATConfigDialog( this, "ATConfig", true );
00051 }
00052
00053 ModemConfigWidget::~ModemConfigWidget() {
00054
00055 }
00056 void ModemConfigWidget::load( const Profile& prof ) {
00057
00058 int rad_flow = prof.readNumEntry( "Flow" );
00059 int rad_parity = prof.readNumEntry( "Parity" );
00060 int speed = prof.readNumEntry( "Speed" );
00061 int dbits = prof.readNumEntry("DataBits");
00062 int sbits = prof.readNumEntry("StopBits");
00063 QString number = prof.readEntry( "Number" );
00064
00065 if ( !number.isEmpty() ) {
00066 m_telNumber->setText( number );
00067 }
00068
00069 if ( rad_flow == 1 ) {
00070 m_base->setFlow( IOLayerBase::Hardware );
00071 } else if (rad_flow == 2) {
00072 m_base->setFlow( IOLayerBase::Software );
00073 } else if (rad_flow == 0) {
00074 m_base->setFlow( IOLayerBase::None );
00075 }
00076
00077
00078 if ( rad_parity == 1 ) {
00079 m_base->setParity( IOLayerBase::Even );
00080 } else if ( rad_parity == 2 ){
00081 m_base->setParity( IOLayerBase::Odd );
00082 } else {
00083 m_base->setParity( IOLayerBase::NonePar );
00084 }
00085
00086 switch( speed ) {
00087 case 115200:
00088 m_base->setSpeed( IOLayerBase::Baud_115200 );
00089 break;
00090 case 57600:
00091 m_base->setSpeed( IOLayerBase::Baud_57600 );
00092 break;
00093 case 38400:
00094 m_base->setSpeed( IOLayerBase::Baud_38400 );
00095 break;
00096 case 19200:
00097 m_base->setSpeed( IOLayerBase::Baud_19200 );
00098 break;
00099 case 4800:
00100 m_base->setSpeed( IOLayerBase::Baud_4800 );
00101 break;
00102 case 2400:
00103 m_base->setSpeed( IOLayerBase::Baud_2400 );
00104 break;
00105 case 1200:
00106 m_base->setSpeed( IOLayerBase::Baud_1200 );
00107 case 9600:
00108 default:
00109 m_base->setSpeed( IOLayerBase::Baud_9600 );
00110 break;
00111 }
00112
00113
00114 if ( dbits == 5) {
00115 m_base->setData( IOLayerBase::Data_Five );
00116 } else if (rad_flow == 6) {
00117 m_base->setData( IOLayerBase::Data_Six );
00118 } else if (rad_flow == 7) {
00119 m_base->setData( IOLayerBase::Data_Seven );
00120 } else {
00121 m_base->setData( IOLayerBase::Data_Eight );
00122 }
00123
00124 if ( sbits == 2) {
00125 m_base->setStop( IOLayerBase::Stop_Two );
00126 } else if ( sbits == 15 ) {
00127 m_base->setStop( IOLayerBase::Stop_OnePointFive );
00128 } else {
00129 m_base->setStop( IOLayerBase::Stop_One );
00130 }
00131
00132
00133 atConf->readConfig( prof );
00134 if ( prof.readEntry( "Device" ).isEmpty() ) {
00135 return;
00136 }
00137 ComboboxHelper::setCurrent( prof.readEntry( "Device" ), m_deviceCmb );
00138
00139
00140 }
00141
00142
00143
00144
00145
00146
00147 void ModemConfigWidget::save( Profile& prof ) {
00148 int flow, parity, speed, data, stop;
00149 flow = parity = speed = data = stop = 0;
00150 prof.writeEntry( "Device", m_deviceCmb->currentText() );
00151
00152
00153 switch( m_base->flow() ) {
00154 case IOLayerBase::None:
00155 flow = 0;
00156 break;
00157 case IOLayerBase::Software:
00158 flow = 2;
00159 break;
00160 case IOLayerBase::Hardware:
00161 flow = 1;
00162 break;
00163 }
00164
00165 switch( m_base->parity() ) {
00166 case IOLayerBase::Odd:
00167 parity = 2;
00168 break;
00169 case IOLayerBase::Even:
00170 parity = 1;
00171 break;
00172 case IOLayerBase::NonePar:
00173 parity = 0;
00174 break;
00175 }
00176
00177 switch( m_base->speed() ) {
00178 case IOLayerBase::Baud_115200:
00179 speed = 115200;
00180 break;
00181 case IOLayerBase::Baud_57600:
00182 speed = 57600;
00183 break;
00184 case IOLayerBase::Baud_38400:
00185 speed = 38400;
00186 break;
00187 case IOLayerBase::Baud_19200:
00188 speed = 19200;
00189 break;
00190 case IOLayerBase::Baud_9600:
00191 speed = 9600;
00192 break;
00193 case IOLayerBase::Baud_4800:
00194 speed = 4800;
00195 break;
00196 case IOLayerBase::Baud_2400:
00197 speed = 2400;
00198 break;
00199 case IOLayerBase::Baud_1200:
00200 speed = 1200;
00201 break;
00202 }
00203
00204 switch( m_base->data() ) {
00205 case IOLayerBase::Data_Five:
00206 data = 5;
00207 break;
00208 case IOLayerBase::Data_Six:
00209 data = 6;
00210 break;
00211 case IOLayerBase::Data_Seven:
00212 data = 7;
00213 break;
00214 case IOLayerBase::Data_Eight:
00215 data = 8;
00216 break;
00217 }
00218
00219 switch( m_base->stop() ) {
00220 case IOLayerBase::Stop_One:
00221 stop = 1;
00222 break;
00223 case IOLayerBase::Stop_OnePointFive:
00224 stop = 15;
00225 break;
00226 case IOLayerBase::Stop_Two:
00227 stop = 2;
00228 break;
00229 }
00230
00231 prof.writeEntry( "Flow", flow );
00232 prof.writeEntry( "Parity", parity );
00233 prof.writeEntry( "Speed", speed );
00234 prof.writeEntry("DataBits", data);
00235 prof.writeEntry("StopBits", stop);
00236 prof.writeEntry( "Number", m_telNumber->text() );
00237
00238
00239 atConf->writeConfig(prof);
00240 }
00241
00242 void ModemConfigWidget::slotAT() {
00243
00244
00245
00246
00247
00248 if ( QPEApplication::execDialog( atConf ) != QDialog::Accepted ) {
00249
00250 }
00251 }
00252
00253 void ModemConfigWidget::slotDial() {
00254 DialDialog dial( this, "DialConfig", true );
00255 if(!m_telNumber->text().isEmpty()) {
00256 dial.setNumber(m_telNumber->text().replace(QRegExp("[\\-\\/\\ \\.\\,]"), ""));
00257 }
00258 if ( QPEApplication::execDialog( &dial ) == QDialog::Accepted ) {
00259 m_telNumber->setText( dial.number() );
00260 }
00261 }