summaryrefslogtreecommitdiff
authorkergoth <kergoth>2003-08-09 17:14:54 (UTC)
committer kergoth <kergoth>2003-08-09 17:14:54 (UTC)
commita7e015198a8c5ad3b6e144a9032b059086253e00 (patch) (unidiff)
treeb712b6f11310d88744fe393a92b3160b741a7efe
parentbeba0e73306815337bf04dee39502233595e9739 (diff)
downloadopie-a7e015198a8c5ad3b6e144a9032b059086253e00.zip
opie-a7e015198a8c5ad3b6e144a9032b059086253e00.tar.gz
opie-a7e015198a8c5ad3b6e144a9032b059086253e00.tar.bz2
Merge from BRANCH_1_0
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/appearance2/appearance.cpp13
-rw-r--r--noncore/settings/appearance2/colorlistitem.h7
-rw-r--r--noncore/settings/appearance2/decolistitem.h3
-rw-r--r--noncore/settings/backup/backuprestore.cpp9
-rw-r--r--noncore/settings/language/language.cpp2
-rw-r--r--noncore/settings/mediummount/mainwindow.cc1
-rw-r--r--noncore/settings/mediummount/mediumglobal.cc2
-rw-r--r--noncore/settings/mediummount/mediumwidget.cc2
-rw-r--r--noncore/settings/networksettings/interfaces/interface.cpp68
-rw-r--r--noncore/settings/networksettings/interfaces/interface.h12
-rw-r--r--noncore/settings/networksettings/interfaces/interfaceadvanced.ui2
-rw-r--r--noncore/settings/networksettings/interfaces/interfaceinformation.ui267
-rw-r--r--noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp24
-rw-r--r--noncore/settings/networksettings/interfaces/interfaceinformationimp.h2
-rw-r--r--noncore/settings/networksettings/interfaces/interfaces.cpp60
-rw-r--r--noncore/settings/networksettings/interfaces/interfacesetupimp.cpp4
-rw-r--r--noncore/settings/networksettings/mainwindowimp.cpp23
-rw-r--r--noncore/settings/networksettings/mainwindowimp.h15
-rw-r--r--noncore/settings/networksettings/module.h39
-rw-r--r--noncore/settings/networksettings/ppp/TODO10
-rw-r--r--noncore/settings/networksettings/ppp/accounts.cpp158
-rw-r--r--noncore/settings/networksettings/ppp/accounts.h40
-rw-r--r--noncore/settings/networksettings/ppp/chooserwidget.cpp85
-rw-r--r--noncore/settings/networksettings/ppp/chooserwidget.h73
-rw-r--r--noncore/settings/networksettings/ppp/connect.cpp166
-rw-r--r--noncore/settings/networksettings/ppp/connect.h2
-rw-r--r--noncore/settings/networksettings/ppp/conwindow.cpp27
-rw-r--r--noncore/settings/networksettings/ppp/devices.cpp212
-rw-r--r--noncore/settings/networksettings/ppp/devices.h95
-rw-r--r--noncore/settings/networksettings/ppp/edit.cpp4
-rw-r--r--noncore/settings/networksettings/ppp/general.cpp293
-rw-r--r--noncore/settings/networksettings/ppp/general.h34
-rw-r--r--noncore/settings/networksettings/ppp/interfaceinformationppp.cpp20
-rw-r--r--noncore/settings/networksettings/ppp/interfaceppp.cpp70
-rw-r--r--noncore/settings/networksettings/ppp/interfaceppp.h16
-rw-r--r--noncore/settings/networksettings/ppp/kpppwidget.cpp89
-rw-r--r--noncore/settings/networksettings/ppp/modem.cpp85
-rw-r--r--noncore/settings/networksettings/ppp/modem.h23
-rw-r--r--noncore/settings/networksettings/ppp/modemcmds.cpp129
-rw-r--r--noncore/settings/networksettings/ppp/modemcmds.h3
-rw-r--r--noncore/settings/networksettings/ppp/modeminfo.cpp24
-rw-r--r--noncore/settings/networksettings/ppp/ppp.pro5
-rw-r--r--noncore/settings/networksettings/ppp/pppconfig.cpp19
-rw-r--r--noncore/settings/networksettings/ppp/pppconfig.h6
-rw-r--r--noncore/settings/networksettings/ppp/pppdata.cpp397
-rw-r--r--noncore/settings/networksettings/ppp/pppdata.h47
-rw-r--r--noncore/settings/networksettings/ppp/pppmodule.cpp117
-rw-r--r--noncore/settings/networksettings/ppp/runtests.cpp12
-rw-r--r--noncore/settings/networksettings/wlan/keyedit.cpp1
-rw-r--r--noncore/settings/networksettings/wlan/wlan.ui96
-rw-r--r--noncore/settings/networksettings/wlan/wlanimp2.cpp35
-rw-r--r--noncore/settings/networksettings/wlan/wlanmodule.cpp2
-rw-r--r--noncore/settings/usermanager/userdialog.cpp2
-rw-r--r--noncore/settings/usermanager/userdialog.h1
-rw-r--r--noncore/settings/usermanager/usermanager.cpp2
-rw-r--r--noncore/settings/usermanager/usermanager.pro2
-rw-r--r--noncore/styles/flat/flat.cpp128
-rw-r--r--noncore/styles/flat/flat.h6
-rw-r--r--noncore/todayplugins/stockticker/stockticker/inputDialog.cpp1
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp2
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h2
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp622
-rw-r--r--noncore/todayplugins/weather/weatherconfig.h1
-rw-r--r--noncore/tools/clock/clock.cpp7
-rw-r--r--noncore/tools/euroconv/main.cpp2
-rw-r--r--noncore/tools/formatter/formatter.cpp3
66 files changed, 2410 insertions, 1321 deletions
diff --git a/noncore/settings/appearance2/appearance.cpp b/noncore/settings/appearance2/appearance.cpp
index c376ec7..00128d3 100644
--- a/noncore/settings/appearance2/appearance.cpp
+++ b/noncore/settings/appearance2/appearance.cpp
@@ -1,652 +1,653 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 Copyright (c) 2002 Trolltech AS <info@trolltech.com> 3 Copyright (c) 2002 Trolltech AS <info@trolltech.com>
4 =. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> 4 =. Copyright (c) 2002 Dan Williams <williamsdr@acm.org>
5             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> 5             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This file is free software; you can 7 _;:,     .>    :=|. This file is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU General Public 9:`=1 )Y*s>-.--   : the terms of the GNU General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This file is distributed in the hope that 14    .i_,=:_.      -<s. This file is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
19..}^=.=       =       ; Public License for more details. 19..}^=.=       =       ; Public License for more details.
20++=   -.     .`     .: 20++=   -.     .`     .:
21 :     =  ...= . :.=- You should have received a copy of the GNU 21 :     =  ...= . :.=- You should have received a copy of the GNU
22 -.   .:....=;==+<; General Public License along with this file; 22 -.   .:....=;==+<; General Public License along with this file;
23  -_. . .   )=.  = see the file COPYING. If not, write to the 23  -_. . .   )=.  = see the file COPYING. If not, write to the
24    --        :-=` Free Software Foundation, Inc., 24    --        :-=` Free Software Foundation, Inc.,
25 59 Temple Place - Suite 330, 25 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA. 26 Boston, MA 02111-1307, USA.
27 27
28*/ 28*/
29 29
30#include <qbuttongroup.h> 30#include <qbuttongroup.h>
31#include <qcheckbox.h> 31#include <qcheckbox.h>
32#include <qcombobox.h> 32#include <qcombobox.h>
33#include <qdialog.h> 33#include <qdialog.h>
34#include <qdir.h> 34#include <qdir.h>
35#include <qlabel.h> 35#include <qlabel.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qlineedit.h> 37#include <qlineedit.h>
38#include <qlistbox.h> 38#include <qlistbox.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qpushbutton.h> 40#include <qpushbutton.h>
41#include <qradiobutton.h> 41#include <qradiobutton.h>
42#if QT_VERSION >= 300 42#if QT_VERSION >= 300
43#include <qstylefactory.h> 43#include <qstylefactory.h>
44#endif 44#endif
45#include <qtoolbutton.h> 45#include <qtoolbutton.h>
46#include <qwindowsstyle.h> 46#include <qwindowsstyle.h>
47#include <qlistview.h> 47#include <qlistview.h>
48#include <qheader.h> 48#include <qheader.h>
49#include <qvbox.h> 49#include <qvbox.h>
50#include <qwhatsthis.h> 50#include <qwhatsthis.h>
51 51
52#include <qpe/config.h> 52#include <qpe/config.h>
53#include <qpe/global.h> 53#include <qpe/global.h>
54#include <qpe/resource.h> 54#include <qpe/resource.h>
55#include <qpe/qpeapplication.h> 55#include <qpe/qpeapplication.h>
56#include <qpe/qpemessagebox.h> 56#include <qpe/qpemessagebox.h>
57#include <qpe/qcopenvelope_qws.h> 57#include <qpe/qcopenvelope_qws.h>
58#include <qpe/qpestyle.h> 58#include <qpe/qpestyle.h>
59#include <qpe/lightstyle.h> 59#include <qpe/lightstyle.h>
60#include <qpe/qlibrary.h> 60#include <qpe/qlibrary.h>
61#include <qpe/styleinterface.h> 61#include <qpe/styleinterface.h>
62 62
63#include <opie/ofontselector.h> 63#include <opie/ofontselector.h>
64#include <opie/odevice.h> 64#include <opie/odevice.h>
65#include <opie/ofiledialog.h> 65#include <opie/ofiledialog.h>
66#include <opie/otabwidget.h> 66#include <opie/otabwidget.h>
67 67
68#include "appearance.h" 68#include "appearance.h"
69#include "editScheme.h" 69#include "editScheme.h"
70#include "stylelistitem.h" 70#include "stylelistitem.h"
71#include "decolistitem.h" 71#include "decolistitem.h"
72#include "colorlistitem.h" 72#include "colorlistitem.h"
73#include "exceptlistitem.h" 73#include "exceptlistitem.h"
74#include "sample.h" 74#include "sample.h"
75 75
76 76
77using namespace Opie; 77using namespace Opie;
78 78
79 79
80class DefaultWindowDecoration : public WindowDecorationInterface 80class DefaultWindowDecoration : public WindowDecorationInterface
81{ 81{
82public: 82public:
83 DefaultWindowDecoration() : ref(0) {} 83 DefaultWindowDecoration() : ref(0) {}
84 QString name() const { 84 QString name() const {
85 return "Default"; 85 return "Default";
86 } 86 }
87 QPixmap icon() const { 87QPixmap icon() const {
88 return QPixmap(); 88 return QPixmap();
89 } 89 }
90 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { 90 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
91 *iface = 0; 91 *iface = 0;
92 if ( uuid == IID_QUnknown ) 92 if ( uuid == IID_QUnknown )
93 *iface = this; 93 *iface = this;
94 else if ( uuid == IID_WindowDecoration ) 94 else if ( uuid == IID_WindowDecoration )
95 *iface = this; 95 *iface = this;
96 96
97 if ( *iface ) 97 if ( *iface )
98 (*iface)->addRef(); 98 (*iface)->addRef();
99 return QS_OK; 99 return QS_OK;
100 } 100 }
101 Q_REFCOUNT 101 Q_REFCOUNT
102 102
103private: 103private:
104 ulong ref; 104 ulong ref;
105}; 105};
106 106
107 107
108 108
109 109
110 110
111 111
112 112
113QWidget *Appearance::createStyleTab ( QWidget *parent, Config &cfg ) 113QWidget *Appearance::createStyleTab ( QWidget *parent, Config &cfg )
114{ 114{
115 QWidget* tab = new QWidget( parent, "StyleTab" ); 115 QWidget* tab = new QWidget( parent, "StyleTab" );
116 QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 ); 116 QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 );
117 117
118 m_style_list = new QListBox( tab, "m_style_list" ); 118 m_style_list = new QListBox( tab, "m_style_list" );
119 vertLayout->addWidget( m_style_list ); 119 vertLayout->addWidget( m_style_list );
120 QWhatsThis::add( m_style_list, tr( "Styles control the way items such as buttons and scroll bars appear in all applications.\n\nClick here to select an available style." ) ); 120 QWhatsThis::add( m_style_list, tr( "Styles control the way items such as buttons and scroll bars appear in all applications.\n\nClick here to select an available style." ) );
121 121
122 m_style_settings = new QPushButton ( tr( "Settings..." ), tab ); 122 m_style_settings = new QPushButton ( tr( "Settings..." ), tab );
123 connect ( m_style_settings, SIGNAL( clicked ( )), this, SLOT( styleSettingsClicked ( ))); 123 connect ( m_style_settings, SIGNAL( clicked ( )), this, SLOT( styleSettingsClicked ( )));
124 vertLayout-> addWidget ( m_style_settings ); 124 vertLayout-> addWidget ( m_style_settings );
125 QWhatsThis::add( m_style_settings, tr( "Click here to configure the currently selected style.\n\nNote: This option is not available for all styles." ) ); 125 QWhatsThis::add( m_style_settings, tr( "Click here to configure the currently selected style.\n\nNote: This option is not available for all styles." ) );
126 126
127 QString s = cfg. readEntry ( "Style", "Light" ); 127 QString s = cfg. readEntry ( "Style", "Light" );
128 128
129 129
130#if QT_VERSION >= 300 130#if QT_VERSION >= 300
131 m_style_list->insertStringList(QStyleFactory::styles()); 131 m_style_list->insertStringList(QStyleFactory::styles());
132#else 132#else
133 m_style_list-> insertItem ( new StyleListItem ( "Windows", new QWindowsStyle ( ))); 133 m_style_list-> insertItem ( new StyleListItem ( "Windows", new QWindowsStyle ( )));
134 m_style_list-> insertItem ( new StyleListItem ( "Light", new LightStyle ( ))); 134 m_style_list-> insertItem ( new StyleListItem ( "Light", new LightStyle ( )));
135 m_style_list-> insertItem ( new StyleListItem ( "QPE", new QPEStyle ( ))); 135 m_style_list-> insertItem ( new StyleListItem ( "QPE", new QPEStyle ( )));
136#endif 136#endif
137 { 137 {
138 QString path = QPEApplication::qpeDir ( ); 138 QString path = QPEApplication::qpeDir ( );
139 path.append( "/plugins/styles/" ); 139 path.append( "/plugins/styles/" );
140 QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); 140 QStringList sl = QDir ( path, "lib*.so" ). entryList ( );
141 141
142 for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { 142 for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) {
143 QString libstr = path; 143 QString libstr = path;
144 libstr.append( "/" ); 144 libstr.append( "/" );
145 libstr.append( *it ); 145 libstr.append( *it );
146 QLibrary *lib = new QLibrary ( libstr ); 146 QLibrary *lib = new QLibrary ( libstr );
147 StyleInterface *iface; 147 StyleInterface *iface;
148 148
149 if (( lib-> queryInterface ( IID_Style, (QUnknownInterface **) &iface ) == QS_OK ) && iface ) { 149 if (( lib-> queryInterface ( IID_Style, (QUnknownInterface **) &iface ) == QS_OK ) && iface ) {
150 StyleListItem *slit = new StyleListItem ( lib, iface ); 150 StyleListItem *slit = new StyleListItem ( lib, iface );
151 m_style_list-> insertItem ( slit ); 151 m_style_list-> insertItem ( slit );
152 152
153 if ( slit-> key ( ) == s ) 153 if ( slit-> key ( ) == s )
154 m_style_list-> setCurrentItem ( slit ); 154 m_style_list-> setCurrentItem ( slit );
155 } 155 }
156 else 156 else
157 delete lib; 157 delete lib;
158 } 158 }
159 } 159 }
160 160
161 m_original_style = m_style_list-> currentItem ( ); 161 m_original_style = m_style_list-> currentItem ( );
162 styleClicked ( m_original_style ); 162 styleClicked ( m_original_style );
163 163
164 connect( m_style_list, SIGNAL( highlighted( int ) ), this, SLOT( styleClicked( int ) ) ); 164 connect( m_style_list, SIGNAL( highlighted( int ) ), this, SLOT( styleClicked( int ) ) );
165 165
166 return tab; 166 return tab;
167} 167}
168 168
169QWidget *Appearance::createDecoTab ( QWidget *parent, Config &cfg ) 169QWidget *Appearance::createDecoTab ( QWidget *parent, Config &cfg )
170{ 170{
171 QWidget* tab = new QWidget( parent, "DecoTab" ); 171 QWidget* tab = new QWidget( parent, "DecoTab" );
172 QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 ); 172 QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 );
173 173
174 m_deco_list = new QListBox( tab, "m_deco_list" ); 174 m_deco_list = new QListBox( tab, "m_deco_list" );
175 vertLayout->addWidget( m_deco_list ); 175 vertLayout->addWidget( m_deco_list );
176 QWhatsThis::add( m_deco_list, tr( "Window decorations control the way the application title bar and its buttons appear.\n\nClick here to select an available decoration." ) ); 176 QWhatsThis::add( m_deco_list, tr( "Window decorations control the way the application title bar and its buttons appear.\n\nClick here to select an available decoration." ) );
177 177
178 QString s = cfg. readEntry ( "Decoration" ); 178 QString s = cfg. readEntry ( "Decoration", "libflat.so" );
179 179
180 m_deco_list-> insertItem ( new DecoListItem ( "QPE" )); 180 m_deco_list-> insertItem ( new DecoListItem ( "QPE" ));
181 181
182 { 182 {
183 QString path = QPEApplication::qpeDir(); 183 QString path = QPEApplication::qpeDir();
184 path.append( "/plugins/decorations/" ); 184 path.append( "/plugins/decorations/" );
185 QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); 185 QStringList sl = QDir ( path, "lib*.so" ). entryList ( );
186 186
187 for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { 187 for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) {
188 QString libstr = path; 188 QString libstr = path;
189 libstr.append( "/" ); 189 libstr.append( "/" );
190 libstr.append( *it ); 190 libstr.append( *it );
191 QLibrary *lib = new QLibrary ( libstr ); 191 QLibrary *lib = new QLibrary ( libstr );
192 WindowDecorationInterface *iface; 192 WindowDecorationInterface *iface;
193 193
194 if ( lib-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &iface ) == QS_OK ) { 194 if ( lib-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &iface ) == QS_OK ) {
195 DecoListItem *dlit = new DecoListItem ( lib, iface ); 195 DecoListItem *dlit = new DecoListItem ( lib, iface );
196 m_deco_list-> insertItem ( dlit ); 196 m_deco_list-> insertItem ( dlit );
197 197
198 if ( dlit-> key ( ) == s ) 198 if ( dlit-> key ( ) == s )
199 m_deco_list-> setCurrentItem ( dlit ); 199 m_deco_list-> setCurrentItem ( dlit );
200 } 200 }
201 else 201 else
202 delete lib; 202 delete lib;
203 } 203 }
204 } 204 }
205 205
206 m_original_deco = m_deco_list-> currentItem ( ); 206 m_original_deco = m_deco_list-> currentItem ( );
207 if ( m_deco_list-> currentItem ( ) < 0 ) 207 if ( m_deco_list-> currentItem ( ) < 0 )
208 m_deco_list-> setCurrentItem ( 0 ); 208 m_deco_list-> setCurrentItem ( 0 );
209 decoClicked ( m_original_deco ); 209 decoClicked ( m_original_deco );
210 210
211 connect( m_deco_list, SIGNAL( highlighted( int ) ), this, SLOT( decoClicked( int ) ) ); 211 connect( m_deco_list, SIGNAL( highlighted( int ) ), this, SLOT( decoClicked( int ) ) );
212 212
213 return tab; 213 return tab;
214} 214}
215 215
216QWidget *Appearance::createFontTab ( QWidget *parent, Config &cfg ) 216QWidget *Appearance::createFontTab ( QWidget *parent, Config &cfg )
217{ 217{
218 QString familyStr = cfg. readEntry ( "FontFamily", "Helvetica" ); 218 QString familyStr = cfg. readEntry ( "FontFamily", "Helvetica" );
219 QString styleStr = cfg. readEntry ( "FontStyle", "Regular" ); 219 QString styleStr = cfg. readEntry ( "FontStyle", "Regular" );
220 int size = cfg. readNumEntry ( "FontSize", 10 ); 220 int size = cfg. readNumEntry ( "FontSize", 10 );
221 221
222 m_fontselect = new OFontSelector ( false, parent, "FontTab" ); 222 m_fontselect = new OFontSelector ( false, parent, "FontTab" );
223 m_fontselect-> setSelectedFont ( familyStr, styleStr, size ); 223 m_fontselect-> setSelectedFont ( familyStr, styleStr, size );
224 QWhatsThis::add( m_fontselect, tr( "Select the desired name, style and size of the default font applications will use." ) ); 224 QWhatsThis::add( m_fontselect, tr( "Select the desired name, style and size of the default font applications will use." ) );
225 225
226 connect( m_fontselect, SIGNAL( fontSelected ( const QFont & )), 226 connect( m_fontselect, SIGNAL( fontSelected ( const QFont & )),
227 this, SLOT( fontClicked ( const QFont & ))); 227 this, SLOT( fontClicked ( const QFont & )));
228 228
229 return m_fontselect; 229 return m_fontselect;
230} 230}
231 231
232QWidget *Appearance::createColorTab ( QWidget *parent, Config &cfg ) 232QWidget *Appearance::createColorTab ( QWidget *parent, Config &cfg )
233{ 233{
234 QWidget *tab = new QWidget( parent, "ColorTab" ); 234 QWidget *tab = new QWidget( parent, "ColorTab" );
235 QGridLayout *gridLayout = new QGridLayout( tab, 0, 0, 3, 3 ); 235 QGridLayout *gridLayout = new QGridLayout( tab, 0, 0, 3, 3 );
236 gridLayout->setRowStretch ( 3, 10 ); 236 gridLayout->setRowStretch ( 3, 10 );
237 237
238 m_color_list = new QListBox ( tab ); 238 m_color_list = new QListBox ( tab );
239 gridLayout->addMultiCellWidget ( m_color_list, 0, 3, 0, 0 ); 239 gridLayout->addMultiCellWidget ( m_color_list, 0, 3, 0, 0 );
240 connect( m_color_list, SIGNAL( highlighted( int ) ), this, SLOT( colorClicked( int ) ) ); 240 connect( m_color_list, SIGNAL( highlighted( int ) ), this, SLOT( colorClicked( int ) ) );
241 QWhatsThis::add( m_color_list, tr( "Color schemes are a collection of colors which are used for various parts of the display.\n\nClick here to select an available scheme." ) ); 241 QWhatsThis::add( m_color_list, tr( "Color schemes are a collection of colors which are used for various parts of the display.\n\nClick here to select an available scheme." ) );
242 242
243 m_color_list-> insertItem ( new ColorListItem ( tr( "Current scheme" ), cfg )); 243 m_color_list-> insertItem ( new ColorListItem ( tr( "Current scheme" ), cfg ));
244 244
245 QString path = QPEApplication::qpeDir ( ); 245 QString path = QPEApplication::qpeDir ( );
246 path.append( "/etc/colors/" ); 246 path.append( "/etc/colors/" );
247 QStringList sl = QDir ( path ). entryList ( "*.scheme" ); 247 QStringList sl = QDir ( path ). entryList ( "*.scheme" );
248 248
249 for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { 249 for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) {
250 QString name = (*it). left ((*it). find ( ".scheme" )); 250 QString name = (*it). left ((*it). find ( ".scheme" ));
251 QString pathstr = path; 251 QString pathstr = path;
252 pathstr.append( *it ); 252 pathstr.append( *it );
253 Config config ( pathstr, Config::File ); 253 Config config ( pathstr, Config::File );
254 config. setGroup ( "Colors" ); 254 config. setGroup ( "Colors" );
255 255
256 m_color_list-> insertItem ( new ColorListItem ( name, config )); 256 m_color_list-> insertItem ( new ColorListItem ( name, config ));
257 } 257 }
258 258
259 m_color_list-> setCurrentItem ( 0 ); 259 m_color_list-> setCurrentItem ( 0 );
260 260
261 QPushButton* tempButton = new QPushButton( tab, "editSchemeButton" ); 261 QPushButton* tempButton = new QPushButton( tab, "editSchemeButton" );
262 tempButton->setText( tr( "Edit..." ) ); 262 tempButton->setText( tr( "Edit..." ) );
263 connect( tempButton, SIGNAL( clicked() ), this, SLOT( editSchemeClicked() ) ); 263 connect( tempButton, SIGNAL( clicked() ), this, SLOT( editSchemeClicked() ) );
264 gridLayout->addWidget( tempButton, 0, 1 ); 264 gridLayout->addWidget( tempButton, 0, 1 );
265 QWhatsThis::add( tempButton, tr( "Click here to change the colors in the current color scheme." ) ); 265 QWhatsThis::add( tempButton, tr( "Click here to change the colors in the current color scheme." ) );
266 266
267 tempButton = new QPushButton( tab, "deleteSchemeButton" ); 267 tempButton = new QPushButton( tab, "deleteSchemeButton" );
268 tempButton->setText( tr( "Delete" ) ); 268 tempButton->setText( tr( "Delete" ) );
269 connect( tempButton, SIGNAL( clicked() ), this, SLOT( deleteSchemeClicked() ) ); 269 connect( tempButton, SIGNAL( clicked() ), this, SLOT( deleteSchemeClicked() ) );
270 gridLayout->addWidget( tempButton, 1, 1 ); 270 gridLayout->addWidget( tempButton, 1, 1 );
271 QWhatsThis::add( tempButton, tr( "Click here to delete the color scheme selected in the list to the left." ) ); 271 QWhatsThis::add( tempButton, tr( "Click here to delete the color scheme selected in the list to the left." ) );
272 272
273 tempButton = new QPushButton( tab, "saveSchemeButton" ); 273 tempButton = new QPushButton( tab, "saveSchemeButton" );
274 tempButton->setText( tr( "Save" ) ); 274 tempButton->setText( tr( "Save" ) );
275 connect( tempButton, SIGNAL( clicked() ), this, SLOT( saveSchemeClicked() ) ); 275 connect( tempButton, SIGNAL( clicked() ), this, SLOT( saveSchemeClicked() ) );
276 gridLayout->addWidget( tempButton, 2, 1 ); 276 gridLayout->addWidget( tempButton, 2, 1 );
277 QWhatsThis::add( tempButton, tr( "Click here to name and save the current color scheme." ) ); 277 QWhatsThis::add( tempButton, tr( "Click here to name and save the current color scheme." ) );
278 278
279 return tab; 279 return tab;
280} 280}
281 281
282QWidget *Appearance::createAdvancedTab ( QWidget *parent, Config &cfg ) 282QWidget *Appearance::createAdvancedTab ( QWidget *parent, Config &cfg )
283{ 283{
284 QWidget *tab = new QWidget ( parent ); 284 QWidget *tab = new QWidget ( parent );
285 QVBoxLayout *vertLayout = new QVBoxLayout( tab, 3, 3 ); 285 QVBoxLayout *vertLayout = new QVBoxLayout( tab, 3, 3 );
286 286
287 QGridLayout *lay = new QGridLayout ( vertLayout, 0, 0, 3, 0 ); 287 QGridLayout *lay = new QGridLayout ( vertLayout, 0, 0, 3, 0 );
288 288
289 m_force = new QCheckBox ( tr( "Force styling for all applications." ), tab ); 289 m_force = new QCheckBox ( tr( "Force styling for all applications." ), tab );
290 m_force-> setChecked ( cfg. readBoolEntry ( "ForceStyle" )); 290 m_force-> setChecked ( cfg. readBoolEntry ( "ForceStyle" ));
291 lay-> addMultiCellWidget ( m_force, 0, 0, 0, 1 ); 291 lay-> addMultiCellWidget ( m_force, 0, 0, 0, 1 );
292 QWhatsThis::add( m_force, tr( "Click here to allow all applications to use global appearance settings." ) ); 292 QWhatsThis::add( m_force, tr( "Click here to allow all applications to use global appearance settings." ) );
293 293
294 QLabel *l = new QLabel ( tab ); 294 QLabel *l = new QLabel ( tab );
295 l-> setText ( QString ( "<p>%1</p>" ). arg ( tr( "Disable styling for these applications ( <b>*</b> can be used as a wildcard):" ))); 295 l-> setText ( QString ( "<p>%1</p>" ). arg ( tr( "Disable styling for these applications ( <b>*</b> can be used as a wildcard):" )));
296 lay-> addMultiCellWidget ( l, 1, 1, 0, 1 ); 296 lay-> addMultiCellWidget ( l, 1, 1, 0, 1 );
297 QWhatsThis::add( l, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) ); 297 QWhatsThis::add( l, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) );
298 298
299 m_except = new QListView ( tab ); 299 m_except = new QListView ( tab );
300 m_except-> addColumn ( Resource::loadIconSet ( "appearance" ), "", 24 ); 300 m_except-> addColumn ( Resource::loadIconSet ( "appearance" ), "", 24 );
301 m_except-> addColumn ( Resource::loadIconSet ( "font" ), "", 24 ); 301 m_except-> addColumn ( Resource::loadIconSet ( "font" ), "", 24 );
302 m_except-> addColumn ( Resource::loadIconSet ( "appearance/deco" ), "", 24 ); 302 m_except-> addColumn ( Resource::loadIconSet ( "appearance/deco" ), "", 24 );
303 m_except-> addColumn ( tr( "Binary file(s)" )); 303 m_except-> addColumn ( tr( "Binary file(s)" ));
304 m_except-> setColumnAlignment ( 0, AlignCenter ); 304 m_except-> setColumnAlignment ( 0, AlignCenter );
305 m_except-> setColumnAlignment ( 1, AlignCenter ); 305 m_except-> setColumnAlignment ( 1, AlignCenter );
306 m_except-> setColumnAlignment ( 2, AlignCenter ); 306 m_except-> setColumnAlignment ( 2, AlignCenter );
307 m_except-> setAllColumnsShowFocus ( true ); 307 m_except-> setAllColumnsShowFocus ( true );
308 m_except-> setMinimumHeight ( 30 ); 308 m_except-> setMinimumHeight ( 30 );
309 m_except-> header ( )-> setClickEnabled ( false ); 309 m_except-> header ( )-> setClickEnabled ( false );
310 m_except-> header ( )-> setResizeEnabled ( false ); 310 m_except-> header ( )-> setResizeEnabled ( false );
311 m_except-> header ( )-> setMovingEnabled ( false ); 311 m_except-> header ( )-> setMovingEnabled ( false );
312 m_except-> setSorting ( -1 ); 312 m_except-> setSorting ( -1 );
313 lay-> addMultiCellWidget ( m_except, 2, 6, 0, 0 ); 313 lay-> addMultiCellWidget ( m_except, 2, 6, 0, 0 );
314 QWhatsThis::add( m_except, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) ); 314 QWhatsThis::add( m_except, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) );
315 315
316 connect ( m_except, SIGNAL( clicked ( QListViewItem *, const QPoint &, int )), this, SLOT( clickedExcept ( QListViewItem *, const QPoint &, int ))); 316 connect ( m_except, SIGNAL( clicked ( QListViewItem *, const QPoint &, int )), this, SLOT( clickedExcept ( QListViewItem *, const QPoint &, int )));
317 317
318 QToolButton *tb = new QToolButton ( tab ); 318 QToolButton *tb = new QToolButton ( tab );
319 tb-> setIconSet ( Resource::loadIconSet ( "appearance/add" )); 319 tb-> setIconSet ( Resource::loadIconSet ( "appearance/add" ));
320 tb-> setFocusPolicy ( QWidget::StrongFocus ); 320 tb-> setFocusPolicy ( QWidget::StrongFocus );
321 lay-> addWidget ( tb, 2, 1 ); 321 lay-> addWidget ( tb, 2, 1 );
322 connect ( tb, SIGNAL( clicked ( )), this, SLOT( addExcept ( ))); 322 connect ( tb, SIGNAL( clicked ( )), this, SLOT( addExcept ( )));
323 QWhatsThis::add( tb, tr( "Click here to add an application to the list above." ) ); 323 QWhatsThis::add( tb, tr( "Click here to add an application to the list above." ) );
324 324
325 tb = new QToolButton ( tab ); 325 tb = new QToolButton ( tab );
326 tb-> setIconSet ( Resource::loadIconSet ( "editdelete" )); 326 tb-> setIconSet ( Resource::loadIconSet ( "editdelete" ));
327 tb-> setFocusPolicy ( QWidget::StrongFocus ); 327 tb-> setFocusPolicy ( QWidget::StrongFocus );
328 lay-> addWidget ( tb, 3, 1 ); 328 lay-> addWidget ( tb, 3, 1 );
329 connect ( tb, SIGNAL( clicked ( )), this, SLOT( delExcept ( ))); 329 connect ( tb, SIGNAL( clicked ( )), this, SLOT( delExcept ( )));
330 QWhatsThis::add( tb, tr( "Click here to delete the currently selected application." ) ); 330 QWhatsThis::add( tb, tr( "Click here to delete the currently selected application." ) );
331 331
332 tb = new QToolButton ( tab ); 332 tb = new QToolButton ( tab );
333 tb-> setIconSet ( Resource::loadIconSet ( "up" )); 333 tb-> setIconSet ( Resource::loadIconSet ( "up" ));
334 tb-> setFocusPolicy ( QWidget::StrongFocus ); 334 tb-> setFocusPolicy ( QWidget::StrongFocus );
335 lay-> addWidget ( tb, 4, 1 ); 335 lay-> addWidget ( tb, 4, 1 );
336 connect ( tb, SIGNAL( clicked ( )), this, SLOT( upExcept ( ))); 336 connect ( tb, SIGNAL( clicked ( )), this, SLOT( upExcept ( )));
337 QWhatsThis::add( tb, tr( "Click here to move the currently selected application up in the list." ) ); 337 QWhatsThis::add( tb, tr( "Click here to move the currently selected application up in the list." ) );
338 338
339 tb = new QToolButton ( tab ); 339 tb = new QToolButton ( tab );
340 tb-> setIconSet ( Resource::loadIconSet ( "down" )); 340 tb-> setIconSet ( Resource::loadIconSet ( "down" ));
341 tb-> setFocusPolicy ( QWidget::StrongFocus ); 341 tb-> setFocusPolicy ( QWidget::StrongFocus );
342 lay-> addWidget ( tb, 5, 1 ); 342 lay-> addWidget ( tb, 5, 1 );
343 connect ( tb, SIGNAL( clicked ( )), this, SLOT( downExcept ( ))); 343 connect ( tb, SIGNAL( clicked ( )), this, SLOT( downExcept ( )));
344 QWhatsThis::add( tb, tr( "Click here to move the currently selected application down in the list." ) ); 344 QWhatsThis::add( tb, tr( "Click here to move the currently selected application down in the list." ) );
345 345
346 lay-> setRowStretch ( 6, 10 ); 346 lay-> setRowStretch ( 6, 10 );
347 lay-> setColStretch ( 0, 10 ); 347 lay-> setColStretch ( 0, 10 );
348 348
349 QStringList sl = cfg. readListEntry ( "NoStyle", ';' ); 349 QStringList sl = cfg. readListEntry ( "NoStyle", ';' );
350 QListViewItem *lvit = 0; 350 QListViewItem *lvit = 0;
351 for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { 351 for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) {
352 int fl = ( *it ). left ( 1 ). toInt ( 0, 32 ); 352 int fl = ( *it ). left ( 1 ). toInt ( 0, 32 );
353 353
354 lvit = new ExceptListItem ( m_except, lvit, ( *it ). mid ( 1 ), fl & 0x01, fl & 0x02, fl & 0x04 ); 354 lvit = new ExceptListItem ( m_except, lvit, ( *it ). mid ( 1 ), fl & 0x01, fl & 0x02, fl & 0x04 );
355 } 355 }
356 356
357 357
358 vertLayout-> addSpacing ( 3 ); 358 vertLayout-> addSpacing ( 3 );
359 QFrame *f = new QFrame ( tab ); 359 QFrame *f = new QFrame ( tab );
360 f-> setFrameStyle ( QFrame::HLine | QFrame::Sunken ); 360 f-> setFrameStyle ( QFrame::HLine | QFrame::Sunken );
361 vertLayout-> addWidget ( f ); 361 vertLayout-> addWidget ( f );
362 vertLayout-> addSpacing ( 3 ); 362 vertLayout-> addSpacing ( 3 );
363 363
364 364
365 QGridLayout* gridLayout = new QGridLayout ( vertLayout, 0, 0, 3, 0 ); 365 QGridLayout* gridLayout = new QGridLayout ( vertLayout, 0, 0, 3, 0 );
366 366
367 int style = cfg. readNumEntry ( "TabStyle", 2 ) - 1; 367 int style = cfg. readNumEntry ( "TabStyle", 2 ) - 1;
368 bool tabtop = ( cfg. readEntry ( "TabPosition", "Top" ) == "Top" ); 368 bool tabtop = ( cfg. readEntry ( "TabPosition", "Top" ) == "Top" );
369 369
370 QLabel* label = new QLabel( tr( "Tab style:" ), tab ); 370 QLabel* label = new QLabel( tr( "Tab style:" ), tab );
371 gridLayout-> addWidget ( label, 0, 0 ); 371 gridLayout-> addWidget ( label, 0, 0 );
372 QWhatsThis::add( label, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) ); 372 QWhatsThis::add( label, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) );
373 373
374 QButtonGroup* btngrp = new QButtonGroup( tab, "buttongroup" ); 374 QButtonGroup* btngrp = new QButtonGroup( tab, "buttongroup" );
375 btngrp-> hide ( ); 375 btngrp-> hide ( );
376 btngrp-> setExclusive ( true ); 376 btngrp-> setExclusive ( true );
377 377
378 m_tabstyle_list = new QComboBox ( false, tab, "tabstyle" ); 378 m_tabstyle_list = new QComboBox ( false, tab, "tabstyle" );
379 m_tabstyle_list-> insertItem ( tr( "Tabs" )); 379 m_tabstyle_list-> insertItem ( tr( "Tabs" ));
380 m_tabstyle_list-> insertItem ( tr( "Tabs w/icons" )); 380 m_tabstyle_list-> insertItem ( tr( "Tabs w/icons" ));
381 m_tabstyle_list-> insertItem ( tr( "Drop down list" )); 381 m_tabstyle_list-> insertItem ( tr( "Drop down list" ));
382 m_tabstyle_list-> insertItem ( tr( "Drop down list w/icons" )); 382 m_tabstyle_list-> insertItem ( tr( "Drop down list w/icons" ));
383 m_tabstyle_list-> setCurrentItem ( style ); 383 m_tabstyle_list-> setCurrentItem ( style );
384 gridLayout-> addMultiCellWidget ( m_tabstyle_list, 0, 0, 1, 2 ); 384 gridLayout-> addMultiCellWidget ( m_tabstyle_list, 0, 0, 1, 2 );
385 QWhatsThis::add( m_tabstyle_list, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) ); 385 QWhatsThis::add( m_tabstyle_list, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) );
386 386
387 m_tabstyle_top = new QRadioButton( tr( "Top" ), tab, "tabpostop" ); 387 m_tabstyle_top = new QRadioButton( tr( "Top" ), tab, "tabpostop" );
388 btngrp-> insert ( m_tabstyle_top ); 388 btngrp-> insert ( m_tabstyle_top );
389 gridLayout-> addWidget( m_tabstyle_top, 1, 1 ); 389 gridLayout-> addWidget( m_tabstyle_top, 1, 1 );
390 QWhatsThis::add( m_tabstyle_top, tr( "Click here so that tabs appear at the top of the window." ) ); 390 QWhatsThis::add( m_tabstyle_top, tr( "Click here so that tabs appear at the top of the window." ) );
391 391
392 m_tabstyle_bottom = new QRadioButton( tr( "Bottom" ), tab, "tabposbottom" ); 392 m_tabstyle_bottom = new QRadioButton( tr( "Bottom" ), tab, "tabposbottom" );
393 btngrp-> insert ( m_tabstyle_bottom ); 393 btngrp-> insert ( m_tabstyle_bottom );
394 gridLayout-> addWidget( m_tabstyle_bottom, 1, 2 ); 394 gridLayout-> addWidget( m_tabstyle_bottom, 1, 2 );
395 QWhatsThis::add( m_tabstyle_bottom, tr( "Click here so that tabs appear at the bottom of the window." ) ); 395 QWhatsThis::add( m_tabstyle_bottom, tr( "Click here so that tabs appear at the bottom of the window." ) );
396 396
397 m_tabstyle_top-> setChecked ( tabtop ); 397 m_tabstyle_top-> setChecked ( tabtop );
398 m_tabstyle_bottom-> setChecked ( !tabtop ); 398 m_tabstyle_bottom-> setChecked ( !tabtop );
399 399
400 m_original_tabstyle = style; 400 m_original_tabstyle = style;
401 m_original_tabpos = tabtop; 401 m_original_tabpos = tabtop;
402 402
403 vertLayout-> addSpacing ( 3 ); 403 vertLayout-> addSpacing ( 3 );
404 QHBoxLayout *rotLay = new QHBoxLayout ( vertLayout, 3 ); 404 QHBoxLayout *rotLay = new QHBoxLayout ( vertLayout, 3 );
405 405
406 QLabel* rotlabel = new QLabel( tr( "Rotation direction:" ), tab ); 406 QLabel* rotlabel = new QLabel( tr( "Rotation direction:" ), tab );
407 m_rotdir_cw = new QRadioButton( tab, "rotdir_cw" ); 407 m_rotdir_cw = new QRadioButton( tab, "rotdir_cw" );
408 QPixmap cw1 = Resource::loadIconSet("redo"). pixmap( ); 408 QPixmap cw1 = Resource::loadIconSet("redo"). pixmap( );
409 m_rotdir_ccw = new QRadioButton( tab, "rotdir_ccw" ); 409 m_rotdir_ccw = new QRadioButton( tab, "rotdir_ccw" );
410 QImage ccwImage = cw1. convertToImage( ). mirror( 1, 0 ); 410 QImage ccwImage = cw1. convertToImage( ). mirror( 1, 0 );
411 QPixmap ccw1; 411 QPixmap ccw1;
412 m_rotdir_flip = new QRadioButton( tab, "rotdir_flip" ); 412 m_rotdir_flip = new QRadioButton( tab, "rotdir_flip" );
413 QPixmap flip1 = Resource::loadIconSet("pass"). pixmap( ); 413 QPixmap flip1 = Resource::loadIconSet("pass"). pixmap( );
414 QButtonGroup* rotbtngrp = new QButtonGroup( tab, "rotbuttongroup" ); 414 QButtonGroup* rotbtngrp = new QButtonGroup( tab, "rotbuttongroup" );
415 415
416 rotbtngrp-> hide ( ); 416 rotbtngrp-> hide ( );
417 rotbtngrp-> setExclusive ( true ); 417 rotbtngrp-> setExclusive ( true );
418 rotbtngrp-> insert ( m_rotdir_cw ); 418 rotbtngrp-> insert ( m_rotdir_cw );
419 rotbtngrp-> insert ( m_rotdir_ccw ); 419 rotbtngrp-> insert ( m_rotdir_ccw );
420 rotbtngrp-> insert ( m_rotdir_flip ); 420 rotbtngrp-> insert ( m_rotdir_flip );
421 421
422 ccw1. convertFromImage( ccwImage ); 422 ccw1. convertFromImage( ccwImage );
423 m_rotdir_cw-> setPixmap( cw1 ); 423 m_rotdir_cw-> setPixmap( cw1 );
424 m_rotdir_ccw-> setPixmap( ccw1 ); 424 m_rotdir_ccw-> setPixmap( ccw1 );
425 m_rotdir_flip-> setPixmap( flip1 ); 425 m_rotdir_flip-> setPixmap( flip1 );
426 426
427 rotLay-> addWidget ( rotlabel, 0 ); 427 rotLay-> addWidget ( rotlabel, 0 );
428 rotLay-> addWidget ( m_rotdir_cw, 0 ); 428 rotLay-> addWidget ( m_rotdir_cw, 0 );
429 rotLay-> addWidget ( m_rotdir_ccw, 0 ); 429 rotLay-> addWidget ( m_rotdir_ccw, 0 );
430 rotLay-> addWidget ( m_rotdir_flip, 0 ); 430 rotLay-> addWidget ( m_rotdir_flip, 0 );
431 431
432 int rotDirection = cfg.readNumEntry( "rotatedir" ); 432 int rotDirection = cfg.readNumEntry( "rotatedir" );
433 ODirection rot = CW; 433 ODirection rot = CW;
434 434
435 if (rotDirection == -1) { 435 if (rotDirection == -1) {
436 rot = ODevice::inst ( )-> direction ( ); 436 rot = ODevice::inst ( )-> direction ( );
437 } else { 437 } else {
438 rot = (ODirection)rotDirection; 438 rot = (ODirection)rotDirection;
439 } 439 }
440 440
441 m_rotdir_cw-> setChecked ( rot == CW ); 441 m_rotdir_cw-> setChecked ( rot == CW );
442 m_rotdir_ccw-> setChecked ( rot == CCW ); 442 m_rotdir_ccw-> setChecked ( rot == CCW );
443 m_rotdir_flip-> setChecked ( rot == Flip ); 443 m_rotdir_flip-> setChecked ( rot == Flip );
444 444
445 return tab; 445 return tab;
446} 446}
447 447
448 448
449Appearance::Appearance( QWidget* parent, const char* name, WFlags ) 449Appearance::Appearance( QWidget* parent, const char* name, WFlags )
450 : QDialog ( parent, name, true, WStyle_ContextHelp ) 450 : QDialog ( parent, name, true, WStyle_ContextHelp )
451{ 451{
452 setCaption( tr( "Appearance Settings" ) ); 452 setCaption( tr( "Appearance Settings" ) );
453 453
454 Config config( "qpe" ); 454 Config config( "qpe" );
455 config.setGroup( "Appearance" ); 455 config.setGroup( "Appearance" );
456 456
457 QVBoxLayout *top = new QVBoxLayout ( this, 3, 3 ); 457 QVBoxLayout *top = new QVBoxLayout ( this, 3, 3 );
458 458
459 m_sample = new SampleWindow ( this ); 459 m_sample = new SampleWindow ( this );
460 m_sample-> setDecoration ( new DefaultWindowDecoration ( )); 460
461 m_sample-> setDecoration ( new DefaultWindowDecoration ( ) );
461 QWhatsThis::add( m_sample, tr( "This is a preview window. Look here to see your new appearance as options are changed." ) ); 462 QWhatsThis::add( m_sample, tr( "This is a preview window. Look here to see your new appearance as options are changed." ) );
462 463
463 OTabWidget* tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom ); 464 OTabWidget* tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom );
464 QWidget *styletab; 465 QWidget *styletab;
465 466
466 m_color_list = 0; 467 m_color_list = 0;
467 468
468 tw-> addTab ( styletab = createStyleTab ( tw, config ), "appearance", tr( "Style" )); 469 tw-> addTab ( styletab = createStyleTab ( tw, config ), "appearance", tr( "Style" ));
469 tw-> addTab ( createFontTab ( tw, config ), "font", tr( "Font" )); 470 tw-> addTab ( createFontTab ( tw, config ), "font", tr( "Font" ));
470 tw-> addTab ( createColorTab ( tw, config ), "appearance/color", tr( "Colors" ) ); 471 tw-> addTab ( createColorTab ( tw, config ), "appearance/color", tr( "Colors" ) );
471 tw-> addTab ( createDecoTab ( tw, config ), "appearance/deco", tr( "Windows" ) ); 472 tw-> addTab ( createDecoTab ( tw, config ), "appearance/deco", tr( "Windows" ) );
472 tw-> addTab ( m_advtab = createAdvancedTab ( tw, config ), "SettingsIcon", tr( "Advanced" ) ); 473 tw-> addTab ( m_advtab = createAdvancedTab ( tw, config ), "SettingsIcon", tr( "Advanced" ) );
473 474
474 top-> addWidget ( tw, 10 ); 475 top-> addWidget ( tw, 10 );
475 top-> addWidget ( m_sample, 1 ); 476 top-> addWidget ( m_sample, 1 );
476 477
477 tw-> setCurrentTab ( styletab ); 478 tw-> setCurrentTab ( styletab );
478 connect ( tw, SIGNAL( currentChanged ( QWidget * )), this, SLOT( tabChanged ( QWidget * ))); 479 connect ( tw, SIGNAL( currentChanged ( QWidget * )), this, SLOT( tabChanged ( QWidget * )));
479 480
480 m_style_changed = m_font_changed = m_color_changed = m_deco_changed = false; 481 m_style_changed = m_font_changed = m_color_changed = m_deco_changed = false;
481} 482}
482 483
483Appearance::~Appearance() 484Appearance::~Appearance()
484{ 485{
485} 486}
486 487
487void Appearance::tabChanged ( QWidget *w ) 488void Appearance::tabChanged ( QWidget *w )
488{ 489{
489 if ( w == m_advtab ) { 490 if ( w == m_advtab ) {
490 m_sample-> hide ( ); 491 m_sample-> hide ( );
491 updateGeometry ( ); // shouldn't be necessary ... 492 updateGeometry ( ); // shouldn't be necessary ...
492 } 493 }
493 else 494 else
494 m_sample-> show ( ); 495 m_sample-> show ( );
495} 496}
496 497
497void Appearance::accept ( ) 498void Appearance::accept ( )
498{ 499{
499 bool newtabpos = m_tabstyle_top-> isChecked ( ); 500 bool newtabpos = m_tabstyle_top-> isChecked ( );
500 int newtabstyle = m_tabstyle_list-> currentItem ( ); 501 int newtabstyle = m_tabstyle_list-> currentItem ( );
501 502
502 Config config ( "qpe" ); 503 Config config ( "qpe" );
503 config. setGroup ( "Appearance" ); 504 config. setGroup ( "Appearance" );
504 505
505 if ( m_style_changed ) { 506 if ( m_style_changed ) {
506 StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( )); 507 StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( ));
507 if ( item ) 508 if ( item )
508 config.writeEntry( "Style", item-> key ( )); 509 config.writeEntry( "Style", item-> key ( ));
509 } 510 }
510 511
511 if ( m_deco_changed ) { 512 if ( m_deco_changed ) {
512 DecoListItem *item = (DecoListItem *) m_deco_list-> item ( m_deco_list-> currentItem ( )); 513 DecoListItem *item = (DecoListItem *) m_deco_list-> item ( m_deco_list-> currentItem ( ));
513 if ( item ) 514 if ( item )
514 config.writeEntry( "Decoration", item-> key ( )); 515 config.writeEntry( "Decoration", item-> key ( ));
515 } 516 }
516 517
517 if (( newtabstyle != m_original_tabstyle ) || ( newtabpos != m_original_tabpos )) { 518 if (( newtabstyle != m_original_tabstyle ) || ( newtabpos != m_original_tabpos )) {
518 config. writeEntry ( "TabStyle", newtabstyle + 1 ); 519 config. writeEntry ( "TabStyle", newtabstyle + 1 );
519 config. writeEntry ( "TabPosition", newtabpos ? "Top" : "Bottom" ); 520 config. writeEntry ( "TabPosition", newtabpos ? "Top" : "Bottom" );
520 } 521 }
521 522
522 if ( m_font_changed ) { 523 if ( m_font_changed ) {
523 config. writeEntry ( "FontFamily", m_fontselect-> fontFamily ( )); 524 config. writeEntry ( "FontFamily", m_fontselect-> fontFamily ( ));
524 config. writeEntry ( "FontStyle", m_fontselect-> fontStyle ( )); 525 config. writeEntry ( "FontStyle", m_fontselect-> fontStyle ( ));
525 config. writeEntry ( "FontSize", m_fontselect-> fontSize ( )); 526 config. writeEntry ( "FontSize", m_fontselect-> fontSize ( ));
526 } 527 }
527 528
528 529
529 if ( m_color_changed ) 530 if ( m_color_changed )
530 { 531 {
531 ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); 532 ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( ));
532 533
533 if ( item ) 534 if ( item )
534 item-> save ( config ); 535 item-> save ( config );
535 } 536 }
536 537
537 ODirection rot; 538 ODirection rot;
538 if (m_rotdir_ccw-> isChecked ( )) { 539 if (m_rotdir_ccw-> isChecked ( )) {
539 rot = CCW; 540 rot = CCW;
540 } else if (m_rotdir_cw-> isChecked ( )) { 541 } else if (m_rotdir_cw-> isChecked ( )) {
541 rot = CW; 542 rot = CW;
542 } else { 543 } else {
543 rot = Flip; 544 rot = Flip;
544 } 545 }
545 config. writeEntry ( "rotatedir", (int)rot ); 546 config. writeEntry ( "rotatedir", (int)rot );
546 547
547 m_except-> setFocus ( ); // if the focus was on the embedded line-edit, we have to move it away first, so the contents are updated 548 m_except-> setFocus ( ); // if the focus was on the embedded line-edit, we have to move it away first, so the contents are updated
548 549
549 QStringList sl; 550 QStringList sl;
550 QString exceptstr; 551 QString exceptstr;
551 for ( ExceptListItem *it = (ExceptListItem *) m_except-> firstChild ( ); it; it = (ExceptListItem *) it-> nextSibling ( )) { 552 for ( ExceptListItem *it = (ExceptListItem *) m_except-> firstChild ( ); it; it = (ExceptListItem *) it-> nextSibling ( )) {
552 int fl = 0; 553 int fl = 0;
553 fl |= ( it-> noStyle ( ) ? 0x01 : 0 ); 554 fl |= ( it-> noStyle ( ) ? 0x01 : 0 );
554 fl |= ( it-> noFont ( ) ? 0x02 : 0 ); 555 fl |= ( it-> noFont ( ) ? 0x02 : 0 );
555 fl |= ( it-> noDeco ( ) ? 0x04 : 0 ); 556 fl |= ( it-> noDeco ( ) ? 0x04 : 0 );
556 exceptstr = QString::number ( fl, 32 ); 557 exceptstr = QString::number ( fl, 32 );
557 exceptstr.append( it-> pattern ( )); 558 exceptstr.append( it-> pattern ( ));
558 sl << exceptstr; 559 sl << exceptstr;
559 } 560 }
560 config. writeEntry ( "NoStyle", sl, ';' ); 561 config. writeEntry ( "NoStyle", sl, ';' );
561 config. writeEntry ( "ForceStyle", m_force-> isChecked ( )); 562 config. writeEntry ( "ForceStyle", m_force-> isChecked ( ));
562 563
563 config. write ( ); // need to flush the config info first 564 config. write ( ); // need to flush the config info first
564 Global::applyStyle ( ); 565 Global::applyStyle ( );
565 566
566 if ( QMessageBox::warning ( this, tr( "Restart" ), tr( "Do you want to restart %1 now?" ). arg ( ODevice::inst ( )-> system ( ) == System_Zaurus ? "Qtopia" : "Opie" ), tr( "Yes" ), tr( "No" ), 0, 0, 1 ) == 0 ) { 567 if ( QMessageBox::warning ( this, tr( "Restart" ), tr( "Do you want to restart %1 now?" ). arg ( ODevice::inst ( )-> system ( ) == System_Zaurus ? "Qtopia" : "Opie" ), tr( "Yes" ), tr( "No" ), 0, 0, 1 ) == 0 ) {
567 QCopEnvelope e( "QPE/System", "restart()" ); 568 QCopEnvelope e( "QPE/System", "restart()" );
568 } 569 }
569 570
570 QDialog::accept ( ); 571 QDialog::accept ( );
571} 572}
572 573
573void Appearance::done ( int r ) 574void Appearance::done ( int r )
574{ 575{
575 QDialog::done ( r ); 576 QDialog::done ( r );
576 close ( ); 577 close ( );
577} 578}
578 579
579 580
580void Appearance::styleClicked ( int index ) 581void Appearance::styleClicked ( int index )
581{ 582{
582 StyleListItem *sli = (StyleListItem *) m_style_list-> item ( index ); 583 StyleListItem *sli = (StyleListItem *) m_style_list-> item ( index );
583 m_style_settings-> setEnabled ( sli ? sli-> hasSettings ( ) : false ); 584 m_style_settings-> setEnabled ( sli ? sli-> hasSettings ( ) : false );
584 585
585 if ( m_sample && sli && sli-> style ( )) { 586 if ( m_sample && sli && sli-> style ( )) {
586 int ci = m_color_list ? m_color_list-> currentItem ( ) : -1; 587 int ci = m_color_list ? m_color_list-> currentItem ( ) : -1;
587 588
588 m_sample-> setStyle2 ( sli-> style ( ), ci < 0 ? palette ( ) : ((ColorListItem *) m_color_list-> item ( ci ))-> palette ( )); 589 m_sample-> setStyle2 ( sli-> style ( ), ci < 0 ? palette ( ) : ((ColorListItem *) m_color_list-> item ( ci ))-> palette ( ));
589 } 590 }
590 591
591 m_style_changed |= ( index != m_original_style ); 592 m_style_changed |= ( index != m_original_style );
592} 593}
593 594
594void Appearance::styleSettingsClicked ( ) 595void Appearance::styleSettingsClicked ( )
595{ 596{
596 StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( )); 597 StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( ));
597 598
598 if ( item && item-> hasSettings ( )) { 599 if ( item && item-> hasSettings ( )) {
599 QDialog *d = new QDialog ( this, "SETTINGS-DLG", true ); 600 QDialog *d = new QDialog ( this, "SETTINGS-DLG", true );
600 QVBoxLayout *vbox = new QVBoxLayout ( d, 3, 0 ); 601 QVBoxLayout *vbox = new QVBoxLayout ( d, 3, 0 );
601 602
602 QWidget *w = item-> settings ( d ); 603 QWidget *w = item-> settings ( d );
603 604
604 if ( w ) { 605 if ( w ) {
605 vbox-> addWidget ( w ); 606 vbox-> addWidget ( w );
606 607
607 d-> setCaption ( w-> caption ( )); 608 d-> setCaption ( w-> caption ( ));
608 609
609 d-> showMaximized ( ); 610 d-> showMaximized ( );
610 bool accepted = ( d-> exec ( ) == QDialog::Accepted ); 611 bool accepted = ( d-> exec ( ) == QDialog::Accepted );
611 612
612 if ( item-> setSettings ( accepted )) 613 if ( item-> setSettings ( accepted ))
613 m_style_changed = true; 614 m_style_changed = true;
614 } 615 }
615 delete d; 616 delete d;
616 } 617 }
617} 618}
618 619
619void Appearance::decoClicked ( int index ) 620void Appearance::decoClicked ( int index )
620{ 621{
621 DecoListItem *dli = (DecoListItem *) m_deco_list-> item ( index ); 622 DecoListItem *dli = (DecoListItem *) m_deco_list-> item ( index );
622 623
623 if ( m_sample ) { 624 if ( m_sample ) {
624 if ( dli && dli-> interface ( )) 625 if ( dli && dli-> interface ( ))
625 m_sample-> setDecoration ( dli-> interface ( )); 626 m_sample-> setDecoration ( dli-> interface ( ));
626 else 627 else
627 m_sample-> setDecoration ( new DefaultWindowDecoration ( )); 628 m_sample-> setDecoration ( new DefaultWindowDecoration ( ));
628 m_sample-> repaint ( ); 629 m_sample-> repaint ( );
629 } 630 }
630 m_deco_changed |= ( index != m_original_deco ); 631 m_deco_changed |= ( index != m_original_deco );
631} 632}
632 633
633void Appearance::fontClicked ( const QFont &f ) 634void Appearance::fontClicked ( const QFont &f )
634{ 635{
635 m_font_changed |= ( f != m_sample-> font ( )); 636 m_font_changed |= ( f != m_sample-> font ( ));
636 m_sample-> setFont ( f ); 637 m_sample-> setFont ( f );
637} 638}
638 639
639void Appearance::colorClicked ( int index ) 640void Appearance::colorClicked ( int index )
640{ 641{
641 ColorListItem *item = (ColorListItem *) m_color_list-> item ( index ); 642 ColorListItem *item = (ColorListItem *) m_color_list-> item ( index );
642 643
643 if ( item ) 644 if ( item )
644 m_sample-> setPalette ( item-> palette ( )); 645 m_sample-> setPalette ( item-> palette ( ));
645 646
646 m_color_changed |= ( item-> palette ( ) != qApp-> palette ( )); 647 m_color_changed |= ( item-> palette ( ) != qApp-> palette ( ));
647} 648}
648 649
649 650
650void Appearance::editSchemeClicked ( ) 651void Appearance::editSchemeClicked ( )
651{ 652{
652 ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); 653 ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( ));
diff --git a/noncore/settings/appearance2/colorlistitem.h b/noncore/settings/appearance2/colorlistitem.h
index 10e4468..f8d5c45 100644
--- a/noncore/settings/appearance2/colorlistitem.h
+++ b/noncore/settings/appearance2/colorlistitem.h
@@ -1,140 +1,141 @@
1/* 1/*
2               =. This file is part of the OPIE Project 2               =. This file is part of the OPIE Project
3             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> 3             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
4           .>+-= 4           .>+-=
5 _;:,     .>    :=|. This file is free software; you can 5 _;:,     .>    :=|. This file is free software; you can
6.> <`_,   >  .   <= redistribute it and/or modify it under 6.> <`_,   >  .   <= redistribute it and/or modify it under
7:`=1 )Y*s>-.--   : the terms of the GNU General Public 7:`=1 )Y*s>-.--   : the terms of the GNU General Public
8.="- .-=="i,     .._ License as published by the Free Software 8.="- .-=="i,     .._ License as published by the Free Software
9 - .   .-<_>     .<> Foundation; either version 2 of the License, 9 - .   .-<_>     .<> Foundation; either version 2 of the License,
10     ._= =}       : or (at your option) any later version. 10     ._= =}       : or (at your option) any later version.
11    .%`+i>       _;_. 11    .%`+i>       _;_.
12    .i_,=:_.      -<s. This file is distributed in the hope that 12    .i_,=:_.      -<s. This file is distributed in the hope that
13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
14    : ..    .:,     . . . without even the implied warranty of 14    : ..    .:,     . . . without even the implied warranty of
15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
17..}^=.=       =       ; Public License for more details. 17..}^=.=       =       ; Public License for more details.
18++=   -.     .`     .: 18++=   -.     .`     .:
19 :     =  ...= . :.=- You should have received a copy of the GNU 19 :     =  ...= . :.=- You should have received a copy of the GNU
20 -.   .:....=;==+<; General Public License along with this file; 20 -.   .:....=;==+<; General Public License along with this file;
21  -_. . .   )=.  = see the file COPYING. If not, write to the 21  -_. . .   )=.  = see the file COPYING. If not, write to the
22    --        :-=` Free Software Foundation, Inc., 22    --        :-=` Free Software Foundation, Inc.,
23 59 Temple Place - Suite 330, 23 59 Temple Place - Suite 330,
24 Boston, MA 02111-1307, USA. 24 Boston, MA 02111-1307, USA.
25 25
26*/ 26*/
27 27
28#ifndef COLORLISTITEM_H 28#ifndef COLORLISTITEM_H
29#define COLORLISTITEM_H 29#define COLORLISTITEM_H
30 30
31#include <qlistbox.h> 31#include <qlistbox.h>
32#include <qpalette.h> 32#include <qpalette.h>
33#include <qapplication.h> 33#include <qapplication.h>
34 34
35#include <qpe/config.h> 35#include <qpe/config.h>
36 36
37class Appearance; 37class Appearance;
38 38
39class ColorListItem : public QListBoxText { 39class ColorListItem : public QListBoxText {
40public: 40public:
41 ColorListItem ( const QString &t, Config &cfg ) : QListBoxText ( t ) 41 ColorListItem ( const QString &t, Config &cfg ) : QListBoxText ( t )
42 { 42 {
43 m_colors = new QColor [s_colorcount]; 43 m_colors = new QColor [s_colorcount];
44 load ( cfg ); 44 load ( cfg );
45 } 45 }
46 46
47 virtual ~ColorListItem ( ) 47 virtual ~ColorListItem ( )
48 { 48 {
49 delete [] m_colors; 49 delete [] m_colors;
50 } 50 }
51 51
52 QPalette palette ( ) 52 QPalette palette ( )
53 { 53 {
54 return m_palette; 54 return m_palette;
55 } 55 }
56 56
57 bool load ( Config &cfg ) 57 bool load ( Config &cfg )
58 { 58 {
59 for ( int i = 0; i < s_colorcount; i++ ) 59 for ( int i = 0; i < s_colorcount; i++ )
60 m_colors [i] = QColor ( cfg. readEntry ( s_colorlut [i]. m_key, s_colorlut [i]. m_def )); 60 m_colors [i] = QColor ( cfg. readEntry ( s_colorlut [i]. m_key, s_colorlut [i]. m_def ));
61 61
62 buildPalette ( ); 62 buildPalette ( );
63 return true; 63 return true;
64 } 64 }
65 65
66 void buildPalette ( ) 66 void buildPalette ( )
67 { 67 {
68 m_palette = QPalette ( m_colors [r2i(QColorGroup::Button)], m_colors [r2i(QColorGroup::Background)] ); 68 m_palette = QPalette ( m_colors [r2i(QColorGroup::Button)], m_colors [r2i(QColorGroup::Background)] );
69 m_palette. setColor ( QColorGroup::Highlight, m_colors [r2i(QColorGroup::Highlight)] ); 69 m_palette. setColor ( QColorGroup::Highlight, m_colors [r2i(QColorGroup::Highlight)] );
70 m_palette. setColor ( QColorGroup::HighlightedText, m_colors [r2i(QColorGroup::HighlightedText)] ); 70 m_palette. setColor ( QColorGroup::HighlightedText, m_colors [r2i(QColorGroup::HighlightedText)] );
71 m_palette. setColor ( QColorGroup::Text, m_colors [r2i(QColorGroup::Text)] ); 71 m_palette. setColor ( QColorGroup::Text, m_colors [r2i(QColorGroup::Text)] );
72 m_palette. setColor ( QPalette::Active, QColorGroup::ButtonText, m_colors [r2i(QColorGroup::ButtonText)] ); 72 m_palette. setColor ( QPalette::Active, QColorGroup::ButtonText, m_colors [r2i(QColorGroup::ButtonText)] );
73 m_palette. setColor ( QColorGroup::Base, m_colors [r2i(QColorGroup::Base)] ); 73 m_palette. setColor ( QColorGroup::Base, m_colors [r2i(QColorGroup::Base)] );
74 m_palette. setColor ( QPalette::Disabled, QColorGroup::Text, m_palette. color ( QPalette::Active, QColorGroup::Background ). dark ( )); 74 m_palette. setColor ( QPalette::Disabled, QColorGroup::Text, m_palette. color ( QPalette::Active, QColorGroup::Background ). dark ( ));
75 } 75 }
76 76
77 bool save ( Config &cfg ) 77 bool save ( Config &cfg )
78 { 78 {
79 for ( int i = 0; i < s_colorcount; i++ ) 79 for ( int i = 0; i < s_colorcount; i++ )
80 cfg. writeEntry ( s_colorlut [i]. m_key, m_colors [i]. name ( )); 80 cfg. writeEntry ( s_colorlut [i]. m_key, m_colors [i]. name ( ));
81 return true; 81 return true;
82 } 82 }
83 83
84 QColor color ( QColorGroup::ColorRole role ) 84 QColor color ( QColorGroup::ColorRole role )
85 { 85 {
86 int i = r2i ( role ); 86 int i = r2i ( role );
87 return i >= 0 ? m_colors [i] : QColor ( ); 87 return i >= 0 ? m_colors [i] : QColor ( );
88 } 88 }
89 89
90 void setColor ( QColorGroup::ColorRole role, QColor c ) 90 void setColor ( QColorGroup::ColorRole role, QColor c )
91 { 91 {
92 int i = r2i ( role ); 92 int i = r2i ( role );
93 if ( i >= 0 ) { 93 if ( i >= 0 ) {
94 m_colors [i] = c; 94 m_colors [i] = c;
95 buildPalette ( ); 95 buildPalette ( );
96 } 96 }
97 } 97 }
98 98
99 QString label ( QColorGroup::ColorRole role ) 99 QString label ( QColorGroup::ColorRole role )
100 { 100 {
101 int i = r2i ( role ); 101 int i = r2i ( role );
102 return i >= 0 ? qApp-> translate ( "Appearance", s_colorlut [i]. m_label ) : QString::null; 102 return i >= 0 ? qApp-> translate ( "Appearance", s_colorlut [i]. m_label ) : QString::null;
103 } 103 }
104 104
105private: 105private:
106 QPalette m_palette; 106 QPalette m_palette;
107 QColor *m_colors; 107 QColor *m_colors;
108 108
109 static struct colorlut { 109 static struct colorlut {
110 QColorGroup::ColorRole m_role; 110 QColorGroup::ColorRole m_role;
111 const char * m_key; 111 const char * m_key;
112 const char * m_def; 112 const char * m_def;
113 const char * m_label; 113 const char * m_label;
114 } const s_colorlut []; 114 } const s_colorlut [];
115 static const int s_colorcount; 115 static const int s_colorcount;
116 116
117 static int r2i ( QColorGroup::ColorRole role ) 117 static int r2i ( QColorGroup::ColorRole role )
118 { 118 {
119 for ( int i = 0; i < s_colorcount; i++ ) { 119 for ( int i = 0; i < s_colorcount; i++ ) {
120 if ( s_colorlut [i]. m_role == role ) 120 if ( s_colorlut [i]. m_role == role )
121 return i; 121 return i;
122 } 122 }
123 return -1; 123 return -1;
124 } 124 }
125}; 125};
126 126
127// from etc/colors/Liquid.scheme
127const ColorListItem::colorlut ColorListItem::s_colorlut [] = { 128const ColorListItem::colorlut ColorListItem::s_colorlut [] = {
128 { QColorGroup::Base, "Base", "#FFFFFF", QT_TRANSLATE_NOOP( "Appearance", "Base" ) }, 129 { QColorGroup::Base, "Base", "#FFFFFF", QT_TRANSLATE_NOOP( "Appearance", "Base" ) },
129 { QColorGroup::Background, "Background", "#E5E1D5", QT_TRANSLATE_NOOP( "Appearance", "Background" ) }, 130 { QColorGroup::Background, "Background", "#E0E0E0", QT_TRANSLATE_NOOP( "Appearance", "Background" ) },
130 { QColorGroup::Button, "Button", "#D6CDBB", QT_TRANSLATE_NOOP( "Appearance", "Button" ) }, 131 { QColorGroup::Button, "Button", "#96c8fa", QT_TRANSLATE_NOOP( "Appearance", "Button" ) },
131 { QColorGroup::ButtonText, "ButtonText", "#000000", QT_TRANSLATE_NOOP( "Appearance", "Button Text" ) }, 132 { QColorGroup::ButtonText, "ButtonText", "#000000", QT_TRANSLATE_NOOP( "Appearance", "Button Text" ) },
132 { QColorGroup::Highlight, "Highlight", "#800000", QT_TRANSLATE_NOOP( "Appearance", "Highlight" ) }, 133 { QColorGroup::Highlight, "Highlight", "#73adef", QT_TRANSLATE_NOOP( "Appearance", "Highlight" ) },
133 { QColorGroup::HighlightedText, "HighlightedText", "#FFFFFF", QT_TRANSLATE_NOOP( "Appearance", "Highlighted Text" ) }, 134 { QColorGroup::HighlightedText, "HighlightedText", "#FFFFFF", QT_TRANSLATE_NOOP( "Appearance", "Highlighted Text" ) },
134 { QColorGroup::Text, "Text", "#000000", QT_TRANSLATE_NOOP( "Appearance", "Text" ) } 135 { QColorGroup::Text, "Text", "#000000", QT_TRANSLATE_NOOP( "Appearance", "Text" ) }
135}; 136};
136 137
137const int ColorListItem::s_colorcount = sizeof( s_colorlut ) / sizeof ( s_colorlut [0] ); 138const int ColorListItem::s_colorcount = sizeof( s_colorlut ) / sizeof ( s_colorlut [0] );
138 139
139 140
140#endif 141#endif
diff --git a/noncore/settings/appearance2/decolistitem.h b/noncore/settings/appearance2/decolistitem.h
index d190ceb..da7924c 100644
--- a/noncore/settings/appearance2/decolistitem.h
+++ b/noncore/settings/appearance2/decolistitem.h
@@ -1,106 +1,107 @@
1/* 1/*
2               =. This file is part of the OPIE Project 2               =. This file is part of the OPIE Project
3             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> 3             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
4           .>+-= 4           .>+-=
5 _;:,     .>    :=|. This file is free software; you can 5 _;:,     .>    :=|. This file is free software; you can
6.> <`_,   >  .   <= redistribute it and/or modify it under 6.> <`_,   >  .   <= redistribute it and/or modify it under
7:`=1 )Y*s>-.--   : the terms of the GNU General Public 7:`=1 )Y*s>-.--   : the terms of the GNU General Public
8.="- .-=="i,     .._ License as published by the Free Software 8.="- .-=="i,     .._ License as published by the Free Software
9 - .   .-<_>     .<> Foundation; either version 2 of the License, 9 - .   .-<_>     .<> Foundation; either version 2 of the License,
10     ._= =}       : or (at your option) any later version. 10     ._= =}       : or (at your option) any later version.
11    .%`+i>       _;_. 11    .%`+i>       _;_.
12    .i_,=:_.      -<s. This file is distributed in the hope that 12    .i_,=:_.      -<s. This file is distributed in the hope that
13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
14    : ..    .:,     . . . without even the implied warranty of 14    : ..    .:,     . . . without even the implied warranty of
15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
17..}^=.=       =       ; Public License for more details. 17..}^=.=       =       ; Public License for more details.
18++=   -.     .`     .: 18++=   -.     .`     .:
19 :     =  ...= . :.=- You should have received a copy of the GNU 19 :     =  ...= . :.=- You should have received a copy of the GNU
20 -.   .:....=;==+<; General Public License along with this file; 20 -.   .:....=;==+<; General Public License along with this file;
21  -_. . .   )=.  = see the file COPYING. If not, write to the 21  -_. . .   )=.  = see the file COPYING. If not, write to the
22    --        :-=` Free Software Foundation, Inc., 22    --        :-=` Free Software Foundation, Inc.,
23 59 Temple Place - Suite 330, 23 59 Temple Place - Suite 330,
24 Boston, MA 02111-1307, USA. 24 Boston, MA 02111-1307, USA.
25 25
26*/ 26*/
27 27
28#ifndef DECOLISTITEM_H 28#ifndef DECOLISTITEM_H
29#define DECOLISTITEM_H 29#define DECOLISTITEM_H
30 30
31#include <qpe/windowdecorationinterface.h> 31#include <qpe/windowdecorationinterface.h>
32#include <qlistbox.h> 32#include <qlistbox.h>
33 33
34class DecoListItem : public QListBoxPixmap { 34class DecoListItem : public QListBoxPixmap {
35public: 35public:
36 DecoListItem ( const QString &t ) : QListBoxPixmap ( QPixmap ( ), t ) 36 DecoListItem ( const QString &t ) : QListBoxPixmap ( QPixmap ( ), t )
37 { 37 {
38 m_lib = 0; 38 m_lib = 0;
39 m_window_if = 0; 39 m_window_if = 0;
40 // m_settings_if = 0; 40 // m_settings_if = 0;
41 } 41 }
42 42
43 DecoListItem ( QLibrary *lib, WindowDecorationInterface *iface ) : QListBoxPixmap ( iface-> icon ( ), iface-> name ( )) 43 DecoListItem ( QLibrary *lib, WindowDecorationInterface *iface ) : QListBoxPixmap ( iface-> icon ( ), iface-> name ( ))
44 { 44 {
45 m_lib = lib; 45 m_lib = lib;
46 m_window_if = iface; 46 m_window_if = iface;
47 47
48 // iface-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &m_settings_if ); 48 // iface-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &m_settings_if );
49 } 49 }
50 50
51 virtual ~DecoListItem ( ) 51 virtual ~DecoListItem ( )
52 { 52 {
53 // if ( m_settings_if ) 53 // if ( m_settings_if )
54 // m_settings_if-> release ( ); 54 // m_settings_if-> release ( );
55 if ( m_window_if ) 55 if ( m_window_if )
56 m_window_if-> release ( ); 56 m_window_if-> release ( );
57 delete m_lib; 57 delete m_lib;
58 } 58 }
59 59
60 bool hasSettings ( ) const 60 bool hasSettings ( ) const
61 { 61 {
62 // return ( m_settings_if ); 62 // return ( m_settings_if );
63 return false; 63 return false;
64 } 64 }
65 65
66 QWidget *settings ( QWidget * /*parent*/ ) 66 QWidget *settings ( QWidget * /*parent*/ )
67 { 67 {
68 // return m_settings_if ? m_settings_if-> create ( parent ) : 0; 68 // return m_settings_if ? m_settings_if-> create ( parent ) : 0;
69 return 0; 69 return 0;
70 } 70 }
71 71
72 bool setSettings ( bool /*accepted*/ ) 72 bool setSettings ( bool /*accepted*/ )
73 { 73 {
74 // if ( !m_settings_if ) 74 // if ( !m_settings_if )
75 // return false; 75 // return false;
76 76
77 // if ( accepted ) 77 // if ( accepted )
78 // return m_settings_if-> accept ( ); 78 // return m_settings_if-> accept ( );
79 // else { 79 // else {
80 // m_settings_if-> reject ( ); 80 // m_settings_if-> reject ( );
81 // return false; 81 // return false;
82 // } 82 // }
83 return false; 83 return false;
84 } 84 }
85 85
86 QString key ( ) 86 QString key ( )
87 { 87 {
88 if ( m_lib ) 88 if ( m_lib )
89 return QFileInfo ( m_lib-> library ( )). fileName ( ); 89 return QFileInfo ( m_lib-> library ( )). fileName ( );
90 else 90 else
91 return text ( ); 91 return text ( );
92 } 92 }
93 93
94 WindowDecorationInterface *interface ( ) 94 WindowDecorationInterface *interface ( )
95 { 95 {
96 return m_window_if; 96 return m_window_if;
97 } 97 }
98 98
99private: 99private:
100 QLibrary *m_lib; 100 QLibrary *m_lib;
101 WindowDecorationInterface *m_window_if; 101 WindowDecorationInterface *m_window_if;
102 //WindowDecorationSettingsInterface *m_settings_if; 102 //WindowDecorationSettingsInterface *m_settings_if;
103 103
104}; 104};
105 105
106#endif \ No newline at end of file 106#endif
107
diff --git a/noncore/settings/backup/backuprestore.cpp b/noncore/settings/backup/backuprestore.cpp
index 4ff6be1..922523b 100644
--- a/noncore/settings/backup/backuprestore.cpp
+++ b/noncore/settings/backup/backuprestore.cpp
@@ -1,277 +1,268 @@
1 1
2#include "backuprestore.h" 2#include "backuprestore.h"
3//#include "output.h" 3//#include "output.h"
4#include "errordialog.h" 4#include "errordialog.h"
5 5
6#include <qapplication.h> 6#include <qapplication.h>
7#include <qmultilineedit.h> 7#include <qmultilineedit.h>
8 8
9#include <qdir.h> 9#include <qdir.h>
10#include <qfile.h> 10#include <qfile.h>
11#include <qfileinfo.h> 11#include <qfileinfo.h>
12#include <qlistview.h> 12#include <qlistview.h>
13#include <qpushbutton.h> 13#include <qpushbutton.h>
14#include <qheader.h> 14#include <qheader.h>
15#include <qpe/resource.h> 15#include <qpe/resource.h>
16#include <qpe/config.h> 16#include <qpe/config.h>
17#include <qmessagebox.h> 17#include <qmessagebox.h>
18#include <qcombobox.h> 18#include <qcombobox.h>
19#include <qlist.h> 19#include <qlist.h>
20#include <stdlib.h> 20#include <stdlib.h>
21#include <qregexp.h> 21#include <qregexp.h>
22#include <qtextstream.h> 22#include <qtextstream.h>
23#include <qtextview.h> 23#include <qtextview.h>
24 24
25#include <errno.h> 25#include <errno.h>
26#include <stdlib.h> 26#include <stdlib.h>
27#include <unistd.h> 27#include <unistd.h>
28#include <sys/stat.h> 28#include <sys/stat.h>
29#include <dirent.h> 29#include <dirent.h>
30 30
31#define HEADER_NAME 0 31#define HEADER_NAME 0
32#define HEADER_BACKUP 1 32#define HEADER_BACKUP 1
33#define BACKUP_LOCATION 2 33#define BACKUP_LOCATION 2
34 34
35#define EXTENSION ".bck" 35#define EXTENSION ".bck"
36 36
37const QString tempFileName = "/tmp/backup.err"; 37const QString tempFileName = "/tmp/backup.err";
38 38
39 39
40BackupAndRestore::BackupAndRestore( QWidget* parent, const char* name) 40BackupAndRestore::BackupAndRestore( QWidget* parent, const char* name)
41 : BackupAndRestoreBase(parent, name){ 41 : BackupAndRestoreBase(parent, name){
42 this->showMaximized(); 42 this->showMaximized();
43 backupList->header()->hide(); 43 backupList->header()->hide();
44 restoreList->header()->hide(); 44 restoreList->header()->hide();
45 connect(backupButton, SIGNAL(clicked()), 45 connect(backupButton, SIGNAL(clicked()),
46 this, SLOT(backupPressed())); 46 this, SLOT(backupPressed()));
47 connect(restoreButton, SIGNAL(clicked()), 47 connect(restoreButton, SIGNAL(clicked()),
48 this, SLOT(restore())); 48 this, SLOT(restore()));
49 connect(backupList, SIGNAL(clicked( QListViewItem * )), 49 connect(backupList, SIGNAL(clicked( QListViewItem * )),
50 this, SLOT(selectItem(QListViewItem*))); 50 this, SLOT(selectItem(QListViewItem*)));
51 connect(restoreSource, SIGNAL(activated( int )), 51 connect(restoreSource, SIGNAL(activated( int )),
52 this, SLOT(sourceDirChanged(int))); 52 this, SLOT(sourceDirChanged(int)));
53 connect(updateList, SIGNAL(clicked()), 53 connect(updateList, SIGNAL(clicked()),
54 this, SLOT( fileListUpdate())); 54 this, SLOT( fileListUpdate()));
55 55
56 applicationSettings = new QListViewItem(backupList, "Application Settings", "", 56 applicationSettings = new QListViewItem(backupList, "Application Settings", "",
57 QDir::homeDirPath() + "/Settings/"); 57 QDir::homeDirPath() + "/Settings/");
58 selectItem(applicationSettings); 58 selectItem(applicationSettings);
59 applicationSettings = new QListViewItem(backupList, "Application Data", "", 59 applicationSettings = new QListViewItem(backupList, "Application Data", "",
60 QDir::homeDirPath() + "/Applications/"); 60 QDir::homeDirPath() + "/Applications/");
61 selectItem(applicationSettings); 61 selectItem(applicationSettings);
62 documents= new QListViewItem(backupList, "Documents", "", 62 documents= new QListViewItem(backupList, "Documents", "",
63 QDir::homeDirPath() + "/Documents/"); 63 QDir::homeDirPath() + "/Documents/");
64 selectItem(documents); 64 selectItem(documents);
65 65
66 scanForApplicationSettings(); 66 scanForApplicationSettings();
67 67
68 Config config("BackupAndRestore"); 68 Config config("BackupAndRestore");
69 config.setGroup("General"); 69 config.setGroup("General");
70 int totalLocations = config.readNumEntry("totalLocations",0); 70 int totalLocations = config.readNumEntry("totalLocations",0);
71 71
72//todo make less static here and use Storage class to get infos 72//todo make less static here and use Storage class to get infos
73 if(totalLocations == 0){ 73 if(totalLocations == 0){
74
75/* Ramses has a CF-Slot, but that one is internal and you have to dismount the
76 * the case. There's also almost always a WLAN card inserted there
77*/
78
79 backupLocations.insert("Documents", "/root/Documents"); 74 backupLocations.insert("Documents", "/root/Documents");
80#if defined(QT_QWS_RAMSES)
81 backupLocations.insert("MMC", "/mnt/card");
82#else
83 backupLocations.insert("CF", "/mnt/cf"); 75 backupLocations.insert("CF", "/mnt/cf");
84 backupLocations.insert("SD", "/mnt/card"); 76 backupLocations.insert("SD", "/mnt/card");
85#endif
86 } 77 }
87 else{ 78 else{
88 for(int i = 0; i < totalLocations; i++){ 79 for(int i = 0; i < totalLocations; i++){
89 backupLocations.insert(config.readEntry(QString("backupLocationName_%1").arg(i)), 80 backupLocations.insert(config.readEntry(QString("backupLocationName_%1").arg(i)),
90 config.readEntry(QString("backupLocation_%1").arg(i))); 81 config.readEntry(QString("backupLocation_%1").arg(i)));
91 } 82 }
92 } 83 }
93 QMap<QString, QString>::Iterator it; 84 QMap<QString, QString>::Iterator it;
94 for( it = backupLocations.begin(); it != backupLocations.end(); ++it ){ 85 for( it = backupLocations.begin(); it != backupLocations.end(); ++it ){
95 storeToLocation->insertItem(it.key()); 86 storeToLocation->insertItem(it.key());
96 restoreSource->insertItem(it.key()); 87 restoreSource->insertItem(it.key());
97 } 88 }
98 89
99 // Read the list of items to ignore. 90 // Read the list of items to ignore.
100 QList<QString> dontBackupList; 91 QList<QString> dontBackupList;
101 dontBackupList.setAutoDelete(true); 92 dontBackupList.setAutoDelete(true);
102 config.setGroup("DontBackup"); 93 config.setGroup("DontBackup");
103 int total = config.readNumEntry("Total", 0); 94 int total = config.readNumEntry("Total", 0);
104 for(int i = 0; i < total; i++){ 95 for(int i = 0; i < total; i++){
105 dontBackupList.append(new QString(config.readEntry(QString("%1").arg(i), ""))); 96 dontBackupList.append(new QString(config.readEntry(QString("%1").arg(i), "")));
106 } 97 }
107 98
108 QList<QListViewItem> list; 99 QList<QListViewItem> list;
109 getAllItems(backupList->firstChild(), list); 100 getAllItems(backupList->firstChild(), list);
110 101
111 for(uint i = 0; i < list.count(); i++){ 102 for(uint i = 0; i < list.count(); i++){
112 QString text = list.at(i)->text(HEADER_NAME); 103 QString text = list.at(i)->text(HEADER_NAME);
113 for(uint i2 = 0; i2 < dontBackupList.count(); i2++){ 104 for(uint i2 = 0; i2 < dontBackupList.count(); i2++){
114 if(*dontBackupList.at(i2) == text){ 105 if(*dontBackupList.at(i2) == text){
115 selectItem(list.at(i)); 106 selectItem(list.at(i));
116 break; 107 break;
117 } 108 }
118 } 109 }
119 } 110 }
120} 111}
121 112
122BackupAndRestore::~BackupAndRestore(){ 113BackupAndRestore::~BackupAndRestore(){
123 QList<QListViewItem> list; 114 QList<QListViewItem> list;
124 getAllItems(backupList->firstChild(), list); 115 getAllItems(backupList->firstChild(), list);
125 116
126 Config config("BackupAndRestore"); 117 Config config("BackupAndRestore");
127 config.setGroup("DontBackup"); 118 config.setGroup("DontBackup");
128 config.clearGroup(); 119 config.clearGroup();
129 120
130 int count = 0; 121 int count = 0;
131 for(uint i = 0; i < list.count(); i++){ 122 for(uint i = 0; i < list.count(); i++){
132 if(list.at(i)->text(HEADER_BACKUP) == ""){ 123 if(list.at(i)->text(HEADER_BACKUP) == ""){
133 config.writeEntry(QString("%1").arg(count), list.at(i)->text(HEADER_NAME)); 124 config.writeEntry(QString("%1").arg(count), list.at(i)->text(HEADER_NAME));
134 count++; 125 count++;
135 } 126 }
136 } 127 }
137 config.writeEntry("Total", count); 128 config.writeEntry("Total", count);
138 129
139 // Remove Temp File 130 // Remove Temp File
140 if ( QFile::exists( tempFileName ) ) 131 if ( QFile::exists( tempFileName ) )
141 QFile::remove( tempFileName ); 132 QFile::remove( tempFileName );
142} 133}
143 134
144QList<QListViewItem> BackupAndRestore::getAllItems(QListViewItem *item, QList<QListViewItem> &list){ 135QList<QListViewItem> BackupAndRestore::getAllItems(QListViewItem *item, QList<QListViewItem> &list){
145 while(item){ 136 while(item){
146 if(item->childCount() > 0) 137 if(item->childCount() > 0)
147 getAllItems(item->firstChild(), list); 138 getAllItems(item->firstChild(), list);
148 list.append(item); 139 list.append(item);
149 item = item->nextSibling(); 140 item = item->nextSibling();
150 } 141 }
151 return list; 142 return list;
152} 143}
153 144
154/** 145/**
155 * Selects and unselects the item by setting the HEADER_BACKUP to B or !. 146 * Selects and unselects the item by setting the HEADER_BACKUP to B or !.
156 * and changing the icon to match 147 * and changing the icon to match
157 * @param currentItem the item to swich the selection choice. 148 * @param currentItem the item to swich the selection choice.
158 */ 149 */
159void BackupAndRestore::selectItem(QListViewItem *currentItem){ 150void BackupAndRestore::selectItem(QListViewItem *currentItem){
160 if(!currentItem) 151 if(!currentItem)
161 return; 152 return;
162 153
163 if(currentItem->text(HEADER_BACKUP) == "B"){ 154 if(currentItem->text(HEADER_BACKUP) == "B"){
164 currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/null")); 155 currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/null"));
165 currentItem->setText(HEADER_BACKUP, ""); 156 currentItem->setText(HEADER_BACKUP, "");
166 } 157 }
167 else{ 158 else{
168 currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/check")); 159 currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/check"));
169 currentItem->setText(HEADER_BACKUP, "B"); 160 currentItem->setText(HEADER_BACKUP, "B");
170 } 161 }
171} 162}
172 163
173void BackupAndRestore::scanForApplicationSettings(){ 164void BackupAndRestore::scanForApplicationSettings(){
174 QDir d(applicationSettings->text(BACKUP_LOCATION)); 165 QDir d(applicationSettings->text(BACKUP_LOCATION));
175 d.setFilter( QDir::Dirs | QDir::Files | QDir::NoSymLinks ); 166 d.setFilter( QDir::Dirs | QDir::Files | QDir::NoSymLinks );
176 const QFileInfoList *list = d.entryInfoList(); 167 const QFileInfoList *list = d.entryInfoList();
177 QFileInfoListIterator it( *list ); 168 QFileInfoListIterator it( *list );
178 QFileInfo *fi; 169 QFileInfo *fi;
179 while ( (fi=it.current()) ) { 170 while ( (fi=it.current()) ) {
180 // qDebug((d.path()+fi->fileName()).latin1()); 171 // qDebug((d.path()+fi->fileName()).latin1());
181 if ( ( fi->fileName() != "." ) && ( fi->fileName() != ".." ) ) { 172 if ( ( fi->fileName() != "." ) && ( fi->fileName() != ".." ) ) {
182 QListViewItem *newItem = new QListViewItem(applicationSettings, fi->fileName()); 173 QListViewItem *newItem = new QListViewItem(applicationSettings, fi->fileName());
183 selectItem(newItem); 174 selectItem(newItem);
184 } 175 }
185 ++it; 176 ++it;
186 } 177 }
187} 178}
188 179
189/** 180/**
190 * The "Backup" button has been pressed. Get a list of all of the files that 181 * The "Backup" button has been pressed. Get a list of all of the files that
191 * should be backed up. If there are no files, emit and error and exit. 182 * should be backed up. If there are no files, emit and error and exit.
192 * Determine the file name to store the backup in. Backup the file(s) using 183 * Determine the file name to store the backup in. Backup the file(s) using
193 * tar and gzip --best. Report failure or success 184 * tar and gzip --best. Report failure or success
194 */ 185 */
195void BackupAndRestore::backupPressed(){ 186void BackupAndRestore::backupPressed(){
196 QString backupFiles; 187 QString backupFiles;
197 if(getBackupFiles(backupFiles, NULL) == 0){ 188 if(getBackupFiles(backupFiles, NULL) == 0){
198 QMessageBox::critical(this, "Message", 189 QMessageBox::critical(this, "Message",
199 "No items selected.",QString("Ok") ); 190 "No items selected.",QString("Ok") );
200 return; 191 return;
201 } 192 }
202 193
203 setCaption(tr("Backup and Restore... working...")); 194 setCaption(tr("Backup and Restore... working..."));
204 QString outputFile = backupLocations[storeToLocation->currentText()]; 195 QString outputFile = backupLocations[storeToLocation->currentText()];
205 196
206 QDateTime datetime = QDateTime::currentDateTime(); 197 QDateTime datetime = QDateTime::currentDateTime();
207 QString dateString = QString::number( datetime.date().year() ) + QString::number( datetime.date().month() ).rightJustify(2, '0') + 198 QString dateString = QString::number( datetime.date().year() ) + QString::number( datetime.date().month() ).rightJustify(2, '0') +
208 QString::number( datetime.date().day() ).rightJustify(2, '0'); 199 QString::number( datetime.date().day() ).rightJustify(2, '0');
209 200
210 outputFile += "/" + dateString; 201 outputFile += "/" + dateString;
211 202
212 QString t = outputFile; 203 QString t = outputFile;
213 int c = 1; 204 int c = 1;
214 while(QFile::exists(outputFile + EXTENSION)){ 205 while(QFile::exists(outputFile + EXTENSION)){
215 outputFile = t + QString("%1").arg(c); 206 outputFile = t + QString("%1").arg(c);
216 c++; 207 c++;
217 } 208 }
218 209
219 // We execute tar and compressing its output with gzip.. 210 // We execute tar and compressing its output with gzip..
220 // The error output will be written into a temp-file which could be provided 211 // The error output will be written into a temp-file which could be provided
221 // for debugging.. 212 // for debugging..
222 qDebug( "Storing file: %s", outputFile.latin1() ); 213 qDebug( "Storing file: %s", outputFile.latin1() );
223 outputFile += EXTENSION; 214 outputFile += EXTENSION;
224 215
225 qWarning( QString("(tar -c %1 | gzip > %2 ) 2> %3") 216 qWarning( QString("(tar -c %1 | gzip > %2 ) 2> %3")
226 .arg( backupFiles ) 217 .arg( backupFiles )
227 .arg( outputFile.latin1() ) 218 .arg( outputFile.latin1() )
228 .arg( tempFileName.latin1() ) ); 219 .arg( tempFileName.latin1() ) );
229 220
230 221
231 int r = system( QString("(tar -c %1 | gzip > %2 ) 2> %3") 222 int r = system( QString("(tar -c %1 | gzip > %2 ) 2> %3")
232 .arg( backupFiles ) 223 .arg( backupFiles )
233 .arg( outputFile.latin1() ) 224 .arg( outputFile.latin1() )
234 .arg( tempFileName.latin1() ) ); 225 .arg( tempFileName.latin1() ) );
235 226
236 if(r != 0){ 227 if(r != 0){
237 perror("Error: "); 228 perror("Error: ");
238 QString errorMsg= tr( "Error from System:\n" ) + (QString)strerror( errno ); 229 QString errorMsg= tr( "Error from System:\n" ) + (QString)strerror( errno );
239 230
240 switch( QMessageBox::critical(this, tr( "Message" ), tr( "Backup Failed!" ) + "\n" 231 switch( QMessageBox::critical(this, tr( "Message" ), tr( "Backup Failed!" ) + "\n"
241 + errorMsg, QString( tr( "Ok" ) ), QString( tr( "Details" ) ) ) ){ 232 + errorMsg, QString( tr( "Ok" ) ), QString( tr( "Details" ) ) ) ){
242 233
243 case 1: 234 case 1:
244 qWarning("Details pressed !"); 235 qWarning("Details pressed !");
245 ErrorDialog* pErrDialog = new ErrorDialog( this, NULL, true ); 236 ErrorDialog* pErrDialog = new ErrorDialog( this, NULL, true );
246 QFile errorFile( tempFileName ); 237 QFile errorFile( tempFileName );
247 if ( errorFile.open(IO_ReadOnly) ) { 238 if ( errorFile.open(IO_ReadOnly) ) {
248 QTextStream t( &errorFile ); 239 QTextStream t( &errorFile );
249 QString s; 240 QString s;
250 while ( !t.eof() ) { // until end of file... 241 while ( !t.eof() ) { // until end of file...
251 s += t.readLine(); // line of text excluding '\n' 242 s += t.readLine(); // line of text excluding '\n'
252 } 243 }
253 errorFile.close(); 244 errorFile.close();
254 245
255 pErrDialog->m_textarea->setText( s ); 246 pErrDialog->m_textarea->setText( s );
256 }else{ 247 }else{
257 pErrDialog->m_textarea->setText( "Unable to open File: /tmp/backup.er" ); 248 pErrDialog->m_textarea->setText( "Unable to open File: /tmp/backup.er" );
258 } 249 }
259 pErrDialog->showMaximized(); 250 pErrDialog->showMaximized();
260 pErrDialog->exec(); 251 pErrDialog->exec();
261 delete pErrDialog; 252 delete pErrDialog;
262 break; 253 break;
263 } 254 }
264 setCaption(tr("Backup and Restore.. Failed !!")); 255 setCaption(tr("Backup and Restore.. Failed !!"));
265 return; 256 return;
266 } 257 }
267 else{ 258 else{
268 QMessageBox::information(this, tr( "Message" ), tr( "Backup Successfull." ), QString(tr( "Ok" ) ) ); 259 QMessageBox::information(this, tr( "Message" ), tr( "Backup Successfull." ), QString(tr( "Ok" ) ) );
269 260
270 } 261 }
271 setCaption(tr("Backup and Restore")); 262 setCaption(tr("Backup and Restore"));
272} 263}
273 264
274/*** 265/***
275 * Get a list of all of the files to backup. 266 * Get a list of all of the files to backup.
276 */ 267 */
277int BackupAndRestore::getBackupFiles(QString &backupFiles, QListViewItem *parent){ 268int BackupAndRestore::getBackupFiles(QString &backupFiles, QListViewItem *parent){
diff --git a/noncore/settings/language/language.cpp b/noncore/settings/language/language.cpp
index 8985fd5..d30a041 100644
--- a/noncore/settings/language/language.cpp
+++ b/noncore/settings/language/language.cpp
@@ -1,152 +1,152 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "settings.h" 21#include "settings.h"
22 22
23#include <qpe/global.h> 23#include <qpe/global.h>
24#include <qpe/fontmanager.h> 24#include <qpe/fontmanager.h>
25#include <qpe/config.h> 25#include <qpe/config.h>
26#include <qpe/applnk.h> 26#include <qpe/applnk.h>
27#include <qpe/qpedialog.h> 27#include <qpe/qpedialog.h>
28#include <qpe/qpeapplication.h> 28#include <qpe/qpeapplication.h>
29#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 29#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
30#include <qpe/qcopenvelope_qws.h> 30#include <qpe/qcopenvelope_qws.h>
31#endif 31#endif
32 32
33#include <qlabel.h> 33#include <qlabel.h>
34#include <qcheckbox.h> 34#include <qcheckbox.h>
35#include <qradiobutton.h> 35#include <qradiobutton.h>
36#include <qtabwidget.h> 36#include <qtabwidget.h>
37#include <qslider.h> 37#include <qslider.h>
38#include <qfile.h> 38#include <qfile.h>
39#include <qtextstream.h> 39#include <qtextstream.h>
40#include <qdatastream.h> 40#include <qdatastream.h>
41#include <qmessagebox.h> 41#include <qmessagebox.h>
42#include <qcombobox.h> 42#include <qcombobox.h>
43#include <qspinbox.h> 43#include <qspinbox.h>
44#include <qlistbox.h> 44#include <qlistbox.h>
45#include <qdir.h> 45#include <qdir.h>
46#if QT_VERSION >= 300 46#if QT_VERSION >= 300
47#include <qstylefactory.h> 47#include <qstylefactory.h>
48#endif 48#endif
49 49
50#include <stdlib.h> 50#include <stdlib.h>
51 51
52 52
53LanguageSettings::LanguageSettings( QWidget* parent, const char* name, WFlags fl ) 53LanguageSettings::LanguageSettings( QWidget* parent, const char* name, WFlags fl )
54 : LanguageSettingsBase( parent, name, TRUE, fl ) 54 : LanguageSettingsBase( parent, name, TRUE, fl )
55{ 55{
56 if ( FontManager::hasUnicodeFont() ) 56 if ( FontManager::hasUnicodeFont() )
57 languages->setFont(FontManager::unicodeFont(FontManager::Proportional)); 57 languages->setFont(FontManager::unicodeFont(FontManager::Proportional));
58 58
59 59
60 QString tfn = QPEApplication::qpeDir() + "/i18n/"; 60 QString tfn = QPEApplication::qpeDir() + "/i18n/";
61 QDir langDir = tfn; 61 QDir langDir = tfn;
62 QStringList list = langDir.entryList("*", QDir::Dirs ); 62 QStringList list = langDir.entryList("*", QDir::Dirs );
63 63
64 QStringList::Iterator it; 64 QStringList::Iterator it;
65 65
66 for ( it = list.begin(); it != list.end(); ++it ) { 66 for ( it = list.begin(); it != list.end(); ++it ) {
67 QString name = (*it); 67 QString name = (*it);
68 QFileInfo desktopFile( tfn + "/" + name + "/.directory" ); 68 QFileInfo desktopFile( tfn + "/" + name + "/.directory" );
69 if ( desktopFile.exists() ) { 69 if ( desktopFile.exists() ) {
70 langAvail.append(name); 70 langAvail.append(name);
71 Config conf( desktopFile.filePath(), Config::File ); 71 Config conf( desktopFile.filePath(), Config::File );
72 QString langName = conf.readEntry( "Name" ); 72 QString langName = conf.readEntry( "Name" );
73 QString ownName = conf.readEntryDirect( "Name[" + name + "]" ); 73 QString ownName = conf.readEntryDirect( "Name[" + name + "]" );
74 if ( ownName.isEmpty() ) 74 if ( ownName.isEmpty() )
75 ownName = conf.readEntryDirect( "Name" ); 75 ownName = conf.readEntryDirect( "Name" );
76 if ( !ownName.isEmpty() && ownName != langName ) 76 if ( !ownName.isEmpty() && ownName != langName )
77 langName = langName + " [" + ownName + "]"; 77 langName = langName + " [" + ownName + "]";
78 languages->insertItem( langName ); 78 languages->insertItem( langName );
79 79
80 } 80 }
81 } 81 }
82 if ( langAvail. find ( "en" ) == -1 ) { 82 if ( langAvail. find ( "en" ) == -1 ) {
83 langAvail. prepend ( "" ); // no tr 83 langAvail. prepend ( "" ); // no tr
84 languages-> insertItem ( QString ( "English [%1] (%2)" /* no tr (!) */ ). arg ( tr ( "English" )). arg ( tr( "default" )), 0 ); 84 languages-> insertItem ( QString ( "English [%1] (%2)" /* no tr (!) */ ). arg ( tr ( "English" )). arg ( tr( "default" )), 0 );
85 } 85 }
86 86
87 dl = new QPEDialogListener(this); 87 dl = new QPEDialogListener(this);
88 reset(); 88 reset();
89} 89}
90 90
91LanguageSettings::~LanguageSettings() 91LanguageSettings::~LanguageSettings()
92{} 92{}
93 93
94void LanguageSettings::accept() 94void LanguageSettings::accept()
95{ 95{
96 applyLanguage(); 96 applyLanguage();
97 QDialog::accept(); 97 QDialog::accept();
98} 98}
99 99
100void LanguageSettings::applyLanguage() 100void LanguageSettings::applyLanguage()
101{ 101{
102 setLanguage ( langAvail. at ( languages-> currentItem ( ))); 102 setLanguage ( langAvail. at ( languages-> currentItem ( )));
103} 103}
104 104
105 105
106void LanguageSettings::reject() 106void LanguageSettings::reject()
107{ 107{
108 reset(); 108 reset();
109 QDialog::reject(); 109 QDialog::reject();
110} 110}
111 111
112void LanguageSettings::reset() 112void LanguageSettings::reset()
113{ 113{
114 QString l = getenv("LANG"); 114 QString l = getenv("LANG");
115 Config config("locale"); 115 Config config("locale");
116 config.setGroup("Language"); 116 config.setGroup("Language");
117 l = config.readEntry( "Language", l ); 117 l = config.readEntry( "Language", l );
118 actualLanguage = l;
118 if (l.isEmpty()) 119 if (l.isEmpty())
119 l = "en"; 120 l = "en";
120 actualLanguage = l;
121 121
122 int n = langAvail.find( l ); 122 int n = langAvail.find( l );
123 languages->setCurrentItem( n ); 123 languages->setCurrentItem( n );
124} 124}
125 125
126QString LanguageSettings::actualLanguage; 126QString LanguageSettings::actualLanguage;
127 127
128void LanguageSettings::setLanguage(const QString& lang) 128void LanguageSettings::setLanguage(const QString& lang)
129{ 129{
130 if ( lang != actualLanguage ) { 130 if ( lang != actualLanguage ) {
131 Config config("locale"); 131 Config config("locale");
132 config.setGroup( "Language" ); 132 config.setGroup( "Language" );
133 if ( lang. isEmpty ( )) 133 if ( lang. isEmpty ( ))
134 config. removeEntry ( "Language" ); 134 config. removeEntry ( "Language" );
135 else 135 else
136 config.writeEntry( "Language", lang ); 136 config.writeEntry( "Language", lang );
137 config.write(); 137 config.write();
138 138
139#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 139#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
140 140
141 QCopEnvelope e("QPE/System", "language(QString)"); 141 QCopEnvelope e("QPE/System", "language(QString)");
142 e << lang; 142 e << lang;
143#endif 143#endif
144 144
145 } 145 }
146} 146}
147 147
148void LanguageSettings::done(int r) 148void LanguageSettings::done(int r)
149{ 149{
150 QDialog::done(r); 150 QDialog::done(r);
151 close(); 151 close();
152} 152}
diff --git a/noncore/settings/mediummount/mainwindow.cc b/noncore/settings/mediummount/mainwindow.cc
index 6b37cff..eec786c 100644
--- a/noncore/settings/mediummount/mainwindow.cc
+++ b/noncore/settings/mediummount/mainwindow.cc
@@ -1,82 +1,83 @@
1 1
2 2
3#include <qtabwidget.h> 3#include <qtabwidget.h>
4#include <qlayout.h> 4#include <qlayout.h>
5#include <qtooltip.h> 5#include <qtooltip.h>
6#include <qwhatsthis.h> 6#include <qwhatsthis.h>
7 7
8#include <qpe/storage.h> 8#include <qpe/storage.h>
9 9
10#include "mediumwidget.h" 10#include "mediumwidget.h"
11#include "mediumglobal.h" 11#include "mediumglobal.h"
12 12
13#include "mainwindow.h" 13#include "mainwindow.h"
14 14
15using namespace MediumMountSetting; 15using namespace MediumMountSetting;
16 16
17/* TRANSLATOR MediumMountSetting::MainWindow */
17 18
18MainWindow::MainWindow( QWidget *parent, const char *name, bool modal, WFlags ) 19MainWindow::MainWindow( QWidget *parent, const char *name, bool modal, WFlags )
19 : QDialog( parent, name, modal, WStyle_ContextHelp ) 20 : QDialog( parent, name, modal, WStyle_ContextHelp )
20 21
21{ 22{
22 setCaption ( tr( "Medium Mount Settings" )); 23 setCaption ( tr( "Medium Mount Settings" ));
23 24
24 m_lay = new QVBoxLayout( this ); 25 m_lay = new QVBoxLayout( this );
25 26
26 m_tab = new QTabWidget( this ); 27 m_tab = new QTabWidget( this );
27 28
28 m_lay->addWidget( m_tab ); 29 m_lay->addWidget( m_tab );
29 30
30 init(); 31 init();
31} 32}
32 33
33MainWindow::~MainWindow() 34MainWindow::~MainWindow()
34{ 35{
35} 36}
36 37
37void MainWindow::init() 38void MainWindow::init()
38{ 39{
39 m_global = new MediumGlobalWidget( m_tab, "test drive" ); 40 m_global = new MediumGlobalWidget( m_tab, "test drive" );
40 m_tab->addTab( m_global, tr("Global") ); 41 m_tab->addTab( m_global, tr("Global") );
41 42
42 StorageInfo storage; 43 StorageInfo storage;
43 const QList<FileSystem> &fs = storage.fileSystems(); 44 const QList<FileSystem> &fs = storage.fileSystems();
44 QListIterator<FileSystem> it( fs ); 45 QListIterator<FileSystem> it( fs );
45 MediumMountWidget *wid; 46 MediumMountWidget *wid;
46 for( ; it.current(); ++it ){ 47 for( ; it.current(); ++it ){
47 if( (*it)->isRemovable() ){ 48 if( (*it)->isRemovable() ){
48 wid = new MediumMountWidget((*it)->path(), QPixmap(), m_tab ); 49 wid = new MediumMountWidget((*it)->path(), QPixmap(), m_tab );
49 m_mediums.append( wid ); 50 m_mediums.append( wid );
50 m_tab->addTab( wid, (*it)->name() ); 51 m_tab->addTab( wid, (*it)->name() );
51 } 52 }
52 } 53 }
53} 54}
54 55
55void MainWindow::accept() 56void MainWindow::accept()
56{ 57{
57 m_global->writeConfig(); 58 m_global->writeConfig();
58 59
59 MediumMountWidget *confWidget; 60 MediumMountWidget *confWidget;
60 for ( confWidget = m_mediums.first(); confWidget != 0; 61 for ( confWidget = m_mediums.first(); confWidget != 0;
61 confWidget = m_mediums.next() ) { 62 confWidget = m_mediums.next() ) {
62 confWidget->writeConfig(); 63 confWidget->writeConfig();
63 } 64 }
64 65
65 QDialog::accept(); 66 QDialog::accept();
66} 67}
67 68
68void MainWindow::done ( int r ) 69void MainWindow::done ( int r )
69{ 70{
70 QDialog::done( r ); 71 QDialog::done( r );
71 close (); 72 close ();
72} 73}
73 74
74 75
75void MainWindow::slotGlobalChanged(int ) 76void MainWindow::slotGlobalChanged(int )
76{ 77{
77 78
78} 79}
79void MainWindow::slotCheckingChanged(int ) 80void MainWindow::slotCheckingChanged(int )
80{ 81{
81 82
82} 83}
diff --git a/noncore/settings/mediummount/mediumglobal.cc b/noncore/settings/mediummount/mediumglobal.cc
index 75e3839..ab0b3af 100644
--- a/noncore/settings/mediummount/mediumglobal.cc
+++ b/noncore/settings/mediummount/mediumglobal.cc
@@ -1,183 +1,185 @@
1 1
2 2
3#include <qlineedit.h> 3#include <qlineedit.h>
4#include <qcheckbox.h> 4#include <qcheckbox.h>
5#include <qlabel.h> 5#include <qlabel.h>
6#include <qabstractlayout.h> // spacer item 6#include <qabstractlayout.h> // spacer item
7#include <qlayout.h> 7#include <qlayout.h>
8#include <qframe.h> 8#include <qframe.h>
9#include <qgroupbox.h> 9#include <qgroupbox.h>
10#include <qwhatsthis.h> 10#include <qwhatsthis.h>
11 11
12#include <qpe/config.h> 12#include <qpe/config.h>
13 13
14#include "mediumglobal.h" 14#include "mediumglobal.h"
15 15
16using namespace MediumMountSetting; 16using namespace MediumMountSetting;
17 17
18/* TRANSLATOR MediumMountSetting::MediumGlobalWidget */
19
18MediumGlobalWidget::MediumGlobalWidget(QWidget *wid, const char *name ) 20MediumGlobalWidget::MediumGlobalWidget(QWidget *wid, const char *name )
19 : QWidget( wid, name, WStyle_ContextHelp ) 21 : QWidget( wid, name, WStyle_ContextHelp )
20{ 22{
21 m_config = 0; 23 m_config = 0;
22 initGUI(); 24 initGUI();
23 readConfig(); 25 readConfig();
24 26
25} 27}
26void MediumGlobalWidget::initGUI() 28void MediumGlobalWidget::initGUI()
27{ 29{
28 m_layout = new QVBoxLayout(this ); 30 m_layout = new QVBoxLayout(this );
29 m_layout->setMargin( 4 ); 31 m_layout->setMargin( 4 );
30 // m_layout->setSpacing( 10 ); 32 // m_layout->setSpacing( 10 );
31 33
32 34
33 m_label = new QLabel( this ); 35 m_label = new QLabel( this );
34 m_label->setTextFormat( Qt::RichText ); 36 m_label->setTextFormat( Qt::RichText );
35 m_label->setText( tr("") ); 37 m_label->setText( tr("") );
36 QWhatsThis::add( this, tr("If a medium gets inserted into this device Opie " 38 QWhatsThis::add( this, tr("If a medium gets inserted into this device Opie "
37 "tries to search the medium for Documents. On " 39 "tries to search the medium for Documents. On "
38 "large mediums this can take some time. You can choose " 40 "large mediums this can take some time. You can choose "
39 "if Opie should scan for Documents globally or on a " 41 "if Opie should scan for Documents globally or on a "
40 "per medium level. You're also able to reconfigure " 42 "per medium level. You're also able to reconfigure "
41 "each medium.") ); 43 "each medium.") );
42 44
43 m_layout->addWidget( m_label ); 45 m_layout->addWidget( m_label );
44 46
45 m_check = new QCheckBox( tr("Enable medium checking" ), this ); 47 m_check = new QCheckBox( tr("Enable medium checking" ), this );
46 connect( m_check, SIGNAL(stateChanged(int) ), 48 connect( m_check, SIGNAL(stateChanged(int) ),
47 this, SLOT(slotEnableChecking() ) ); 49 this, SLOT(slotEnableChecking() ) );
48 m_layout->addWidget(m_check ); 50 m_layout->addWidget(m_check );
49 51
50 m_frame = new QFrame(this, "Frame" ); 52 m_frame = new QFrame(this, "Frame" );
51 m_frame->setFrameShape( QFrame::Box ); 53 m_frame->setFrameShape( QFrame::Box );
52 m_frame->setFrameShadow( QFrame::Sunken ); 54 m_frame->setFrameShadow( QFrame::Sunken );
53 55
54 m_box = new QVBoxLayout( m_frame ); 56 m_box = new QVBoxLayout( m_frame );
55 m_box->setMargin( 5 ); 57 m_box->setMargin( 5 );
56 m_useglobal = new QCheckBox( tr("Use global settings"), m_frame ); 58 m_useglobal = new QCheckBox( tr("Use global settings"), m_frame );
57 connect( m_useglobal, SIGNAL( stateChanged(int) ), 59 connect( m_useglobal, SIGNAL( stateChanged(int) ),
58 this, SLOT( slotGlobalChanged() ) ); 60 this, SLOT( slotGlobalChanged() ) );
59 61
60 m_box->addWidget( m_useglobal ); 62 m_box->addWidget( m_useglobal );
61 63
62 m_global = new QGroupBox( tr("Which media files"), m_frame ); 64 m_global = new QGroupBox( tr("Which media files"), m_frame );
63 m_frameLay = new QGridLayout(m_global, 4, 3 ); 65 m_frameLay = new QGridLayout(m_global, 4, 3 );
64 m_frameLay->setMargin( 10 ); 66 m_frameLay->setMargin( 10 );
65 67
66 QSpacerItem *item2 = new QSpacerItem( 5, 8, 68 QSpacerItem *item2 = new QSpacerItem( 5, 8,
67 QSizePolicy::Fixed, 69 QSizePolicy::Fixed,
68 QSizePolicy::Fixed ); 70 QSizePolicy::Fixed );
69 m_audio = new QCheckBox( tr("Audio"), m_global ); 71 m_audio = new QCheckBox( tr("Audio"), m_global );
70 m_all = new QCheckBox( tr("All") , m_global ); 72 m_all = new QCheckBox( tr("All") , m_global );
71 m_image = new QCheckBox( tr("Image"), m_global ); 73 m_image = new QCheckBox( tr("Image"), m_global );
72 m_text = new QCheckBox( tr("Text") , m_global ); 74 m_text = new QCheckBox( tr("Text") , m_global );
73 m_video = new QCheckBox( tr("Video"), m_global ); 75 m_video = new QCheckBox( tr("Video"), m_global );
74 76
75 connect(m_all, SIGNAL(stateChanged(int) ), 77 connect(m_all, SIGNAL(stateChanged(int) ),
76 this, SLOT(slotAllChanged() ) ); 78 this, SLOT(slotAllChanged() ) );
77 79
78 m_frameLay->addItem( item2, 0, 0 ); 80 m_frameLay->addItem( item2, 0, 0 );
79 81
80 m_frameLay->addWidget( m_audio, 1, 0 ); 82 m_frameLay->addWidget( m_audio, 1, 0 );
81 m_frameLay->addWidget( m_image, 2, 0 ); 83 m_frameLay->addWidget( m_image, 2, 0 );
82 m_frameLay->addWidget( m_all, 3, 0 ); 84 m_frameLay->addWidget( m_all, 3, 0 );
83 85
84 m_frameLay->addWidget( m_text, 1, 2 ); 86 m_frameLay->addWidget( m_text, 1, 2 );
85 m_frameLay->addWidget( m_video, 2, 2 ); 87 m_frameLay->addWidget( m_video, 2, 2 );
86 88
87 m_frameLay->addRowSpacing( 0, 8 ); 89 m_frameLay->addRowSpacing( 0, 8 );
88 m_frameLay->addColSpacing( 1, 2 ); 90 m_frameLay->addColSpacing( 1, 2 );
89 91
90 m_box->addWidget( m_global ); 92 m_box->addWidget( m_global );
91 93
92 94
93 m_layout->addWidget( m_frame ); 95 m_layout->addWidget( m_frame );
94 96
95 QSpacerItem *item1 = new QSpacerItem( 1, 24, 97 QSpacerItem *item1 = new QSpacerItem( 1, 24,
96 QSizePolicy::Fixed, 98 QSizePolicy::Fixed,
97 QSizePolicy::Expanding ); 99 QSizePolicy::Expanding );
98 m_layout->addItem( item1 ); 100 m_layout->addItem( item1 );
99} 101}
100void MediumGlobalWidget::readConfig() 102void MediumGlobalWidget::readConfig()
101{ 103{
102 if( m_config == 0 ) 104 if( m_config == 0 )
103 m_config = new Config("medium" ); 105 m_config = new Config("medium" );
104 106
105 m_config->setGroup("main"); 107 m_config->setGroup("main");
106 m_useglobal->setChecked( m_config->readBoolEntry("global", false ) ); 108 m_useglobal->setChecked( m_config->readBoolEntry("global", false ) );
107 m_check->setChecked( m_config->readBoolEntry("use", true ) ); 109 m_check->setChecked( m_config->readBoolEntry("use", true ) );
108 110
109 m_config->setGroup("mimetypes" ); 111 m_config->setGroup("mimetypes" );
110 m_all->setChecked ( m_config->readBoolEntry("all", false ) ); 112 m_all->setChecked ( m_config->readBoolEntry("all", false ) );
111 m_audio->setChecked( m_config->readBoolEntry("audio", true ) ); 113 m_audio->setChecked( m_config->readBoolEntry("audio", true ) );
112 m_video->setChecked( m_config->readBoolEntry("video", true ) ); 114 m_video->setChecked( m_config->readBoolEntry("video", true ) );
113 m_text->setChecked ( m_config->readBoolEntry("text", true ) ); 115 m_text->setChecked ( m_config->readBoolEntry("text", true ) );
114 m_image->setChecked( m_config->readBoolEntry("image", true ) ); 116 m_image->setChecked( m_config->readBoolEntry("image", true ) );
115 117
116 slotAllChanged(); 118 slotAllChanged();
117 slotEnableChecking(); 119 slotEnableChecking();
118 slotGlobalChanged(); 120 slotGlobalChanged();
119 if( m_all->isChecked() ){ 121 if( m_all->isChecked() ){
120 m_video->setEnabled( false ); 122 m_video->setEnabled( false );
121 m_text->setEnabled( false ); 123 m_text->setEnabled( false );
122 m_audio->setEnabled( false ); 124 m_audio->setEnabled( false );
123 m_image->setEnabled( false ); 125 m_image->setEnabled( false );
124 126
125 } 127 }
126} 128}
127void MediumGlobalWidget::writeConfig() 129void MediumGlobalWidget::writeConfig()
128{ 130{
129 m_config->setGroup( "main" ); 131 m_config->setGroup( "main" );
130 m_config->writeEntry("global", m_useglobal->isChecked() ); 132 m_config->writeEntry("global", m_useglobal->isChecked() );
131 m_config->writeEntry("use", m_check->isChecked() ); 133 m_config->writeEntry("use", m_check->isChecked() );
132 134
133 m_config->setGroup("mimetypes" ); 135 m_config->setGroup("mimetypes" );
134 136
135 m_config->writeEntry("all", m_all->isChecked() ); 137 m_config->writeEntry("all", m_all->isChecked() );
136 m_config->writeEntry("audio", m_audio->isChecked() ); 138 m_config->writeEntry("audio", m_audio->isChecked() );
137 m_config->writeEntry("video", m_video->isChecked() ); 139 m_config->writeEntry("video", m_video->isChecked() );
138 m_config->writeEntry("text", m_text->isChecked() ); 140 m_config->writeEntry("text", m_text->isChecked() );
139 m_config->writeEntry("image", m_image->isChecked() ); 141 m_config->writeEntry("image", m_image->isChecked() );
140} 142}
141MediumGlobalWidget::~MediumGlobalWidget() 143MediumGlobalWidget::~MediumGlobalWidget()
142{ 144{
143 delete m_config; 145 delete m_config;
144} 146}
145void MediumGlobalWidget::slotGlobalChanged() 147void MediumGlobalWidget::slotGlobalChanged()
146{ 148{
147 int mode = GLOBAL_DISABLED; 149 int mode = GLOBAL_DISABLED;
148 bool enabled = false; 150 bool enabled = false;
149 if( ( enabled =m_useglobal->isChecked() ) ){ 151 if( ( enabled =m_useglobal->isChecked() ) ){
150 mode = GLOBAL_ENABLED; 152 mode = GLOBAL_ENABLED;
151 }else 153 }else
152 mode = GLOBAL_DISABLED; 154 mode = GLOBAL_DISABLED;
153 qWarning("enabled = %d", enabled ); 155 qWarning("enabled = %d", enabled );
154 m_all->setEnabled ( enabled ); 156 m_all->setEnabled ( enabled );
155 m_audio->setEnabled( enabled ); 157 m_audio->setEnabled( enabled );
156 m_image->setEnabled( enabled ); 158 m_image->setEnabled( enabled );
157 m_text->setEnabled ( enabled ); 159 m_text->setEnabled ( enabled );
158 m_video->setEnabled ( enabled ); 160 m_video->setEnabled ( enabled );
159 slotAllChanged(); 161 slotAllChanged();
160 162
161 emit globalStateChanged( mode ); 163 emit globalStateChanged( mode );
162} 164}
163void MediumGlobalWidget::slotEnableChecking() 165void MediumGlobalWidget::slotEnableChecking()
164{ 166{
165 int mode = ENABLE_CHECKS; 167 int mode = ENABLE_CHECKS;
166 bool enabled = false; 168 bool enabled = false;
167 if( ( enabled = m_check->isChecked() ) ){ 169 if( ( enabled = m_check->isChecked() ) ){
168 mode = ENABLE_CHECKS; 170 mode = ENABLE_CHECKS;
169 }else{ 171 }else{
170 mode = DISABLE_CHECKS; 172 mode = DISABLE_CHECKS;
171 } 173 }
172 m_frame->setEnabled( enabled ); 174 m_frame->setEnabled( enabled );
173 slotGlobalChanged(); 175 slotGlobalChanged();
174 emit enableStateChanged( mode ); 176 emit enableStateChanged( mode );
175} 177}
176void MediumGlobalWidget::slotAllChanged() 178void MediumGlobalWidget::slotAllChanged()
177{ 179{
178 bool enable = !m_all->isChecked(); 180 bool enable = !m_all->isChecked();
179 m_audio->setEnabled( enable ); 181 m_audio->setEnabled( enable );
180 m_text->setEnabled( enable ); 182 m_text->setEnabled( enable );
181 m_video->setEnabled( enable ); 183 m_video->setEnabled( enable );
182 m_image->setEnabled( enable ); 184 m_image->setEnabled( enable );
183} 185}
diff --git a/noncore/settings/mediummount/mediumwidget.cc b/noncore/settings/mediummount/mediumwidget.cc
index eadf502..981e1dd 100644
--- a/noncore/settings/mediummount/mediumwidget.cc
+++ b/noncore/settings/mediummount/mediumwidget.cc
@@ -1,190 +1,192 @@
1 1
2 2
3#include <qcheckbox.h> 3#include <qcheckbox.h>
4#include <qgroupbox.h> 4#include <qgroupbox.h>
5#include <qhbox.h> 5#include <qhbox.h>
6#include <qlabel.h> 6#include <qlabel.h>
7#include <qabstractlayout.h> 7#include <qabstractlayout.h>
8#include <qlayout.h> 8#include <qlayout.h>
9#include <qlineedit.h> 9#include <qlineedit.h>
10#include <qpixmap.h> 10#include <qpixmap.h>
11#include <qpushbutton.h> 11#include <qpushbutton.h>
12#include <qvbox.h> 12#include <qvbox.h>
13#include <qwhatsthis.h> 13#include <qwhatsthis.h>
14 14
15 15
16#include <qpe/config.h> 16#include <qpe/config.h>
17#include <qpe/qpeapplication.h> 17#include <qpe/qpeapplication.h>
18 18
19#include "mediumwidget.h" 19#include "mediumwidget.h"
20 20
21 21
22 22
23using namespace MediumMountSetting; 23using namespace MediumMountSetting;
24 24
25/* TRANSLATOR MediumMountSetting::MediumMountWidget */
26
25MediumMountWidget::MediumMountWidget(const QString &path, 27MediumMountWidget::MediumMountWidget(const QString &path,
26 const QPixmap &pix, 28 const QPixmap &pix,
27 QWidget *parent, 29 QWidget *parent,
28 const char *name ) 30 const char *name )
29 : QWidget( parent, name ) 31 : QWidget( parent, name )
30{ 32{
31 if(parent == 0){ 33 if(parent == 0){
32 resize(QApplication::desktop()->width(), QApplication::desktop()->height() ); 34 resize(QApplication::desktop()->width(), QApplication::desktop()->height() );
33 }else{ 35 }else{
34 resize(parent->width(), parent->height() ); 36 resize(parent->width(), parent->height() );
35 } 37 }
36 m_path = path; 38 m_path = path;
37 initGUI(); 39 initGUI();
38 m_label->setPixmap(pix ); 40 m_label->setPixmap(pix );
39 m_config = 0; 41 m_config = 0;
40 42
41 readConfig(); 43 readConfig();
42} 44}
43// now we fire up the GUI 45// now we fire up the GUI
44// if I would know what I'm doing ;) 46// if I would know what I'm doing ;)
45void MediumMountWidget::initGUI() 47void MediumMountWidget::initGUI()
46{ 48{
47 //main layout 49 //main layout
48 m_box = new QVBoxLayout( this , 5, 5 ); 50 m_box = new QVBoxLayout( this , 5, 5 );
49 //m_box->setSpacing( 5 ); 51 //m_box->setSpacing( 5 );
50 //m_box->addStretch( -1 ); 52 //m_box->addStretch( -1 );
51 53
52 // picture + text 54 // picture + text
53 m_infoBox = new QHBox(this, "infobox" ); 55 m_infoBox = new QHBox(this, "infobox" );
54 //m_infoBox->setSpacing( 4 ); 56 //m_infoBox->setSpacing( 4 );
55 m_label = new QLabel(m_infoBox ); 57 m_label = new QLabel(m_infoBox );
56 m_desc = new QLabel(m_infoBox ); 58 m_desc = new QLabel(m_infoBox );
57 m_desc->setTextFormat( Qt::RichText ); 59 m_desc->setTextFormat( Qt::RichText );
58 QWhatsThis::add( this, tr("Configure this medium. The changes will" 60 QWhatsThis::add( this, tr("Configure this medium. The changes will"
59 " go into effect when the application gets" 61 " go into effect when the application gets"
60 " closed. To update the Document Tab you need" 62 " closed. To update the Document Tab you need"
61 " to remove and insert this medium.")); 63 " to remove and insert this medium."));
62 m_desc->setText("" ); 64 m_desc->setText("" );
63 m_box->addWidget( m_infoBox ); // add the widget to the layout 65 m_box->addWidget( m_infoBox ); // add the widget to the layout
64 66
65 67
66 // groupbox 68 // groupbox
67 m_group = new QGroupBox(tr("Which media files"), this, "MediaFiles" ); 69 m_group = new QGroupBox(tr("Which media files"), this, "MediaFiles" );
68 m_checks = new QGridLayout( m_group, 4, 3 ); 70 m_checks = new QGridLayout( m_group, 4, 3 );
69 //m_checks->setMargin( 12 ); 71 //m_checks->setMargin( 12 );
70 72
71 73
72 74
73 QSpacerItem *item2 = new QSpacerItem(5, 8, 75 QSpacerItem *item2 = new QSpacerItem(5, 8,
74 QSizePolicy::Fixed, 76 QSizePolicy::Fixed,
75 QSizePolicy::Fixed); 77 QSizePolicy::Fixed);
76 m_box->addItem( item2 ); 78 m_box->addItem( item2 );
77 79
78 m_audio = new QCheckBox( tr("Audio"), m_group ); 80 m_audio = new QCheckBox( tr("Audio"), m_group );
79 m_all = new QCheckBox( tr("All") , m_group ); 81 m_all = new QCheckBox( tr("All") , m_group );
80 m_image = new QCheckBox( tr("Image"), m_group ); 82 m_image = new QCheckBox( tr("Image"), m_group );
81 m_text = new QCheckBox( tr("Text") , m_group ); 83 m_text = new QCheckBox( tr("Text") , m_group );
82 m_video = new QCheckBox( tr("Video"), m_group ); 84 m_video = new QCheckBox( tr("Video"), m_group );
83 85
84 QSpacerItem *iti1b = new QSpacerItem(2, 10, QSizePolicy::Fixed, 86 QSpacerItem *iti1b = new QSpacerItem(2, 10, QSizePolicy::Fixed,
85 QSizePolicy::Fixed ); 87 QSizePolicy::Fixed );
86 m_checks->addItem( iti1b, 0, 0 ); 88 m_checks->addItem( iti1b, 0, 0 );
87 89
88 m_checks->addWidget(m_audio, 1, 0 ); 90 m_checks->addWidget(m_audio, 1, 0 );
89 m_checks->addWidget(m_image, 2, 0 ); 91 m_checks->addWidget(m_image, 2, 0 );
90 m_checks->addWidget(m_all , 3, 0 ); 92 m_checks->addWidget(m_all , 3, 0 );
91 93
92 m_checks->addWidget(m_text, 1, 2 ); 94 m_checks->addWidget(m_text, 1, 2 );
93 m_checks->addWidget(m_video, 2, 2 ); 95 m_checks->addWidget(m_video, 2, 2 );
94 96
95 m_checks->addRowSpacing(0, 8 ); 97 m_checks->addRowSpacing(0, 8 );
96 m_checks->addColSpacing(1, 2 ); 98 m_checks->addColSpacing(1, 2 );
97 m_checks->setColStretch(1, -2 ); 99 m_checks->setColStretch(1, -2 );
98 100
99 connect(m_all, SIGNAL(stateChanged(int) ), 101 connect(m_all, SIGNAL(stateChanged(int) ),
100 this, SLOT(slotStateChanged() ) ); 102 this, SLOT(slotStateChanged() ) );
101 103
102 m_box->addWidget( m_group ); 104 m_box->addWidget( m_group );
103 105
104 // label 106 // label
105 m_lblPath = new QLabel(tr("Limit search to:"), this ); 107 m_lblPath = new QLabel(tr("Limit search to:"), this );
106 m_box->addWidget( m_lblPath ); 108 m_box->addWidget( m_lblPath );
107 109
108 // add to 110 // add to
109 m_hboxAdd = new QHBox( this ); 111 m_hboxAdd = new QHBox( this );
110 //m_hboxAdd->setSpacing( 10 ); 112 //m_hboxAdd->setSpacing( 10 );
111 m_edit = new QLineEdit(m_hboxAdd ); 113 m_edit = new QLineEdit(m_hboxAdd );
112 m_add = new QPushButton(m_hboxAdd ); 114 m_add = new QPushButton(m_hboxAdd );
113 m_add->setText( tr("Add") ); 115 m_add->setText( tr("Add") );
114 116
115 m_box->addWidget(m_hboxAdd ); 117 m_box->addWidget(m_hboxAdd );
116 118
117 m_always = new QCheckBox( tr("Always check this medium"), this ); 119 m_always = new QCheckBox( tr("Always check this medium"), this );
118 120
119 m_box->addWidget( m_always ); 121 m_box->addWidget( m_always );
120 122
121 QSpacerItem *item = new QSpacerItem(5, 50, 123 QSpacerItem *item = new QSpacerItem(5, 50,
122 QSizePolicy::Fixed, 124 QSizePolicy::Fixed,
123 QSizePolicy::Expanding ); 125 QSizePolicy::Expanding );
124 m_box->addItem(item ); 126 m_box->addItem(item );
125} 127}
126 128
127void MediumMountWidget::readConfig( ) 129void MediumMountWidget::readConfig( )
128{ 130{
129 if( m_config == 0 ) 131 if( m_config == 0 )
130 m_config = new Config(m_path + "/.opiestorage.cf", Config::File ); 132 m_config = new Config(m_path + "/.opiestorage.cf", Config::File );
131 m_config->setGroup( "main" ); 133 m_config->setGroup( "main" );
132 134
133 m_always->setChecked( m_config->readBoolEntry("check", false) ); 135 m_always->setChecked( m_config->readBoolEntry("check", false) );
134 136
135 m_config->setGroup( "mimetypes" ); 137 m_config->setGroup( "mimetypes" );
136 if( m_config->readBoolEntry("all", false ) ){ 138 if( m_config->readBoolEntry("all", false ) ){
137 m_audio->setEnabled( false ); 139 m_audio->setEnabled( false );
138 m_image->setEnabled( false ); 140 m_image->setEnabled( false );
139 m_text->setEnabled ( false ); 141 m_text->setEnabled ( false );
140 m_video->setEnabled( false ); 142 m_video->setEnabled( false );
141 m_all->setChecked( true ); 143 m_all->setChecked( true );
142 }else{ 144 }else{
143 m_audio->setEnabled( true ); 145 m_audio->setEnabled( true );
144 m_image->setEnabled( true ); 146 m_image->setEnabled( true );
145 m_text->setEnabled ( true ); 147 m_text->setEnabled ( true );
146 m_all->setEnabled ( true ); 148 m_all->setEnabled ( true );
147 149
148 m_all->setChecked( false ); 150 m_all->setChecked( false );
149 151
150 m_audio->setChecked( m_config->readBoolEntry("audio", true ) ); 152 m_audio->setChecked( m_config->readBoolEntry("audio", true ) );
151 m_image->setChecked( m_config->readBoolEntry("image", true ) ); 153 m_image->setChecked( m_config->readBoolEntry("image", true ) );
152 m_text->setChecked ( m_config->readBoolEntry("text" , true ) ); 154 m_text->setChecked ( m_config->readBoolEntry("text" , true ) );
153 m_video->setChecked( m_config->readBoolEntry("video", true ) ); 155 m_video->setChecked( m_config->readBoolEntry("video", true ) );
154 }; 156 };
155} 157}
156 158
157void MediumMountWidget::writeConfig() 159void MediumMountWidget::writeConfig()
158{ 160{
159 m_config->setGroup("main"); 161 m_config->setGroup("main");
160 m_config->writeEntry("check", m_always->isChecked() ); 162 m_config->writeEntry("check", m_always->isChecked() );
161 163
162 m_config->setGroup("mimetypes" ); 164 m_config->setGroup("mimetypes" );
163 if(m_all->isChecked() ){ 165 if(m_all->isChecked() ){
164 m_config->writeEntry("all", true ); 166 m_config->writeEntry("all", true );
165 }else{ 167 }else{
166 m_config->writeEntry("audio", m_audio->isChecked() ); 168 m_config->writeEntry("audio", m_audio->isChecked() );
167 m_config->writeEntry("image", m_image->isChecked() ); 169 m_config->writeEntry("image", m_image->isChecked() );
168 m_config->writeEntry("text" , m_text->isChecked() ); 170 m_config->writeEntry("text" , m_text->isChecked() );
169 m_config->writeEntry("video", m_video->isChecked() ); 171 m_config->writeEntry("video", m_video->isChecked() );
170 } 172 }
171} 173}
172MediumMountWidget::~MediumMountWidget() 174MediumMountWidget::~MediumMountWidget()
173{ 175{
174 delete m_config; 176 delete m_config;
175} 177}
176 178
177void MediumMountWidget::slotAdd() 179void MediumMountWidget::slotAdd()
178{ 180{
179 181
180} 182}
181void MediumMountWidget::slotStateChanged() 183void MediumMountWidget::slotStateChanged()
182{ 184{
183 bool state = !(m_all->isChecked()); 185 bool state = !(m_all->isChecked());
184 186
185 m_audio->setEnabled( state ); 187 m_audio->setEnabled( state );
186 m_text->setEnabled ( state ); 188 m_text->setEnabled ( state );
187 m_video->setEnabled( state ); 189 m_video->setEnabled( state );
188 m_image->setEnabled( state ); 190 m_image->setEnabled( state );
189 191
190} 192}
diff --git a/noncore/settings/networksettings/interfaces/interface.cpp b/noncore/settings/networksettings/interfaces/interface.cpp
index cc45525..69b55d1 100644
--- a/noncore/settings/networksettings/interfaces/interface.cpp
+++ b/noncore/settings/networksettings/interfaces/interface.cpp
@@ -1,302 +1,302 @@
1/** 1/**
2 * $Author$ 2 * $Author$
3 * $Date$ 3 * $Date$
4 */ 4 */
5 5
6#include "interface.h" 6#include "interface.h"
7#include <qdatetime.h> 7#include <qdatetime.h>
8#include <qfile.h> 8#include <qfile.h>
9#include <qdir.h> 9#include <qdir.h>
10#include <qfileinfo.h> 10#include <qfileinfo.h>
11#include <qtextstream.h> 11#include <qtextstream.h>
12 12
13#define IFCONFIG "/sbin/ifconfig" 13#define IFCONFIG "/sbin/ifconfig"
14#define DHCP_INFO_DIR "/etc/dhcpc" 14#define DHCP_INFO_DIR "/etc/dhcpc"
15 15
16#include <stdio.h> 16#include <stdio.h>
17#include <stdlib.h> 17#include <stdlib.h>
18 18
19Interface::Interface(QObject * parent, const char * name, bool newSatus): QObject(parent, name), hardwareName("Unknown"), moduleOwner(NULL), status(newSatus), attached(false), dhcp(false), macAddress(""), ip("0.0.0.0"), broadcast(""), subnetMask("0.0.0.0"){ 19Interface::Interface(QObject * parent, const char * name, bool newSatus): QObject(parent, name), hardwareName("Unknown"), moduleOwner(NULL), status(newSatus), attached(false), dhcp(false), macAddress(""), ip("0.0.0.0"), broadcast(""), subnetMask("0.0.0.0"){
20 refresh(); 20 refresh();
21} 21}
22 22
23/** 23/**
24 * Set status 24 * Set status
25 * @param newStatus - the new status 25 * @param newStatus - the new status
26 * emit updateInterface 26 * emit updateInterface
27 */ 27 */
28void Interface::setStatus(bool newStatus){ 28void Interface::setStatus(bool newStatus){
29 if(status != newStatus){ 29 if(status != newStatus){
30 status = newStatus; 30 status = newStatus;
31 refresh(); 31 refresh();
32 } 32 }
33}; 33};
34 34
35/** 35/**
36 * Set if attached or not (802.11 card pulled out for example) 36 * Set if attached or not (802.11 card pulled out for example)
37 * @param isAttached - if attached 37 * @param isAttached - if attached
38 * emit updateInterface 38 * emit updateInterface
39 */ 39 */
40void Interface::setAttached(bool isAttached){ 40void Interface::setAttached(bool isAttached){
41 attached = isAttached; 41 attached = isAttached;
42 emit(updateInterface(this)); 42 emit(updateInterface(this));
43}; 43};
44 44
45/** 45/**
46 * Set Hardware name 46 * Set Hardware name
47 * @param name - the new name 47 * @param name - the new name
48 * emit updateInterface 48 * emit updateInterface
49 */ 49 */
50void Interface::setHardwareName(const QString &name){ 50void Interface::setHardwareName(const QString &name){
51 hardwareName = name; 51 hardwareName = name;
52 emit(updateInterface(this)); 52 emit(updateInterface(this));
53}; 53};
54 54
55/** 55/**
56 * Set Module owner 56 * Set Module owner
57 * @param owner - the new owner 57 * @param owner - the new owner
58 * emit updateInterface 58 * emit updateInterface
59 */ 59 */
60void Interface::setModuleOwner(Module *owner){ 60void Interface::setModuleOwner(Module *owner){
61 moduleOwner = owner; 61 moduleOwner = owner;
62 emit(updateInterface(this)); 62 emit(updateInterface(this));
63}; 63};
64 64
65 65
66/** 66/**
67 * Try to start the interface. 67 * Try to start the interface.
68 */ 68 */
69void Interface::start(){ 69void Interface::start(){
70 // check to see if we are already running. 70 // check to see if we are already running.
71 if(true == status){ 71 if(true == status){
72 emit (updateMessage("Unable to start interface,\n already started")); 72 emit (updateMessage("Unable to start interface,\n already started"));
73 return; 73 return;
74 } 74 }
75 75
76 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(this->name()).latin1()); 76 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(this->name()).latin1());
77 // See if it was successfull... 77 // See if it was successfull...
78 if(ret != 0){ 78 if(ret != 0){
79 emit (updateMessage("Starting interface failed")); 79 emit (updateMessage("Starting interface failed"));
80 return; 80 return;
81 } 81 }
82 82
83 status = true; 83 status = true;
84 refresh(); 84 refresh();
85 emit (updateMessage("Start successfull")); 85 emit (updateMessage("Start successfull"));
86} 86}
87 87
88/** 88/**
89 * Try to stop the interface. 89 * Try to stop the interface.
90 */ 90 */
91void Interface::stop(){ 91void Interface::stop(){
92 // check to see if we are already stopped. 92 // check to see if we are already stopped.
93 if(false == status){ 93 if(false == status){
94 emit (updateMessage("Unable to stop interface,\n already stopped")); 94 emit (updateMessage("Unable to stop interface,\n already stopped"));
95 return; 95 return;
96 } 96 }
97 97
98 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(this->name()).latin1()); 98 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(this->name()).latin1());
99 if(ret != 0){ 99 if(ret != 0){
100 emit (updateMessage("Stopping interface failed")); 100 emit (updateMessage("Stopping interface failed"));
101 return; 101 return;
102 } 102 }
103 103
104 status = false; 104 status = false;
105 refresh(); 105 refresh();
106 emit (updateMessage("Stop successfull")); 106 emit (updateMessage("Stop successfull"));
107} 107}
108 108
109/** 109/**
110 * Try to restart the interface. 110 * Try to restart the interface.
111 */ 111 */
112void Interface::restart(){ 112void Interface::restart(){
113 stop(); 113 stop();
114 start(); 114 start();
115} 115}
116 116
117/** 117/**
118 * Try to refresh the information about the interface. 118 * Try to refresh the information about the interface.
119 * First call ifconfig, then check the dhcp-info file 119 * First call ifconfig, then check the dhcp-info file
120 * @return bool true if successfull. 120 * @return bool true if successfull.
121 */ 121 */
122bool Interface::refresh(){ 122bool Interface::refresh(){
123 // See if we are up. 123 // See if we are up.
124 if(status == false){ 124 if(status == false){
125 macAddress = ""; 125 macAddress = "";
126 ip = "0.0.0.0"; 126 ip = "0.0.0.0";
127 subnetMask = "0.0.0.0"; 127 subnetMask = "0.0.0.0";
128 broadcast = ""; 128 broadcast = "";
129 dhcp = false; 129 dhcp = false;
130 dhcpServerIp = ""; 130 dhcpServerIp = "";
131 leaseObtained = ""; 131 leaseObtained = "";
132 leaseExpires = ""; 132 leaseExpires = "";
133 emit(updateInterface(this)); 133 emit(updateInterface(this));
134 return true; 134 return true;
135 } 135 }
136 136
137 QString fileName = QString("/tmp/%1_ifconfig_info").arg(this->name()); 137 QString fileName = QString("/tmp/%1_ifconfig_info").arg(this->name());
138 int ret = system(QString("%1 %2 > %3").arg(IFCONFIG).arg(this->name()).arg(fileName).latin1()); 138 int ret = system(QString("LANG=C %1 %2 > %3").arg(IFCONFIG).arg(this->name()).arg(fileName).latin1());
139 if(ret != 0){ 139 if(ret != 0){
140 qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1()); 140 qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1());
141 return false; 141 return false;
142 } 142 }
143 143
144 QFile file(fileName); 144 QFile file(fileName);
145 if (!file.open(IO_ReadOnly)){ 145 if (!file.open(IO_ReadOnly)){
146 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); 146 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1());
147 return false; 147 return false;
148 } 148 }
149 149
150 // Set to the defaults 150 // Set to the defaults
151 macAddress = ""; 151 macAddress = "";
152 ip = "0.0.0.0"; 152 ip = "0.0.0.0";
153 subnetMask = "0.0.0.0"; 153 subnetMask = "0.0.0.0";
154 broadcast = ""; 154 broadcast = "";
155 155
156 QTextStream stream( &file ); 156 QTextStream stream( &file );
157 QString line; 157 QString line;
158 while ( !stream.eof() ) { 158 while ( !stream.eof() ) {
159 line = stream.readLine(); 159 line = stream.readLine();
160 if(line.contains("HWaddr")){ 160 if(line.contains("HWaddr")){
161 int mac = line.find("HWaddr"); 161 int mac = line.find("HWaddr");
162 macAddress = line.mid(mac+7, line.length()); 162 macAddress = line.mid(mac+7, line.length());
163 } 163 }
164 if(line.contains("inet addr")){ 164 if(line.contains("inet addr")){
165 int ipl = line.find("inet addr"); 165 int ipl = line.find("inet addr");
166 int space = line.find(" ", ipl+10); 166 int space = line.find(" ", ipl+10);
167 ip = line.mid(ipl+10, space-ipl-10); 167 ip = line.mid(ipl+10, space-ipl-10);
168 } 168 }
169 if(line.contains("Mask")){ 169 if(line.contains("Mask")){
170 int mask = line.find("Mask"); 170 int mask = line.find("Mask");
171 subnetMask = line.mid(mask+5, line.length()); 171 subnetMask = line.mid(mask+5, line.length());
172 } 172 }
173 if(line.contains("Bcast")){ 173 if(line.contains("Bcast")){
174 int mask = line.find("Bcast"); 174 int mask = line.find("Bcast");
175 int space = line.find(" ", mask+6); 175 int space = line.find(" ", mask+6);
176 broadcast = line.mid(mask+6, space-mask-6); 176 broadcast = line.mid(mask+6, space-mask-6);
177 } 177 }
178 } 178 }
179 file.close(); 179 file.close();
180 QFile::remove(fileName); 180 QFile::remove(fileName);
181 181
182 // DHCP TESTING 182 // DHCP TESTING
183 // reset DHCP info 183 // reset DHCP info
184 dhcpServerIp = ""; 184 dhcpServerIp = "";
185 leaseObtained = ""; 185 leaseObtained = "";
186 leaseExpires = ""; 186 leaseExpires = "";
187 dhcp = false; 187 dhcp = false;
188 188
189 QString dhcpDirectory(DHCP_INFO_DIR); 189 QString dhcpDirectory(DHCP_INFO_DIR);
190 QDir d(dhcpDirectory); 190 QDir d(dhcpDirectory);
191 if(!d.exists(dhcpDirectory)) 191 if(!d.exists(dhcpDirectory))
192 dhcpDirectory = "/var/run"; 192 dhcpDirectory = "/var/run";
193 193
194 // See if we have 194 // See if we have
195 QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(this->name())); 195 QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(this->name()));
196 // If there is no DHCP information then exit now with no errors. 196 // If there is no DHCP information then exit now with no errors.
197 if(!QFile::exists(dhcpFile)){ 197 if(!QFile::exists(dhcpFile)){
198 emit(updateInterface(this)); 198 emit(updateInterface(this));
199 return true; 199 return true;
200 } 200 }
201 201
202 file.setName(dhcpFile); 202 file.setName(dhcpFile);
203 if (!file.open(IO_ReadOnly)){ 203 if (!file.open(IO_ReadOnly)){
204 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); 204 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1());
205 return false; 205 return false;
206 } 206 }
207 207
208 // leaseTime and renewalTime and used if pid and deamon exe can be accessed. 208 // leaseTime and renewalTime and used if pid and deamon exe can be accessed.
209 int leaseTime = 0; 209 int leaseTime = 0;
210 int renewalTime = 0; 210 int renewalTime = 0;
211 211
212 stream.setDevice( &file ); 212 stream.setDevice( &file );
213 while ( !stream.eof() ) { 213 while ( !stream.eof() ) {
214 line = stream.readLine(); 214 line = stream.readLine();
215 if(line.contains("DHCPSIADDR=")) 215 if(line.contains("DHCPSIADDR="))
216 dhcpServerIp = line.mid(11, line.length()); 216 dhcpServerIp = line.mid(11, line.length());
217 if(line.contains("LEASETIME=")) 217 if(line.contains("LEASETIME="))
218 leaseTime = line.mid(10, line.length()).toInt(); 218 leaseTime = line.mid(10, line.length()).toInt();
219 if(line.contains("RENEWALTIME=")) 219 if(line.contains("RENEWALTIME="))
220 renewalTime = line.mid(12, line.length()).toInt(); 220 renewalTime = line.mid(12, line.length()).toInt();
221 } 221 }
222 file.close(); 222 file.close();
223 //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1()); 223 //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1());
224 //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1()); 224 //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1());
225 225
226 // Get the pid of the deamond 226 // Get the pid of the deamond
227 dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(this->name())); 227 dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(this->name()));
228 file.setName(dhcpFile); 228 file.setName(dhcpFile);
229 if (!file.open(IO_ReadOnly)){ 229 if (!file.open(IO_ReadOnly)){
230 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); 230 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1());
231 return false; 231 return false;
232 } 232 }
233 233
234 int pid = -1; 234 int pid = -1;
235 stream.setDevice( &file ); 235 stream.setDevice( &file );
236 while ( !stream.eof() ) { 236 while ( !stream.eof() ) {
237 line = stream.readLine(); 237 line = stream.readLine();
238 pid = line.toInt(); 238 pid = line.toInt();
239 } 239 }
240 file.close(); 240 file.close();
241 241
242 if( pid == -1){ 242 if( pid == -1){
243 qDebug("Interface: Could not get pid of dhcpc deamon."); 243 qDebug("Interface: Could not get pid of dhcpc deamon.");
244 return false; 244 return false;
245 } 245 }
246 246
247 // Get the start running time of the deamon 247 // Get the start running time of the deamon
248 fileName = (QString("/proc/%1/stat").arg(pid)); 248 fileName = (QString("/proc/%1/stat").arg(pid));
249 file.setName(fileName); 249 file.setName(fileName);
250 stream.setDevice( &file ); 250 stream.setDevice( &file );
251 if (!file.open(IO_ReadOnly)){ 251 if (!file.open(IO_ReadOnly)){
252 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); 252 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1());
253 return false; 253 return false;
254 } 254 }
255 while ( !stream.eof() ) { 255 while ( !stream.eof() ) {
256 line = stream.readLine(); 256 line = stream.readLine();
257 } 257 }
258 file.close(); 258 file.close();
259 long time = 0; 259 long time = 0;
260 // Grab the start time 260 // Grab the start time
261 // pid com state ppid pgrp session tty_nr tpgid flags 261 // pid com state ppid pgrp session tty_nr tpgid flags
262 sscanf(line.latin1(), "%*d %*s %*c %*d %*d %*d %*d %*d %*u " 262 sscanf(line.latin1(), "%*d %*s %*c %*d %*d %*d %*d %*d %*u "
263 // minflt cminflt majflt cmajflt utime stime cutime cstime priority 263 // minflt cminflt majflt cmajflt utime stime cutime cstime priority
264 "%*u %*u %*u %*u %*u %*u %*d %*d %*d " 264 "%*u %*u %*u %*u %*u %*u %*d %*d %*d "
265 // nice 0 itrealvalue starttime 265 // nice 0 itrealvalue starttime
266 "%*d %*d %*d %lu", (long*) &time); 266 "%*d %*d %*d %lu", (long*) &time);
267 time = time/100; 267 time = time/100;
268 268
269 QDateTime datetime(QDateTime::currentDateTime()); 269 QDateTime datetime(QDateTime::currentDateTime());
270 270
271 // Get the uptime of the computer. 271 // Get the uptime of the computer.
272 QFile f("/proc/uptime"); 272 QFile f("/proc/uptime");
273 if ( f.open(IO_ReadOnly) ) { // file opened successfully 273 if ( f.open(IO_ReadOnly) ) { // file opened successfully
274 QTextStream t( &f ); // use a text stream 274 QTextStream t( &f ); // use a text stream
275 int sec = 0; 275 int sec = 0;
276 t >> sec; 276 t >> sec;
277 datetime = datetime.addSecs((-1*sec)); 277 datetime = datetime.addSecs((-1*sec));
278 f.close(); 278 f.close();
279 } 279 }
280 else{ 280 else{
281 qDebug("Interface: Can't open /proc/uptime to retrive uptime."); 281 qDebug("Interface: Can't open /proc/uptime to retrive uptime.");
282 return false; 282 return false;
283 } 283 }
284 284
285 datetime = datetime.addSecs(time); 285 datetime = datetime.addSecs(time);
286 //qDebug(QString("Interface: %1 %2").arg(datetime.toString()).arg(pid).latin1()); 286 //qDebug(QString("Interface: %1 %2").arg(datetime.toString()).arg(pid).latin1());
287 287
288 // Calculate the start and renew times 288 // Calculate the start and renew times
289 leaseObtained= datetime.toString(); 289 leaseObtained= datetime.toString();
290 290
291 // Calculate the start and renew times 291 // Calculate the start and renew times
292 datetime = datetime.addSecs(leaseTime); 292 datetime = datetime.addSecs(leaseTime);
293 leaseExpires = datetime.toString(); 293 leaseExpires = datetime.toString();
294 294
295 dhcp = true; 295 dhcp = true;
296 296
297 emit(updateInterface(this)); 297 emit(updateInterface(this));
298 return true; 298 return true;
299} 299}
300 300
301// interface.cpp 301// interface.cpp
302 302
diff --git a/noncore/settings/networksettings/interfaces/interface.h b/noncore/settings/networksettings/interfaces/interface.h
index 7e98deb..ec82851 100644
--- a/noncore/settings/networksettings/interfaces/interface.h
+++ b/noncore/settings/networksettings/interfaces/interface.h
@@ -1,73 +1,73 @@
1#ifndef INTERFACE_H 1#ifndef INTERFACE_H
2#define INTERFACE_H 2#define INTERFACE_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5#include <qobject.h> 5#include <qobject.h>
6 6
7class Module; 7class Module;
8 8
9class Interface : public QObject{ 9class Interface : public QObject{
10 Q_OBJECT 10 Q_OBJECT
11 11
12signals: 12signals:
13 void updateInterface(Interface *i); 13 void updateInterface(Interface *i);
14 void updateMessage(const QString &message); 14 void updateMessage(const QString &message);
15 15
16public: 16public:
17 Interface(QObject * parent=0, const char * name= "unknown", bool status = false); 17 Interface(QObject * parent=0, const char * name= "unknown", bool status = false);
18 18
19 QString getInterfaceName() const { QString n(this->name()); return n; }; 19 QString getInterfaceName() const { QString n(this->name()); return n; };
20 void setInterfaceName( const QString &n ) { this->setName(n); }; 20 void setInterfaceName( const QString &n ) { this->setName(n); };
21 21
22 bool getStatus() const { return status; }; 22 bool getStatus() const { return status; };
23 void setStatus(bool newStatus); 23 void setStatus(bool newStatus);
24 24
25 bool isAttached() const { return attached; }; 25 bool isAttached() const { return attached; };
26 void setAttached(bool isAttached=false); 26 void setAttached(bool isAttached=false);
27 27
28 QString getHardwareName() const { return hardwareName; }; 28 QString getHardwareName() const { return hardwareName; };
29 void setHardwareName(const QString &name="Unknown"); 29 void setHardwareName(const QString &name="Unknown");
30 30
31 Module* getModuleOwner() const { return moduleOwner; }; 31 Module* getModuleOwner() const { return moduleOwner; };
32 void setModuleOwner(Module *owner=NULL); 32 void setModuleOwner(Module *owner=NULL);
33 33
34 // inet information. 34 // inet information.
35 QString getMacAddress() const { return macAddress; }; 35 QString getMacAddress() const { return macAddress; };
36 QString getIp() const { return ip; }; 36 QString getIp() const { return ip; };
37 QString getSubnetMask() const { return subnetMask; }; 37 QString getSubnetMask() const { return subnetMask; };
38 QString getBroadcast() const { return broadcast; }; 38 QString getBroadcast() const { return broadcast; };
39 bool isDhcp() const { return dhcp; }; 39 bool isDhcp() const { return dhcp; };
40 QString getDhcpServerIp() const { return dhcpServerIp; }; 40 QString getDhcpServerIp() const { return dhcpServerIp; };
41 QString getLeaseObtained() const { return leaseObtained; }; 41 QString getLeaseObtained() const { return leaseObtained; };
42 QString getLeaseExpires() const { return leaseExpires; }; 42 QString getLeaseExpires() const { return leaseExpires; };
43 43
44 public slots: 44 public slots:
45 virtual bool refresh(); 45 virtual bool refresh();
46 virtual void start(); 46 virtual void start();
47 virtual void stop(); 47 virtual void stop();
48 virtual void restart(); 48 virtual void restart();
49 49
50private: 50protected:
51 // Interface information 51 // Interface information
52 QString hardwareName; 52 QString hardwareName;
53 Module *moduleOwner; 53 Module *moduleOwner;
54 bool status; 54 bool status;
55 bool attached; 55 bool attached;
56 56
57 // Network information 57 // Network information
58 bool dhcp; 58 bool dhcp;
59 QString dhcpServerIp; 59 QString dhcpServerIp;
60 QString leaseObtained; 60 QString leaseObtained;
61 QString leaseExpires; 61 QString leaseExpires;
62 62
63 QString macAddress; 63 QString macAddress;
64 QString ip; 64 QString ip;
65 QString broadcast; 65 QString broadcast;
66 QString subnetMask; 66 QString subnetMask;
67 67
68}; 68};
69 69
70#endif 70#endif
71 71
72// interface.h 72// interface.h
73 73
diff --git a/noncore/settings/networksettings/interfaces/interfaceadvanced.ui b/noncore/settings/networksettings/interfaces/interfaceadvanced.ui
index 2e106cb..12dbb1d 100644
--- a/noncore/settings/networksettings/interfaces/interfaceadvanced.ui
+++ b/noncore/settings/networksettings/interfaces/interfaceadvanced.ui
@@ -1,213 +1,213 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>InterfaceAdvanced</class> 2<class>InterfaceAdvanced</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>InterfaceAdvanced</cstring> 7 <cstring>InterfaceAdvanced</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>214</width> 14 <width>214</width>
15 <height>290</height> 15 <height>290</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>maximumSize</name> 19 <name>maximumSize</name>
20 <size> 20 <size>
21 <width>240</width> 21 <width>32767</width>
22 <height>32767</height> 22 <height>32767</height>
23 </size> 23 </size>
24 </property> 24 </property>
25 <property stdset="1"> 25 <property stdset="1">
26 <name>caption</name> 26 <name>caption</name>
27 <string>Advanced Interface Information</string> 27 <string>Advanced Interface Information</string>
28 </property> 28 </property>
29 <grid> 29 <grid>
30 <property stdset="1"> 30 <property stdset="1">
31 <name>margin</name> 31 <name>margin</name>
32 <number>11</number> 32 <number>11</number>
33 </property> 33 </property>
34 <property stdset="1"> 34 <property stdset="1">
35 <name>spacing</name> 35 <name>spacing</name>
36 <number>6</number> 36 <number>6</number>
37 </property> 37 </property>
38 <widget row="0" column="1" > 38 <widget row="0" column="1" >
39 <class>QLabel</class> 39 <class>QLabel</class>
40 <property stdset="1"> 40 <property stdset="1">
41 <name>name</name> 41 <name>name</name>
42 <cstring>interfaceName</cstring> 42 <cstring>interfaceName</cstring>
43 </property> 43 </property>
44 <property stdset="1"> 44 <property stdset="1">
45 <name>frameShape</name> 45 <name>frameShape</name>
46 <enum>Panel</enum> 46 <enum>Panel</enum>
47 </property> 47 </property>
48 <property stdset="1"> 48 <property stdset="1">
49 <name>frameShadow</name> 49 <name>frameShadow</name>
50 <enum>Sunken</enum> 50 <enum>Sunken</enum>
51 </property> 51 </property>
52 <property stdset="1"> 52 <property stdset="1">
53 <name>text</name> 53 <name>text</name>
54 <string>eth0</string> 54 <string>eth0</string>
55 </property> 55 </property>
56 </widget> 56 </widget>
57 <widget row="1" column="0" > 57 <widget row="1" column="0" >
58 <class>QLabel</class> 58 <class>QLabel</class>
59 <property stdset="1"> 59 <property stdset="1">
60 <name>name</name> 60 <name>name</name>
61 <cstring>TextLabel3</cstring> 61 <cstring>TextLabel3</cstring>
62 </property> 62 </property>
63 <property stdset="1"> 63 <property stdset="1">
64 <name>text</name> 64 <name>text</name>
65 <string>IP Address</string> 65 <string>IP Address</string>
66 </property> 66 </property>
67 </widget> 67 </widget>
68 <widget row="0" column="0" > 68 <widget row="0" column="0" >
69 <class>QLabel</class> 69 <class>QLabel</class>
70 <property stdset="1"> 70 <property stdset="1">
71 <name>name</name> 71 <name>name</name>
72 <cstring>TextLabel7</cstring> 72 <cstring>TextLabel7</cstring>
73 </property> 73 </property>
74 <property stdset="1"> 74 <property stdset="1">
75 <name>text</name> 75 <name>text</name>
76 <string>Interface</string> 76 <string>Interface</string>
77 </property> 77 </property>
78 </widget> 78 </widget>
79 <widget row="2" column="0" > 79 <widget row="2" column="0" >
80 <class>QLabel</class> 80 <class>QLabel</class>
81 <property stdset="1"> 81 <property stdset="1">
82 <name>name</name> 82 <name>name</name>
83 <cstring>TextLabel4</cstring> 83 <cstring>TextLabel4</cstring>
84 </property> 84 </property>
85 <property stdset="1"> 85 <property stdset="1">
86 <name>enabled</name> 86 <name>enabled</name>
87 <bool>true</bool> 87 <bool>true</bool>
88 </property> 88 </property>
89 <property stdset="1"> 89 <property stdset="1">
90 <name>text</name> 90 <name>text</name>
91 <string>Subnet Mask</string> 91 <string>Subnet Mask</string>
92 </property> 92 </property>
93 </widget> 93 </widget>
94 <widget row="1" column="1" > 94 <widget row="1" column="1" >
95 <class>QLabel</class> 95 <class>QLabel</class>
96 <property stdset="1"> 96 <property stdset="1">
97 <name>name</name> 97 <name>name</name>
98 <cstring>ipAddressLabel</cstring> 98 <cstring>ipAddressLabel</cstring>
99 </property> 99 </property>
100 <property stdset="1"> 100 <property stdset="1">
101 <name>frameShape</name> 101 <name>frameShape</name>
102 <enum>Panel</enum> 102 <enum>Panel</enum>
103 </property> 103 </property>
104 <property stdset="1"> 104 <property stdset="1">
105 <name>frameShadow</name> 105 <name>frameShadow</name>
106 <enum>Sunken</enum> 106 <enum>Sunken</enum>
107 </property> 107 </property>
108 <property stdset="1"> 108 <property stdset="1">
109 <name>text</name> 109 <name>text</name>
110 <string>0.0.0.0</string> 110 <string>0.0.0.0</string>
111 </property> 111 </property>
112 </widget> 112 </widget>
113 <widget row="2" column="1" > 113 <widget row="2" column="1" >
114 <class>QLabel</class> 114 <class>QLabel</class>
115 <property stdset="1"> 115 <property stdset="1">
116 <name>name</name> 116 <name>name</name>
117 <cstring>subnetMaskLabel</cstring> 117 <cstring>subnetMaskLabel</cstring>
118 </property> 118 </property>
119 <property stdset="1"> 119 <property stdset="1">
120 <name>frameShape</name> 120 <name>frameShape</name>
121 <enum>Panel</enum> 121 <enum>Panel</enum>
122 </property> 122 </property>
123 <property stdset="1"> 123 <property stdset="1">
124 <name>frameShadow</name> 124 <name>frameShadow</name>
125 <enum>Sunken</enum> 125 <enum>Sunken</enum>
126 </property> 126 </property>
127 <property stdset="1"> 127 <property stdset="1">
128 <name>text</name> 128 <name>text</name>
129 <string>0.0.0.0</string> 129 <string>0.0.0.0</string>
130 </property> 130 </property>
131 </widget> 131 </widget>
132 <spacer row="6" column="1" > 132 <spacer row="6" column="1" >
133 <property> 133 <property>
134 <name>name</name> 134 <name>name</name>
135 <cstring>Spacer2</cstring> 135 <cstring>Spacer2</cstring>
136 </property> 136 </property>
137 <property stdset="1"> 137 <property stdset="1">
138 <name>orientation</name> 138 <name>orientation</name>
139 <enum>Vertical</enum> 139 <enum>Vertical</enum>
140 </property> 140 </property>
141 <property stdset="1"> 141 <property stdset="1">
142 <name>sizeType</name> 142 <name>sizeType</name>
143 <enum>Expanding</enum> 143 <enum>Expanding</enum>
144 </property> 144 </property>
145 <property> 145 <property>
146 <name>sizeHint</name> 146 <name>sizeHint</name>
147 <size> 147 <size>
148 <width>20</width> 148 <width>20</width>
149 <height>20</height> 149 <height>20</height>
150 </size> 150 </size>
151 </property> 151 </property>
152 </spacer> 152 </spacer>
153 <widget row="5" column="0" rowspan="1" colspan="2" > 153 <widget row="5" column="0" rowspan="1" colspan="2" >
154 <class>QGroupBox</class> 154 <class>QGroupBox</class>
155 <property stdset="1"> 155 <property stdset="1">
156 <name>name</name> 156 <name>name</name>
157 <cstring>dhcpInformation</cstring> 157 <cstring>dhcpInformation</cstring>
158 </property> 158 </property>
159 <property stdset="1"> 159 <property stdset="1">
160 <name>title</name> 160 <name>title</name>
161 <string>DHCP Information</string> 161 <string>DHCP Information</string>
162 </property> 162 </property>
163 <grid> 163 <grid>
164 <property stdset="1"> 164 <property stdset="1">
165 <name>margin</name> 165 <name>margin</name>
166 <number>11</number> 166 <number>11</number>
167 </property> 167 </property>
168 <property stdset="1"> 168 <property stdset="1">
169 <name>spacing</name> 169 <name>spacing</name>
170 <number>6</number> 170 <number>6</number>
171 </property> 171 </property>
172 <widget row="0" column="0" > 172 <widget row="0" column="0" >
173 <class>QLabel</class> 173 <class>QLabel</class>
174 <property stdset="1"> 174 <property stdset="1">
175 <name>name</name> 175 <name>name</name>
176 <cstring>TextLabel6</cstring> 176 <cstring>TextLabel6</cstring>
177 </property> 177 </property>
178 <property stdset="1"> 178 <property stdset="1">
179 <name>text</name> 179 <name>text</name>
180 <string>DHCP Server</string> 180 <string>DHCP Server</string>
181 </property> 181 </property>
182 </widget> 182 </widget>
183 <widget row="2" column="1" > 183 <widget row="2" column="1" >
184 <class>QLabel</class> 184 <class>QLabel</class>
185 <property stdset="1"> 185 <property stdset="1">
186 <name>name</name> 186 <name>name</name>
187 <cstring>leaseExpiresLabel</cstring> 187 <cstring>leaseExpiresLabel</cstring>
188 </property> 188 </property>
189 <property stdset="1"> 189 <property stdset="1">
190 <name>frameShape</name> 190 <name>frameShape</name>
191 <enum>Panel</enum> 191 <enum>Panel</enum>
192 </property> 192 </property>
193 <property stdset="1"> 193 <property stdset="1">
194 <name>frameShadow</name> 194 <name>frameShadow</name>
195 <enum>Sunken</enum> 195 <enum>Sunken</enum>
196 </property> 196 </property>
197 <property stdset="1"> 197 <property stdset="1">
198 <name>text</name> 198 <name>text</name>
199 <string></string> 199 <string></string>
200 </property> 200 </property>
201 </widget> 201 </widget>
202 <widget row="1" column="1" > 202 <widget row="1" column="1" >
203 <class>QLabel</class> 203 <class>QLabel</class>
204 <property stdset="1"> 204 <property stdset="1">
205 <name>name</name> 205 <name>name</name>
206 <cstring>leaseObtainedLabel</cstring> 206 <cstring>leaseObtainedLabel</cstring>
207 </property> 207 </property>
208 <property stdset="1"> 208 <property stdset="1">
209 <name>frameShape</name> 209 <name>frameShape</name>
210 <enum>Panel</enum> 210 <enum>Panel</enum>
211 </property> 211 </property>
212 <property stdset="1"> 212 <property stdset="1">
213 <name>frameShadow</name> 213 <name>frameShadow</name>
diff --git a/noncore/settings/networksettings/interfaces/interfaceinformation.ui b/noncore/settings/networksettings/interfaces/interfaceinformation.ui
index 763ad90..207200e 100644
--- a/noncore/settings/networksettings/interfaces/interfaceinformation.ui
+++ b/noncore/settings/networksettings/interfaces/interfaceinformation.ui
@@ -1,321 +1,338 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>InterfaceInformation</class> 2<class>InterfaceInformation</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>InterfaceInformation</cstring> 7 <cstring>InterfaceInformation</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>219</width> 14 <width>219</width>
15 <height>255</height> 15 <height>323</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Interface Information</string> 20 <string>Interface Information</string>
21 </property> 21 </property>
22 <grid> 22 <property>
23 <name>layoutMargin</name>
24 </property>
25 <property>
26 <name>layoutSpacing</name>
27 </property>
28 <vbox>
23 <property stdset="1"> 29 <property stdset="1">
24 <name>margin</name> 30 <name>margin</name>
25 <number>11</number> 31 <number>4</number>
26 </property> 32 </property>
27 <property stdset="1"> 33 <property stdset="1">
28 <name>spacing</name> 34 <name>spacing</name>
29 <number>6</number> 35 <number>3</number>
30 </property> 36 </property>
31 <widget row="4" column="0" rowspan="1" colspan="2" > 37 <widget>
32 <class>QLayoutWidget</class>
33 <property stdset="1">
34 <name>name</name>
35 <cstring>Layout1</cstring>
36 </property>
37 <grid>
38 <property stdset="1">
39 <name>margin</name>
40 <number>0</number>
41 </property>
42 <property stdset="1">
43 <name>spacing</name>
44 <number>6</number>
45 </property>
46 <widget row="1" column="0" >
47 <class>QPushButton</class>
48 <property stdset="1">
49 <name>name</name>
50 <cstring>refreshButton</cstring>
51 </property>
52 <property stdset="1">
53 <name>text</name>
54 <string>&amp;Refresh</string>
55 </property>
56 </widget>
57 <widget row="0" column="1" >
58 <class>QPushButton</class>
59 <property stdset="1">
60 <name>name</name>
61 <cstring>stopButton</cstring>
62 </property>
63 <property stdset="1">
64 <name>text</name>
65 <string>S&amp;top</string>
66 </property>
67 </widget>
68 <widget row="1" column="1" >
69 <class>QPushButton</class>
70 <property stdset="1">
71 <name>name</name>
72 <cstring>restartButton</cstring>
73 </property>
74 <property stdset="1">
75 <name>text</name>
76 <string>R&amp;estart</string>
77 </property>
78 </widget>
79 <widget row="0" column="0" >
80 <class>QPushButton</class>
81 <property stdset="1">
82 <name>name</name>
83 <cstring>startButton</cstring>
84 </property>
85 <property stdset="1">
86 <name>text</name>
87 <string>&amp;Start</string>
88 </property>
89 </widget>
90 </grid>
91 </widget>
92 <widget row="0" column="0" >
93 <class>Line</class>
94 <property stdset="1">
95 <name>name</name>
96 <cstring>Line1</cstring>
97 </property>
98 <property stdset="1">
99 <name>orientation</name>
100 <enum>Horizontal</enum>
101 </property>
102 </widget>
103 <widget row="0" column="0" >
104 <class>QLabel</class> 38 <class>QLabel</class>
105 <property stdset="1"> 39 <property stdset="1">
106 <name>name</name> 40 <name>name</name>
107 <cstring>TextLabel22</cstring> 41 <cstring>TextLabel22</cstring>
108 </property> 42 </property>
109 <property stdset="1"> 43 <property stdset="1">
110 <name>text</name> 44 <name>text</name>
111 <string>IP Address</string> 45 <string>IP Address</string>
112 </property> 46 </property>
113 </widget> 47 </widget>
114 <widget row="1" column="0" > 48 <widget>
115 <class>QLabel</class> 49 <class>QLabel</class>
116 <property stdset="1"> 50 <property stdset="1">
117 <name>name</name> 51 <name>name</name>
118 <cstring>TextLabel23</cstring> 52 <cstring>ipAddressLabel</cstring>
119 </property> 53 </property>
120 <property stdset="1"> 54 <property stdset="1">
121 <name>text</name> 55 <name>frameShape</name>
122 <string>Subnet Mask</string> 56 <enum>Panel</enum>
123 </property> 57 </property>
124 </widget>
125 <widget row="2" column="0" >
126 <class>QLabel</class>
127 <property stdset="1"> 58 <property stdset="1">
128 <name>name</name> 59 <name>frameShadow</name>
129 <cstring>TextLabel21</cstring> 60 <enum>Sunken</enum>
130 </property> 61 </property>
131 <property stdset="1"> 62 <property stdset="1">
132 <name>text</name> 63 <name>text</name>
133 <string>MAC Address</string> 64 <string>0.0.0.0</string>
134 </property> 65 </property>
135 </widget> 66 </widget>
136 <widget row="3" column="0" > 67 <widget>
137 <class>QLabel</class> 68 <class>Line</class>
138 <property stdset="1"> 69 <property stdset="1">
139 <name>name</name> 70 <name>name</name>
140 <cstring>TextLabel24</cstring> 71 <cstring>Line1</cstring>
141 </property> 72 </property>
142 <property stdset="1"> 73 <property stdset="1">
143 <name>frameShape</name> 74 <name>orientation</name>
144 <enum>MShape</enum> 75 <enum>Horizontal</enum>
145 </property> 76 </property>
77 </widget>
78 <widget>
79 <class>QLabel</class>
146 <property stdset="1"> 80 <property stdset="1">
147 <name>frameShadow</name> 81 <name>name</name>
148 <enum>MShadow</enum> 82 <cstring>TextLabel23</cstring>
149 </property> 83 </property>
150 <property stdset="1"> 84 <property stdset="1">
151 <name>text</name> 85 <name>text</name>
152 <string>Broadcast</string> 86 <string>Subnet Mask</string>
153 </property> 87 </property>
154 </widget> 88 </widget>
155 <widget row="1" column="1" > 89 <widget>
156 <class>QLabel</class> 90 <class>QLabel</class>
157 <property stdset="1"> 91 <property stdset="1">
158 <name>name</name> 92 <name>name</name>
159 <cstring>subnetMaskLabel</cstring> 93 <cstring>subnetMaskLabel</cstring>
160 </property> 94 </property>
161 <property stdset="1"> 95 <property stdset="1">
162 <name>frameShape</name> 96 <name>frameShape</name>
163 <enum>Panel</enum> 97 <enum>Panel</enum>
164 </property> 98 </property>
165 <property stdset="1"> 99 <property stdset="1">
166 <name>frameShadow</name> 100 <name>frameShadow</name>
167 <enum>Sunken</enum> 101 <enum>Sunken</enum>
168 </property> 102 </property>
169 <property stdset="1"> 103 <property stdset="1">
170 <name>text</name> 104 <name>text</name>
171 <string>0.0.0.0</string> 105 <string>0.0.0.0</string>
172 </property> 106 </property>
173 </widget> 107 </widget>
174 <widget row="2" column="1" > 108 <widget>
175 <class>QLabel</class> 109 <class>QLabel</class>
176 <property stdset="1"> 110 <property stdset="1">
177 <name>name</name> 111 <name>name</name>
178 <cstring>macAddressLabel</cstring> 112 <cstring>macAddressLabel</cstring>
179 </property> 113 </property>
180 <property stdset="1"> 114 <property stdset="1">
181 <name>frameShape</name> 115 <name>frameShape</name>
182 <enum>Panel</enum> 116 <enum>Panel</enum>
183 </property> 117 </property>
184 <property stdset="1"> 118 <property stdset="1">
185 <name>frameShadow</name> 119 <name>frameShadow</name>
186 <enum>Sunken</enum> 120 <enum>Sunken</enum>
187 </property> 121 </property>
188 <property stdset="1"> 122 <property stdset="1">
189 <name>text</name> 123 <name>text</name>
190 <string>00:00:00:00:00:00</string> 124 <string>00:00:00:00:00:00</string>
191 </property> 125 </property>
192 </widget> 126 </widget>
193 <widget row="3" column="1" > 127 <widget>
128 <class>QLabel</class>
129 <property stdset="1">
130 <name>name</name>
131 <cstring>TextLabel21</cstring>
132 </property>
133 <property stdset="1">
134 <name>text</name>
135 <string>MAC Address</string>
136 </property>
137 </widget>
138 <widget>
194 <class>QLabel</class> 139 <class>QLabel</class>
195 <property stdset="1"> 140 <property stdset="1">
196 <name>name</name> 141 <name>name</name>
197 <cstring>broadcastLabel</cstring> 142 <cstring>broadcastLabel</cstring>
198 </property> 143 </property>
199 <property stdset="1"> 144 <property stdset="1">
200 <name>frameShape</name> 145 <name>frameShape</name>
201 <enum>Panel</enum> 146 <enum>Panel</enum>
202 </property> 147 </property>
203 <property stdset="1"> 148 <property stdset="1">
204 <name>frameShadow</name> 149 <name>frameShadow</name>
205 <enum>Sunken</enum> 150 <enum>Sunken</enum>
206 </property> 151 </property>
207 <property stdset="1"> 152 <property stdset="1">
208 <name>text</name> 153 <name>text</name>
209 <string></string> 154 <string></string>
210 </property> 155 </property>
211 </widget> 156 </widget>
212 <widget row="0" column="1" > 157 <widget>
213 <class>QLabel</class> 158 <class>QLabel</class>
214 <property stdset="1"> 159 <property stdset="1">
215 <name>name</name> 160 <name>name</name>
216 <cstring>ipAddressLabel</cstring> 161 <cstring>TextLabel24</cstring>
217 </property> 162 </property>
218 <property stdset="1"> 163 <property stdset="1">
219 <name>frameShape</name> 164 <name>frameShape</name>
220 <enum>Panel</enum> 165 <enum>MShape</enum>
221 </property> 166 </property>
222 <property stdset="1"> 167 <property stdset="1">
223 <name>frameShadow</name> 168 <name>frameShadow</name>
224 <enum>Sunken</enum> 169 <enum>MShadow</enum>
225 </property> 170 </property>
226 <property stdset="1"> 171 <property stdset="1">
227 <name>text</name> 172 <name>text</name>
228 <string>0.0.0.0</string> 173 <string>Broadcast</string>
229 </property> 174 </property>
230 </widget> 175 </widget>
231 <spacer row="7" column="1" > 176 <widget>
232 <property> 177 <class>QLayoutWidget</class>
178 <property stdset="1">
233 <name>name</name> 179 <name>name</name>
234 <cstring>Spacer18</cstring> 180 <cstring>Layout1</cstring>
235 </property> 181 </property>
182 <grid>
183 <property stdset="1">
184 <name>margin</name>
185 <number>0</number>
186 </property>
187 <property stdset="1">
188 <name>spacing</name>
189 <number>6</number>
190 </property>
191 <widget row="1" column="0" >
192 <class>QPushButton</class>
193 <property stdset="1">
194 <name>name</name>
195 <cstring>refreshButton</cstring>
196 </property>
197 <property stdset="1">
198 <name>text</name>
199 <string>&amp;Refresh</string>
200 </property>
201 </widget>
202 <widget row="0" column="1" >
203 <class>QPushButton</class>
204 <property stdset="1">
205 <name>name</name>
206 <cstring>stopButton</cstring>
207 </property>
208 <property stdset="1">
209 <name>text</name>
210 <string>S&amp;top</string>
211 </property>
212 </widget>
213 <widget row="1" column="1" >
214 <class>QPushButton</class>
215 <property stdset="1">
216 <name>name</name>
217 <cstring>restartButton</cstring>
218 </property>
219 <property stdset="1">
220 <name>text</name>
221 <string>R&amp;estart</string>
222 </property>
223 </widget>
224 <widget row="0" column="0" >
225 <class>QPushButton</class>
226 <property stdset="1">
227 <name>name</name>
228 <cstring>startButton</cstring>
229 </property>
230 <property stdset="1">
231 <name>text</name>
232 <string>&amp;Start</string>
233 </property>
234 </widget>
235 </grid>
236 </widget>
237 <widget>
238 <class>Line</class>
236 <property stdset="1"> 239 <property stdset="1">
237 <name>orientation</name> 240 <name>name</name>
238 <enum>Vertical</enum> 241 <cstring>Line5</cstring>
239 </property> 242 </property>
240 <property stdset="1"> 243 <property stdset="1">
241 <name>sizeType</name> 244 <name>orientation</name>
242 <enum>Expanding</enum> 245 <enum>Horizontal</enum>
243 </property>
244 <property>
245 <name>sizeHint</name>
246 <size>
247 <width>20</width>
248 <height>20</height>
249 </size>
250 </property> 246 </property>
251 </spacer> 247 </widget>
252 <widget row="6" column="0" rowspan="1" colspan="2" > 248 <widget>
253 <class>QLayoutWidget</class> 249 <class>QLayoutWidget</class>
254 <property stdset="1"> 250 <property stdset="1">
255 <name>name</name> 251 <name>name</name>
256 <cstring>Layout2</cstring> 252 <cstring>Layout2</cstring>
257 </property> 253 </property>
258 <hbox> 254 <hbox>
259 <property stdset="1"> 255 <property stdset="1">
260 <name>margin</name> 256 <name>margin</name>
261 <number>0</number> 257 <number>0</number>
262 </property> 258 </property>
263 <property stdset="1"> 259 <property stdset="1">
264 <name>spacing</name> 260 <name>spacing</name>
265 <number>6</number> 261 <number>6</number>
266 </property> 262 </property>
267 <spacer> 263 <spacer>
268 <property> 264 <property>
269 <name>name</name> 265 <name>name</name>
270 <cstring>Spacer10</cstring> 266 <cstring>Spacer10</cstring>
271 </property> 267 </property>
272 <property stdset="1"> 268 <property stdset="1">
273 <name>orientation</name> 269 <name>orientation</name>
274 <enum>Horizontal</enum> 270 <enum>Horizontal</enum>
275 </property> 271 </property>
276 <property stdset="1"> 272 <property stdset="1">
277 <name>sizeType</name> 273 <name>sizeType</name>
278 <enum>Expanding</enum> 274 <enum>Expanding</enum>
279 </property> 275 </property>
280 <property> 276 <property>
281 <name>sizeHint</name> 277 <name>sizeHint</name>
282 <size> 278 <size>
283 <width>20</width> 279 <width>20</width>
284 <height>20</height> 280 <height>20</height>
285 </size> 281 </size>
286 </property> 282 </property>
287 </spacer> 283 </spacer>
288 <widget> 284 <widget>
289 <class>QPushButton</class> 285 <class>QPushButton</class>
290 <property stdset="1"> 286 <property stdset="1">
291 <name>name</name> 287 <name>name</name>
292 <cstring>advancedButton</cstring> 288 <cstring>advancedButton</cstring>
293 </property> 289 </property>
294 <property stdset="1"> 290 <property stdset="1">
295 <name>text</name> 291 <name>text</name>
296 <string>&amp;View Advanced Information</string> 292 <string>&amp;View Advanced Information</string>
297 </property> 293 </property>
298 </widget> 294 </widget>
299 </hbox> 295 </hbox>
300 </widget> 296 </widget>
301 <widget row="5" column="0" rowspan="1" colspan="2" > 297 <spacer>
302 <class>Line</class> 298 <property>
303 <property stdset="1">
304 <name>name</name> 299 <name>name</name>
305 <cstring>Line5</cstring> 300 <cstring>Spacer18</cstring>
306 </property> 301 </property>
307 <property stdset="1"> 302 <property stdset="1">
308 <name>orientation</name> 303 <name>orientation</name>
309 <enum>Horizontal</enum> 304 <enum>Vertical</enum>
305 </property>
306 <property stdset="1">
307 <name>sizeType</name>
308 <enum>Expanding</enum>
309 </property>
310 <property>
311 <name>sizeHint</name>
312 <size>
313 <width>20</width>
314 <height>20</height>
315 </size>
316 </property>
317 </spacer>
318 <widget>
319 <class>QCheckBox</class>
320 <property stdset="1">
321 <name>name</name>
322 <cstring>CheckBoxSilent</cstring>
323 </property>
324 <property stdset="1">
325 <name>text</name>
326 <string>be &amp;silent</string>
310 </property> 327 </property>
311 </widget> 328 </widget>
312 </grid> 329 </vbox>
313</widget> 330</widget>
314<tabstops> 331<tabstops>
315 <tabstop>startButton</tabstop> 332 <tabstop>startButton</tabstop>
316 <tabstop>stopButton</tabstop> 333 <tabstop>stopButton</tabstop>
317 <tabstop>refreshButton</tabstop> 334 <tabstop>refreshButton</tabstop>
318 <tabstop>restartButton</tabstop> 335 <tabstop>restartButton</tabstop>
319 <tabstop>advancedButton</tabstop> 336 <tabstop>advancedButton</tabstop>
320</tabstops> 337</tabstops>
321</UI> 338</UI>
diff --git a/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp b/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp
index e00dcce..37c3a91 100644
--- a/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp
+++ b/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp
@@ -1,79 +1,93 @@
1#include "interfaceinformationimp.h" 1#include "interfaceinformationimp.h"
2#include "interfaceadvanced.h" 2#include "interfaceadvanced.h"
3 3
4#include <qcheckbox.h>
4#include <qpushbutton.h> 5#include <qpushbutton.h>
5#include <qlabel.h> 6#include <qlabel.h>
6#include <qgroupbox.h> 7#include <qgroupbox.h>
7#include <qmessagebox.h> 8#include <qmessagebox.h>
8 9
9#ifdef QWS 10#include <qpe/config.h>
11
12#ifdef QWS
10#else 13#else
11 #define showMaximized show 14 #define showMaximized show
12#endif 15#endif
13 16
14/** 17/**
15 * Constructor for the InterfaceInformationImp class. This class pretty much 18 * Constructor for the InterfaceInformationImp class. This class pretty much
16 * just display's information about the interface that is passed to it. 19 * just display's information about the interface that is passed to it.
17 */ 20 */
18InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f), interface(i){ 21InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f), interface(i){
19 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *))); 22 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
20 connect(i, SIGNAL(updateMessage(const QString &)), this, SLOT(showMessage(const QString &))); 23 connect(i, SIGNAL(updateMessage(const QString &)), this, SLOT(showMessage(const QString &)));
21 updateInterface(interface); 24 updateInterface(interface);
22 connect(startButton, SIGNAL(clicked()), interface, SLOT(start())); 25 connect(startButton, SIGNAL(clicked()), interface, SLOT(start()));
23 connect(stopButton, SIGNAL(clicked()), interface, SLOT(stop())); 26 connect(stopButton, SIGNAL(clicked()), interface, SLOT(stop()));
24 connect(restartButton, SIGNAL(clicked()), interface, SLOT(restart())); 27 connect(restartButton, SIGNAL(clicked()), interface, SLOT(restart()));
25 connect(refreshButton, SIGNAL(clicked()), interface, SLOT(refresh())); 28 connect(refreshButton, SIGNAL(clicked()), interface, SLOT(refresh()));
26 connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced())); 29 connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced()));
30 Config cfg("networksettings", Config::User);
31 cfg.setGroup("interface");
32 CheckBoxSilent->setChecked( cfg.readBoolEntry("silent", false) );
33}
34
35InterfaceInformationImp::~InterfaceInformationImp()
36{
37 Config cfg("networksettings", Config::User);
38 cfg.setGroup("interface");
39 cfg.writeEntry("silent", CheckBoxSilent->isChecked() );
27} 40}
28 41
29/** 42/**
30 * Update the interface information and buttons. 43 * Update the interface information and buttons.
31 * @param Intarface *i the interface to update (should be the one we already 44 * @param Intarface *i the interface to update (should be the one we already
32 * know about). 45 * know about).
33 */ 46 */
34void InterfaceInformationImp::updateInterface(Interface *){ 47void InterfaceInformationImp::updateInterface(Interface *){
35 if(interface->getStatus()){ 48 if(interface->getStatus()){
36 startButton->setEnabled(false); 49 startButton->setEnabled(false);
37 stopButton->setEnabled(true); 50 stopButton->setEnabled(true);
38 restartButton->setEnabled(true); 51 restartButton->setEnabled(true);
39 } 52 }
40 else{ 53 else{
41 startButton->setEnabled(true); 54 startButton->setEnabled(true);
42 stopButton->setEnabled(false); 55 stopButton->setEnabled(false);
43 restartButton->setEnabled(false); 56 restartButton->setEnabled(false);
44 } 57 }
45 macAddressLabel->setText(interface->getMacAddress()); 58 macAddressLabel->setText(interface->getMacAddress());
46 ipAddressLabel->setText(interface->getIp()); 59 ipAddressLabel->setText(interface->getIp());
47 subnetMaskLabel->setText(interface->getSubnetMask()); 60 subnetMaskLabel->setText(interface->getSubnetMask());
48 broadcastLabel->setText(interface->getBroadcast()); 61 broadcastLabel->setText(interface->getBroadcast());
49} 62}
50 63
51/** 64/**
52 * Create the advanced widget. Fill it with the current interface's information. 65 * Create the advanced widget. Fill it with the current interface's information.
53 * Display it. 66 * Display it.
54 */ 67 */
55void InterfaceInformationImp::advanced(){ 68void InterfaceInformationImp::advanced(){
56 InterfaceAdvanced *a = new InterfaceAdvanced(this, "InterfaceAdvanced", Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog); 69 InterfaceAdvanced *a = new InterfaceAdvanced(this, "InterfaceAdvanced", Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog);
57 a->interfaceName->setText(interface->getInterfaceName()); 70 a->interfaceName->setText(interface->getInterfaceName());
58 a->macAddressLabel->setText(interface->getMacAddress()); 71 a->macAddressLabel->setText(interface->getMacAddress());
59 a->ipAddressLabel->setText(interface->getIp()); 72 a->ipAddressLabel->setText(interface->getIp());
60 a->subnetMaskLabel->setText(interface->getSubnetMask()); 73 a->subnetMaskLabel->setText(interface->getSubnetMask());
61 a->broadcastLabel->setText(interface->getBroadcast()); 74 a->broadcastLabel->setText(interface->getBroadcast());
62 a->dhcpServerLabel->setText(interface->getDhcpServerIp()); 75 a->dhcpServerLabel->setText(interface->getDhcpServerIp());
63 a->leaseObtainedLabel->setText(interface->getLeaseObtained()); 76 a->leaseObtainedLabel->setText(interface->getLeaseObtained());
64 a->leaseExpiresLabel->setText(interface->getLeaseExpires()); 77 a->leaseExpiresLabel->setText(interface->getLeaseExpires());
65 a->dhcpInformation->setEnabled(interface->isDhcp()); 78 a->dhcpInformation->setEnabled(interface->isDhcp());
66 a->showMaximized(); 79 a->showMaximized();
67} 80}
68 81
69/** 82/**
70 * Messages from the interface if start/stop went as planned. 83 * Messages from the interface if start/stop went as planned.
71 * Purly for user feedback. 84 * Purly for user feedback.
72 * @param message the message to display. 85 * @param message the message to display.
73 */ 86 */
74void InterfaceInformationImp::showMessage(const QString &message){ 87void InterfaceInformationImp::showMessage(const QString &message){
88 if (CheckBoxSilent->isChecked()) return;
75 QMessageBox::information(this, "Message", message, QMessageBox::Ok); 89 QMessageBox::information(this, "Message", message, QMessageBox::Ok);
76} 90}
77 91
78// infoimp.cpp 92// infoimp.cpp
79 93
diff --git a/noncore/settings/networksettings/interfaces/interfaceinformationimp.h b/noncore/settings/networksettings/interfaces/interfaceinformationimp.h
index 65cdfe0..9c93d1d 100644
--- a/noncore/settings/networksettings/interfaces/interfaceinformationimp.h
+++ b/noncore/settings/networksettings/interfaces/interfaceinformationimp.h
@@ -1,28 +1,28 @@
1#ifndef INTERFACEINFORMATIONIMP_H 1#ifndef INTERFACEINFORMATIONIMP_H
2#define INTERFACEINFORMATIONIMP_H 2#define INTERFACEINFORMATIONIMP_H
3 3
4#include "interfaceinformation.h" 4#include "interfaceinformation.h"
5#include "interface.h" 5#include "interface.h"
6 6
7class InterfaceInformationImp : public InterfaceInformation { 7class InterfaceInformationImp : public InterfaceInformation {
8 8
9Q_OBJECT 9Q_OBJECT
10 10
11public: 11public:
12 InterfaceInformationImp(QWidget *parent=0, const char *name=0, Interface *i=0, WFlags f=0); 12 InterfaceInformationImp(QWidget *parent=0, const char *name=0, Interface *i=0, WFlags f=0);
13 ~InterfaceInformationImp(){}; 13 ~InterfaceInformationImp();
14 14
15private slots: 15private slots:
16 void advanced(); 16 void advanced();
17 void updateInterface(Interface *i); 17 void updateInterface(Interface *i);
18 void showMessage(const QString &message); 18 void showMessage(const QString &message);
19 19
20private: 20private:
21 Interface *interface; 21 Interface *interface;
22 22
23}; 23};
24 24
25#endif 25#endif
26 26
27// addserviceimp.h 27// addserviceimp.h
28 28
diff --git a/noncore/settings/networksettings/interfaces/interfaces.cpp b/noncore/settings/networksettings/interfaces/interfaces.cpp
index 71d0cf5..436e449 100644
--- a/noncore/settings/networksettings/interfaces/interfaces.cpp
+++ b/noncore/settings/networksettings/interfaces/interfaces.cpp
@@ -1,678 +1,712 @@
1#include "interfaces.h" 1#include "interfaces.h"
2 2
3#include <qcheckbox.h>
3#include <qfile.h> 4#include <qfile.h>
4#include <qtextstream.h> 5#include <qtextstream.h>
5#include <qregexp.h> 6#include <qregexp.h>
6 7
7// The three stanza's 8// The three stanza's
8#define AUTO "auto" 9#define AUTO "auto"
9#define IFACE "iface" 10#define IFACE "iface"
10#define MAPPING "mapping" 11#define MAPPING "mapping"
11 12
12/** 13/**
13 * Constructor. Reads in the interfaces file and then split the file up by 14 * Constructor. Reads in the interfaces file and then split the file up by
14 * the \n for interfaces variable. 15 * the \n for interfaces variable.
15 * @param useInterfacesFile if an interface file other then the default is 16 * @param useInterfacesFile if an interface file other then the default is
16 * desired to be used it should be passed in. 17 * desired to be used it should be passed in.
17 */ 18 */
18Interfaces::Interfaces(QString useInterfacesFile){ 19Interfaces::Interfaces(QString useInterfacesFile){
19 acceptedFamily.append(INTERFACES_FAMILY_INET); 20 acceptedFamily.append(INTERFACES_FAMILY_INET);
20 acceptedFamily.append(INTERFACES_FAMILY_IPX); 21 acceptedFamily.append(INTERFACES_FAMILY_IPX);
21 acceptedFamily.append(INTERFACES_FAMILY_INET6); 22 acceptedFamily.append(INTERFACES_FAMILY_INET6);
22 23
23 interfacesFile = useInterfacesFile; 24 interfacesFile = useInterfacesFile;
24 QFile file(interfacesFile); 25 QFile file(interfacesFile);
25 if (!file.open(IO_ReadOnly)){ 26 if (!file.open(IO_ReadOnly)){
26 qDebug("Interfaces: Can't open file: %s for reading.", interfacesFile.latin1() ); 27 qDebug("Interfaces: Can't open file: %s for reading.", interfacesFile.latin1() );
27 currentIface = interfaces.end(); 28 currentIface = interfaces.end();
28 currentMapping = interfaces.end(); 29 currentMapping = interfaces.end();
29 return; 30 return;
30 } 31 }
31 QTextStream stream( &file ); 32 QTextStream stream( &file );
32 QString line; 33 QString line;
33 while ( !stream.eof() ) { 34 while ( !stream.eof() ) {
34 line += stream.readLine(); 35 line += stream.readLine();
35 line += "\n"; 36 line += "\n";
36 } 37 }
37 file.close(); 38 file.close();
38 interfaces = QStringList::split("\n", line, true); 39 interfaces = QStringList::split("\n", line, true);
39 40
40 currentIface = interfaces.end(); 41 currentIface = interfaces.end();
41 currentMapping = interfaces.end(); 42 currentMapping = interfaces.end();
42} 43}
43 44
44 45
45/** 46/**
46 * Get a list of all interfaces in the interface file. Usefull for 47 * Get a list of all interfaces in the interface file. Usefull for
47 * hardware that is not currently connected such as an 802.11b card 48 * hardware that is not currently connected such as an 802.11b card
48 * not plugged in, but configured for when it is plugged in. 49 * not plugged in, but configured for when it is plugged in.
49 * @return Return string list of interfaces. 50 * @return Return string list of interfaces.
50 **/ 51 **/
51QStringList Interfaces::getInterfaceList(){ 52QStringList Interfaces::getInterfaceList(){
52 QStringList list; 53 QStringList list;
53 for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) { 54 for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) {
54 QString line = (*it).simplifyWhiteSpace(); 55 QString line = (*it).simplifyWhiteSpace();
55 if(line.contains(IFACE) && line.at(0) != '#'){ 56 if(line.contains(IFACE) && line.at(0) != '#'){
56 line = line.mid(QString(IFACE).length() +1, line.length()); 57 line = line.mid(QString(IFACE).length() +1, line.length());
57 line = line.simplifyWhiteSpace(); 58 line = line.simplifyWhiteSpace();
58 int findSpace = line.find(" "); 59 int findSpace = line.find(" ");
59 if( findSpace >= 0){ 60 if( findSpace >= 0){
60 line = line.mid(0, findSpace); 61 line = line.mid(0, findSpace);
61 list.append(line); 62 list.append(line);
62 } 63 }
63 } 64 }
64 } 65 }
65 return list; 66 return list;
66} 67}
67 68
68/** 69/**
69 * Find out if interface is in an "auto" group or not. 70 * Find out if interface is in an "auto" group or not.
70 * Report any duplicates such as eth0 being in two differnt auto's 71 * Report any duplicates such as eth0 being in two differnt auto's
71 * @param interface interface to check to see if it is on or not. 72 * @param interface interface to check to see if it is on or not.
72 * @return true is interface is in auto 73 * @return true is interface is in auto
73 */ 74 */
74bool Interfaces::isAuto(const QString &interface) const { 75bool Interfaces::isAuto(const QString &interface) const {
75 QStringList autoLines = interfaces.grep(QRegExp(AUTO)); 76 QStringList autoLines = interfaces.grep(QRegExp(AUTO));
76 QStringList awi = autoLines.grep(QRegExp(interface)); 77 QStringList awi = autoLines.grep(QRegExp(interface));
77 if(awi.count() > 1) 78 if(awi.count() > 1)
78 qDebug(QString("Interfaces: Found more then auto group with interface: %1.").arg(interface).latin1()); 79 qDebug(QString("Interfaces: Found more then auto group with interface: %1.").arg(interface).latin1());
79 return awi.count() > 0; 80 return awi.count() > 0;
80} 81}
81 82
82/** 83/**
83 * Attempt to set the auto option for interface to setAuto. 84 * Attempt to set the auto option for interface to setAuto.
84 * @param interface the interface to set 85 * @param interface the interface to set
85 * @param setAuto the value to set interface to. 86 * @param setAuto the value to set interface to.
86 * @return false if already set to setAuto. 87 * @return false if already set to setAuto.
87 * */ 88 * */
88bool Interfaces::setAuto(const QString &interface, bool setAuto){ 89bool Interfaces::setAuto(const QString &interface, bool setAuto){
89 // Don't need to set it if it is already set. 90 // Don't need to set it if it is already set.
90 if(isAuto(interface) == setAuto) 91 if(isAuto(interface) == setAuto)
91 return false; 92 return false;
92 93
93 bool changed = false; 94 bool changed = false;
94 for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) { 95 for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) {
95 if((*it).contains(AUTO)){ 96 if((*it).contains(AUTO)){
96 //We know that they are not in any group so let add to this auto. 97 //We know that they are not in any group so let add to this auto.
97 if(setAuto){ 98 if(setAuto){
98 (*it) = (*it) += " " + interface; 99 (*it) = (*it) += " " + interface;
99 // Don't care to have such thins as: auto eth0 lo usb0 100 // Don't care to have such thins as: auto eth0 lo usb0
100 (*it) = (*it).simplifyWhiteSpace(); 101 (*it) = (*it).simplifyWhiteSpace();
101 changed = true; 102 changed = true;
102 break; 103 break;
103 } 104 }
104 // else see if we need to remove from this one 105 // else see if we need to remove from this one
105 else{ 106 else{
106 if((*it).contains(interface)){ 107 if((*it).contains(interface)){
107 (*it) = (*it).replace(QRegExp(interface), ""); 108 (*it) = (*it).replace(QRegExp(interface), "");
108 // if AUTO is the only thing left clear the line 109 // if AUTO is the only thing left clear the line
109 if(((*it).simplifyWhiteSpace()).replace(QRegExp(" "),"") == AUTO) 110 if(((*it).simplifyWhiteSpace()).replace(QRegExp(" "),"") == AUTO)
110 (*it) = ""; 111 (*it) = "";
111 changed = true; 112 changed = true;
112 // Don't break because we want to make sure we remove all cases. 113 // Don't break because we want to make sure we remove all cases.
113 } 114 }
114 } 115 }
115 } 116 }
116 } 117 }
117 // In the case where there is no AUTO field add one. 118 // In the case where there is no AUTO field add one.
118 if(!changed && setAuto) 119 if(!changed && setAuto)
119 interfaces.append(QString(AUTO" %1").arg(interface)); 120 interfaces.append(QString(AUTO" %1").arg(interface));
120 return true; 121 return true;
121} 122}
122 123
123/** 124/**
124 * Set the current interface to interface. This needs to be done before you 125 * Set the current interface to interface. This needs to be done before you
125 * can call getFamily(), getMethod, and get/setOption(). 126 * can call getFamily(), getMethod, and get/setOption().
126 * @param interface the name of the interface to set. All whitespace is 127 * @param interface the name of the interface to set. All whitespace is
127 * removed from the interface name. 128 * removed from the interface name.
128 * @return bool true if it is successfull. 129 * @return bool true if it is successfull.
129 */ 130 */
130bool Interfaces::setInterface(QString interface){ 131bool Interfaces::setInterface(QString interface){
131 interface = interface.simplifyWhiteSpace(); 132 interface = interface.simplifyWhiteSpace();
132 interface = interface.replace(QRegExp(" "), ""); 133 interface = interface.replace(QRegExp(" "), "");
133 return setStanza(IFACE, interface, currentIface); 134 return setStanza(IFACE, interface, currentIface);
134} 135}
135 136
136/** 137/**
137 * A quick helper funtion to see if the current interface is set. 138 * A quick helper funtion to see if the current interface is set.
138 * @return bool true if set, false otherwise. 139 * @return bool true if set, false otherwise.
139 */ 140 */
140bool Interfaces::isInterfaceSet() const { 141bool Interfaces::isInterfaceSet() const {
141 return (interfaces.end() != currentIface); 142 return (interfaces.end() != currentIface);
142} 143}
143 144
144/** 145/**
145 * Add a new interface of with the settings - family and method 146 * Add a new interface of with the settings - family and method
146 * @param interface the name of the interface to set. All whitespace is 147 * @param interface the name of the interface to set. All whitespace is
147 * removed from the interface name. 148 * removed from the interface name.
148 * @param family the family of this interface inet or inet, ipx or inet6 149 * @param family the family of this interface inet or inet, ipx or inet6
149 * Must of one of the families defined in interfaces.h 150 * Must of one of the families defined in interfaces.h
150 * @param method for the family. see interfaces man page for family methods. 151 * @param method for the family. see interfaces man page for family methods.
151 * @return true if successfull. 152 * @return true if successfull.
152 */ 153 */
153bool Interfaces::addInterface(const QString &interface, const QString &family, const QString &method){ 154bool Interfaces::addInterface(const QString &interface, const QString &family, const QString &method){
155 qDebug("Interfaces::addInterface(%s)",interface.latin1());
154 if(0 == acceptedFamily.contains(family)) 156 if(0 == acceptedFamily.contains(family))
155 return false; 157 return false;
156 QString newInterface = interface.simplifyWhiteSpace(); 158 QString newInterface = interface.simplifyWhiteSpace();
157 newInterface = newInterface.replace(QRegExp(" "), ""); 159 newInterface = newInterface.replace(QRegExp(" "), "");
158 interfaces.append(""); 160 interfaces.append("");
159 interfaces.append(QString(IFACE " %1 %2 %3").arg(newInterface).arg(family).arg(method)); 161 interfaces.append(QString(IFACE " %1 %2 %3").arg(newInterface).arg(family).arg(method));
160 return true; 162 return true;
161} 163}
162 164
163/** 165/**
164 * Copies interface with name interface to name newInterface 166 * Copies interface with name interface to name newInterface
165 * @param newInterface name of the new interface. 167 * @param newInterface name of the new interface.
166 * @return bool true if successfull 168 * @return bool true if successfull
167 */ 169 */
168bool Interfaces::copyInterface(const QString &interface, const QString &newInterface){ 170bool Interfaces::copyInterface(const QString &interface, const QString &newInterface){
171 qDebug("copy interface %s to %s", interface.latin1(), newInterface.latin1());
169 if(!setInterface(interface)) 172 if(!setInterface(interface))
170 return false; 173 return false;
171 174
172 // Store the old interface and bump past the stanza line. 175 // Store the old interface and bump past the stanza line.
173 QStringList::Iterator it = currentIface; 176 QStringList::Iterator it = currentIface;
174 it++; 177 it++;
175 178
176 // Add the new interface 179 // Add the new interface
177 bool error; 180 bool error;
178 addInterface(newInterface, getInterfaceFamily(error), getInterfaceMethod(error)); 181 addInterface(newInterface, getInterfaceFamily(error), getInterfaceMethod(error));
179 if(!setInterface(newInterface)) 182 if(!setInterface(newInterface))
180 return false; 183 return false;
181 184
182 QStringList::Iterator newIface = currentIface; 185 QStringList::Iterator newIface = currentIface;
183 newIface++; 186 newIface++;
184 187
185 // Copy all of the lines 188 // Copy all of the lines
186 for ( ; it != interfaces.end(); ++it ){ 189 for ( ; it != interfaces.end(); ++it ){
187 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO))) 190 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)))
188 break; 191 break;
189 newIface = interfaces.insert(newIface, *it); 192 newIface = interfaces.insert(newIface, *it);
190 } 193 }
191 194
192 return true; 195 return true;
193} 196}
194 197
195/** 198/**
196 * Remove the currently selected interface and all of its options. 199 * Remove the currently selected interface and all of its options.
197 * @return bool if successfull or not. 200 * @return bool if successfull or not.
198 */ 201 */
199bool Interfaces::removeInterface(){ 202bool Interfaces::removeInterface(){
200 return removeStanza(currentIface); 203 return removeStanza(currentIface);
201} 204}
202 205
203/** 206/**
204 * Gets the hardware name of the interface that is currently selected. 207 * Gets the hardware name of the interface that is currently selected.
205 * @return QString name of the hardware interface (eth0, usb2, wlan1...). 208 * @return QString name of the hardware interface (eth0, usb2, wlan1...).
206 * @param error set to true if any error occurs, false otherwise. 209 * @param error set to true if any error occurs, false otherwise.
207 */ 210 */
208QString Interfaces::getInterfaceName(bool &error){ 211QString Interfaces::getInterfaceName(bool &error){
209 if(currentIface == interfaces.end()){ 212 if(currentIface == interfaces.end()){
210 error = true; 213 error = true;
211 return QString(); 214 return QString();
212 } 215 }
213 QString line = (*currentIface); 216 QString line = (*currentIface);
214 line = line.mid(QString(IFACE).length() +1, line.length()); 217 line = line.mid(QString(IFACE).length() +1, line.length());
215 line = line.simplifyWhiteSpace(); 218 line = line.simplifyWhiteSpace();
216 int findSpace = line.find(" "); 219 int findSpace = line.find(" ");
217 if( findSpace < 0){ 220 if( findSpace < 0){
218 error = true; 221 error = true;
219 return QString(); 222 return QString();
220 } 223 }
221 error = false; 224 error = false;
222 return line.mid(0, findSpace); 225 return line.mid(0, findSpace);
223} 226}
224 227
225/** 228/**
226 * Gets the family name of the interface that is currently selected. 229 * Gets the family name of the interface that is currently selected.
227 * @return QString name of the family (inet, inet6, ipx). 230 * @return QString name of the family (inet, inet6, ipx).
228 * @param error set to true if any error occurs, false otherwise. 231 * @param error set to true if any error occurs, false otherwise.
229 */ 232 */
230QString Interfaces::getInterfaceFamily(bool &error){ 233QString Interfaces::getInterfaceFamily(bool &error){
231 QString name = getInterfaceName(error); 234 QString name = getInterfaceName(error);
232 if(error) 235 if(error)
233 return QString(); 236 return QString();
234 QString line = (*currentIface); 237 QString line = (*currentIface);
235 line = line.mid(QString(IFACE).length() +1, line.length()); 238 line = line.mid(QString(IFACE).length() +1, line.length());
236 line = line.mid(name.length()+1, line.length()); 239 line = line.mid(name.length()+1, line.length());
237 line = line.simplifyWhiteSpace(); 240 line = line.simplifyWhiteSpace();
238 int findSpace = line.find(" "); 241 int findSpace = line.find(" ");
239 if( findSpace < 0){ 242 if( findSpace < 0){
240 error = true; 243 error = true;
241 return QString(); 244 return QString();
242 } 245 }
243 error = false; 246 error = false;
244 return line.mid(0, findSpace); 247 return line.mid(0, findSpace);
245} 248}
246 249
247/** 250/**
248 * Gets the method of the interface that is currently selected. 251 * Gets the method of the interface that is currently selected.
249 * @return QString name of the method such as staic or dhcp. 252 * @return QString name of the method such as staic or dhcp.
250 * See the man page of interfaces for possible methods depending on the family. 253 * See the man page of interfaces for possible methods depending on the family.
251 * @param error set to true if any error occurs, false otherwise. 254 * @param error set to true if any error occurs, false otherwise.
252 */ 255 */
253QString Interfaces::getInterfaceMethod(bool &error){ 256QString Interfaces::getInterfaceMethod(bool &error){
254 QString name = getInterfaceName(error); 257 QString name = getInterfaceName(error);
255 if(error) 258 if(error)
256 return QString(); 259 return QString();
257 QString family = getInterfaceFamily(error); 260 QString family = getInterfaceFamily(error);
258 if(error) 261 if(error)
259 return QString(); 262 return QString();
260 QString line = (*currentIface); 263 QString line = (*currentIface);
261 line = line.mid(QString(IFACE).length()+1, line.length()); 264 line = line.mid(QString(IFACE).length()+1, line.length());
262 line = line.mid(name.length()+1, line.length()); 265 line = line.mid(name.length()+1, line.length());
263 line = line.mid(family.length()+1, line.length()); 266 line = line.mid(family.length()+1, line.length());
264 line = line.simplifyWhiteSpace(); 267 line = line.simplifyWhiteSpace();
265 error = false; 268 error = false;
266 return line; 269 return line;
267} 270}
268 271
269/** 272/**
270 * Sets the interface name to newName. 273 * Sets the interface name to newName.
271 * @param newName the new name of the interface. All whitespace is removed. 274 * @param newName the new name of the interface. All whitespace is removed.
272 * @return bool true if successfull. 275 * @return bool true if successfull.
273 */ 276 */
274bool Interfaces::setInterfaceName(const QString &newName){ 277bool Interfaces::setInterfaceName(const QString &newName){
278 qDebug("setInterfaceName %s", newName.latin1());
275 if(currentIface == interfaces.end()) 279 if(currentIface == interfaces.end())
276 return false; 280 return false;
277 QString name = newName.simplifyWhiteSpace(); 281 QString name = newName.simplifyWhiteSpace();
278 name = name.replace(QRegExp(" "), ""); 282 name = name.replace(QRegExp(" "), "");
279 bool returnValue = false; 283 bool returnValue = false;
280 (*currentIface) = QString("iface %1 %2 %3").arg(name).arg(getInterfaceFamily(returnValue)).arg(getInterfaceMethod(returnValue)); 284 QString tmp = QString("iface %1 %2 %3").arg(name).arg(getInterfaceFamily(returnValue)).arg(getInterfaceMethod(returnValue));
285 qDebug("setting %s",tmp.latin1());
286
287 (*currentIface) = tmp;
281 return !returnValue; 288 return !returnValue;
282} 289}
283 290
284/** 291/**
285 * Sets the interface family to newName. 292 * Sets the interface family to newName.
286 * @param newName the new name of the interface. Must be one of the families 293 * @param newName the new name of the interface. Must be one of the families
287 * defined in the interfaces.h file. 294 * defined in the interfaces.h file.
288 * @return bool true if successfull. 295 * @return bool true if successfull.
289 */ 296 */
290bool Interfaces::setInterfaceFamily(const QString &newName){ 297bool Interfaces::setInterfaceFamily(const QString &newName){
291 if(currentIface == interfaces.end()) 298 if(currentIface == interfaces.end())
292 return false; 299 return false;
293 if(acceptedFamily.contains(newName)==0) 300 if(acceptedFamily.contains(newName)==0)
294 return false; 301 return false;
295 bool returnValue = false; 302 bool returnValue = false;
296 (*currentIface) = QString("iface %1 %2 %3").arg(getInterfaceName(returnValue)).arg(newName).arg(getInterfaceMethod(returnValue)); 303 (*currentIface) = QString("iface %1 %2 %3").arg(getInterfaceName(returnValue)).arg(newName).arg(getInterfaceMethod(returnValue));
297 return !returnValue; 304 return !returnValue;
298} 305}
299 306
300/** 307/**
301 * Sets the interface method to newName 308 * Sets the interface method to newName
302 * @param newName the new name of the interface 309 * @param newName the new name of the interface
303 * @return bool true if successfull. 310 * @return bool true if successfull.
304 */ 311 */
305bool Interfaces::setInterfaceMethod(const QString &newName){ 312bool Interfaces::setInterfaceMethod(const QString &newName){
306 if(currentIface == interfaces.end()) 313 if(currentIface == interfaces.end())
307 return false; 314 return false;
308 bool returnValue = false; 315 bool returnValue = false;
309 (*currentIface) = QString("iface %1 %2 %3").arg(getInterfaceName(returnValue)).arg(getInterfaceFamily(returnValue)).arg(newName); 316 (*currentIface) = QString("iface %1 %2 %3").arg(getInterfaceName(returnValue)).arg(getInterfaceFamily(returnValue)).arg(newName);
310 return !returnValue; 317 return !returnValue;
311} 318}
312 319
313/** 320/**
314 * Get a value for an option in the currently selected interface. For example 321 * Get a value for an option in the currently selected interface. For example
315 * calling getInterfaceOption("address") on the following stanza would 322 * calling getInterfaceOption("address") on the following stanza would
316 * return 192.168.1.1. 323 * return 192.168.1.1.
317 * iface eth0 static 324 * iface eth0 static
318 * address 192.168.1.1 325 * address 192.168.1.1
319 * @param option the options to get the value. 326 * @param option the options to get the value.
320 * @param error set to true if any error occurs, false otherwise. 327 * @param error set to true if any error occurs, false otherwise.
321 * @return QString the options value. QString::null if error == true 328 * @return QString the options value. QString::null if error == true
322 */ 329 */
323QString Interfaces::getInterfaceOption(const QString &option, bool &error){ 330QString Interfaces::getInterfaceOption(const QString &option, bool &error){
324 return getOption(currentIface, option, error); 331 return getOption(currentIface, option, error);
325} 332}
326 333
327/** 334/**
328 * Set a value for an option in the currently selected interface. If option 335 * Set a value for an option in the currently selected interface. If option
329 * doesn't exist then it is added along with the value. 336 * doesn't exist then it is added along with the value.
337 * If value isEmpty() then we will remove the option
338 *
330 * @param option the options to set the value. 339 * @param option the options to set the value.
331 * @param value the value that option should be set to. 340 * @param value the value that option should be set to.
332 * @param error set to true if any error occurs, false otherwise. 341 * @param error set to true if any error occurs, false otherwise.
333 * @return QString the options value. QString::null if error == true 342 * @return QString the options value. QString::null if error == true
334 */ 343 */
335bool Interfaces::setInterfaceOption(const QString &option, const QString &value){ 344bool Interfaces::setInterfaceOption(const QString &option, const QString &value){
336 return setOption(currentIface, option, value); 345 if( value.stripWhiteSpace().isEmpty() )
346 return removeInterfaceOption( option );
347
348 qDebug("iface >%s< option >%s< value >%s<", (*currentIface).latin1(), option.latin1(),value.latin1());
349 return setOption(currentIface, option, value);
337} 350}
338 351
339/** 352/**
340 * Removes a value for an option in the currently selected interface. 353 * Removes a value for an option in the currently selected interface.
341 * @param option the options to set the value. 354 * @param option the options to set the value.
342 * @param error set to true if any error occurs, false otherwise. 355 * @param error set to true if any error occurs, false otherwise.
343 * @return QString the options value. QString::null if error == true 356 * @return QString the options value. QString::null if error == true
344 */ 357 */
345bool Interfaces::removeInterfaceOption(const QString &option){ 358bool Interfaces::removeInterfaceOption(const QString &option){
346 return removeOption(currentIface, option); 359 return removeOption(currentIface, option);
347} 360}
348 361
349/** 362/**
350 * Removes a value for an option in the currently selected interface. 363 * Removes a value for an option in the currently selected interface.
351 * @param option the options to set the value. 364 * @param option the options to set the value.
352 * @param value the value that option should be set to. 365 * @param value the value that option should be set to.
353 * @param error set to true if any error occurs, false otherwise. 366 * @param error set to true if any error occurs, false otherwise.
354 * @return QString the options value. QString::null if error == true 367 * @return QString the options value. QString::null if error == true
355 */ 368 */
356bool Interfaces::removeInterfaceOption(const QString &option, const QString &value){ 369bool Interfaces::removeInterfaceOption(const QString &option, const QString &value){
357 return removeOption(currentIface, option, value); 370 return removeOption(currentIface, option, value);
358} 371}
359 372
360/** 373/**
361 * Removes all of the options from the currently selected interface. 374 * Removes all of the options from the currently selected interface.
362 * @return bool error if if successfull 375 * @return bool error if if successfull
363 */ 376 */
364bool Interfaces::removeAllInterfaceOptions(){ 377bool Interfaces::removeAllInterfaceOptions(){
365 return removeAllOptions(currentIface); 378 return removeAllOptions(currentIface);
366} 379}
367 380
368/** 381/**
369 * Set the current map to interface's map. This needs to be done before you 382 * Set the current map to interface's map. This needs to be done before you
370 * can call addMapping(), set/getMap(), and get/setScript(). 383 * can call addMapping(), set/getMap(), and get/setScript().
371 * @param interface the name of the interface to set. All whitespace is 384 * @param interface the name of the interface to set. All whitespace is
372 * removed from the interface name. 385 * removed from the interface name.
373 * @return bool true if it is successfull. 386 * @return bool true if it is successfull.
374 */ 387 */
375bool Interfaces::setMapping(const QString &interface){ 388bool Interfaces::setMapping(const QString &interface){
376 QString interfaceName = interface.simplifyWhiteSpace(); 389 QString interfaceName = interface.simplifyWhiteSpace();
377 interfaceName = interfaceName.replace(QRegExp(" "), ""); 390 interfaceName = interfaceName.replace(QRegExp(" "), "");
378 return setStanza(MAPPING, interfaceName, currentMapping); 391 return setStanza(MAPPING, interfaceName, currentMapping);
379} 392}
380 393
381/** 394/**
382 * Adds a new Mapping to the interfaces file with interfaces. 395 * Adds a new Mapping to the interfaces file with interfaces.
383 * @param interface the name(s) of the interfaces to set to this mapping 396 * @param interface the name(s) of the interfaces to set to this mapping
384 */ 397 */
385void Interfaces::addMapping(const QString &option){ 398void Interfaces::addMapping(const QString &option){
386 interfaces.append(""); 399 interfaces.append("");
387 interfaces.append(QString(MAPPING " %1").arg(option)); 400 interfaces.append(QString(MAPPING " %1").arg(option));
388} 401}
389 402
390/** 403/**
391 * Remove the currently selected map and all of its options. 404 * Remove the currently selected map and all of its options.
392 * @return bool if successfull or not. 405 * @return bool if successfull or not.
393 */ 406 */
394bool Interfaces::removeMapping(){ 407bool Interfaces::removeMapping(){
395 return removeStanza(currentMapping); 408 return removeStanza(currentMapping);
396} 409}
397 410
398/** 411/**
399 * Set a map option within a mapping. 412 * Set a map option within a mapping.
400 * @param map map to use 413 * @param map map to use
401 * @param value value to go with map 414 * @param value value to go with map
402 * @return bool true if it is successfull. 415 * @return bool true if it is successfull.
403 */ 416 */
404bool Interfaces::setMap(const QString &map, const QString &value){ 417bool Interfaces::setMap(const QString &map, const QString &value){
405 return setOption(currentMapping, map, value); 418 return setOption(currentMapping, map, value);
406} 419}
407 420
408/** 421/**
409 * Removes a map option within a mapping. 422 * Removes a map option within a mapping.
410 * @param map map to use 423 * @param map map to use
411 * @param value value to go with map 424 * @param value value to go with map
412 * @return bool true if it is successfull. 425 * @return bool true if it is successfull.
413 */ 426 */
414bool Interfaces::removeMap(const QString &map, const QString &value){ 427bool Interfaces::removeMap(const QString &map, const QString &value){
415 return removeOption(currentMapping, map, value); 428 return removeOption(currentMapping, map, value);
416} 429}
417 430
418/** 431/**
419 * Get a map value within a mapping. 432 * Get a map value within a mapping.
420 * @param map map to get value of 433 * @param map map to get value of
421 * @param bool true if it is successfull. 434 * @param bool true if it is successfull.
422 * @return value that goes to the map 435 * @return value that goes to the map
423 */ 436 */
424QString Interfaces::getMap(const QString &map, bool &error){ 437QString Interfaces::getMap(const QString &map, bool &error){
425 return getOption(currentMapping, map, error); 438 return getOption(currentMapping, map, error);
426} 439}
427 440
428/** 441/**
429 * Sets a script value of the current mapping to argument. 442 * Sets a script value of the current mapping to argument.
430 * @param argument the script name. 443 * @param argument the script name.
431 * @return true if successfull. 444 * @return true if successfull.
432 */ 445 */
433bool Interfaces::setScript(const QString &argument){ 446bool Interfaces::setScript(const QString &argument){
434 return setOption(currentMapping, "script", argument); 447 return setOption(currentMapping, "script", argument);
435} 448}
436 449
437/** 450/**
438 * @param error true if could not retrieve the current script argument. 451 * @param error true if could not retrieve the current script argument.
439 * @return QString the argument of the script for the current mapping. 452 * @return QString the argument of the script for the current mapping.
440 */ 453 */
441QString Interfaces::getScript(bool &error){ 454QString Interfaces::getScript(bool &error){
442 return getOption(currentMapping, "script", error); 455 return getOption(currentMapping, "script", error);
443} 456}
444 457
445 458
446 459
447/** 460/**
448 * Helper function used to parse through the QStringList and put pointers in 461 * Helper function used to parse through the QStringList and put pointers in
449 * the correct place. 462 * the correct place.
450 * @param stanza The stanza (auto, iface, mapping) to look for. 463 * @param stanza The stanza (auto, iface, mapping) to look for.
451 * @param option string that must be in the stanza's main line. 464 * @param option string that must be in the stanza's main line.
452 * @param interator interator to place at location of stanza if successfull. 465 * @param interator interator to place at location of stanza if successfull.
453 * @return bool true if the stanza is found. 466 * @return bool true if the stanza is found.
454 */ 467 */
455bool Interfaces::setStanza(const QString &stanza, const QString &option, QStringList::Iterator &iterator){ 468bool Interfaces::setStanza(const QString &stanza, const QString &option, QStringList::Iterator &iterator){
456 bool found = false; 469 bool found = false;
457 iterator = interfaces.end(); 470 iterator = interfaces.end();
458 for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) { 471 for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) {
459 QString line = (*it).simplifyWhiteSpace(); 472 QString line = (*it).simplifyWhiteSpace();
460 if(line.contains(stanza) && line.contains(option) && line.at(0) != '#'){ 473 if(line.contains(stanza) && line.contains(option) && line.at(0) != '#'){
461 uint point = line.find(option); 474 uint point = line.find(option);
462 bool valid = true; 475 bool valid = true;
463 if(point > 0){ 476 if(point > 0){
464 // There are more chars in the line. check +1 477 // There are more chars in the line. check +1
465 if(line.at(point-1) != ' ') 478 if(line.at(point-1) != ' ')
466 valid = false; 479 valid = false;
467 } 480 }
468 point += option.length(); 481 point += option.length();
469 if(point < line.length()-1){ 482 if(point < line.length()-1){
470 // There are more chars in the line. check -1 483 // There are more chars in the line. check -1
471 if(line.at(point) != ' ') 484 if(line.at(point) != ' ')
472 valid = false; 485 valid = false;
473 } 486 }
474 if(valid){ 487 if(valid){
475 if(found == true){ 488 if(found == true){
476 qDebug(QString("Interfaces: Found multiple stanza's for search: %1 %2").arg(stanza).arg(option).latin1()); 489 qDebug(QString("Interfaces: Found multiple stanza's for search: %1 %2").arg(stanza).arg(option).latin1());
477 } 490 }
478 found = true; 491 found = true;
479 iterator = it; 492 iterator = it;
480 } 493 }
481 } 494 }
482 } 495 }
483 return found; 496 return found;
484} 497}
485 498
486/** 499/**
487 * Sets a value of an option in a stanza 500 * Sets a value of an option in a stanza
488 * @param start the start of the stanza 501 * @param start the start of the stanza
489 * @param option the option to use when setting value. 502 * @param option the option to use when setting value.
490 * @return bool true if successfull, false otherwise. 503 * @return bool true if successfull, false otherwise.
491 */ 504 */
492bool Interfaces::setOption(const QStringList::Iterator &start, const QString &option, const QString &value){ 505bool Interfaces::setOption(const QStringList::Iterator &start, const QString &option, const QString &value){
493 if(start == interfaces.end()) 506 if(start == interfaces.end())
494 return false; 507 return false;
495 508 qDebug("setting option");
496 bool found = false; 509 bool found = false;
510 bool replaced = false;
511 QStringList::Iterator insertAt = NULL;
497 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) { 512 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
498 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 513 qDebug(" Interfaces::setOption got line >%s<",(*it).latin1());
499 if(!found && value != ""){ 514 // FIXME: was not completly stupid just wrong sice all options got inserted bevore the iface line
500 // Got to the end of the stanza without finding it, so append it. 515 // but since it works with an empty interfaces file I (tille) will not do anything more
501 interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value)); 516 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) ){
502 } 517 if (found) break;
503 found = true; 518// && it != start){
504 break; 519// if(!found && value != ""){
505 } 520// // Got to the end of the stanza without finding it, so append it.
521// qDebug(" Got to the end of the stanza without finding it, so append it.");
522// interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value));
523// }
524 qDebug("found 1");
525// interfaces.insert(++it, QString("\t%1 %2").arg(option).arg(value));
526 found = true;
527 insertAt = it;
528
529 }
506 if((*it).contains(option) && it != start && (*it).at(0) != '#'){ 530 if((*it).contains(option) && it != start && (*it).at(0) != '#'){
507 // Found it in stanza so replace it. 531 // Found it in stanza so replace it.
532 qDebug("found 2");
508 if(found) 533 if(found)
509 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1()); 534 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
510 found = true; 535 found = true;
536 replaced = true;
511 (*it) = QString("\t%1 %2").arg(option).arg(value); 537 (*it) = QString("\t%1 %2").arg(option).arg(value);
512 } 538 }
513 } 539 }
514 if(!found){ 540 if(!found){
541 qDebug("! found insert anyway");
515 QStringList::Iterator p = start; 542 QStringList::Iterator p = start;
516 interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value)); 543 interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value));
517 found = true; 544 found = true;
518 } 545 }
546
547 if(found && !replaced){
548 qDebug("found iface but not the option so insert it here...");
549 interfaces.insert(++insertAt, QString("\t%1 %2").arg(option).arg(value));
550 }
519 return found; 551 return found;
520} 552}
521 553
522/** 554/**
523 * Removes a stanza and all of its options 555 * Removes a stanza and all of its options
524 * @param stanza the stanza to remove 556 * @param stanza the stanza to remove
525 * @return bool true if successfull. 557 * @return bool true if successfull.
526 */ 558 */
527bool Interfaces::removeStanza(QStringList::Iterator &stanza){ 559bool Interfaces::removeStanza(QStringList::Iterator &stanza){
528 if(stanza == interfaces.end()) 560 if(stanza == interfaces.end())
529 return false; 561 return false;
530 (*stanza) = ""; 562 (*stanza) = "";
531 return removeAllOptions(stanza); 563 return removeAllOptions(stanza);
532} 564}
533 565
534/** 566/**
535 * Removes a option in a stanza 567 * Removes a option in a stanza
536 * @param start the start of the stanza 568 * @param start the start of the stanza
537 * @param option the option to remove 569 * @param option the option to remove
538 * @return bool true if successfull, false otherwise. 570 * @return bool true if successfull, false otherwise.
539 */ 571 */
540bool Interfaces::removeOption(const QStringList::Iterator &start, const QString &option){ 572bool Interfaces::removeOption(const QStringList::Iterator &start, const QString &option){
541 if(start == interfaces.end()) 573 if(start == interfaces.end())
542 return false; 574 return false;
543 575
544 bool found = false; 576 bool found = false;
545 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) { 577 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
546 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 578 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
547 // got to the end without finding it 579 // got to the end without finding it
548 break; 580 break;
549 } 581 }
550 if((*it).contains(option) && it != start && (*it).at(0) != '#'){ 582 if((*it).contains(option) && it != start && (*it).at(0) != '#'){
551 // Found it in stanza so replace it. 583 // Found it in stanza so replace it.
552 if(found) 584 if(found)
553 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1()); 585 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
554 found = true; 586 found = true;
555 (*it) = ""; 587 it = interfaces.remove( it ); // we really want to remove the line
588 --it; // we do ++it later in the head of the for loop
556 } 589 }
557 } 590 }
558 return found; 591 return found;
559} 592}
560 593
561/** 594/**
562 * Removes a option in a stanza 595 * Removes a option in a stanza
563 * @param start the start of the stanza 596 * @param start the start of the stanza
564 * @param option the option to use when setting value. 597 * @param option the option to use when setting value.
565 * @return bool true if successfull, false otherwise. 598 * @return bool true if successfull, false otherwise.
566 */ 599 */
567bool Interfaces::removeOption(const QStringList::Iterator &start, const QString &option, const QString &value){ 600bool Interfaces::removeOption(const QStringList::Iterator &start, const QString &option, const QString &value){
568 if(start == interfaces.end()) 601 if(start == interfaces.end())
569 return false; 602 return false;
570 603
571 bool found = false; 604 bool found = false;
572 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) { 605 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
573 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 606 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
574 // got to the end without finding it 607 // got to the end without finding it
575 break; 608 break;
576 } 609 }
577 if((*it).contains(option) && (*it).contains(value) && it != start && (*it).at(0) != '#'){ 610 if((*it).contains(option) && (*it).contains(value) && it != start && (*it).at(0) != '#'){
578 // Found it in stanza so replace it. 611 // Found it in stanza so replace it.
579 if(found) 612 if(found)
580 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1()); 613 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
581 found = true; 614 found = true;
582 (*it) = ""; 615 it = interfaces.remove( it ); // we really want to remove the line
616 --it; // we do ++it later in the head of the for loop
583 } 617 }
584 } 618 }
585 return found; 619 return found;
586} 620}
587 621
588/** 622/**
589 * Removes all options in a stanza 623 * Removes all options in a stanza
590 * @param start the start of the stanza 624 * @param start the start of the stanza
591 * @return bool true if successfull, false otherwise. 625 * @return bool true if successfull, false otherwise.
592 */ 626 */
593bool Interfaces::removeAllOptions(const QStringList::Iterator &start){ 627bool Interfaces::removeAllOptions(const QStringList::Iterator &start){
594 if(start == interfaces.end()) 628 if(start == interfaces.end())
595 return false; 629 return false;
596 630
597 QStringList::Iterator it = start; 631 QStringList::Iterator it = start;
598 it = ++it; 632 it = ++it;
599 for (; it != interfaces.end(); ++it ) { 633 for (; it != interfaces.end(); ++it ) {
600 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 634 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
601 break; 635 break;
602 } 636 }
603 it = interfaces.remove(it); 637 it = interfaces.remove(it);
604 it = --it; 638 it = --it;
605 } 639 }
606 // Leave a space between this interface and the next. 640 // Leave a space between this interface and the next.
607 interfaces.insert(it, QString("")); 641 interfaces.insert(it, QString(""));
608 return true; 642 return true;
609} 643}
610 644
611/** 645/**
612 * Gets a value of an option in a stanza 646 * Gets a value of an option in a stanza
613 * @param start the start of the stanza 647 * @param start the start of the stanza
614 * @param option the option to use when getting the value. 648 * @param option the option to use when getting the value.
615 * @param bool true if errors false otherwise. 649 * @param bool true if errors false otherwise.
616 * @return QString the value of option QString::null() if error == true. 650 * @return QString the value of option QString::null() if error == true.
617 */ 651 */
618QString Interfaces::getOption(const QStringList::Iterator &start, const QString &option, bool &error){ 652QString Interfaces::getOption(const QStringList::Iterator &start, const QString &option, bool &error){
619 if(start == interfaces.end()){ 653 if(start == interfaces.end()){
620 error = false; 654 error = false;
621 return QString(); 655 return QString();
622 } 656 }
623 657
624 QString value; 658 QString value;
625 bool found = false; 659 bool found = false;
626 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) { 660 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
627 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 661 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
628 break; 662 break;
629 } 663 }
630 if((*it).contains(option) && (*it).at(0) != '#'){ 664 if((*it).contains(option) && (*it).at(0) != '#'){
631 if(found) 665 if(found)
632 qDebug(QString("Interfaces: getOption found more then one value: %1 for option: %2 in stanza %3").arg((*it)).arg(option).arg((*start)).latin1()); 666 qDebug(QString("Interfaces: getOption found more then one value: %1 for option: %2 in stanza %3").arg((*it)).arg(option).arg((*start)).latin1());
633 found = true; 667 found = true;
634 QString line = (*it).simplifyWhiteSpace(); 668 QString line = (*it).simplifyWhiteSpace();
635 int space = line.find(" ", option.length()); 669 int space = line.find(" ", option.length());
636 if(space != -1){ 670 if(space != -1){
637 value = line.mid(space+1, line.length()); 671 value = line.mid(space+1, line.length());
638 break; 672 break;
639 } 673 }
640 } 674 }
641 } 675 }
642 error = !found; 676 error = !found;
643 return value; 677 return value;
644} 678}
645 679
646/** 680/**
647 * Write out the interfaces file to the file passed into the constructor. 681 * Write out the interfaces file to the file passed into the constructor.
648 * Removes any excess blank lines over 1 line long. 682 * Removes any excess blank lines over 1 line long.
649 * @return bool true if successfull, false if not. 683 * @return bool true if successfull, false if not.
650 */ 684 */
651bool Interfaces::write(){ 685bool Interfaces::write(){
652 QFile::remove(interfacesFile); 686 QFile::remove(interfacesFile);
653 QFile file(interfacesFile); 687 QFile file(interfacesFile);
654 688
655 if (!file.open(IO_ReadWrite)){ 689 if (!file.open(IO_ReadWrite)){
656 qDebug(QString("Interfaces: Can't open file: %1 for writing.").arg(interfacesFile).latin1()); 690 qDebug(QString("Interfaces: Can't open file: %1 for writing.").arg(interfacesFile).latin1());
657 return false; 691 return false;
658 } 692 }
659 QTextStream stream( &file ); 693 QTextStream stream( &file );
660 int whiteSpaceCount = 0; 694 int whiteSpaceCount = 0;
661 for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) { 695 for ( QStringList::Iterator it = interfaces.begin(); it != interfaces.end(); ++it ) {
662 QString line = (*it).simplifyWhiteSpace(); 696 QString line = (*it).simplifyWhiteSpace();
663 line = line.replace(QRegExp(" "),""); 697 line = line.replace(QRegExp(" "),"");
664 if(line.length() == 0) 698 if(line.length() == 0)
665 whiteSpaceCount++; 699 whiteSpaceCount++;
666 else 700 else
667 whiteSpaceCount = 0; 701 whiteSpaceCount = 0;
668 if(whiteSpaceCount < 2){ 702 if(whiteSpaceCount < 2){
669 qDebug((*it).latin1()); 703 qDebug((*it).latin1());
670 stream << (*it) << '\n'; 704 stream << (*it) << '\n';
671 } 705 }
672 } 706 }
673 file.close(); 707 file.close();
674 return true; 708 return true;
675} 709}
676 710
677// interfaces.cpp 711// interfaces.cpp
678 712
diff --git a/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp b/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
index b40d101..e844d8a 100644
--- a/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
+++ b/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
@@ -1,202 +1,206 @@
1#include "interfacesetupimp.h" 1#include "interfacesetupimp.h"
2#include "interface.h" 2#include "interface.h"
3 3
4#include <qcheckbox.h> 4#include <qcheckbox.h>
5#include <qlineedit.h> 5#include <qlineedit.h>
6#include <qspinbox.h> 6#include <qspinbox.h>
7#include <qgroupbox.h> 7#include <qgroupbox.h>
8#include <qlabel.h> 8#include <qlabel.h>
9 9
10#include <qmessagebox.h> 10#include <qmessagebox.h>
11 11
12#include <opie/oprocess.h> 12#include <opie/oprocess.h>
13 13
14#ifdef QWS 14#ifdef QWS
15#include <opie/owait.h> 15#include <opie/owait.h>
16#include <qpe/global.h> 16#include <qpe/global.h>
17#include <qapplication.h> 17#include <qapplication.h>
18#endif 18#endif
19 19
20#define DNSSCRIPT "changedns" 20#define DNSSCRIPT "changedns"
21 21
22/** 22/**
23 * Constuctor. Set up the connection. A profile must be set. 23 * Constuctor. Set up the connection. A profile must be set.
24 */ 24 */
25InterfaceSetupImp::InterfaceSetupImp(QWidget* parent, const char* name, Interface *i, Interfaces *j, WFlags fl) : InterfaceSetup(parent, name, fl), interface(i), interfaces(j), delInterfaces(false){ 25InterfaceSetupImp::InterfaceSetupImp(QWidget* parent, const char* name, Interface *i, Interfaces *j, WFlags fl) : InterfaceSetup(parent, name, fl), interface(i), interfaces(j), delInterfaces(false){
26 if (j == 0) { 26 if (j == 0) {
27 delInterfaces = true; 27 delInterfaces = true;
28 interfaces = new Interfaces; 28 interfaces = new Interfaces;
29 } 29 }
30} 30}
31 31
32/** 32/**
33 * Destructor 33 * Destructor
34 */ 34 */
35InterfaceSetupImp::~InterfaceSetupImp(){ 35InterfaceSetupImp::~InterfaceSetupImp(){
36 if(delInterfaces) { 36 if(delInterfaces) {
37 delete interfaces; 37 delete interfaces;
38 } 38 }
39} 39}
40 40
41/** 41/**
42 * Save the current settings, then write out the interfaces file and close. 42 * Save the current settings, then write out the interfaces file and close.
43 */ 43 */
44bool InterfaceSetupImp::saveChanges(){ 44bool InterfaceSetupImp::saveChanges(){
45 bool error; 45 bool error;
46 QString iface = interfaces->getInterfaceName(error); 46 QString iface = interfaces->getInterfaceName(error);
47 qDebug("InterfaceSetupImp::saveChanges saves interface %s", iface.latin1() );
47 if(!saveSettings()) 48 if(!saveSettings())
48 return false; 49 return false;
49 50
50 interfaces->write(); 51 interfaces->write();
51 52
52 if (interface->getStatus()) { 53 if (interface->getStatus()) {
53 QString ifup; 54 QString ifup;
54 ifup += "ifdown "; 55 ifup += "ifdown ";
55 ifup += iface; 56 ifup += iface;
56 ifup += "; ifup "; 57 ifup += "; ifup ";
57 ifup += iface; 58 ifup += iface;
58 ifup += ";"; 59 ifup += ";";
59 60
60 OProcess restart; 61 OProcess restart;
61 restart << "sh"; 62 restart << "sh";
62 restart << "-c"; 63 restart << "-c";
63 restart << ifup; 64 restart << ifup;
64 65
65 OWait *owait = new OWait(); 66 OWait *owait = new OWait();
66 Global::statusMessage( tr( "Restarting interface" ) ); 67 Global::statusMessage( tr( "Restarting interface" ) );
67 68
68 owait->show(); 69 owait->show();
69 qApp->processEvents(); 70 qApp->processEvents();
70 71
71 if (!restart.start(OProcess::Block, OProcess::NoCommunication) ) { 72 if (!restart.start(OProcess::Block, OProcess::NoCommunication) ) {
72 qWarning("unstable to spawn ifdown/ifup"); 73 qWarning("unstable to spawn ifdown/ifup");
73 } 74 }
74 75
75 owait->hide(); 76 owait->hide();
76 delete owait; 77 delete owait;
77 78
78 interface->refresh(); 79 interface->refresh();
79 } 80 }
80 return true; 81 return true;
81} 82}
82 83
83/** 84/**
84 * Save the settings for the current Interface. 85 * Save the settings for the current Interface.
85 * @return bool true if successfull, false otherwise 86 * @return bool true if successfull, false otherwise
86 */ 87 */
87bool InterfaceSetupImp::saveSettings(){ 88bool InterfaceSetupImp::saveSettings(){
88 // eh can't really do anything about it other then return. :-D 89 // eh can't really do anything about it other then return. :-D
89 if(!interfaces->isInterfaceSet()) 90 if(!interfaces->isInterfaceSet())
90 return true; 91 return true;
91 92
92 bool error = false; 93 bool error = false;
93 // Loopback case 94 // Loopback case
94 if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){ 95 if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){
95 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked()); 96 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
96 return true; 97 return true;
97 } 98 }
98 99
99 if(!dhcpCheckBox->isChecked() && (ipAddressEdit->text().isEmpty() || subnetMaskEdit->text().isEmpty())){ 100 if(!dhcpCheckBox->isChecked() && (ipAddressEdit->text().isEmpty() || subnetMaskEdit->text().isEmpty())){
100 QMessageBox::information(this, "Not Saved.", "Please fill in the IP address and\n subnet entries.", QMessageBox::Ok); 101 QMessageBox::information(this, "Not Saved.", "Please fill in the IP address and\n subnet entries.", QMessageBox::Ok);
101 return false; 102 return false;
102 } 103 }
103 // DHCP 104 // DHCP
104 if(dhcpCheckBox->isChecked()) { 105 if(dhcpCheckBox->isChecked()) {
105 interfaces->setInterfaceMethod(INTERFACES_METHOD_DHCP); 106 interfaces->setInterfaceMethod(INTERFACES_METHOD_DHCP);
106 interfaces->removeInterfaceOption("address"); 107 interfaces->removeInterfaceOption("address");
107 interfaces->removeInterfaceOption("netmask"); 108 interfaces->removeInterfaceOption("netmask");
108 interfaces->removeInterfaceOption("gateway"); 109 interfaces->removeInterfaceOption("gateway");
109 interfaces->removeInterfaceOption("up "DNSSCRIPT" -a "); 110 interfaces->removeInterfaceOption("up "DNSSCRIPT" -a ");
110 interfaces->removeInterfaceOption("down "DNSSCRIPT" -r "); 111 interfaces->removeInterfaceOption("down "DNSSCRIPT" -r ");
111 } else{ 112 } else{
112 interfaces->setInterfaceMethod("static"); 113 interfaces->setInterfaceMethod("static");
113 interfaces->setInterfaceOption("address", ipAddressEdit->text()); 114 interfaces->setInterfaceOption("address", ipAddressEdit->text());
114 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text()); 115 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text());
115 interfaces->setInterfaceOption("gateway", gatewayEdit->text()); 116 interfaces->setInterfaceOption("gateway", gatewayEdit->text());
116 if(!firstDNSLineEdit->text().isEmpty() || !secondDNSLineEdit->text().isEmpty()){ 117 if(!firstDNSLineEdit->text().isEmpty() || !secondDNSLineEdit->text().isEmpty()){
117 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text(); 118 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text();
118 interfaces->setInterfaceOption("up "DNSSCRIPT" -a ", dns); 119 interfaces->setInterfaceOption("up "DNSSCRIPT" -a ", dns);
119 interfaces->setInterfaceOption("down "DNSSCRIPT" -r ", dns); 120 interfaces->setInterfaceOption("down "DNSSCRIPT" -r ", dns);
121 }else{
122 interfaces->removeInterfaceOption("up "DNSSCRIPT" -a ");
123 interfaces->removeInterfaceOption("down "DNSSCRIPT" -r");
120 } 124 }
121 } 125 }
122 126
123 // IP Information 127 // IP Information
124 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked()); 128 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
125 return true; 129 return true;
126} 130}
127 131
128/** 132/**
129 * The Profile has changed. 133 * The Profile has changed.
130 * @param QString profile the new profile. 134 * @param QString profile the new profile.
131 */ 135 */
132void InterfaceSetupImp::setProfile(const QString &profile){ 136void InterfaceSetupImp::setProfile(const QString &profile){
133 /* 137 /*
134 bool error = false; 138 bool error = false;
135 if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){ 139 if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){
136 staticGroupBox->hide(); 140 staticGroupBox->hide();
137 dhcpCheckBox->hide(); 141 dhcpCheckBox->hide();
138 leaseTime->hide(); 142 leaseTime->hide();
139 leaseHoursLabel->hide(); 143 leaseHoursLabel->hide();
140 } 144 }
141 */ 145 */
142 146
143 QString newInterfaceName = interface->getInterfaceName(); 147 QString newInterfaceName = interface->getInterfaceName();
144 if(profile.length() > 0) 148 if(profile.length() > 0)
145 newInterfaceName += "_" + profile; 149 newInterfaceName += "_" + profile;
146 // See if we have to make a interface. 150 // See if we have to make a interface.
147 if(!interfaces->setInterface(newInterfaceName)){ 151 if(!interfaces->setInterface(newInterfaceName)){
148 // Add making for this new interface if need too 152 // Add making for this new interface if need too
149 if(profile != ""){ 153 if(profile != ""){
150 interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName); 154 interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName);
151 if(!interfaces->setMapping(interface->getInterfaceName())){ 155 if(!interfaces->setMapping(interface->getInterfaceName())){
152 interfaces->addMapping(interface->getInterfaceName()); 156 interfaces->addMapping(interface->getInterfaceName());
153 if(!interfaces->setMapping(interface->getInterfaceName())){ 157 if(!interfaces->setMapping(interface->getInterfaceName())){
154 qDebug("InterfaceSetupImp: Added Mapping, but still can't setInterface."); 158 qDebug("InterfaceSetupImp: Added Mapping, but still can't setInterface.");
155 return; 159 return;
156 } 160 }
157 } 161 }
158 interfaces->setMap("map", newInterfaceName); 162 interfaces->setMap("map", newInterfaceName);
159 interfaces->setScript("getprofile.sh"); 163 interfaces->setScript("getprofile.sh");
160 } 164 }
161 else{ 165 else{
162 interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP); 166 interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP);
163 if(!interfaces->setInterface(newInterfaceName)){ 167 if(!interfaces->setInterface(newInterfaceName)){
164 qDebug("InterfaceSetupImp: Added interface, but still can't setInterface."); 168 qDebug("InterfaceSetupImp: Added interface, but still can't setInterface.");
165 return; 169 return;
166 } 170 }
167 } 171 }
168 } 172 }
169 173
170 // We must have a valid interface to get this far so read some settings. 174 // We must have a valid interface to get this far so read some settings.
171 175
172 // DHCP 176 // DHCP
173 bool error = false; 177 bool error = false;
174 if(interfaces->getInterfaceMethod(error) == INTERFACES_METHOD_DHCP) 178 if(interfaces->getInterfaceMethod(error) == INTERFACES_METHOD_DHCP)
175 dhcpCheckBox->setChecked(true); 179 dhcpCheckBox->setChecked(true);
176 else 180 else
177 dhcpCheckBox->setChecked(false); 181 dhcpCheckBox->setChecked(false);
178 182
179 // IP Information 183 // IP Information
180 autoStart->setChecked(interfaces->isAuto(interface->getInterfaceName())); 184 autoStart->setChecked(interfaces->isAuto(interface->getInterfaceName()));
181 QString dns = interfaces->getInterfaceOption("up "DNSSCRIPT" -a", error); 185 QString dns = interfaces->getInterfaceOption("up "DNSSCRIPT" -a", error);
182 qDebug("dns >%s<",dns.latin1()); 186 qDebug("dns >%s<",dns.latin1());
183 if(dns.contains(" ")){ 187 if(dns.contains(" ")){
184 firstDNSLineEdit->setText(dns.mid(0, dns.find(" "))); 188 firstDNSLineEdit->setText(dns.mid(0, dns.find(" ")));
185 secondDNSLineEdit->setText(dns.mid(dns.find(" ")+1, dns.length())); 189 secondDNSLineEdit->setText(dns.mid(dns.find(" ")+1, dns.length()));
186 }else firstDNSLineEdit->setText(dns); 190 }else firstDNSLineEdit->setText(dns);
187 191
188 ipAddressEdit->setText(interfaces->getInterfaceOption("address", error)); 192 ipAddressEdit->setText(interfaces->getInterfaceOption("address", error));
189 subnetMaskEdit->setText(interfaces->getInterfaceOption("netmask", error)); 193 subnetMaskEdit->setText(interfaces->getInterfaceOption("netmask", error));
190 if (subnetMaskEdit->text().isEmpty()) 194 if (subnetMaskEdit->text().isEmpty())
191 subnetMaskEdit->setText( "255.255.255.0" ); 195 subnetMaskEdit->setText( "255.255.255.0" );
192 gatewayEdit->setText(interfaces->getInterfaceOption("gateway", error)); 196 gatewayEdit->setText(interfaces->getInterfaceOption("gateway", error));
193 197
194 198
195 199
196 qWarning("InterfaceSetupImp::setProfile(%s)\n", profile.latin1()); 200 qWarning("InterfaceSetupImp::setProfile(%s)\n", profile.latin1());
197 qWarning("InterfaceSetupImp::setProfile: iface is %s\n", interfaces->getInterfaceName(error).latin1()); 201 qWarning("InterfaceSetupImp::setProfile: iface is %s\n", interfaces->getInterfaceName(error).latin1());
198 202
199} 203}
200 204
201// interfacesetup.cpp 205// interfacesetup.cpp
202 206
diff --git a/noncore/settings/networksettings/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindowimp.cpp
index 2d714ca..f74cf87 100644
--- a/noncore/settings/networksettings/mainwindowimp.cpp
+++ b/noncore/settings/networksettings/mainwindowimp.cpp
@@ -1,665 +1,678 @@
1#include "mainwindowimp.h" 1#include "mainwindowimp.h"
2#include "addconnectionimp.h" 2#include "addconnectionimp.h"
3#include "interfaceinformationimp.h" 3#include "interfaceinformationimp.h"
4#include "interfacesetupimp.h" 4#include "interfacesetupimp.h"
5#include "interfaces.h" 5#include "interfaces.h"
6#include "module.h" 6#include "module.h"
7 7
8#include <qpushbutton.h> 8#include <qpushbutton.h>
9#include <qlistbox.h> 9#include <qlistbox.h>
10#include <qlineedit.h> 10#include <qlineedit.h>
11#include <qlistview.h> 11#include <qlistview.h>
12#include <qheader.h> 12#include <qheader.h>
13#include <qlabel.h> 13#include <qlabel.h>
14#include <qpe/qcopenvelope_qws.h> 14#include <qpe/qcopenvelope_qws.h>
15#include <qtabwidget.h> // in order to disable the profiles tab 15#include <qtabwidget.h> // in order to disable the profiles tab
16#include <qpe/qpeapplication.h>
16 17
17#include <qmessagebox.h> 18#include <qmessagebox.h>
18 19
19#ifdef QWS 20#ifdef QWS
20 #include <qpe/config.h> 21 #include <qpe/config.h>
21 #include <qpe/qlibrary.h> 22 #include <qpe/qlibrary.h>
22 #include <qpe/resource.h> 23 #include <qpe/resource.h>
23 #include <qpe/qpeapplication.h> 24 #include <qpe/qpeapplication.h>
24#else 25#else
25 #include <klibloader.h> 26 #include <klibloader.h>
26 #define QLibrary KLibrary 27 #define QLibrary KLibrary
27 #include <kconfig.h> 28 #include <kconfig.h>
28 #define Config KConfig 29 #define Config KConfig
29 #include <kapplication.h> 30 #include <kapplication.h>
30 #include <kstandarddirs.h> 31 #include <kstandarddirs.h>
31 #include <kiconloader.h> 32 #include <kiconloader.h>
32 #define showMaximized show 33 #define showMaximized show
33#endif 34#endif
34 35
35#if QT_VERSION < 300 36#if QT_VERSION < 300
36#include <qlist.h> 37#include <qlist.h>
37#else 38#else
38#include <qptrlist.h> 39#include <qptrlist.h>
39#endif 40#endif
40#include <qdir.h> 41#include <qdir.h>
41#include <qfile.h> 42#include <qfile.h>
42#include <qtextstream.h> 43#include <qtextstream.h>
43#include <qregexp.h> 44#include <qregexp.h>
44 45
45#include <net/if.h> 46#include <net/if.h>
46#include <sys/ioctl.h> 47#include <sys/ioctl.h>
47#include <sys/socket.h> 48#include <sys/socket.h>
48 49
49#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme" 50#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme"
50#define _PROCNETDEV "/proc/net/dev" 51#define _PROCNETDEV "/proc/net/dev"
51 52
52MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name), advancedUserMode(true), scheme(DEFAULT_SCHEME){ 53MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, Qt::WStyle_ContextHelp), advancedUserMode(true), scheme(DEFAULT_SCHEME){
53 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); 54 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked()));
54 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); 55 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
55 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); 56 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked()));
56 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); 57 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked()));
57 58
58 connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile())); 59 connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile()));
59 connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile())); 60 connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile()));
60 connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile())); 61 connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile()));
61 62
62 connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&))); 63 connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&)));
63 64
64 //FIXME: disable profiles for the moment: 65 //FIXME: disable profiles for the moment:
65// tabWidget->setTabEnabled( tab, false ); 66 tabWidget->setTabEnabled( tab, false );
66 67
67 // Load connections. 68 // Load connections.
68 // /usr/local/kde/lib/libinterfaces.la 69 // /usr/local/kde/lib/libinterfaces.la
69#ifdef QWS 70#ifdef QWS
70 loadModules(QPEApplication::qpeDir() + "plugins/networksettings"); 71 loadModules(QPEApplication::qpeDir() + "plugins/networksettings");
71#else 72#else
72 loader = KLibLoader::self(); 73 loader = KLibLoader::self();
73 loadModules(QString("/usr/")+KStandardDirs::kde_default("lib")); 74 loadModules(QString("/usr/")+KStandardDirs::kde_default("lib"));
74#endif 75#endif
75 getAllInterfaces(); 76 getAllInterfaces();
76 77
77 Interfaces i; 78 Interfaces i;
78 QStringList list = i.getInterfaceList(); 79 QStringList list = i.getInterfaceList();
79 QMap<QString, Interface*>::Iterator it; 80 QMap<QString, Interface*>::Iterator it;
80 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) { 81 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) {
82 /*
83 * we skipped it in getAllInterfaces now
84 * we need to ignore it as well
85 */
86 if (m_handledIfaces.contains( *ni) ) {
87 qDebug("Not up iface handled by module");
88 continue;
89 }
81 bool found = false; 90 bool found = false;
82 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){ 91 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){
83 if(it.key() == (*ni)) 92 if(it.key() == (*ni))
84 found = true; 93 found = true;
85 } 94 }
86 if(!found){ 95 if(!found){
87 if(!(*ni).contains("_")){ 96 if(!(*ni).contains("_")){
88 Interface *i = new Interface(this, *ni, false); 97 Interface *i = new Interface(this, *ni, false);
89 i->setAttached(false); 98 i->setAttached(false);
90 i->setHardwareName(tr("Disconnected")); 99 i->setHardwareName(tr("Disconnected"));
91 interfaceNames.insert(i->getInterfaceName(), i); 100 interfaceNames.insert(i->getInterfaceName(), i);
92 updateInterface(i); 101 updateInterface(i);
93 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *))); 102 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
94 } 103 }
95 } 104 }
96 } 105 }
97 106
98 //getInterfaceList(); 107 //getInterfaceList();
99 connectionList->header()->hide(); 108 connectionList->header()->hide();
100 109
101 Config cfg("NetworkSetup"); 110 Config cfg("NetworkSetup");
102 profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All")); 111 profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All"));
103 for ( QStringList::Iterator it = profiles.begin(); 112 for ( QStringList::Iterator it = profiles.begin();
104 it != profiles.end(); ++it) 113 it != profiles.end(); ++it)
105 profilesList->insertItem((*it)); 114 profilesList->insertItem((*it));
106 currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All")); 115 currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All"));
107 advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false); 116 advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false);
108 scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME); 117 scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME);
109 118
110 QFile file(scheme); 119 QFile file(scheme);
111 if ( file.open(IO_ReadOnly) ) { // file opened successfully 120 if ( file.open(IO_ReadOnly) ) { // file opened successfully
112 QTextStream stream( &file ); // use a text stream 121 QTextStream stream( &file ); // use a text stream
113 while ( !stream.eof() ) { // until end of file... 122 while ( !stream.eof() ) { // until end of file...
114 QString line = stream.readLine(); // line of text excluding '\n' 123 QString line = stream.readLine(); // line of text excluding '\n'
115 if(line.contains("SCHEME")){ 124 if(line.contains("SCHEME")){
116 line = line.mid(7, line.length()); 125 line = line.mid(7, line.length());
117 currentProfileLabel->setText(line); 126 currentProfileLabel->setText(line);
118 break; 127 break;
119 } 128 }
120 } 129 }
121 file.close(); 130 file.close();
122 } 131 }
123 makeChannel(); 132 makeChannel();
124} 133}
125 134
126/** 135/**
127 * Deconstructor. Save profiles. Delete loaded libraries. 136 * Deconstructor. Save profiles. Delete loaded libraries.
128 */ 137 */
129MainWindowImp::~MainWindowImp(){ 138MainWindowImp::~MainWindowImp(){
130 // Save profiles. 139 // Save profiles.
131 Config cfg("NetworkSetup"); 140 Config cfg("NetworkSetup");
132 cfg.setGroup("General"); 141 cfg.setGroup("General");
133 cfg.writeEntry("Profiles", profiles.join(" ")); 142 cfg.writeEntry("Profiles", profiles.join(" "));
134 143
135 // Delete all interfaces that don't have owners. 144 // Delete all interfaces that don't have owners.
136 QMap<Interface*, QListViewItem*>::Iterator iIt; 145 QMap<Interface*, QListViewItem*>::Iterator iIt;
137 for( iIt = items.begin(); iIt != items.end(); ++iIt ){ 146 for( iIt = items.begin(); iIt != items.end(); ++iIt ){
138 if(iIt.key()->getModuleOwner() == NULL) 147 if(iIt.key()->getModuleOwner() == NULL)
139 delete iIt.key(); 148 delete iIt.key();
140 } 149 }
141 150
142#ifdef QWS 151#ifdef QWS
143 // Delete Modules and Libraries 152 // Delete Modules and Libraries
144 QMap<Module*, QLibrary*>::Iterator it; 153 QMap<Module*, QLibrary*>::Iterator it;
145 for( it = libraries.begin(); it != libraries.end(); ++it ){ 154 for( it = libraries.begin(); it != libraries.end(); ++it ){
146 delete it.key(); 155 delete it.key();
147 // I wonder why I can't delete the libraries 156 // I wonder why I can't delete the libraries
148 // What fucking shit this is. 157 // What fucking shit this is.
149 //delete it.data(); 158 //delete it.data();
150 } 159 }
151#else 160#else
152 // klibloader automaticly deletes the libraries for us... 161 // klibloader automaticly deletes the libraries for us...
153#endif 162#endif
154} 163}
155 164
156/** 165/**
157 * Query the kernel for all of the interfaces. 166 * Query the kernel for all of the interfaces.
158 */ 167 */
159void MainWindowImp::getAllInterfaces(){ 168void MainWindowImp::getAllInterfaces(){
160 int sockfd = socket(PF_INET, SOCK_DGRAM, 0); 169 int sockfd = socket(PF_INET, SOCK_DGRAM, 0);
161 if(sockfd == -1) 170 if(sockfd == -1)
162 return; 171 return;
163 172
164 struct ifreq ifr; 173 struct ifreq ifr;
165 QStringList ifaces; 174 QStringList ifaces;
166 QFile procFile(QString(_PROCNETDEV)); 175 QFile procFile(QString(_PROCNETDEV));
167 int result; 176 int result;
168 Interface *i; 177 Interface *i;
169 178
170 if (! procFile.exists()) { 179 if (! procFile.exists()) {
171 struct ifreq ifrs[100]; 180 struct ifreq ifrs[100];
172 struct ifconf ifc; 181 struct ifconf ifc;
173 ifc.ifc_len = sizeof(ifrs); 182 ifc.ifc_len = sizeof(ifrs);
174 ifc.ifc_req = ifrs; 183 ifc.ifc_req = ifrs;
175 result = ioctl(sockfd, SIOCGIFCONF, &ifc); 184 result = ioctl(sockfd, SIOCGIFCONF, &ifc);
176 185
177 for (unsigned int i = 0; i < ifc.ifc_len / sizeof(struct ifreq); i++) { 186 for (unsigned int i = 0; i < ifc.ifc_len / sizeof(struct ifreq); i++) {
178 struct ifreq *pifr = &ifrs[i]; 187 struct ifreq *pifr = &ifrs[i];
179 188
180 ifaces += pifr->ifr_name; 189 ifaces += pifr->ifr_name;
181 } 190 }
182 } else { 191 } else {
183 procFile.open(IO_ReadOnly); 192 procFile.open(IO_ReadOnly);
184 QString line; 193 QString line;
185 QTextStream procTs(&procFile); 194 QTextStream procTs(&procFile);
186 int loc = -1; 195 int loc = -1;
187 196
188 procTs.readLine(); // eat a line 197 procTs.readLine(); // eat a line
189 procTs.readLine(); // eat a line 198 procTs.readLine(); // eat a line
190 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { 199 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) {
191 if((loc = line.find(":")) != -1) { 200 if((loc = line.find(":")) != -1) {
192 ifaces += line.left(loc); 201 ifaces += line.left(loc);
193 } 202 }
194 } 203 }
195 } 204 }
196 205
197 for (QStringList::Iterator it = ifaces.begin(); it != ifaces.end(); ++it) { 206 for (QStringList::Iterator it = ifaces.begin(); it != ifaces.end(); ++it) {
198 int flags = 0; 207 int flags = 0;
208 if ( m_handledIfaces.contains( (*it) ) ) {
209 qDebug(" %s is handled by a module", (*it).latin1() );
210 continue;
211 }
199// int family; 212// int family;
200 i = NULL; 213 i = NULL;
201 214
202 strcpy(ifr.ifr_name, (*it).latin1()); 215 strcpy(ifr.ifr_name, (*it).latin1());
203 216
204 struct ifreq ifcopy; 217 struct ifreq ifcopy;
205 ifcopy = ifr; 218 ifcopy = ifr;
206 result = ioctl(sockfd, SIOCGIFFLAGS, &ifcopy); 219 result = ioctl(sockfd, SIOCGIFFLAGS, &ifcopy);
207 flags = ifcopy.ifr_flags; 220 flags = ifcopy.ifr_flags;
208 i = new Interface(this, ifr.ifr_name, false); 221 i = new Interface(this, ifr.ifr_name, false);
209 i->setAttached(true); 222 i->setAttached(true);
210 if ((flags & IFF_UP) == IFF_UP) 223 if ((flags & IFF_UP) == IFF_UP)
211 i->setStatus(true); 224 i->setStatus(true);
212 else 225 else
213 i->setStatus(false); 226 i->setStatus(false);
214 227
215 if ((flags & IFF_BROADCAST) == IFF_BROADCAST) 228 if ((flags & IFF_BROADCAST) == IFF_BROADCAST)
216 i->setHardwareName("Ethernet"); 229 i->setHardwareName("Ethernet");
217 else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT) 230 else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT)
218 i->setHardwareName("Point to Point"); 231 i->setHardwareName("Point to Point");
219 else if ((flags & IFF_MULTICAST) == IFF_MULTICAST) 232 else if ((flags & IFF_MULTICAST) == IFF_MULTICAST)
220 i->setHardwareName("Multicast"); 233 i->setHardwareName("Multicast");
221 else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK) 234 else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK)
222 i->setHardwareName("Loopback"); 235 i->setHardwareName("Loopback");
223 else 236 else
224 i->setHardwareName("Unknown"); 237 i->setHardwareName("Unknown");
225 238
226 qWarning("Adding interface %s to interfaceNames\n", ifr.ifr_name); 239 qWarning("Adding interface %s to interfaceNames\n", ifr.ifr_name);
227 interfaceNames.insert(i->getInterfaceName(), i); 240 interfaceNames.insert(i->getInterfaceName(), i);
228 updateInterface(i); 241 updateInterface(i);
229 connect(i, SIGNAL(updateInterface(Interface *)), 242 connect(i, SIGNAL(updateInterface(Interface *)),
230 this, SLOT(updateInterface(Interface *))); 243 this, SLOT(updateInterface(Interface *)));
231 } 244 }
232 // now lets ask the plugins too ;) 245 // now lets ask the plugins too ;)
233 QMap<Module*, QLibrary*>::Iterator it; 246 QMap<Module*, QLibrary*>::Iterator it;
234 QList<Interface> ilist; 247 QList<Interface> ilist;
235 for( it = libraries.begin(); it != libraries.end(); ++it ){ 248 for( it = libraries.begin(); it != libraries.end(); ++it ){
236 if(it.key()){ 249 if(it.key()){
237 ilist = it.key()->getInterfaces(); 250 ilist = it.key()->getInterfaces();
238 for( i = ilist.first(); i != 0; i = ilist.next() ){ 251 for( i = ilist.first(); i != 0; i = ilist.next() ){
239 qWarning("Adding interface %s to interfaceNames\n", i->getInterfaceName().latin1() ); 252 qWarning("Adding interface %s to interfaceNames\n", i->getInterfaceName().latin1() );
240 interfaceNames.insert(i->getInterfaceName(), i); 253 interfaceNames.insert(i->getInterfaceName(), i);
241 updateInterface(i); 254 updateInterface(i);
242 connect(i, SIGNAL(updateInterface(Interface *)), 255 connect(i, SIGNAL(updateInterface(Interface *)),
243 this, SLOT(updateInterface(Interface *))); 256 this, SLOT(updateInterface(Interface *)));
244 } 257 }
245 } 258 }
246 } 259 }
247} 260}
248 261
249/** 262/**
250 * Load all modules that are found in the path 263 * Load all modules that are found in the path
251 * @param path a directory that is scaned for any plugins that can be loaded 264 * @param path a directory that is scaned for any plugins that can be loaded
252 * and attempts to load them 265 * and attempts to load them
253 */ 266 */
254void MainWindowImp::loadModules(const QString &path){ 267void MainWindowImp::loadModules(const QString &path){
255#ifdef DEBUG 268#ifdef DEBUG
256 qDebug("MainWindowImp::loadModules: %s", path.latin1()); 269 qDebug("MainWindowImp::loadModules: %s", path.latin1());
257#endif 270#endif
258 QDir d(path); 271 QDir d(path);
259 if(!d.exists()) 272 if(!d.exists())
260 return; 273 return;
261 274
262 // Don't want sym links 275 // Don't want sym links
263 d.setFilter( QDir::Files | QDir::NoSymLinks ); 276 d.setFilter( QDir::Files | QDir::NoSymLinks );
264 const QFileInfoList *list = d.entryInfoList(); 277 const QFileInfoList *list = d.entryInfoList();
265 QFileInfoListIterator it( *list ); 278 QFileInfoListIterator it( *list );
266 QFileInfo *fi; 279 QFileInfo *fi;
267 while ( (fi=it.current()) ) { 280 while ( (fi=it.current()) ) {
268#ifdef QWS 281#ifdef QWS
269 if(fi->fileName().contains(".so")){ 282 if(fi->fileName().contains(".so")){
270#else 283#else
271 if(fi->fileName().contains(".so") && fi->fileName().contains("networksettings_")){ 284 if(fi->fileName().contains(".so") && fi->fileName().contains("networksettings_")){
272#endif 285#endif
273 loadPlugin(path + "/" + fi->fileName()); 286 loadPlugin(path + "/" + fi->fileName());
274 qDebug("loaded plugin: >%s< ",QString(path + "/" + fi->fileName()).latin1()); 287 qDebug("loaded plugin: >%s< ",QString(path + "/" + fi->fileName()).latin1());
275 } 288 }
276 ++it; 289 ++it;
277 } 290 }
278} 291}
279 292
280/** 293/**
281 * Attempt to load a function and resolve a function. 294 * Attempt to load a function and resolve a function.
282 * @param pluginFileName - the name of the file in which to attempt to load 295 * @param pluginFileName - the name of the file in which to attempt to load
283 * @param resolveString - function pointer to resolve 296 * @param resolveString - function pointer to resolve
284 * @return pointer to the function with name resolveString or NULL 297 * @return pointer to the function with name resolveString or NULL
285 */ 298 */
286Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString){ 299Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString){
287#ifdef DEBUG 300#ifdef DEBUG
288 qDebug("MainWindowImp::loadPlugin: %s: resolving %s", pluginFileName.latin1(), resolveString.latin1()); 301 qDebug("MainWindowImp::loadPlugin: %s: resolving %s", pluginFileName.latin1(), resolveString.latin1());
289#endif 302#endif
290#ifdef QWS 303#ifdef QWS
291 QLibrary *lib = new QLibrary(pluginFileName); 304 QLibrary *lib = new QLibrary(pluginFileName);
292 void *functionPointer = lib->resolve(resolveString); 305 void *functionPointer = lib->resolve(resolveString);
293 if( !functionPointer ){ 306 if( !functionPointer ){
294#ifdef DEBUG 307#ifdef DEBUG
295 qDebug("MainWindowImp::loadPlugin: Warning: %s is not a plugin", pluginFileName.latin1()); 308 qDebug("MainWindowImp::loadPlugin: Warning: %s is not a plugin", pluginFileName.latin1());
296#endif 309#endif
297 delete lib; 310 delete lib;
298 return NULL; 311 return NULL;
299 } 312 }
300 // Try to get an object. 313 // Try to get an object.
301 Module *object = ((Module* (*)()) functionPointer)(); 314 Module *object = ((Module* (*)()) functionPointer)();
302 if(object == NULL){ 315 if(object == NULL){
303#ifdef DEBUG 316#ifdef DEBUG
304 qDebug("MainWindowImp: Couldn't create object, but did load library!"); 317 qDebug("MainWindowImp: Couldn't create object, but did load library!");
305#endif 318#endif
306 delete lib; 319 delete lib;
307 return NULL; 320 return NULL;
308 } 321 }
309 322
323 m_handledIfaces += object->handledInterfaceNames();
310 // Store for deletion later 324 // Store for deletion later
311 libraries.insert(object, lib); 325 libraries.insert(object, lib);
312 return object; 326 return object;
313 327
314#else 328#else
315 QLibrary *lib = loader->library(pluginFileName); 329 QLibrary *lib = loader->library(pluginFileName);
316 if( !lib || !lib->hasSymbol(resolveString) ){ 330 if( !lib || !lib->hasSymbol(resolveString) ){
317 qDebug(QString("MainWindowImp::loadPlugin: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1()); 331 qDebug(QString("MainWindowImp::loadPlugin: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1());
318 return NULL; 332 return NULL;
319 } 333 }
320 // Try to get an object. 334 // Try to get an object.
321 Module *object = ((Module* (*)()) lib->symbol(resolveString))(); 335 Module *object = ((Module* (*)()) lib->symbol(resolveString))();
322 if(object == NULL){ 336 if(object == NULL){
323#ifdef DEBUG 337#ifdef DEBUG
324 qDebug("MainWindowImp: Couldn't create object, but did load library!"); 338 qDebug("MainWindowImp: Couldn't create object, but did load library!");
325#endif 339#endif
326 return NULL; 340 return NULL;
327 } 341 }
328#ifdef DEBUG 342#ifdef DEBUG
329 qDebug("MainWindowImp::loadPlugin:: Found object, storing."); 343 qDebug("MainWindowImp::loadPlugin:: Found object, storing.");
330#endif 344#endif
331 // Store for deletion later 345 // Store for deletion later
332 libraries.insert(object, lib); 346 libraries.insert(object, lib);
333 return object; 347 return object;
334#endif 348#endif
335} 349}
336 350
337/** 351/**
338 * The Add button was clicked. Bring up the add dialog and if OK is hit 352 * The Add button was clicked. Bring up the add dialog and if OK is hit
339 * load the plugin and append it to the list 353 * load the plugin and append it to the list
340 */ 354 */
341void MainWindowImp::addClicked(){ 355void MainWindowImp::addClicked(){
342 QMap<Module*, QLibrary*>::Iterator it; 356 QMap<Module*, QLibrary*>::Iterator it;
343 QMap<QString, QString> list; 357 QMap<QString, QString> list;
344 QMap<QString, Module*> newInterfaceOwners; 358 QMap<QString, Module*> newInterfaceOwners;
345 359
346 for( it = libraries.begin(); it != libraries.end(); ++it ){ 360 for( it = libraries.begin(); it != libraries.end(); ++it ){
347 if(it.key()){ 361 if(it.key()){
348 (it.key())->possibleNewInterfaces(list); 362 (it.key())->possibleNewInterfaces(list);
349 } 363 }
350 } 364 }
351 // See if the list has anything that we can add. 365 // See if the list has anything that we can add.
352 if(list.count() == 0){ 366 if(list.count() == 0){
353 QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok); 367 QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok);
354 return; 368 return;
355 } 369 }
356 AddConnectionImp addNewConnection(this, "AddConnectionImp", true); 370 AddConnectionImp addNewConnection(this, "AddConnectionImp", true);
357 addNewConnection.addConnections(list); 371 addNewConnection.addConnections(list);
358 addNewConnection.showMaximized(); 372 addNewConnection.showMaximized();
359 if(QDialog::Accepted == addNewConnection.exec()){ 373 if(QDialog::Accepted == addNewConnection.exec()){
360 QListViewItem *item = addNewConnection.registeredServicesList->currentItem(); 374 QListViewItem *item = addNewConnection.registeredServicesList->currentItem();
361 if(!item) 375 if(!item)
362 return; 376 return;
363 377
364 for( it = libraries.begin(); it != libraries.end(); ++it ){ 378 for( it = libraries.begin(); it != libraries.end(); ++it ){
365 if(it.key()){ 379 if(it.key()){
366 Interface *i = (it.key())->addNewInterface(item->text(0)); 380 Interface *i = (it.key())->addNewInterface(item->text(0));
367 if(i){ 381 if(i){
368 qDebug("iface name %s",i->getInterfaceName().latin1()); 382 qDebug("iface name %s",i->getInterfaceName().latin1());
369 interfaceNames.insert(i->getInterfaceName(), i); 383 interfaceNames.insert(i->getInterfaceName(), i);
370 updateInterface(i); 384 updateInterface(i);
371 } 385 }
372 } 386 }
373 } 387 }
374 } 388 }
375} 389}
376 390
377/** 391/**
378 * Prompt the user to see if they really want to do this. 392 * Prompt the user to see if they really want to do this.
379 * If they do then remove from the list and unload. 393 * If they do then remove from the list and unload.
380 */ 394 */
381void MainWindowImp::removeClicked(){ 395void MainWindowImp::removeClicked(){
382 QListViewItem *item = connectionList->currentItem(); 396 QListViewItem *item = connectionList->currentItem();
383 if(!item) { 397 if(!item) {
384 QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); 398 QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok);
385 return; 399 return;
386 } 400 }
387 401
388 Interface *i = interfaceItems[item]; 402 Interface *i = interfaceItems[item];
389 if(i->getModuleOwner() == NULL){ 403 if(i->getModuleOwner() == NULL){
390 QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok); 404 QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok);
391 } 405 }
392 else{ 406 else{
393 if(!i->getModuleOwner()->remove(i)) 407 if(!i->getModuleOwner()->remove(i))
394 QMessageBox::information(this, tr("Error"), tr("Unable to remove."), QMessageBox::Ok); 408 QMessageBox::information(this, tr("Error"), tr("Unable to remove."), QMessageBox::Ok);
395 else{ 409 else{
396 delete item; 410 delete item;
397// QMessageBox::information(this, "Success", "Interface was removed.", QMessageBox::Ok); 411// QMessageBox::information(this, "Success", "Interface was removed.", QMessageBox::Ok);
398 } 412 }
399 } 413 }
400} 414}
401 415
402/** 416/**
403 * Pull up the configure about the currently selected interface. 417 * Pull up the configure about the currently selected interface.
404 * Report an error if no interface is selected. 418 * Report an error if no interface is selected.
405 * If the interface has a module owner then request its configure. 419 * If the interface has a module owner then request its configure.
406 */ 420 */
407void MainWindowImp::configureClicked(){ 421void MainWindowImp::configureClicked(){
408 QListViewItem *item = connectionList->currentItem(); 422 QListViewItem *item = connectionList->currentItem();
409 if(!item){ 423 if(!item){
410 QMessageBox::information(this, tr("Sorry"),tr("Please select an interface first."), QMessageBox::Ok); 424 QMessageBox::information(this, tr("Sorry"),tr("Please select an interface first."), QMessageBox::Ok);
411 return; 425 return;
412 } 426 }
413 427
414 QString currentProfileText = currentProfileLabel->text(); 428 QString currentProfileText = currentProfileLabel->text();
415 if(currentProfileText.upper() == "ALL"); 429 if(currentProfileText.upper() == "ALL");
416 currentProfileText = ""; 430 currentProfileText = "";
417 431
418 Interface *i = interfaceItems[item]; 432 Interface *i = interfaceItems[item];
419 433
420 if(i->getModuleOwner()){ 434 if(i->getModuleOwner()){
421 QWidget *moduleConfigure = i->getModuleOwner()->configure(i); 435 QWidget *moduleConfigure = i->getModuleOwner()->configure(i);
422 if(moduleConfigure != NULL){ 436 if(moduleConfigure != NULL){
423 i->getModuleOwner()->setProfile(currentProfileText); 437 i->getModuleOwner()->setProfile(currentProfileText);
424 moduleConfigure->showMaximized(); 438 moduleConfigure->showMaximized();
425 return; 439 return;
426 } 440 }
427 } 441 }
428 442
429 InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(this, "InterfaceSetupImp", i, true, Qt::WDestructiveClose ); 443 InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(this, "InterfaceSetupImp", i, true, Qt::WDestructiveClose | Qt::WStyle_ContextHelp );
430 configure->setProfile(currentProfileText); 444 configure->setProfile(currentProfileText);
431 configure->showMaximized(); 445 configure->showMaximized();
432} 446}
433 447
434/** 448/**
435 * Pull up the information about the currently selected interface. 449 * Pull up the information about the currently selected interface.
436 * Report an error if no interface is selected. 450 * Report an error if no interface is selected.
437 * If the interface has a module owner then request its configure. 451 * If the interface has a module owner then request its configure.
438 */ 452 */
439void MainWindowImp::informationClicked(){ 453void MainWindowImp::informationClicked(){
440 QListViewItem *item = connectionList->currentItem(); 454 QListViewItem *item = connectionList->currentItem();
441 if(!item){ 455 if(!item){
442 QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); 456 QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok);
443 return; 457 return;
444 } 458 }
445 459
446 Interface *i = interfaceItems[item]; 460 Interface *i = interfaceItems[item];
447// if(!i->isAttached()){ 461// if(!i->isAttached()){
448// QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok); 462// QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok);
449// return; 463// return;
450// } 464// }
451 465
452 if(i->getModuleOwner()){ 466 if(i->getModuleOwner()){
453 QWidget *moduleInformation = i->getModuleOwner()->information(i); 467 QWidget *moduleInformation = i->getModuleOwner()->information(i);
454 if(moduleInformation != NULL){ 468 if(moduleInformation != NULL){
455 moduleInformation->showMaximized(); 469 moduleInformation->showMaximized();
456#ifdef DEBUG 470#ifdef DEBUG
457 qDebug("MainWindowImp::informationClicked:: Module owner has created, we showed."); 471 qDebug("MainWindowImp::informationClicked:: Module owner has created, we showed.");
458#endif 472#endif
459 return; 473 return;
460 } 474 }
461 } 475 }
462 InterfaceInformationImp *information = new InterfaceInformationImp(this, "InterfaceSetupImp", i, Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog); 476 InterfaceInformationImp *information = new InterfaceInformationImp(this, "InterfaceSetupImp", i, Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog | Qt::WStyle_ContextHelp);
463 information->showMaximized(); 477 information->showMaximized();
464} 478}
465 479
466/** 480/**
467 * Update this interface. If no QListViewItem exists create one. 481 * Update this interface. If no QListViewItem exists create one.
468 * @param Interface* pointer to the interface that needs to be updated. 482 * @param Interface* pointer to the interface that needs to be updated.
469 */ 483 */
470void MainWindowImp::updateInterface(Interface *i){ 484void MainWindowImp::updateInterface(Interface *i){
471 if(!advancedUserMode){ 485 if(!advancedUserMode){
472 if(i->getInterfaceName() == "lo") 486 if(i->getInterfaceName() == "lo")
473 return; 487 return;
474 } 488 }
475 489
476 QListViewItem *item = NULL; 490 QListViewItem *item = NULL;
477 491
478 // Find the interface, making it if needed. 492 // Find the interface, making it if needed.
479 if(items.find(i) == items.end()){ 493 if(items.find(i) == items.end()){
480 item = new QListViewItem(connectionList, "", "", ""); 494 item = new QListViewItem(connectionList, "", "", "");
481 // See if you can't find a module owner for this interface 495 // See if you can't find a module owner for this interface
482 QMap<Module*, QLibrary*>::Iterator it; 496 QMap<Module*, QLibrary*>::Iterator it;
483 for( it = libraries.begin(); it != libraries.end(); ++it ){ 497 for( it = libraries.begin(); it != libraries.end(); ++it ){
484 if(it.key()->isOwner(i)) 498 if(it.key()->isOwner(i))
485 i->setModuleOwner(it.key()); 499 i->setModuleOwner(it.key());
486 } 500 }
487 items.insert(i, item); 501 items.insert(i, item);
488 interfaceItems.insert(item, i); 502 interfaceItems.insert(item, i);
489 } 503 }
490 else 504 else
491 item = items[i]; 505 item = items[i];
492 506
493 // Update the icons and information 507 // Update the icons and information
494#ifdef QWS 508#ifdef QWS
495 item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down"))); 509 item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down")));
496#else 510#else
497 item->setPixmap(0, (SmallIcon(i->getStatus() ? "up": "down"))); 511 item->setPixmap(0, (SmallIcon(i->getStatus() ? "up": "down")));
498#endif 512#endif
499 513
500 QString typeName = "lan"; 514 QString typeName = "lan";
501 if(i->getInterfaceName() == "lo") 515 if(i->getInterfaceName() == "lo")
502 typeName = "lo"; 516 typeName = "lo";
503 if(i->getInterfaceName().contains("irda")) 517 if(i->getInterfaceName().contains("irda"))
504 typeName = "irda"; 518 typeName = "irda";
505 if(i->getInterfaceName().contains("wlan")) 519 if(i->getInterfaceName().contains("wlan"))
506 typeName = "wlan"; 520 typeName = "wlan";
507 if(i->getInterfaceName().contains("usb")) 521 if(i->getInterfaceName().contains("usb"))
508 typeName = "usb"; 522 typeName = "usb";
509 523
510 if(!i->isAttached()) 524 if(!i->isAttached())
511 typeName = "connect_no"; 525 typeName = "connect_no";
512 // Actually try to use the Module 526 // Actually try to use the Module
513 if(i->getModuleOwner() != NULL) 527 if(i->getModuleOwner() != NULL)
514 typeName = i->getModuleOwner()->getPixmapName(i); 528 typeName = i->getModuleOwner()->getPixmapName(i);
515 529
516#ifdef QWS 530#ifdef QWS
517 item->setPixmap(1, (Resource::loadPixmap(QString("networksettings/") + typeName))); 531 item->setPixmap(1, (Resource::loadPixmap(QString("networksettings/") + typeName)));
518#else 532#else
519 item->setPixmap(1, (SmallIcon(typeName))); 533 item->setPixmap(1, (SmallIcon(typeName)));
520#endif 534#endif
521 item->setText(2, i->getHardwareName()); 535 item->setText(2, i->getHardwareName());
522 item->setText(3, QString("(%1)").arg(i->getInterfaceName())); 536 item->setText(3, QString("(%1)").arg(i->getInterfaceName()));
523 item->setText(4, (i->getStatus()) ? i->getIp() : QString("")); 537 item->setText(4, (i->getStatus()) ? i->getIp() : QString(""));
524} 538}
525 539
526void MainWindowImp::newProfileChanged(const QString& newText){ 540void MainWindowImp::newProfileChanged(const QString& newText){
527 if(newText.length() > 0) 541 if(newText.length() > 0)
528 newProfileButton->setEnabled(true); 542 newProfileButton->setEnabled(true);
529 else 543 else
530 newProfileButton->setEnabled(false); 544 newProfileButton->setEnabled(false);
531} 545}
532 546
533/** 547/**
534 * Adds a new profile to the list of profiles. 548 * Adds a new profile to the list of profiles.
535 * Don't add profiles that already exists. 549 * Don't add profiles that already exists.
536 * Appends to the list and QStringList 550 * Appends to the list and QStringList
537 */ 551 */
538void MainWindowImp::addProfile(){ 552void MainWindowImp::addProfile(){
539 QString newProfileName = newProfile->text(); 553 QString newProfileName = newProfile->text();
540 if(profiles.grep(newProfileName).count() > 0){ 554 if(profiles.grep(newProfileName).count() > 0){
541 QMessageBox::information(this, "Can't Add","Profile already exists.", QMessageBox::Ok); 555 QMessageBox::information(this, "Can't Add","Profile already exists.", QMessageBox::Ok);
542 return; 556 return;
543 } 557 }
544 profiles.append(newProfileName); 558 profiles.append(newProfileName);
545 profilesList->insertItem(newProfileName); 559 profilesList->insertItem(newProfileName);
546} 560}
547 561
548/** 562/**
549 * Removes the currently selected profile in the combo. 563 * Removes the currently selected profile in the combo.
550 * Doesn't delete if there are less then 2 profiles. 564 * Doesn't delete if there are less then 2 profiles.
551 */ 565 */
552void MainWindowImp::removeProfile(){ 566void MainWindowImp::removeProfile(){
553 if(profilesList->count() <= 1){ 567 if(profilesList->count() <= 1){
554 QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", QMessageBox::Ok); 568 QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", QMessageBox::Ok);
555 return; 569 return;
556 } 570 }
557 QString profileToRemove = profilesList->currentText(); 571 QString profileToRemove = profilesList->currentText();
558 if(profileToRemove == "All"){ 572 if(profileToRemove == "All"){
559 QMessageBox::information(this, "Can't remove.","Can't remove default.", QMessageBox::Ok); 573 QMessageBox::information(this, "Can't remove.","Can't remove default.", QMessageBox::Ok);
560 return; 574 return;
561 } 575 }
562 // Can't remove the curent profile 576 // Can't remove the curent profile
563 if(profileToRemove == currentProfileLabel->text()){ 577 if(profileToRemove == currentProfileLabel->text()){
564 QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), QMessageBox::Ok); 578 QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), QMessageBox::Ok);
565 return; 579 return;
566 580
567 } 581 }
568 582
569 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){ 583 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){
570 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), "")); 584 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), ""));
571 profilesList->clear(); 585 profilesList->clear();
572 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) 586 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
573 profilesList->insertItem((*it)); 587 profilesList->insertItem((*it));
574 588
575 // Remove any interface settings and mappings. 589 // Remove any interface settings and mappings.
576 Interfaces interfaces; 590 Interfaces interfaces;
577 // Go through them one by one 591 // Go through them one by one
578 QMap<Interface*, QListViewItem*>::Iterator it; 592 QMap<Interface*, QListViewItem*>::Iterator it;
579 for( it = items.begin(); it != items.end(); ++it ){ 593 for( it = items.begin(); it != items.end(); ++it ){
580 QString interfaceName = it.key()->getInterfaceName(); 594 QString interfaceName = it.key()->getInterfaceName();
581 qDebug(interfaceName.latin1()); 595 qDebug(interfaceName.latin1());
582 if(interfaces.setInterface(interfaceName + "_" + profileToRemove)){ 596 if(interfaces.setInterface(interfaceName + "_" + profileToRemove)){
583 interfaces.removeInterface(); 597 interfaces.removeInterface();
584 if(interfaces.setMapping(interfaceName)){ 598 if(interfaces.setMapping(interfaceName)){
585 if(profilesList->count() == 1) 599 if(profilesList->count() == 1)
586 interfaces.removeMapping(); 600 interfaces.removeMapping();
587 else{ 601 else{
588 interfaces.removeMap("map", interfaceName + "_" + profileToRemove); 602 interfaces.removeMap("map", interfaceName + "_" + profileToRemove);
589 } 603 }
590 } 604 }
591 interfaces.write(); 605 interfaces.write();
592 break; 606 break;
593 } 607 }
594 } 608 }
595 } 609 }
596} 610}
597 611
598/** 612/**
599 * A new profile has been selected, change. 613 * A new profile has been selected, change.
600 * @param newProfile the new profile. 614 * @param newProfile the new profile.
601 */ 615 */
602void MainWindowImp::changeProfile(){ 616void MainWindowImp::changeProfile(){
603 if(profilesList->currentItem() == -1){ 617 if(profilesList->currentItem() == -1){
604 QMessageBox::information(this, "Can't Change.","Please select a profile.", QMessageBox::Ok); 618 QMessageBox::information(this, "Can't Change.","Please select a profile.", QMessageBox::Ok);
605 return; 619 return;
606 } 620 }
607 QString newProfile = profilesList->text(profilesList->currentItem()); 621 QString newProfile = profilesList->text(profilesList->currentItem());
608 if(newProfile != currentProfileLabel->text()){ 622 if(newProfile != currentProfileLabel->text()){
609 currentProfileLabel->setText(newProfile); 623 currentProfileLabel->setText(newProfile);
610 QFile::remove(scheme); 624 QFile::remove(scheme);
611 QFile file(scheme); 625 QFile file(scheme);
612 if ( file.open(IO_ReadWrite) ) { 626 if ( file.open(IO_ReadWrite) ) {
613 QTextStream stream( &file ); 627 QTextStream stream( &file );
614 stream << QString("SCHEME=%1").arg(newProfile); 628 stream << QString("SCHEME=%1").arg(newProfile);
615 file.close(); 629 file.close();
616 } 630 }
617 // restart all up devices? 631 // restart all up devices?
618 if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok){ 632 if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok){
619 // Go through them one by one 633 // Go through them one by one
620 QMap<Interface*, QListViewItem*>::Iterator it; 634 QMap<Interface*, QListViewItem*>::Iterator it;
621 for( it = items.begin(); it != items.end(); ++it ){ 635 for( it = items.begin(); it != items.end(); ++it ){
622 if(it.key()->getStatus() == true) 636 if(it.key()->getStatus() == true)
623 it.key()->restart(); 637 it.key()->restart();
624 } 638 }
625 } 639 }
626 } 640 }
627 // TODO change the profile in the modules 641 // TODO change the profile in the modules
628} 642}
629 643
630 644
631void MainWindowImp::makeChannel() 645void MainWindowImp::makeChannel()
632{ 646{
633 channel = new QCopChannel( "QPE/Application/networksettings", this ); 647 channel = new QCopChannel( "QPE/Application/networksettings", this );
634 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), 648 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
635 this, SLOT(receive(const QCString&, const QByteArray&)) ); 649 this, SLOT(receive(const QCString&, const QByteArray&)) );
636} 650}
637 651
638void MainWindowImp::receive(const QCString &msg, const QByteArray &arg) 652void MainWindowImp::receive(const QCString &msg, const QByteArray &arg)
639{ 653{
640 bool found = false; 654 bool found = false;
641 qDebug("MainWindowImp::receive QCop msg >"+msg+"<"); 655 qDebug("MainWindowImp::receive QCop msg >"+msg+"<");
642
643 if (msg == "raise") { 656 if (msg == "raise") {
644 raise(); 657 raise();
645 return; 658 return;
646 } 659 }
647 660
648 QString dest = msg.left(msg.find("(")); 661 QString dest = msg.left(msg.find("("));
649 QCString param = msg.right(msg.length() - msg.find("(") - 1); 662 QCString param = msg.right(msg.length() - msg.find("(") - 1);
650 param = param.left( param.length() - 1 ); 663 param = param.left( param.length() - 1 );
651 qDebug("dest >%s< param >"+param+"<",dest.latin1()); 664 qDebug("dest >%s< param >"+param+"<",dest.latin1());
652 665
653 QMap<Module*, QLibrary*>::Iterator it; 666 QMap<Module*, QLibrary*>::Iterator it;
654 for( it = libraries.begin(); it != libraries.end(); ++it ){ 667 for( it = libraries.begin(); it != libraries.end(); ++it ){
655 qDebug("plugin >%s<", it.key()->type().latin1() ); 668 qDebug("plugin >%s<", it.key()->type().latin1() );
656 if(it.key()->type() == dest){ 669 if(it.key()->type() == dest){
657 it.key()->receive( param, arg ); 670 it.key()->receive( param, arg );
658 found = true; 671 found = true;
659 } 672 }
660 } 673 }
661 674
662 675
663 if (found) QPEApplication::setKeepRunning(); 676 if (found) QPEApplication::setKeepRunning();
664 else qDebug("Huh what do ya want"); 677 else qDebug("Huh what do ya want");
665} 678}
diff --git a/noncore/settings/networksettings/mainwindowimp.h b/noncore/settings/networksettings/mainwindowimp.h
index a553f75..451835b 100644
--- a/noncore/settings/networksettings/mainwindowimp.h
+++ b/noncore/settings/networksettings/mainwindowimp.h
@@ -1,73 +1,74 @@
1#ifndef MAINWINOWIMP_H 1#ifndef MAINWINOWIMP_H
2#define MAINWINOWIMP_H 2#define MAINWINOWIMP_H
3 3
4#include "mainwindow.h" 4#include "mainwindow.h"
5#include <qmap.h> 5#include <qmap.h>
6#include <qstringlist.h> 6#include <qstringlist.h>
7 7
8class Module; 8class Module;
9class Interface; 9class Interface;
10class QLibrary; 10class QLibrary;
11class KProcess; 11class KProcess;
12class QCopChannel; 12class QCopChannel;
13#ifdef QWS 13#ifdef QWS
14class QLibrary; 14class QLibrary;
15#else 15#else
16class KLibrary; 16class KLibrary;
17class KLibLoader; 17class KLibLoader;
18#define QLibrary KLibrary 18#define QLibrary KLibrary
19#endif 19#endif
20 20
21 21
22class MainWindowImp : public MainWindow { 22class MainWindowImp : public MainWindow {
23 Q_OBJECT 23 Q_OBJECT
24 24
25public: 25public:
26 MainWindowImp(QWidget *parent=0, const char *name=0); 26 MainWindowImp(QWidget *parent=0, const char *name=0);
27 ~MainWindowImp(); 27 ~MainWindowImp();
28 28
29 QCopChannel *channel; 29 QCopChannel *channel;
30 30
31private slots: 31private slots:
32 void getAllInterfaces(); 32 void getAllInterfaces();
33 33
34 void addClicked(); 34 void addClicked();
35 void removeClicked(); 35 void removeClicked();
36 void configureClicked(); 36 void configureClicked();
37 void informationClicked(); 37 void informationClicked();
38 38
39 void addProfile(); 39 void addProfile();
40 void removeProfile(); 40 void removeProfile();
41 void changeProfile(); 41 void changeProfile();
42 42
43 void updateInterface(Interface *i); 43 void updateInterface(Interface *i);
44 void newProfileChanged(const QString& newText); 44 void newProfileChanged(const QString& newText);
45 45
46 void receive (const QCString &, const QByteArray &); 46 void receive (const QCString &, const QByteArray &);
47 47
48private: 48private:
49 void makeChannel(); 49 void makeChannel();
50 void loadModules(const QString &path); 50 void loadModules(const QString &path);
51 51
52 Module* loadPlugin(const QString &pluginFileName, 52 Module* loadPlugin(const QString &pluginFileName,
53 const QString &resolveString = "create_plugin"); 53 const QString &resolveString = "create_plugin");
54 54
55 // For our local list of names 55 // For our local list of names
56 QMap<QString, Interface*> interfaceNames; 56 QMap<QString, Interface*> interfaceNames;
57 57
58 QMap<Module*, QLibrary*> libraries; 58 QMap<Module*, QLibrary*> libraries;
59 QMap<Interface*, QListViewItem*> items; 59 QMap<Interface*, QListViewItem*> items;
60 QMap<QListViewItem*, Interface*> interfaceItems; 60 QMap<QListViewItem*, Interface*> interfaceItems;
61 61 QStringList m_handledIfaces;
62
62 QMap<KProcess*, QString> threads; 63 QMap<KProcess*, QString> threads;
63 QStringList profiles; 64 QStringList profiles;
64 65
65 bool advancedUserMode; 66 bool advancedUserMode;
66 QString scheme; 67 QString scheme;
67#ifndef QWS 68#ifndef QWS
68 KLibLoader *loader; 69 KLibLoader *loader;
69#endif 70#endif
70}; 71};
71 72
72#endif // MAINWINOWIMP_H 73#endif // MAINWINOWIMP_H
73 74
diff --git a/noncore/settings/networksettings/module.h b/noncore/settings/networksettings/module.h
index db74394..f7d8046 100644
--- a/noncore/settings/networksettings/module.h
+++ b/noncore/settings/networksettings/module.h
@@ -1,102 +1,113 @@
1#ifndef NETCONF_MODULE_H 1#ifndef NETCONF_MODULE_H
2#define NETCONF_MODULE_H 2#define NETCONF_MODULE_H
3 3
4#include <qobject.h> 4#include <qobject.h>
5#if QT_VERSION < 300 5#if QT_VERSION < 300
6#include <qlist.h> 6#include <qlist.h>
7#else 7#else
8#include <qptrlist.h> 8#include <qptrlist.h>
9#endif 9#endif
10#include <qmap.h> 10#include <qmap.h>
11#include "interface.h" 11#include "interface.h"
12 12
13class QWidget; 13class QWidget;
14class QTabWidget; 14class QTabWidget;
15 15
16class Module : QObject{ 16class Module : QObject{
17 17
18signals: 18signals:
19 void updateInterface(Interface *i); 19 void updateInterface(Interface *i);
20 20
21 21
22public: 22public:
23 Module(){}; 23 Module(){};
24 24
25 /** 25 /**
26 * The type of the plugin 26 * The type of the plugin
27 * and the name of the dcop call 27 * and the name of the dcop call
28 */ 28 */
29 virtual const QString type() = 0; 29 virtual const QString type() = 0;
30 30
31 /** 31 /**
32 * The current profile has been changed and the module should do any 32 * The current profile has been changed and the module should do any
33 * neccesary changes also. 33 * neccesary changes also.
34 * @param newProfile what the profile should be changed to. 34 * @param newProfile what the profile should be changed to.
35 */ 35 */
36 virtual void setProfile(const QString &newProfile) = 0; 36 virtual void setProfile(const QString &newProfile) = 0;
37 37
38 /** 38 /**
39 * get the icon name for this device. 39 * get the icon name for this device.
40 * @param Interface* can be used in determining the icon. 40 * @param Interface* can be used in determining the icon.
41 * @return QString the icon name (minus .png, .gif etc) 41 * @return QString the icon name (minus .png, .gif etc)
42 */ 42 */
43 virtual QString getPixmapName(Interface *) = 0; 43 virtual QString getPixmapName(Interface *) = 0;
44 44
45 /** 45 /**
46 * Check to see if the interface i is owned by this module. 46 * Check to see if the interface i is owned by this module.
47 * @param Interface* interface to check against 47 * @param Interface* interface to check against
48 * @return bool true if i is owned by this module, false otherwise. 48 * @return bool true if i is owned by this module, false otherwise.
49 */ 49 */
50 virtual bool isOwner(Interface *){ return false; }; 50 virtual bool isOwner(Interface *){ return false; };
51 51
52 /** 52 /**
53 * Create and return the WLANConfigure Module 53 * Create and return the WLANConfigure Module
54 * @param Interface *i the interface to configure. 54 * @param Interface *i the interface to configure.
55 * @return QWidget* pointer to this modules configure. 55 * @return QWidget* pointer to this modules configure.
56 */ 56 */
57 virtual QWidget *configure(Interface *){ return NULL; } ; 57 virtual QWidget *configure(Interface *){ return NULL; } ;
58 58
59 /** 59 /**
60 * Create, and return the Information Module 60 * Create, and return the Information Module
61 * @param Interface *i the interface to get info on. 61 * @param Interface *i the interface to get info on.
62 * @return QWidget* pointer to this modules info. 62 * @return QWidget* pointer to this modules info.
63 */ 63 */
64 virtual QWidget *information(Interface *){ return NULL; }; 64 virtual QWidget *information(Interface *){ return NULL; };
65 65
66 /** 66 /**
67 * Get all active (up or down) interfaces 67 * Get all active (up or down) interfaces
68 * @return QList<Interface> A list of interfaces that exsist that havn't 68 * @return QList<Interface> A list of interfaces that exsist that havn't
69 * been called by isOwner() 69 * been called by isOwner()
70 */ 70 */
71 virtual QList<Interface> getInterfaces() = 0; 71 virtual QList<Interface> getInterfaces() = 0;
72 72
73 /** 73 /**
74 * Adds possible new interfaces to the list (Example: usb(ppp), ir(ppp), 74 * Adds possible new interfaces to the list (Example: usb(ppp), ir(ppp),
75 * modem ppp) 75 * modem ppp)
76 */ 76 */
77 virtual void possibleNewInterfaces(QMap<QString, QString> &list) = 0; 77 virtual void possibleNewInterfaces(QMap<QString, QString> &list) = 0;
78 78
79 /** 79 /**
80 * Attempts to create a new interface from name 80 * Attempts to create a new interface from name
81 * @return Interface* NULL if it was unable to be created. 81 * @return Interface* NULL if it was unable to be created.
82 * @param name the type of interface to create 82 * @param name the type of interface to create
83 */ 83 */
84 virtual Interface *addNewInterface(const QString &name) = 0; 84 virtual Interface *addNewInterface(const QString &name) = 0;
85 85
86 /** 86 /**
87 * Attempts to remove the interface, doesn't delete i 87 * Attempts to remove the interface, doesn't delete i
88 * @return bool true if successfull, false otherwise. 88 * @return bool true if successfull, false otherwise.
89 */ 89 */
90 virtual bool remove(Interface* i) = 0; 90 virtual bool remove(Interface* i) = 0;
91 91
92 /** 92 /**
93 * get dcop calls 93 * get dcop calls
94 */ 94 */
95 virtual void receive(const QCString &msg, const QByteArray &arg) = 0; 95 virtual void receive(const QCString &msg, const QByteArray &arg) = 0;
96 96
97 QStringList handledInterfaceNames()const { return m_inter; }
98protected:
99 /**
100 * set which interfaceNames should not be shown cause they're handled
101 * internally of this module.. An already running ppp link or
102 * a tunnel...
103 */
104 void setHandledInterfaceNames( const QStringList& in) { m_inter = in; }
105
106private:
107 QStringList m_inter;
97}; 108};
98 109
99#endif 110#endif
100 111
101// module.h 112// module.h
102 113
diff --git a/noncore/settings/networksettings/ppp/TODO b/noncore/settings/networksettings/ppp/TODO
index 80fc5a6..14a1b3f 100644
--- a/noncore/settings/networksettings/ppp/TODO
+++ b/noncore/settings/networksettings/ppp/TODO
@@ -1,9 +1,3 @@
1- ask for password is non is set 1- impl. PPPData::copyaccount
2
3- stop pppd, i.e. fix interfaceinformationppp
4
5- update modem attribute inputs when modem has changed
6- impl. PPPData::copyaccount & PPPData::deleteAccount
7
8- check if the same interface device combination allready exists 2- check if the same interface device combination allready exists
9- fix layout of edit account, i.e. get it shown maximised 3- check if a deleted account or device exists in a config and ask the user
diff --git a/noncore/settings/networksettings/ppp/accounts.cpp b/noncore/settings/networksettings/ppp/accounts.cpp
index fa1c43b..28d8732 100644
--- a/noncore/settings/networksettings/ppp/accounts.cpp
+++ b/noncore/settings/networksettings/ppp/accounts.cpp
@@ -1,357 +1,323 @@
1/* 1/*
2 * kPPP: A pppd front end for the KDE project 2 * kPPP: A pppd front end for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * based on EzPPP: 9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter 10 * Copyright (C) 1997 Jay Painter
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#include <qdir.h> 27#include <qdir.h>
28#include <stdlib.h> 28#include <stdlib.h>
29#include <qlayout.h> 29#include <qlayout.h>
30#include <qtabwidget.h> 30#include <qtabwidget.h>
31#include <qtabdialog.h> 31#include <qtabdialog.h>
32#include <qwhatsthis.h> 32#include <qwhatsthis.h>
33#include <qmessagebox.h> 33#include <qmessagebox.h>
34 34
35#include <qapplication.h> 35#include <qapplication.h>
36#include <qbuttongroup.h> 36#include <qbuttongroup.h>
37#include <qmessagebox.h> 37#include <qmessagebox.h>
38#include <qvgroupbox.h> 38#include <qvgroupbox.h>
39 39
40#include "accounts.h" 40#include "accounts.h"
41#include "authwidget.h" 41#include "authwidget.h"
42#include "pppdata.h" 42#include "pppdata.h"
43#include "edit.h" 43#include "edit.h"
44 44
45void parseargs(char* buf, char** args); 45void parseargs(char* buf, char** args);
46 46
47AccountWidget::AccountWidget( PPPData *pd, QWidget *parent, const char *name ) 47
48 : QWidget( parent, name )//, _pppdata(pd) 48AccountWidget::AccountWidget( PPPData *pd, QWidget *parent, const char *name, WFlags f )
49 : ChooserWidget( pd, parent, name, f )
49{ 50{
50 _pppdata = pd;
51 QVBoxLayout *l1 = new QVBoxLayout(this, 10, 10);
52 accountlist_l = new QListBox(this);
53
54 connect(accountlist_l, SIGNAL(highlighted(int)),
55 this, SLOT(slotListBoxSelect(int)));
56 connect(accountlist_l, SIGNAL(selected(int)),
57 this, SLOT(editaccount()));
58 l1->addWidget(accountlist_l, 10);
59
60 edit_b = new QPushButton(tr("&Edit..."), this);
61 connect(edit_b, SIGNAL(clicked()), SLOT(editaccount()));
62 QWhatsThis::add(edit_b, tr("Allows you to modify the selected account"));
63 l1->addWidget(edit_b);
64 51
65 new_b = new QPushButton(tr("&New..."), this); 52 QWhatsThis::add(edit_b, tr("Allows you to modify the selected account"));
66 connect(new_b, SIGNAL(clicked()), SLOT(newaccount()));
67 l1->addWidget(new_b);
68 QWhatsThis::add(new_b, tr("Create a new dialup connection\n" 53 QWhatsThis::add(new_b, tr("Create a new dialup connection\n"
69 "to the Internet")); 54 "to the Internet"));
70
71 copy_b = new QPushButton(tr("Co&py"), this);
72 connect(copy_b, SIGNAL(clicked()), SLOT(copyaccount()));
73 l1->addWidget(copy_b);
74 QWhatsThis::add(copy_b, 55 QWhatsThis::add(copy_b,
75 tr("Makes a copy of the selected account. All\n" 56 tr("Makes a copy of the selected account. All\n"
76 "settings of the selected account are copied\n" 57 "settings of the selected account are copied\n"
77 "to a new account, that you can modify to fit your\n" 58 "to a new account, that you can modify to fit your\n"
78 "needs")); 59 "needs"));
79
80 delete_b = new QPushButton(tr("De&lete"), this);
81 connect(delete_b, SIGNAL(clicked()), SLOT(deleteaccount()));
82 l1->addWidget(delete_b);
83 QWhatsThis::add(delete_b, 60 QWhatsThis::add(delete_b,
84 tr("<p>Deletes the selected account\n\n" 61 tr("<p>Deletes the selected account\n\n"
85 "<font color=\"red\"><b>Use with care!</b></font>")); 62 "<font color=\"red\"><b>Use with care!</b></font>"));
86 63
87 QHBoxLayout *l12 = new QHBoxLayout;
88 l1->addStretch(1);
89 l1->addLayout(l12);
90 64
91 int currAccId = _pppdata->currentAccountID();
92 qDebug("currentAccountID %i", currAccId);
93 65
94 //load up account list from gppdata to the list box 66 copy_b->setEnabled( false ); //FIXME
95 if(_pppdata->count() > 0) { 67 // delete_b->setEnabled( false ); //FIXME
96 for(int i=0; i <= _pppdata->count()-1; i++) {
97 _pppdata->setAccountbyIndex(i);
98 accountlist_l->insertItem(_pppdata->accname());
99 }
100 }
101 _pppdata->setAccountbyIndex( currAccId );
102 68
103 qDebug("setting listview index to %i",_pppdata->currentAccountID() ); 69 listListbox->insertStringList(_pppdata->getAccountList());
104 accountlist_l->setCurrentItem( _pppdata->currentAccountID() );
105 slotListBoxSelect( _pppdata->currentAccountID() );
106 70
107 l1->activate(); 71 for (uint i = 0; i < listListbox->count(); i++){
72 if ( listListbox->text(i) == _pppdata->accname() )
73 listListbox->setCurrentItem( i );
74 }
108} 75}
109 76
110 77
111 78
112void AccountWidget::slotListBoxSelect(int idx) { 79void AccountWidget::slotListBoxSelect(int idx) {
113 delete_b->setEnabled((bool)(idx != -1)); 80 bool ok = _pppdata->setAccount( listListbox->text(idx) );
114 edit_b->setEnabled((bool)(idx != -1)); 81 ok = (bool)(idx != -1);
115 copy_b->setEnabled((bool)(idx != -1)); 82 delete_b->setEnabled(ok);
116 if(idx!=-1) { 83 edit_b->setEnabled(ok);
117 qDebug("setting account to %i", idx); 84//FIXME copy_b->setEnabled(ok);
118 QString account = _pppdata->accname();
119 _pppdata->setAccountbyIndex(accountlist_l->currentItem());
120 }
121} 85}
122 86
123void AccountWidget::editaccount() { 87void AccountWidget::edit() {
124 _pppdata->setAccount(accountlist_l->text(accountlist_l->currentItem())); 88 _pppdata->setAccount(listListbox->text(listListbox->currentItem()));
125 89
126 int result = doTab(); 90 int result = doTab();
127 91
128 if(result == QDialog::Accepted) { 92 if(result == QDialog::Accepted) {
129 accountlist_l->changeItem(_pppdata->accname(),accountlist_l->currentItem()); 93 listListbox->changeItem(_pppdata->accname(),listListbox->currentItem());
130// emit resetaccounts(); 94// emit resetaccounts();
131 _pppdata->save(); 95 _pppdata->save();
132 } 96 }
133} 97}
134 98
135 99
136void AccountWidget::newaccount() { 100void AccountWidget::create() {
137 101
138 if(accountlist_l->count() == MAX_ACCOUNTS) { 102// if(listListbox->count() == MAX_ACCOUNTS) {
139 QMessageBox::information(this, "sorry", 103// QMessageBox::information(this, "sorry",
140 tr("Maximum number of accounts reached.")); 104// tr("Maximum number of accounts reached."));
141 return; 105// return;
142 } 106// }
143 107
144 int result; 108 int result;
145 if (_pppdata->newaccount() == -1){ 109 if (_pppdata->newaccount() == -1){
146 qDebug("_pppdata->newaccount() == -1"); 110 qDebug("_pppdata->newaccount() == -1");
147 return; 111 return;
148 } 112 }
149 result = doTab(); 113 result = doTab();
150 114
151 if(result == QDialog::Accepted) { 115 if(result == QDialog::Accepted) {
152 accountlist_l->insertItem(_pppdata->accname()); 116 listListbox->insertItem(_pppdata->accname());
153 accountlist_l->setSelected(accountlist_l->findItem(_pppdata->accname()),true); 117 listListbox->setSelected(listListbox->findItem(_pppdata->accname()),true);
154 118
155 _pppdata->save(); 119 _pppdata->save();
156 } else 120 } else
157 _pppdata->deleteAccount(); 121 _pppdata->deleteAccount();
158} 122}
159 123
160 124
161void AccountWidget::copyaccount() { 125void AccountWidget::copy() {
162 if(accountlist_l->count() == MAX_ACCOUNTS) { 126// if(listListbox->count() == MAX_ACCOUNTS) {
163 QMessageBox::information(this, "sorry", tr("Maximum number of accounts reached.")); 127// QMessageBox::information(this, "sorry", tr("Maximum number of accounts reached."));
164 return; 128// return;
165 } 129// }
166 130
167 if(accountlist_l->currentItem()<0) { 131 if(listListbox->currentItem()<0) {
168 QMessageBox::information(this, "sorry", tr("No account selected.")); 132 QMessageBox::information(this, "sorry", tr("No account selected."));
169 return; 133 return;
170 } 134 }
171 135
172 _pppdata->copyaccount(accountlist_l->currentItem()); 136 _pppdata->copyaccount(listListbox->currentText());
173 137
174 accountlist_l->insertItem(_pppdata->accname()); 138 listListbox->insertItem(_pppdata->accname());
175// emit resetaccounts(); 139// emit resetaccounts();
176 _pppdata->save(); 140 _pppdata->save();
177} 141}
178 142
179 143
180void AccountWidget::deleteaccount() { 144void AccountWidget::remove() {
181 145
182 QString s = tr("Are you sure you want to delete\nthe account \"%1\"?") 146 QString s = tr("Are you sure you want to delete\nthe account \"%1\"?")
183 .arg(accountlist_l->text(accountlist_l->currentItem())); 147 .arg(listListbox->text(listListbox->currentItem()));
184 148
185 if(QMessageBox::warning(this,tr("Confirm"),s, 149 if(QMessageBox::warning(this,tr("Confirm"),s,
186 QMessageBox::Yes,QMessageBox::No 150 QMessageBox::Yes,QMessageBox::No
187 ) != QMessageBox::Yes) 151 ) != QMessageBox::Yes)
188 return; 152 return;
189 153
190 if(_pppdata->deleteAccount(accountlist_l->text(accountlist_l->currentItem()))) 154 if(_pppdata->deleteAccount(listListbox->text(listListbox->currentItem())))
191 accountlist_l->removeItem(accountlist_l->currentItem()); 155 listListbox->removeItem(listListbox->currentItem());
192 156
193 emit resetaccounts();
194 _pppdata->save();
195 157
196 slotListBoxSelect(accountlist_l->currentItem()); 158// emit resetaccounts();
159// _pppdata->save();
160
161
162 slotListBoxSelect(listListbox->currentItem());
197 163
198} 164}
199 165
200 166
201int AccountWidget::doTab(){ 167int AccountWidget::doTab(){
202 QDialog *dlg = new QDialog( 0, "newAccount", true ); 168 QDialog *dlg = new QDialog( 0, "newAccount", true, Qt::WStyle_ContextHelp );
203 QVBoxLayout *layout = new QVBoxLayout( dlg ); 169 QVBoxLayout *layout = new QVBoxLayout( dlg );
204 layout->setSpacing( 0 ); 170 layout->setSpacing( 0 );
205 layout->setMargin( 1 ); 171 layout->setMargin( 1 );
206 172
207 tabWindow = new QTabWidget( dlg, "tabWindow" ); 173 QTabWidget *tabWindow = new QTabWidget( dlg, "tabWindow" );
208 layout->addWidget( tabWindow ); 174 layout->addWidget( tabWindow );
209 175
210 bool isnewaccount; 176 bool isnewaccount;
211 177
212 if(_pppdata->accname().isEmpty()) { 178 if(_pppdata->accname().isEmpty()) {
213 dlg->setCaption(tr("New Account")); 179 dlg->setCaption(tr("New Account"));
214 isnewaccount = true; 180 isnewaccount = true;
215 } else { 181 } else {
216 QString tit = tr("Edit Account: "); 182 QString tit = tr("Edit Account: ");
217 tit += _pppdata->accname(); 183 tit += _pppdata->accname();
218 dlg->setCaption(tit); 184 dlg->setCaption(tit);
219 isnewaccount = false; 185 isnewaccount = false;
220 } 186 }
221 187
222// // DIAL WIDGET 188// // DIAL WIDGET
223 dial_w = new DialWidget( _pppdata, tabWindow, isnewaccount, "Dial Setup"); 189 dial_w = new DialWidget( _pppdata, tabWindow, isnewaccount, "Dial Setup");
224 tabWindow->addTab( dial_w, tr("Dial") ); 190 tabWindow->addTab( dial_w, tr("Dial") );
225 191
226// // AUTH WIDGET 192// // AUTH WIDGET
227 auth_w = new AuthWidget( _pppdata, tabWindow, isnewaccount, tr("Edit Login Script")); 193 auth_w = new AuthWidget( _pppdata, tabWindow, isnewaccount, tr("Edit Login Script"));
228 tabWindow->addTab( auth_w, tr("Authentication") ); 194 tabWindow->addTab( auth_w, tr("Authentication") );
229 195
230// // IP WIDGET 196// // IP WIDGET
231 ip_w = new IPWidget( _pppdata, tabWindow, isnewaccount, tr("IP Setup")); 197 ip_w = new IPWidget( _pppdata, tabWindow, isnewaccount, tr("IP Setup"));
232 tabWindow->addTab( ip_w, tr("IP") ); 198 tabWindow->addTab( ip_w, tr("IP") );
233 199
234// // GATEWAY WIDGET 200// // GATEWAY WIDGET
235 gateway_w = new GatewayWidget( _pppdata, tabWindow, isnewaccount, tr("Gateway Setup")); 201 gateway_w = new GatewayWidget( _pppdata, tabWindow, isnewaccount, tr("Gateway Setup"));
236 tabWindow->addTab( gateway_w, tr("Gateway") ); 202 tabWindow->addTab( gateway_w, tr("Gateway") );
237 203
238// // DNS WIDGET 204// // DNS WIDGET
239 dns_w = new DNSWidget( _pppdata, tabWindow, isnewaccount, tr("DNS Servers") ); 205 dns_w = new DNSWidget( _pppdata, tabWindow, isnewaccount, tr("DNS Servers") );
240 tabWindow->addTab( dns_w, tr("DNS") ); 206 tabWindow->addTab( dns_w, tr("DNS") );
241 207
242// // EXECUTE WIDGET 208// // EXECUTE WIDGET
243 ExecWidget *exec_w = new ExecWidget( _pppdata, tabWindow, isnewaccount, tr("Execute Programs")); 209 ExecWidget *exec_w = new ExecWidget( _pppdata, tabWindow, isnewaccount, tr("Execute Programs"));
244 tabWindow->addTab( exec_w, tr("Execute") ); 210 tabWindow->addTab( exec_w, tr("Execute") );
245 211
246 int result = 0; 212 int result = 0;
247 bool ok = false; 213 bool ok = false;
248 214
249 while (!ok){ 215 while (!ok){
250 dlg->showMaximized(); 216 dlg->showMaximized();
251 result = dlg->exec(); 217 result = dlg->exec();
252 ok = true; 218 ok = true;
253 219
254 if(result == QDialog::Accepted) { 220 if(result == QDialog::Accepted) {
255 if (!auth_w->check()){ 221 if (!auth_w->check()){
256 ok = false; 222 ok = false;
257 } else if(!dial_w->save()) { 223 } else if(!dial_w->save()) {
258 QMessageBox::critical(this, "error", tr( "You must enter a unique account name")); 224 QMessageBox::critical(this, "error", tr( "You must enter a unique account name"));
259 ok = false; 225 ok = false;
260 }else{ 226 }else{
261 ip_w->save(); 227 ip_w->save();
262 dns_w->save(); 228 dns_w->save();
263 gateway_w->save(); 229 gateway_w->save();
264 auth_w->save(); 230 auth_w->save();
265 exec_w->save(); 231 exec_w->save();
266 } 232 }
267 } 233 }
268 } 234 }
269 235
270 delete dlg; 236 delete dlg;
271 237
272 return result; 238 return result;
273} 239}
274 240
275 241
276QString AccountWidget::prettyPrintVolume(unsigned int n) { 242// QString AccountWidget::prettyPrintVolume(unsigned int n) {
277 int idx = 0; 243// int idx = 0;
278 const QString quant[] = {tr("Byte"), tr("KB"), 244// const QString quant[] = {tr("Byte"), tr("KB"),
279 tr("MB"), tr("GB"), QString::null}; 245 // tr("MB"), tr("GB"), QString::null};
280 246
281 float n1 = n; 247// float n1 = n;
282 while(n >= 1024 && quant[idx] != QString::null) { 248// while(n >= 1024 && quant[idx] != QString::null) {
283 idx++; 249// idx++;
284 n /= 1024; 250// n /= 1024;
285 } 251// }
286 252
287 int i = idx; 253// int i = idx;
288 while(i--) 254// while(i--)
289 n1 = n1 / 1024.0; 255// n1 = n1 / 1024.0;
290 256
291 QString s = QString::number( n1, 'f', idx==0 ? 0 : 1 ); 257// QString s = QString::number( n1, 'f', idx==0 ? 0 : 1 );
292 s += " " + quant[idx]; 258// s += " " + quant[idx];
293 return s; 259// return s;
294} 260// }
295 261
296 262
297///////////////////////////////////////////////////////////////////////////// 263/////////////////////////////////////////////////////////////////////////////
298// 264//
299// Queries the user what to reset: costs, volume or both 265// Queries the user what to reset: costs, volume or both
300// 266//
301///////////////////////////////////////////////////////////////////////////// 267/////////////////////////////////////////////////////////////////////////////
302// QueryReset::QueryReset(QWidget *parent) : QDialog(parent, 0, true) { 268// QueryReset::QueryReset(QWidget *parent) : QDialog(parent, 0, true) {
303// // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); 269// // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon());
304// setCaption(tr("Reset Accounting")); 270// setCaption(tr("Reset Accounting"));
305 271
306// QVBoxLayout *tl = new QVBoxLayout(this, 10, 10); 272// QVBoxLayout *tl = new QVBoxLayout(this, 10, 10);
307// QVGroupBox *f = new QVGroupBox(tr("What to Reset"), this); 273// QVGroupBox *f = new QVGroupBox(tr("What to Reset"), this);
308 274
309// QVBoxLayout *l1 = new QVBoxLayout(this, 10, 10); 275// QVBoxLayout *l1 = new QVBoxLayout(this, 10, 10);
310// // costs = new QCheckBox(tr("Reset the accumulated phone costs"), f); 276// // costs = new QCheckBox(tr("Reset the accumulated phone costs"), f);
311// // costs->setChecked(true); 277// // costs->setChecked(true);
312// // l1->addWidget(costs); 278// // l1->addWidget(costs);
313// // QWhatsThis::add(costs, tr("Check this to set the phone costs\n" 279// // QWhatsThis::add(costs, tr("Check this to set the phone costs\n"
314 // // "to zero. Typically you'll want to\n" 280 // // "to zero. Typically you'll want to\n"
315 // // "do this once a month.")); 281 // // "do this once a month."));
316 282
317// // volume = new QCheckBox(tr("Reset volume accounting"), f); 283// // volume = new QCheckBox(tr("Reset volume accounting"), f);
318// // volume->setChecked(true); 284// // volume->setChecked(true);
319// // l1->addWidget(volume); 285// // l1->addWidget(volume);
320// // QWhatsThis::add(volume, tr("Check this to set the volume accounting\n" 286// // QWhatsThis::add(volume, tr("Check this to set the volume accounting\n"
321 // // "to zero. Typically you'll want to do this\n" 287 // // "to zero. Typically you'll want to do this\n"
322 // // "once a month.")); 288 // // "once a month."));
323 289
324// l1->activate(); 290// l1->activate();
325 291
326// // this activates the f-layout and sets minimumSize() 292// // this activates the f-layout and sets minimumSize()
327// f->show(); 293// f->show();
328 294
329// tl->addWidget(f); 295// tl->addWidget(f);
330 296
331// QButtonGroup *bbox = new QButtonGroup(this); 297// QButtonGroup *bbox = new QButtonGroup(this);
332// // bbox->addStretch(1); 298// // bbox->addStretch(1);
333// QPushButton *ok = new QPushButton( bbox, tr("OK") ); 299// QPushButton *ok = new QPushButton( bbox, tr("OK") );
334// bbox->insert(ok); 300// bbox->insert(ok);
335// ok->setDefault(true); 301// ok->setDefault(true);
336// QPushButton *cancel = new QPushButton( bbox, tr("Cancel") ); 302// QPushButton *cancel = new QPushButton( bbox, tr("Cancel") );
337// bbox->insert(cancel); 303// bbox->insert(cancel);
338 304
339// connect(ok, SIGNAL(clicked()), 305// connect(ok, SIGNAL(clicked()),
340 // this, SLOT(accepted())); 306 // this, SLOT(accepted()));
341// connect(cancel, SIGNAL(clicked()), 307// connect(cancel, SIGNAL(clicked()),
342 // this, SLOT(reject())); 308 // this, SLOT(reject()));
343 309
344// bbox->layout(); 310// bbox->layout();
345// tl->addWidget(bbox); 311// tl->addWidget(bbox);
346 312
347// } 313// }
348 314
349 315
350// void QueryReset::accepted() { 316// void QueryReset::accepted() {
351// int result = costs->isChecked() ? COSTS : 0; 317// int result = costs->isChecked() ? COSTS : 0;
352// result += volume->isChecked() ? VOLUME : 0; 318// result += volume->isChecked() ? VOLUME : 0;
353 319
354// done(result); 320// done(result);
355// } 321// }
356 322
357 323
diff --git a/noncore/settings/networksettings/ppp/accounts.h b/noncore/settings/networksettings/ppp/accounts.h
index 8c16a7c..7f31513 100644
--- a/noncore/settings/networksettings/ppp/accounts.h
+++ b/noncore/settings/networksettings/ppp/accounts.h
@@ -1,86 +1,80 @@
1/* -*- C++ -*- 1/* -*- C++ -*-
2 * kPPP: A pppd front end for the KDE project 2 * kPPP: A pppd front end for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * based on EzPPP: 9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter 10 * Copyright (C) 1997 Jay Painter
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#ifndef _ACCOUNTS_H_ 27#ifndef _ACCOUNTS_H_
28#define _ACCOUNTS_H_ 28#define _ACCOUNTS_H_
29 29
30#include <qwidget.h>
31#include <qdialog.h> 30#include <qdialog.h>
32#include <qpushbutton.h> 31#include <qpushbutton.h>
33#include <qlistbox.h> 32#include <qlistbox.h>
34//#include "acctselect.h" 33#include "chooserwidget.h"
35 34
36class QDialog;
37class QCheckBox; 35class QCheckBox;
38class QLineEdit; 36class QLineEdit;
39class QTabWidget; 37class QTabWidget;
38class ModemWidget;
39class ModemWidget2;
40
41
40class DialWidget; 42class DialWidget;
41class AuthWidget; 43class AuthWidget;
42class IPWidget; 44class IPWidget;
43class DNSWidget; 45class DNSWidget;
44class GatewayWidget; 46class GatewayWidget;
45class PPPData; 47class PPPData;
46 48
47class AccountWidget : public QWidget { 49
50class AccountWidget : public ChooserWidget {
51
48 Q_OBJECT 52 Q_OBJECT
49public: 53public:
50 AccountWidget( PPPData *pd, QWidget *parent=0, const char *name=0 ); 54 AccountWidget( PPPData *pd, QWidget *parent=0, const char *name=0, WFlags f=0 );
51 ~AccountWidget() {} 55 ~AccountWidget() {}
52 56
53private slots:
54 void editaccount();
55 void copyaccount();
56 void newaccount();
57 void deleteaccount();
58 void slotListBoxSelect(int);
59 57
60private: 58private slots:
59 virtual void edit();
60 virtual void copy();
61 virtual void remove();
62 virtual void create();
63 virtual void slotListBoxSelect(int);
61 int doTab(); 64 int doTab();
62 65
63signals: 66 signals:
64 void resetaccounts(); 67 void resetaccounts();
65 68
66private: 69private:
67 QString prettyPrintVolume(unsigned int);
68
69 PPPData *_pppdata;
70 QTabWidget *tabWindow;
71 DialWidget *dial_w; 70 DialWidget *dial_w;
72 IPWidget *ip_w; 71 IPWidget *ip_w;
73 DNSWidget *dns_w; 72 DNSWidget *dns_w;
74 GatewayWidget *gateway_w; 73 GatewayWidget *gateway_w;
75 AuthWidget *auth_w; 74 AuthWidget *auth_w;
76 75
77 QListBox *accountlist_l;
78 QPushButton *edit_b;
79 QPushButton *copy_b;
80 QPushButton *new_b;
81 QPushButton *delete_b;
82}; 76};
83 77
84 78
85#endif 79#endif
86 80
diff --git a/noncore/settings/networksettings/ppp/chooserwidget.cpp b/noncore/settings/networksettings/ppp/chooserwidget.cpp
new file mode 100644
index 0000000..a32b2b8
--- a/dev/null
+++ b/noncore/settings/networksettings/ppp/chooserwidget.cpp
@@ -0,0 +1,85 @@
1/*
2 * kPPP: A pppd front end for the KDE project
3 *
4 * $Id$
5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu
8 *
9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details.
21 *
22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */
26
27#include <qdir.h>
28#include <stdlib.h>
29#include <qlayout.h>
30#include <qtabwidget.h>
31#include <qtabdialog.h>
32#include <qwhatsthis.h>
33#include <qmessagebox.h>
34
35#include <qapplication.h>
36#include <qbuttongroup.h>
37#include <qmessagebox.h>
38#include <qvgroupbox.h>
39#include <qwidget.h>
40
41#include "accounts.h"
42#include "authwidget.h"
43#include "pppdata.h"
44#include "edit.h"
45
46void parseargs(char* buf, char** args);
47
48ChooserWidget::ChooserWidget( PPPData *pd, QWidget *parent, const char *name, WFlags f )
49 : QWidget( parent, name, f )
50{
51 _pppdata = pd;
52 QVBoxLayout *l1 = new QVBoxLayout(this, 10, 10);
53 listListbox = new QListBox(this);
54
55 connect(listListbox, SIGNAL(highlighted(int)),
56 this, SLOT(slotListBoxSelect(int)));
57 connect(listListbox, SIGNAL(selected(int)),this, SLOT(edit()));
58 l1->addWidget(listListbox, 10);
59
60 edit_b = new QPushButton(tr("&Edit..."), this);
61 connect(edit_b, SIGNAL(clicked()), SLOT(edit()));
62 l1->addWidget(edit_b);
63
64 new_b = new QPushButton(tr("&New..."), this);
65 connect(new_b, SIGNAL(clicked()), SLOT(create()));
66 l1->addWidget(new_b);
67
68
69 copy_b = new QPushButton(tr("Co&py"), this);
70 connect(copy_b, SIGNAL(clicked()), SLOT(copy()));
71 l1->addWidget(copy_b);
72
73 delete_b = new QPushButton(tr("De&lete"), this);
74 connect(delete_b, SIGNAL(clicked()), SLOT(remove()));
75 l1->addWidget(delete_b);
76
77
78 QHBoxLayout *l12 = new QHBoxLayout;
79 l1->addStretch(1);
80 l1->addLayout(l12);
81
82 l1->activate();
83
84}
85
diff --git a/noncore/settings/networksettings/ppp/chooserwidget.h b/noncore/settings/networksettings/ppp/chooserwidget.h
new file mode 100644
index 0000000..ac3f4cb
--- a/dev/null
+++ b/noncore/settings/networksettings/ppp/chooserwidget.h
@@ -0,0 +1,73 @@
1/* -*- C++ -*-
2 * kPPP: A pppd front end for the KDE project
3 *
4 * $Id$
5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu
8 *
9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details.
21 *
22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */
26
27#ifndef _CHOOSERWIDGET_H_
28#define _CHOOSERWIDGET_H_
29
30#include <qwidget.h>
31#include <qdialog.h>
32#include <qpushbutton.h>
33#include <qlistbox.h>
34//#include "acctselect.h"
35
36class QDialog;
37class QCheckBox;
38class QLineEdit;
39class QTabWidget;
40class DialWidget;
41class AuthWidget;
42class IPWidget;
43class DNSWidget;
44class GatewayWidget;
45class PPPData;
46
47class ChooserWidget : public QWidget {
48 Q_OBJECT
49public:
50 ChooserWidget( PPPData *pd, QWidget *parent=0, const char *name=0, WFlags f=0 );
51 ~ChooserWidget() {}
52
53private slots:
54 virtual void edit() = 0;
55 virtual void copy() = 0;
56 virtual void create()= 0;
57 virtual void remove()= 0;
58 virtual void slotListBoxSelect(int) = 0;
59
60
61protected:
62 PPPData *_pppdata;
63
64 QListBox *listListbox;
65 QPushButton *edit_b;
66 QPushButton *copy_b;
67 QPushButton *new_b;
68 QPushButton *delete_b;
69};
70
71
72#endif
73
diff --git a/noncore/settings/networksettings/ppp/connect.cpp b/noncore/settings/networksettings/ppp/connect.cpp
index 2400d7b..e3fab24 100644
--- a/noncore/settings/networksettings/ppp/connect.cpp
+++ b/noncore/settings/networksettings/ppp/connect.cpp
@@ -1,1442 +1,1466 @@
1/* 1/*
2 * kPPP: A pppd front end for the KDE project 2 * kPPP: A pppd front end for the KDE project
3 * 3 *
4 * 4 *
5 * Copyright (C) 1997 Bernd Johannes Wuebben 5 * Copyright (C) 1997 Bernd Johannes Wuebben
6 * wuebben@math.cornell.edu 6 * wuebben@math.cornell.edu
7 * Copyright (C) 1998-2001 Harri Porten <porten@kde.org> 7 * Copyright (C) 1998-2001 Harri Porten <porten@kde.org>
8 * 8 *
9 * based on EzPPP: 9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter 10 * Copyright (C) 1997 Jay Painter
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27//#include <config.h> 27//#include <config.h>
28 28
29#include <qlayout.h> 29#include <qlayout.h>
30#include <qregexp.h> 30#include <qregexp.h>
31 31
32#include <qapplication.h> 32#include <qapplication.h>
33//#include <kdebug.h> 33//#include <kdebug.h>
34//#include <klocale.h> 34//#include <klocale.h>
35#define i18n QObject::tr
36#include <qmessagebox.h> 35#include <qmessagebox.h>
37#include <qpushbutton.h> 36#include <qpushbutton.h>
38 37
39#include <unistd.h> 38#include <unistd.h>
40#include <stdlib.h> 39#include <stdlib.h>
41#include <string.h> 40#include <string.h>
42#include <fcntl.h> 41#include <fcntl.h>
43#include <netdb.h> 42#include <netdb.h>
44#include <sys/types.h> 43#include <sys/types.h>
45#include <sys/socket.h> 44#include <sys/socket.h>
46#include <arpa/inet.h> 45#include <arpa/inet.h>
47#include <netinet/in.h> 46#include <netinet/in.h>
48#include <sys/ioctl.h> 47#include <sys/ioctl.h>
49#include <assert.h> 48#include <assert.h>
50 49
51#ifdef _XPG4_2 50#ifdef _XPG4_2
52 #define __xnet_connectconnect 51 #define __xnet_connectconnect
53#endif 52#endif
54 53
55#include <errno.h> 54#include <errno.h>
56 55
57#ifdef HAVE_SYS_PARAM_H 56#ifdef HAVE_SYS_PARAM_H
58#include <sys/param.h> 57#include <sys/param.h>
59#endif 58#endif
60 59
61#ifdef __linux__ 60#ifdef __linux__
62#include "runtests.h" 61#include "runtests.h"
63#endif 62#endif
64 63
65#include "auth.h" 64#include "auth.h"
66#include "connect.h" 65#include "connect.h"
67//#include "docking.h" 66//#include "docking.h"
68#include "interfaceppp.h" 67#include "interfaceppp.h"
69#include "modem.h" 68#include "modem.h"
70#include "kpppconfig.h" 69#include "kpppconfig.h"
71#include "pppdata.h" 70#include "pppdata.h"
72#include "kpppwidget.h" 71#include "kpppwidget.h"
73//#include "requester.h" 72//#include "requester.h"
74//#include "utils.h" 73//#include "utils.h"
75#define execute_command system 74#define execute_command system
76 75
77QString old_hostname; 76QString old_hostname;
78bool modified_hostname; 77bool modified_hostname;
79 78
80 79
81ConnectWidget::ConnectWidget(InterfacePPP *ifp, QWidget *parent, const char *name) 80ConnectWidget::ConnectWidget(InterfacePPP *ifp, QWidget *parent, const char *name)
82 : QWidget(parent, name), 81 : QWidget(parent, name),
83 myreadbuffer(""), 82 myreadbuffer(""),
84 main_timer_ID(0), 83 main_timer_ID(0),
85 vmain(0), 84 vmain(0),
86 substate(-1), 85 substate(-1),
87 scriptindex(0), 86 scriptindex(0),
88 loopnest(0), 87 loopnest(0),
89 loopend(false), 88 loopend(false),
90 semaphore(false), 89 semaphore(false),
91 expecting(false), 90 expecting(false),
92 readbuffer(""), 91 readbuffer(""),
93 scanvar(""), 92 scanvar(""),
94 scanning(false), 93 scanning(false),
95 pausing(false), 94 pausing(false),
96 dialnumber(0), 95 dialnumber(0),
97 _ifaceppp(ifp) 96 _ifaceppp(ifp)
98{ 97{
99 modified_hostname = false; 98 modified_hostname = false;
100 99
101 QVBoxLayout *tl = new QVBoxLayout(this, 8, 10); 100 QVBoxLayout *tl = new QVBoxLayout(this, 8, 10);
102 QString tit = i18n("Connecting to: "); 101 QString tit = QObject::tr("Connecting to: ");
103 setCaption(tit); 102 setCaption(tit);
104 103
105 QHBoxLayout *l0 = new QHBoxLayout(10); 104 QHBoxLayout *l0 = new QHBoxLayout(10);
106 tl->addLayout(l0); 105 tl->addLayout(l0);
107 l0->addSpacing(10); 106 l0->addSpacing(10);
108 messg = new QLabel(this, "messg"); 107 messg = new QLabel(this, "messg");
109 messg->setFrameStyle(QFrame::Panel|QFrame::Sunken); 108 messg->setFrameStyle(QFrame::Panel|QFrame::Sunken);
110 messg->setAlignment(AlignCenter); 109 messg->setAlignment(AlignCenter);
111 messg->setText(i18n("Unable to create modem lock file.")); 110 messg->setText(QObject::tr("Unable to create modem lock file."));
112 messg->setMinimumHeight(messg->sizeHint().height() + 5); 111 messg->setMinimumHeight(messg->sizeHint().height() + 5);
113// int messw = (messg->sizeHint().width() * 12) / 10; 112// int messw = (messg->sizeHint().width() * 12) / 10;
114// messw = QMAX(messw,280); 113// messw = QMAX(messw,280);
115// messg->setMinimumWidth(messw); 114// messg->setMinimumWidth(messw);
116 if (_ifaceppp->getStatus()) 115 if (_ifaceppp->getStatus())
117 messg->setText(i18n("Online")); 116 messg->setText(QObject::tr("Online"));
118 else 117 else
119 messg->setText(i18n("Offline")); 118 messg->setText(QObject::tr("Offline"));
120 l0->addSpacing(10); 119 l0->addSpacing(10);
121 l0->addWidget(messg); 120 l0->addWidget(messg);
122 l0->addSpacing(10); 121 l0->addSpacing(10);
123 122
124 QHBoxLayout *l1 = new QHBoxLayout(10); 123 QHBoxLayout *l1 = new QHBoxLayout(10);
125 tl->addLayout(l1); 124 tl->addLayout(l1);
126 l1->addStretch(1); 125 l1->addStretch(1);
127 126
128 debug = new QPushButton(i18n("Log"), this); 127 debug = new QPushButton(QObject::tr("Log"), this);
129 debug->setToggleButton(true); 128 debug->setToggleButton(true);
130 debug->setEnabled( false ); // FIXME: disable the log button 129 debug->setEnabled( false ); // FIXME: disable the log button
131 connect(debug, SIGNAL(clicked()), SIGNAL(toggleDebugWindow())); 130 connect(debug, SIGNAL(clicked()), SIGNAL(toggleDebugWindow()));
132 131
133 cancel = new QPushButton(i18n("Cancel"), this); 132 cancel = new QPushButton(QObject::tr("Cancel"), this);
134 cancel->setFocus(); 133 cancel->setFocus();
135 connect(cancel, SIGNAL(clicked()), SLOT(cancelbutton())); 134 connect(cancel, SIGNAL(clicked()), SLOT(cancelbutton()));
136 135
137// int maxw = QMAX(cancel->sizeHint().width(), 136// int maxw = QMAX(cancel->sizeHint().width(),
138 // debug->sizeHint().width()); 137 // debug->sizeHint().width());
139// maxw = QMAX(maxw,65); 138// maxw = QMAX(maxw,65);
140// debug->setFixedWidth(maxw); 139// debug->setFixedWidth(maxw);
141// cancel->setFixedWidth(maxw); 140// cancel->setFixedWidth(maxw);
142 l1->addWidget(debug); 141 l1->addWidget(debug);
143 l1->addWidget(cancel); 142 l1->addWidget(cancel);
144 143
145// setFixedSize(sizeHint()); 144// setFixedSize(sizeHint());
146 145
147 pausetimer = new QTimer(this); 146 pausetimer = new QTimer(this);
148 connect(pausetimer, SIGNAL(timeout()), SLOT(pause())); 147 connect(pausetimer, SIGNAL(timeout()), SLOT(pause()));
149 148
150 qApp->processEvents(); 149 qApp->processEvents();
151 150
152 timeout_timer = new QTimer(this); 151 timeout_timer = new QTimer(this);
153 connect(timeout_timer, SIGNAL(timeout()), SLOT(script_timed_out())); 152 connect(timeout_timer, SIGNAL(timeout()), SLOT(script_timed_out()));
154 153
155 inittimer = new QTimer(this); 154 inittimer = new QTimer(this);
156 connect(inittimer, SIGNAL(timeout()), SLOT(init())); 155 connect(inittimer, SIGNAL(timeout()), SLOT(init()));
157 156
158 if_timeout_timer = new QTimer(this); 157 if_timeout_timer = new QTimer(this);
159 connect(if_timeout_timer, SIGNAL(timeout()), SLOT(if_waiting_timed_out())); 158 connect(if_timeout_timer, SIGNAL(timeout()), SLOT(if_waiting_timed_out()));
160 159
161 connect(this,SIGNAL(if_waiting_signal()),this,SLOT(if_waiting_slot())); 160 connect(this,SIGNAL(if_waiting_signal()),this,SLOT(if_waiting_slot()));
162 161
163 prompt = new PWEntry( this, "pw" ); 162 prompt = new PWEntry( this, "pw" );
164 if_timer = new QTimer(this); 163 if_timer = new QTimer(this);
165 connect(if_timer,SIGNAL(timeout()), SLOT(if_waiting_slot())); 164 connect(if_timer,SIGNAL(timeout()), SLOT(if_waiting_slot()));
166} 165}
167 166
168 167
169ConnectWidget::~ConnectWidget() { 168ConnectWidget::~ConnectWidget() {
170} 169}
171 170
172 171
173void ConnectWidget::preinit() { 172void ConnectWidget::preinit() {
174 // this is all just to keep the GUI nice and snappy .... 173 // this is all just to keep the GUI nice and snappy ....
175 // you have to see to believe ... 174 // you have to see to believe ...
176 messg->setText(i18n("Looking for modem...")); 175 messg->setText(QObject::tr("Looking for modem..."));
177 inittimer->start(100); 176 inittimer->start(100);
178} 177}
179 178
180 179
181void ConnectWidget::init() { 180void ConnectWidget::init() {
182 _ifaceppp->data()->setpppdError(0); 181 _ifaceppp->data()->setpppdError(0);
183 inittimer->stop(); 182 inittimer->stop();
184 vmain = 0; 183 vmain = 0;
185 substate = -1; 184 substate = -1;
186 expecting = false; 185 expecting = false;
187 pausing = false; 186 pausing = false;
188 scriptindex = 0; 187 scriptindex = 0;
189 myreadbuffer = ""; 188 myreadbuffer = "";
190 scanning = false; 189 scanning = false;
191 scanvar = ""; 190 scanvar = "";
192 firstrunID = true; 191 firstrunID = true;
193 firstrunPW = true; 192 firstrunPW = true;
194// stats->totalbytes = 0; 193// stats->totalbytes = 0;
195 dialnumber = 0; 194 dialnumber = 0;
196 195
197// p_kppp->con_speed = ""; 196// p_kppp->con_speed = "";
198 197
199// p_kppp->setQuitOnDisconnect (p_kppp->quitOnDisconnect() || _ifaceppp->data()->quit_on_disconnect()); 198// p_kppp->setQuitOnDisconnect (p_kppp->quitOnDisconnect() || _ifaceppp->data()->quit_on_disconnect());
200 199
201 comlist = &_ifaceppp->data()->scriptType(); 200 comlist = &_ifaceppp->data()->scriptType();
202 arglist = &_ifaceppp->data()->script(); 201 arglist = &_ifaceppp->data()->script();
203 202
204 QString tit = i18n("Connecting to: %1").arg(_ifaceppp->data()->accname()); 203 QString tit = QObject::tr("Connecting to: %1").arg(_ifaceppp->data()->accname());
205 setCaption(tit); 204 setCaption(tit);
206 205
207 qApp->processEvents(); 206 qApp->processEvents();
208 207
209 // run the "before-connect" command 208 // run the "before-connect" command
210 if (!_ifaceppp->data()->command_before_connect().isEmpty()) { 209 if (!_ifaceppp->data()->command_before_connect().isEmpty()) {
211 messg->setText(i18n("Running pre-startup command...")); 210 messg->setText(QObject::tr("Running pre-startup command..."));
212 emit debugMessage(i18n("Running pre-startup command...")); 211 emit debugMessage(QObject::tr("Running pre-startup command..."));
213 212
214 qApp->processEvents(); 213 qApp->processEvents();
215 QApplication::flushX(); 214 QApplication::flushX();
216 pid_t id = execute_command(_ifaceppp->data()->command_before_connect()); 215 pid_t id = execute_command(_ifaceppp->data()->command_before_connect());
217// int i, status; 216// int i, status;
218 217
219// do { 218// do {
220// qApp->processEvents(); 219// qApp->processEvents();
221// i = waitpid(id, &status, WNOHANG); 220// i = waitpid(id, &status, WNOHANG);
222// usleep(100000); 221// usleep(100000);
223// } while (i == 0 && errno == 0); 222// } while (i == 0 && errno == 0);
224 } 223 }
225 224
226 int lock = _ifaceppp->modem()->lockdevice(); 225 int lock = _ifaceppp->modem()->lockdevice();
227 226
228 if (lock == 1) { 227 if (lock == 1) {
229 messg->setText(i18n("Modem device is locked.")); 228 messg->setText(QObject::tr("Modem device is locked."));
230 vmain = 20; // wait until cancel is pressed 229 vmain = 20; // wait until cancel is pressed
231 return; 230 return;
232 } 231 }
233 232
234 if (lock == -1) { 233 if (lock == -1) {
235 messg->setText(i18n("Unable to create modem lock file.")); 234 messg->setText(QObject::tr("Unable to create modem lock file."));
236 vmain = 20; // wait until cancel is pressed 235 vmain = 20; // wait until cancel is pressed
237 return; 236 return;
238 } 237 }
239 238
240 if(_ifaceppp->modem()->opentty()) { 239 if(_ifaceppp->modem()->opentty()) {
241 messg->setText(_ifaceppp->modem()->modemMessage()); 240 messg->setText(_ifaceppp->modem()->modemMessage());
242 qApp->processEvents(); 241 qApp->processEvents();
243 if(_ifaceppp->modem()->hangup()) { 242 if(_ifaceppp->modem()->hangup()) {
244 243
245 qApp->processEvents(); 244 qApp->processEvents();
246 245
247 semaphore = false; 246 semaphore = false;
248 247
249 _ifaceppp->modem()->stop(); 248 _ifaceppp->modem()->stop();
250 _ifaceppp->modem()->notify(this, SLOT(readChar(unsigned char))); 249 _ifaceppp->modem()->notify(this, SLOT(readChar(unsigned char)));
251 250
252 // if we are stuck anywhere we will time out 251 // if we are stuck anywhere we will time out
253 timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); 252 timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000);
254 253
255 // this timer will run the script etc. 254 // this timer will run the script etc.
256 main_timer_ID = startTimer(10); 255 main_timer_ID = startTimer(10);
257 256
258 return; 257 return;
259 } 258 }
260 } 259 }
261 260
262 // initialization failed 261 // initialization failed
263 messg->setText(_ifaceppp->modem()->modemMessage()); 262 messg->setText(_ifaceppp->modem()->modemMessage());
264 vmain = 20; // wait until cancel is pressed 263 vmain = 20; // wait until cancel is pressed
265 _ifaceppp->modem()->unlockdevice(); 264 _ifaceppp->modem()->unlockdevice();
266} 265}
267 266
268 267
269void ConnectWidget::timerEvent(QTimerEvent *) { 268void ConnectWidget::timerEvent(QTimerEvent *) {
270 if (semaphore || pausing) 269 if (semaphore || pausing)
271 return; 270 return;
272 271
273 if(vmain == 0) { 272 if(vmain == 0) {
274#ifdef DEBUG_WO_DIALING 273#ifdef DEBUG_WO_DIALING
275 vmain = 10; 274 vmain = 10;
276 return; 275 return;
277#endif 276#endif
278 277
279 assert(PPPData::NumInitStrings > 0); 278 assert(PPPData::NumInitStrings > 0);
280 // first init string ? 279 // first init string ?
281 if(substate == -1) { 280 if(substate == -1) {
282 messg->setText(i18n("Initializing modem...")); 281 messg->setText(QObject::tr("Initializing modem..."));
283 emit debugMessage(i18n("Initializing modem...")); 282 emit debugMessage(QObject::tr("Initializing modem..."));
284 substate = 0; 283 substate = 0;
285 } 284 }
286 285
287 QString initStr = _ifaceppp->data()->modemInitStr(substate); 286 QString initStr = _ifaceppp->data()->modemInitStr(substate);
288 if (!initStr.isEmpty()) { 287 if (!initStr.isEmpty()) {
289 // send a carriage return and then wait a bit so that the modem will 288 // send a carriage return and then wait a bit so that the modem will
290 // let us issue commands. 289 // let us issue commands.
291 if(_ifaceppp->data()->modemPreInitDelay() > 0) { 290 if(_ifaceppp->data()->modemPreInitDelay() > 0) {
292 usleep(_ifaceppp->data()->modemPreInitDelay() * 5000); 291 usleep(_ifaceppp->data()->modemPreInitDelay() * 5000);
293 writeline(""); 292 writeline("");
294 usleep(_ifaceppp->data()->modemPreInitDelay() * 5000); 293 usleep(_ifaceppp->data()->modemPreInitDelay() * 5000);
295 } 294 }
296 setExpect(_ifaceppp->data()->modemInitResp()); 295 setExpect(_ifaceppp->data()->modemInitResp());
297 writeline(initStr); 296 writeline(initStr);
298 usleep(_ifaceppp->data()->modemInitDelay() * 10000); // 0.01 - 3.0 sec 297 usleep(_ifaceppp->data()->modemInitDelay() * 10000); // 0.01 - 3.0 sec
299 } 298 }
300 299
301 substate++; 300 substate++;
302 301
303 /* 302 /*
304 * FIXME after 3.0: Make it possible to disable ATS11 since it 303 * FIXME after 3.0: Make it possible to disable ATS11 since it
305 * seems to be incompatible with some ISDN adapters (e.g. DataBox 304 * seems to be incompatible with some ISDN adapters (e.g. DataBox
306 * Speed Dragon). Even better would be to detect this when doing 305 * Speed Dragon). Even better would be to detect this when doing
307 * a "Modem Query" 306 * a "Modem Query"
308 */ 307 */
309 if (MODEM_TONEDURATION != _ifaceppp->data()->modemToneDuration()) 308 if (MODEM_TONEDURATION != _ifaceppp->data()->modemToneDuration())
310 vmain = 5; 309 vmain = 5;
311 else 310 else
312 vmain = 3; 311 vmain = 3;
313 312
314 return; 313 return;
315 } 314 }
316 315
317 if (vmain == 5) { 316 if (vmain == 5) {
318 if(!expecting) { 317 if(!expecting) {
319 QString sToneDuration = "ATS11=" + QString::number(_ifaceppp->data()->modemToneDuration()); 318 QString sToneDuration = "ATS11=" + QString::number(_ifaceppp->data()->modemToneDuration());
320 QString msg = i18n("Setting ") + sToneDuration; 319 QString msg = QObject::tr("Setting ") + sToneDuration;
321 messg->setText(msg); 320 messg->setText(msg);
322 emit debugMessage(msg); 321 emit debugMessage(msg);
323 setExpect(_ifaceppp->data()->modemInitResp()); 322 setExpect(_ifaceppp->data()->modemInitResp());
324 writeline(sToneDuration); 323 writeline(sToneDuration);
325 } 324 }
326 vmain = 3; 325 vmain = 3;
327 return; 326 return;
328 } 327 }
329 328
330 if(vmain == 3) { 329 if(vmain == 3) {
331 if(!expecting) { 330 if(!expecting) {
332 // done with all init strings ? 331 // done with all init strings ?
333 if(substate < PPPData::NumInitStrings) { 332 if(substate < PPPData::NumInitStrings) {
334 vmain = 0; 333 vmain = 0;
335 return; 334 return;
336 } 335 }
337 substate = -1; 336 substate = -1;
338 // skip setting the volume if command is empty 337 // skip setting the volume if command is empty
339 if(_ifaceppp->data()->volumeInitString().isEmpty()) { 338 if(_ifaceppp->data()->volumeInitString().isEmpty()) {
340 vmain = 4; 339 vmain = 4;
341 return; 340 return;
342 } 341 }
343 messg->setText(i18n("Setting speaker volume...")); 342 messg->setText(QObject::tr("Setting speaker volume..."));
344 emit debugMessage(i18n("Setting speaker volume...")); 343 emit debugMessage(QObject::tr("Setting speaker volume..."));
345 344
346 setExpect(_ifaceppp->data()->modemInitResp()); 345 setExpect(_ifaceppp->data()->modemInitResp());
347 QString vol("AT"); 346 QString vol("AT");
348 vol += _ifaceppp->data()->volumeInitString(); 347 vol += _ifaceppp->data()->volumeInitString();
349 writeline(vol); 348 writeline(vol);
350 usleep(_ifaceppp->data()->modemInitDelay() * 10000); // 0.01 - 3.0 sec 349 usleep(_ifaceppp->data()->modemInitDelay() * 10000); // 0.01 - 3.0 sec
351 vmain = 4; 350 vmain = 4;
352 return; 351 return;
353 } 352 }
354 } 353 }
355 354
356 if(vmain == 4) { 355 if(vmain == 4) {
357 if(!expecting) { 356 if(!expecting) {
358 if(!_ifaceppp->data()->waitForDialTone()) { 357 if(!_ifaceppp->data()->waitForDialTone()) {
359 QString msg = i18n("Turning off dial tone waiting..."); 358 QString msg = QObject::tr("Turning off dial tone waiting...");
360 messg->setText(msg); 359 messg->setText(msg);
361 emit debugMessage(msg); 360 emit debugMessage(msg);
362 setExpect(_ifaceppp->data()->modemInitResp()); 361 setExpect(_ifaceppp->data()->modemInitResp());
363 writeline(_ifaceppp->data()->modemNoDialToneDetectionStr()); 362 writeline(_ifaceppp->data()->modemNoDialToneDetectionStr());
364 } 363 }
365 vmain = 1; 364 vmain = 1;
366 return; 365 return;
367 } 366 }
368 } 367 }
369 368
370 // dial the number and wait to connect 369 // dial the number and wait to connect
371 if(vmain == 1) { 370 if(vmain == 1) {
372 if(!expecting) { 371 if(!expecting) {
373 372
374 timeout_timer->stop(); 373 timeout_timer->stop();
375 timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); 374 timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000);
376 375
377 QStringList &plist = _ifaceppp->data()->phonenumbers(); 376 QStringList &plist = _ifaceppp->data()->phonenumbers();
378 QString bmarg= _ifaceppp->data()->dialPrefix(); 377 QString bmarg= _ifaceppp->data()->dialPrefix();
379 bmarg += *plist.at(dialnumber); 378 bmarg += *plist.at(dialnumber);
380 QString bm = i18n("Dialing %1").arg(bmarg); 379 QString bm = QObject::tr("Dialing %1").arg(bmarg);
381 messg->setText(bm); 380 messg->setText(bm);
382 emit debugMessage(bm); 381 emit debugMessage(bm);
383 382
384 QString pn = _ifaceppp->data()->modemDialStr(); 383 QString pn = _ifaceppp->data()->modemDialStr();
385 pn += _ifaceppp->data()->dialPrefix(); 384 pn += _ifaceppp->data()->dialPrefix();
386 pn += *plist.at(dialnumber); 385 pn += *plist.at(dialnumber);
387 if(++dialnumber >= plist.count()) 386 if(++dialnumber >= plist.count())
388 dialnumber = 0; 387 dialnumber = 0;
389 writeline(pn); 388 writeline(pn);
390 389
391 setExpect(_ifaceppp->data()->modemConnectResp()); 390 setExpect(_ifaceppp->data()->modemConnectResp());
392 vmain = 100; 391 vmain = 100;
393 return; 392 return;
394 } 393 }
395 } 394 }
396 395
397 // wait for connect, but redial if BUSY or wait for user cancel 396 // wait for connect, but redial if BUSY or wait for user cancel
398 // if NO CARRIER or NO DIALTONE 397 // if NO CARRIER or NO DIALTONE
399 if(vmain == 100) { 398 if(vmain == 100) {
400 if(!expecting) { 399 if(!expecting) {
401 myreadbuffer = _ifaceppp->data()->modemConnectResp(); 400 myreadbuffer = _ifaceppp->data()->modemConnectResp();
402 setExpect("\n"); 401 setExpect("\n");
403 vmain = 101; 402 vmain = 101;
404 return; 403 return;
405 } 404 }
406 405
407 if(readbuffer.contains(_ifaceppp->data()->modemBusyResp())) { 406 if(readbuffer.contains(_ifaceppp->data()->modemBusyResp())) {
408 timeout_timer->stop(); 407 timeout_timer->stop();
409 timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); 408 timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000);
410 409
411 messg->setText(i18n("Line busy. Hanging up...")); 410 messg->setText(QObject::tr("Line busy. Hanging up..."));
412 emit debugPutChar('\n'); 411 emit debugPutChar('\n');
413 _ifaceppp->modem()->hangup(); 412 _ifaceppp->modem()->hangup();
414 413
415 if(_ifaceppp->data()->busyWait() > 0) { 414 if(_ifaceppp->data()->busyWait() > 0) {
416 QString bm = i18n("Line busy. Waiting: %1 seconds").arg(_ifaceppp->data()->busyWait()); 415 QString bm = QObject::tr("Line busy. Waiting: %1 seconds").arg(_ifaceppp->data()->busyWait());
417 messg->setText(bm); 416 messg->setText(bm);
418 emit debugMessage(bm); 417 emit debugMessage(bm);
419 418
420 pausing = true; 419 pausing = true;
421 420
422 pausetimer->start(_ifaceppp->data()->busyWait()*1000, true); 421 pausetimer->start(_ifaceppp->data()->busyWait()*1000, true);
423 timeout_timer->stop(); 422 timeout_timer->stop();
424 } 423 }
425 424
426 _ifaceppp->modem()->setDataMode(false); 425 _ifaceppp->modem()->setDataMode(false);
427 vmain = 0; 426 vmain = 0;
428 substate = -1; 427 substate = -1;
429 return; 428 return;
430 } 429 }
431 430
432 if(readbuffer.contains(_ifaceppp->data()->modemNoDialtoneResp())) { 431 if(readbuffer.contains(_ifaceppp->data()->modemNoDialtoneResp())) {
433 timeout_timer->stop(); 432 timeout_timer->stop();
434 433
435 messg->setText(i18n("No Dialtone")); 434 messg->setText(QObject::tr("No Dialtone"));
436 vmain = 20; 435 vmain = 20;
437 _ifaceppp->modem()->unlockdevice(); 436 _ifaceppp->modem()->unlockdevice();
438 return; 437 return;
439 } 438 }
440 439
441 if(readbuffer.contains(_ifaceppp->data()->modemNoCarrierResp())) { 440 if(readbuffer.contains(_ifaceppp->data()->modemNoCarrierResp())) {
442 timeout_timer->stop(); 441 timeout_timer->stop();
443 442
444 messg->setText(i18n("No Carrier")); 443 messg->setText(QObject::tr("No Carrier"));
445 vmain = 20; 444 vmain = 20;
446 _ifaceppp->modem()->unlockdevice(); 445 _ifaceppp->modem()->unlockdevice();
447 return; 446 return;
448 } 447 }
449 } 448 }
450 449
451 // wait for newline after CONNECT response (so we get the speed) 450 // wait for newline after CONNECT response (so we get the speed)
452 if(vmain == 101) { 451 if(vmain == 101) {
453 if(!expecting) { 452 if(!expecting) {
454 _ifaceppp->modem()->setDataMode(true); // modem will no longer respond to AT commands 453 _ifaceppp->modem()->setDataMode(true); // modem will no longer respond to AT commands
455 454
456 emit startAccounting(); 455 emit startAccounting();
457// p_kppp->con_win->startClock(); 456// p_kppp->con_win->startClock();
458 457
459 vmain = 2; 458 vmain = 2;
460 scriptTimeout=_ifaceppp->data()->modemTimeout()*1000; 459 scriptTimeout=_ifaceppp->data()->modemTimeout()*1000;
461 return; 460 return;
462 } 461 }
463 } 462 }
464 463
465 // execute the script 464 // execute the script
466 if(vmain == 2) { 465 if(vmain == 2) {
467 if(!expecting && !pausing && !scanning) { 466 if(!expecting && !pausing && !scanning) {
468 467
469 timeout_timer->stop(); 468 timeout_timer->stop();
470 timeout_timer->start(scriptTimeout); 469 timeout_timer->start(scriptTimeout);
471 470
472 if((unsigned) scriptindex < comlist->count()) { 471 if((unsigned) scriptindex < comlist->count()) {
473 scriptCommand = *(comlist->at(scriptindex)); 472 scriptCommand = *(comlist->at(scriptindex));
474 scriptArgument = *(arglist->at(scriptindex)); 473 scriptArgument = *(arglist->at(scriptindex));
475 } else { 474 } else {
476 qDebug( "End of script" ); 475 qDebug( "End of script" );
477 vmain = 10; 476 vmain = 10;
478 return; 477 return;
479 } 478 }
480 479
481 if (scriptCommand == "Scan") { 480 if (scriptCommand == "Scan") {
482 QString bm = i18n("Scanning %1").arg(scriptArgument); 481 QString bm = QObject::tr("Scanning %1").arg(scriptArgument);
483 messg->setText(bm); 482 messg->setText(bm);
484 emit debugMessage(bm); 483 emit debugMessage(bm);
485 484
486 setScan(scriptArgument); 485 setScan(scriptArgument);
487 scriptindex++; 486 scriptindex++;
488 return; 487 return;
489 } 488 }
490 489
491 if (scriptCommand == "Save") { 490 if (scriptCommand == "Save") {
492 QString bm = i18n("Saving %1").arg(scriptArgument); 491 QString bm = QObject::tr("Saving %1").arg(scriptArgument);
493 messg->setText(bm); 492 messg->setText(bm);
494 emit debugMessage(bm); 493 emit debugMessage(bm);
495 494
496 if (scriptArgument.lower() == "password") { 495 if (scriptArgument.lower() == "password") {
497 _ifaceppp->data()->setPassword(scanvar); 496 _ifaceppp->data()->setPassword(scanvar);
498 // p_kppp->setPW_Edit(scanvar); 497 // p_kppp->setPW_Edit(scanvar);
499 if(_ifaceppp->data()->storePassword()) 498 if(_ifaceppp->data()->storePassword())
500 _ifaceppp->data()->setStoredPassword(scanvar); 499 _ifaceppp->data()->setStoredPassword(scanvar);
501 firstrunPW = true; 500 firstrunPW = true;
502 } 501 }
503 502
504 scriptindex++; 503 scriptindex++;
505 return; 504 return;
506 } 505 }
507 506
508 507
509 if (scriptCommand == "Send" || scriptCommand == "SendNoEcho") { 508 if (scriptCommand == "Send" || scriptCommand == "SendNoEcho") {
510 QString bm = i18n("Sending %1"); 509 QString bm = QObject::tr("Sending %1");
511 510
512 // replace %USERNAME% and %PASSWORD% 511 // replace %USERNAME% and %PASSWORD%
513 QString arg = scriptArgument; 512 QString arg = scriptArgument;
514 QRegExp re1("%USERNAME%"); 513 QRegExp re1("%USERNAME%");
515 QRegExp re2("%PASSWORD%"); 514 QRegExp re2("%PASSWORD%");
516 arg = arg.replace(re1, _ifaceppp->data()->storedUsername()); 515 arg = arg.replace(re1, _ifaceppp->data()->storedUsername());
517 arg = arg.replace(re2, _ifaceppp->data()->storedPassword()); 516 arg = arg.replace(re2, _ifaceppp->data()->storedPassword());
518 517
519 if (scriptCommand == "Send") 518 if (scriptCommand == "Send")
520 bm = bm.arg(scriptArgument); 519 bm = bm.arg(scriptArgument);
521 else { 520 else {
522 for(uint i = 0; i < scriptArgument.length(); i++) 521 for(uint i = 0; i < scriptArgument.length(); i++)
523 bm = bm.arg("*"); 522 bm = bm.arg("*");
524 } 523 }
525 524
526 messg->setText(bm); 525 messg->setText(bm);
527 emit debugMessage(bm); 526 emit debugMessage(bm);
528 527
529 writeline(scriptArgument); 528 writeline(scriptArgument);
530 scriptindex++; 529 scriptindex++;
531 return; 530 return;
532 } 531 }
533 532
534 if (scriptCommand == "Expect") { 533 if (scriptCommand == "Expect") {
535 QString bm = i18n("Expecting %1").arg(scriptArgument); 534 QString bm = QObject::tr("Expecting %1").arg(scriptArgument);
536 messg->setText(bm); 535 messg->setText(bm);
537 emit debugMessage(bm); 536 emit debugMessage(bm);
538 537
539 // The incrementing of the scriptindex MUST be before the 538 // The incrementing of the scriptindex MUST be before the
540 // call to setExpect otherwise the expect will miss a string that is 539 // call to setExpect otherwise the expect will miss a string that is
541 // already in the buffer. 540 // already in the buffer.
542 scriptindex++; 541 scriptindex++;
543 setExpect(scriptArgument); 542 setExpect(scriptArgument);
544 return; 543 return;
545 } 544 }
546 545
547 546
548 if (scriptCommand == "Pause") { 547 if (scriptCommand == "Pause") {
549 QString bm = i18n("Pause %1 seconds").arg(scriptArgument); 548 QString bm = QObject::tr("Pause %1 seconds").arg(scriptArgument);
550 messg->setText(bm); 549 messg->setText(bm);
551 emit debugMessage(bm); 550 emit debugMessage(bm);
552 551
553 pausing = true; 552 pausing = true;
554 553
555 pausetimer->start(scriptArgument.toInt()*1000, true); 554 pausetimer->start(scriptArgument.toInt()*1000, true);
556 timeout_timer->stop(); 555 timeout_timer->stop();
557 556
558 scriptindex++; 557 scriptindex++;
559 return; 558 return;
560 } 559 }
561 560
562 if (scriptCommand == "Timeout") { 561 if (scriptCommand == "Timeout") {
563 562
564 timeout_timer->stop(); 563 timeout_timer->stop();
565 564
566 QString bm = i18n("Timeout %1 seconds").arg(scriptArgument); 565 QString bm = QObject::tr("Timeout %1 seconds").arg(scriptArgument);
567 messg->setText(bm); 566 messg->setText(bm);
568 emit debugMessage(bm); 567 emit debugMessage(bm);
569 568
570 scriptTimeout=scriptArgument.toInt()*1000; 569 scriptTimeout=scriptArgument.toInt()*1000;
571 timeout_timer->start(scriptTimeout); 570 timeout_timer->start(scriptTimeout);
572 571
573 scriptindex++; 572 scriptindex++;
574 return; 573 return;
575 } 574 }
576 575
577 if (scriptCommand == "Hangup") { 576 if (scriptCommand == "Hangup") {
578 messg->setText(i18n("Hangup")); 577 messg->setText(QObject::tr("Hangup"));
579 emit debugMessage(i18n("Hangup")); 578 emit debugMessage(QObject::tr("Hangup"));
580 579
581 writeline(_ifaceppp->data()->modemHangupStr()); 580 writeline(_ifaceppp->data()->modemHangupStr());
582 setExpect(_ifaceppp->data()->modemHangupResp()); 581 setExpect(_ifaceppp->data()->modemHangupResp());
583 582
584 scriptindex++; 583 scriptindex++;
585 return; 584 return;
586 } 585 }
587 586
588 if (scriptCommand == "Answer") { 587 if (scriptCommand == "Answer") {
589 588
590 timeout_timer->stop(); 589 timeout_timer->stop();
591 590
592 messg->setText(i18n("Answer")); 591 messg->setText(QObject::tr("Answer"));
593 emit debugMessage(i18n("Answer")); 592 emit debugMessage(QObject::tr("Answer"));
594 593
595 setExpect(_ifaceppp->data()->modemRingResp()); 594 setExpect(_ifaceppp->data()->modemRingResp());
596 vmain = 150; 595 vmain = 150;
597 return; 596 return;
598 } 597 }
599 598
600 if (scriptCommand == "ID") { 599 if (scriptCommand == "ID") {
601 QString bm = i18n("ID %1").arg(scriptArgument); 600 QString bm = QObject::tr("ID %1").arg(scriptArgument);
602 messg->setText(bm); 601 messg->setText(bm);
603 emit debugMessage(bm); 602 emit debugMessage(bm);
604 603
605 QString idstring = _ifaceppp->data()->password(); 604 QString idstring = _ifaceppp->data()->password();
606 605
607 if(!idstring.isEmpty() && firstrunID) { 606 if(!idstring.isEmpty() && firstrunID) {
608 // the user entered an Id on the main kppp dialog 607 // the user entered an Id on the main kppp dialog
609 writeline(idstring); 608 writeline(idstring);
610 firstrunID = false; 609 firstrunID = false;
611 scriptindex++; 610 scriptindex++;
612 } 611 }
613 else { 612 else {
614 // the user didn't enter and Id on the main kppp dialog 613 // the user didn't enter and Id on the main kppp dialog
615 // let's query for an ID 614 // let's query for an ID
616 /* if not around yet, then post window... */ 615 /* if not around yet, then post window... */
617 if (prompt->Consumed()) { 616 if (prompt->Consumed()) {
618 if (!(prompt->isVisible())) { 617 if (!(prompt->isVisible())) {
619 prompt->setPrompt(scriptArgument); 618 prompt->setPrompt(scriptArgument);
620 prompt->setEchoModeNormal(); 619 prompt->setEchoModeNormal();
621 prompt->show(); 620 prompt->show();
622 } 621 }
623 } else { 622 } else {
624 /* if prompt withdrawn ... then, */ 623 /* if prompt withdrawn ... then, */
625 if(!(prompt->isVisible())) { 624 if(!(prompt->isVisible())) {
626 writeline(prompt->text()); 625 writeline(prompt->text());
627 prompt->setConsumed(); 626 prompt->setConsumed();
628 scriptindex++; 627 scriptindex++;
629 return; 628 return;
630 } 629 }
631 /* replace timeout value */ 630 /* replace timeout value */
632 } 631 }
633 } 632 }
634 } 633 }
635 634
636 if (scriptCommand == "Password") { 635 if (scriptCommand == "Password") {
637 QString bm = i18n("Password %1").arg(scriptArgument); 636 QString bm = QObject::tr("Password %1").arg(scriptArgument);
638 messg->setText(bm); 637 messg->setText(bm);
639 emit debugMessage(bm); 638 emit debugMessage(bm);
640 639
641 QString pwstring = _ifaceppp->data()->password(); 640 QString pwstring = _ifaceppp->data()->password();
642 641
643 if(!pwstring.isEmpty() && firstrunPW) { 642 if(!pwstring.isEmpty() && firstrunPW) {
644 // the user entered a password on the main kppp dialog 643 // the user entered a password on the main kppp dialog
645 writeline(pwstring); 644 writeline(pwstring);
646 firstrunPW = false; 645 firstrunPW = false;
647 scriptindex++; 646 scriptindex++;
648 } 647 }
649 else { 648 else {
650 // the user didn't enter a password on the main kppp dialog 649 // the user didn't enter a password on the main kppp dialog
651 // let's query for a password 650 // let's query for a password
652 /* if not around yet, then post window... */ 651 /* if not around yet, then post window... */
653 if (prompt->Consumed()) { 652 if (prompt->Consumed()) {
654 if (!(prompt->isVisible())) { 653 if (!(prompt->isVisible())) {
655 prompt->setPrompt(scriptArgument); 654 prompt->setPrompt(scriptArgument);
656 prompt->setEchoModePassword(); 655 prompt->setEchoModePassword();
657 prompt->show(); 656 prompt->show();
658 } 657 }
659 } else { 658 } else {
660 /* if prompt withdrawn ... then, */ 659 /* if prompt withdrawn ... then, */
661 if(!(prompt->isVisible())) { 660 if(!(prompt->isVisible())) {
662 // p_kppp->setPW_Edit(prompt->text()); 661 // p_kppp->setPW_Edit(prompt->text());
663 writeline(prompt->text()); 662 writeline(prompt->text());
664 prompt->setConsumed(); 663 prompt->setConsumed();
665 scriptindex++; 664 scriptindex++;
666 return; 665 return;
667 } 666 }
668 /* replace timeout value */ 667 /* replace timeout value */
669 } 668 }
670 } 669 }
671 } 670 }
672 671
673 if (scriptCommand == "Prompt") { 672 if (scriptCommand == "Prompt") {
674 QString bm = i18n("Prompting %1"); 673 QString bm = QObject::tr("Prompting %1");
675 674
676 // if the scriptindex (aka the prompt text) includes a ## marker 675 // if the scriptindex (aka the prompt text) includes a ## marker
677 // this marker should get substituted with the contents of our stored 676 // this marker should get substituted with the contents of our stored
678 // variable (from the subsequent scan). 677 // variable (from the subsequent scan).
679 678
680 QString ts = scriptArgument; 679 QString ts = scriptArgument;
681 int vstart = ts.find( "##" ); 680 int vstart = ts.find( "##" );
682 if( vstart != -1 ) { 681 if( vstart != -1 ) {
683 ts.remove( vstart, 2 ); 682 ts.remove( vstart, 2 );
684 ts.insert( vstart, scanvar ); 683 ts.insert( vstart, scanvar );
685 } 684 }
686 685
687 bm = bm.arg(ts); 686 bm = bm.arg(ts);
688 messg->setText(bm); 687 messg->setText(bm);
689 emit debugMessage(bm); 688 emit debugMessage(bm);
690 689
691 /* if not around yet, then post window... */ 690 /* if not around yet, then post window... */
692 if (prompt->Consumed()) { 691 if (prompt->Consumed()) {
693 if (!(prompt->isVisible())) { 692 if (!(prompt->isVisible())) {
694 prompt->setPrompt( ts ); 693 prompt->setPrompt( ts );
695 prompt->setEchoModeNormal(); 694 prompt->setEchoModeNormal();
696 prompt->show(); 695 prompt->show();
697 } 696 }
698 } else { 697 } else {
699 /* if prompt withdrawn ... then, */ 698 /* if prompt withdrawn ... then, */
700 if (!(prompt->isVisible())) { 699 if (!(prompt->isVisible())) {
701 writeline(prompt->text()); 700 writeline(prompt->text());
702 prompt->setConsumed(); 701 prompt->setConsumed();
703 scriptindex++; 702 scriptindex++;
704 return; 703 return;
705 } 704 }
706 /* replace timeout value */ 705 /* replace timeout value */
707 } 706 }
708 } 707 }
709 708
710 if (scriptCommand == "PWPrompt") { 709 if (scriptCommand == "PWPrompt") {
711 QString bm = i18n("PW Prompt %1").arg(scriptArgument); 710 QString bm = QObject::tr("PW Prompt %1").arg(scriptArgument);
712 messg->setText(bm); 711 messg->setText(bm);
713 emit debugMessage(bm); 712 emit debugMessage(bm);
714 713
715 /* if not around yet, then post window... */ 714 /* if not around yet, then post window... */
716 if (prompt->Consumed()) { 715 if (prompt->Consumed()) {
717 if (!(prompt->isVisible())) { 716 if (!(prompt->isVisible())) {
718 prompt->setPrompt(scriptArgument); 717 prompt->setPrompt(scriptArgument);
719 prompt->setEchoModePassword(); 718 prompt->setEchoModePassword();
720 prompt->show(); 719 prompt->show();
721 } 720 }
722 } else { 721 } else {
723 /* if prompt withdrawn ... then, */ 722 /* if prompt withdrawn ... then, */
724 if (!(prompt->isVisible())) { 723 if (!(prompt->isVisible())) {
725 writeline(prompt->text()); 724 writeline(prompt->text());
726 prompt->setConsumed(); 725 prompt->setConsumed();
727 scriptindex++; 726 scriptindex++;
728 return; 727 return;
729 } 728 }
730 /* replace timeout value */ 729 /* replace timeout value */
731 } 730 }
732 } 731 }
733 732
734 if (scriptCommand == "LoopStart") { 733 if (scriptCommand == "LoopStart") {
735 734
736 QString bm = i18n("Loop Start %1").arg(scriptArgument); 735 QString bm = QObject::tr("Loop Start %1").arg(scriptArgument);
737 736
738 // The incrementing of the scriptindex MUST be before the 737 // The incrementing of the scriptindex MUST be before the
739 // call to setExpect otherwise the expect will miss a string that is 738 // call to setExpect otherwise the expect will miss a string that is
740 // already in the buffer. 739 // already in the buffer.
741 scriptindex++; 740 scriptindex++;
742 741
743 if ( loopnest > (MAXLOOPNEST-2) ) { 742 if ( loopnest > (MAXLOOPNEST-2) ) {
744 bm += i18n("ERROR: Nested too deep, ignored."); 743 bm += QObject::tr("ERROR: Nested too deep, ignored.");
745 vmain=20; 744 vmain=20;
746 cancelbutton(); 745 cancelbutton();
747 QMessageBox::critical(0, "error", i18n("Loops nested too deeply!")); 746 QMessageBox::critical(0, "error", QObject::tr("Loops nested too deeply!"));
748 } else { 747 } else {
749 setExpect(scriptArgument); 748 setExpect(scriptArgument);
750 loopstartindex[loopnest] = scriptindex; 749 loopstartindex[loopnest] = scriptindex;
751 loopstr[loopnest] = scriptArgument; 750 loopstr[loopnest] = scriptArgument;
752 loopend = false; 751 loopend = false;
753 loopnest++; 752 loopnest++;
754 } 753 }
755 messg->setText(bm); 754 messg->setText(bm);
756 emit debugMessage(bm); 755 emit debugMessage(bm);
757 756
758 } 757 }
759 758
760 if (scriptCommand == "LoopEnd") { 759 if (scriptCommand == "LoopEnd") {
761 QString bm = i18n("Loop End %1").arg(scriptArgument); 760 QString bm = QObject::tr("Loop End %1").arg(scriptArgument);
762 if ( loopnest <= 0 ) { 761 if ( loopnest <= 0 ) {
763 bm = i18n("LoopEnd without matching Start! Line: %1").arg(bm); 762 bm = QObject::tr("LoopEnd without matching Start! Line: %1").arg(bm);
764 vmain=20; 763 vmain=20;
765 cancelbutton(); 764 cancelbutton();
766 QMessageBox::critical(0, "error", bm); 765 QMessageBox::critical(0, "error", bm);
767 return; 766 return;
768 } else { 767 } else {
769 // NB! The incrementing of the scriptindex MUST be before the 768 // NB! The incrementing of the scriptindex MUST be before the
770 // call to setExpect otherwise the expect will miss a string 769 // call to setExpect otherwise the expect will miss a string
771 // that is already in the buffer. 770 // that is already in the buffer.
772 scriptindex++; 771 scriptindex++;
773 setExpect(scriptArgument); 772 setExpect(scriptArgument);
774 loopnest--; 773 loopnest--;
775 loopend = true; 774 loopend = true;
776 } 775 }
777 messg->setText(bm); 776 messg->setText(bm);
778 emit debugMessage(bm); 777 emit debugMessage(bm);
779 778
780 } 779 }
781 } 780 }
782 } 781 }
783 782
784 // this is a subroutine for the "Answer" script option 783 // this is a subroutine for the "Answer" script option
785 784
786 if(vmain == 150) { 785 if(vmain == 150) {
787 if(!expecting) { 786 if(!expecting) {
788 writeline(_ifaceppp->data()->modemAnswerStr()); 787 writeline(_ifaceppp->data()->modemAnswerStr());
789 setExpect(_ifaceppp->data()->modemAnswerResp()); 788 setExpect(_ifaceppp->data()->modemAnswerResp());
790 789
791 vmain = 2; 790 vmain = 2;
792 scriptindex++; 791 scriptindex++;
793 return; 792 return;
794 } 793 }
795 } 794 }
796 795
797 if(vmain == 30) { 796 if(vmain == 30) {
798// if (termwindow->isVisible()) 797// if (termwindow->isVisible())
799// return; 798// return;
800// if (termwindow->pressedContinue()) 799// if (termwindow->pressedContinue())
801// vmain = 10; 800// vmain = 10;
802// else 801// else
803 cancelbutton(); 802 cancelbutton();
804 } 803 }
805 804
806 if(vmain == 10) { 805 if(vmain == 10) {
807 if(!expecting) { 806 if(!expecting) {
808 807
809 int result; 808 int result;
810 809
811 timeout_timer->stop(); 810 timeout_timer->stop();
812 if_timeout_timer->stop(); // better be sure. 811 if_timeout_timer->stop(); // better be sure.
813 812
814 // stop reading of data 813 // stop reading of data
815 _ifaceppp->modem()->stop(); 814 _ifaceppp->modem()->stop();
816 815
817 if(_ifaceppp->data()->authMethod() == AUTH_TERMINAL) { 816 if(_ifaceppp->data()->authMethod() == AUTH_TERMINAL) {
818 // if (termwindow) { 817 // if (termwindow) {
819 // delete termwindow; 818 // delete termwindow;
820 // termwindow = 0L; 819 // termwindow = 0L;
821 // this->show(); 820 // this->show();
822 // } else { 821 // } else {
823 // termwindow = new LoginTerm(0L, 0L); 822 // termwindow = new LoginTerm(0L, 0L);
824 // hide(); 823 // hide();
825 // termwindow->show(); 824 // termwindow->show();
826 // vmain = 30; 825 // vmain = 30;
827 // return; 826 // return;
828 // } 827 // }
829 } 828 }
830 829
831 // Close the tty. This prevents the QTimer::singleShot() in 830 // Close the tty. This prevents the QTimer::singleShot() in
832 // Modem::readtty() from re-enabling the socket notifier. 831 // Modem::readtty() from re-enabling the socket notifier.
833 // The port is still held open by the helper process. 832 // The port is still held open by the helper process.
834 833
835 /* Er, there _is_ not QTimer::singleShot() in Modem::readtty(), 834 /* Er, there _is_ not QTimer::singleShot() in Modem::readtty(),
836 and closing the thing prevents pppd from using it later. */ 835 and closing the thing prevents pppd from using it later. */
837 //_ifaceppp->modem()->closetty(); 836 //_ifaceppp->modem()->closetty();
838 837
839 killTimer( main_timer_ID ); 838 killTimer( main_timer_ID );
840 839
841 if_timeout_timer->start(_ifaceppp->data()->pppdTimeout()*1000); 840 if_timeout_timer->start(_ifaceppp->data()->pppdTimeout()*1000);
842 qDebug( "started if timeout timer with %i", _ifaceppp->data()->pppdTimeout()*1000); 841 qDebug( "started if timeout timer with %i", _ifaceppp->data()->pppdTimeout()*1000);
843 842
844 // find out PPP interface and notify the stats module 843 // find out PPP interface and notify the stats module
845// stats->setUnit(pppInterfaceNumber()); 844// stats->setUnit(pppInterfaceNumber());
846 845
847 qApp->flushX(); 846 qApp->flushX();
848 semaphore = true; 847 semaphore = true;
849 result = execppp(); 848 result = execppp();
850 849
851 emit debugMessage(i18n("Starting pppd...")); 850 emit debugMessage(QObject::tr("Starting pppd..."));
852 qDebug("execppp() returned with return-code %i", result ); 851 qDebug("execppp() returned with return-code %i", result );
853 852
854 if(result) { 853 if(result) {
855 if(!_ifaceppp->data()->autoDNS()) 854 if(!_ifaceppp->data()->autoDNS())
856 adddns( _ifaceppp ); 855 adddns( _ifaceppp );
857 856
858 // O.K we are done here, let's change over to the if_waiting loop 857 // O.K we are done here, let's change over to the if_waiting loop
859 // where we wait for the ppp if (interface) to come up. 858 // where we wait for the ppp if (interface) to come up.
860 859
861 emit if_waiting_signal(); 860 emit if_waiting_signal();
862 } else { 861 } else {
863 862
864 // starting pppd wasn't successful. Error messages were 863 // starting pppd wasn't successful. Error messages were
865 // handled by execppp(); 864 // handled by execppp();
866 if_timeout_timer->stop(); 865 if_timeout_timer->stop();
867 this->hide(); 866 this->hide();
868 messg->setText(""); 867 messg->setText("");
869 //p_kppp->quit_b->setFocus(); 868 //p_kppp->quit_b->setFocus();
870 //p_kppp->show(); 869 //p_kppp->show();
871 qApp->processEvents(); 870 qApp->processEvents();
872 _ifaceppp->modem()->hangup(); 871 _ifaceppp->modem()->hangup();
873 emit stopAccounting(); 872 emit stopAccounting();
874 //p_kppp->con_win->stopClock(); 873 //p_kppp->con_win->stopClock();
875 _ifaceppp->modem()->closetty(); 874 _ifaceppp->modem()->closetty();
876 _ifaceppp->modem()->unlockdevice(); 875 _ifaceppp->modem()->unlockdevice();
877 876
878 } 877 }
879 878
880 return; 879 return;
881 } 880 }
882 } 881 }
883 882
884 // this is a "wait until cancel" entry 883 // this is a "wait until cancel" entry
885 884
886 if(vmain == 20) { 885 if(vmain == 20) {
887 } 886 }
888} 887}
889 888
890 889
891void ConnectWidget::set_con_speed_string() { 890void ConnectWidget::set_con_speed_string() {
892 // Here we are trying to determine the speed at which we are connected. 891 // Here we are trying to determine the speed at which we are connected.
893 // Usually the modem responds after connect with something like 892 // Usually the modem responds after connect with something like
894 // CONNECT 115200, so all we need to do is find the number after CONNECT 893 // CONNECT 115200, so all we need to do is find the number after CONNECT
895 // or whatever the modemConnectResp() is. 894 // or whatever the modemConnectResp() is.
896// p_kppp->con_speed = _ifaceppp->modem()->parseModemSpeed(myreadbuffer); 895// p_kppp->con_speed = _ifaceppp->modem()->parseModemSpeed(myreadbuffer);
897} 896}
898 897
899 898
900 899
901void ConnectWidget::readChar(unsigned char c) { 900void ConnectWidget::readChar(unsigned char c) {
902 if(semaphore) 901 if(semaphore)
903 return; 902 return;
904 903
905 readbuffer += c; 904 readbuffer += c;
906 myreadbuffer += c; 905 myreadbuffer += c;
907 906
908 // While in scanning mode store each char to the scan buffer 907 // While in scanning mode store each char to the scan buffer
909 // for use in the prompt command 908 // for use in the prompt command
910 if( scanning ) 909 if( scanning )
911 scanbuffer += c; 910 scanbuffer += c;
912 911
913 // add to debug window 912 // add to debug window
914 emit debugPutChar(c); 913 emit debugPutChar(c);
915 914
916 checkBuffers(); 915 checkBuffers();
917} 916}
918 917
919 918
920void ConnectWidget::checkBuffers() { 919void ConnectWidget::checkBuffers() {
921 // Let's check if we are finished with scanning: 920 // Let's check if we are finished with scanning:
922 // The scanstring have to be in the buffer and the latest character 921 // The scanstring have to be in the buffer and the latest character
923 // was a carriage return or an linefeed (depending on modem setup) 922 // was a carriage return or an linefeed (depending on modem setup)
924 if( scanning && scanbuffer.contains(scanstr) && 923 if( scanning && scanbuffer.contains(scanstr) &&
925 ( scanbuffer.right(1) == "\n" || scanbuffer.right(1) == "\r") ) { 924 ( scanbuffer.right(1) == "\n" || scanbuffer.right(1) == "\r") ) {
926 scanning = false; 925 scanning = false;
927 926
928 int vstart = scanbuffer.find( scanstr ) + scanstr.length(); 927 int vstart = scanbuffer.find( scanstr ) + scanstr.length();
929 scanvar = scanbuffer.mid( vstart, scanbuffer.length() - vstart); 928 scanvar = scanbuffer.mid( vstart, scanbuffer.length() - vstart);
930 scanvar = scanvar.stripWhiteSpace(); 929 scanvar = scanvar.stripWhiteSpace();
931 930
932 // Show the Variabel content in the debug window 931 // Show the Variabel content in the debug window
933 QString sv = i18n("Scan Var: %1").arg(scanvar); 932 QString sv = QObject::tr("Scan Var: %1").arg(scanvar);
934 emit debugMessage(sv); 933 emit debugMessage(sv);
935 } 934 }
936 935
937 if(expecting) { 936 if(expecting) {
938 if(readbuffer.contains(expectstr)) { 937 if(readbuffer.contains(expectstr)) {
939 expecting = false; 938 expecting = false;
940 // keep everything after the expected string 939 // keep everything after the expected string
941 readbuffer.remove(0, readbuffer.find(expectstr) + expectstr.length()); 940 readbuffer.remove(0, readbuffer.find(expectstr) + expectstr.length());
942 941
943 QString ts = i18n("Found: %1").arg(expectstr); 942 QString ts = QObject::tr("Found: %1").arg(expectstr);
944 emit debugMessage(ts); 943 emit debugMessage(ts);
945 944
946 if (loopend) { 945 if (loopend) {
947 loopend=false; 946 loopend=false;
948 } 947 }
949 } 948 }
950 949
951 if (loopend && readbuffer.contains(loopstr[loopnest])) { 950 if (loopend && readbuffer.contains(loopstr[loopnest])) {
952 expecting = false; 951 expecting = false;
953 readbuffer = ""; 952 readbuffer = "";
954 QString ts = i18n("Looping: %1").arg(loopstr[loopnest]); 953 QString ts = QObject::tr("Looping: %1").arg(loopstr[loopnest]);
955 emit debugMessage(ts); 954 emit debugMessage(ts);
956 scriptindex = loopstartindex[loopnest]; 955 scriptindex = loopstartindex[loopnest];
957 loopend = false; 956 loopend = false;
958 loopnest++; 957 loopnest++;
959 } 958 }
960 // notify event loop if expected string was found 959 // notify event loop if expected string was found
961 if(!expecting) 960 if(!expecting)
962 timerEvent((QTimerEvent *) 0); 961 timerEvent((QTimerEvent *) 0);
963 } 962 }
964} 963}
965 964
966 965
967 966
968void ConnectWidget::pause() { 967void ConnectWidget::pause() {
969 pausing = false; 968 pausing = false;
970 pausetimer->stop(); 969 pausetimer->stop();
971} 970}
972 971
973 972
974void ConnectWidget::cancelbutton() { 973void ConnectWidget::cancelbutton() {
975 _ifaceppp->modem()->stop(); 974 _ifaceppp->modem()->stop();
976 killTimer(main_timer_ID); 975 killTimer(main_timer_ID);
977 timeout_timer->stop(); 976 timeout_timer->stop();
978 if_timer->stop(); 977 if_timer->stop();
979 if_timeout_timer->stop(); 978 if_timeout_timer->stop();
980 979
981// if (termwindow) { 980// if (termwindow) {
982// delete termwindow; 981// delete termwindow;
983// termwindow = 0L; 982// termwindow = 0L;
984// this->show(); 983// this->show();
985// } 984// }
986 985
987 messg->setText(i18n("One moment please...")); 986 messg->setText(QObject::tr("One moment please..."));
988 987
989 // just to be sure 988 // just to be sure
990 _ifaceppp->modem()->removeSecret(AUTH_PAP); 989 _ifaceppp->modem()->removeSecret(AUTH_PAP);
991 _ifaceppp->modem()->removeSecret(AUTH_CHAP); 990 _ifaceppp->modem()->removeSecret(AUTH_CHAP);
992 removedns(_ifaceppp); 991 removedns(_ifaceppp);
993 992
994 qApp->processEvents(); 993 qApp->processEvents();
995 994
996 _ifaceppp->modem()->killPPPDaemon(); 995 _ifaceppp->modem()->killPPPDaemon();
997 _ifaceppp->modem()->hangup(); 996 _ifaceppp->modem()->hangup();
998 997
999 998
1000// p_kppp->quit_b->setFocus(); 999// p_kppp->quit_b->setFocus();
1001// p_kppp->show(); 1000// p_kppp->show();
1002 // emit stopAccounting();// just to be sure 1001 // emit stopAccounting();// just to be sure
1003// p_kppp->con_win->stopClock(); 1002// p_kppp->con_win->stopClock();
1004 _ifaceppp->modem()->closetty(); 1003 _ifaceppp->modem()->closetty();
1005 _ifaceppp->modem()->unlockdevice(); 1004 _ifaceppp->modem()->unlockdevice();
1006 1005
1007 //abort prompt window... 1006 //abort prompt window...
1008 if (prompt->isVisible()) { 1007 if (prompt->isVisible()) {
1009 prompt->hide(); 1008 prompt->hide();
1010 } 1009 }
1011 prompt->setConsumed(); 1010 prompt->setConsumed();
1012 1011
1013 messg->setText(tr("offline")); 1012 _ifaceppp->setStatus( false );
1013 _ifaceppp->refresh();
1014// messg->setText(tr("offline"));
1015 refresh();
1014} 1016}
1015 1017
1016 1018
1017void ConnectWidget::script_timed_out() { 1019void ConnectWidget::script_timed_out() {
1018 if(vmain == 20) { // we are in the 'wait for the user to cancel' state 1020 if(vmain == 20) { // we are in the 'wait for the user to cancel' state
1019 timeout_timer->stop(); 1021 timeout_timer->stop();
1020 emit stopAccounting(); 1022 emit stopAccounting();
1021// p_kppp->con_win->stopClock(); 1023// p_kppp->con_win->stopClock();
1022 return; 1024 return;
1023 } 1025 }
1024 1026
1025 if (prompt->isVisible()) 1027 if (prompt->isVisible())
1026 prompt->hide(); 1028 prompt->hide();
1027 1029
1028 prompt->setConsumed(); 1030 prompt->setConsumed();
1029 messg->setText(i18n("Script timed out!")); 1031 messg->setText(QObject::tr("Script timed out!"));
1030 _ifaceppp->modem()->hangup(); 1032 _ifaceppp->modem()->hangup();
1031 emit stopAccounting(); 1033 emit stopAccounting();
1032// p_kppp->con_win->stopClock(); 1034// p_kppp->con_win->stopClock();
1033 1035
1034 vmain = 0; // let's try again. 1036 vmain = 0; // let's try again.
1035 substate = -1; 1037 substate = -1;
1036} 1038}
1037 1039
1038 1040
1039void ConnectWidget::setScan(const QString &n) { 1041void ConnectWidget::setScan(const QString &n) {
1040 scanning = true; 1042 scanning = true;
1041 scanstr = n; 1043 scanstr = n;
1042 scanbuffer = ""; 1044 scanbuffer = "";
1043 1045
1044 QString ts = i18n("Scanning: %1").arg(n); 1046 QString ts = QObject::tr("Scanning: %1").arg(n);
1045 emit debugMessage(ts); 1047 emit debugMessage(ts);
1046} 1048}
1047 1049
1048 1050
1049void ConnectWidget::setExpect(const QString &n) { 1051void ConnectWidget::setExpect(const QString &n) {
1050 expecting = true; 1052 expecting = true;
1051 expectstr = n; 1053 expectstr = n;
1052 1054
1053 QString ts = i18n("Expecting: %1").arg(n); 1055 QString ts = QObject::tr("Expecting: %1").arg(n);
1054 ts.replace(QRegExp("\n"), "<LF>"); 1056 ts.replace(QRegExp("\n"), "<LF>");
1055 emit debugMessage(ts); 1057 emit debugMessage(ts);
1056 1058
1057 // check if the expected string is in the read buffer already. 1059 // check if the expected string is in the read buffer already.
1058 checkBuffers(); 1060 checkBuffers();
1059} 1061}
1060 1062
1061 1063
1062void ConnectWidget::if_waiting_timed_out() { 1064void ConnectWidget::if_waiting_timed_out() {
1063 if_timer->stop(); 1065 if_timer->stop();
1064 if_timeout_timer->stop(); 1066 if_timeout_timer->stop();
1065 qDebug("if_waiting_timed_out()"); 1067 qDebug("if_waiting_timed_out()");
1066 1068
1067 _ifaceppp->data()->setpppdError(E_IF_TIMEOUT); 1069 _ifaceppp->data()->setpppdError(E_IF_TIMEOUT);
1068 1070
1069 // let's kill the stuck pppd 1071 // let's kill the stuck pppd
1070 _ifaceppp->modem()->killPPPDaemon(); 1072 _ifaceppp->modem()->killPPPDaemon();
1071 1073
1072 emit stopAccounting(); 1074 emit stopAccounting();
1073// p_kppp->con_win->stopClock(); 1075// p_kppp->con_win->stopClock();
1074 1076
1075 1077
1076 // killing ppp will generate a SIGCHLD which will be caught in pppdie() 1078 // killing ppp will generate a SIGCHLD which will be caught in pppdie()
1077 // in main.cpp what happens next will depend on the boolean 1079 // in main.cpp what happens next will depend on the boolean
1078 // reconnect_on_disconnect which is set in ConnectWidget::init(); 1080 // reconnect_on_disconnect which is set in ConnectWidget::init();
1079} 1081}
1080 1082
1081void ConnectWidget::pppdDied() 1083void ConnectWidget::pppdDied()
1082{ 1084{
1083 if_timer->stop(); 1085 if_timer->stop();
1084 if_timeout_timer->stop(); 1086 if_timeout_timer->stop();
1085} 1087}
1086 1088
1087void ConnectWidget::if_waiting_slot() { 1089void ConnectWidget::if_waiting_slot() {
1088 messg->setText(i18n("Logging on to network...")); 1090 messg->setText(QObject::tr("Logging on to network..."));
1089 1091
1090// if(!stats->ifIsUp()) { 1092// if(!stats->ifIsUp()) {
1091 1093
1092// if(_ifaceppp->data()->pppdError() != 0) { 1094// if(_ifaceppp->data()->pppdError() != 0) {
1093// // we are here if pppd died immediately after starting it. 1095// // we are here if pppd died immediately after starting it.
1094// pppdDied(); 1096// pppdDied();
1095// // error message handled in main.cpp: sigPPPDDied() 1097// // error message handled in main.cpp: sigPPPDDied()
1096// return; 1098// return;
1097// } 1099// }
1098 1100
1099// if_timer->start(100, TRUE); // single shot 1101// if_timer->start(100, TRUE); // single shot
1100// return; 1102// return;
1101// } 1103// }
1102 1104
1103 // O.K the ppp interface is up and running 1105 // O.K the ppp interface is up and running
1104 // give it a few time to come up completly (0.2 seconds) 1106 // give it a few time to come up completly (0.2 seconds)
1105 if_timeout_timer->stop(); 1107 if_timeout_timer->stop();
1106 if_timer->stop(); 1108 if_timer->stop();
1107 usleep(200000); 1109 usleep(200000);
1108 1110
1109 if(_ifaceppp->data()->autoDNS()) 1111 if(_ifaceppp->data()->autoDNS())
1110 addpeerdns( _ifaceppp ); 1112 addpeerdns( _ifaceppp );
1111 1113
1112 // Close the debugging window. If we are connected, we 1114 // Close the debugging window. If we are connected, we
1113 // are not really interested in debug output 1115 // are not really interested in debug output
1114 emit closeDebugWindow(); 1116 emit closeDebugWindow();
1115// p_kppp->statdlg->take_stats(); // start taking ppp statistics 1117// p_kppp->statdlg->take_stats(); // start taking ppp statistics
1116 auto_hostname(_ifaceppp); 1118 auto_hostname(_ifaceppp);
1117 1119
1118 if(!_ifaceppp->data()->command_on_connect().isEmpty()) { 1120 if(!_ifaceppp->data()->command_on_connect().isEmpty()) {
1119 messg->setText(i18n("Running startup command...")); 1121 messg->setText(QObject::tr("Running startup command..."));
1120 1122
1121 // make sure that we don't get any async errors 1123 // make sure that we don't get any async errors
1122 qApp->flushX(); 1124 qApp->flushX();
1123 execute_command(_ifaceppp->data()->command_on_connect()); 1125 execute_command(_ifaceppp->data()->command_on_connect());
1124 messg->setText(i18n("Done")); 1126 messg->setText(QObject::tr("Done"));
1125 } 1127 }
1126 1128
1127 // remove the authentication file 1129 // remove the authentication file
1128 _ifaceppp->modem()->removeSecret(AUTH_PAP); 1130 _ifaceppp->modem()->removeSecret(AUTH_PAP);
1129 _ifaceppp->modem()->removeSecret(AUTH_CHAP); 1131 _ifaceppp->modem()->removeSecret(AUTH_CHAP);
1130 1132
1131 emit debugMessage(i18n("Done")); 1133 emit debugMessage(QObject::tr("Done"));
1132 set_con_speed_string(); 1134 set_con_speed_string();
1133 1135
1134// p_kppp->con_win->setConnectionSpeed(p_kppp->con_speed); 1136// p_kppp->con_win->setConnectionSpeed(p_kppp->con_speed);
1135 this->hide(); 1137// this->hide();
1136 messg->setText(""); 1138// messg->setText("");
1137 1139
1138 _ifaceppp->setStatus( true ); 1140 _ifaceppp->setStatus( true );
1141
1142 m_refreshTimer = new QTimer( this );
1143 connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) );
1144 m_refreshTimer->start( 3000 );
1145 //_ifaceppp->refresh();
1139 // emit _ifaceppp->updateInterface(_ifaceppp); 1146 // emit _ifaceppp->updateInterface(_ifaceppp);
1140 1147
1141 // prepare the con_win so as to have the right size for 1148 // prepare the con_win so as to have the right size for
1142 // accounting / non-accounting mode 1149 // accounting / non-accounting mode
1143// if(p_kppp->acct != 0) 1150// if(p_kppp->acct != 0)
1144// p_kppp->con_win->accounting(p_kppp->acct->running()); 1151// p_kppp->con_win->accounting(p_kppp->acct->running());
1145// else 1152// else
1146// p_kppp->con_win->accounting(false); 1153// p_kppp->con_win->accounting(false);
1147 1154
1148// if (_ifaceppp->data()->get_dock_into_panel()) { 1155// if (_ifaceppp->data()->get_dock_into_panel()) {
1149// // DockWidget::dock_widget->show(); 1156// // DockWidget::dock_widget->show();
1150// // DockWidget::dock_widget->take_stats(); 1157// // DockWidget::dock_widget->take_stats();
1151// // this->hide(); 1158// // this->hide();
1152// } 1159// }
1153// else { 1160// else {
1154// // p_kppp->con_win->show(); 1161// // p_kppp->con_win->show();
1155 1162
1156// if(_ifaceppp->data()->get_iconify_on_connect()) { 1163// if(_ifaceppp->data()->get_iconify_on_connect()) {
1157// // p_kppp->con_win->showMinimized(); 1164// // p_kppp->con_win->showMinimized();
1158// } 1165// }
1159// } 1166// }
1160 1167
1161 _ifaceppp->modem()->closetty(); 1168 _ifaceppp->modem()->closetty();
1162} 1169}
1163 1170
1171void ConnectWidget::refresh() {
1172 _ifaceppp->refresh();
1173 if ( _ifaceppp->getStatus() ) {
1174 messg->setText(QObject::tr("Online"));
1175 } else {
1176 messg->setText(QObject::tr("Offline"));
1177 }
1178}
1179
1164 1180
1165bool ConnectWidget::execppp() { 1181bool ConnectWidget::execppp() {
1166 QString command; 1182 QString command;
1167 1183
1168 command = "pppd"; 1184 command = "pppd";
1169 1185
1170 // as of version 2.3.6 pppd falls back to the real user rights when 1186 // as of version 2.3.6 pppd falls back to the real user rights when
1171 // opening a device given in a command line. To avoid permission conflicts 1187 // opening a device given in a command line. To avoid permission conflicts
1172 // we'll simply leave this argument away. pppd will then use the default tty 1188 // we'll simply leave this argument away. pppd will then use the default tty
1173 // which is the serial port we connected stdin/stdout to in opener.cpp. 1189 // which is the serial port we connected stdin/stdout to in opener.cpp.
1174 // command += " "; 1190 // command += " ";
1175 // command += _ifaceppp->data()->modemDevice(); 1191 // command += _ifaceppp->data()->modemDevice();
1176 1192
1177 command += " " + _ifaceppp->data()->speed(); 1193 command += " " + _ifaceppp->data()->speed();
1178 1194
1179 command += " -detach"; 1195 command += " -detach";
1180 1196
1181 if(_ifaceppp->data()->ipaddr() != "0.0.0.0" || 1197 if(_ifaceppp->data()->ipaddr() != "0.0.0.0" ||
1182 _ifaceppp->data()->gateway() != "0.0.0.0") { 1198 _ifaceppp->data()->gateway() != "0.0.0.0") {
1183 if(_ifaceppp->data()->ipaddr() != "0.0.0.0") { 1199 if(_ifaceppp->data()->ipaddr() != "0.0.0.0") {
1184 command += " "; 1200 command += " ";
1185 command += _ifaceppp->data()->ipaddr(); 1201 command += _ifaceppp->data()->ipaddr();
1186 command += ":"; 1202 command += ":";
1187 } 1203 }
1188 else { 1204 else {
1189 command += " "; 1205 command += " ";
1190 command += ":"; 1206 command += ":";
1191 } 1207 }
1192 1208
1193 if(_ifaceppp->data()->gateway() != "0.0.0.0") 1209 if(_ifaceppp->data()->gateway() != "0.0.0.0")
1194 command += _ifaceppp->data()->gateway(); 1210 command += _ifaceppp->data()->gateway();
1195 } 1211 }
1196 1212
1197 if(_ifaceppp->data()->subnetmask() != "0.0.0.0") 1213 if(_ifaceppp->data()->subnetmask() != "0.0.0.0")
1198 command += " netmask " + _ifaceppp->data()->subnetmask(); 1214 command += " netmask " + _ifaceppp->data()->subnetmask();
1199 1215
1200 if(_ifaceppp->data()->flowcontrol() != "None") { 1216 if(_ifaceppp->data()->flowcontrol() != "None") {
1201 if(_ifaceppp->data()->flowcontrol() == "CRTSCTS") 1217 if(_ifaceppp->data()->flowcontrol() == "CRTSCTS")
1202 command += " crtscts"; 1218 command += " crtscts";
1203 else 1219 else
1204 command += " xonxoff"; 1220 command += " xonxoff";
1205 } 1221 }
1206 1222
1207 if(_ifaceppp->data()->defaultroute()) 1223 if(_ifaceppp->data()->defaultroute())
1208 command += " defaultroute"; 1224 command += " defaultroute";
1209 1225
1210 if(_ifaceppp->data()->autoDNS()) 1226 if(_ifaceppp->data()->autoDNS())
1211 command += " usepeerdns"; 1227 command += " usepeerdns";
1212 1228
1213 QStringList &arglist = _ifaceppp->data()->pppdArgument();
1214 for ( QStringList::Iterator it = arglist.begin();
1215 it != arglist.end();
1216 ++it )
1217 {
1218 command += " " + *it;
1219 }
1220 1229
1221 // PAP settings 1230 // PAP settings
1222 if(_ifaceppp->data()->authMethod() == AUTH_PAP) { 1231 if(_ifaceppp->data()->authMethod() == AUTH_PAP) {
1223 command += " -chap user "; 1232 command += " -chap user ";
1224 command = command + "\"" + _ifaceppp->data()->storedUsername() + "\""; 1233 command = command + _ifaceppp->data()->storedUsername();
1225 } 1234 }
1226 1235
1227 // CHAP settings 1236 // CHAP settings
1228 if(_ifaceppp->data()->authMethod() == AUTH_CHAP) { 1237 if(_ifaceppp->data()->authMethod() == AUTH_CHAP) {
1229 command += " -pap user "; 1238 command += " -pap user ";
1230 command = command + "\"" + _ifaceppp->data()->storedUsername() + "\""; 1239 command = command + _ifaceppp->data()->storedUsername();
1231 } 1240 }
1232 1241
1233 // PAP/CHAP settings 1242 // PAP/CHAP settings
1234 if(_ifaceppp->data()->authMethod() == AUTH_PAPCHAP) { 1243 if(_ifaceppp->data()->authMethod() == AUTH_PAPCHAP) {
1235 command += " user "; 1244 QString tmpName = _ifaceppp->data()->storedUsername();
1236 command = command + "\"" + _ifaceppp->data()->storedUsername() + "\""; 1245 if ( !tmpName.isEmpty() ) {
1246 command += " user ";
1247 command = command + tmpName;
1248 }
1237 } 1249 }
1238 1250
1239 // check for debug 1251 // check for debug
1240 if(_ifaceppp->data()->getPPPDebug()) 1252 if(_ifaceppp->data()->getPPPDebug())
1241 command += " debug"; 1253 command += " debug";
1242 1254
1255 QStringList &arglist = _ifaceppp->data()->pppdArgument();
1256 for ( QStringList::Iterator it = arglist.begin();
1257 it != arglist.end();
1258 ++it )
1259 {
1260 command += " " + *it;
1261 }
1262
1263 command += " call opie-kppp logfd 11";
1264
1243 if (command.length() > MAX_CMDLEN) { 1265 if (command.length() > MAX_CMDLEN) {
1244 QMessageBox::critical(this, "error", i18n( 1266 QMessageBox::critical(this, "error", QObject::tr(
1245 "pppd command + command-line arguments exceed " 1267 "pppd command + command-line arguments exceed "
1246 "2024 characters in length." 1268 "2024 characters in length."
1247 )); 1269 ));
1248 1270
1249 return false; // nonsensically long command which would bust my buffer buf. 1271 return false; // nonsensically long command which would bust my buffer buf.
1250 } 1272 }
1251 1273
1274 qWarning("Command IS: %s",command.latin1() );
1275
1252 qApp->flushX(); 1276 qApp->flushX();
1253 1277
1254 return _ifaceppp->modem()->execPPPDaemon(command); 1278 return _ifaceppp->modem()->execPPPDaemon(command);
1255} 1279}
1256 1280
1257 1281
1258void ConnectWidget::closeEvent( QCloseEvent *e ) { 1282void ConnectWidget::closeEvent( QCloseEvent *e ) {
1259 e->ignore(); 1283 e->ignore();
1260 emit cancelbutton(); 1284 emit cancelbutton();
1261} 1285}
1262 1286
1263 1287
1264void ConnectWidget::setMsg(const QString &msg) { 1288void ConnectWidget::setMsg(const QString &msg) {
1265 messg->setText(msg); 1289 messg->setText(msg);
1266} 1290}
1267 1291
1268void ConnectWidget::writeline(const QString &s) { 1292void ConnectWidget::writeline(const QString &s) {
1269 _ifaceppp->modem()->writeLine(s.local8Bit()); 1293 _ifaceppp->modem()->writeLine(s.local8Bit());
1270} 1294}
1271 1295
1272// Set the hostname and domain from DNS Server 1296// Set the hostname and domain from DNS Server
1273void auto_hostname(InterfacePPP *_ifaceppp) { 1297void auto_hostname(InterfacePPP *_ifaceppp) {
1274 struct in_addr local_ip; 1298 struct in_addr local_ip;
1275 struct hostent *hostname_entry; 1299 struct hostent *hostname_entry;
1276 QString new_hostname; 1300 QString new_hostname;
1277 int dot; 1301 int dot;
1278 char tmp_str[100]; // buffer overflow safe 1302 char tmp_str[100]; // buffer overflow safe
1279 1303
1280 gethostname(tmp_str, sizeof(tmp_str)); 1304 gethostname(tmp_str, sizeof(tmp_str));
1281 tmp_str[sizeof(tmp_str)-1]=0; // panic 1305 tmp_str[sizeof(tmp_str)-1]=0; // panic
1282 old_hostname=tmp_str; // copy to QString 1306 old_hostname=tmp_str; // copy to QString
1283 1307
1284 // if (!p_kppp->stats->local_ip_address.isEmpty() && _ifaceppp->data()->autoname()) { 1308 // if (!p_kppp->stats->local_ip_address.isEmpty() && _ifaceppp->data()->autoname()) {
1285 if ( _ifaceppp->data()->autoname()) { 1309 if ( _ifaceppp->data()->autoname()) {
1286// local_ip.s_addr=inet_addr(p_kppp->stats->local_ip_address.ascii()); 1310// local_ip.s_addr=inet_addr(p_kppp->stats->local_ip_address.ascii());
1287 hostname_entry=gethostbyaddr((const char *)&local_ip,sizeof(in_addr),AF_INET); 1311 hostname_entry=gethostbyaddr((const char *)&local_ip,sizeof(in_addr),AF_INET);
1288 1312
1289 if (hostname_entry != 0L) { 1313 if (hostname_entry != 0L) {
1290 new_hostname=hostname_entry->h_name; 1314 new_hostname=hostname_entry->h_name;
1291 dot=new_hostname.find('.'); 1315 dot=new_hostname.find('.');
1292 new_hostname=new_hostname.remove(dot,new_hostname.length()-dot); 1316 new_hostname=new_hostname.remove(dot,new_hostname.length()-dot);
1293 _ifaceppp->modem()->setHostname(new_hostname); 1317 _ifaceppp->modem()->setHostname(new_hostname);
1294 modified_hostname = TRUE; 1318 modified_hostname = TRUE;
1295 1319
1296 new_hostname=hostname_entry->h_name; 1320 new_hostname=hostname_entry->h_name;
1297 new_hostname.remove(0,dot+1); 1321 new_hostname.remove(0,dot+1);
1298 1322
1299 add_domain(new_hostname, _ifaceppp); 1323 add_domain(new_hostname, _ifaceppp);
1300 } 1324 }
1301 } 1325 }
1302 1326
1303} 1327}
1304 1328
1305// Replace the DNS domain entry in the /etc/resolv.conf file and 1329// Replace the DNS domain entry in the /etc/resolv.conf file and
1306// disable the nameserver entries if option is enabled 1330// disable the nameserver entries if option is enabled
1307void add_domain(const QString &domain, InterfacePPP *_ifaceppp) { 1331void add_domain(const QString &domain, InterfacePPP *_ifaceppp) {
1308 1332
1309 int fd; 1333 int fd;
1310 char c; 1334 char c;
1311 QString resolv[MAX_RESOLVCONF_LINES]; 1335 QString resolv[MAX_RESOLVCONF_LINES];
1312 1336
1313 if (domain.isEmpty()) 1337 if (domain.isEmpty())
1314 return; 1338 return;
1315 1339
1316 if((fd = _ifaceppp->modem()->openResolv(O_RDONLY)) >= 0) { 1340 if((fd = _ifaceppp->modem()->openResolv(O_RDONLY)) >= 0) {
1317 1341
1318 int i=0; 1342 int i=0;
1319 while((read(fd, &c, 1) == 1) && (i < MAX_RESOLVCONF_LINES)) { 1343 while((read(fd, &c, 1) == 1) && (i < MAX_RESOLVCONF_LINES)) {
1320 if(c == '\n') { 1344 if(c == '\n') {
1321 i++; 1345 i++;
1322 } 1346 }
1323 else { 1347 else {
1324 resolv[i] += c; 1348 resolv[i] += c;
1325 } 1349 }
1326 } 1350 }
1327 close(fd); 1351 close(fd);
1328 if ((c != '\n') && (i < MAX_RESOLVCONF_LINES)) i++; 1352 if ((c != '\n') && (i < MAX_RESOLVCONF_LINES)) i++;
1329 1353
1330 if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_TRUNC)) >= 0) { 1354 if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_TRUNC)) >= 0) {
1331 QCString tmp = "domain " + domain.local8Bit() + 1355 QCString tmp = "domain " + domain.local8Bit() +
1332 " \t\t#kppp temp entry\n"; 1356 " \t\t#kppp temp entry\n";
1333 write(fd, tmp.data(), tmp.length()); 1357 write(fd, tmp.data(), tmp.length());
1334 1358
1335 for(int j=0; j < i; j++) { 1359 for(int j=0; j < i; j++) {
1336 if((resolv[j].contains("domain") || 1360 if((resolv[j].contains("domain") ||
1337 ( resolv[j].contains("nameserver") 1361 ( resolv[j].contains("nameserver")
1338 && !resolv[j].contains("#kppp temp entry") 1362 && !resolv[j].contains("#kppp temp entry")
1339 && _ifaceppp->data()->exDNSDisabled())) 1363 && _ifaceppp->data()->exDNSDisabled()))
1340 && !resolv[j].contains("#entry disabled by kppp")) { 1364 && !resolv[j].contains("#entry disabled by kppp")) {
1341 QCString tmp = "# " + resolv[j].local8Bit() + 1365 QCString tmp = "# " + resolv[j].local8Bit() +
1342 " \t#entry disabled by kppp\n"; 1366 " \t#entry disabled by kppp\n";
1343 write(fd, tmp, tmp.length()); 1367 write(fd, tmp, tmp.length());
1344 } 1368 }
1345 else { 1369 else {
1346 QCString tmp = resolv[j].local8Bit() + "\n"; 1370 QCString tmp = resolv[j].local8Bit() + "\n";
1347 write(fd, tmp, tmp.length()); 1371 write(fd, tmp, tmp.length());
1348 } 1372 }
1349 } 1373 }
1350 } 1374 }
1351 close(fd); 1375 close(fd);
1352 } 1376 }
1353} 1377}
1354 1378
1355 1379
1356// adds the DNS entries in the /etc/resolv.conf file 1380// adds the DNS entries in the /etc/resolv.conf file
1357void adddns( InterfacePPP *_ifaceppp) 1381void adddns( InterfacePPP *_ifaceppp)
1358{ 1382{
1359 int fd; 1383 int fd;
1360 1384
1361 if ((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_APPEND)) >= 0) { 1385 if ((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_APPEND)) >= 0) {
1362 QStringList &dnslist = _ifaceppp->data()->dns(); 1386 QStringList &dnslist = _ifaceppp->data()->dns();
1363 for ( QStringList::Iterator it = dnslist.begin(); 1387 for ( QStringList::Iterator it = dnslist.begin();
1364 it != dnslist.end(); 1388 it != dnslist.end();
1365 ++it ) 1389 ++it )
1366 { 1390 {
1367 QCString dns = "nameserver " + (*it).local8Bit() + 1391 QCString dns = "nameserver " + (*it).local8Bit() +
1368 " \t#kppp temp entry\n"; 1392 " \t#kppp temp entry\n";
1369 write(fd, dns.data(), dns.length()); 1393 write(fd, dns.data(), dns.length());
1370 } 1394 }
1371 close(fd); 1395 close(fd);
1372 } 1396 }
1373 add_domain(_ifaceppp->data()->domain(), _ifaceppp); 1397 add_domain(_ifaceppp->data()->domain(), _ifaceppp);
1374} 1398}
1375 1399
1376void addpeerdns(InterfacePPP *_ifaceppp) { 1400void addpeerdns(InterfacePPP *_ifaceppp) {
1377 int fd, fd2; 1401 int fd, fd2;
1378 1402
1379 if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_APPEND)) >= 0) { 1403 if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_APPEND)) >= 0) {
1380 if((fd2 = open("/etc/ppp/resolv.conf", O_RDONLY)) >= 0) { 1404 if((fd2 = open("/etc/ppp/resolv.conf", O_RDONLY)) >= 0) {
1381 char c; 1405 char c;
1382 int i = 0; 1406 int i = 0;
1383 while(i++ < 100 && read(fd2, &c, 1) == 1) { 1407 while(i++ < 100 && read(fd2, &c, 1) == 1) {
1384 if(c == '\n') 1408 if(c == '\n')
1385 write(fd, "\t#kppp temp entry\n", 18); 1409 write(fd, "\t#kppp temp entry\n", 18);
1386 else 1410 else
1387 write(fd, &c, 1); 1411 write(fd, &c, 1);
1388 } 1412 }
1389 close(fd2); 1413 close(fd2);
1390 } else 1414 } else
1391 fprintf(stderr, "failed to read from /etc/ppp/resolv.conf\n"); 1415 fprintf(stderr, "failed to read from /etc/ppp/resolv.conf\n");
1392 close(fd); 1416 close(fd);
1393 } 1417 }
1394 add_domain(_ifaceppp->data()->domain(), _ifaceppp); 1418 add_domain(_ifaceppp->data()->domain(), _ifaceppp);
1395} 1419}
1396 1420
1397// remove the dns entries from the /etc/resolv.conf file 1421// remove the dns entries from the /etc/resolv.conf file
1398void removedns(InterfacePPP *_ifaceppp) { 1422void removedns(InterfacePPP *_ifaceppp) {
1399 1423
1400 int fd; 1424 int fd;
1401 char c; 1425 char c;
1402 QString resolv[MAX_RESOLVCONF_LINES]; 1426 QString resolv[MAX_RESOLVCONF_LINES];
1403 1427
1404 if((fd = _ifaceppp->modem()->openResolv(O_RDONLY)) >= 0) { 1428 if((fd = _ifaceppp->modem()->openResolv(O_RDONLY)) >= 0) {
1405 1429
1406 int i=0; 1430 int i=0;
1407 while(read(fd, &c, 1) == 1 && i < MAX_RESOLVCONF_LINES) { 1431 while(read(fd, &c, 1) == 1 && i < MAX_RESOLVCONF_LINES) {
1408 if(c == '\n') { 1432 if(c == '\n') {
1409 i++; 1433 i++;
1410 } 1434 }
1411 else { 1435 else {
1412 resolv[i] += c; 1436 resolv[i] += c;
1413 } 1437 }
1414 } 1438 }
1415 close(fd); 1439 close(fd);
1416 1440
1417 if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_TRUNC)) >= 0) { 1441 if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_TRUNC)) >= 0) {
1418 for(int j=0; j < i; j++) { 1442 for(int j=0; j < i; j++) {
1419 if(resolv[j].contains("#kppp temp entry")) continue; 1443 if(resolv[j].contains("#kppp temp entry")) continue;
1420 if(resolv[j].contains("#entry disabled by kppp")) { 1444 if(resolv[j].contains("#entry disabled by kppp")) {
1421 QCString tmp = resolv[j].local8Bit(); 1445 QCString tmp = resolv[j].local8Bit();
1422 write(fd, tmp.data()+2, tmp.length() - 27); 1446 write(fd, tmp.data()+2, tmp.length() - 27);
1423 write(fd, "\n", 1); 1447 write(fd, "\n", 1);
1424 } 1448 }
1425 else { 1449 else {
1426 QCString tmp = resolv[j].local8Bit() + "\n"; 1450 QCString tmp = resolv[j].local8Bit() + "\n";
1427 write(fd, tmp, tmp.length()); 1451 write(fd, tmp, tmp.length());
1428 } 1452 }
1429 } 1453 }
1430 } 1454 }
1431 close(fd); 1455 close(fd);
1432 1456
1433 } 1457 }
1434 1458
1435 if ( modified_hostname ) { 1459 if ( modified_hostname ) {
1436 _ifaceppp->modem()->setHostname(old_hostname); 1460 _ifaceppp->modem()->setHostname(old_hostname);
1437 modified_hostname = FALSE; 1461 modified_hostname = FALSE;
1438 } 1462 }
1439 1463
1440} 1464}
1441 1465
1442 1466
diff --git a/noncore/settings/networksettings/ppp/connect.h b/noncore/settings/networksettings/ppp/connect.h
index e7ae5e0..b225ff5 100644
--- a/noncore/settings/networksettings/ppp/connect.h
+++ b/noncore/settings/networksettings/ppp/connect.h
@@ -1,152 +1,154 @@
1/* -*- C++ -*- 1/* -*- C++ -*-
2 * 2 *
3 * kPPP: A pppd front end for the KDE project 3 * kPPP: A pppd front end for the KDE project
4 * 4 *
5 * $Id$ 5 * $Id$
6 * 6 *
7 * Copyright (C) 1997 Bernd Johannes Wuebben 7 * Copyright (C) 1997 Bernd Johannes Wuebben
8 * wuebben@math.cornell.edu 8 * wuebben@math.cornell.edu
9 * 9 *
10 * based on EzPPP: 10 * based on EzPPP:
11 * Copyright (C) 1997 Jay Painter 11 * Copyright (C) 1997 Jay Painter
12 * 12 *
13 * 13 *
14 * This program is free software; you can redistribute it and/or 14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU Library General Public 15 * modify it under the terms of the GNU Library General Public
16 * License as published by the Free Software Foundation; either 16 * License as published by the Free Software Foundation; either
17 * version 2 of the License, or (at your option) any later version. 17 * version 2 of the License, or (at your option) any later version.
18 * 18 *
19 * This program is distributed in the hope that it will be useful, 19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * Library General Public License for more details. 22 * Library General Public License for more details.
23 * 23 *
24 * You should have received a copy of the GNU Library General Public 24 * You should have received a copy of the GNU Library General Public
25 * License along with this program; if not, write to the Free 25 * License along with this program; if not, write to the Free
26 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 26 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 */ 27 */
28 28
29#ifndef _CONNECT_H_ 29#ifndef _CONNECT_H_
30#define _CONNECT_H_ 30#define _CONNECT_H_
31 31
32#include <qtimer.h> 32#include <qtimer.h>
33#include <qpushbutton.h> 33#include <qpushbutton.h>
34#include <qlabel.h> 34#include <qlabel.h>
35#include <qevent.h> 35#include <qevent.h>
36 36
37#include "kpppconfig.h" 37#include "kpppconfig.h"
38#include "pwentry.h" 38#include "pwentry.h"
39 39
40 40
41#define MAXLOOPNEST (MAX_SCRIPT_ENTRIES/2) 41#define MAXLOOPNEST (MAX_SCRIPT_ENTRIES/2)
42 42
43class InterfacePPP; 43class InterfacePPP;
44class PPPData; 44class PPPData;
45 45
46class ConnectWidget : public QWidget { 46class ConnectWidget : public QWidget {
47 Q_OBJECT 47 Q_OBJECT
48public: 48public:
49 ConnectWidget(InterfacePPP*, QWidget *parent, const char *name); 49 ConnectWidget(InterfacePPP*, QWidget *parent, const char *name);
50 ~ConnectWidget(); 50 ~ConnectWidget();
51 51
52public: 52public:
53 void set_con_speed_string(); 53 void set_con_speed_string();
54 void setMsg(const QString &); 54 void setMsg(const QString &);
55 void pppdDied(); 55 void pppdDied();
56 56
57protected: 57protected:
58 void timerEvent(QTimerEvent *); 58 void timerEvent(QTimerEvent *);
59 void closeEvent( QCloseEvent *e ); 59 void closeEvent( QCloseEvent *e );
60 60
61private slots: 61private slots:
62 void readChar(unsigned char); 62 void readChar(unsigned char);
63 void pause(); 63 void pause();
64 void if_waiting_slot(); 64 void if_waiting_slot();
65 void refresh();
65 66
66public slots: 67public slots:
67 void init(); 68 void init();
68 void preinit(); 69 void preinit();
69 void script_timed_out(); 70 void script_timed_out();
70 void if_waiting_timed_out(); 71 void if_waiting_timed_out();
71 void cancelbutton(); 72 void cancelbutton();
72 73
73signals: 74signals:
74 void if_waiting_signal(); 75 void if_waiting_signal();
75 void debugMessage(const QString &); 76 void debugMessage(const QString &);
76 void toggleDebugWindow(); 77 void toggleDebugWindow();
77 void closeDebugWindow(); 78 void closeDebugWindow();
78 void debugPutChar(unsigned char); 79 void debugPutChar(unsigned char);
79 void startAccounting(); 80 void startAccounting();
80 void stopAccounting(); 81 void stopAccounting();
81 82
82public: 83public:
83 QString myreadbuffer; // we want to keep every thing in order to fish for the 84 QString myreadbuffer; // we want to keep every thing in order to fish for the
84 85
85 // connection speed later on 86 // connection speed later on
86 QPushButton *debug; 87 QPushButton *debug;
87 int main_timer_ID; 88 int main_timer_ID;
88 89
89private: 90private:
90 int vmain; 91 int vmain;
91 int substate; 92 int substate;
92 int scriptindex; 93 int scriptindex;
93 QString scriptCommand, scriptArgument; 94 QString scriptCommand, scriptArgument;
94 QStringList *comlist, *arglist; 95 QStringList *comlist, *arglist;
95 96
96 // static const int maxloopnest=(MAX_SCRIPT_ENTRIES/2); 97 // static const int maxloopnest=(MAX_SCRIPT_ENTRIES/2);
97 int loopnest; 98 int loopnest;
98 int loopstartindex[MAXLOOPNEST]; 99 int loopstartindex[MAXLOOPNEST];
99 bool loopend; 100 bool loopend;
100 QString loopstr[MAXLOOPNEST]; 101 QString loopstr[MAXLOOPNEST];
101 102
102 bool semaphore; 103 bool semaphore;
103 QTimer *inittimer; 104 QTimer *inittimer;
104 105
105 QTimer *timeout_timer; 106 QTimer *timeout_timer;
106 bool execppp(); 107 bool execppp();
107 void writeline(const QString &); 108 void writeline(const QString &);
108 void checkBuffers(); 109 void checkBuffers();
109 110
110 void setExpect(const QString &); 111 void setExpect(const QString &);
111 bool expecting; 112 bool expecting;
112 QString expectstr; 113 QString expectstr;
113 114
114 QString readbuffer; 115 QString readbuffer;
115 116
116 void setScan(const QString &); 117 void setScan(const QString &);
117 QString scanvar; 118 QString scanvar;
118 QString scanstr; 119 QString scanstr;
119 QString scanbuffer; 120 QString scanbuffer;
120 bool scanning; 121 bool scanning;
121 122
122 bool pausing; 123 bool pausing;
123 PWEntry *prompt; 124 PWEntry *prompt;
124// LoginTerm *termwindow; 125// LoginTerm *termwindow;
125 126
126 int scriptTimeout; 127 int scriptTimeout;
127 QTimer *pausetimer; 128 QTimer *pausetimer;
128 QTimer *if_timer; 129 QTimer *if_timer;
129 QTimer *if_timeout_timer; 130 QTimer *if_timeout_timer;
131 QTimer *m_refreshTimer;
130 132
131 QLabel *messg; 133 QLabel *messg;
132 QPushButton *cancel; 134 QPushButton *cancel;
133 135
134 bool firstrunID; 136 bool firstrunID;
135 bool firstrunPW; 137 bool firstrunPW;
136 138
137 unsigned int dialnumber; // the current number to dial 139 unsigned int dialnumber; // the current number to dial
138 140
139 InterfacePPP *_ifaceppp; 141 InterfacePPP *_ifaceppp;
140}; 142};
141 143
142 144
143// non-member function to kill&wait on the pppd child process 145// non-member function to kill&wait on the pppd child process
144extern void killppp(PPPData*); 146extern void killppp(PPPData*);
145void adddns(InterfacePPP*); 147void adddns(InterfacePPP*);
146void addpeerdns(InterfacePPP*); 148void addpeerdns(InterfacePPP*);
147void removedns(InterfacePPP*); 149void removedns(InterfacePPP*);
148void add_domain(const QString & newdomain, InterfacePPP*); 150void add_domain(const QString & newdomain, InterfacePPP*);
149void auto_hostname(InterfacePPP*); 151void auto_hostname(InterfacePPP*);
150 152
151#endif 153#endif
152 154
diff --git a/noncore/settings/networksettings/ppp/conwindow.cpp b/noncore/settings/networksettings/ppp/conwindow.cpp
index 9136ca0..7641bbe 100644
--- a/noncore/settings/networksettings/ppp/conwindow.cpp
+++ b/noncore/settings/networksettings/ppp/conwindow.cpp
@@ -1,338 +1,333 @@
1/* 1/*
2 * kPPP: A pppd front end for the KDE project 2 * kPPP: A pppd front end for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
11 * License as published by the Free Software Foundation; either 11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version. 12 * version 2 of the License, or (at your option) any later version.
13 * 13 *
14 * This program is distributed in the hope that it will be useful, 14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Library General Public License for more details. 17 * Library General Public License for more details.
18 * 18 *
19 * You should have received a copy of the GNU Library General Public 19 * You should have received a copy of the GNU Library General Public
20 * License along with this program; if not, write to the Free 20 * License along with this program; if not, write to the Free
21 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */ 22 */
23 23
24#include <qtooltip.h> 24#include <qtooltip.h>
25#include <qdialog.h> 25#include <qdialog.h>
26#include "conwindow.h" 26#include "conwindow.h"
27//#include "docking.h"
28#include "pppdata.h" 27#include "pppdata.h"
29// #include "pppstats.h"
30// #include <klocale.h>
31#define i18n QObject::tr
32// #include <kglobal.h>
33 28
34 29
35ConWindow::ConWindow(PPPData *pd, QWidget *parent, const char *name, 30ConWindow::ConWindow(PPPData *pd, QWidget *parent, const char *name,
36 QDialog *mainwidget ) 31 QDialog *mainwidget )
37 : QWidget(parent, name, 0), 32 : QWidget(parent, name, 0),
38 minutes(0), 33 minutes(0),
39 seconds(0), 34 seconds(0),
40 hours(0), 35 hours(0),
41 days(0), 36 days(0),
42 tl1(0), 37 tl1(0),
43 _pppdata(pd) 38 _pppdata(pd)
44{ 39{
45 info1 = new QLabel(i18n("Connected at:"), this); 40 info1 = new QLabel(QObject::tr("Connected at:"), this);
46 info2 = new QLabel("", this); 41 info2 = new QLabel("", this);
47 42
48 timelabel1 = new QLabel(i18n("Time connected:"), this); 43 timelabel1 = new QLabel(QObject::tr("Time connected:"), this);
49 timelabel2 = new QLabel("000:00:00", this); 44 timelabel2 = new QLabel("000:00:00", this);
50 45
51 vollabel = new QLabel(i18n("Volume:"), this); 46 vollabel = new QLabel(QObject::tr("Volume:"), this);
52 volinfo = new QLabel("", this); 47 volinfo = new QLabel("", this);
53 48
54 // now the stuff for accounting 49 // now the stuff for accounting
55 session_bill_l = new QLabel(i18n("Session Bill:"), this); 50 session_bill_l = new QLabel(QObject::tr("Session Bill:"), this);
56 session_bill = new QLabel("", this); 51 session_bill = new QLabel("", this);
57 total_bill_l = new QLabel(i18n("Total Bill:"), this); 52 total_bill_l = new QLabel(QObject::tr("Total Bill:"), this);
58 total_bill = new QLabel("", this); 53 total_bill = new QLabel("", this);
59 54
60 this->setCaption("kppp"); 55 this->setCaption("kppp");
61 56
62 cancelbutton = new QPushButton(this); 57 cancelbutton = new QPushButton(this);
63 cancelbutton->setText(i18n("Disconnect")); 58 cancelbutton->setText(QObject::tr("Disconnect"));
64 connect(cancelbutton, SIGNAL(clicked()), mainwidget, SLOT(disconnect())); 59 connect(cancelbutton, SIGNAL(clicked()), mainwidget, SLOT(disconnect()));
65 60
66 // statsbutton = new QPushButton(this); 61 // statsbutton = new QPushButton(this);
67// statsbutton->setText(i18n("Details")); 62// statsbutton->setText(QObject::tr("Details"));
68// statsbutton->setFocus(); 63// statsbutton->setFocus();
69// connect(statsbutton, SIGNAL(clicked()), mainwidget, SLOT(showStats())); 64// connect(statsbutton, SIGNAL(clicked()), mainwidget, SLOT(showStats()));
70 65
71 clocktimer = new QTimer(this); 66 clocktimer = new QTimer(this);
72 connect(clocktimer, SIGNAL(timeout()), SLOT(timeclick())); 67 connect(clocktimer, SIGNAL(timeout()), SLOT(timeclick()));
73 68
74 // read window position from config file 69 // read window position from config file
75// int p_x, p_y; 70// int p_x, p_y;
76// PPPData::data()->winPosConWin(p_x, p_y); 71// PPPData::data()->winPosConWin(p_x, p_y);
77// setGeometry(p_x, p_y, 320, 110); 72// setGeometry(p_x, p_y, 320, 110);
78} 73}
79 74
80ConWindow::~ConWindow() { 75ConWindow::~ConWindow() {
81 stopClock(); 76 stopClock();
82} 77}
83 78
84// save window position when window was closed 79// save window position when window was closed
85bool ConWindow::event(QEvent *e) { 80bool ConWindow::event(QEvent *e) {
86 if (e->type() == QEvent::Hide) 81 if (e->type() == QEvent::Hide)
87 { 82 {
88// PPPData::data()->setWinPosConWin(x(), y()); 83// PPPData::data()->setWinPosConWin(x(), y());
89 return true; 84 return true;
90 } 85 }
91 else 86 else
92 return QWidget::event(e); 87 return QWidget::event(e);
93} 88}
94 89
95QString ConWindow::prettyPrintVolume(unsigned int n) { 90QString ConWindow::prettyPrintVolume(unsigned int n) {
96 int idx = 0; 91 int idx = 0;
97 const QString quant[] = {i18n("Byte"), i18n("KB"), 92 const QString quant[] = {QObject::tr("Byte"), QObject::tr("KB"),
98 i18n("MB"), i18n("GB"), QString::null}; 93 QObject::tr("MB"), QObject::tr("GB"), QString::null};
99 94
100 float n1 = n; 95 float n1 = n;
101 while(n >= 1024 && quant[idx] != QString::null) { 96 while(n >= 1024 && quant[idx] != QString::null) {
102 idx++; 97 idx++;
103 n /= 1024; 98 n /= 1024;
104 } 99 }
105 100
106 int i = idx; 101 int i = idx;
107 while(i--) 102 while(i--)
108 n1 = n1 / 1024.0; 103 n1 = n1 / 1024.0;
109 104
110 QString s = QString::number( n1, 'f', idx==0 ? 0 : 1 ); //KGlobal::locale()->formatNumber( n1, idx==0 ? 0 : 1 ); 105 QString s = QString::number( n1, 'f', idx==0 ? 0 : 1 ); //KGlobal::locale()->formatNumber( n1, idx==0 ? 0 : 1 );
111 s += " " + quant[idx]; 106 s += " " + quant[idx];
112 return s; 107 return s;
113} 108}
114 109
115// void ConWindow::accounting(bool on) { 110// void ConWindow::accounting(bool on) {
116// // cache accounting settings 111// // cache accounting settings
117// accountingEnabled = on; 112// accountingEnabled = on;
118// // volumeAccountingEnabled = PPPData::data()->VolAcctEnabled(); 113// // volumeAccountingEnabled = PPPData::data()->VolAcctEnabled();
119 114
120// // delete old layout 115// // delete old layout
121// if(tl1 != 0) 116// if(tl1 != 0)
122// delete tl1; 117// delete tl1;
123 118
124// // add layout now 119// // add layout now
125// tl1 = new QVBoxLayout(this, 10, 10); 120// tl1 = new QVBoxLayout(this, 10, 10);
126// tl1->addSpacing(5); 121// tl1->addSpacing(5);
127// QHBoxLayout *tl = new QHBoxLayout; 122// QHBoxLayout *tl = new QHBoxLayout;
128// tl1->addLayout(tl); 123// tl1->addLayout(tl);
129// tl->addSpacing(20); 124// tl->addSpacing(20);
130// QGridLayout *l1; 125// QGridLayout *l1;
131 126
132// int vol_lines = 0; 127// int vol_lines = 0;
133// // if(_pppdata->VolAcctEnabled()) 128// // if(_pppdata->VolAcctEnabled())
134// // vol_lines = 1; 129// // vol_lines = 1;
135 130
136// if(accountingEnabled) 131// if(accountingEnabled)
137// l1 = new QGridLayout(4 + vol_lines, 2, 5); 132// l1 = new QGridLayout(4 + vol_lines, 2, 5);
138// else 133// else
139// l1 = new QGridLayout(2 + vol_lines, 2, 5); 134// l1 = new QGridLayout(2 + vol_lines, 2, 5);
140// tl->addLayout(l1); 135// tl->addLayout(l1);
141// l1->setColStretch(0, 0); 136// l1->setColStretch(0, 0);
142// l1->setColStretch(1, 1); 137// l1->setColStretch(1, 1);
143 138
144// info2->setAlignment(AlignRight|AlignVCenter); 139// info2->setAlignment(AlignRight|AlignVCenter);
145// timelabel2->setAlignment(AlignRight|AlignVCenter); 140// timelabel2->setAlignment(AlignRight|AlignVCenter);
146// session_bill->setAlignment(AlignRight|AlignVCenter); 141// session_bill->setAlignment(AlignRight|AlignVCenter);
147// total_bill->setAlignment(AlignRight|AlignVCenter); 142// total_bill->setAlignment(AlignRight|AlignVCenter);
148// volinfo->setAlignment(AlignRight|AlignVCenter); 143// volinfo->setAlignment(AlignRight|AlignVCenter);
149// // make sure that there's enough space for the bills 144// // make sure that there's enough space for the bills
150// QString s1 = session_bill->text(); 145// QString s1 = session_bill->text();
151// QString s2 = total_bill->text(); 146// QString s2 = total_bill->text();
152// QString s3 = volinfo->text(); 147// QString s3 = volinfo->text();
153 148
154// session_bill->setText("888888.88 XXX"); 149// session_bill->setText("888888.88 XXX");
155// total_bill->setText("888888.88 XXX"); 150// total_bill->setText("888888.88 XXX");
156// volinfo->setText("8888.8 MB"); 151// volinfo->setText("8888.8 MB");
157// session_bill->setFixedSize(session_bill->sizeHint()); 152// session_bill->setFixedSize(session_bill->sizeHint());
158// total_bill->setFixedSize(total_bill->sizeHint()); 153// total_bill->setFixedSize(total_bill->sizeHint());
159// volinfo->setFixedSize(volinfo->sizeHint()); 154// volinfo->setFixedSize(volinfo->sizeHint());
160// session_bill->setText(s1); 155// session_bill->setText(s1);
161// total_bill->setText(s2); 156// total_bill->setText(s2);
162// volinfo->setText(s3); 157// volinfo->setText(s3);
163 158
164// l1->addWidget(info1, 0, 0); 159// l1->addWidget(info1, 0, 0);
165// l1->addWidget(info2, 0, 1); 160// l1->addWidget(info2, 0, 1);
166// l1->addWidget(timelabel1, 1, 0); 161// l1->addWidget(timelabel1, 1, 0);
167// l1->addWidget(timelabel2, 1, 1); 162// l1->addWidget(timelabel2, 1, 1);
168// if(accountingEnabled) { 163// if(accountingEnabled) {
169// session_bill_l->show(); 164// session_bill_l->show();
170// session_bill->show(); 165// session_bill->show();
171// total_bill_l->show(); 166// total_bill_l->show();
172// total_bill->show(); 167// total_bill->show();
173// l1->addWidget(session_bill_l, 2, 0); 168// l1->addWidget(session_bill_l, 2, 0);
174// l1->addWidget(session_bill, 2, 1); 169// l1->addWidget(session_bill, 2, 1);
175// l1->addWidget(total_bill_l, 3, 0); 170// l1->addWidget(total_bill_l, 3, 0);
176// l1->addWidget(total_bill, 3, 1); 171// l1->addWidget(total_bill, 3, 1);
177 172
178// if(volumeAccountingEnabled) { 173// if(volumeAccountingEnabled) {
179// vollabel->show(); 174// vollabel->show();
180// volinfo->show(); 175// volinfo->show();
181// l1->addWidget(vollabel, 4, 0); 176// l1->addWidget(vollabel, 4, 0);
182// l1->addWidget(volinfo, 4, 1); 177// l1->addWidget(volinfo, 4, 1);
183// } else { 178// } else {
184// vollabel->hide(); 179// vollabel->hide();
185// volinfo->hide(); 180// volinfo->hide();
186// } 181// }
187 182
188// } else { 183// } else {
189// session_bill_l->hide(); 184// session_bill_l->hide();
190// session_bill->hide(); 185// session_bill->hide();
191// total_bill_l->hide(); 186// total_bill_l->hide();
192// total_bill->hide(); 187// total_bill->hide();
193 188
194// if(volumeAccountingEnabled) { 189// if(volumeAccountingEnabled) {
195// vollabel->show(); 190// vollabel->show();
196// volinfo->show(); 191// volinfo->show();
197// l1->addWidget(vollabel, 2, 0); 192// l1->addWidget(vollabel, 2, 0);
198// l1->addWidget(volinfo, 2, 1); 193// l1->addWidget(volinfo, 2, 1);
199// } else { 194// } else {
200// vollabel->hide(); 195// vollabel->hide();
201// volinfo->hide(); 196// volinfo->hide();
202// } 197// }
203// } 198// }
204 199
205// tl->addSpacing(10); 200// tl->addSpacing(10);
206// QVBoxLayout *l2 = new QVBoxLayout(5); 201// QVBoxLayout *l2 = new QVBoxLayout(5);
207// tl->addLayout(l2); 202// tl->addLayout(l2);
208// l2->addStretch(1); 203// l2->addStretch(1);
209// // l2->addWidget(statsbutton); 204// // l2->addWidget(statsbutton);
210// l2->addWidget(cancelbutton); 205// l2->addWidget(cancelbutton);
211 206
212// l2->addStretch(1); 207// l2->addStretch(1);
213 208
214// tl1->addSpacing(5); 209// tl1->addSpacing(5);
215 210
216// setFixedSize(sizeHint()); 211// setFixedSize(sizeHint());
217// /* 212// /*
218// do not overwrite position read from config 213// do not overwrite position read from config
219// setGeometry((QApplication::desktop()->width() - width()) / 2, 214// setGeometry((QApplication::desktop()->width() - width()) / 2,
220 // (QApplication::desktop()->height() - height())/2, 215 // (QApplication::desktop()->height() - height())/2,
221 // width(), 216 // width(),
222 // height()); 217 // height());
223// */ 218// */
224// } 219// }
225 220
226 221
227// void ConWindow::dock() { 222// void ConWindow::dock() {
228// // DockWidget::dock_widget->show(); 223// // DockWidget::dock_widget->show();
229// this->hide(); 224// this->hide();
230// } 225// }
231 226
232 227
233void ConWindow::startClock() { 228void ConWindow::startClock() {
234 minutes = 0; 229 minutes = 0;
235 seconds = 0; 230 seconds = 0;
236 hours = 0; 231 hours = 0;
237 QString title ; 232 QString title ;
238 233
239 title = _pppdata->accname(); 234 title = _pppdata->accname();
240 235
241 if(_pppdata->get_show_clock_on_caption()){ 236 if(_pppdata->get_show_clock_on_caption()){
242 title += " 00:00" ; 237 title += " 00:00" ;
243 } 238 }
244 this->setCaption(title); 239 this->setCaption(title);
245 240
246 timelabel2->setText("00:00:00"); 241 timelabel2->setText("00:00:00");
247 clocktimer->start(1000); 242 clocktimer->start(1000);
248} 243}
249 244
250 245
251void ConWindow::setConnectionSpeed(const QString &speed) { 246void ConWindow::setConnectionSpeed(const QString &speed) {
252 info2->setText(speed); 247 info2->setText(speed);
253} 248}
254 249
255 250
256void ConWindow::stopClock() { 251void ConWindow::stopClock() {
257 clocktimer->stop(); 252 clocktimer->stop();
258} 253}
259 254
260 255
261void ConWindow::timeclick() { 256void ConWindow::timeclick() {
262// QString tooltip = i18n("Connection: %1\n" 257// QString tooltip = QObject::tr("Connection: %1\n"
263 // "Connected at: %2\n" 258 // "Connected at: %2\n"
264 // "Time connected: %3") 259 // "Time connected: %3")
265 // .arg(_pppdata->accname()).arg(info2->text()) 260 // .arg(_pppdata->accname()).arg(info2->text())
266 // .arg(time_string2); 261 // .arg(time_string2);
267 262
268// if(accountingEnabled) 263// if(accountingEnabled)
269// tooltip += i18n("\nSession Bill: %1\nTotal Bill: %2") 264// tooltip += QObject::tr("\nSession Bill: %1\nTotal Bill: %2")
270 // .arg(session_bill->text()).arg(total_bill->text()); 265 // .arg(session_bill->text()).arg(total_bill->text());
271// // volume accounting 266// // volume accounting
272// if(volumeAccountingEnabled) { 267// if(volumeAccountingEnabled) {
273 268
274// volinfo->setEnabled(TRUE); 269// volinfo->setEnabled(TRUE);
275// int bytes = _pppdata->totalBytes(); 270// int bytes = _pppdata->totalBytes();
276// volinfo->setText(prettyPrintVolume(bytes)); 271// volinfo->setText(prettyPrintVolume(bytes));
277// } 272// }
278 273
279// seconds++; 274// seconds++;
280 275
281// if(seconds >= 60 ) { 276// if(seconds >= 60 ) {
282// minutes ++; 277// minutes ++;
283// seconds = 0; 278// seconds = 0;
284// } 279// }
285 280
286// if (minutes >= 60){ 281// if (minutes >= 60){
287// minutes = 0; 282// minutes = 0;
288// hours ++; 283// hours ++;
289// } 284// }
290 285
291// if( hours >= 24){ 286// if( hours >= 24){
292// days ++; 287// days ++;
293// hours = 0; 288// hours = 0;
294// } 289// }
295 290
296// time_string.sprintf("%02d:%02d",hours,minutes); 291// time_string.sprintf("%02d:%02d",hours,minutes);
297// time_string2 = ""; 292// time_string2 = "";
298// if (days) 293// if (days)
299// time_string2.sprintf("%d d %02d:%02d:%02d", 294// time_string2.sprintf("%d d %02d:%02d:%02d",
300 // days,hours,minutes,seconds); 295 // days,hours,minutes,seconds);
301 296
302// else 297// else
303// time_string2.sprintf("%02d:%02d:%02d",hours,minutes,seconds); 298// time_string2.sprintf("%02d:%02d:%02d",hours,minutes,seconds);
304 299
305// caption_string = _pppdata->accname(); 300// caption_string = _pppdata->accname();
306// caption_string += " "; 301// caption_string += " ";
307// caption_string += time_string; 302// caption_string += time_string;
308 303
309 304
310// timelabel2->setText(time_string2); 305// timelabel2->setText(time_string2);
311 306
312// if(_pppdata->get_show_clock_on_caption() && (seconds == 1)){ 307// if(_pppdata->get_show_clock_on_caption() && (seconds == 1)){
313// // we update the Caption only once per minute not every second 308// // we update the Caption only once per minute not every second
314// // otherwise I get a flickering icon 309// // otherwise I get a flickering icon
315// this->setCaption(caption_string); 310// this->setCaption(caption_string);
316// } 311// }
317 312
318// QToolTip::add(DockWidget::dock_widget, tooltip); 313// QToolTip::add(DockWidget::dock_widget, tooltip);
319} 314}
320 315
321 316
322void ConWindow::closeEvent( QCloseEvent *e ){ 317void ConWindow::closeEvent( QCloseEvent *e ){
323 // we don't want to lose the 318 // we don't want to lose the
324 // conwindow since this is our last connection kppp. 319 // conwindow since this is our last connection kppp.
325 // if we lost it we could only kill the program by hand to get on with life. 320 // if we lost it we could only kill the program by hand to get on with life.
326 e->ignore(); 321 e->ignore();
327 322
328// if(_pppdata->get_dock_into_panel()) 323// if(_pppdata->get_dock_into_panel())
329// dock(); 324// dock();
330} 325}
331 326
332 327
333void ConWindow::slotAccounting(QString total, QString session) { 328void ConWindow::slotAccounting(QString total, QString session) {
334 total_bill->setText(total); 329 total_bill->setText(total);
335 session_bill->setText(session); 330 session_bill->setText(session);
336} 331}
337 332
338 333
diff --git a/noncore/settings/networksettings/ppp/devices.cpp b/noncore/settings/networksettings/ppp/devices.cpp
new file mode 100644
index 0000000..e94904b
--- a/dev/null
+++ b/noncore/settings/networksettings/ppp/devices.cpp
@@ -0,0 +1,212 @@
1/*
2 * kPPP: A pppd front end for the KDE project
3 *
4 * $Id$
5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu
8 *
9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details.
21 *
22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */
26
27#include <qdir.h>
28#include <stdlib.h>
29#include <qlayout.h>
30#include <qtabwidget.h>
31#include <qtabdialog.h>
32#include <qwhatsthis.h>
33#include <qmessagebox.h>
34
35#include <qapplication.h>
36#include <qbuttongroup.h>
37#include <qmessagebox.h>
38#include <qvgroupbox.h>
39
40#include "interfaceppp.h"
41#include "devices.h"
42#include "authwidget.h"
43#include "pppdata.h"
44#include "edit.h"
45#include "general.h"
46
47void parseargs(char* buf, char** args);
48
49DevicesWidget::DevicesWidget( InterfacePPP* ip, QWidget *parent, const char *name, WFlags f )
50 : ChooserWidget(ip->data(), parent, name, f)
51{
52 _ifaceppp = ip;
53 QWhatsThis::add(edit_b, tr("Allows you to modify the selected device"));
54 QWhatsThis::add(new_b, tr("Create a new device") );
55
56 QWhatsThis::add(copy_b,
57 tr("Makes a copy of the selected device. All\n"
58 "settings of the selected device are copied\n"
59 "to a new device, that you can modify to fit your\n"
60 "needs"));
61 QWhatsThis::add(delete_b,
62 tr("<p>Deletes the selected device\n\n"
63 "<font color=\"red\"><b>Use with care!</b></font>"));
64
65 copy_b->setEnabled( false ); //FIXME
66// delete_b->setEnabled( false ); //FIXME
67
68 QStringList tmp = _pppdata->getDevicesNamesList();
69 qDebug("DevicesWidget::DevicesWidget got devices %s",tmp.join("--").latin1());
70 listListbox->insertStringList(tmp);
71
72 for (uint i = 0; i < listListbox->count(); i++){
73 qDebug("listListbox->text(i) %s == _pppdata->devname() %s",listListbox->text(i).latin1(), _pppdata->devname().latin1());
74 if ( listListbox->text(i) == _pppdata->devname() )
75 listListbox->setCurrentItem( i );
76 }
77}
78
79
80
81void DevicesWidget::slotListBoxSelect(int idx) {
82 bool ok = _pppdata->setDevice( listListbox->text(idx) );
83 delete_b->setEnabled((bool)(idx != -1));
84 edit_b->setEnabled((bool)(idx != -1));
85//FIXME copy_b->setEnabled((bool)(idx != -1));
86}
87
88void DevicesWidget::edit() {
89 _pppdata->setDevice(listListbox->text(listListbox->currentItem()));
90
91 int result = doTab();
92
93 if(result == QDialog::Accepted) {
94 listListbox->changeItem(_pppdata->devname(),listListbox->currentItem());
95 _pppdata->save();
96 }
97}
98
99
100void DevicesWidget::create() {
101
102// if(listListbox->count() == MAX_ACCOUNTS) {
103// QMessageBox::information(this, "sorry",
104// tr("Maximum number of accounts reached."));
105// return;
106// }
107
108 int result;
109 if (_pppdata->newdevice() == -1){
110 return;
111 }
112 result = doTab();
113
114 if(result == QDialog::Accepted) {
115 listListbox->insertItem(_pppdata->devname());
116 listListbox->setSelected(listListbox->findItem(_pppdata->devname()),true );
117
118 _pppdata->save();
119 } else
120 _pppdata->deleteDevice();
121}
122
123
124void DevicesWidget::copy() {
125// if(listListbox->count() == MAX_ACCOUNTS) {
126// QMessageBox::information(this, "sorry", tr("Maximum number of accounts reached."));
127// return;
128// }
129
130 if(listListbox->currentItem()<0) {
131 QMessageBox::information(this, "sorry", tr("No devices selected."));
132 return;
133 }
134
135 _pppdata->copydevice(listListbox->currentText());
136
137 listListbox->insertItem(_pppdata->devname());
138 _pppdata->save();
139}
140
141
142void DevicesWidget::remove() {
143
144 QString s = tr("Are you sure you want to delete\nthe device \"%1\"?")
145 .arg(listListbox->text(listListbox->currentItem()));
146
147 if(QMessageBox::warning(this,tr("Confirm"),s,
148 QMessageBox::Yes,QMessageBox::No
149 ) != QMessageBox::Yes)
150 return;
151
152 if(_pppdata->deleteDevice(listListbox->text(listListbox->currentItem())))
153 listListbox->removeItem(listListbox->currentItem());
154
155
156// _pppdata->save();
157
158
159 slotListBoxSelect(listListbox->currentItem());
160
161}
162
163
164int DevicesWidget::doTab(){
165 QDialog *dlg = new QDialog( 0, "newDevice", true, Qt::WStyle_ContextHelp );
166 QVBoxLayout *layout = new QVBoxLayout( dlg );
167 layout->setSpacing( 0 );
168 layout->setMargin( 1 );
169
170 QTabWidget *tabWindow = new QTabWidget( dlg, "tabWindow" );
171 layout->addWidget( tabWindow );
172
173 bool isnew;
174
175 if(_pppdata->devname().isEmpty()) {
176 dlg->setCaption(tr("New Device"));
177 isnew = true;
178 } else {
179 QString tit = tr("Edit Device: ");
180 tit += _pppdata->devname();
181 dlg->setCaption(tit);
182 isnew = false;
183 }
184
185 modem1 = new ModemWidget( _pppdata, tabWindow, "modem1" );
186 tabWindow->addTab( modem1, tr("&Device") );
187 modem2 = new ModemWidget2( _pppdata, _ifaceppp, tabWindow, "modem2" );
188 tabWindow->addTab( modem2, tr("&Modem") );
189
190 int result = 0;
191 bool ok = false;
192
193 while (!ok){
194 dlg->showMaximized();
195 result = dlg->exec();
196 ok = true;
197
198 if(result == QDialog::Accepted) {
199 if (!modem1->save()){
200 QMessageBox::critical(this, "error", tr( "You must enter a unique device name"));
201 ok = false;
202 }else{
203 modem2->save();
204 }
205 }
206 }
207
208 delete dlg;
209
210 return result;
211}
212
diff --git a/noncore/settings/networksettings/ppp/devices.h b/noncore/settings/networksettings/ppp/devices.h
index d46d5b4..c2679c8 100644
--- a/noncore/settings/networksettings/ppp/devices.h
+++ b/noncore/settings/networksettings/ppp/devices.h
@@ -1,60 +1,51 @@
1#ifndef _DEVICES_H_ 1#ifndef _DEVICES_H_
2#define _DEVICES_H_ 2#define _DEVICES_H_
3 3
4#include "kpppconfig.h" 4#include "kpppconfig.h"
5 5
6static const char *devices[] = { 6#include <qwidget.h>
7#ifdef __FreeBSD__ 7#include <qdialog.h>
8 "/dev/cuaa0", 8#include <qpushbutton.h>
9 "/dev/cuaa1", 9#include <qlistbox.h>
10 "/dev/cuaa2", 10#include "chooserwidget.h"
11 "/dev/cuaa3", 11
12 "/dev/cuaa4", 12class QCheckBox;
13#elif defined(__NetBSD__) 13class QLineEdit;
14 "/dev/tty00", /* "normal" modem lines */ 14class QTabWidget;
15 "/dev/tty01", 15class DialWidget;
16 "/dev/tty02", 16class AuthWidget;
17 "/dev/tty03", 17class IPWidget;
18 "/dev/dty00", /* Dial out devices */ 18class DNSWidget;
19 "/dev/dty01", 19class GatewayWidget;
20 "/dev/dty02", 20class InterfacePPP;
21 "/dev/dty03", 21class PPPData;
22 "/dev/ttyU0", /* USB stuff modems */ 22class ModemWidget;
23 "/dev/ttyU1", 23class ModemWidget2;
24 "/dev/ttyU2", 24
25 "/dev/ttyU3", 25class DevicesWidget : public ChooserWidget {
26 "/dev/dtyU0", /* USB stuff, too (dial out device) */ 26 Q_OBJECT
27 "/dev/dtyU1", 27public:
28 "/dev/dtyU2", 28 DevicesWidget( InterfacePPP* ip, QWidget *parent=0, const char *name=0, WFlags f=0 );
29 "/dev/dtyU3", 29 ~DevicesWidget() {}
30#elif defined (__linux__) 30
31 "/dev/modem", 31
32 "/dev/ttyS0", 32private slots:
33 "/dev/ttyS1", 33 virtual void edit();
34 "/dev/ttyS2", 34 virtual void copy();
35 "/dev/ttyS3", 35 virtual void remove();
36#ifdef ISDNSUPPORT 36 virtual void create();
37 "/dev/ttyI0", 37 virtual void slotListBoxSelect(int);
38 "/dev/ttyI1", 38 int doTab();
39 "/dev/ttyI2", 39
40 "/dev/ttyI3", 40// signals:
41#endif 41// void resetaccounts();
42 "/dev/usb/ttyACM0", /* USB stuff modems */ 42
43 "/dev/usb/ttyACM1", 43private:
44 "/dev/usb/ttyACM2", 44 ModemWidget *modem1;
45 "/dev/usb/ttyACM3", 45 ModemWidget2 *modem2;
46 "/dev/ircomm0", 46 InterfacePPP *_ifaceppp;
47 "/dev/rfcomm0", 47
48 "/dev/rfcomm1", 48};
49#elif defined(__svr4__)
50 "/dev/cua/a",
51 "/dev/cua/b",
52 "/dev/ttya",
53 "/dev/ttyb",
54#endif
55 0};
56 49
57// default device number from the list above
58const int DEV_DEFAULT = 0;
59 50
60#endif 51#endif
diff --git a/noncore/settings/networksettings/ppp/edit.cpp b/noncore/settings/networksettings/ppp/edit.cpp
index 0c96253..ceac90c 100644
--- a/noncore/settings/networksettings/ppp/edit.cpp
+++ b/noncore/settings/networksettings/ppp/edit.cpp
@@ -1,273 +1,273 @@
1/* 1/*
2 * kPPP: A pppd Front End for the KDE project 2 * kPPP: A pppd Front End for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * Copyright (C) 1997 Bernd Johannes Wuebben 5 * Copyright (C) 1997 Bernd Johannes Wuebben
6 * wuebben@math.cornell.edu 6 * wuebben@math.cornell.edu
7 * 7 *
8 * based on EzPPP: 8 * based on EzPPP:
9 * Copyright (C) 1997 Jay Painter 9 * Copyright (C) 1997 Jay Painter
10 * 10 *
11 * This program is free software; you can redistribute it and/or 11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Library General Public 12 * modify it under the terms of the GNU Library General Public
13 * License as published by the Free Software Foundation; either 13 * License as published by the Free Software Foundation; either
14 * version 2 of the License, or (at your option) any later version. 14 * version 2 of the License, or (at your option) any later version.
15 * 15 *
16 * This program is distributed in the hope that it will be useful, 16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Library General Public License for more details. 19 * Library General Public License for more details.
20 * 20 *
21 * You should have received a copy of the GNU Library General Public 21 * You should have received a copy of the GNU Library General Public
22 * License along with this program; if not, write to the Free 22 * License along with this program; if not, write to the Free
23 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 23 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 */ 24 */
25 25
26#include <string.h> 26#include <string.h>
27#include <termios.h> 27#include <termios.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qmessagebox.h> 29#include <qmessagebox.h>
30#include <qwhatsthis.h> 30#include <qwhatsthis.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qapplication.h> 32#include <qapplication.h>
33#include <qbuttongroup.h> 33#include <qbuttongroup.h>
34#include <qvgroupbox.h> 34#include <qvgroupbox.h>
35#include <qhbox.h> 35#include <qhbox.h>
36#include <qdialog.h> 36#include <qdialog.h>
37#include <qpe/resource.h> 37#include <qpe/resource.h>
38 38
39#include "edit.h" 39#include "edit.h"
40#include "pppdata.h" 40#include "pppdata.h"
41#include "iplined.h" 41#include "iplined.h"
42#include "auth.h" 42#include "auth.h"
43 43
44DialWidget::DialWidget( PPPData *pd, QWidget *parent, bool isnewaccount 44DialWidget::DialWidget( PPPData *pd, QWidget *parent, bool isnewaccount
45 , const char *name ) 45 , const char *name )
46 : QWidget(parent, name), _pppdata(pd) 46 : QWidget(parent, name), _pppdata(pd)
47{ 47{
48 const int GRIDROWS = 6; 48 const int GRIDROWS = 6;
49 49
50 QGridLayout *tl = new QGridLayout(this, GRIDROWS, 2, 0 ); 50 QGridLayout *tl = new QGridLayout(this, GRIDROWS, 2, 0 );
51 51
52 connect_label = new QLabel(tr("Connection name:"), this); 52 connect_label = new QLabel(tr("Connection name:"), this);
53 tl->addWidget(connect_label, 0, 0); 53 tl->addWidget(connect_label, 0, 0);
54 54
55 connectname_l = new QLineEdit(this); 55 connectname_l = new QLineEdit(this);
56// connectname_l->setMaxLength(ACCNAME_SIZE); 56// connectname_l->setMaxLength(ACCNAME_SIZE);
57 tl->addWidget(connectname_l, 0, 1); 57 tl->addWidget(connectname_l, 0, 1);
58 QString tmp = tr("Type in a unique name for this connection"); 58 QString tmp = tr("Type in a unique name for this connection");
59 59
60 QWhatsThis::add(connect_label,tmp); 60 QWhatsThis::add(connect_label,tmp);
61 QWhatsThis::add(connectname_l,tmp); 61 QWhatsThis::add(connectname_l,tmp);
62 62
63 63
64 number_label = new QLabel(tr("Phone number:"), this); 64 number_label = new QLabel(tr("Phone number:"), this);
65 number_label->setAlignment(AlignTop|AlignLeft); 65 number_label->setAlignment(AlignTop|AlignLeft);
66 tl->addWidget(number_label, 1, 0); 66 tl->addWidget(number_label, 1, 0);
67 67
68 QHBoxLayout *lpn = new QHBoxLayout(5); 68 QHBoxLayout *lpn = new QHBoxLayout(5);
69 tl->addLayout(lpn, 1, 1); 69 tl->addLayout(lpn, 1, 1);
70 numbers = new QListBox(this); 70 numbers = new QListBox(this);
71// numbers->setMinimumSize(120, 70); 71// numbers->setMinimumSize(120, 70);
72 lpn->addWidget(numbers); 72 lpn->addWidget(numbers);
73 QVBoxLayout *lpn1 = new QVBoxLayout; 73 QVBoxLayout *lpn1 = new QVBoxLayout;
74 lpn->addLayout(lpn1); 74 lpn->addLayout(lpn1);
75 add = new QPushButton(tr("&Add..."), this); 75 add = new QPushButton(tr("&Add..."), this);
76 del = new QPushButton(tr("&Remove"), this); 76 del = new QPushButton(tr("&Remove"), this);
77 77
78 up = new QPushButton(this); 78 up = new QPushButton(this);
79 up->setPixmap( Resource::loadPixmap("inline/up") ); 79 up->setPixmap( Resource::loadPixmap("up") );
80 down = new QPushButton(this); 80 down = new QPushButton(this);
81 down->setPixmap( Resource::loadPixmap("inline/down") ); 81 down->setPixmap( Resource::loadPixmap("down") );
82 lpn1->addWidget(add); 82 lpn1->addWidget(add);
83 lpn1->addWidget(del); 83 lpn1->addWidget(del);
84 lpn1->addStretch(1); 84 lpn1->addStretch(1);
85 lpn1->addWidget(up); 85 lpn1->addWidget(up);
86 lpn1->addWidget(down); 86 lpn1->addWidget(down);
87 connect(add, SIGNAL(clicked()), 87 connect(add, SIGNAL(clicked()),
88 this, SLOT(addNumber())); 88 this, SLOT(addNumber()));
89 connect(del, SIGNAL(clicked()), 89 connect(del, SIGNAL(clicked()),
90 this, SLOT(delNumber())); 90 this, SLOT(delNumber()));
91 connect(up, SIGNAL(clicked()), 91 connect(up, SIGNAL(clicked()),
92 this, SLOT(upNumber())); 92 this, SLOT(upNumber()));
93 connect(down, SIGNAL(clicked()), 93 connect(down, SIGNAL(clicked()),
94 this, SLOT(downNumber())); 94 this, SLOT(downNumber()));
95 connect(numbers, SIGNAL(highlighted(int)), 95 connect(numbers, SIGNAL(highlighted(int)),
96 this, SLOT(selectionChanged(int))); 96 this, SLOT(selectionChanged(int)));
97 numbersChanged(); 97 numbersChanged();
98 98
99 tmp = tr("<p>Specifies the phone numbers to dial. You\n" 99 tmp = tr("<p>Specifies the phone numbers to dial. You\n"
100 "can supply multiple numbers here, simply\n" 100 "can supply multiple numbers here, simply\n"
101 "click on \"Add\". You can arrange the\n" 101 "click on \"Add\". You can arrange the\n"
102 "order the numbers are tried by using the\n" 102 "order the numbers are tried by using the\n"
103 "arrow buttons.\n\n" 103 "arrow buttons.\n\n"
104 "When a number is busy or fails, <i>kppp</i> will \n" 104 "When a number is busy or fails, <i>kppp</i> will \n"
105 "try the next number and so on"); 105 "try the next number and so on");
106 106
107 QWhatsThis::add(number_label,tmp); 107 QWhatsThis::add(number_label,tmp);
108 QWhatsThis::add(numbers,tmp); 108 QWhatsThis::add(numbers,tmp);
109 109
110 pppdargs = new QPushButton(tr("Customize pppd Arguments..."), this); 110 pppdargs = new QPushButton(tr("Customize pppd Arguments..."), this);
111 connect(pppdargs, SIGNAL(clicked()), SLOT(pppdargsbutton())); 111 connect(pppdargs, SIGNAL(clicked()), SLOT(pppdargsbutton()));
112 tl->addMultiCellWidget(pppdargs, 5, 5, 0, 1, AlignCenter); 112 tl->addMultiCellWidget(pppdargs, 5, 5, 0, 1, AlignCenter);
113 113
114 // Set defaults if editing an existing connection 114 // Set defaults if editing an existing connection
115 if(!isnewaccount) { 115 if(!isnewaccount) {
116 connectname_l->setText(_pppdata->accname()); 116 connectname_l->setText(_pppdata->accname());
117 117
118 // insert the phone numbers into the listbox 118 // insert the phone numbers into the listbox
119 QString n = _pppdata->phonenumber(); 119 QString n = _pppdata->phonenumber();
120 QString tmp = ""; 120 QString tmp = "";
121 uint idx = 0; 121 uint idx = 0;
122 while(idx != n.length()) { 122 while(idx != n.length()) {
123 if(n[idx] == ':') { 123 if(n[idx] == ':') {
124 if(tmp.length() > 0) 124 if(tmp.length() > 0)
125 numbers->insertItem(tmp); 125 numbers->insertItem(tmp);
126 tmp = ""; 126 tmp = "";
127 } else 127 } else
128 tmp += n[idx]; 128 tmp += n[idx];
129 idx++; 129 idx++;
130 } 130 }
131 if(tmp.length() > 0) 131 if(tmp.length() > 0)
132 numbers->insertItem(tmp); 132 numbers->insertItem(tmp);
133 133
134 } 134 }
135 135
136 numbersChanged(); 136 numbersChanged();
137 tl->activate(); 137 tl->activate();
138} 138}
139 139
140bool DialWidget::save() { 140bool DialWidget::save() {
141 //first check to make sure that the account name is unique! 141 //first check to make sure that the account name is unique!
142 if(connectname_l->text().isEmpty() || 142 if(connectname_l->text().isEmpty() ||
143 !_pppdata->isUniqueAccname(connectname_l->text())) { 143 !_pppdata->isUniqueAccname(connectname_l->text())) {
144 return false; 144 return false;
145 } else { 145 } else {
146 _pppdata->setAccname(connectname_l->text()); 146 _pppdata->setAccname(connectname_l->text());
147 147
148 QString number = ""; 148 QString number = "";
149 for(uint i = 0; i < numbers->count(); i++) { 149 for(uint i = 0; i < numbers->count(); i++) {
150 if(i != 0) 150 if(i != 0)
151 number += ":"; 151 number += ":";
152 number += numbers->text(i); 152 number += numbers->text(i);
153 } 153 }
154 154
155 _pppdata->setPhonenumber(number); 155 _pppdata->setPhonenumber(number);
156 return true; 156 return true;
157 } 157 }
158} 158}
159 159
160 160
161void DialWidget::numbersChanged() { 161void DialWidget::numbersChanged() {
162 int sel = numbers->currentItem(); 162 int sel = numbers->currentItem();
163 163
164 del->setEnabled(sel != -1); 164 del->setEnabled(sel != -1);
165 up->setEnabled(sel != -1 && sel != 0); 165 up->setEnabled(sel != -1 && sel != 0);
166 down->setEnabled(sel != -1 && sel != (int)numbers->count()-1); 166 down->setEnabled(sel != -1 && sel != (int)numbers->count()-1);
167} 167}
168 168
169 169
170void DialWidget::selectionChanged(int) { 170void DialWidget::selectionChanged(int) {
171 numbersChanged(); 171 numbersChanged();
172} 172}
173 173
174 174
175void DialWidget::addNumber() { 175void DialWidget::addNumber() {
176 PhoneNumberDialog dlg(this); 176 PhoneNumberDialog dlg(this);
177 if(dlg.exec()) { 177 if(dlg.exec()) {
178 numbers->insertItem(dlg.phoneNumber()); 178 numbers->insertItem(dlg.phoneNumber());
179 numbersChanged(); 179 numbersChanged();
180 } 180 }
181} 181}
182 182
183 183
184void DialWidget::delNumber() { 184void DialWidget::delNumber() {
185 if(numbers->currentItem() != -1) { 185 if(numbers->currentItem() != -1) {
186 numbers->removeItem(numbers->currentItem()); 186 numbers->removeItem(numbers->currentItem());
187 numbersChanged(); 187 numbersChanged();
188 } 188 }
189} 189}
190 190
191 191
192void DialWidget::upNumber() { 192void DialWidget::upNumber() {
193 int idx = numbers->currentItem(); 193 int idx = numbers->currentItem();
194 if(idx != -1) { 194 if(idx != -1) {
195 QString item = numbers->text(idx); 195 QString item = numbers->text(idx);
196 numbers->removeItem(idx); 196 numbers->removeItem(idx);
197 numbers->insertItem(item, idx-1); 197 numbers->insertItem(item, idx-1);
198 numbers->setCurrentItem(idx-1); 198 numbers->setCurrentItem(idx-1);
199 numbersChanged(); 199 numbersChanged();
200 } 200 }
201} 201}
202 202
203 203
204void DialWidget::downNumber() { 204void DialWidget::downNumber() {
205 int idx = numbers->currentItem(); 205 int idx = numbers->currentItem();
206 if(idx != -1) { 206 if(idx != -1) {
207 QString item = numbers->text(idx); 207 QString item = numbers->text(idx);
208 numbers->removeItem(idx); 208 numbers->removeItem(idx);
209 numbers->insertItem(item, idx+1); 209 numbers->insertItem(item, idx+1);
210 numbers->setCurrentItem(idx+1); 210 numbers->setCurrentItem(idx+1);
211 numbersChanged(); 211 numbersChanged();
212 } 212 }
213} 213}
214 214
215 215
216void DialWidget::pppdargsbutton() { 216void DialWidget::pppdargsbutton() {
217 PPPdArguments pa(_pppdata, this); 217 PPPdArguments pa(_pppdata, this);
218 pa.showMaximized(); 218 pa.showMaximized();
219 pa.exec(); 219 pa.exec();
220} 220}
221 221
222 222
223 223
224///////////////////////////////////////////////////////////////////////////// 224/////////////////////////////////////////////////////////////////////////////
225// ExecWidget 225// ExecWidget
226///////////////////////////////////////////////////////////////////////////// 226/////////////////////////////////////////////////////////////////////////////
227ExecWidget::ExecWidget(PPPData *pd, QWidget *parent, bool isnewaccount, const char *name) : 227ExecWidget::ExecWidget(PPPData *pd, QWidget *parent, bool isnewaccount, const char *name) :
228 QWidget(parent, name), _pppdata(pd) 228 QWidget(parent, name), _pppdata(pd)
229{ 229{
230 QVBoxLayout *tl = new QVBoxLayout(this, 0 );//, KDialog::spacingHint()); 230 QVBoxLayout *tl = new QVBoxLayout(this, 0 );//, KDialog::spacingHint());
231 231
232 QLabel *l = new QLabel( tr("Here you can select commands to run at certain stages of the connection. The commands are run with your real user id, so you cannot run any commands here requiring root permissions (unless, of course, you are root).<br><br>Be sure to supply the whole path to the program otherwise we might be unable to find it."), this); 232 QLabel *l = new QLabel( tr("Here you can select commands to run at certain stages of the connection. The commands are run with your real user id, so you cannot run any commands here requiring root permissions (unless, of course, you are root).<br><br>Be sure to supply the whole path to the program otherwise we might be unable to find it."), this);
233 233
234 tl->addWidget(l); 234 tl->addWidget(l);
235 tl->addStretch(1); 235 tl->addStretch(1);
236 236
237 QGridLayout *l1 = new QGridLayout(4, 2, 10); 237 QGridLayout *l1 = new QGridLayout(4, 2, 10);
238 tl->addLayout(l1); 238 tl->addLayout(l1);
239 l1->setColStretch(0, 0); 239 l1->setColStretch(0, 0);
240 l1->setColStretch(1, 1); 240 l1->setColStretch(1, 1);
241 241
242 before_connect_l = new QLabel(tr("Before connect:"), this); 242 before_connect_l = new QLabel(tr("Before connect:"), this);
243 before_connect_l->setAlignment(AlignVCenter); 243 before_connect_l->setAlignment(AlignVCenter);
244 l1->addWidget(before_connect_l, 0, 0); 244 l1->addWidget(before_connect_l, 0, 0);
245 before_connect = new QLineEdit(this); 245 before_connect = new QLineEdit(this);
246// before_connect->setMaxLength(COMMAND_SIZE); 246// before_connect->setMaxLength(COMMAND_SIZE);
247 l1->addWidget(before_connect, 0, 1); 247 l1->addWidget(before_connect, 0, 1);
248 QString tmp = tr("Allows you to run a program <b>before</b> a connection\n" 248 QString tmp = tr("Allows you to run a program <b>before</b> a connection\n"
249 "is established. It is called immediately before\n" 249 "is established. It is called immediately before\n"
250 "dialing has begun.\n\n" 250 "dialing has begun.\n\n"
251 "This might be useful, e.g. to stop HylaFAX blocking the\n" 251 "This might be useful, e.g. to stop HylaFAX blocking the\n"
252 "modem."); 252 "modem.");
253 253
254 QWhatsThis::add(before_connect_l,tmp); 254 QWhatsThis::add(before_connect_l,tmp);
255 QWhatsThis::add(before_connect,tmp); 255 QWhatsThis::add(before_connect,tmp);
256 256
257 command_label = new QLabel(tr("Upon connect:"), this); 257 command_label = new QLabel(tr("Upon connect:"), this);
258 command_label->setAlignment(AlignVCenter); 258 command_label->setAlignment(AlignVCenter);
259 l1->addWidget(command_label, 1, 0); 259 l1->addWidget(command_label, 1, 0);
260 command = new QLineEdit(this); 260 command = new QLineEdit(this);
261// command->setMaxLength(COMMAND_SIZE); 261// command->setMaxLength(COMMAND_SIZE);
262 l1->addWidget(command, 1, 1); 262 l1->addWidget(command, 1, 1);
263 tmp = tr("Allows you to run a program <b>after</b> a connection\n" 263 tmp = tr("Allows you to run a program <b>after</b> a connection\n"
264 "is established. When your program is called, all\n" 264 "is established. When your program is called, all\n"
265 "preparations for an Internet connection are finished.\n" 265 "preparations for an Internet connection are finished.\n"
266 "\n" 266 "\n"
267 "Very useful for fetching mail and news"); 267 "Very useful for fetching mail and news");
268 268
269 QWhatsThis::add(command_label,tmp); 269 QWhatsThis::add(command_label,tmp);
270 QWhatsThis::add(command,tmp); 270 QWhatsThis::add(command,tmp);
271 271
272 predisconnect_label = new QLabel(tr("Before disconnect:"), 272 predisconnect_label = new QLabel(tr("Before disconnect:"),
273 this); 273 this);
diff --git a/noncore/settings/networksettings/ppp/general.cpp b/noncore/settings/networksettings/ppp/general.cpp
index f735e49..5540946 100644
--- a/noncore/settings/networksettings/ppp/general.cpp
+++ b/noncore/settings/networksettings/ppp/general.cpp
@@ -1,441 +1,518 @@
1/* 1/*
2 * kPPP: A pppd front end for the KDE project 2 * kPPP: A pppd front end for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * based on EzPPP: 9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter 10 * Copyright (C) 1997 Jay Painter
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#include <termios.h> 27#include <termios.h>
28#include <string.h> 28#include <string.h>
29 29
30#include <qcheckbox.h> 30#include <qcheckbox.h>
31#include <qcombobox.h> 31#include <qcombobox.h>
32#include <qlabel.h> 32#include <qlabel.h>
33#include <qlayout.h> 33#include <qlayout.h>
34#include <qpushbutton.h> 34#include <qpushbutton.h>
35#include <qslider.h> 35#include <qslider.h>
36#include <qspinbox.h> 36#include <qspinbox.h>
37#include <qwhatsthis.h> 37#include <qwhatsthis.h>
38 38#include <qpe/config.h>
39// #include <qgroupbox.h> 39// #include <qgroupbox.h>
40 40
41
41#include "general.h" 42#include "general.h"
42#include "interfaceppp.h" 43#include "interfaceppp.h"
43//#include "miniterm.h" 44//#include "miniterm.h"
44#include "modeminfo.h" 45#include "modeminfo.h"
45#include "modemcmds.h" 46#include "modemcmds.h"
46#include "devices.h" 47//#include "devices.h"
47#include "pppdata.h" 48#include "pppdata.h"
48//#include <klocale.h> 49//#include <klocale.h>
49#define i18n QObject::tr
50 50
51 51
52 52
53ModemWidget::ModemWidget( InterfacePPP *ifppp, QWidget *parent, const char *name ) 53
54 : QWidget(parent, name), _ifaceppp(ifppp) 54ModemWidget::ModemWidget( PPPData *pd, QWidget *parent, const char *name )
55 : QWidget(parent, name), _pppdata(pd)
55{ 56{
56 int k; 57 int k;
57 58
58 QGridLayout *tl = new QGridLayout(this, 8, 2, 0 );//, KDialog::spacingHint()); 59 QGridLayout *tl = new QGridLayout(this, 8, 2, 0 );//, KDialog::spacingHint());
59 60
60 QLabel *label1; 61 QLabel *label1;
61 label1 = new QLabel(i18n("Modem de&vice:"), this); 62
63 label1 = new QLabel(tr("Modem &name:"), this);
62 tl->addWidget(label1, 0, 0); 64 tl->addWidget(label1, 0, 0);
63 65
66 modemname = new QLineEdit(this, "modemName");
67 modemname->setText( _pppdata->devname() );
68 label1->setBuddy(modemname);
69 tl->addWidget(modemname, 0, 1);
70
71 label1 = new QLabel(tr("Modem de&vice:"), this);
72 tl->addWidget(label1, 1, 0);
73
64 modemdevice = new QComboBox(false, this); 74 modemdevice = new QComboBox(false, this);
75 modemdevice->setEditable( true );
76 modemdevice->setDuplicatesEnabled ( false );
77 modemdevice->setInsertionPolicy( QComboBox::AtTop );
65 label1->setBuddy(modemdevice); 78 label1->setBuddy(modemdevice);
66 79
67 for(k = 0; devices[k]; k++) 80 Config cfg("NetworkSetupPPP");
68 modemdevice->insertItem(devices[k]); 81 cfg.setGroup("Devices_General");
82 QStringList devs = cfg.readListEntry("devices",',');
83 if (devs.isEmpty()) devs << "/dev/modem" << "/dev/ircomm0" << "/dev/ttyS0";
84 modemdevice->insertStringList( devs );
85 tl->addWidget(modemdevice, 1, 1);
86
87// connect(modemdevice, SIGNAL(activated(int)),
88 // SLOT(setmodemdc(int)));
89// connect(modemdevice, SIGNAL(textChanged( const QString & ) ),
90// SLOT( setmodemdc( const QString &) ) );
69 91
70 tl->addWidget(modemdevice, 0, 1); 92 QString tmp = tr("This specifies the serial port your modem is attached \n"
71 connect(modemdevice, SIGNAL(activated(int)),
72 SLOT(setmodemdc(int)));
73 QString tmp = i18n("This specifies the serial port your modem is attached \n"
74 "to. On Linux/x86, typically this is either /dev/ttyS0 \n" 93 "to. On Linux/x86, typically this is either /dev/ttyS0 \n"
75 "(COM1 under DOS) or /dev/ttyS1 (COM2 under DOS).\n" 94 "(COM1 under DOS) or /dev/ttyS1 (COM2 under DOS).\n"
76 "\n" 95 "\n"
77 "If you have an internal ISDN card with AT command\n" 96 "If you have an internal ISDN card with AT command\n"
78 "emulation (most cards under Linux support this), you\n" 97 "emulation (most cards under Linux support this), you\n"
79 "should select one of the /dev/ttyIx devices."); 98 "should select one of the /dev/ttyIx devices.");
80 99
81 QWhatsThis::add(label1,tmp); 100 QWhatsThis::add(label1,tmp);
82 QWhatsThis::add(modemdevice,tmp); 101 QWhatsThis::add(modemdevice,tmp);
83 102
84 103
85 label1 = new QLabel(i18n("&Flow control:"), this); 104 label1 = new QLabel(tr("&Flow control:"), this);
86 tl->addWidget(label1, 1, 0); 105 tl->addWidget(label1, 2, 0);
87 106
88 flowcontrol = new QComboBox(false, this); 107 flowcontrol = new QComboBox(false, this);
89 label1->setBuddy(flowcontrol); 108 label1->setBuddy(flowcontrol);
90 flowcontrol->insertItem(i18n("Hardware [CRTSCTS]")); 109 flowcontrol->insertItem(tr("Hardware [CRTSCTS]"));
91 flowcontrol->insertItem(i18n("Software [XON/XOFF]")); 110 flowcontrol->insertItem(tr("Software [XON/XOFF]"));
92 flowcontrol->insertItem(i18n("None")); 111 flowcontrol->insertItem(tr("None"));
93 tl->addWidget(flowcontrol, 1, 1); 112 tl->addWidget(flowcontrol, 2, 1);
94 connect(flowcontrol, SIGNAL(activated(int)), 113// connect(flowcontrol, SIGNAL(activated(int)),
95 SLOT(setflowcontrol(int))); 114 // SLOT(setflowcontrol(int)));
96 115
97 tmp = i18n("<p>Specifies how the serial port and modem\n" 116 tmp = tr("<p>Specifies how the serial port and modem\n"
98 "communicate. You should not change this unless\n" 117 "communicate. You should not change this unless\n"
99 "you know what you are doing.\n" 118 "you know what you are doing.\n"
100 "\n" 119 "\n"
101 "<b>Default</b>: CRTSCTS"); 120 "<b>Default</b>: CRTSCTS");
102 121
103 QWhatsThis::add(label1,tmp); 122 QWhatsThis::add(label1,tmp);
104 QWhatsThis::add(flowcontrol,tmp); 123 QWhatsThis::add(flowcontrol,tmp);
105 124
106 QLabel *labelenter = new QLabel(i18n("&Line termination:"), this); 125 QLabel *labelenter = new QLabel(tr("&Line termination:"), this);
107 tl->addWidget(labelenter, 2, 0); 126 tl->addWidget(labelenter, 3, 0);
108 127
109 enter = new QComboBox(false, this); 128 enter = new QComboBox(false, this);
110 labelenter->setBuddy(enter); 129 labelenter->setBuddy(enter);
111 enter->insertItem("CR"); 130 enter->insertItem("CR");
112 enter->insertItem("LF"); 131 enter->insertItem("LF");
113 enter->insertItem("CR/LF"); 132 enter->insertItem("CR/LF");
114 tl->addWidget(enter, 2, 1); 133 tl->addWidget(enter, 3, 1);
115 connect(enter, SIGNAL(activated(int)), SLOT(setenter(int))); 134// connect(enter, SIGNAL(activated(int)), SLOT(setenter(int)));
116 tmp = i18n("<p>Specifies how AT commands are sent to your\n" 135 tmp = tr("<p>Specifies how AT commands are sent to your\n"
117 "modem. Most modems will work fine with the\n" 136 "modem. Most modems will work fine with the\n"
118 "default <i>CR/LF</i>. If your modem does not react\n" 137 "default <i>CR/LF</i>. If your modem does not react\n"
119 "to the init string, you should try different\n" 138 "to the init string, you should try different\n"
120 "settings here\n" 139 "settings here\n"
121 "\n" 140 "\n"
122 "<b>Default</b>: CR/LF"); 141 "<b>Default</b>: CR/LF");
123 142
124 QWhatsThis::add(labelenter,tmp); 143 QWhatsThis::add(labelenter,tmp);
125 QWhatsThis::add(enter, tmp); 144 QWhatsThis::add(enter, tmp);
126 145
127 QLabel *baud_label = new QLabel(i18n("Co&nnection speed:"), this); 146 QLabel *baud_label = new QLabel(tr("Co&nnection speed:"), this);
128 tl->addWidget(baud_label, 3, 0); 147 tl->addWidget(baud_label, 4, 0);
129 baud_c = new QComboBox(this); 148 baud_c = new QComboBox(this);
130 baud_label->setBuddy(baud_c); 149 baud_label->setBuddy(baud_c);
131 150
132 static const char *baudrates[] = { 151 static const char *baudrates[] = {
133 152
134#ifdef B460800 153#ifdef B460800
135 "460800", 154 "460800",
136#endif 155#endif
137 156
138#ifdef B230400 157#ifdef B230400
139 "230400", 158 "230400",
140#endif 159#endif
141 160
142#ifdef B115200 161#ifdef B115200
143 "115200", 162 "115200",
144#endif 163#endif
145 164
146#ifdef B57600 165#ifdef B57600
147 "57600", 166 "57600",
148#endif 167#endif
149 168
150 "38400", 169 "38400",
151 "19200", 170 "19200",
152 "9600", 171 "9600",
153 "2400", 172 "2400",
154 0}; 173 0};
155 174
156 for(k = 0; baudrates[k]; k++) 175 for(k = 0; baudrates[k]; k++)
157 baud_c->insertItem(baudrates[k]); 176 baud_c->insertItem(baudrates[k]);
158 177
159 baud_c->setCurrentItem(3); 178 baud_c->setCurrentItem(3);
160 connect(baud_c, SIGNAL(activated(int)), 179// connect(baud_c, SIGNAL(activated(int)),
161 this, SLOT(speed_selection(int))); 180 // this, SLOT(speed_selection(int)));
162 tl->addWidget(baud_c, 3, 1); 181 tl->addWidget(baud_c, 4, 1);
163 182
164 tmp = i18n("Specifies the speed your modem and the serial\n" 183 tmp = tr("Specifies the speed your modem and the serial\n"
165 "port talk to each other. You should begin with\n" 184 "port talk to each other. You should begin with\n"
166 "the default of 38400 bits/sec. If everything\n" 185 "the default of 38400 bits/sec. If everything\n"
167 "works you can try to increase this value, but to\n" 186 "works you can try to increase this value, but to\n"
168 "no more than 115200 bits/sec (unless you know\n" 187 "no more than 115200 bits/sec (unless you know\n"
169 "that your serial port supports higher speeds)."); 188 "that your serial port supports higher speeds).");
170 189
171 QWhatsThis::add(baud_label,tmp); 190 QWhatsThis::add(baud_label,tmp);
172 QWhatsThis::add(baud_c,tmp); 191 QWhatsThis::add(baud_c,tmp);
173 192
174 for(int i=0; i <= enter->count()-1; i++) { 193 for(int i=0; i <= enter->count()-1; i++) {
175 if(_ifaceppp->data()->enter() == enter->text(i)) 194 if(_pppdata->enter() == enter->text(i))
176 enter->setCurrentItem(i); 195 enter->setCurrentItem(i);
177 } 196 }
178 197
179 tl->addRowSpacing(4, 10); 198 tl->addRowSpacing(5, 10);
180 199
181 //Modem Lock File 200 //Modem Lock File
182 modemlockfile = new QCheckBox(i18n("&Use lock file"), this); 201 modemlockfile = new QCheckBox(tr("&Use lock file"), this);
183 202
184 modemlockfile->setChecked(_ifaceppp->data()->modemLockFile()); 203 modemlockfile->setChecked(_pppdata->modemLockFile());
185 connect(modemlockfile, SIGNAL(toggled(bool)), 204// connect(modemlockfile, SIGNAL(toggled(bool)),
186 SLOT(modemlockfilechanged(bool))); 205// SLOT(modemlockfilechanged(bool)));
187 tl->addMultiCellWidget(modemlockfile, 5, 5, 0, 1); 206 tl->addMultiCellWidget(modemlockfile, 6, 6, 0, 1);
188 // l12->addStretch(1); 207 // l12->addStretch(1);
189 QWhatsThis::add(modemlockfile, 208 QWhatsThis::add(modemlockfile,
190 i18n("<p>To prevent other programs from accessing the\n" 209 tr("<p>To prevent other programs from accessing the\n"
191 "modem while a connection is established, a\n" 210 "modem while a connection is established, a\n"
192 "file can be created to indicate that the modem\n" 211 "file can be created to indicate that the modem\n"
193 "is in use. On Linux an example file would be\n" 212 "is in use. On Linux an example file would be\n"
194 "<tt>/var/lock/LCK..ttyS1</tt>\n" 213 "<tt>/var/lock/LCK..ttyS1</tt>\n"
195 "Here you can select whether this locking will\n" 214 "Here you can select whether this locking will\n"
196 "be done.\n" 215 "be done.\n"
197 "\n" 216 "\n"
198 "<b>Default</b>: On")); 217 "<b>Default</b>: On"));
199 218
200 // Modem Timeout Line Edit Box 219 // Modem Timeout Line Edit Box
201 QHBoxLayout *timeoutLayout = new QHBoxLayout( this ); 220 QHBoxLayout *timeoutLayout = new QHBoxLayout( this );
202 QLabel *timeoutlabel = new QLabel( tr("Modem timeout:") ,this, "timeout" ); 221 QLabel *timeoutlabel = new QLabel( tr("Modem timeout:") ,this, "timeout" );
203 modemtimeout = new QSpinBox( 1, 120, 1, this, "modemTimeout" ); 222 modemtimeout = new QSpinBox( 1, 120, 1, this, "modemTimeout" );
204// modemtimeout = new KIntNumInput(_pppdata->modemTimeout(), this); 223// modemtimeout = new KIntNumInput(_pppdata->modemTimeout(), this);
205// modemtimeout->setLabel(i18n("Modem &timeout:")); 224// modemtimeout->setLabel(tr("Modem &timeout:"));
206// modemtimeout->setRange(1, 120, 1); 225// modemtimeout->setRange(1, 120, 1);
207 modemtimeout->setSuffix(i18n(" sec")); 226 modemtimeout->setSuffix(tr(" sec"));
208 modemtimeout->setValue( _ifaceppp->data()->modemTimeout() ); 227 modemtimeout->setValue( _pppdata->modemTimeout() );
209 connect(modemtimeout, SIGNAL(valueChanged(int)), 228// connect(modemtimeout, SIGNAL(valueChanged(int)),
210 SLOT(modemtimeoutchanged(int))); 229 // SLOT(modemtimeoutchanged(int)));
211 timeoutLayout->addWidget(timeoutlabel); 230 timeoutLayout->addWidget(timeoutlabel);
212 timeoutLayout->addWidget(modemtimeout); 231 timeoutLayout->addWidget(modemtimeout);
213 tl->addMultiCellLayout(timeoutLayout, 6, 6, 0, 1); 232 tl->addMultiCellLayout(timeoutLayout, 7, 7, 0, 1);
214 233
215 QWhatsThis::add(modemtimeout, 234 QWhatsThis::add(modemtimeout,
216 i18n("This specifies how long <i>kppp</i> waits for a\n" 235 tr("This specifies how long <i>kppp</i> waits for a\n"
217 "<i>CONNECT</i> response from your modem. The\n" 236 "<i>CONNECT</i> response from your modem. The\n"
218 "recommended value is 30 seconds.")); 237 "recommended value is 30 seconds."));
219 238
220 //set stuff from gpppdata 239 //set stuff from gpppdata
221 for(int i=0; i <= enter->count()-1; i++) { 240 for(int i=0; i <= enter->count()-1; i++) {
222 if(_ifaceppp->data()->enter() == enter->text(i)) 241 if(_pppdata->enter() == enter->text(i))
223 enter->setCurrentItem(i); 242 enter->setCurrentItem(i);
224 } 243 }
225 244
226 for(int i=0; i <= modemdevice->count()-1; i++) { 245 for(int i=0; i <= modemdevice->count()-1; i++) {
227 if(_ifaceppp->data()->modemDevice() == modemdevice->text(i)) 246 if(_pppdata->modemDevice() == modemdevice->text(i))
228 modemdevice->setCurrentItem(i); 247 modemdevice->setCurrentItem(i);
229 } 248 }
230 249
231 for(int i=0; i <= flowcontrol->count()-1; i++) { 250 for(int i=0; i <= flowcontrol->count()-1; i++) {
232 if(_ifaceppp->data()->flowcontrol() == flowcontrol->text(i)) 251 if(_pppdata->flowcontrol() == flowcontrol->text(i))
233 flowcontrol->setCurrentItem(i); 252 flowcontrol->setCurrentItem(i);
234 } 253 }
235 254
236 //set the modem speed 255 //set the modem speed
237 for(int i=0; i < baud_c->count(); i++) 256 for(int i=0; i < baud_c->count(); i++)
238 if(baud_c->text(i) == _ifaceppp->data()->speed()) 257 if(baud_c->text(i) == _pppdata->speed())
239 baud_c->setCurrentItem(i); 258 baud_c->setCurrentItem(i);
240 259
241 tl->setRowStretch(7, 1); 260 tl->setRowStretch(1, 1);
242} 261}
243 262
263ModemWidget::~ModemWidget()
264{
265 QStringList devs;
244 266
245void ModemWidget::speed_selection(int) { 267 for (int i=0;i<modemdevice->count();i++)
246 _ifaceppp->data()->setSpeed(baud_c->text(baud_c->currentItem())); 268 {
247} 269 QString s = modemdevice->text(i);
270 s.simplifyWhiteSpace();
271 if (! s.isEmpty() ) devs << s;
272 }
248 273
249 274
250void ModemWidget::setenter(int ) { 275 QString edited = modemdevice->currentText();
251 _ifaceppp->data()->setEnter(enter->text(enter->currentItem())); 276 if ( !( edited ).isEmpty() ) {
252} 277 edited.simplifyWhiteSpace();
278 if ( devs.contains( edited ) == 0 ) {
279 devs << edited;
280 }
281 _pppdata->setModemDevice( edited );
282 }
283
253 284
285 Config cfg("NetworkSetupPPP");
286 cfg.setGroup("Devices_General");
287 cfg.writeEntry("devices",devs,',');
254 288
255void ModemWidget::setmodemdc(int i) {
256 _ifaceppp->data()->setModemDevice(modemdevice->text(i));
257} 289}
258 290
291// void ModemWidget::speed_selection(int) {
292// _pppdata->setSpeed(baud_c->text(baud_c->currentItem()));
293// }
259 294
260void ModemWidget::setflowcontrol(int i) {
261 _ifaceppp->data()->setFlowcontrol(flowcontrol->text(i));
262}
263 295
296// void ModemWidget::setenter(int ) {
297// _pppdata->setEnter(enter->text(enter->currentItem()));
298// }
264 299
265void ModemWidget::modemlockfilechanged(bool set) {
266 _ifaceppp->data()->setModemLockFile(set);
267}
268 300
301// void ModemWidget::setmodemdc(int i) {
302// _pppdata->setModemDevice(modemdevice->text(i));
303// }
269 304
270void ModemWidget::modemtimeoutchanged(int n) { 305// void ModemWidget::setmodemdc( const QString &string ) {
271 _ifaceppp->data()->setModemTimeout(n); 306// _pppdata->setModemDevice( string );
272} 307// }
308
309// void ModemWidget::setflowcontrol(int i) {
310// _pppdata->setFlowcontrol(flowcontrol->text(i));
311// }
273 312
274 313
275ModemWidget2::ModemWidget2( InterfacePPP* ifp, QWidget *parent, 314// void ModemWidget::modemlockfilechanged(bool set) {
315// _pppdata->setModemLockFile(set);
316// }
317
318
319// void ModemWidget::modemtimeoutchanged(int n) {
320// _pppdata->setModemTimeout(n);
321// }
322
323
324
325bool ModemWidget::save()
326{
327 //first check to make sure that the device name is unique!
328 if(modemname->text().isEmpty() ||
329 !_pppdata->isUniqueDevname(modemname->text()))
330 return false;
331
332 qDebug("ModemWidget::save saving modem1 data");
333 _pppdata->setDevname( modemname->text() );
334 _pppdata->setModemDevice( modemdevice->currentText() );
335 _pppdata->setFlowcontrol(flowcontrol->currentText());
336 _pppdata->setFlowcontrol(flowcontrol->currentText());
337 _pppdata->setSpeed(baud_c->currentText());
338 _pppdata->setModemLockFile( modemlockfile->isChecked());
339 _pppdata->setModemTimeout( modemtimeout->value() );
340 return true;
341
342}
343
344ModemWidget2::ModemWidget2( PPPData *pd, InterfacePPP *ip, QWidget *parent,
276 const char *name) 345 const char *name)
277 : QWidget(parent, name), _ifaceppp(ifp) 346 : QWidget(parent, name), _pppdata(pd), _ifaceppp(ip)
278{ 347{
279 QVBoxLayout *l1 = new QVBoxLayout(this, 0 );//, KDialog::spacingHint()); 348 QVBoxLayout *l1 = new QVBoxLayout(this, 0 );//, KDialog::spacingHint());
280 349
281 350
282 waitfordt = new QCheckBox(i18n("&Wait for dial tone before dialing"), this); 351 waitfordt = new QCheckBox(tr("&Wait for dial tone before dialing"), this);
283 waitfordt->setChecked(_ifaceppp->data()->waitForDialTone()); 352 waitfordt->setChecked(_pppdata->waitForDialTone());
284 connect(waitfordt, SIGNAL(toggled(bool)), SLOT(waitfordtchanged(bool))); 353// connect(waitfordt, SIGNAL(toggled(bool)), SLOT(waitfordtchanged(bool)));
285 l1->addWidget(waitfordt); 354 l1->addWidget(waitfordt);
286 QWhatsThis::add(waitfordt, 355 QWhatsThis::add(waitfordt,
287 i18n("<p>Normally the modem waits for a dial tone\n" 356 tr("<p>Normally the modem waits for a dial tone\n"
288 "from your phone line, indicating that it can\n" 357 "from your phone line, indicating that it can\n"
289 "start to dial a number. If your modem does not\n" 358 "start to dial a number. If your modem does not\n"
290 "recognize this sound, or your local phone system\n" 359 "recognize this sound, or your local phone system\n"
291 "does not emit such a tone, uncheck this option\n" 360 "does not emit such a tone, uncheck this option\n"
292 "\n" 361 "\n"
293 "<b>Default:</b>: On")); 362 "<b>Default:</b>: On"));
294 363
295 QHBoxLayout *waitLayout = new QHBoxLayout( this ); 364 QHBoxLayout *waitLayout = new QHBoxLayout( this );
296 QLabel *waitLabel = new QLabel( tr("Busy wait:"), this, "busyWait" ); 365 QLabel *waitLabel = new QLabel( tr("Busy wait:"), this, "busyWait" );
297 busywait = new QSpinBox( 0, 300, 5, this, "busyWait" ); 366 busywait = new QSpinBox( 0, 300, 5, this, "busyWait" );
298// busywait = new KIntNumInput(_pppdata->busyWait(), this); 367// busywait = new KIntNumInput(_pppdata->busyWait(), this);
299// busywait->setLabel(i18n("B&usy wait:")); 368// busywait->setLabel(tr("B&usy wait:"));
300// busywait->setRange(0, 300, 5, true); 369// busywait->setRange(0, 300, 5, true);
301 busywait->setSuffix(i18n(" sec")); 370 busywait->setSuffix(tr(" sec"));
302 connect(busywait, SIGNAL(valueChanged(int)), SLOT(busywaitchanged(int))); 371// connect(busywait, SIGNAL(valueChanged(int)), SLOT(busywaitchanged(int)));
303 waitLayout->addWidget(waitLabel); 372 waitLayout->addWidget(waitLabel);
304 waitLayout->addWidget(busywait); 373 waitLayout->addWidget(busywait);
305 l1->addLayout( waitLayout ); 374 l1->addLayout( waitLayout );
306 375
307 QWhatsThis::add(busywait, 376 QWhatsThis::add(busywait,
308 i18n("Specifies the number of seconds to wait before\n" 377 tr("Specifies the number of seconds to wait before\n"
309 "redial if all dialed numbers are busy. This is\n" 378 "redial if all dialed numbers are busy. This is\n"
310 "necessary because some modems get stuck if the\n" 379 "necessary because some modems get stuck if the\n"
311 "same number is busy too often.\n" 380 "same number is busy too often.\n"
312 "\n" 381 "\n"
313 "The default is 0 seconds, you should not change\n" 382 "The default is 0 seconds, you should not change\n"
314 "this unless you need to.")); 383 "this unless you need to."));
315 384
316 l1->addSpacing(10); 385 l1->addSpacing(10);
317 386
318 QHBoxLayout *hbl = new QHBoxLayout; 387 QHBoxLayout *hbl = new QHBoxLayout;
319 hbl->setSpacing(2);//KDialog::spacingHint()); 388 hbl->setSpacing(2);//KDialog::spacingHint());
320 389
321 QLabel *volumeLabel = new QLabel(i18n("Modem &volume:"), this); 390 QLabel *volumeLabel = new QLabel(tr("Modem &volume:"), this);
322 hbl->addWidget(volumeLabel); 391 hbl->addWidget(volumeLabel);
323 volume = new QSlider(0, 2, 1, _ifaceppp->data()->volume(), 392 volume = new QSlider(0, 2, 1, _pppdata->volume(),
324 QSlider::Horizontal, this); 393 QSlider::Horizontal, this);
325 volumeLabel->setBuddy(volume); 394 volumeLabel->setBuddy(volume);
326 volume->setTickmarks(QSlider::Below); 395 volume->setTickmarks(QSlider::Below);
327 hbl->addWidget(volume); 396 hbl->addWidget(volume);
328 397
329 l1->addLayout(hbl); 398 l1->addLayout(hbl);
330 399
331 connect(volume, SIGNAL(valueChanged(int)), 400// connect(volume, SIGNAL(valueChanged(int)),
332 this, SLOT(volumeChanged(int))); 401 // this, SLOT(volumeChanged(int)));
333 QString tmp = i18n("Most modems have a speaker which makes\n" 402 QString tmp = tr("Most modems have a speaker which makes\n"
334 "a lot of noise when dialing. Here you can\n" 403 "a lot of noise when dialing. Here you can\n"
335 "either turn this completely off or select a\n" 404 "either turn this completely off or select a\n"
336 "lower volume.\n" 405 "lower volume.\n"
337 "\n" 406 "\n"
338 "If this does not work for your modem,\n" 407 "If this does not work for your modem,\n"
339 "you must modify the modem volume command."); 408 "you must modify the modem volume command.");
340 409
341 QWhatsThis::add(volumeLabel,tmp); 410 QWhatsThis::add(volumeLabel,tmp);
342 QWhatsThis::add(volume, tmp); 411 QWhatsThis::add(volume, tmp);
343 412
344 l1->addSpacing(20); 413 l1->addSpacing(20);
345 414
346#if 0 415#if 0
347 chkbox1 = new QCheckBox(i18n("Modem asserts CD line"), this); 416 chkbox1 = new QCheckBox(tr("Modem asserts CD line"), this);
348 chkbox1->setChecked(_ifaceppp->data()->UseCDLine()); 417 chkbox1->setChecked(_pppdata->UseCDLine());
349 connect(chkbox1,SIGNAL(toggled(bool)), 418 connect(chkbox1,SIGNAL(toggled(bool)),
350 this,SLOT(use_cdline_toggled(bool))); 419 this,SLOT(use_cdline_toggled(bool)));
351 l12->addWidget(chkbox1); 420 l12->addWidget(chkbox1);
352 l12->addStretch(1); 421 l12->addStretch(1);
353 l1->addStretch(1); 422 l1->addStretch(1);
354 QWhatsThis::add(chkbox1, 423 QWhatsThis::add(chkbox1,
355 i18n("This controls how <i>kppp</i> detects that the modem\n" 424 tr("This controls how <i>kppp</i> detects that the modem\n"
356 "is not responding. Unless you are having\n" 425 "is not responding. Unless you are having\n"
357 "problems with this, do not modify this setting.\n" 426 "problems with this, do not modify this setting.\n"
358 "\n" 427 "\n"
359 "<b>Default</b>: Off")); 428 "<b>Default</b>: Off"));
360#endif 429#endif
361 430
362 modemcmds = new QPushButton(i18n("Mod&em Commands..."), this); 431 modemcmds = new QPushButton(tr("Mod&em Commands..."), this);
363 QWhatsThis::add(modemcmds, 432 QWhatsThis::add(modemcmds,
364 i18n("Allows you to change the AT command for\n" 433 tr("Allows you to change the AT command for\n"
365 "your modem.")); 434 "your modem."));
366 435
367 modeminfo_button = new QPushButton(i18n("&Query Modem..."), this); 436 modeminfo_button = new QPushButton(tr("&Query Modem..."), this);
368 QWhatsThis::add(modeminfo_button, 437 QWhatsThis::add(modeminfo_button,
369 i18n("Most modems support the ATI command set to\n" 438 tr("Most modems support the ATI command set to\n"
370 "find out vendor and revision of your modem.\n" 439 "find out vendor and revision of your modem.\n"
371 "\n" 440 "\n"
372 "Press this button to query your modem for\n" 441 "Press this button to query your modem for\n"
373 "this information. It can be useful to help\n" 442 "this information. It can be useful to help\n"
374 "you setup the modem")); 443 "you setup the modem"));
375 444
376// terminal_button = new QPushButton(i18n("&Terminal..."), this); 445// terminal_button = new QPushButton(tr("&Terminal..."), this);
377// QWhatsThis::add(terminal_button, 446// QWhatsThis::add(terminal_button,
378 // i18n("Opens the built-in terminal program. You\n" 447 // tr("Opens the built-in terminal program. You\n"
379 // "can use this if you want to play around\n" 448 // "can use this if you want to play around\n"
380 // "with your modem's AT command set")); 449 // "with your modem's AT command set"));
381 450
382 QHBoxLayout *hbox = new QHBoxLayout(); 451 QHBoxLayout *hbox = new QHBoxLayout();
383 l1->addLayout(hbox); 452 l1->addLayout(hbox);
384 hbox->addStretch(1); 453 hbox->addStretch(1);
385 QVBoxLayout *vbox = new QVBoxLayout(); 454 QVBoxLayout *vbox = new QVBoxLayout();
386 hbox->addLayout(vbox); 455 hbox->addLayout(vbox);
387 456
388 vbox->addWidget(modemcmds); 457 vbox->addWidget(modemcmds);
389 vbox->addWidget(modeminfo_button); 458 vbox->addWidget(modeminfo_button);
390// vbox->addWidget(terminal_button); 459// vbox->addWidget(terminal_button);
391 460
392 hbox->addStretch(1); 461 hbox->addStretch(1);
393 l1->addStretch(1); 462 l1->addStretch(1);
394 463
395 connect(modemcmds, SIGNAL(clicked()), 464 connect(modemcmds, SIGNAL(clicked()),
396 SLOT(modemcmdsbutton())); 465 SLOT(modemcmdsbutton()));
397 connect(modeminfo_button, SIGNAL(clicked()), 466 connect(modeminfo_button, SIGNAL(clicked()),
398 SLOT(query_modem())); 467 SLOT(query_modem()));
399// connect(terminal_button, SIGNAL(clicked()), 468// connect(terminal_button, SIGNAL(clicked()),
400 // SLOT(terminal())); 469 // SLOT(terminal()));
401} 470}
402 471
403 472
404void ModemWidget2::modemcmdsbutton() { 473void ModemWidget2::modemcmdsbutton() {
405 ModemCommands mc(_ifaceppp->data(), this); 474 ModemCommands mc(_ifaceppp->data(), this, "commands" , true, Qt::WStyle_ContextHelp);
406 mc.showMaximized(); 475 mc.showMaximized();
407 mc.exec(); 476 mc.exec();
408} 477}
409 478
410 479
411void ModemWidget2::query_modem() { 480void ModemWidget2::query_modem() {
412 ModemTransfer mt(_ifaceppp->modem(), this); 481 ModemTransfer mt(_ifaceppp->modem(), this);
413 mt.exec(); 482 mt.exec();
414} 483}
415 484
416 485
417// void ModemWidget2::terminal() { 486// void ModemWidget2::terminal() {
418// MiniTerm terminal(NULL,NULL); 487// MiniTerm terminal(NULL,NULL);
419// terminal.exec(); 488// terminal.exec();
420// } 489// }
421 490
422 491
423#if 0 492// #if 0
424void ModemWidget2::use_cdline_toggled(bool on) { 493// void ModemWidget2::use_cdline_toggled(bool on) {
425 _ifaceppp->data()->setUseCDLine(on); 494// _pppdata->setUseCDLine(on);
426} 495// }
427#endif 496// #endif
428 497
429void ModemWidget2::waitfordtchanged(bool b) { 498// void ModemWidget2::waitfordtchanged(bool b) {
430 _ifaceppp->data()->setWaitForDialTone((int)b); 499// _pppdata->setWaitForDialTone((int)b);
431} 500// }
432 501
433void ModemWidget2::busywaitchanged(int n) { 502// void ModemWidget2::busywaitchanged(int n) {
434 _ifaceppp->data()->setbusyWait(n); 503// _pppdata->setbusyWait(n);
435} 504// }
436 505
437 506
438void ModemWidget2::volumeChanged(int v) { 507// void ModemWidget2::volumeChanged(int v) {
439 _ifaceppp->data()->setVolume(v); 508// _pppdata->setVolume(v);
509// }
510
511bool ModemWidget2::save()
512{
513 _pppdata->setWaitForDialTone(waitfordt->isChecked());
514 _pppdata->setbusyWait(busywait->value());
515 _pppdata->setVolume(volume->value());
516 return true;
440} 517}
441 518
diff --git a/noncore/settings/networksettings/ppp/general.h b/noncore/settings/networksettings/ppp/general.h
index 3e59b46..f43f241 100644
--- a/noncore/settings/networksettings/ppp/general.h
+++ b/noncore/settings/networksettings/ppp/general.h
@@ -1,100 +1,108 @@
1/* 1/*
2 * 2 *
3 * kPPP: A pppd front end for the KDE project 3 * kPPP: A pppd front end for the KDE project
4 * 4 *
5 * $Id$ 5 * $Id$
6 * 6 *
7 * Copyright (C) 1997 Bernd Johannes Wuebben 7 * Copyright (C) 1997 Bernd Johannes Wuebben
8 * wuebben@math.cornell.edu 8 * wuebben@math.cornell.edu
9 * 9 *
10 * 10 *
11 * This program is free software; you can redistribute it and/or 11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Library General Public 12 * modify it under the terms of the GNU Library General Public
13 * License as published by the Free Software Foundation; either 13 * License as published by the Free Software Foundation; either
14 * version 2 of the License, or (at your option) any later version. 14 * version 2 of the License, or (at your option) any later version.
15 * 15 *
16 * This program is distributed in the hope that it will be useful, 16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Library General Public License for more details. 19 * Library General Public License for more details.
20 * 20 *
21 * You should have received a copy of the GNU Library General Public 21 * You should have received a copy of the GNU Library General Public
22 * License along with this program; if not, write to the Free 22 * License along with this program; if not, write to the Free
23 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 23 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 */ 24 */
25 25
26#ifndef _GENERAL_H_ 26#ifndef _GENERAL_H_
27#define _GENERAL_H_ 27#define _GENERAL_H_
28 28
29#include <qwidget.h> 29#include <qwidget.h>
30 30
31class QSlider; 31class QSlider;
32class QSpinBox; 32class QSpinBox;
33class QCombobox; 33class QCombobox;
34class QLabel; 34class QLabel;
35class QCheckBox; 35class QCheckBox;
36class QComboBox; 36class QComboBox;
37class PPPData; 37class PPPData;
38class InterfacePPP; 38class InterfacePPP;
39class QLineEdit;
39 40
40class ModemWidget : public QWidget { 41class ModemWidget : public QWidget {
41 Q_OBJECT 42 Q_OBJECT
42public: 43public:
43 ModemWidget( InterfacePPP*, QWidget *parent=0, const char *name=0 ); 44 ModemWidget(PPPData*, QWidget *parent=0, const char *name=0 );
45 ~ModemWidget();
44 46
45private slots: 47 bool save();
46 void setmodemdc(int); 48
47 void setflowcontrol(int); 49/* private slots: */
48 void modemtimeoutchanged(int); 50 /* void setmodemdc(int); */
49 void modemlockfilechanged(bool); 51/* void setmodemdc(const QString &); */
50 void setenter(int); 52 /* void setflowcontrol(int); */
51 void speed_selection(int); 53 /* void modemtimeoutchanged(int); */
54 /* void modemlockfilechanged(bool); */
55 /* void setenter(int); */
56/* void speed_selection(int); */
52 57
53private: 58private:
54 QComboBox *enter; 59 QComboBox *enter;
55 /* QLabel *label1; */ 60 /* QLabel *label1; */
56 /* QLabel *label2; */ 61 /* QLabel *label2; */
57 /* QLabel *labeltmp; */ 62 /* QLabel *labeltmp; */
58 /* QLabel *labelenter; */ 63 /* QLabel *labelenter; */
64 QLineEdit *modemname;
59 QComboBox *modemdevice; 65 QComboBox *modemdevice;
60 QComboBox *flowcontrol; 66 QComboBox *flowcontrol;
61 67
62 QComboBox *baud_c; 68 QComboBox *baud_c;
63 QLabel *baud_label; 69 QLabel *baud_label;
64 70
65 QSpinBox *modemtimeout; 71 QSpinBox *modemtimeout;
66 QCheckBox *modemlockfile; 72 QCheckBox *modemlockfile;
67 InterfacePPP *_ifaceppp; 73 PPPData *_pppdata;
68}; 74};
69 75
70 76
71class ModemWidget2 : public QWidget { 77class ModemWidget2 : public QWidget {
72 Q_OBJECT 78 Q_OBJECT
73public: 79public:
74 ModemWidget2( InterfacePPP*, QWidget *parent=0, const char *name=0 ); 80 ModemWidget2( PPPData*, InterfacePPP*, QWidget *parent=0, const char *name=0 );
81 bool save();
75 82
76private slots: 83private slots:
77 void waitfordtchanged(bool); 84/* void waitfordtchanged(bool); */
78 void busywaitchanged(int); 85 /* void busywaitchanged(int); */
79 // void use_cdline_toggled(bool); 86 // void use_cdline_toggled(bool);
80 void modemcmdsbutton(); 87 void modemcmdsbutton();
81 // void terminal(); 88 // void terminal();
82 void query_modem(); 89 void query_modem();
83 void volumeChanged(int); 90 // void volumeChanged(int);
84 91
85private: 92private:
86 QLabel *labeltmp; 93 QLabel *labeltmp;
87 QPushButton *modemcmds; 94 QPushButton *modemcmds;
88 QPushButton *modeminfo_button; 95 QPushButton *modeminfo_button;
89 // QPushButton *terminal_button; 96 // QPushButton *terminal_button;
90 // QFrame *fline; 97 // QFrame *fline;
91 QCheckBox *waitfordt; 98 QCheckBox *waitfordt;
92 QSpinBox *busywait; 99 QSpinBox *busywait;
93 QCheckBox *chkbox1; 100 QCheckBox *chkbox1;
94 QSlider *volume; 101 QSlider *volume;
102 PPPData *_pppdata;
95 InterfacePPP *_ifaceppp; 103 InterfacePPP *_ifaceppp;
96}; 104};
97 105
98#endif 106#endif
99 107
100 108
diff --git a/noncore/settings/networksettings/ppp/interfaceinformationppp.cpp b/noncore/settings/networksettings/ppp/interfaceinformationppp.cpp
index 553daa2..6b158b9 100644
--- a/noncore/settings/networksettings/ppp/interfaceinformationppp.cpp
+++ b/noncore/settings/networksettings/ppp/interfaceinformationppp.cpp
@@ -1,37 +1,41 @@
1#include "interfaceinformationppp.h" 1#include "interfaceinformationppp.h"
2 2
3
4#include <qpushbutton.h> 3#include <qpushbutton.h>
5#include <qlabel.h> 4#include <qlabel.h>
6//#include <qgroupbox.h>
7#include <qmessagebox.h> 5#include <qmessagebox.h>
8#include <qabstractlayout.h> 6#include <qabstractlayout.h>
9 7
10#include "connect.h" 8#include "connect.h"
11#include "conwindow.h" 9#include "conwindow.h"
12 10
13#ifdef QWS 11#ifdef QWS
14#else 12#else
15 #define showMaximized show 13 #define showMaximized show
16#endif 14#endif
17 15
18/** 16/**
19 * Constructor for the InterfaceInformationImp class. This class pretty much 17 * Constructor for the InterfaceInformationImp class. This class pretty much
20 * just display's information about the interface that is passed to it. 18 * just display's information about the interface that is passed to it.
21 */ 19 */
22InterfaceInformationPPP::InterfaceInformationPPP(QWidget *parent, const char *name, Interface *i, WFlags f) 20InterfaceInformationPPP::InterfaceInformationPPP(QWidget *parent, const char *name, Interface *i, WFlags f)
23 :InterfaceInformationImp(parent, name, i, f) 21 :InterfaceInformationImp(parent, name, i, Qt::WStyle_ContextHelp)
24{ 22{
25 qDebug("InterfaceInformationPPP::InterfaceInformationPPP"); 23 qDebug("InterfaceInformationPPP::InterfaceInformationPPP %s", name);
26 con = new ConnectWidget( (InterfacePPP*)i, this, "con" ); 24 con = new ConnectWidget( (InterfacePPP*)i, this, "con" );
27 con->setSizePolicy( QSizePolicy(QSizePolicy::MinimumExpanding, 25 con->setSizePolicy( QSizePolicy(QSizePolicy::MinimumExpanding,
28 QSizePolicy::Fixed) ); 26 QSizePolicy::Fixed) );
29 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); 27
30 InterfaceInformationLayout->addItem( spacer, 7, 0 ); 28 macAddressLabel->hide();
31 InterfaceInformationLayout->addMultiCellWidget( con, 8, 8, 0, 1 ); 29 subnetMaskLabel->hide();
32 // InterfaceInformationLayout->addWidget( con, 7, 0 ); 30 broadcastLabel->hide();
31 TextLabel23->hide();
32 TextLabel21->hide();
33 TextLabel24->hide();
34
35 InterfaceInformationLayout->addWidget( con, 1, 0 );
33 connect(i, SIGNAL(begin_connect()),con, SLOT(preinit())); 36 connect(i, SIGNAL(begin_connect()),con, SLOT(preinit()));
37 connect(i, SIGNAL(hangup_now() ), con, SLOT(cancelbutton() ) );
34} 38}
35 39
36 40
37 41
diff --git a/noncore/settings/networksettings/ppp/interfaceppp.cpp b/noncore/settings/networksettings/ppp/interfaceppp.cpp
index 9ec30bc..f443f3c 100644
--- a/noncore/settings/networksettings/ppp/interfaceppp.cpp
+++ b/noncore/settings/networksettings/ppp/interfaceppp.cpp
@@ -1,142 +1,174 @@
1 1
2#include <qmessagebox.h> 2#include <qmessagebox.h>
3#define i18n QObject::tr 3#include <qlayout.h>
4#include <qlineedit.h>
5#include <qlabel.h>
4 6
5#include "auth.h" 7#include "auth.h"
6#include "interfaceppp.h" 8#include "interfaceppp.h"
7#include "modem.h" 9#include "modem.h"
8#include "pppdata.h" 10#include "pppdata.h"
9 11
10InterfacePPP::InterfacePPP(QObject *parent, const char *name, bool status) 12InterfacePPP::InterfacePPP(QObject *parent, const char *name, bool status)
11 : Interface(parent, name, status), 13 : Interface(parent, name, status),
12 _modemPtr(0), 14 _modemPtr(0),
13 _dataPtr(0) 15 _dataPtr(0)
14{ 16{
15 qDebug("InterfacePPP::InterfacePPP("); 17 qDebug("InterfacePPP::InterfacePPP(");
16} 18}
17 19
18PPPData* InterfacePPP::data() 20PPPData* InterfacePPP::data()const
19{ 21{
20 if (!_dataPtr){ 22 if (!_dataPtr){
21 qDebug("creating new Data obj"); 23 qDebug("creating new Data obj");
22 _dataPtr = new PPPData(); 24 _dataPtr = new PPPData();
23 _dataPtr->setModemDevice( getInterfaceName() ); 25 _dataPtr->setDevice( getInterfaceName() );
24 _dataPtr->setAccount( getHardwareName() ); 26 _dataPtr->setAccount( getHardwareName() );
25 } 27 }
26 return _dataPtr; 28 return _dataPtr;
27} 29}
28 30
29Modem* InterfacePPP::modem() 31Modem* InterfacePPP::modem()const
30{ 32{
31 if (!_modemPtr){ 33 if (!_modemPtr){
32 qDebug("creating new modem obj"); 34 qDebug("creating new modem obj");
33 _modemPtr = new Modem( data() ); 35 _modemPtr = new Modem( data() );
34 } 36 }
35 return _modemPtr; 37 return _modemPtr;
36} 38}
37 39
38bool InterfacePPP::refresh() 40bool InterfacePPP::refresh()
39{ 41{
40 qDebug("InterfacePPP::refresh()"); 42 qDebug("InterfacePPP::refresh()");
41 updateInterface(this); 43 QString old = getInterfaceName();
42 QMessageBox::information(0,"Not Implemented","This feature is not yet implemneted... ;-("); 44 setInterfaceName( modem()->pppDevice() );
43 return false; 45
46 (void)Interface::refresh();
47
48 setInterfaceName( old );
49 emit updateInterface(this);
50
51 return true;
44} 52}
45 53
46void InterfacePPP::start() 54void InterfacePPP::start()
47{ 55{
48 qDebug("InterfacePPP::start"); 56 qDebug("InterfacePPP::start");
49// should work...
50// if (data()->password().isEmpty() ){
51// //FIXME: ask for password
52// qDebug("using dummy password");
53// QMessageBox::critical( 0, "no password", "you should be prompted for a password, but you are not! ;-)");
54// }
55 57
58 if (data()->password().isEmpty() && !data()->storedUsername().isEmpty() ) {
59
60 QDialog mb( 0, "Dialog", true );
61 mb.setCaption( tr( "No password" ) );
62 QVBoxLayout layout( &mb );
63 QLabel text ( &mb );
64 text.setText( tr("Username defined but no password\n Please enter a password") );
65 QLineEdit lineedit( &mb );
66 lineedit.setEchoMode( QLineEdit::Password );
67 layout.addWidget( &text );
68 layout.addWidget( &lineedit );
69 if ( mb.exec() == QDialog::Accepted ) {
70 data()->setPassword( lineedit.text() );
71 }
72 }
56 73
57 QFileInfo info(pppdPath()); 74 QFileInfo info(pppdPath());
58 75
59 if(!info.exists()){ 76 if(!info.exists()){
60 QMessageBox::warning(0, tr("Error"), 77 QMessageBox::warning(0, tr("Error"),
61 i18n("<qt>Cannot find the PPP daemon!<br>" 78 QObject::tr("<qt>Cannot find the PPP daemon!<br>"
62 "Make sure that pppd is installed and " 79 "Make sure that pppd is installed and "
63 "that you have entered the correct path.</qt>")); 80 "that you have entered the correct path.</qt>"));
64 return; 81 return;
65 } 82 }
66//#if 0 83//#if 0
67 if(!info.isExecutable()){ 84 if(!info.isExecutable()){
68 85
69 QString string; 86 QString string;
70 string = i18n( "<qt>Cannot execute:<br> %1<br>" 87 string = QObject::tr( "<qt>Cannot execute:<br> %1<br>"
71 "Please make sure that you have given " 88 "Please make sure that you have given "
72 "setuid permission and that " 89 "setuid permission and that "
73 "pppd is executable.<br>").arg(pppdPath()); 90 "pppd is executable.<br>").arg(pppdPath());
74 QMessageBox::warning(0, tr("Error"), string); 91 QMessageBox::warning(0, tr("Error"), string);
75 return; 92 return;
76 93
77 } 94 }
78//#endif 95//#endif
79 96
80 QFileInfo info2(data()->modemDevice()); 97 QFileInfo info2(data()->modemDevice());
81 98
82 if(!info2.exists()){ 99 if(!info2.exists()){
83 QString string; 100 QString string;
84 string = i18n( "<qt>Cannot find:<br> %1<br>" 101 string = QObject::tr( "<qt>Cannot find:<br> %1<br>"
85 "Please make sure you have setup " 102 "Please make sure you have setup "
86 "your modem device properly " 103 "your modem device properly "
87 "and/or adjust the location of the modem device on " 104 "and/or adjust the location of the modem device on "
88 "the modem tab of " 105 "the modem tab of "
89 "the setup dialog.</qt>").arg(data()->modemDevice()); 106 "the setup dialog.</qt>").arg(data()->modemDevice());
90 QMessageBox::warning(0, tr("Error"), string); 107 QMessageBox::warning(0, tr("Error"), string);
91 return; 108 return;
92 } 109 }
93 110
94 // if this is a PAP or CHAP account, ensure that username is 111 // if this is a PAP or CHAP account, ensure that username is
95 // supplied 112 // supplied
96 if(data()->authMethod() == AUTH_PAP || 113 if(data()->authMethod() == AUTH_PAP ||
97 data()->authMethod() == AUTH_CHAP || 114 data()->authMethod() == AUTH_CHAP ||
98 data()->authMethod() == AUTH_PAPCHAP ) { 115 data()->authMethod() == AUTH_PAPCHAP ) {
99 if(false){ //FIXME: ID_Edit->text().isEmpty()) { 116 if(false){ //FIXME: ID_Edit->text().isEmpty()) {
100 QMessageBox::warning(0,tr("Error"), 117 QMessageBox::warning(0,tr("Error"),
101 i18n("<qt>You have selected the authentication method PAP or CHAP. This requires that you supply a username and a password!</qt>")); 118 QObject::tr("<qt>You have selected the authentication method PAP or CHAP. This requires that you supply a username and a password!</qt>"));
102// FIXME: return; 119// FIXME: return;
103 } else { 120 } else {
104 if(!modem()->setSecret(data()->authMethod(), 121 if(!modem()->setSecret(data()->authMethod(),
105 PPPData::encodeWord(data()->storedUsername()), 122 PPPData::encodeWord(data()->storedUsername()),
106 PPPData::encodeWord(data()->password())) 123 PPPData::encodeWord(data()->password()))
107 ) { 124 ) {
108 QString s; 125 QString s;
109 s = i18n("<qt>Cannot create PAP/CHAP authentication<br>" 126 s = QObject::tr("<qt>Cannot create PAP/CHAP authentication<br>"
110 "file \"%1\"</qt>").arg(PAP_AUTH_FILE); 127 "file \"%1\"</qt>").arg(PAP_AUTH_FILE);
111 QMessageBox::warning(0, tr("Error"), s); 128 QMessageBox::warning(0, tr("Error"), s);
112 return; 129 return;
113 } 130 }
114 } 131 }
115 } 132 }
116 133
117 if (data()->phonenumber().isEmpty()) { 134 if (data()->phonenumber().isEmpty()) {
118 QString s = i18n("You must specify a telephone number!"); 135 QString s = QObject::tr("You must specify a telephone number!");
119 QMessageBox::warning(0, tr("Error"), s); 136 QMessageBox::warning(0, tr("Error"), s);
120 return; 137 return;
121 } 138 }
122 139
123 // SEGFAULTS: 140 // SEGFAULTS:
124// setStatus( true ); 141// setStatus( true );
125// emit updateInterface((Interface*) this); 142// emit updateInterface((Interface*) this);
126 143
127 emit begin_connect(); 144 emit begin_connect();
128 145
129 qDebug("InterfacePPP::start END"); 146 qDebug("InterfacePPP::start END");
130} 147}
131 148
132void InterfacePPP::stop() 149void InterfacePPP::stop()
133{ 150{
134 qDebug("InterfacePPP::stop"); 151 qDebug("InterfacePPP::stop");
152 // emit hangup_now();
153 status = false; // not connected
154 setStatus( false );
155 emit hangup_now();
156 refresh();
135 157
136} 158}
137 159
138void InterfacePPP::save() 160void InterfacePPP::save()
139{ 161{
140 data()->save(); 162 data()->save();
141 emit updateInterface((Interface*) this); 163 emit updateInterface((Interface*) this);
142} 164}
165QString InterfacePPP::pppDev()const {
166 return modem()->pppDevice();
167}
168pid_t InterfacePPP::pppPID()const{
169 return modem()->pppPID();
170}
171void InterfacePPP::setPPPDpid( pid_t pid) {
172 setStatus( true );
173 modem()->setPPPDPid( pid );
174}
diff --git a/noncore/settings/networksettings/ppp/interfaceppp.h b/noncore/settings/networksettings/ppp/interfaceppp.h
index 6eb6a69..39495c2 100644
--- a/noncore/settings/networksettings/ppp/interfaceppp.h
+++ b/noncore/settings/networksettings/ppp/interfaceppp.h
@@ -1,34 +1,40 @@
1#ifndef INTERFACEPPP_H 1#ifndef INTERFACEPPP_H
2#define INTERFACEPPP_H 2#define INTERFACEPPP_H
3 3
4#include <sys/types.h>
5
4#include "interface.h" 6#include "interface.h"
5 7
6class PPPData; 8class PPPData;
7class Modem; 9class Modem;
8 10
9class InterfacePPP : public Interface 11class InterfacePPP : public Interface
10{ 12{
11 Q_OBJECT 13 Q_OBJECT
12 14
13public: 15public:
14 InterfacePPP(QObject *parent=0, const char *name="PPP", bool status=false); 16 InterfacePPP(QObject *parent=0, const char *name="PPP", bool status=false);
15 17
16 PPPData* data(); 18 PPPData* data()const;
17 Modem* modem(); 19 Modem* modem()const;
20 QString pppDev()const; // returns the ppp device.... /dev/ppp0...
21 pid_t pppPID()const;
18 22
19signals: 23signals:
20 void begin_connect(); 24 void begin_connect();
25 void hangup_now();
21 26
22public slots: 27public slots:
23 virtual bool refresh(); 28 virtual bool refresh();
24 virtual void start(); 29 virtual void start();
25 virtual void stop(); 30 virtual void stop();
26 void save(); 31 void save();
32 void setPPPDpid( pid_t ); // sets the pppd pid for modem...
27 33
28 private: 34 private:
29 Modem *_modemPtr; 35 mutable Modem *_modemPtr;
30 PPPData *_dataPtr; 36 mutable PPPData *_dataPtr;
31}; 37};
32 38
33 39
34#endif 40#endif
diff --git a/noncore/settings/networksettings/ppp/kpppwidget.cpp b/noncore/settings/networksettings/ppp/kpppwidget.cpp
index 7b5c74d..e466358 100644
--- a/noncore/settings/networksettings/ppp/kpppwidget.cpp
+++ b/noncore/settings/networksettings/ppp/kpppwidget.cpp
@@ -1,888 +1,877 @@
1/* 1/*
2 * 2 *
3 * kPPP: A pppd front end for the KDE project 3 * kPPP: A pppd front end for the KDE project
4 * 4 *
5 * $Id$ 5 * $Id$
6 * 6 *
7 * Copyright (C) 1997 Bernd Johannes Wuebben 7 * Copyright (C) 1997 Bernd Johannes Wuebben
8 * wuebben@math.cornell.edu 8 * wuebben@math.cornell.edu
9 * 9 *
10 * Copyright (C) 1998-2002 Harri Porten <porten@kde.org> 10 * Copyright (C) 1998-2002 Harri Porten <porten@kde.org>
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#include "kpppwidget.h" 27#include "kpppwidget.h"
28 28
29#include <qapplication.h> 29#include <qapplication.h>
30#include <qcombobox.h> 30#include <qcombobox.h>
31#include <qdir.h> 31#include <qdir.h>
32#include <qevent.h> 32#include <qevent.h>
33#include <qdialog.h> 33#include <qdialog.h>
34#include <qlabel.h> 34#include <qlabel.h>
35#include <qpushbutton.h> 35#include <qpushbutton.h>
36#include <qregexp.h> 36#include <qregexp.h>
37#include <qtabwidget.h> 37#include <qtabwidget.h>
38#include <qdialog.h> 38#include <qdialog.h>
39#include <qwhatsthis.h> 39#include <qwhatsthis.h>
40#include <qcheckbox.h> 40#include <qcheckbox.h>
41 41
42// #include <kaboutdata.h> 42// #include <kaboutdata.h>
43// #include <kapplication.h> 43// #include <kapplication.h>
44#include <qbuttongroup.h> 44#include <qbuttongroup.h>
45//#include <kcmdlineargs.h>
46//#include <kconfig.h>
47//#include <kdebug.h>
48#define i18n QObject::tr
49//#include <kiconloader.h> // For BarIcon
50//#include <klocale.h>
51#include <qmessagebox.h> 45#include <qmessagebox.h>
52// #include <kseparator.h>
53// #include <kstandarddirs.h>
54// #include <kwin.h>
55// #include <khelpmenu.h>
56#include <qpushbutton.h> 46#include <qpushbutton.h>
57//#include <kguiitem.h>
58 47
59#include <stdlib.h> 48#include <stdlib.h>
60#include <errno.h> 49#include <errno.h>
61#include <signal.h> 50#include <signal.h>
62 51
63#include "runtests.h" 52#include "runtests.h"
64 53
65//#include "main.h" 54//#include "main.h"
66#include "auth.h" 55#include "auth.h"
67#include "modem.h" 56#include "modem.h"
68//#include "ppplog.h" 57//#include "ppplog.h"
69//#include "opener.h" 58//#include "opener.h"
70//#include "requester.h" 59//#include "requester.h"
71//#include "pppstats.h" 60//#include "pppstats.h"
72#include "pppdata.h" 61#include "pppdata.h"
73#include "general.h" 62#include "general.h"
74#include "interface.h" 63#include "interface.h"
75 64
76#define execute_command system 65#define execute_command system
77 66
78KPPPWidget *p_kppp = 0; 67KPPPWidget *p_kppp = 0;
79 68
80KPPPWidget::KPPPWidget(PPPData*pd, Interface *i, QWidget *parent, const char *name, bool modal, WFlags fl ) 69KPPPWidget::KPPPWidget(PPPData*pd, Interface *i, QWidget *parent, const char *name, bool modal, WFlags fl )
81 : QDialog(parent, name, modal, fl), _pppdata(pd) 70 : QDialog(parent, name, modal, Qt::WStyle_ContextHelp ), _pppdata(pd)
82{ 71{
83// tabWindow = 0; 72// tabWindow = 0;
84 p_kppp = this; 73 p_kppp = this;
85 // before doing anything else, run a few tests 74 // before doing anything else, run a few tests
86 if (!_pppdata->setModemDevice( i->getInterfaceName() )) 75 if (!_pppdata->setModemDevice( i->getInterfaceName() ))
87 _pppdata->setModemDevice("/dev/modem"); 76 _pppdata->setModemDevice("/dev/modem");
88 qDebug("PPPConfigWidget::PPPConfigWidget"); 77 qDebug("PPPConfigWidget::PPPConfigWidget");
89 qDebug(" interface->getHardwareName >%s<", i->getHardwareName().latin1()); 78 qDebug(" interface->getHardwareName >%s<", i->getHardwareName().latin1());
90 if (!_pppdata->setAccount( i->getHardwareName() )) 79 if (!_pppdata->setAccount( i->getHardwareName() ))
91 _pppdata->setAccount( 0 ); 80 _pppdata->setAccount( 0 );
92 81
93 qDebug(" _pppdata->accname >%s<",_pppdata->accname().latin1()); 82 qDebug(" _pppdata->accname >%s<",_pppdata->accname().latin1());
94 qDebug(" _pppdata->currentAccountID() >%i<",_pppdata->currentAccountID()); 83 qDebug(" _pppdata->currentAccountID() >%i<",_pppdata->currentAccountID());
95 84
96 int result = runTests(); 85 int result = runTests();
97 if(result == TEST_CRITICAL) 86 if(result == TEST_CRITICAL)
98 exit(4); 87 exit(4);
99 88
100// installEventFilter(this); 89// installEventFilter(this);
101 90
102 QVBoxLayout *tl = new QVBoxLayout(this, 10, 10); 91 QVBoxLayout *tl = new QVBoxLayout(this, 10, 10);
103 92
104 QGridLayout *l1 = new QGridLayout(3, 4); 93 QGridLayout *l1 = new QGridLayout(3, 4);
105 tl->addLayout(l1); 94 tl->addLayout(l1);
106 l1->addColSpacing(0, 10); 95 l1->addColSpacing(0, 10);
107 l1->addColSpacing(3, 10); 96 l1->addColSpacing(3, 10);
108 l1->setColStretch(1, 3); 97 l1->setColStretch(1, 3);
109 l1->setColStretch(2, 4); 98 l1->setColStretch(2, 4);
110 99
111 label1 = new QLabel(i18n("C&onnect to: "), this); 100 label1 = new QLabel(QObject::tr("C&onnect to: "), this);
112 l1->addWidget(label1, 0, 1); 101 l1->addWidget(label1, 0, 1);
113 102
114 connectto_c = new QComboBox(false, this); 103 connectto_c = new QComboBox(false, this);
115 label1->setBuddy(connectto_c); 104 label1->setBuddy(connectto_c);
116 105
117 connect(connectto_c, SIGNAL(activated(int)), 106 connect(connectto_c, SIGNAL(activated(int)),
118 SLOT(newdefaultaccount(int))); 107 SLOT(newdefaultaccount(int)));
119 l1->addWidget(connectto_c, 0, 2); 108 l1->addWidget(connectto_c, 0, 2);
120 109
121 ID_Label = new QLabel(i18n("&Login ID:"), this); 110 ID_Label = new QLabel(QObject::tr("&Login ID:"), this);
122 l1->addWidget(ID_Label, 1, 1); 111 l1->addWidget(ID_Label, 1, 1);
123 112
124 // the entry line for usernames 113 // the entry line for usernames
125 ID_Edit = new QLineEdit(this); 114 ID_Edit = new QLineEdit(this);
126 ID_Label->setBuddy(ID_Edit); 115 ID_Label->setBuddy(ID_Edit);
127 l1->addWidget(ID_Edit, 1, 2); 116 l1->addWidget(ID_Edit, 1, 2);
128 connect(ID_Edit, SIGNAL(returnPressed()), 117 connect(ID_Edit, SIGNAL(returnPressed()),
129 this, SLOT(enterPressedInID())); 118 this, SLOT(enterPressedInID()));
130 QString tmp = i18n("<p>Type in the username that you got from your\n" 119 QString tmp = QObject::tr("<p>Type in the username that you got from your\n"
131 "ISP. This is especially important for PAP\n" 120 "ISP. This is especially important for PAP\n"
132 "and CHAP. You may omit this when you use\n" 121 "and CHAP. You may omit this when you use\n"
133 "terminal-based or script-based authentication.\n" 122 "terminal-based or script-based authentication.\n"
134 "\n" 123 "\n"
135 "<b>Important</b>: case is important here:\n" 124 "<b>Important</b>: case is important here:\n"
136 "<i>myusername</i> is not the same as <i>MyUserName</i>!"); 125 "<i>myusername</i> is not the same as <i>MyUserName</i>!");
137 126
138 QWhatsThis::add(ID_Label,tmp); 127 QWhatsThis::add(ID_Label,tmp);
139 QWhatsThis::add(ID_Edit,tmp); 128 QWhatsThis::add(ID_Edit,tmp);
140 129
141 PW_Label = new QLabel(i18n("&Password:"), this); 130 PW_Label = new QLabel(QObject::tr("&Password:"), this);
142 l1->addWidget(PW_Label, 2, 1); 131 l1->addWidget(PW_Label, 2, 1);
143 132
144 PW_Edit= new QLineEdit(this); 133 PW_Edit= new QLineEdit(this);
145 PW_Label->setBuddy(PW_Edit); 134 PW_Label->setBuddy(PW_Edit);
146 PW_Edit->setEchoMode(QLineEdit::Password); 135 PW_Edit->setEchoMode(QLineEdit::Password);
147 l1->addWidget(PW_Edit, 2, 2); 136 l1->addWidget(PW_Edit, 2, 2);
148 connect(PW_Edit, SIGNAL(returnPressed()), 137 connect(PW_Edit, SIGNAL(returnPressed()),
149 this, SLOT(enterPressedInPW())); 138 this, SLOT(enterPressedInPW()));
150 139
151 tmp = i18n("<p>Type in the password that you got from your\n" 140 tmp = QObject::tr("<p>Type in the password that you got from your\n"
152 "ISP. This is especially important for PAP\n" 141 "ISP. This is especially important for PAP\n"
153 "and CHAP. You may omit this when you use\n" 142 "and CHAP. You may omit this when you use\n"
154 "terminal-based or script-based authentication.\n" 143 "terminal-based or script-based authentication.\n"
155 "\n" 144 "\n"
156 "<b>Important</b>: case is important here:\n" 145 "<b>Important</b>: case is important here:\n"
157 "<i>mypassword</i> is not the same as <i>MyPassword</i>!"); 146 "<i>mypassword</i> is not the same as <i>MyPassword</i>!");
158 147
159 QWhatsThis::add(PW_Label,tmp); 148 QWhatsThis::add(PW_Label,tmp);
160 QWhatsThis::add(PW_Edit,tmp); 149 QWhatsThis::add(PW_Edit,tmp);
161 150
162 QHBoxLayout *l3 = new QHBoxLayout; 151 QHBoxLayout *l3 = new QHBoxLayout;
163 tl->addSpacing(5); 152 tl->addSpacing(5);
164 tl->addLayout(l3); 153 tl->addLayout(l3);
165 tl->addSpacing(5); 154 tl->addSpacing(5);
166 l3->addSpacing(10); 155 l3->addSpacing(10);
167 log = new QCheckBox(i18n("Show lo&g window"), this); 156 log = new QCheckBox(QObject::tr("Show lo&g window"), this);
168 connect(log, SIGNAL(toggled(bool)), 157 connect(log, SIGNAL(toggled(bool)),
169 this, SLOT(log_window_toggled(bool))); 158 this, SLOT(log_window_toggled(bool)));
170 log->setChecked(_pppdata->get_show_log_window()); 159 log->setChecked(_pppdata->get_show_log_window());
171 l3->addWidget(log); 160 l3->addWidget(log);
172 161
173 QWhatsThis::add(log, 162 QWhatsThis::add(log,
174 i18n("<p>This controls whether a log window is shown.\n" 163 QObject::tr("<p>This controls whether a log window is shown.\n"
175 "A log window shows the communication between\n" 164 "A log window shows the communication between\n"
176 "<i>kppp</i> and your modem. This will help you\n" 165 "<i>kppp</i> and your modem. This will help you\n"
177 "in tracking down problems.\n" 166 "in tracking down problems.\n"
178 "\n" 167 "\n"
179 "Turn it off if <i>kppp</i> routinely connects without\n" 168 "Turn it off if <i>kppp</i> routinely connects without\n"
180 "problems")); 169 "problems"));
181 170
182// fline = new QSeparator( KSeparator::HLine, this); 171// fline = new QSeparator( KSeparator::HLine, this);
183// tl->addWidget(fline); 172// tl->addWidget(fline);
184 173
185 QHBoxLayout *l2 = new QHBoxLayout(this); 174 QHBoxLayout *l2 = new QHBoxLayout(this);
186 tl->addLayout(l2); 175 tl->addLayout(l2);
187 176
188 int minw = 0; 177 int minw = 0;
189 quit_b = new QPushButton(i18n("&Quit"), this); 178 quit_b = new QPushButton(QObject::tr("&Quit"), this);
190 // quit_b-> setGuiItem (KGuiItem(i18n("&Quit"), "exit" ) ); 179 // quit_b-> setGuiItem (KGuiItem(QObject::tr("&Quit"), "exit" ) );
191 connect( quit_b, SIGNAL(clicked()), SLOT(quitbutton())); 180 connect( quit_b, SIGNAL(clicked()), SLOT(quitbutton()));
192 if(quit_b->sizeHint().width() > minw) 181 if(quit_b->sizeHint().width() > minw)
193 minw = quit_b->sizeHint().width(); 182 minw = quit_b->sizeHint().width();
194 183
195 setup_b = new QPushButton(i18n("&Setup..."), this); 184 setup_b = new QPushButton(QObject::tr("&Setup..."), this);
196// setup_b->setGuiItem (KGuiItem(i18n("&Setup...")) ); 185// setup_b->setGuiItem (KGuiItem(QObject::tr("&Setup...")) );
197 connect( setup_b, SIGNAL(clicked()), SLOT(expandbutton())); 186 connect( setup_b, SIGNAL(clicked()), SLOT(expandbutton()));
198 if(setup_b->sizeHint().width() > minw) 187 if(setup_b->sizeHint().width() > minw)
199 minw = setup_b->sizeHint().width(); 188 minw = setup_b->sizeHint().width();
200 189
201 190
202 191
203// if(_pppdata->access() != KConfig::ReadWrite) 192// if(_pppdata->access() != KConfig::ReadWrite)
204 // setup_b->setEnabled(false); 193 // setup_b->setEnabled(false);
205 194
206// help_b = new QPushButton(i18n("&Help"), this); 195// help_b = new QPushButton(QObject::tr("&Help"), this);
207// connect( help_b, SIGNAL(clicked()), SLOT(helpbutton())); 196// connect( help_b, SIGNAL(clicked()), SLOT(helpbutton()));
208 197
209// KHelpMenu *helpMenu = new KHelpMenu(this, KGlobal::instance()->aboutData(), true); 198// KHelpMenu *helpMenu = new KHelpMenu(this, KGlobal::instance()->aboutData(), true);
210// help_b->setPopup((QPopupMenu*)helpMenu->menu()); 199// help_b->setPopup((QPopupMenu*)helpMenu->menu());
211// help_b->setGuiItem (KGuiItem(i18n("&Help"), "help" ) ); 200// help_b->setGuiItem (KGuiItem(QObject::tr("&Help"), "help" ) );
212 201
213// if(help_b->sizeHint().width() > minw) 202// if(help_b->sizeHint().width() > minw)
214// minw = help_b->sizeHint().width(); 203// minw = help_b->sizeHint().width();
215 204
216 connect_b = new QPushButton(i18n("&Connect"), this); 205 connect_b = new QPushButton(QObject::tr("&Connect"), this);
217 connect_b->setDefault(true); 206 connect_b->setDefault(true);
218 connect_b->setFocus(); 207 connect_b->setFocus();
219 connect(connect_b, SIGNAL(clicked()), SLOT(beginConnect())); 208 connect(connect_b, SIGNAL(clicked()), SLOT(beginConnect()));
220 if(connect_b->sizeHint().width() > minw) 209 if(connect_b->sizeHint().width() > minw)
221 minw = connect_b->sizeHint().width(); 210 minw = connect_b->sizeHint().width();
222 211
223 quit_b->setFixedWidth(minw); 212 quit_b->setFixedWidth(minw);
224 setup_b->setFixedWidth(minw); 213 setup_b->setFixedWidth(minw);
225// help_b->setFixedWidth(help_b->sizeHint().width()); 214// help_b->setFixedWidth(help_b->sizeHint().width());
226 connect_b->setFixedWidth(minw); 215 connect_b->setFixedWidth(minw);
227 216
228 l2->addWidget(quit_b); 217 l2->addWidget(quit_b);
229 l2->addWidget(setup_b); 218 l2->addWidget(setup_b);
230// l2->addWidget(help_b); 219// l2->addWidget(help_b);
231 l2->addSpacing(20); 220 l2->addSpacing(20);
232 l2->addWidget(connect_b); 221 l2->addWidget(connect_b);
233 222
234 setFixedSize(sizeHint()); 223 setFixedSize(sizeHint());
235 224
236 (void)new Modem(_pppdata); 225 (void)new Modem(_pppdata);
237 226
238 // we also connect cmld_start to the beginConnect so that I can run 227 // we also connect cmld_start to the beginConnect so that I can run
239 // the dialer through a command line argument 228 // the dialer through a command line argument
240 connect(this,SIGNAL(cmdl_start()),this,SLOT(beginConnect())); 229 connect(this,SIGNAL(cmdl_start()),this,SLOT(beginConnect()));
241 230
242// stats = new PPPStats; 231// stats = new PPPStats;
243 232
244 // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); 233 // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon());
245 234
246 // constructor of con_win reads position from config file 235 // constructor of con_win reads position from config file
247 con_win = new ConWindow(_pppdata, 0, "conw", this); 236 con_win = new ConWindow(_pppdata, 0, "conw", this);
248 // KWin::setIcons(con_win->winId(), kapp->icon(), kapp->miniIcon()); 237 // KWin::setIcons(con_win->winId(), kapp->icon(), kapp->miniIcon());
249 238
250// statdlg = new PPPStatsDlg(0, "stats", this, stats); 239// statdlg = new PPPStatsDlg(0, "stats", this, stats);
251// statdlg->hide(); 240// statdlg->hide();
252 241
253 // load up the accounts combo box 242 // load up the accounts combo box
254 243
255// resetaccounts(); 244// resetaccounts();
256 con = new ConnectWidget(_pppdata, 0, "con"); 245 con = new ConnectWidget(_pppdata, 0, "con");
257 //KWin::setIcons(con->winId(), kapp->icon(), kapp->miniIcon() ); 246 //KWin::setIcons(con->winId(), kapp->icon(), kapp->miniIcon() );
258 connect(this, SIGNAL(begin_connect()),con, SLOT(preinit())); 247 connect(this, SIGNAL(begin_connect()),con, SLOT(preinit()));
259 // Is this the best we can do here? it's not right. 248 // Is this the best we can do here? it's not right.
260// QRect desk = QApplication::desktop()->screenGeometry( 249// QRect desk = QApplication::desktop()->screenGeometry(
261// QApplication::desktop()->screenNumber(topLevelWidget())); 250// QApplication::desktop()->screenNumber(topLevelWidget()));
262// con->setGeometry(desk.center().x()-175, desk.center().y()-55, 350,110); 251// con->setGeometry(desk.center().x()-175, desk.center().y()-55, 350,110);
263 252
264 // connect the ConnectWidgets various signals 253 // connect the ConnectWidgets various signals
265 connect(con, SIGNAL(startAccounting()), 254 connect(con, SIGNAL(startAccounting()),
266 this, SLOT(startAccounting())); 255 this, SLOT(startAccounting()));
267 connect(con, SIGNAL(stopAccounting()), 256 connect(con, SIGNAL(stopAccounting()),
268 this, SLOT(stopAccounting())); 257 this, SLOT(stopAccounting()));
269 connect(qApp, SIGNAL(saveYourself()), 258 connect(qApp, SIGNAL(saveYourself()),
270 this, SLOT(saveMyself())); 259 this, SLOT(saveMyself()));
271 connect(qApp, SIGNAL(shutDown()), 260 connect(qApp, SIGNAL(shutDown()),
272 this, SLOT(shutDown())); 261 this, SLOT(shutDown()));
273 262
274 263
275// KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); 264// KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
276 265
277// m_strCmdlAccount = args->getOption("c"); 266// m_strCmdlAccount = args->getOption("c");
278// m_bQuitOnDisconnect = args->isSet("q"); 267// m_bQuitOnDisconnect = args->isSet("q");
279 268
280// if(!m_strCmdlAccount.isEmpty()) { 269// if(!m_strCmdlAccount.isEmpty()) {
281// m_bCmdlAccount = true; 270// m_bCmdlAccount = true;
282// kdDebug(5002) << "cmdl_account: " << m_bCmdlAccount << endl; 271// kdDebug(5002) << "cmdl_account: " << m_bCmdlAccount << endl;
283// } 272// }
284 273
285// if(m_bCmdlAccount){ 274// if(m_bCmdlAccount){
286// bool result = _pppdata->setAccount(m_strCmdlAccount); 275// bool result = _pppdata->setAccount(m_strCmdlAccount);
287// if (!result){ 276// if (!result){
288// QString string; 277// QString string;
289// string = i18n("No such Account:\n%1").arg(m_strCmdlAccount); 278// string = QObject::tr("No such Account:\n%1").arg(m_strCmdlAccount);
290// KMessageBox::error(this, string); 279// KMessageBox::error(this, string);
291// m_bCmdlAccount = false; 280// m_bCmdlAccount = false;
292// this->show(); 281// this->show();
293// } else { 282// } else {
294// beginConnect(); 283// beginConnect();
295// } 284// }
296// } else 285// } else
297// expandbutton(); 286// expandbutton();
298// show(); 287// show();
299 288
300 289
301//#define KPPP_SHOW_NEWS 290//#define KPPP_SHOW_NEWS
302#ifdef KPPP_SHOW_NEWS 291#ifdef KPPP_SHOW_NEWS
303 // keep user informed about recent changes 292 // keep user informed about recent changes
304 if(!m_bCmdlAccount) 293 if(!m_bCmdlAccount)
305 showNews(); 294 showNews();
306#endif 295#endif
307} 296}
308 297
309KPPPWidget::~KPPPWidget() 298KPPPWidget::~KPPPWidget()
310{ 299{
311 p_kppp = 0; 300 p_kppp = 0;
312// delete stats; 301// delete stats;
313} 302}
314 303
315// bool KPPPWidget::eventFilter(QObject *o, QEvent *e) { 304// bool KPPPWidget::eventFilter(QObject *o, QEvent *e) {
316// if(e->type() == QEvent::User) { 305// if(e->type() == QEvent::User) {
317// switch(((SignalEvent*)e)->sigType()) { 306// switch(((SignalEvent*)e)->sigType()) {
318// case SIGINT: 307// case SIGINT:
319// qDebug( "Received a SIGINT" ); 308// qDebug( "Received a SIGINT" );
320// interruptConnection(); 309// interruptConnection();
321// break; 310// break;
322// case SIGCHLD: 311// case SIGCHLD:
323// sigChld(); 312// sigChld();
324// break; 313// break;
325// case SIGUSR1: 314// case SIGUSR1:
326// sigPPPDDied(); 315// sigPPPDDied();
327// break; 316// break;
328// } 317// }
329// return true; 318// return true;
330// } 319// }
331 320
332// if(o == connect_b) { 321// if(o == connect_b) {
333// if(e->type() == QEvent::KeyPress) { 322// if(e->type() == QEvent::KeyPress) {
334// if(connect_b->hasFocus() && ((QKeyEvent *)e)->key() == Qt::Key_Return) { 323// if(connect_b->hasFocus() && ((QKeyEvent *)e)->key() == Qt::Key_Return) {
335// beginConnect(); 324// beginConnect();
336// return true; 325// return true;
337// } 326// }
338// } 327// }
339// } 328// }
340 329
341// return false; 330// return false;
342// } 331// }
343 332
344 333
345 334
346 335
347void KPPPWidget::enterPressedInID() { 336void KPPPWidget::enterPressedInID() {
348 PW_Edit->setFocus(); 337 PW_Edit->setFocus();
349} 338}
350 339
351 340
352void KPPPWidget::enterPressedInPW() { 341void KPPPWidget::enterPressedInPW() {
353 connect_b->setFocus(); 342 connect_b->setFocus();
354} 343}
355 344
356// triggered by the session manager 345// triggered by the session manager
357void KPPPWidget::saveMyself() { 346void KPPPWidget::saveMyself() {
358 _pppdata->save(); 347 _pppdata->save();
359} 348}
360 349
361void KPPPWidget::shutDown() { 350void KPPPWidget::shutDown() {
362 interruptConnection(); 351 interruptConnection();
363 saveMyself(); 352 saveMyself();
364} 353}
365 354
366void KPPPWidget::log_window_toggled(bool on) { 355void KPPPWidget::log_window_toggled(bool on) {
367 _pppdata->set_show_log_window(on); 356 _pppdata->set_show_log_window(on);
368} 357}
369 358
370 359
371 360
372 361
373// void KPPPWidget::resetaccounts() { 362// void KPPPWidget::resetaccounts() {
374// connectto_c->clear(); 363// connectto_c->clear();
375 364
376// int count = _pppdata->count(); 365// int count = _pppdata->count();
377 366
378// // enable/disable controls 367// // enable/disable controls
379// connectto_c->setEnabled(count > 0); 368// connectto_c->setEnabled(count > 0);
380// connect_b->setEnabled(count > 0); 369// connect_b->setEnabled(count > 0);
381// log->setEnabled(count > 0); 370// log->setEnabled(count > 0);
382// ID_Edit->setEnabled(count > 0); 371// ID_Edit->setEnabled(count > 0);
383// PW_Edit->setEnabled(count > 0); 372// PW_Edit->setEnabled(count > 0);
384 373
385// //load the accounts 374// //load the accounts
386// for(int i=0; i < count; i++) { 375// for(int i=0; i < count; i++) {
387// _pppdata->setAccountbyIndex(i); 376// _pppdata->setAccountbyIndex(i);
388// connectto_c->insertItem(_pppdata->accname()); 377// connectto_c->insertItem(_pppdata->accname());
389// } 378// }
390 379
391// //set the default account 380// //set the default account
392// if(!_pppdata->defaultAccount().isEmpty()) { 381// if(!_pppdata->defaultAccount().isEmpty()) {
393// for(int i=0; i < count; i++) 382// for(int i=0; i < count; i++)
394// if(_pppdata->defaultAccount() == connectto_c->text(i)) { 383// if(_pppdata->defaultAccount() == connectto_c->text(i)) {
395 // connectto_c->setCurrentItem(i); 384 // connectto_c->setCurrentItem(i);
396 // _pppdata->setAccountbyIndex(i); 385 // _pppdata->setAccountbyIndex(i);
397 386
398 // ID_Edit->setText(_pppdata->storedUsername()); 387 // ID_Edit->setText(_pppdata->storedUsername());
399 // PW_Edit->setText(_pppdata->storedPassword()); 388 // PW_Edit->setText(_pppdata->storedPassword());
400// } 389// }
401// } 390// }
402// else 391// else
403// if(count > 0) { 392// if(count > 0) {
404// _pppdata->setDefaultAccount(connectto_c->text(0)); 393// _pppdata->setDefaultAccount(connectto_c->text(0));
405// _pppdata->save(); 394// _pppdata->save();
406 // ID_Edit->setText(_pppdata->storedUsername()); 395 // ID_Edit->setText(_pppdata->storedUsername());
407 // PW_Edit->setText(_pppdata->storedPassword()); 396 // PW_Edit->setText(_pppdata->storedPassword());
408// } 397// }
409 398
410// connect(ID_Edit, SIGNAL(textChanged(const QString &)), 399// connect(ID_Edit, SIGNAL(textChanged(const QString &)),
411 // this, SLOT(usernameChanged(const QString &))); 400 // this, SLOT(usernameChanged(const QString &)));
412 401
413// connect(PW_Edit, SIGNAL(textChanged(const QString &)), 402// connect(PW_Edit, SIGNAL(textChanged(const QString &)),
414 // this, SLOT(passwordChanged(const QString &))); 403 // this, SLOT(passwordChanged(const QString &)));
415 404
416// if (ID_Edit->text().isEmpty()) 405// if (ID_Edit->text().isEmpty())
417// ID_Edit->setFocus(); 406// ID_Edit->setFocus();
418// else if (PW_Edit->text().isEmpty()) 407// else if (PW_Edit->text().isEmpty())
419// PW_Edit->setFocus(); 408// PW_Edit->setFocus();
420// } 409// }
421 410
422 411
423void KPPPWidget::interruptConnection() { 412void KPPPWidget::interruptConnection() {
424 // interrupt dial up 413 // interrupt dial up
425// 414//
426 415
427 if (con->isVisible()) 416 if (con->isVisible())
428 emit con->cancelbutton(); 417 emit con->cancelbutton();
429 418
430 // disconnect if online 419 // disconnect if online
431 if (_pppdata->pppdRunning()) 420 if (_pppdata->pppdRunning())
432 emit disconnect(); 421 emit disconnect();
433} 422}
434 423
435 424
436void KPPPWidget::sigPPPDDied() { 425void KPPPWidget::sigPPPDDied() {
437 qDebug( "Received a SIGUSR1" ); 426 qDebug( "Received a SIGUSR1" );
438 427
439 // if we are not connected pppdpid is -1 so have have to check for that 428 // if we are not connected pppdpid is -1 so have have to check for that
440 // in the followin line to make sure that we don't raise a false alarm 429 // in the followin line to make sure that we don't raise a false alarm
441 // such as would be the case when the log file viewer exits. 430 // such as would be the case when the log file viewer exits.
442 if(_pppdata->pppdRunning() || _pppdata->pppdError()) { 431 if(_pppdata->pppdRunning() || _pppdata->pppdError()) {
443 qDebug( "It was pppd that died" ); 432 qDebug( "It was pppd that died" );
444 433
445 // when we killpppd() on Cancel in ConnectWidget 434 // when we killpppd() on Cancel in ConnectWidget
446 // we set pppid to -1 so we won't 435 // we set pppid to -1 so we won't
447 // enter this block 436 // enter this block
448 437
449 // just to be sure 438 // just to be sure
450 439
451 Modem::modem->removeSecret(AUTH_PAP); 440 Modem::modem->removeSecret(AUTH_PAP);
452 Modem::modem->removeSecret(AUTH_CHAP); 441 Modem::modem->removeSecret(AUTH_CHAP);
453 442
454 _pppdata->setpppdRunning(false); 443 _pppdata->setpppdRunning(false);
455 444
456 qDebug( "Executing command on disconnect since pppd has died." ); 445 qDebug( "Executing command on disconnect since pppd has died." );
457 QApplication::flushX(); 446 QApplication::flushX();
458 execute_command(_pppdata->command_on_disconnect()); 447 execute_command(_pppdata->command_on_disconnect());
459 448
460// stopAccounting(); 449// stopAccounting();
461 450
462 con_win->stopClock(); 451 con_win->stopClock();
463// DockWidget::dock_widget->stop_stats(); 452// DockWidget::dock_widget->stop_stats();
464// DockWidget::dock_widget->hide(); 453// DockWidget::dock_widget->hide();
465 454
466 if(!_pppdata->pppdError()) 455 if(!_pppdata->pppdError())
467 _pppdata->setpppdError(E_PPPD_DIED); 456 _pppdata->setpppdError(E_PPPD_DIED);
468 removedns(); 457 removedns();
469 Modem::modem->unlockdevice(); 458 Modem::modem->unlockdevice();
470 // 459 //
471 con->pppdDied(); 460 con->pppdDied();
472 461
473 if(!_pppdata->automatic_redial()) { 462 if(!_pppdata->automatic_redial()) {
474 quit_b->setFocus(); 463 quit_b->setFocus();
475 show(); 464 show();
476 con_win->stopClock(); 465 con_win->stopClock();
477 //stopAccounting(); 466 //stopAccounting();
478 con_win->hide(); 467 con_win->hide();
479 con->hide(); 468 con->hide();
480 469
481 _pppdata->setpppdRunning(false); 470 _pppdata->setpppdRunning(false);
482 // // not in a signal handler !!! KNotifyClient::beep(); 471 // // not in a signal handler !!! KNotifyClient::beep();
483 QString msg; 472 QString msg;
484 if (_pppdata->pppdError() == E_IF_TIMEOUT) 473 if (_pppdata->pppdError() == E_IF_TIMEOUT)
485 msg = i18n("Timeout expired while waiting for the PPP interface " 474 msg = QObject::tr("Timeout expired while waiting for the PPP interface "
486 "to come up!"); 475 "to come up!");
487 else { 476 else {
488 msg = i18n("<p>The pppd daemon died unexpectedly!</p>"); 477 msg = QObject::tr("<p>The pppd daemon died unexpectedly!</p>");
489 Modem::modem->pppdExitStatus(); 478 Modem::modem->pppdExitStatus();
490 if (Modem::modem->lastStatus != 99) {// more recent pppds only 479 if (Modem::modem->lastStatus != 99) {// more recent pppds only
491 msg += i18n("<p>Exit status: %1").arg(Modem::modem->lastStatus); 480 msg += QObject::tr("<p>Exit status: %1").arg(Modem::modem->lastStatus);
492 msg += i18n("</p><p>See 'man pppd' for an explanation of the error " 481 msg += QObject::tr("</p><p>See 'man pppd' for an explanation of the error "
493 "codes or take a look at the kppp FAQ on " 482 "codes or take a look at the kppp FAQ on "
494 " <a href=http://devel-home.kde.org/~kppp/index.html>" 483 " <a href=http://devel-home.kde.org/~kppp/index.html>"
495 "http://devel-home.kde.org/~kppp/index.html</a></p>"); 484 "http://devel-home.kde.org/~kppp/index.html</a></p>");
496 } 485 }
497 } 486 }
498 487
499 // if(QMessageBox::warning(0, msg, i18n("Error"), i18n("&OK"), i18n("&Details...")) == QMessageBox::No) 488 // if(QMessageBox::warning(0, msg, QObject::tr("Error"), QObject::tr("&OK"), QObject::tr("&Details...")) == QMessageBox::No)
500 // // PPPL_ShowLog(); 489 // // PPPL_ShowLog();
501// } else { /* reconnect on disconnect */ 490// } else { /* reconnect on disconnect */
502 if (false){ 491 if (false){
503 qDebug( "Trying to reconnect... " ); 492 qDebug( "Trying to reconnect... " );
504 493
505 if(_pppdata->authMethod() == AUTH_PAP || 494 if(_pppdata->authMethod() == AUTH_PAP ||
506 _pppdata->authMethod() == AUTH_CHAP || 495 _pppdata->authMethod() == AUTH_CHAP ||
507 _pppdata->authMethod() == AUTH_PAPCHAP) 496 _pppdata->authMethod() == AUTH_PAPCHAP)
508 Modem::modem->setSecret(_pppdata->authMethod(), 497 Modem::modem->setSecret(_pppdata->authMethod(),
509 encodeWord(_pppdata->storedUsername()), 498 encodeWord(_pppdata->storedUsername()),
510 encodeWord(_pppdata->password())); 499 encodeWord(_pppdata->password()));
511 500
512 con_win->hide(); 501 con_win->hide();
513 con_win->stopClock(); 502 con_win->stopClock();
514 //stopAccounting(); 503 //stopAccounting();
515 _pppdata->setpppdRunning(false); 504 _pppdata->setpppdRunning(false);
516 // not in a signal handler !!!KNotifyClient::beep(); 505 // not in a signal handler !!!KNotifyClient::beep();
517 emit cmdl_start(); 506 emit cmdl_start();
518 } 507 }
519 } 508 }
520 _pppdata->setpppdError(0); 509 _pppdata->setpppdError(0);
521 } 510 }
522} 511}
523 512
524// void KPPPWidget::sigChld() { 513// void KPPPWidget::sigChld() {
525// qDebug( "sigchld()" ); 514// qDebug( "sigchld()" );
526// // pid_t id = wait(0L); 515// // pid_t id = wait(0L);
527// // if(id == helperPid && helperPid != -1) { 516// // if(id == helperPid && helperPid != -1) {
528// // kdDebug(5002) << "It was the setuid child that died" << endl; 517// // kdDebug(5002) << "It was the setuid child that died" << endl;
529// // helperPid = -1; 518// // helperPid = -1;
530// QString msg = i18n("kppp's helper process just died.\n" 519// QString msg = QObject::tr("kppp's helper process just died.\n"
531// "Since a further execution would be pointless, " 520// "Since a further execution would be pointless, "
532// "kppp will shut down now."); 521// "kppp will shut down now.");
533// QMessageBox::warning(0L,"error", msg); 522// QMessageBox::warning(0L,"error", msg);
534// //remove_pidfile(); 523// //remove_pidfile();
535// exit(1); 524// exit(1);
536// // } 525// // }
537// } 526// }
538 527
539 528
540void KPPPWidget::newdefaultaccount(int i) { 529void KPPPWidget::newdefaultaccount(int i) {
541 _pppdata->setDefaultAccount(connectto_c->text(i)); 530 _pppdata->setDefaultAccount(connectto_c->text(i));
542 _pppdata->save(); 531 _pppdata->save();
543 ID_Edit->setText(_pppdata->storedUsername()); 532 ID_Edit->setText(_pppdata->storedUsername());
544 PW_Edit->setText(_pppdata->storedPassword()); 533 PW_Edit->setText(_pppdata->storedPassword());
545} 534}
546 535
547 536
548 537
549 538
550void KPPPWidget::beginConnect() { 539void KPPPWidget::beginConnect() {
551 // make sure to connect to the account that is selected in the combo box 540 // make sure to connect to the account that is selected in the combo box
552 // (exeption: an account given by a command line argument) 541 // (exeption: an account given by a command line argument)
553 // if(!m_bCmdlAccount) { 542 // if(!m_bCmdlAccount) {
554// _pppdata->setAccount(connectto_c->currentText()); 543// _pppdata->setAccount(connectto_c->currentText());
555// _pppdata->setPassword(PW_Edit->text()); 544// _pppdata->setPassword(PW_Edit->text());
556// } else { 545// } else {
557 _pppdata->setPassword(_pppdata->storedPassword()); 546 _pppdata->setPassword(_pppdata->storedPassword());
558// } 547// }
559 548
560 QFileInfo info(pppdPath()); 549 QFileInfo info(pppdPath());
561 550
562 if(!info.exists()){ 551 if(!info.exists()){
563 QMessageBox::warning(this, "error", i18n("Cannot find the PPP daemon!\n" 552 QMessageBox::warning(this, "error", QObject::tr("Cannot find the PPP daemon!\n"
564 "Make sure that pppd is installed and " 553 "Make sure that pppd is installed and "
565 "that you have entered the correct path.")); 554 "that you have entered the correct path."));
566 return; 555 return;
567 } 556 }
568#if 0 557#if 0
569 if(!info.isExecutable()){ 558 if(!info.isExecutable()){
570 559
571 QString string; 560 QString string;
572 string = i18n("kppp cannot execute:\n %1\n" 561 string = QObject::tr("kppp cannot execute:\n %1\n"
573 "Please make sure that you have given kppp " 562 "Please make sure that you have given kppp "
574 "setuid permission and that " 563 "setuid permission and that "
575 "pppd is executable.").arg(_pppdata->pppdPath()); 564 "pppd is executable.").arg(_pppdata->pppdPath());
576 KMessageBox::error(this, string); 565 KMessageBox::error(this, string);
577 return; 566 return;
578 567
579 } 568 }
580#endif 569#endif
581 570
582 QFileInfo info2(_pppdata->modemDevice()); 571 QFileInfo info2(_pppdata->modemDevice());
583 572
584 if(!info2.exists()){ 573 if(!info2.exists()){
585 QString string; 574 QString string;
586 string = i18n("kppp can not find:\n %1\nPlease make sure you have setup " 575 string = QObject::tr("kppp can not find:\n %1\nPlease make sure you have setup "
587 "your modem device properly " 576 "your modem device properly "
588 "and/or adjust the location of the modem device on " 577 "and/or adjust the location of the modem device on "
589 "the modem tab of " 578 "the modem tab of "
590 "the setup dialog.").arg(_pppdata->modemDevice()); 579 "the setup dialog.").arg(_pppdata->modemDevice());
591 QMessageBox::warning(this, "error", string); 580 QMessageBox::warning(this, "error", string);
592 return; 581 return;
593 } 582 }
594 583
595 // if this is a PAP or CHAP account, ensure that username is 584 // if this is a PAP or CHAP account, ensure that username is
596 // supplied 585 // supplied
597 if(_pppdata->authMethod() == AUTH_PAP || 586 if(_pppdata->authMethod() == AUTH_PAP ||
598 _pppdata->authMethod() == AUTH_CHAP || 587 _pppdata->authMethod() == AUTH_CHAP ||
599 _pppdata->authMethod() == AUTH_PAPCHAP ) { 588 _pppdata->authMethod() == AUTH_PAPCHAP ) {
600 if(ID_Edit->text().isEmpty()) { 589 if(ID_Edit->text().isEmpty()) {
601 QMessageBox::warning(this,"error", 590 QMessageBox::warning(this,"error",
602 i18n("You have selected the authentication method PAP or CHAP. This requires that you supply a username and a password!")); 591 QObject::tr("You have selected the authentication method PAP or CHAP. This requires that you supply a username and a password!"));
603 return; 592 return;
604 } else { 593 } else {
605 if(!Modem::modem->setSecret(_pppdata->authMethod(), 594 if(!Modem::modem->setSecret(_pppdata->authMethod(),
606 encodeWord(_pppdata->storedUsername()), 595 encodeWord(_pppdata->storedUsername()),
607 encodeWord(_pppdata->password()))) { 596 encodeWord(_pppdata->password()))) {
608 QString s; 597 QString s;
609 s = i18n("Cannot create PAP/CHAP authentication\n" 598 s = QObject::tr("Cannot create PAP/CHAP authentication\n"
610 "file \"%1\"").arg(PAP_AUTH_FILE); 599 "file \"%1\"").arg(PAP_AUTH_FILE);
611 QMessageBox::warning(this, "error", s); 600 QMessageBox::warning(this, "error", s);
612 return; 601 return;
613 } 602 }
614 } 603 }
615 } 604 }
616 605
617 if (_pppdata->phonenumber().isEmpty()) { 606 if (_pppdata->phonenumber().isEmpty()) {
618 QString s = i18n("You must specify a telephone number!"); 607 QString s = QObject::tr("You must specify a telephone number!");
619 QMessageBox::warning(this, "error", s); 608 QMessageBox::warning(this, "error", s);
620 return; 609 return;
621 } 610 }
622 611
623 this->hide(); 612 this->hide();
624 613
625 QString tit = i18n("Connecting to: %1").arg(_pppdata->accname()); 614 QString tit = QObject::tr("Connecting to: %1").arg(_pppdata->accname());
626// con->setCaption(tit); 615// con->setCaption(tit);
627 616
628// con->show(); 617// con->show();
629 618
630 619
631 emit begin_connect(); 620 emit begin_connect();
632} 621}
633 622
634 623
635void KPPPWidget::disconnect() { 624void KPPPWidget::disconnect() {
636 if (!_pppdata->command_before_disconnect().isEmpty()) { 625 if (!_pppdata->command_before_disconnect().isEmpty()) {
637 con_win->hide(); 626 con_win->hide();
638 con->show(); 627 con->show();
639 con->setCaption(i18n("Disconnecting...")); 628 con->setCaption(QObject::tr("Disconnecting..."));
640 con->setMsg(i18n("Executing command before disconnection.")); 629 con->setMsg(QObject::tr("Executing command before disconnection."));
641 630
642 qApp->processEvents(); 631 qApp->processEvents();
643 QApplication::flushX(); 632 QApplication::flushX();
644// pid_t id = 633// pid_t id =
645 execute_command(_pppdata->command_before_disconnect()); 634 execute_command(_pppdata->command_before_disconnect());
646// int i, status; 635// int i, status;
647 636
648// do { 637// do {
649// kapp->processEvents(); 638// kapp->processEvents();
650// i = waitpid(id, &status, WNOHANG); 639// i = waitpid(id, &status, WNOHANG);
651// usleep(500000); 640// usleep(500000);
652// } while (i == 0 && errno == 0); 641// } while (i == 0 && errno == 0);
653 642
654 con->hide(); 643 con->hide();
655 } 644 }
656 645
657 qApp->processEvents(); 646 qApp->processEvents();
658 647
659// statdlg->stop_stats(); 648// statdlg->stop_stats();
660 Modem::modem->killPPPDaemon(); 649 Modem::modem->killPPPDaemon();
661 650
662 QApplication::flushX(); 651 QApplication::flushX();
663 execute_command(_pppdata->command_on_disconnect()); 652 execute_command(_pppdata->command_on_disconnect());
664 653
665 Modem::modem->removeSecret(AUTH_PAP); 654 Modem::modem->removeSecret(AUTH_PAP);
666 Modem::modem->removeSecret(AUTH_CHAP); 655 Modem::modem->removeSecret(AUTH_CHAP);
667 656
668 removedns(); 657 removedns();
669 Modem::modem->unlockdevice(); 658 Modem::modem->unlockdevice();
670 659
671 con_win->stopClock(); 660 con_win->stopClock();
672// p_kppp->stopAccounting(); 661// p_kppp->stopAccounting();
673 con_win->hide(); 662 con_win->hide();
674 663
675// DockWidget::dock_widget->stop_stats(); 664// DockWidget::dock_widget->stop_stats();
676// DockWidget::dock_widget->hide(); 665// DockWidget::dock_widget->hide();
677 666
678// if(m_bQuitOnDisconnect) 667// if(m_bQuitOnDisconnect)
679// kapp->exit(0); 668// kapp->exit(0);
680// else { 669// else {
681 this->quit_b->setFocus(); 670 this->quit_b->setFocus();
682 this->show(); 671 this->show();
683// } 672// }
684} 673}
685 674
686 675
687// void KPPPWidget::helpbutton() { 676// void KPPPWidget::helpbutton() {
688// kapp->invokeHelp(); 677// kapp->invokeHelp();
689// } 678// }
690 679
691 680
692void KPPPWidget::quitbutton() { 681void KPPPWidget::quitbutton() {
693 if(_pppdata->pppdRunning()) { 682 if(_pppdata->pppdRunning()) {
694 int ok = QMessageBox::warning(this, 683 int ok = QMessageBox::warning(this,
695 i18n("Exiting kPPP will close your PPP Session."), 684 QObject::tr("Exiting kPPP will close your PPP Session."),
696 i18n("Quit kPPP?")); 685 QObject::tr("Quit kPPP?"));
697 if(ok == QMessageBox::Yes) { 686 if(ok == QMessageBox::Yes) {
698 Modem::modem->killPPPDaemon(); 687 Modem::modem->killPPPDaemon();
699 QApplication::flushX(); 688 QApplication::flushX();
700 execute_command(_pppdata->command_on_disconnect()); 689 execute_command(_pppdata->command_on_disconnect());
701 removedns(); 690 removedns();
702 Modem::modem->unlockdevice(); 691 Modem::modem->unlockdevice();
703 } 692 }
704 } else { 693 } else {
705 if (!_pppdata->accname().isEmpty() && !_pppdata->storePassword()) 694 if (!_pppdata->accname().isEmpty() && !_pppdata->storePassword())
706 _pppdata->setStoredPassword(""); 695 _pppdata->setStoredPassword("");
707 } 696 }
708 _pppdata->save(); 697 _pppdata->save();
709 qApp->quit(); 698 qApp->quit();
710} 699}
711 700
712 701
713// void KPPPWidget::rulesetLoadError() { 702// void KPPPWidget::rulesetLoadError() {
714// QMessageBox::warning(this,"error", ruleset_load_errmsg); 703// QMessageBox::warning(this,"error", ruleset_load_errmsg);
715// } 704// }
716 705
717 706
718// void KPPPWidget::startAccounting() { 707// void KPPPWidget::startAccounting() {
719// // volume accounting 708// // volume accounting
720// stats->totalbytes = 0; 709// stats->totalbytes = 0;
721 710
722// kdDebug() << "AcctEnabled: " << _pppdata->AcctEnabled() << endl; 711// kdDebug() << "AcctEnabled: " << _pppdata->AcctEnabled() << endl;
723 712
724// // load the ruleset 713// // load the ruleset
725// if(!_pppdata->AcctEnabled()) 714// if(!_pppdata->AcctEnabled())
726// return; 715// return;
727 716
728// QString d = AccountingBase::getAccountingFile(_pppdata->accountingFile()); 717// QString d = AccountingBase::getAccountingFile(_pppdata->accountingFile());
729// // if(::access(d.data(), X_OK) != 0) 718// // if(::access(d.data(), X_OK) != 0)
730// acct = new Accounting(this, stats); 719// acct = new Accounting(this, stats);
731// // else 720// // else
732// // acct = new ExecutableAccounting(this); 721// // acct = new ExecutableAccounting(this);
733 722
734// // connect to the accounting object 723// // connect to the accounting object
735// connect(acct, SIGNAL(changed(QString, QString)), 724// connect(acct, SIGNAL(changed(QString, QString)),
736 // con_win, SLOT(slotAccounting(QString, QString))); 725 // con_win, SLOT(slotAccounting(QString, QString)));
737 726
738// // if(!acct->loadRuleSet(_pppdata->accountingFile())) { 727// // if(!acct->loadRuleSet(_pppdata->accountingFile())) {
739// // QString s= i18n("Can not load the accounting " 728// // QString s= QObject::tr("Can not load the accounting "
740 // // "ruleset \"%1\"!").arg(_pppdata->accountingFile()); 729 // // "ruleset \"%1\"!").arg(_pppdata->accountingFile());
741 730
742// // starting the messagebox with a timer will prevent us 731// // starting the messagebox with a timer will prevent us
743// // from blocking the calling function ConnectWidget::timerEvent 732// // from blocking the calling function ConnectWidget::timerEvent
744// ruleset_load_errmsg = s; 733// ruleset_load_errmsg = s;
745// QTimer::singleShot(0, this, SLOT(rulesetLoadError())); 734// QTimer::singleShot(0, this, SLOT(rulesetLoadError()));
746// return; 735// return;
747// } 736// }
748// //else 737// //else
749// // acct->slotStart(); 738// // acct->slotStart();
750// } 739// }
751 740
752// void KPPPWidget::stopAccounting() { 741// void KPPPWidget::stopAccounting() {
753// // store volume accounting 742// // store volume accounting
754// // if(stats->totalbytes != 0) 743// // if(stats->totalbytes != 0)
755// // _pppdata->setTotalBytes(stats->totalbytes); 744// // _pppdata->setTotalBytes(stats->totalbytes);
756 745
757// if(!_pppdata->AcctEnabled()) 746// if(!_pppdata->AcctEnabled())
758// return; 747// return;
759 748
760// // if(acct != 0) { 749// // if(acct != 0) {
761// // acct->slotStop(); 750// // acct->slotStop();
762// // delete acct; 751// // delete acct;
763// // acct = 0; 752// // acct = 0;
764// // } 753// // }
765// } 754// }
766 755
767 756
768// void KPPPWidget::showStats() { 757// void KPPPWidget::showStats() {
769// if(statdlg) { 758// if(statdlg) {
770// statdlg->show(); 759// statdlg->show();
771// statdlg->raise(); 760// statdlg->raise();
772// } 761// }
773// } 762// }
774 763
775 764
776void KPPPWidget::usernameChanged(const QString &) { 765void KPPPWidget::usernameChanged(const QString &) {
777 // store username for later use 766 // store username for later use
778 _pppdata->setStoredUsername(ID_Edit->text()); 767 _pppdata->setStoredUsername(ID_Edit->text());
779} 768}
780 769
781 770
782void KPPPWidget::passwordChanged(const QString &) { 771void KPPPWidget::passwordChanged(const QString &) {
783 // store the password if so requested 772 // store the password if so requested
784 if(_pppdata->storePassword()) 773 if(_pppdata->storePassword())
785 _pppdata->setStoredPassword(PW_Edit->text()); 774 _pppdata->setStoredPassword(PW_Edit->text());
786 else 775 else
787 _pppdata->setStoredPassword(""); 776 _pppdata->setStoredPassword("");
788} 777}
789 778
790 779
791void KPPPWidget::setPW_Edit(const QString &pw) { 780void KPPPWidget::setPW_Edit(const QString &pw) {
792 PW_Edit->setText(pw); 781 PW_Edit->setText(pw);
793} 782}
794 783
795 784
796// void KPPPWidget::resetCosts(const QString &s) { 785// void KPPPWidget::resetCosts(const QString &s) {
797// AccountingBase::resetCosts(s); 786// AccountingBase::resetCosts(s);
798// } 787// }
799 788
800 789
801// void KPPPWidget::resetVolume(const QString &s) { 790// void KPPPWidget::resetVolume(const QString &s) {
802// AccountingBase::resetVolume(s); 791// AccountingBase::resetVolume(s);
803// } 792// }
804 793
805/** 794/**
806 * pppd's getword() function knows about escape characters. 795 * pppd's getword() function knows about escape characters.
807 * If we write the username and password to the secrets file 796 * If we write the username and password to the secrets file
808 * we'll therefore have to escape back slashes. 797 * we'll therefore have to escape back slashes.
809 */ 798 */
810QString KPPPWidget::encodeWord(const QString &s) { 799QString KPPPWidget::encodeWord(const QString &s) {
811 QString r = s; 800 QString r = s;
812 r.replace(QRegExp("\\"), "\\\\"); 801 r.replace(QRegExp("\\"), "\\\\");
813 return r; 802 return r;
814} 803}
815 804
816// void KPPPWidget::setQuitOnDisconnect (bool b) 805// void KPPPWidget::setQuitOnDisconnect (bool b)
817// { 806// {
818// m_bQuitOnDisconnect = b; 807// m_bQuitOnDisconnect = b;
819// } 808// }
820 809
821void KPPPWidget::showNews() { 810void KPPPWidget::showNews() {
822#ifdef KPPP_SHOW_NEWS 811#ifdef KPPP_SHOW_NEWS
823 /* 812 /*
824 * Introduce the QuickHelp feature to new users of this version 813 * Introduce the QuickHelp feature to new users of this version
825 */ 814 */
826 #define QUICKHELP_HINT "Hint_QuickHelp" 815 #define QUICKHELP_HINT "Hint_QuickHelp"
827 if(_pppdata->readNumConfig(GENERAL_GRP, QUICKHELP_HINT, 0) == 0) { 816 if(_pppdata->readNumConfig(GENERAL_GRP, QUICKHELP_HINT, 0) == 0) {
828 QDialog dlg(0, 0, true); 817 QDialog dlg(0, 0, true);
829 dlg.setCaption(i18n("Recent Changes in KPPP")); 818 dlg.setCaption(QObject::tr("Recent Changes in KPPP"));
830 819
831 QVBoxLayout *tl = new QVBoxLayout(&dlg, 10, 10); 820 QVBoxLayout *tl = new QVBoxLayout(&dlg, 10, 10);
832 QHBoxLayout *l1 = new QHBoxLayout(10); 821 QHBoxLayout *l1 = new QHBoxLayout(10);
833 QVBoxLayout *l2 = new QVBoxLayout(10); 822 QVBoxLayout *l2 = new QVBoxLayout(10);
834 tl->addLayout(l1); 823 tl->addLayout(l1);
835 824
836 QLabel *icon = new QLabel(&dlg); 825 QLabel *icon = new QLabel(&dlg);
837 icon->setPixmap(BarIcon("exclamation")); 826 icon->setPixmap(BarIcon("exclamation"));
838 icon->setFixedSize(icon->sizeHint()); 827 icon->setFixedSize(icon->sizeHint());
839 l1->addWidget(icon); 828 l1->addWidget(icon);
840 l1->addLayout(l2); 829 l1->addLayout(l2);
841 830
842 QLabel *l = new QLabel(i18n("From version 1.4.8 on, kppp has a new feature\n" 831 QLabel *l = new QLabel(QObject::tr("From version 1.4.8 on, kppp has a new feature\n"
843 "called \"Quickhelp\". It's similar to a tooltip,\n" 832 "called \"Quickhelp\". It's similar to a tooltip,\n"
844 "but you can activate it whenever you want.\n" 833 "but you can activate it whenever you want.\n"
845 "\n" 834 "\n"
846 "To activate it, simply click on a control like\n" 835 "To activate it, simply click on a control like\n"
847 "a button or a label with the right mouse button.\n" 836 "a button or a label with the right mouse button.\n"
848 "If the item supports Quickhelp, a popup menu\n" 837 "If the item supports Quickhelp, a popup menu\n"
849 "will appear leading to Quickhelp.\n" 838 "will appear leading to Quickhelp.\n"
850 "\n" 839 "\n"
851 "To test it, right-click somewhere in this text."), 840 "To test it, right-click somewhere in this text."),
852 &dlg); 841 &dlg);
853 842
854 QCheckBox *cb = new QCheckBox(i18n("Don't show this hint again"), &dlg); 843 QCheckBox *cb = new QCheckBox(QObject::tr("Don't show this hint again"), &dlg);
855 cb->setFixedSize(cb->sizeHint()); 844 cb->setFixedSize(cb->sizeHint());
856 845
857 KButtonBox *bbox = new KButtonBox(&dlg); 846 KButtonBox *bbox = new KButtonBox(&dlg);
858 bbox->addStretch(1); 847 bbox->addStretch(1);
859 QPushButton *ok = bbox->addButton(i18n("OK")); 848 QPushButton *ok = bbox->addButton(QObject::tr("OK"));
860 ok->setDefault(true); 849 ok->setDefault(true);
861 dlg.connect(ok, SIGNAL(clicked()), 850 dlg.connect(ok, SIGNAL(clicked()),
862 &dlg, SLOT(accept())); 851 &dlg, SLOT(accept()));
863 bbox->addStretch(1); 852 bbox->addStretch(1);
864 bbox->layout(); 853 bbox->layout();
865 854
866 l2->addWidget(l); 855 l2->addWidget(l);
867 l2->addWidget(cb); 856 l2->addWidget(cb);
868 tl->addWidget(bbox); 857 tl->addWidget(bbox);
869 858
870 QString tmp = i18n("This is an example of <b>QuickHelp</b>.\n" 859 QString tmp = QObject::tr("This is an example of <b>QuickHelp</b>.\n"
871 "This window will stay open until you\n" 860 "This window will stay open until you\n"
872 "click a mouse button or a press a key.\n"); 861 "click a mouse button or a press a key.\n");
873 862
874 QWhatsThis::add(cb,tmp); 863 QWhatsThis::add(cb,tmp);
875 QWhatsThis::add(l, tmp); 864 QWhatsThis::add(l, tmp);
876 865
877 dlg.exec(); 866 dlg.exec();
878 if(cb->isChecked()) { 867 if(cb->isChecked()) {
879 _pppdata->writeConfig(GENERAL_GRP, QUICKHELP_HINT, 1); 868 _pppdata->writeConfig(GENERAL_GRP, QUICKHELP_HINT, 1);
880 _pppdata->save(); 869 _pppdata->save();
881 } 870 }
882 } 871 }
883#endif 872#endif
884} 873}
885 874
886 875
887//#include "kpppwidget.moc" 876//#include "kpppwidget.moc"
888 877
diff --git a/noncore/settings/networksettings/ppp/modem.cpp b/noncore/settings/networksettings/ppp/modem.cpp
index d23fee4..3dbc8c3 100644
--- a/noncore/settings/networksettings/ppp/modem.cpp
+++ b/noncore/settings/networksettings/ppp/modem.cpp
@@ -1,1023 +1,1080 @@
1/* 1/*
2 * kPPP: A pppd Front End for the KDE project 2 * kPPP: A pppd Front End for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * This file was added by Harri Porten <porten@tu-harburg.de> 9 * This file was added by Harri Porten <porten@tu-harburg.de>
10 * 10 *
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#include <errno.h> 27#include <errno.h>
28#include <stdlib.h> 28#include <stdlib.h>
29#include <unistd.h> 29#include <unistd.h>
30#include <fcntl.h> 30#include <fcntl.h>
31#include <signal.h> 31#include <signal.h>
32#include <sys/ioctl.h> 32#include <sys/ioctl.h>
33#include <sys/types.h> 33#include <sys/types.h>
34#include <sys/stat.h> 34#include <sys/stat.h>
35#include <setjmp.h> 35#include <setjmp.h>
36#include <regex.h> 36#include <regex.h>
37#include <qregexp.h> 37#include <qregexp.h>
38#include <assert.h> 38#include <assert.h>
39#include <string.h> 39#include <string.h>
40 40
41#ifdef HAVE_RESOLV_H 41#ifdef HAVE_RESOLV_H
42# include <arpa/nameser.h> 42# include <arpa/nameser.h>
43# include <resolv.h> 43# include <resolv.h>
44#endif 44#endif
45 45
46#ifndef _PATH_RESCONF 46#ifndef _PATH_RESCONF
47#define _PATH_RESCONF "/etc/resolv.conf" 47#define _PATH_RESCONF "/etc/resolv.conf"
48#endif 48#endif
49 49
50#define strlcpy strcpy 50#define strlcpy strcpy
51#include "auth.h" 51#include "auth.h"
52#include "modem.h" 52#include "modem.h"
53#include "pppdata.h" 53#include "pppdata.h"
54//#include <klocale.h>
55#define i18n QObject::tr
56#define qError qDebug 54#define qError qDebug
57//#include <kdebug.h> 55
58//#include <config.h>
59 56
60#define MY_ASSERT(x) if (!(x)) { \ 57#define MY_ASSERT(x) if (!(x)) { \
61 qFatal( "ASSERT: \"%s\" in %s (%d)\n",#x,__FILE__,__LINE__); \ 58 qFatal( "ASSERT: \"%s\" in %s (%d)\n",#x,__FILE__,__LINE__); \
62 exit(1); } 59 exit(1); }
63 60
64 61
65static sigjmp_buf jmp_buffer; 62static sigjmp_buf jmp_buffer;
66 63
67//Modem *Modem::modem = 0; 64//Modem *Modem::modem = 0;
68 65
69 66
70const char* pppdPath() { 67const char* pppdPath() {
71 // wasting a few bytes 68 // wasting a few bytes
72 static char buffer[sizeof(PPPDSEARCHPATH)+sizeof(PPPDNAME)]; 69 static char buffer[sizeof(PPPDSEARCHPATH)+sizeof(PPPDNAME)];
73 static char *pppdPath = 0L; 70 static char *pppdPath = 0L;
74 char *p; 71 char *p;
75 72
76 if(pppdPath == 0L) { 73 if(pppdPath == 0L) {
77 const char *c = PPPDSEARCHPATH; 74 const char *c = PPPDSEARCHPATH;
78 while(*c != '\0') { 75 while(*c != '\0') {
79 while(*c == ':') 76 while(*c == ':')
80 c++; 77 c++;
81 p = buffer; 78 p = buffer;
82 while(*c != '\0' && *c != ':') 79 while(*c != '\0' && *c != ':')
83 *p++ = *c++; 80 *p++ = *c++;
84 *p = '\0'; 81 *p = '\0';
85 strcat(p, "/"); 82 strcat(p, "/");
86 strcat(p, PPPDNAME); 83 strcat(p, PPPDNAME);
87 if(access(buffer, F_OK) == 0) 84 if(access(buffer, F_OK) == 0)
88 return (pppdPath = buffer); 85 return (pppdPath = buffer);
89 } 86 }
90 } 87 }
91 88
92 return pppdPath; 89 return pppdPath;
93} 90}
94 91
95 92
96Modem::Modem( PPPData* pd ) 93Modem::Modem( PPPData* pd )
97{ 94{
98 _pppdata = pd; 95 _pppdata = pd;
99 modemfd = -1; 96 modemfd = -1;
100 _pppdExitStatus = -1; 97 _pppdExitStatus = -1;
101 pppdPid = -1; 98 pppdPid = -1;
102 sn = 0L; 99 sn = m_modemDebug = 0L;
103 data_mode = false; 100 data_mode = false;
104 modem_is_locked = false; 101 modem_is_locked = false;
105 lockfile[0] = '\0'; 102 lockfile[0] = '\0';
106 device = "/dev/modem"; 103 device = "/dev/modem";
107} 104}
108 105
109 106
110Modem::~Modem() 107Modem::~Modem()
111{ 108{
112} 109}
113 110
114 111
115speed_t Modem::modemspeed() { 112speed_t Modem::modemspeed() {
116 // convert the string modem speed int the gpppdata object to a t_speed type 113 // convert the string modem speed int the gpppdata object to a t_speed type
117 // to set the modem. The constants here should all be ifdef'd because 114 // to set the modem. The constants here should all be ifdef'd because
118 // other systems may not have them 115 // other systems may not have them
119 int i = _pppdata->speed().toInt()/100; 116 int i = _pppdata->speed().toInt()/100;
120 117
121 switch(i) { 118 switch(i) {
122 case 24: 119 case 24:
123 return B2400; 120 return B2400;
124 break; 121 break;
125 case 96: 122 case 96:
126 return B9600; 123 return B9600;
127 break; 124 break;
128 case 192: 125 case 192:
129 return B19200; 126 return B19200;
130 break; 127 break;
131 case 384: 128 case 384:
132 return B38400; 129 return B38400;
133 break; 130 break;
134#ifdef B57600 131#ifdef B57600
135 case 576: 132 case 576:
136 return B57600; 133 return B57600;
137 break; 134 break;
138#endif 135#endif
139 136
140#ifdef B115200 137#ifdef B115200
141 case 1152: 138 case 1152:
142 return B115200; 139 return B115200;
143 break; 140 break;
144#endif 141#endif
145 142
146#ifdef B230400 143#ifdef B230400
147 case 2304: 144 case 2304:
148 return B230400; 145 return B230400;
149 break; 146 break;
150#endif 147#endif
151 148
152#ifdef B460800 149#ifdef B460800
153 case 4608: 150 case 4608:
154 return B460800; 151 return B460800;
155 break; 152 break;
156#endif 153#endif
157 154
158 default: 155 default:
159 return B38400; 156 return B38400;
160 break; 157 break;
161 } 158 }
162} 159}
163 160
164bool Modem::opentty() { 161bool Modem::opentty() {
165 // int flags; 162 // int flags;
166 163
167//begin if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) { 164//begin if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) {
168 close(modemfd); 165 close(modemfd);
169 device = _pppdata->modemDevice(); 166 device = _pppdata->modemDevice();
170 if ((modemfd = open(device, O_RDWR|O_NDELAY|O_NOCTTY)) == -1) { 167 if ((modemfd = open(device, O_RDWR|O_NDELAY|O_NOCTTY)) == -1) {
171 qDebug("error opening modem device !"); 168 qDebug("error opening modem device !");
172 errmsg = i18n("Unable to open modem."); 169 errmsg = QObject::tr("Unable to open modem.");
173 return false; 170 return false;
174 } 171 }
175//bend if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) { 172//bend if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) {
176//} 173//}
177 174
178#if 0 175#if 0
179 if(_pppdata->UseCDLine()) { 176 if(_pppdata->UseCDLine()) {
180 if(ioctl(modemfd, TIOCMGET, &flags) == -1) { 177 if(ioctl(modemfd, TIOCMGET, &flags) == -1) {
181 errmsg = i18n("Unable to detect state of CD line."); 178 errmsg = QObject::tr("Unable to detect state of CD line.");
182 ::close(modemfd); 179 ::close(modemfd);
183 modemfd = -1; 180 modemfd = -1;
184 return false; 181 return false;
185 } 182 }
186 if ((flags&TIOCM_CD) == 0) { 183 if ((flags&TIOCM_CD) == 0) {
187 errmsg = i18n("The modem is not ready."); 184 errmsg = QObject::tr("The modem is not ready.");
188 ::close(modemfd); 185 ::close(modemfd);
189 modemfd = -1; 186 modemfd = -1;
190 return false; 187 return false;
191 } 188 }
192 } 189 }
193#endif 190#endif
194 191
195 tcdrain (modemfd); 192 tcdrain (modemfd);
196 tcflush (modemfd, TCIOFLUSH); 193 tcflush (modemfd, TCIOFLUSH);
197 194
198 if(tcgetattr(modemfd, &tty) < 0){ 195 if(tcgetattr(modemfd, &tty) < 0){
199 // this helps in some cases 196 // this helps in some cases
200 tcsendbreak(modemfd, 0); 197 tcsendbreak(modemfd, 0);
201 sleep(1); 198 sleep(1);
202 if(tcgetattr(modemfd, &tty) < 0){ 199 if(tcgetattr(modemfd, &tty) < 0){
203 errmsg = i18n("The modem is busy."); 200 errmsg = QObject::tr("The modem is busy.");
204 ::close(modemfd); 201 ::close(modemfd);
205 modemfd = -1; 202 modemfd = -1;
206 return false; 203 return false;
207 } 204 }
208 } 205 }
209 206
210 memset(&initial_tty,'\0',sizeof(initial_tty)); 207 memset(&initial_tty,'\0',sizeof(initial_tty));
211 208
212 initial_tty = tty; 209 initial_tty = tty;
213 210
214 tty.c_cc[VMIN] = 0; // nonblocking 211 tty.c_cc[VMIN] = 0; // nonblocking
215 tty.c_cc[VTIME] = 0; 212 tty.c_cc[VTIME] = 0;
216 tty.c_oflag = 0; 213 tty.c_oflag = 0;
217 tty.c_lflag = 0; 214 tty.c_lflag = 0;
218 215
219 tty.c_cflag &= ~(CSIZE | CSTOPB | PARENB); 216 tty.c_cflag &= ~(CSIZE | CSTOPB | PARENB);
220 tty.c_cflag |= CS8 | CREAD; 217 tty.c_cflag |= CS8 | CREAD;
221 tty.c_cflag |= CLOCAL; // ignore modem status lines 218 tty.c_cflag |= CLOCAL; // ignore modem status lines
222 tty.c_iflag = IGNBRK | IGNPAR /* | ISTRIP */ ; 219 tty.c_iflag = IGNBRK | IGNPAR /* | ISTRIP */ ;
223 tty.c_lflag &= ~ICANON; // non-canonical mode 220 tty.c_lflag &= ~ICANON; // non-canonical mode
224 tty.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHOKE); 221 tty.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHOKE);
225 222
226 223
227 if(_pppdata->flowcontrol() != "None") { 224 if(_pppdata->flowcontrol() != "None") {
228 if(_pppdata->flowcontrol() == "CRTSCTS") { 225 if(_pppdata->flowcontrol() == "CRTSCTS") {
229 tty.c_cflag |= CRTSCTS; 226 tty.c_cflag |= CRTSCTS;
230 } 227 }
231 else { 228 else {
232 tty.c_iflag |= IXON | IXOFF; 229 tty.c_iflag |= IXON | IXOFF;
233 tty.c_cc[VSTOP] = 0x13; /* DC3 = XOFF = ^S */ 230 tty.c_cc[VSTOP] = 0x13; /* DC3 = XOFF = ^S */
234 tty.c_cc[VSTART] = 0x11; /* DC1 = XON = ^Q */ 231 tty.c_cc[VSTART] = 0x11; /* DC1 = XON = ^Q */
235 } 232 }
236 } 233 }
237 else { 234 else {
238 tty.c_cflag &= ~CRTSCTS; 235 tty.c_cflag &= ~CRTSCTS;
239 tty.c_iflag &= ~(IXON | IXOFF); 236 tty.c_iflag &= ~(IXON | IXOFF);
240 } 237 }
241 238
242 cfsetospeed(&tty, modemspeed()); 239 cfsetospeed(&tty, modemspeed());
243 cfsetispeed(&tty, modemspeed()); 240 cfsetispeed(&tty, modemspeed());
244 241
245 tcdrain(modemfd); 242 tcdrain(modemfd);
246 243
247 if(tcsetattr(modemfd, TCSANOW, &tty) < 0){ 244 if(tcsetattr(modemfd, TCSANOW, &tty) < 0){
248 errmsg = i18n("The modem is busy."); 245 errmsg = QObject::tr("The modem is busy.");
249 ::close(modemfd); 246 ::close(modemfd);
250 modemfd=-1; 247 modemfd=-1;
251 return false; 248 return false;
252 } 249 }
253 250
254 errmsg = i18n("Modem Ready."); 251 errmsg = QObject::tr("Modem Ready.");
255 return true; 252 return true;
256} 253}
257 254
258 255
259bool Modem::closetty() { 256bool Modem::closetty() {
260 if(modemfd >=0 ) { 257 if(modemfd >=0 ) {
261 stop(); 258 stop();
262 /* discard data not read or transmitted */ 259 /* discard data not read or transmitted */
263 tcflush(modemfd, TCIOFLUSH); 260 tcflush(modemfd, TCIOFLUSH);
264 261
265 if(tcsetattr(modemfd, TCSANOW, &initial_tty) < 0){ 262 if(tcsetattr(modemfd, TCSANOW, &initial_tty) < 0){
266 errmsg = i18n("Can't restore tty settings: tcsetattr()\n"); 263 errmsg = QObject::tr("Can't restore tty settings: tcsetattr()\n");
267 ::close(modemfd); 264 ::close(modemfd);
268 modemfd = -1; 265 modemfd = -1;
269 return false; 266 return false;
270 } 267 }
271 ::close(modemfd); 268 ::close(modemfd);
272 modemfd = -1; 269 modemfd = -1;
273 } 270 }
274 271
275 return true; 272 return true;
276} 273}
277 274
278 275
279void Modem::readtty(int) { 276void Modem::readtty(int) {
280 char buffer[200]; 277 char buffer[200];
281 unsigned char c; 278 unsigned char c;
282 int len; 279 int len;
283 280
284 // read data in chunks of up to 200 bytes 281 // read data in chunks of up to 200 bytes
285 if((len = ::read(modemfd, buffer, 200)) > 0) { 282 if((len = ::read(modemfd, buffer, 200)) > 0) {
286 // split buffer into single characters for further processing 283 // split buffer into single characters for further processing
287 for(int i = 0; i < len; i++) { 284 for(int i = 0; i < len; i++) {
288 c = buffer[i] & 0x7F; 285 c = buffer[i] & 0x7F;
289 emit charWaiting(c); 286 emit charWaiting(c);
290 } 287 }
291 } 288 }
292} 289}
293 290
294 291
295void Modem::notify(const QObject *receiver, const char *member) { 292void Modem::notify(const QObject *receiver, const char *member) {
296 connect(this, SIGNAL(charWaiting(unsigned char)), receiver, member); 293 connect(this, SIGNAL(charWaiting(unsigned char)), receiver, member);
297 startNotifier(); 294 startNotifier();
298} 295}
299 296
300 297
301void Modem::stop() { 298void Modem::stop() {
302 disconnect(SIGNAL(charWaiting(unsigned char))); 299 disconnect(SIGNAL(charWaiting(unsigned char)));
303 stopNotifier(); 300 stopNotifier();
304} 301}
305 302
306 303
307void Modem::startNotifier() { 304void Modem::startNotifier() {
308 if(modemfd >= 0) { 305 if(modemfd >= 0) {
309 if(sn == 0) { 306 if(sn == 0) {
310 sn = new QSocketNotifier(modemfd, QSocketNotifier::Read, this); 307 sn = new QSocketNotifier(modemfd, QSocketNotifier::Read, this);
311 connect(sn, SIGNAL(activated(int)), SLOT(readtty(int))); 308 connect(sn, SIGNAL(activated(int)), SLOT(readtty(int)));
312 qDebug("QSocketNotifier started!"); 309 qDebug("QSocketNotifier started!");
313 } else { 310 } else {
314 qDebug("QSocketNotifier re-enabled!"); 311 qDebug("QSocketNotifier re-enabled!");
315 sn->setEnabled(true); 312 sn->setEnabled(true);
316 } 313 }
317 } 314 }
318} 315}
319 316
320 317
321void Modem::stopNotifier() { 318void Modem::stopNotifier() {
322 if(sn != 0) { 319 if(sn != 0) {
323 sn->setEnabled(false); 320 sn->setEnabled(false);
324 disconnect(sn); 321 disconnect(sn);
325 delete sn; 322 delete sn;
326 sn = 0; 323 sn = 0;
327 qDebug( "QSocketNotifier stopped!" ); 324 qDebug( "QSocketNotifier stopped!" );
328 } 325 }
329} 326}
330 327
331 328
332void Modem::flush() { 329void Modem::flush() {
333 char c; 330 char c;
334 while(read(modemfd, &c, 1) == 1); 331 while(read(modemfd, &c, 1) == 1);
335} 332}
336 333
337 334
338bool Modem::writeChar(unsigned char c) { 335bool Modem::writeChar(unsigned char c) {
339 int s; 336 int s;
340 do { 337 do {
341 s = write(modemfd, &c, 1); 338 s = write(modemfd, &c, 1);
342 if (s < 0) { 339 if (s < 0) {
343 qError( "write() in Modem::writeChar failed" ); 340 qError( "write() in Modem::writeChar failed" );
344 return false; 341 return false;
345 } 342 }
346 } while(s == 0); 343 } while(s == 0);
347 344
348 return true; 345 return true;
349} 346}
350 347
351 348
352bool Modem::writeLine(const char *buf) { 349bool Modem::writeLine(const char *buf) {
353 int len = strlen(buf); 350 int len = strlen(buf);
354 char *b = new char[len+2]; 351 char *b = new char[len+2];
355 memcpy(b, buf, len); 352 memcpy(b, buf, len);
356 // different modems seem to need different line terminations 353 // different modems seem to need different line terminations
357 QString term = _pppdata->enter(); 354 QString term = _pppdata->enter();
358 if(term == "LF") 355 if(term == "LF")
359 b[len++]='\n'; 356 b[len++]='\n';
360 else if(term == "CR") 357 else if(term == "CR")
361 b[len++]='\r'; 358 b[len++]='\r';
362 else if(term == "CR/LF") { 359 else if(term == "CR/LF") {
363 b[len++]='\r'; 360 b[len++]='\r';
364 b[len++]='\n'; 361 b[len++]='\n';
365 } 362 }
366 int l = len; 363 int l = len;
367 while(l) { 364 while(l) {
368 int wr = write(modemfd, &b[len-l], l); 365 int wr = write(modemfd, &b[len-l], l);
369 if(wr < 0) { 366 if(wr < 0) {
370 // TODO do something meaningful with the error code (or ignore it 367 // TODO do something meaningful with the error code (or ignore it
371 qError( "write() in Modem::writeLine failed" ); 368 qError( "write() in Modem::writeLine failed" );
372 delete[] b; 369 delete[] b;
373 return false; 370 return false;
374 } 371 }
375 l -= wr; 372 l -= wr;
376 } 373 }
377 delete[] b; 374 delete[] b;
378 return true; 375 return true;
379} 376}
380 377
381 378
382bool Modem::hangup() { 379bool Modem::hangup() {
383 // this should really get the modem to hang up and go into command mode 380 // this should really get the modem to hang up and go into command mode
384 // If anyone sees a fault in the following please let me know, since 381 // If anyone sees a fault in the following please let me know, since
385 // this is probably the most imporant snippet of code in the whole of 382 // this is probably the most imporant snippet of code in the whole of
386 // kppp. If people complain about kppp being stuck, this piece of code 383 // kppp. If people complain about kppp being stuck, this piece of code
387 // is most likely the reason. 384 // is most likely the reason.
388 struct termios temptty; 385 struct termios temptty;
389 386
390 if(modemfd >= 0) { 387 if(modemfd >= 0) {
391 388
392 // is this Escape & HangupStr stuff really necessary ? (Harri) 389 // is this Escape & HangupStr stuff really necessary ? (Harri)
393 390
394 if (data_mode) escape_to_command_mode(); 391 if (data_mode) escape_to_command_mode();
395 392
396 // Then hangup command 393 // Then hangup command
397 writeLine(_pppdata->modemHangupStr().local8Bit()); 394 writeLine(_pppdata->modemHangupStr().local8Bit());
398 395
399 usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 sec 396 usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 sec
400 397
401#ifndef DEBUG_WO_DIALING 398#ifndef DEBUG_WO_DIALING
402 if (sigsetjmp(jmp_buffer, 1) == 0) { 399 if (sigsetjmp(jmp_buffer, 1) == 0) {
403 // set alarm in case tcsendbreak() hangs 400 // set alarm in case tcsendbreak() hangs
404 signal(SIGALRM, alarm_handler); 401 signal(SIGALRM, alarm_handler);
405 alarm(2); 402 alarm(2);
406 403
407 tcsendbreak(modemfd, 0); 404 tcsendbreak(modemfd, 0);
408 405
409 alarm(0); 406 alarm(0);
410 signal(SIGALRM, SIG_IGN); 407 signal(SIGALRM, SIG_IGN);
411 } else { 408 } else {
412 // we reach this point if the alarm handler got called 409 // we reach this point if the alarm handler got called
413 closetty(); 410 closetty();
414 close(modemfd); 411 close(modemfd);
415 modemfd = -1; 412 modemfd = -1;
416 errmsg = i18n("The modem does not respond."); 413 errmsg = QObject::tr("The modem does not respond.");
417 return false; 414 return false;
418 } 415 }
419 416
420#ifndef __svr4__ // drops DTR but doesn't set it afterwards again. not good for init. 417#ifndef __svr4__ // drops DTR but doesn't set it afterwards again. not good for init.
421 tcgetattr(modemfd, &temptty); 418 tcgetattr(modemfd, &temptty);
422 cfsetospeed(&temptty, B0); 419 cfsetospeed(&temptty, B0);
423 cfsetispeed(&temptty, B0); 420 cfsetispeed(&temptty, B0);
424 tcsetattr(modemfd, TCSAFLUSH, &temptty); 421 tcsetattr(modemfd, TCSAFLUSH, &temptty);
425#else 422#else
426 int modemstat; 423 int modemstat;
427 ioctl(modemfd, TIOCMGET, &modemstat); 424 ioctl(modemfd, TIOCMGET, &modemstat);
428 modemstat &= ~TIOCM_DTR; 425 modemstat &= ~TIOCM_DTR;
429 ioctl(modemfd, TIOCMSET, &modemstat); 426 ioctl(modemfd, TIOCMSET, &modemstat);
430 ioctl(modemfd, TIOCMGET, &modemstat); 427 ioctl(modemfd, TIOCMGET, &modemstat);
431 modemstat |= TIOCM_DTR; 428 modemstat |= TIOCM_DTR;
432 ioctl(modemfd, TIOCMSET, &modemstat); 429 ioctl(modemfd, TIOCMSET, &modemstat);
433#endif 430#endif
434 431
435 usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 secs 432 usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 secs
436 433
437 cfsetospeed(&temptty, modemspeed()); 434 cfsetospeed(&temptty, modemspeed());
438 cfsetispeed(&temptty, modemspeed()); 435 cfsetispeed(&temptty, modemspeed());
439 tcsetattr(modemfd, TCSAFLUSH, &temptty); 436 tcsetattr(modemfd, TCSAFLUSH, &temptty);
440#endif 437#endif
441 return true; 438 return true;
442 } else 439 } else
443 return false; 440 return false;
444} 441}
445 442
446 443
447void Modem::escape_to_command_mode() { 444void Modem::escape_to_command_mode() {
448 // Send Properly bracketed escape code to put the modem back into command state. 445 // Send Properly bracketed escape code to put the modem back into command state.
449 // A modem will accept AT commands only when it is in command state. 446 // A modem will accept AT commands only when it is in command state.
450 // When a modem sends the host the CONNECT string, that signals 447 // When a modem sends the host the CONNECT string, that signals
451 // that the modem is now in the connect state (no long accepts AT commands.) 448 // that the modem is now in the connect state (no long accepts AT commands.)
452 // Need to send properly timed escape sequence to put modem in command state. 449 // Need to send properly timed escape sequence to put modem in command state.
453 // Escape codes and guard times are controlled by S2 and S12 values. 450 // Escape codes and guard times are controlled by S2 and S12 values.
454 // 451 //
455 tcflush(modemfd, TCIOFLUSH); 452 tcflush(modemfd, TCIOFLUSH);
456 453
457 // +3 because quiet time must be greater than guard time. 454 // +3 because quiet time must be greater than guard time.
458 usleep((_pppdata->modemEscapeGuardTime()+3)*20000); 455 usleep((_pppdata->modemEscapeGuardTime()+3)*20000);
459 QCString tmp = _pppdata->modemEscapeStr().local8Bit(); 456 QCString tmp = _pppdata->modemEscapeStr().local8Bit();
460 write(modemfd, tmp.data(), tmp.length()); 457 write(modemfd, tmp.data(), tmp.length());
461 tcflush(modemfd, TCIOFLUSH); 458 tcflush(modemfd, TCIOFLUSH);
462 usleep((_pppdata->modemEscapeGuardTime()+3)*20000); 459 usleep((_pppdata->modemEscapeGuardTime()+3)*20000);
463 460
464 data_mode = false; 461 data_mode = false;
465} 462}
466 463
467 464
468const QString Modem::modemMessage() { 465const QString Modem::modemMessage() {
469 return errmsg; 466 return errmsg;
470} 467}
471 468
472 469
473QString Modem::parseModemSpeed(const QString &s) { 470QString Modem::parseModemSpeed(const QString &s) {
474 // this is a small (and bad) parser for modem speeds 471 // this is a small (and bad) parser for modem speeds
475 int rx = -1; 472 int rx = -1;
476 int tx = -1; 473 int tx = -1;
477 int i; 474 int i;
478 QString result; 475 QString result;
479 476
480 qDebug( "Modem reported result string: %s", s.latin1()); 477 qDebug( "Modem reported result string: %s", s.latin1());
481 478
482 const int RXMAX = 7; 479 const int RXMAX = 7;
483 const int TXMAX = 2; 480 const int TXMAX = 2;
484 QRegExp rrx[RXMAX] = { 481 QRegExp rrx[RXMAX] = {
485 QRegExp("[0-9]+[:/ ]RX", false), 482 QRegExp("[0-9]+[:/ ]RX", false),
486 QRegExp("[0-9]+RX", false), 483 QRegExp("[0-9]+RX", false),
487 QRegExp("[/: -][0-9]+[/: ]", false), 484 QRegExp("[/: -][0-9]+[/: ]", false),
488 QRegExp("[/: -][0-9]+$", false), 485 QRegExp("[/: -][0-9]+$", false),
489 QRegExp("CARRIER [^0-9]*[0-9]+", false), 486 QRegExp("CARRIER [^0-9]*[0-9]+", false),
490 QRegExp("CONNECT [^0-9]*[0-9]+", false), 487 QRegExp("CONNECT [^0-9]*[0-9]+", false),
491 QRegExp("[0-9]+") // panic mode 488 QRegExp("[0-9]+") // panic mode
492 }; 489 };
493 490
494 QRegExp trx[TXMAX] = { 491 QRegExp trx[TXMAX] = {
495 QRegExp("[0-9]+[:/ ]TX", false), 492 QRegExp("[0-9]+[:/ ]TX", false),
496 QRegExp("[0-9]+TX", false) 493 QRegExp("[0-9]+TX", false)
497 }; 494 };
498 495
499 for(i = 0; i < RXMAX; i++) { 496 for(i = 0; i < RXMAX; i++) {
500 int len, idx, result; 497 int len, idx, result;
501 if((idx = rrx[i].match(s,0,&len)) > -1) { 498 if((idx = rrx[i].match(s,0,&len)) > -1) {
502// if((idx = rrx[i].search(s)) > -1) { 499// if((idx = rrx[i].search(s)) > -1) {
503 // len = rrx[i].matchedLength(); 500 // len = rrx[i].matchedLength();
504 501
505 // 502 //
506 // rrx[i] has been matched, idx contains the start of the match 503 // rrx[i] has been matched, idx contains the start of the match
507 // and len contains how long the match is. Extract the match. 504 // and len contains how long the match is. Extract the match.
508 // 505 //
509 QString sub = s.mid(idx, len); 506 QString sub = s.mid(idx, len);
510 507
511 // 508 //
512 // Now extract the digits only from the match, which will 509 // Now extract the digits only from the match, which will
513 // then be converted to an int. 510 // then be converted to an int.
514 // 511 //
515 if ((idx = rrx[RXMAX-1].match( sub,0,&len )) > -1) { 512 if ((idx = rrx[RXMAX-1].match( sub,0,&len )) > -1) {
516// if ((idx = rrx[RXMAX-1].search( sub )) > -1) { 513// if ((idx = rrx[RXMAX-1].search( sub )) > -1) {
517// len = rrx[RXMAX-1].matchedLength(); 514// len = rrx[RXMAX-1].matchedLength();
518 sub = sub.mid(idx, len); 515 sub = sub.mid(idx, len);
519 result = sub.toInt(); 516 result = sub.toInt();
520 if(result > 0) { 517 if(result > 0) {
521 rx = result; 518 rx = result;
522 break; 519 break;
523 } 520 }
524 } 521 }
525 } 522 }
526 } 523 }
527 524
528 for(i = 0; i < TXMAX; i++) { 525 for(i = 0; i < TXMAX; i++) {
529 int len, idx, result; 526 int len, idx, result;
530 if((idx = trx[i].match(s,0,&len)) > -1) { 527 if((idx = trx[i].match(s,0,&len)) > -1) {
531// if((idx = trx[i].search(s)) > -1) { 528// if((idx = trx[i].search(s)) > -1) {
532// len = trx[i].matchedLength(); 529// len = trx[i].matchedLength();
533 530
534 // 531 //
535 // trx[i] has been matched, idx contains the start of the match 532 // trx[i] has been matched, idx contains the start of the match
536 // and len contains how long the match is. Extract the match. 533 // and len contains how long the match is. Extract the match.
537 // 534 //
538 QString sub = s.mid(idx, len); 535 QString sub = s.mid(idx, len);
539 536
540 // 537 //
541 // Now extract the digits only from the match, which will then 538 // Now extract the digits only from the match, which will then
542 // be converted to an int. 539 // be converted to an int.
543 // 540 //
544 if((idx = rrx[RXMAX-1].match(sub,0,&len)) > -1) { 541 if((idx = rrx[RXMAX-1].match(sub,0,&len)) > -1) {
545// if((idx = rrx[RXMAX-1].search(sub)) > -1) { 542// if((idx = rrx[RXMAX-1].search(sub)) > -1) {
546// len = rrx[RXMAX-1].matchedLength(); 543// len = rrx[RXMAX-1].matchedLength();
547 sub = sub.mid(idx, len); 544 sub = sub.mid(idx, len);
548 result = sub.toInt(); 545 result = sub.toInt();
549 if(result > 0) { 546 if(result > 0) {
550 tx = result; 547 tx = result;
551 break; 548 break;
552 } 549 }
553 } 550 }
554 } 551 }
555 } 552 }
556 553
557 if(rx == -1 && tx == -1) 554 if(rx == -1 && tx == -1)
558 result = i18n("Unknown speed"); 555 result = QObject::tr("Unknown speed");
559 else if(tx == -1) 556 else if(tx == -1)
560 result.setNum(rx); 557 result.setNum(rx);
561 else if(rx == -1) // should not happen 558 else if(rx == -1) // should not happen
562 result.setNum(tx); 559 result.setNum(tx);
563 else 560 else
564 result.sprintf("%d/%d", rx, tx); 561 result.sprintf("%d/%d", rx, tx);
565 562
566 qDebug( "The parsed result is: %s", result.latin1()); 563 qDebug( "The parsed result is: %s", result.latin1());
567 564
568 return result; 565 return result;
569} 566}
570 567
571 568
572// Lock modem device. Returns 0 on success 1 if the modem is locked and -1 if 569// Lock modem device. Returns 0 on success 1 if the modem is locked and -1 if
573// a lock file can't be created ( permission problem ) 570// a lock file can't be created ( permission problem )
574int Modem::lockdevice() { 571int Modem::lockdevice() {
575 int fd; 572 int fd;
576 char newlock[80]=""; // safe 573 char newlock[80]=""; // safe
577 574
578 if(!_pppdata->modemLockFile()) { 575 if(!_pppdata->modemLockFile()) {
579 qDebug("The user doesn't want a lockfile."); 576 qDebug("The user doesn't want a lockfile.");
580 return 0; 577 return 0;
581 } 578 }
582 579
583 if (modem_is_locked) 580 if (modem_is_locked)
584 return 1; 581 return 1;
585 582
586 QString lockfile = LOCK_DIR"/LCK.."; 583 QString lockfile = LOCK_DIR"/LCK..";
587 lockfile += _pppdata->modemDevice().mid(5); // append everything after /dev/ 584 lockfile += _pppdata->modemDevice().mid(5); // append everything after /dev/
588 585
589 if(access(QFile::encodeName(lockfile), F_OK) == 0) { 586 if(access(QFile::encodeName(lockfile), F_OK) == 0) {
590// if ((fd = Requester::rq-> 587// if ((fd = Requester::rq->
591if ((fd = openLockfile(QFile::encodeName(lockfile), O_RDONLY)) >= 0) { 588if ((fd = openLockfile(QFile::encodeName(lockfile), O_RDONLY)) >= 0) {
592 // Mario: it's not necessary to read more than lets say 32 bytes. If 589 // Mario: it's not necessary to read more than lets say 32 bytes. If
593 // file has more than 32 bytes, skip the rest 590 // file has more than 32 bytes, skip the rest
594 char oldlock[33]; // safe 591 char oldlock[33]; // safe
595 int sz = read(fd, &oldlock, 32); 592 int sz = read(fd, &oldlock, 32);
596 close (fd); 593 close (fd);
597 if (sz <= 0) 594 if (sz <= 0)
598 return 1; 595 return 1;
599 oldlock[sz] = '\0'; 596 oldlock[sz] = '\0';
600 597
601 qDebug( "Device is locked by: %s", oldlock); 598 qDebug( "Device is locked by: %s", oldlock);
602 599
603 int oldpid; 600 int oldpid;
604 int match = sscanf(oldlock, "%d", &oldpid); 601 int match = sscanf(oldlock, "%d", &oldpid);
605 602
606 // found a pid in lockfile ? 603 // found a pid in lockfile ?
607 if (match < 1 || oldpid <= 0) 604 if (match < 1 || oldpid <= 0)
608 return 1; 605 return 1;
609 606
610 // check if process exists 607 // check if process exists
611 if (kill((pid_t)oldpid, 0) == 0 || errno != ESRCH) 608 if (kill((pid_t)oldpid, 0) == 0 || errno != ESRCH)
612 return 1; 609 return 1;
613 610
614 qDebug( "lockfile is stale" ); 611 qDebug( "lockfile is stale" );
615 } 612 }
616 } 613 }
617 614
618 fd = openLockfile(_pppdata->modemDevice(),O_WRONLY|O_TRUNC|O_CREAT); 615 fd = openLockfile(_pppdata->modemDevice(),O_WRONLY|O_TRUNC|O_CREAT);
619 if(fd >= 0) { 616 if(fd >= 0) {
620 sprintf(newlock,"%010d\n", getpid()); 617 sprintf(newlock,"%010d\n", getpid());
621 qDebug("Locking Device: %s", newlock); 618 qDebug("Locking Device: %s", newlock);
622 619
623 write(fd, newlock, strlen(newlock)); 620 write(fd, newlock, strlen(newlock));
624 close(fd); 621 close(fd);
625 modem_is_locked=true; 622 modem_is_locked=true;
626 623
627 return 0; 624 return 0;
628 } 625 }
629 626
630 return -1; 627 return -1;
631 628
632} 629}
633 630
634 631
635// UnLock modem device 632// UnLock modem device
636void Modem::unlockdevice() { 633void Modem::unlockdevice() {
637 if (modem_is_locked) { 634 if (modem_is_locked) {
638 qDebug( "UnLocking Modem Device" ); 635 qDebug( "UnLocking Modem Device" );
639 close(modemfd); 636 close(modemfd);
640 modemfd = -1; 637 modemfd = -1;
641 unlink(lockfile); 638 unlink(lockfile);
642 lockfile[0] = '\0'; 639 lockfile[0] = '\0';
643 modem_is_locked=false; 640 modem_is_locked=false;
644 } 641 }
645} 642}
646 643
647int Modem::openLockfile( QString lockfile, int flags) 644int Modem::openLockfile( QString lockfile, int flags)
648{ 645{
649 int fd; 646 int fd;
650 int mode; 647 int mode;
651 flags = O_RDONLY; 648 flags = O_RDONLY;
652 if(flags == O_WRONLY|O_TRUNC|O_CREAT) 649 if(flags == O_WRONLY|O_TRUNC|O_CREAT)
653 mode = 0644; 650 mode = 0644;
654 else 651 else
655 mode = 0; 652 mode = 0;
656 653
657 lockfile = LOCK_DIR; 654 lockfile = LOCK_DIR;
658 lockfile += "/LCK.."; 655 lockfile += "/LCK..";
659 lockfile += device.right( device.length() - device.findRev("/") -1 ); 656 lockfile += device.right( device.length() - device.findRev("/") -1 );
660 qDebug("lockfile >%s<",lockfile.latin1()); 657 qDebug("lockfile >%s<",lockfile.latin1());
661 // TODO: 658 // TODO:
662 // struct stat st; 659 // struct stat st;
663 // if(stat(lockfile.data(), &st) == -1) { 660 // if(stat(lockfile.data(), &st) == -1) {
664 // if(errno == EBADF) 661 // if(errno == EBADF)
665 // return -1; 662 // return -1;
666 // } else { 663 // } else {
667 // // make sure that this is a regular file 664 // // make sure that this is a regular file
668 // if(!S_ISREG(st.st_mode)) 665 // if(!S_ISREG(st.st_mode))
669 // return -1; 666 // return -1;
670 // } 667 // }
671 if ((fd = open(lockfile, flags, mode)) == -1) { 668 if ((fd = open(lockfile, flags, mode)) == -1) {
672 qDebug("error opening lockfile!"); 669 qDebug("error opening lockfile!");
673 lockfile = QString::null; 670 lockfile = QString::null;
674 fd = open(DEVNULL, O_RDONLY); 671 fd = open(DEVNULL, O_RDONLY);
675 } else 672 } else
676 fchown(fd, 0, 0); 673 fchown(fd, 0, 0);
677 return fd; 674 return fd;
678} 675}
679 676
680 677
681 678
682void alarm_handler(int) { 679void alarm_handler(int) {
683 // fprintf(stderr, "alarm_handler(): Received SIGALRM\n"); 680 // fprintf(stderr, "alarm_handler(): Received SIGALRM\n");
684 681
685 // jump 682 // jump
686 siglongjmp(jmp_buffer, 1); 683 siglongjmp(jmp_buffer, 1);
687} 684}
688 685
689 686
690const char* Modem::authFile(Auth method, int version) { 687const char* Modem::authFile(Auth method, int version) {
691 switch(method|version) { 688 switch(method|version) {
692 case PAP|Original: 689 case PAP|Original:
693 return PAP_AUTH_FILE; 690 return PAP_AUTH_FILE;
694 break; 691 break;
695 case PAP|New: 692 case PAP|New:
696 return PAP_AUTH_FILE".new"; 693 return PAP_AUTH_FILE".new";
697 break; 694 break;
698 case PAP|Old: 695 case PAP|Old:
699 return PAP_AUTH_FILE".old"; 696 return PAP_AUTH_FILE".old";
700 break; 697 break;
701 case CHAP|Original: 698 case CHAP|Original:
702 return CHAP_AUTH_FILE; 699 return CHAP_AUTH_FILE;
703 break; 700 break;
704 case CHAP|New: 701 case CHAP|New:
705 return CHAP_AUTH_FILE".new"; 702 return CHAP_AUTH_FILE".new";
706 break; 703 break;
707 case CHAP|Old: 704 case CHAP|Old:
708 return CHAP_AUTH_FILE".old"; 705 return CHAP_AUTH_FILE".old";
709 break; 706 break;
710 default: 707 default:
711 return 0L; 708 return 0L;
712 } 709 }
713} 710}
714 711
715 712
716bool Modem::createAuthFile(Auth method, const char *username, const char *password) { 713bool Modem::createAuthFile(Auth method, const char *username, const char *password) {
717 const char *authfile, *oldName, *newName; 714 const char *authfile, *oldName, *newName;
718 char line[100]; 715 char line[100];
719 char regexp[2*MaxStrLen+30]; 716 char regexp[2*MaxStrLen+30];
720 regex_t preg; 717 regex_t preg;
721 718
722 if(!(authfile = authFile(method))) 719 if(!(authfile = authFile(method)))
723 return false; 720 return false;
724 721
725 if(!(newName = authFile(method, New))) 722 if(!(newName = authFile(method, New)))
726 return false; 723 return false;
727 724
728 // look for username, "username" or 'username' 725 // look for username, "username" or 'username'
729 // if you modify this RE you have to adapt regexp's size above 726 // if you modify this RE you have to adapt regexp's size above
730 snprintf(regexp, sizeof(regexp), "^[ \t]*%s[ \t]\\|^[ \t]*[\"\']%s[\"\']", 727 snprintf(regexp, sizeof(regexp), "^[ \t]*%s[ \t]\\|^[ \t]*[\"\']%s[\"\']",
731 username,username); 728 username,username);
732 MY_ASSERT(regcomp(&preg, regexp, 0) == 0); 729 MY_ASSERT(regcomp(&preg, regexp, 0) == 0);
733 730
734 // copy to new file pap- or chap-secrets 731 // copy to new file pap- or chap-secrets
735 int old_umask = umask(0077); 732 int old_umask = umask(0077);
736 FILE *fout = fopen(newName, "w"); 733 FILE *fout = fopen(newName, "w");
737 if(fout) { 734 if(fout) {
738 // copy old file 735 // copy old file
739 FILE *fin = fopen(authfile, "r"); 736 FILE *fin = fopen(authfile, "r");
740 if(fin) { 737 if(fin) {
741 while(fgets(line, sizeof(line), fin)) { 738 while(fgets(line, sizeof(line), fin)) {
742 if(regexec(&preg, line, 0, 0L, 0) == 0) 739 if(regexec(&preg, line, 0, 0L, 0) == 0)
743 continue; 740 continue;
744 fputs(line, fout); 741 fputs(line, fout);
745 } 742 }
746 fclose(fin); 743 fclose(fin);
747 } 744 }
748 745
749 // append user/pass pair 746 // append user/pass pair
750 fprintf(fout, "\"%s\"\t*\t\"%s\"\n", username, password); 747 fprintf(fout, "\"%s\"\t*\t\"%s\"\n", username, password);
751 fclose(fout); 748 fclose(fout);
752 } 749 }
753 750
754 // restore umask 751 // restore umask
755 umask(old_umask); 752 umask(old_umask);
756 753
757 // free memory allocated by regcomp 754 // free memory allocated by regcomp
758 regfree(&preg); 755 regfree(&preg);
759 756
760 if(!(oldName = authFile(method, Old))) 757 if(!(oldName = authFile(method, Old)))
761 return false; 758 return false;
762 759
763 // delete old file if any 760 // delete old file if any
764 unlink(oldName); 761 unlink(oldName);
765 762
766 rename(authfile, oldName); 763 rename(authfile, oldName);
767 rename(newName, authfile); 764 rename(newName, authfile);
768 765
769 return true; 766 return true;
770} 767}
771 768
772 769
773bool Modem::removeAuthFile(Auth method) { 770bool Modem::removeAuthFile(Auth method) {
774 const char *authfile, *oldName; 771 const char *authfile, *oldName;
775 772
776 if(!(authfile = authFile(method))) 773 if(!(authfile = authFile(method)))
777 return false; 774 return false;
778 if(!(oldName = authFile(method, Old))) 775 if(!(oldName = authFile(method, Old)))
779 return false; 776 return false;
780 777
781 if(access(oldName, F_OK) == 0) { 778 if(access(oldName, F_OK) == 0) {
782 unlink(authfile); 779 unlink(authfile);
783 return (rename(oldName, authfile) == 0); 780 return (rename(oldName, authfile) == 0);
784 } else 781 } else
785 return false; 782 return false;
786} 783}
787 784
788 785
789bool Modem::setSecret(int method, const char* name, const char* password) 786bool Modem::setSecret(int method, const char* name, const char* password)
790{ 787{
791 788
792 Auth auth; 789 Auth auth;
793 if(method == AUTH_PAPCHAP) 790 if(method == AUTH_PAPCHAP)
794 return setSecret(AUTH_PAP, name, password) && 791 return setSecret(AUTH_PAP, name, password) &&
795 setSecret(AUTH_CHAP, name, password); 792 setSecret(AUTH_CHAP, name, password);
796 793
797 switch(method) { 794 switch(method) {
798 case AUTH_PAP: 795 case AUTH_PAP:
799 auth = Modem::PAP; 796 auth = Modem::PAP;
800 break; 797 break;
801 case AUTH_CHAP: 798 case AUTH_CHAP:
802 auth = Modem::CHAP; 799 auth = Modem::CHAP;
803 break; 800 break;
804 default: 801 default:
805 return false; 802 return false;
806 } 803 }
807 804
808 return createAuthFile(auth, name, password); 805 return createAuthFile(auth, name, password);
809 806
810} 807}
811 808
812bool Modem::removeSecret(int method) 809bool Modem::removeSecret(int method)
813{ 810{
814 Auth auth; 811 Auth auth;
815 812
816 switch(method) { 813 switch(method) {
817 case AUTH_PAP: 814 case AUTH_PAP:
818 auth = Modem::PAP; 815 auth = Modem::PAP;
819 break; 816 break;
820 case AUTH_CHAP: 817 case AUTH_CHAP:
821 auth = Modem::CHAP; 818 auth = Modem::CHAP;
822 break; 819 break;
823 default: 820 default:
824 return false; 821 return false;
825 } 822 }
826 return removeAuthFile( auth ); 823 return removeAuthFile( auth );
827} 824}
828 825
829int checkForInterface() 826int checkForInterface()
830{ 827{
831// I don't know if Linux needs more initialization to get the ioctl to 828// I don't know if Linux needs more initialization to get the ioctl to
832// work, pppd seems to hint it does. But BSD doesn't, and the following 829// work, pppd seems to hint it does. But BSD doesn't, and the following
833// code should compile. 830// code should compile.
834#if (defined(HAVE_NET_IF_PPP_H) || defined(HAVE_LINUX_IF_PPP_H)) && !defined(__svr4__) 831#if (defined(HAVE_NET_IF_PPP_H) || defined(HAVE_LINUX_IF_PPP_H)) && !defined(__svr4__)
835 int s, ok; 832 int s, ok;
836 struct ifreq ifr; 833 struct ifreq ifr;
837 // extern char *no_ppp_msg; 834 // extern char *no_ppp_msg;
838 835
839 if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 836 if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
840 return 1; /* can't tell */ 837 return 1; /* can't tell */
841 838
842 strlcpy(ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name)); 839 strlcpy(ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name));
843 ok = ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0; 840 ok = ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0;
844 close(s); 841 close(s);
845 842
846 if (ok == -1) { 843 if (ok == -1) {
847// This is ifdef'd FreeBSD, because FreeBSD is the only BSD that supports 844// This is ifdef'd FreeBSD, because FreeBSD is the only BSD that supports
848// KLDs, the old LKM interface couldn't handle loading devices 845// KLDs, the old LKM interface couldn't handle loading devices
849// dynamically, and thus can't load ppp support on the fly 846// dynamically, and thus can't load ppp support on the fly
850#ifdef __FreeBSD__ 847#ifdef __FreeBSD__
851 // If we failed to load ppp support and don't have it already. 848 // If we failed to load ppp support and don't have it already.
852 if (kldload("if_ppp") == -1) { 849 if (kldload("if_ppp") == -1) {
853 return -1; 850 return -1;
854 } 851 }
855 return 0; 852 return 0;
856#else 853#else
857 return -1; 854 return -1;
858#endif 855#endif
859 } 856 }
860 return 0; 857 return 0;
861#else 858#else
862// We attempt to use the SunOS/SysVr4 method and stat /dev/ppp 859// We attempt to use the SunOS/SysVr4 method and stat /dev/ppp
863 struct stat buf; 860 struct stat buf;
864 861
865 memset(&buf, 0, sizeof(buf)); 862 memset(&buf, 0, sizeof(buf));
866 return stat("/dev/ppp", &buf); 863 return stat("/dev/ppp", &buf);
867#endif 864#endif
868} 865}
869 866
870bool Modem::execpppd(const char *arguments) { 867bool Modem::execpppd(const char *arguments) {
871 char buf[MAX_CMDLEN]; 868 char buf[MAX_CMDLEN];
872 char *args[MaxArgs]; 869 char *args[MaxArgs];
873 pid_t pgrpid; 870 pid_t pgrpid;
874 871
875 if(modemfd<0) 872 if(modemfd<0)
876 return false; 873 return false;
877 874
878 _pppdExitStatus = -1; 875 _pppdExitStatus = -1;
879 876
877 (void)::pipe( m_pppdLOG );
878
880 switch(pppdPid = fork()) 879 switch(pppdPid = fork())
881 { 880 {
882 case -1: 881 case -1:
883 fprintf(stderr,"In parent: fork() failed\n"); 882 fprintf(stderr,"In parent: fork() failed\n");
883 ::close( m_pppdLOG[0] );
884 ::close( m_pppdLOG[1] );
884 return false; 885 return false;
885 break; 886 break;
886 887
887 case 0: 888 case 0:
888 // let's parse the arguments the user supplied into UNIX suitable form 889 // let's parse the arguments the user supplied into UNIX suitable form
889 // that is a list of pointers each pointing to exactly one word 890 // that is a list of pointers each pointing to exactly one word
890 strlcpy(buf, arguments); 891 strlcpy(buf, arguments);
891 parseargs(buf, args); 892 parseargs(buf, args);
892 // become a session leader and let /dev/ttySx 893 // become a session leader and let /dev/ttySx
893 // be the controlling terminal. 894 // be the controlling terminal.
894 pgrpid = setsid(); 895 pgrpid = setsid();
895#ifdef TIOCSCTTY 896#ifdef TIOCSCTTY
896 if(ioctl(modemfd, TIOCSCTTY, 0)<0) 897 if(ioctl(modemfd, TIOCSCTTY, 0)<0)
897 fprintf(stderr, "ioctl() failed.\n"); 898 fprintf(stderr, "ioctl() failed.\n");
898#elif defined (TIOCSPGRP) 899#elif defined (TIOCSPGRP)
899 if(ioctl(modemfd, TIOCSPGRP, &pgrpid)<0) 900 if(ioctl(modemfd, TIOCSPGRP, &pgrpid)<0)
900 fprintf(stderr, "ioctl() failed.\n"); 901 fprintf(stderr, "ioctl() failed.\n");
901#endif 902#endif
902 if(tcsetpgrp(modemfd, pgrpid)<0) 903 if(tcsetpgrp(modemfd, pgrpid)<0)
903 fprintf(stderr, "tcsetpgrp() failed.\n"); 904 fprintf(stderr, "tcsetpgrp() failed.\n");
904 905
906 ::close( m_pppdLOG[0] );
907 ::setenv( "LANG", "C", 1 ); // overwrite
908 dup2(m_pppdLOG[1], 11 ); // for logfd 11
905 dup2(modemfd, 0); 909 dup2(modemfd, 0);
906 dup2(modemfd, 1); 910 dup2(modemfd, 1);
907 911
912
908 switch (checkForInterface()) { 913 switch (checkForInterface()) {
909 case 1: 914 case 1:
910 fprintf(stderr, "Cannot determine if kernel supports ppp.\n"); 915 fprintf(stderr, "Cannot determine if kernel supports ppp.\n");
911 break; 916 break;
912 case -1: 917 case -1:
913 fprintf(stderr, "Kernel does not support ppp, oops.\n"); 918 fprintf(stderr, "Kernel does not support ppp, oops.\n");
914 break; 919 break;
915 case 0: 920 case 0:
916 fprintf(stderr, "Kernel supports ppp alright.\n"); 921 fprintf(stderr, "Kernel supports ppp alright.\n");
917 break; 922 break;
918 } 923 }
919 924
920 execve(pppdPath(), args, 0L); 925 execve(pppdPath(), args, 0L);
921 _exit(0); 926 _exit(0);
922 break; 927 break;
923 928
924 default: 929 default:
925 qDebug("In parent: pppd pid %d\n",pppdPid); 930 qDebug("In parent: pppd pid %d\n",pppdPid);
926 close(modemfd); 931 close(modemfd);
932
933 ::close( m_pppdLOG[1] );
934 // set it to nonblocking io
935 int flag = ::fcntl( m_pppdLOG[0], F_GETFL );
936
937 if ( !(flag & O_NONBLOCK) ) {
938 qDebug("Setting nonblocking io");
939 flag |= O_NONBLOCK;
940 ::fcntl(m_pppdLOG[0], F_SETFL, flag );
941 }
942
943 delete m_modemDebug;
944 m_modemDebug = new QSocketNotifier(m_pppdLOG[0], QSocketNotifier::Read, this );
945 connect(m_modemDebug, SIGNAL(activated(int) ),
946 this, SLOT(slotModemDebug(int) ) );
947
927 modemfd = -1; 948 modemfd = -1;
949 m_pppdDev = QString::fromLatin1("ppp0");
928 return true; 950 return true;
929 break; 951 break;
930 } 952 }
931} 953}
932 954
933 955
934bool Modem::killpppd() { 956bool Modem::killpppd() {
957 qDebug("In killpppd and pid is %d", pppdPid );
935 if(pppdPid > 0) { 958 if(pppdPid > 0) {
959 delete m_modemDebug;
960 m_modemDebug = 0;
936 qDebug("In killpppd(): Sending SIGTERM to %d\n", pppdPid); 961 qDebug("In killpppd(): Sending SIGTERM to %d\n", pppdPid);
937 if(kill(pppdPid, SIGTERM) < 0) { 962 if(kill(pppdPid, SIGTERM) < 0) {
938 qDebug("Error terminating %d. Sending SIGKILL\n", pppdPid); 963 qDebug("Error terminating %d. Sending SIGKILL\n", pppdPid);
939 if(kill(pppdPid, SIGKILL) < 0) { 964 if(kill(pppdPid, SIGKILL) < 0) {
940 qDebug("Error killing %d\n", pppdPid); 965 qDebug("Error killing %d\n", pppdPid);
941 return false; 966 return false;
942 } 967 }
943 } 968 }
944 } 969 }
945 return true; 970 return true;
946} 971}
947 972
948 973
949void Modem::parseargs(char* buf, char** args) { 974void Modem::parseargs(char* buf, char** args) {
950 int nargs = 0; 975 int nargs = 0;
951 int quotes; 976 int quotes;
952 977
953 while(nargs < MaxArgs-1 && *buf != '\0') { 978 while(nargs < MaxArgs-1 && *buf != '\0') {
954 979
955 quotes = 0; 980 quotes = 0;
956 981
957 // Strip whitespace. Use nulls, so that the previous argument is 982 // Strip whitespace. Use nulls, so that the previous argument is
958 // terminated automatically. 983 // terminated automatically.
959 984
960 while ((*buf == ' ' ) || (*buf == '\t' ) || (*buf == '\n' ) ) 985 while ((*buf == ' ' ) || (*buf == '\t' ) || (*buf == '\n' ) )
961 *buf++ = '\0'; 986 *buf++ = '\0';
962 987
963 // detect begin of quoted argument 988 // detect begin of quoted argument
964 if (*buf == '"' || *buf == '\'') { 989 if (*buf == '"' || *buf == '\'') {
965 quotes = *buf; 990 quotes = *buf;
966 *buf++ = '\0'; 991 *buf++ = '\0';
967 } 992 }
968 993
969 // save the argument 994 // save the argument
970 if(*buf != '\0') { 995 if(*buf != '\0') {
971 *args++ = buf; 996 *args++ = buf;
972 nargs++; 997 nargs++;
973 } 998 }
974 999
975 if (!quotes) 1000 if (!quotes)
976 while ((*buf != '\0') && (*buf != '\n') && 1001 while ((*buf != '\0') && (*buf != '\n') &&
977 (*buf != '\t') && (*buf != ' ')) 1002 (*buf != '\t') && (*buf != ' '))
978 buf++; 1003 buf++;
979 else { 1004 else {
980 while ((*buf != '\0') && (*buf != quotes)) 1005 while ((*buf != '\0') && (*buf != quotes))
981 buf++; 1006 buf++;
982 *buf++ = '\0'; 1007 *buf++ = '\0';
983 } 1008 }
984 } 1009 }
985 1010
986 *args = 0L; 1011 *args = 0L;
987} 1012}
988 1013
989bool Modem::execPPPDaemon(const QString & arguments) 1014bool Modem::execPPPDaemon(const QString & arguments)
990{ 1015{
991 if(execpppd(arguments)) { 1016 if(execpppd(arguments)) {
992 _pppdata->setpppdRunning(true); 1017 _pppdata->setpppdRunning(true);
993 return true; 1018 return true;
994 } else 1019 } else
995 return false; 1020 return false;
996} 1021}
997 1022
998void Modem::killPPPDaemon() 1023void Modem::killPPPDaemon()
999{ 1024{
1000 _pppdata->setpppdRunning(false); 1025 _pppdata->setpppdRunning(false);
1001 killpppd(); 1026 killpppd();
1002} 1027}
1003 1028
1004int Modem::pppdExitStatus() 1029int Modem::pppdExitStatus()
1005{ 1030{
1006 return _pppdExitStatus; 1031 return _pppdExitStatus;
1007} 1032}
1008 1033
1009int Modem::openResolv(int flags) 1034int Modem::openResolv(int flags)
1010{ 1035{
1011 int fd; 1036 int fd;
1012 if ((fd = open(_PATH_RESCONF, flags)) == -1) { 1037 if ((fd = open(_PATH_RESCONF, flags)) == -1) {
1013 qDebug("error opening resolv.conf!"); 1038 qDebug("error opening resolv.conf!");
1014 fd = open(DEVNULL, O_RDONLY); 1039 fd = open(DEVNULL, O_RDONLY);
1015 } 1040 }
1016 return fd; 1041 return fd;
1017} 1042}
1018 1043
1019bool Modem::setHostname(const QString & name) 1044bool Modem::setHostname(const QString & name)
1020{ 1045{
1021 return sethostname(name, name.length()) == 0; 1046 return sethostname(name, name.length()) == 0;
1022} 1047}
1023 1048
1049QString Modem::pppDevice()const {
1050 return m_pppdDev;
1051}
1052void Modem::setPPPDevice( const QString& dev ) {
1053 m_pppdDev = dev;
1054}
1055pid_t Modem::pppPID()const {
1056 return pppdPid;
1057}
1058void Modem::setPPPDPid( pid_t pid ) {
1059 qDebug("Modem setting pid");
1060 _pppdExitStatus = -1;
1061 pppdPid = pid;
1062 modemfd = -1;
1063}
1064void Modem::slotModemDebug(int fd) {
1065 char buf[2049];
1066 int len;
1067
1068 // read in pppd data look for Using interface
1069 // then read the interface
1070 // we limit to 10 device now 0-9
1071 if((len = ::read(fd, buf, 2048)) > 0) {
1072 buf[len+1] = '\0';
1073 char *found;
1074 if ( (found = ::strstr(buf, "Using interface ") ) ) {
1075 found += 16;
1076 m_pppdDev = QString::fromLatin1(found, 5 );
1077 m_pppdDev = m_pppdDev.simplifyWhiteSpace();
1078 }
1079 }
1080}
diff --git a/noncore/settings/networksettings/ppp/modem.h b/noncore/settings/networksettings/ppp/modem.h
index 103cbeb..8ecc354 100644
--- a/noncore/settings/networksettings/ppp/modem.h
+++ b/noncore/settings/networksettings/ppp/modem.h
@@ -1,120 +1,131 @@
1/* 1/*
2 * kPPP: A pppd Front End for the KDE project 2 * kPPP: A pppd Front End for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * This file was added by Harri Porten <porten@tu-harburg.de> 9 * This file was added by Harri Porten <porten@tu-harburg.de>
10 * 10 *
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#ifndef _MODEM_H_ 27#ifndef _MODEM_H_
28#define _MODEM_H_ 28#define _MODEM_H_
29 29
30#include <qdir.h> 30#include <qdir.h>
31 31
32#include <sys/types.h> 32#include <sys/types.h>
33#include <termios.h> 33#include <termios.h>
34#include <unistd.h> 34#include <unistd.h>
35 35
36#include <qsocketnotifier.h> 36#include <qsocketnotifier.h>
37 37
38class PPPData; 38class PPPData;
39 39
40void alarm_handler(int); 40void alarm_handler(int);
41const char *pppdPath(); 41const char *pppdPath();
42 42
43class Modem : public QObject { 43class Modem : public QObject {
44 Q_OBJECT 44 Q_OBJECT
45public: 45public:
46 Modem(PPPData*); 46 Modem(PPPData*);
47 ~Modem(); 47 ~Modem();
48 48
49 const QString getDevice() {return device;}; 49 const QString getDevice() {return device;};
50 void setDevice(const QString dev) {device = dev;}; 50 void setDevice(const QString dev) {device = dev;};
51
52 void save();
51 53
52 bool opentty(); 54 bool opentty();
53 bool closetty(); 55 bool closetty();
54 bool hangup(); 56 bool hangup();
55 bool writeChar(unsigned char); 57 bool writeChar(unsigned char);
56 bool writeLine(const char *); 58 bool writeLine(const char *);
57 bool dataMode() const { return data_mode; } 59 bool dataMode() const { return data_mode; }
58 void setDataMode(bool set) { data_mode = set; } 60 void setDataMode(bool set) { data_mode = set; }
59 const QString modemMessage(); 61 const QString modemMessage();
60 speed_t modemspeed(); 62 speed_t modemspeed();
61 static QString parseModemSpeed(const QString &); 63 static QString parseModemSpeed(const QString &);
62 void notify(const QObject *, const char *); 64 void notify(const QObject *, const char *);
63 void stop(); 65 void stop();
64 void flush(); 66 void flush();
65 67
66 int lockdevice(); 68 int lockdevice();
67 void unlockdevice(); 69 void unlockdevice();
68 70
69 bool setSecret(int,const char*,const char*); 71 bool setSecret(int,const char*,const char*);
70 bool removeSecret(int); 72 bool removeSecret(int);
71 void killPPPDaemon(); 73 void killPPPDaemon();
72 int pppdExitStatus(); 74 int pppdExitStatus();
73 bool execPPPDaemon(const QString & arguments); 75 bool execPPPDaemon(const QString & arguments);
74 int openResolv(int flags); 76 int openResolv(int flags);
75 bool setHostname(const QString & name); 77 bool setHostname(const QString & name);
76 78
79 QString pppDevice()const;
80 void setPPPDevice( const QString& );
81 pid_t pppPID()const;
82 void setPPPDPid( pid_t );
83
77public: 84public:
78 enum Auth { PAP = 1, CHAP }; 85 enum Auth { PAP = 1, CHAP };
79 // static Modem *modem; 86 // static Modem *modem;
80 int lastStatus; 87 int lastStatus;
81 88
82signals: 89signals:
83 void charWaiting(unsigned char); 90 void charWaiting(unsigned char);
84 91
85private slots: 92private slots:
86 void startNotifier(); 93 void startNotifier();
87 void stopNotifier(); 94 void stopNotifier();
88 void readtty(int); 95 void readtty(int);
96 void slotModemDebug(int);
89 97
90private: 98private:
91 enum { MaxPathLen = 30, MaxStrLen = 40, MaxArgs = 100 }; 99 enum { MaxPathLen = 30, MaxStrLen = 40, MaxArgs = 100 };
92 enum { Original=0x100, New=0x200, Old=0x400 } Version; 100 enum { Original=0x100, New=0x200, Old=0x400 } Version;
93 101
94 const char* authFile(Auth method, int version = Original ); 102 const char* authFile(Auth method, int version = Original );
95 bool createAuthFile(Auth method,const char *username,const char *password); 103 bool createAuthFile(Auth method,const char *username,const char *password);
96 bool removeAuthFile(Auth method); 104 bool removeAuthFile(Auth method);
97 bool execpppd(const char *arguments); 105 bool execpppd(const char *arguments);
98 bool killpppd(); 106 bool killpppd();
99 void parseargs(char* buf, char** args); 107 void parseargs(char* buf, char** args);
100 void escape_to_command_mode(); 108 void escape_to_command_mode();
101 int openLockfile(QString,int); 109 int openLockfile(QString,int);
102 110
103private: 111private:
104 QString device; 112 QString device;
105 QString lockfile; 113 QString lockfile;
106 int modemfd; 114 int modemfd;
107 int pppdPid; 115 int pppdPid;
108 int _pppdExitStatus; 116 int _pppdExitStatus;
109 QSocketNotifier *sn; 117 QSocketNotifier *sn;
118 QSocketNotifier *m_modemDebug;
110 bool data_mode; 119 bool data_mode;
111 QString errmsg; 120 QString errmsg;
112 struct termios initial_tty; 121 struct termios initial_tty;
113 struct termios tty; 122 struct termios tty;
114 bool modem_is_locked; 123 bool modem_is_locked;
115 PPPData *_pppdata; 124 PPPData *_pppdata;
125 int m_pppdLOG[2];
126 QString m_pppdDev;
116}; 127};
117 128
118#endif 129#endif
119 130
120 131
diff --git a/noncore/settings/networksettings/ppp/modemcmds.cpp b/noncore/settings/networksettings/ppp/modemcmds.cpp
index 1d9db6e..e797795 100644
--- a/noncore/settings/networksettings/ppp/modemcmds.cpp
+++ b/noncore/settings/networksettings/ppp/modemcmds.cpp
@@ -1,318 +1,333 @@
1/* 1/*
2 * kPPP: A front end for pppd for the KDE project 2 * kPPP: A front end for pppd for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * based on EzPPP: 9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter 10 * Copyright (C) 1997 Jay Painter
11 * 11 *
12 * This library is free software; you can redistribute it and/or 12 * This library is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This library is distributed in the hope that it will be useful, 17 * This library is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with dummyWidget program; if not, write to the Free 23 * License along with dummyWidget program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qslider.h> 28#include <qslider.h>
29#include <qbuttongroup.h> 29#include <qbuttongroup.h>
30#include <qscrollview.h>
31#include <qapplication.h>
30#include <stdlib.h> 32#include <stdlib.h>
31//#include <kapplication.h> // for getMiniIcon()
32//#include <klocale.h>
33#define i18n QObject::tr
34#include "modemcmds.h" 33#include "modemcmds.h"
35#include "pppdata.h" 34#include "pppdata.h"
36//#include <kwin.h>
37 35
38#define ADJUSTEDIT(e) //e->setText("XXXXXXXXqy"); e->setMinimumSize(e->sizeHint()); /*e->setFixedHeight(e->sizeHint().height());*/ e->setText(""); e->setMaxLength(MODEMSTR_SIZE); 36#define ADJUSTEDIT(e) //e->setText("XXXXXXXXqy"); e->setMinimumSize(e->sizeHint()); /*e->setFixedHeight(e->sizeHint().height());*/ e->setText(""); e->setMaxLength(MODEMSTR_SIZE);
39 37
40// a little trick to make the label look like a disabled lineedit 38// a little trick to make the label look like a disabled lineedit
41#define FORMATSLIDERLABEL(l) //l->setFixedWidth(l->sizeHint().width()); l->setFixedHeight(QLineEdit(dummyWidget).sizeHint().height()); l->setAlignment(AlignCenter); l->setFrameStyle(QFrame::WinPanel|QFrame::Sunken); l->setLineWidth(2); 39#define FORMATSLIDERLABEL(l) //l->setFixedWidth(l->sizeHint().width()); l->setFixedHeight(QLineEdit(dummyWidget).sizeHint().height()); l->setAlignment(AlignCenter); l->setFrameStyle(QFrame::WinPanel|QFrame::Sunken); l->setLineWidth(2);
42 40
43ModemCommands::ModemCommands(PPPData *pd, QWidget *parent, const char *name) 41ModemCommands::ModemCommands(PPPData *pd, QWidget *parent, const char *name , bool modal, WFlags f)
44 : QDialog(parent, name, true ), _pppdata(pd) 42 : QDialog( parent, name, modal, f ), _pppdata(pd)
45{ 43{
46 setCaption(i18n("Edit Modem Commands")); 44 setCaption(QObject::tr("Edit Modem Commands"));
47 45
48 const int GRIDROWS = 22; 46 const int GRIDROWS = 22;
49 int row = 0; 47 int row = 0;
50 48
49 QVBoxLayout *main = new QVBoxLayout( this );
50 QScrollView *sv = new QScrollView( this );
51 QWidget *mainW = new QWidget( sv->viewport() );
52 sv->setResizePolicy( QScrollView::AutoOneFit );
53 sv->setHScrollBarMode( QScrollView::AlwaysOff );
54 sv->setFrameShape( QFrame::NoFrame );
55 sv->addChild( mainW );
56 main->addWidget( sv );
57 // evil hack
58 mainW->setMaximumWidth( QApplication::desktop()->width() - 10 );
59
51 // toplevel layout 60 // toplevel layout
52 QVBoxLayout *tl = new QVBoxLayout(this, 10, 4); 61 QVBoxLayout *tl = new QVBoxLayout( mainW, 10, 4);
53 62
54 // add grid + frame 63 // add grid + frame
55 QGridLayout *l1 = new QGridLayout(GRIDROWS, 4); 64 QGridLayout *l1 = new QGridLayout(GRIDROWS, 4);
56 tl->addLayout(l1); 65 tl->addLayout(l1);
57 box = new QGroupBox(this, "box"); 66 box = new QGroupBox(mainW, "box");
67 box->setMargin( 0 );
58 l1->addMultiCellWidget(box, row++, GRIDROWS, 0, 3); 68 l1->addMultiCellWidget(box, row++, GRIDROWS, 0, 3);
59 69
60 // put slider and label into a separate H-Box 70 // put slider and label into a separate H-Box
61 QHBoxLayout *l2 = new QHBoxLayout; 71 QHBoxLayout *l2 = new QHBoxLayout;
62 l1->addLayout(l2, row, 2); 72 l1->addLayout(l2, row, 2);
63 lpreinitslider = new QLabel("MMMM", this); 73 lpreinitslider = new QLabel("MMMM", mainW);
64 FORMATSLIDERLABEL(lpreinitslider); 74 FORMATSLIDERLABEL(lpreinitslider);
65 75
66 QSlider *preinitslider = new QSlider(0, 300, 1, 0, 76 QSlider *preinitslider = new QSlider(0, 300, 1, 0,
67 QSlider::Horizontal, this); 77 QSlider::Horizontal, mainW);
68// preinitslider->setFixedHeight(preinitslider->sizeHint().height()); 78// preinitslider->setFixedHeight(preinitslider->sizeHint().height());
69 connect(preinitslider, SIGNAL(valueChanged(int)), 79 connect(preinitslider, SIGNAL(valueChanged(int)),
70 lpreinitslider, SLOT(setNum(int))); 80 lpreinitslider, SLOT(setNum(int)));
71 l2->addWidget(lpreinitslider, 0); 81 l2->addWidget(lpreinitslider, 0);
72 l2->addWidget(preinitslider, 1); 82 l2->addWidget(preinitslider, 1);
73 83
74 lpreinit = new QLabel(i18n("Pre-init delay (sec/100):"), this); 84 lpreinit = new QLabel(QObject::tr("Pre-init delay (sec/100):"), mainW);
75 l1->addWidget(lpreinit, row++, 1); 85 l1->addWidget(lpreinit, row++, 1);
76 86
77 for(int i = 0; i < PPPData::NumInitStrings; i++) { 87 for(int i = 0; i < PPPData::NumInitStrings; i++) {
78 initstr[i] = new QLineEdit(this); 88 initstr[i] = new QLineEdit(mainW);
79 QLabel *initLabel = new QLabel(i18n("Initialization string %1:").arg(i + 1), 89 QLabel *initLabel = new QLabel(QObject::tr("Initialization string %1:").arg(i + 1),
80 this); 90 mainW);
81 ADJUSTEDIT(initstr[i]); 91 ADJUSTEDIT(initstr[i]);
82 l1->addWidget(initLabel, row, 1); 92 l1->addWidget(initLabel, row, 1);
83 l1->addWidget(initstr[i], row++, 2); 93 l1->addWidget(initstr[i], row++, 2);
84 } 94 }
85 95
86 QHBoxLayout *l3 = new QHBoxLayout; 96 QHBoxLayout *l3 = new QHBoxLayout;
87 l1->addLayout(l3, row, 2); 97 l1->addLayout(l3, row, 2);
88 linitslider = new QLabel("MMMM", this); 98 linitslider = new QLabel("MMMM", mainW);
89 FORMATSLIDERLABEL(linitslider); 99 FORMATSLIDERLABEL(linitslider);
90 QSlider *initslider = new QSlider(1, 300, 1, 0, 100 QSlider *initslider = new QSlider(1, 300, 1, 0,
91 QSlider::Horizontal, this); 101 QSlider::Horizontal, mainW);
92// initslider->setFixedHeight(initslider->sizeHint().height()); 102// initslider->setFixedHeight(initslider->sizeHint().height());
93 connect(initslider, SIGNAL(valueChanged(int)), 103 connect(initslider, SIGNAL(valueChanged(int)),
94 linitslider, SLOT(setNum(int))); 104 linitslider, SLOT(setNum(int)));
95 l3->addWidget(linitslider, 0); 105 l3->addWidget(linitslider, 0);
96 l3->addWidget(initslider, 1); 106 l3->addWidget(initslider, 1);
97 107
98 label3 = new QLabel(i18n("Post-init delay (sec/100):"), this); 108 label3 = new QLabel(QObject::tr("Post-init delay (sec/100):"), mainW);
99 l1->addWidget(label3, row++, 1); 109 l1->addWidget(label3, row++, 1);
100 110
101 /* Set ATS11 (Dial tone duration) between 0-255 (Default ~ 70) */ 111 /* Set ATS11 (Dial tone duration) between 0-255 (Default ~ 70) */
102 QHBoxLayout *l4 = new QHBoxLayout; 112 QHBoxLayout *l4 = new QHBoxLayout;
103 l1->addLayout(l4, row, 2); 113 l1->addLayout(l4, row, 2);
104 ldurationslider = new QLabel("MMMM", this); 114 ldurationslider = new QLabel("MMMM", mainW);
105 FORMATSLIDERLABEL(ldurationslider); 115 FORMATSLIDERLABEL(ldurationslider);
106 QSlider *durationslider = new QSlider(1, 255, 1, 0, 116 QSlider *durationslider = new QSlider(1, 255, 1, 0,
107 QSlider::Horizontal, this); 117 QSlider::Horizontal, mainW);
108// durationslider->setFixedHeight(durationslider->sizeHint().height()); 118// durationslider->setFixedHeight(durationslider->sizeHint().height());
109 connect(durationslider, SIGNAL(valueChanged(int)), 119 connect(durationslider, SIGNAL(valueChanged(int)),
110 ldurationslider, SLOT(setNum(int))); 120 ldurationslider, SLOT(setNum(int)));
111 l4->addWidget(ldurationslider, 0); 121 l4->addWidget(ldurationslider, 0);
112 l4->addWidget(durationslider, 1); 122 l4->addWidget(durationslider, 1);
113 123
114 lduration = new QLabel(i18n("Dialing speed (sec/100):"), this); 124 lduration = new QLabel(QObject::tr("Dialing speed (sec/100):"), mainW);
115 l1->addWidget(lduration, row++, 1); 125 l1->addWidget(lduration, row++, 1);
116 126
117 127
118 initresp = new QLineEdit(this); 128 initresp = new QLineEdit(mainW);
119 label2 = new QLabel(i18n("Init response:"), this); 129 label2 = new QLabel(QObject::tr("Init response:"), mainW);
120 ADJUSTEDIT(initresp); 130 ADJUSTEDIT(initresp);
121 l1->addWidget(label2, row, 1); 131 l1->addWidget(label2, row, 1);
122 l1->addWidget(initresp, row++, 2); 132 l1->addWidget(initresp, row++, 2);
123 133
124 nodetectdialtone = new QLineEdit(this); 134 nodetectdialtone = new QLineEdit(mainW);
125 lnodetectdialtone = new QLabel(i18n("No dial tone detection:"), this); 135 lnodetectdialtone = new QLabel(QObject::tr("No dial tone detection:"), mainW);
126 ADJUSTEDIT(nodetectdialtone); 136 ADJUSTEDIT(nodetectdialtone);
127 l1->addWidget(lnodetectdialtone, row, 1); 137 l1->addWidget(lnodetectdialtone, row, 1);
128 l1->addWidget(nodetectdialtone, row++, 2); 138 l1->addWidget(nodetectdialtone, row++, 2);
129 139
130 dialstr = new QLineEdit(this); 140 dialstr = new QLineEdit(mainW);
131 label4 = new QLabel(i18n("Dial string:"),this); 141 label4 = new QLabel(QObject::tr("Dial string:"),mainW);
132 ADJUSTEDIT(dialstr); 142 ADJUSTEDIT(dialstr);
133 l1->addWidget(label4, row, 1); 143 l1->addWidget(label4, row, 1);
134 l1->addWidget(dialstr, row++, 2); 144 l1->addWidget(dialstr, row++, 2);
135 145
136 connectresp = new QLineEdit(this); 146 connectresp = new QLineEdit(mainW);
137 label5 = new QLabel(i18n("Connect response:"), this); 147 label5 = new QLabel(QObject::tr("Connect response:"), mainW);
138 ADJUSTEDIT(connectresp); 148 ADJUSTEDIT(connectresp);
139 l1->addWidget(label5, row, 1); 149 l1->addWidget(label5, row, 1);
140 l1->addWidget(connectresp, row++, 2); 150 l1->addWidget(connectresp, row++, 2);
141 151
142 busyresp = new QLineEdit(this); 152 busyresp = new QLineEdit(mainW);
143 label6 = new QLabel(i18n("Busy response:"), this); 153 label6 = new QLabel(QObject::tr("Busy response:"), mainW);
144 ADJUSTEDIT(busyresp); 154 ADJUSTEDIT(busyresp);
145 l1->addWidget(label6, row, 1); 155 l1->addWidget(label6, row, 1);
146 l1->addWidget(busyresp, row++, 2); 156 l1->addWidget(busyresp, row++, 2);
147 157
148 nocarrierresp = new QLineEdit(this); 158 nocarrierresp = new QLineEdit(mainW);
149 label7 = new QLabel(i18n("No carrier response:"), this); 159 label7 = new QLabel(QObject::tr("No carrier response:"), mainW);
150 ADJUSTEDIT(nocarrierresp); 160 ADJUSTEDIT(nocarrierresp);
151 l1->addWidget(label7, row, 1); 161 l1->addWidget(label7, row, 1);
152 l1->addWidget(nocarrierresp, row++, 2); 162 l1->addWidget(nocarrierresp, row++, 2);
153 163
154 nodialtoneresp = new QLineEdit(this); 164 nodialtoneresp = new QLineEdit(mainW);
155 label8 = new QLabel(i18n("No dial tone response:"), this); 165 label8 = new QLabel(QObject::tr("No dial tone response:"), mainW);
156 ADJUSTEDIT(nodialtoneresp); 166 ADJUSTEDIT(nodialtoneresp);
157 l1->addWidget(label8, row, 1); 167 l1->addWidget(label8, row, 1);
158 l1->addWidget(nodialtoneresp, row++, 2); 168 l1->addWidget(nodialtoneresp, row++, 2);
159 169
160 hangupstr = new QLineEdit(this); 170 hangupstr = new QLineEdit(mainW);
161 label9 = new QLabel(i18n("Hangup string:"), this); 171 label9 = new QLabel(QObject::tr("Hangup string:"), mainW);
162 ADJUSTEDIT(hangupstr); 172 ADJUSTEDIT(hangupstr);
163 l1->addWidget(label9, row, 1); 173 l1->addWidget(label9, row, 1);
164 l1->addWidget(hangupstr, row++, 2); 174 l1->addWidget(hangupstr, row++, 2);
165 175
166 hangupresp = new QLineEdit(this); 176 hangupresp = new QLineEdit(mainW);
167 label10 = new QLabel(i18n("Hangup response:"), this); 177 label10 = new QLabel(QObject::tr("Hangup response:"), mainW);
168 ADJUSTEDIT(hangupresp); 178 ADJUSTEDIT(hangupresp);
169 l1->addWidget(label10, row, 1); 179 l1->addWidget(label10, row, 1);
170 l1->addWidget(hangupresp, row++, 2); 180 l1->addWidget(hangupresp, row++, 2);
171 181
172 answerstr = new QLineEdit(this); 182 answerstr = new QLineEdit(mainW);
173 label11 = new QLabel(i18n("Answer string:"), this); 183 label11 = new QLabel(QObject::tr("Answer string:"), mainW);
174 ADJUSTEDIT(answerstr); 184 ADJUSTEDIT(answerstr);
175 l1->addWidget(label11, row, 1); 185 l1->addWidget(label11, row, 1);
176 l1->addWidget(answerstr, row++, 2); 186 l1->addWidget(answerstr, row++, 2);
177 187
178 ringresp = new QLineEdit(this); 188 ringresp = new QLineEdit(mainW);
179 label12 = new QLabel(i18n("Ring response:"), this); 189 label12 = new QLabel(QObject::tr("Ring response:"), mainW);
180 ADJUSTEDIT(ringresp); 190 ADJUSTEDIT(ringresp);
181 l1->addWidget(label12, row, 1); 191 l1->addWidget(label12, row, 1);
182 l1->addWidget(ringresp, row++, 2); 192 l1->addWidget(ringresp, row++, 2);
183 193
184 answerresp = new QLineEdit(this); 194 answerresp = new QLineEdit(mainW);
185 label13 = new QLabel(i18n("Answer response:"), this); 195 label13 = new QLabel(QObject::tr("Answer response:"), mainW);
186 ADJUSTEDIT(answerresp); 196 ADJUSTEDIT(answerresp);
187 l1->addWidget(label13, row, 1); 197 l1->addWidget(label13, row, 1);
188 l1->addWidget(answerresp, row++, 2); 198 l1->addWidget(answerresp, row++, 2);
189 199
190 escapestr = new QLineEdit(this); 200 escapestr = new QLineEdit(mainW);
191 label14 = new QLabel(i18n("Escape string:"), this); 201 label14 = new QLabel(QObject::tr("Escape string:"), mainW);
192 ADJUSTEDIT(escapestr); 202 ADJUSTEDIT(escapestr);
193 l1->addWidget(label14, row, 1); 203 l1->addWidget(label14, row, 1);
194 l1->addWidget(escapestr, row++, 2); 204 l1->addWidget(escapestr, row++, 2);
195 205
196 escaperesp = new QLineEdit(this); 206 escaperesp = new QLineEdit(mainW);
197 label15 = new QLabel(i18n("Escape response:"), this); 207 label15 = new QLabel(QObject::tr("Escape response:"), mainW);
198 ADJUSTEDIT(escaperesp); 208 ADJUSTEDIT(escaperesp);
199 l1->addWidget(label15, row, 1); 209 l1->addWidget(label15, row, 1);
200 l1->addWidget(escaperesp, row++, 2); 210 l1->addWidget(escaperesp, row++, 2);
201 211
202 QHBoxLayout *l5 = new QHBoxLayout; 212 QHBoxLayout *l5 = new QHBoxLayout;
203 l1->addLayout(l5, row, 2); 213 l1->addLayout(l5, row, 2);
204 lslider = new QLabel("MMMM", this); 214 lslider = new QLabel("MMMM", mainW);
205 FORMATSLIDERLABEL(lslider); 215 FORMATSLIDERLABEL(lslider);
206 216
207 QSlider *slider = new QSlider(0, 255, 1, 0, 217 QSlider *slider = new QSlider(0, 255, 1, 0,
208 QSlider::Horizontal, this); 218 QSlider::Horizontal, mainW);
209// slider->setFixedHeight(slider->sizeHint().height()); 219// slider->setFixedHeight(slider->sizeHint().height());
210 connect(slider, SIGNAL(valueChanged(int)), 220 connect(slider, SIGNAL(valueChanged(int)),
211 lslider, SLOT(setNum(int))); 221 lslider, SLOT(setNum(int)));
212 l5->addWidget(lslider, 0); 222 l5->addWidget(lslider, 0);
213 l5->addWidget(slider, 1); 223 l5->addWidget(slider, 1);
214 224
215 label16 = new QLabel(i18n("Guard time (sec/50):"), this); 225 label16 = new QLabel(QObject::tr("Guard time (sec/50):"), mainW);
216 l1->addWidget(label16, row++, 1); 226 l1->addWidget(label16, row++, 1);
217 227
218 QLabel *l = new QLabel(i18n("Volume off/low/high:"), this); 228 QLabel *l = new QLabel(QObject::tr("Volume off/low/high:"), mainW);
219 l1->addWidget(l, row, 1); 229 l1->addWidget(l, row, 1);
220 QHBoxLayout *l6 = new QHBoxLayout; 230 QHBoxLayout *l6 = new QHBoxLayout;
221 l1->addLayout(l6, row++, 2); 231 l1->addLayout(l6, row++, 2);
222 volume_off = new QLineEdit(this); 232 volume_off = new QLineEdit(mainW);
223// volume_off->setFixedHeight(volume_off->sizeHint().height()); 233// volume_off->setFixedHeight(volume_off->sizeHint().height());
224 // volume_off->setMinimumWidth((int)(volume_off->sizeHint().width() / 2)); 234 // volume_off->setMinimumWidth((int)(volume_off->sizeHint().width() / 2));
225 volume_medium = new QLineEdit(this); 235 volume_medium = new QLineEdit(mainW);
226// volume_medium->setFixedHeight(volume_medium->sizeHint().height()); 236// volume_medium->setFixedHeight(volume_medium->sizeHint().height());
227 // volume_medium->setMinimumWidth((int)(volume_medium->sizeHint().width() / 2)); 237 // volume_medium->setMinimumWidth((int)(volume_medium->sizeHint().width() / 2));
228 volume_high = new QLineEdit(this); 238 volume_high = new QLineEdit(mainW);
229 // volume_high->setFixedHeight(volume_high->sizeHint().height()); 239 // volume_high->setFixedHeight(volume_high->sizeHint().height());
230 // volume_high->setMinimumWidth((int)(volume_high->sizeHint().width() / 2)); 240 // volume_high->setMinimumWidth((int)(volume_high->sizeHint().width() / 2));
231 l6->addWidget(volume_off); 241 l6->addWidget(volume_off);
232 l6->addWidget(volume_medium); 242 l6->addWidget(volume_medium);
233 l6->addWidget(volume_high); 243 l6->addWidget(volume_high);
234 244
235 initstr[0]->setFocus(); 245 initstr[0]->setFocus();
236 246
237 l1->addColSpacing(0, 10); 247 l1->addColSpacing(0, 10);
238 l1->addColSpacing(3, 10); 248 l1->addColSpacing(3, 10);
239 l1->addRowSpacing(0, 5); 249 l1->addRowSpacing(0, 5);
240 l1->addRowSpacing(GRIDROWS, 5); 250 l1->addRowSpacing(GRIDROWS, 5);
241 251
242 //set stuff from gpppdata 252 //set stuff from gpppdata
243 preinitslider->setValue(_pppdata->modemPreInitDelay()); 253 preinitslider->setValue(_pppdata->modemPreInitDelay());
244 lpreinitslider->setNum(_pppdata->modemPreInitDelay()); 254 lpreinitslider->setNum(_pppdata->modemPreInitDelay());
245 for(int i = 0; i < PPPData::NumInitStrings; i++) 255 for(int i = 0; i < PPPData::NumInitStrings; i++)
246 initstr[i]->setText(_pppdata->modemInitStr(i)); 256 initstr[i]->setText(_pppdata->modemInitStr(i));
247 initslider->setValue(_pppdata->modemInitDelay()); 257 initslider->setValue(_pppdata->modemInitDelay());
248 linitslider->setNum(_pppdata->modemInitDelay()); 258 linitslider->setNum(_pppdata->modemInitDelay());
249 initresp->setText(_pppdata->modemInitResp()); 259 initresp->setText(_pppdata->modemInitResp());
250 260
251 durationslider->setValue(_pppdata->modemToneDuration()); 261 durationslider->setValue(_pppdata->modemToneDuration());
252 ldurationslider->setNum(_pppdata->modemToneDuration()); 262 ldurationslider->setNum(_pppdata->modemToneDuration());
253 263
254 nodetectdialtone->setText(_pppdata->modemNoDialToneDetectionStr()); 264 nodetectdialtone->setText(_pppdata->modemNoDialToneDetectionStr());
255 dialstr->setText(_pppdata->modemDialStr()); 265 dialstr->setText(_pppdata->modemDialStr());
256 connectresp->setText(_pppdata->modemConnectResp()); 266 connectresp->setText(_pppdata->modemConnectResp());
257 busyresp->setText(_pppdata->modemBusyResp()); 267 busyresp->setText(_pppdata->modemBusyResp());
258 nocarrierresp->setText(_pppdata->modemNoCarrierResp()); 268 nocarrierresp->setText(_pppdata->modemNoCarrierResp());
259 nodialtoneresp->setText(_pppdata->modemNoDialtoneResp()); 269 nodialtoneresp->setText(_pppdata->modemNoDialtoneResp());
260 270
261 escapestr->setText(_pppdata->modemEscapeStr()); 271 escapestr->setText(_pppdata->modemEscapeStr());
262 escaperesp->setText(_pppdata->modemEscapeResp()); 272 escaperesp->setText(_pppdata->modemEscapeResp());
263 273
264 hangupstr->setText(_pppdata->modemHangupStr()); 274 hangupstr->setText(_pppdata->modemHangupStr());
265 hangupresp->setText(_pppdata->modemHangupResp()); 275 hangupresp->setText(_pppdata->modemHangupResp());
266 276
267 answerstr->setText(_pppdata->modemAnswerStr()); 277 answerstr->setText(_pppdata->modemAnswerStr());
268 ringresp->setText(_pppdata->modemRingResp()); 278 ringresp->setText(_pppdata->modemRingResp());
269 answerresp->setText(_pppdata->modemAnswerResp()); 279 answerresp->setText(_pppdata->modemAnswerResp());
270 280
271 slider->setValue(_pppdata->modemEscapeGuardTime()); 281 slider->setValue(_pppdata->modemEscapeGuardTime());
272 lslider->setNum(_pppdata->modemEscapeGuardTime()); 282 lslider->setNum(_pppdata->modemEscapeGuardTime());
273 283
274 volume_off->setText(_pppdata->volumeOff()); 284 volume_off->setText(_pppdata->volumeOff());
275 volume_medium->setText(_pppdata->volumeMedium()); 285 volume_medium->setText(_pppdata->volumeMedium());
276 volume_high->setText(_pppdata->volumeHigh()); 286 volume_high->setText(_pppdata->volumeHigh());
277} 287}
278 288
279 289
280void ModemCommands::slotOk() { 290void ModemCommands::slotOk() {
281 _pppdata->setModemPreInitDelay(lpreinitslider->text().toInt()); 291 _pppdata->setModemPreInitDelay(lpreinitslider->text().toInt());
282 for(int i = 0; i < PPPData::NumInitStrings; i++) 292 for(int i = 0; i < PPPData::NumInitStrings; i++)
283 _pppdata->setModemInitStr(i, initstr[i]->text()); 293 _pppdata->setModemInitStr(i, initstr[i]->text());
284 _pppdata->setModemInitResp(initresp->text()); 294 _pppdata->setModemInitResp(initresp->text());
285 _pppdata->setModemInitDelay(linitslider->text().toInt()); 295 _pppdata->setModemInitDelay(linitslider->text().toInt());
286 296
287 _pppdata->setModemToneDuration(ldurationslider->text().toInt()); 297 _pppdata->setModemToneDuration(ldurationslider->text().toInt());
288 _pppdata->setModemNoDialToneDetectionStr(nodetectdialtone->text()); 298 _pppdata->setModemNoDialToneDetectionStr(nodetectdialtone->text());
289 _pppdata->setModemDialStr(dialstr->text()); 299 _pppdata->setModemDialStr(dialstr->text());
290 _pppdata->setModemConnectResp(connectresp->text()); 300 _pppdata->setModemConnectResp(connectresp->text());
291 _pppdata->setModemBusyResp(busyresp->text()); 301 _pppdata->setModemBusyResp(busyresp->text());
292 _pppdata->setModemNoCarrierResp(nocarrierresp->text()); 302 _pppdata->setModemNoCarrierResp(nocarrierresp->text());
293 _pppdata->setModemNoDialtoneResp(nodialtoneresp->text()); 303 _pppdata->setModemNoDialtoneResp(nodialtoneresp->text());
294 304
295 _pppdata->setModemEscapeStr(escapestr->text()); 305 _pppdata->setModemEscapeStr(escapestr->text());
296 _pppdata->setModemEscapeResp(escaperesp->text()); 306 _pppdata->setModemEscapeResp(escaperesp->text());
297 _pppdata->setModemEscapeGuardTime(lslider->text().toInt()); 307 _pppdata->setModemEscapeGuardTime(lslider->text().toInt());
298 _pppdata->setModemHangupStr(hangupstr->text()); 308 _pppdata->setModemHangupStr(hangupstr->text());
299 _pppdata->setModemHangupResp(hangupresp->text()); 309 _pppdata->setModemHangupResp(hangupresp->text());
300 310
301 _pppdata->setModemAnswerStr(answerstr->text()); 311 _pppdata->setModemAnswerStr(answerstr->text());
302 _pppdata->setModemRingResp(ringresp->text()); 312 _pppdata->setModemRingResp(ringresp->text());
303 _pppdata->setModemAnswerResp(answerresp->text()); 313 _pppdata->setModemAnswerResp(answerresp->text());
304 314
305 _pppdata->setVolumeHigh(volume_high->text()); 315 _pppdata->setVolumeHigh(volume_high->text());
306 _pppdata->setVolumeMedium(volume_medium->text()); 316 _pppdata->setVolumeMedium(volume_medium->text());
307 _pppdata->setVolumeOff(volume_off->text()); 317 _pppdata->setVolumeOff(volume_off->text());
308 318
309 _pppdata->save(); 319 _pppdata->save();
310 accept(); 320 QDialog::accept();
321}
322
323void ModemCommands::accept()
324{
325 slotOk();
311} 326}
312 327
313 328
314void ModemCommands::slotCancel() { 329void ModemCommands::slotCancel() {
315 reject(); 330 reject();
316} 331}
317 332
318//#include "modemcmds.moc" 333//#include "modemcmds.moc"
diff --git a/noncore/settings/networksettings/ppp/modemcmds.h b/noncore/settings/networksettings/ppp/modemcmds.h
index ef69fec..81d67f4 100644
--- a/noncore/settings/networksettings/ppp/modemcmds.h
+++ b/noncore/settings/networksettings/ppp/modemcmds.h
@@ -1,120 +1,121 @@
1 1
2/* 2/*
3 * 3 *
4 * kPPP: A front end for pppd for the KDE project 4 * kPPP: A front end for pppd for the KDE project
5 * 5 *
6 * $Id$ 6 * $Id$
7 * 7 *
8 * Copyright (C) 1997 Bernd Johannes Wuebben 8 * Copyright (C) 1997 Bernd Johannes Wuebben
9 * wuebben@math.cornell.edu 9 * wuebben@math.cornell.edu
10 * 10 *
11 * based on EzPPP: 11 * based on EzPPP:
12 * Copyright (C) 1997 Jay Painter 12 * Copyright (C) 1997 Jay Painter
13 * 13 *
14 * This library is free software; you can redistribute it and/or 14 * This library is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU Library General Public 15 * modify it under the terms of the GNU Library General Public
16 * License as published by the Free Software Foundation; either 16 * License as published by the Free Software Foundation; either
17 * version 2 of the License, or (at your option) any later version. 17 * version 2 of the License, or (at your option) any later version.
18 * 18 *
19 * This library is distributed in the hope that it will be useful, 19 * This library is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * Library General Public License for more details. 22 * Library General Public License for more details.
23 * 23 *
24 * You should have received a copy of the GNU Library General Public 24 * You should have received a copy of the GNU Library General Public
25 * License along with this program; if not, write to the Free 25 * License along with this program; if not, write to the Free
26 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 26 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 * 27 *
28 */ 28 */
29 29
30 30
31#ifndef _MODEMCMDS_H_ 31#ifndef _MODEMCMDS_H_
32#define _MODEMCMDS_H_ 32#define _MODEMCMDS_H_
33 33
34#include <qgroupbox.h> 34#include <qgroupbox.h>
35#include <qdialog.h> 35#include <qdialog.h>
36#include <qlineedit.h> 36#include <qlineedit.h>
37#include <qpushbutton.h> 37#include <qpushbutton.h>
38#include <qlabel.h> 38#include <qlabel.h>
39#include "pppdata.h" 39#include "pppdata.h"
40 40
41class ModemCommands : public QDialog { 41class ModemCommands : public QDialog {
42 42
43Q_OBJECT 43Q_OBJECT
44 44
45public: 45public:
46 46
47 ModemCommands(PPPData*, QWidget *parent=0, const char *name=0); 47 ModemCommands(PPPData*, QWidget *parent=0, const char *name=0, bool modal=0, WFlags f = 0);
48 ~ModemCommands() {} 48 ~ModemCommands() {}
49 49
50private slots: 50private slots:
51 virtual void accept();
51 void slotCancel(); 52 void slotCancel();
52 void slotOk(); 53 void slotOk();
53 54
54private: 55private:
55 PPPData *_pppdata; 56 PPPData *_pppdata;
56 57
57 QGroupBox *box; 58 QGroupBox *box;
58 59
59 QLineEdit *initstr[int(PPPData::NumInitStrings)]; 60 QLineEdit *initstr[int(PPPData::NumInitStrings)];
60 61
61 QLineEdit *initresp; 62 QLineEdit *initresp;
62 QLabel *label2; 63 QLabel *label2;
63 64
64 QLabel *lpreinitslider; 65 QLabel *lpreinitslider;
65 QLabel *lpreinit; 66 QLabel *lpreinit;
66 67
67 QLabel *linitslider; 68 QLabel *linitslider;
68 QLabel *label3; 69 QLabel *label3;
69 70
70 QLabel *ldurationslider; 71 QLabel *ldurationslider;
71 QLabel *lduration; 72 QLabel *lduration;
72 73
73 QLineEdit *nodetectdialtone; 74 QLineEdit *nodetectdialtone;
74 QLabel *lnodetectdialtone; 75 QLabel *lnodetectdialtone;
75 76
76 QLineEdit *dialstr; 77 QLineEdit *dialstr;
77 QLabel *label4; 78 QLabel *label4;
78 79
79 QLineEdit *connectresp; 80 QLineEdit *connectresp;
80 QLabel *label5; 81 QLabel *label5;
81 82
82 QLineEdit *busyresp; 83 QLineEdit *busyresp;
83 QLabel *label6; 84 QLabel *label6;
84 85
85 QLineEdit *nocarrierresp; 86 QLineEdit *nocarrierresp;
86 QLabel *label7; 87 QLabel *label7;
87 88
88 QLineEdit *nodialtoneresp; 89 QLineEdit *nodialtoneresp;
89 QLabel *label8; 90 QLabel *label8;
90 91
91 QLineEdit *hangupstr; 92 QLineEdit *hangupstr;
92 QLabel *label9; 93 QLabel *label9;
93 94
94 QLineEdit *hangupresp; 95 QLineEdit *hangupresp;
95 QLabel *label10; 96 QLabel *label10;
96 97
97 QLineEdit *answerstr; 98 QLineEdit *answerstr;
98 QLabel *label11; 99 QLabel *label11;
99 100
100 QLineEdit *ringresp; 101 QLineEdit *ringresp;
101 QLabel *label12; 102 QLabel *label12;
102 103
103 QLineEdit *answerresp; 104 QLineEdit *answerresp;
104 QLabel *label13; 105 QLabel *label13;
105 106
106 QLineEdit *escapestr; 107 QLineEdit *escapestr;
107 QLabel *label14; 108 QLabel *label14;
108 109
109 QLineEdit *escaperesp; 110 QLineEdit *escaperesp;
110 QLabel *label15; 111 QLabel *label15;
111 112
112 QLabel *lslider; 113 QLabel *lslider;
113 QLabel *label16; 114 QLabel *label16;
114 115
115 QLineEdit *volume_off, *volume_medium, *volume_high; 116 QLineEdit *volume_off, *volume_medium, *volume_high;
116}; 117};
117#endif 118#endif
118 119
119 120
120 121
diff --git a/noncore/settings/networksettings/ppp/modeminfo.cpp b/noncore/settings/networksettings/ppp/modeminfo.cpp
index 0bec186..dbb26db 100644
--- a/noncore/settings/networksettings/ppp/modeminfo.cpp
+++ b/noncore/settings/networksettings/ppp/modeminfo.cpp
@@ -1,296 +1,294 @@
1/* 1/*
2 * kPPP: A front end for pppd for the KDE project 2 * kPPP: A front end for pppd for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * This file contributed by: Markus Wuebben, mwuebben@fiwi02.wiwi.uni-tuebingen.de 9 * This file contributed by: Markus Wuebben, mwuebben@fiwi02.wiwi.uni-tuebingen.de
10 * 10 *
11 * 11 *
12 * This library is free software; you can redistribute it and/or 12 * This library is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This library is distributed in the hope that it will be useful, 17 * This library is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#include <unistd.h> 27#include <unistd.h>
28#include <qregexp.h> 28#include <qregexp.h>
29#include <qlayout.h> 29#include <qlayout.h>
30// #include <kwin.h> 30// #include <kwin.h>
31// #include <kmessagebox.h> 31// #include <kmessagebox.h>
32// #include <kapplication.h> 32// #include <kapplication.h>
33#include <qmessagebox.h> 33#include <qmessagebox.h>
34#include <qapplication.h> 34#include <qapplication.h>
35#include "modeminfo.h" 35#include "modeminfo.h"
36#include "modem.h" 36#include "modem.h"
37//#include <klocale.h>
38#define i18n QObject::tr
39 37
40ModemTransfer::ModemTransfer(Modem *mo, QWidget *parent, const char *name) 38ModemTransfer::ModemTransfer(Modem *mo, QWidget *parent, const char *name)
41 : QDialog(parent, name,TRUE, WStyle_Customize|WStyle_NormalBorder), 39 : QDialog(parent, name,TRUE, WStyle_Customize|WStyle_NormalBorder),
42 _modem(mo) 40 _modem(mo)
43{ 41{
44 setCaption(i18n("ATI Query")); 42 setCaption(QObject::tr("ATI Query"));
45// KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); 43// KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon());
46 44
47 QVBoxLayout *tl = new QVBoxLayout(this, 10, 10); 45 QVBoxLayout *tl = new QVBoxLayout(this, 10, 10);
48 46
49 progressBar = new QProgressBar(this, "bar"); 47 progressBar = new QProgressBar(this, "bar");
50 progressBar->setTotalSteps(8); 48 progressBar->setTotalSteps(8);
51 49
52 statusBar = new QLabel(this,"sBar"); 50 statusBar = new QLabel(this,"sBar");
53 statusBar->setFrameStyle(QFrame::Panel|QFrame::Sunken); 51 statusBar->setFrameStyle(QFrame::Panel|QFrame::Sunken);
54 statusBar->setAlignment(AlignCenter); 52 statusBar->setAlignment(AlignCenter);
55 53
56 // This is a rather complicated case. Since we do not know which 54 // This is a rather complicated case. Since we do not know which
57 // message is the widest in the national language, we'd to 55 // message is the widest in the national language, we'd to
58 // search all these messages. This is a little overkill, so I take 56 // search all these messages. This is a little overkill, so I take
59 // the longest english message, translate it and give it additional 57 // the longest english message, translate it and give it additional
60 // 20 percent space. Hope this is enough. 58 // 20 percent space. Hope this is enough.
61 statusBar->setText(i18n("Unable to create modem lock file.")); 59 statusBar->setText(QObject::tr("Unable to create modem lock file."));
62 statusBar->setFixedWidth((statusBar->sizeHint().width() * 12) / 10); 60 statusBar->setFixedWidth((statusBar->sizeHint().width() * 12) / 10);
63 statusBar->setFixedHeight(statusBar->sizeHint().height() + 4); 61 statusBar->setFixedHeight(statusBar->sizeHint().height() + 4);
64 62
65 // set original text 63 // set original text
66 statusBar->setText(i18n("Looking for modem...")); 64 statusBar->setText(QObject::tr("Looking for modem..."));
67 progressBar->setFixedHeight(statusBar->minimumSize().height()); 65 progressBar->setFixedHeight(statusBar->minimumSize().height());
68 tl->addWidget(progressBar); 66 tl->addWidget(progressBar);
69 tl->addWidget(statusBar); 67 tl->addWidget(statusBar);
70 68
71 cancel = new QPushButton(i18n("Cancel"), this); 69 cancel = new QPushButton(QObject::tr("Cancel"), this);
72 cancel->setFocus(); 70 cancel->setFocus();
73 connect(cancel, SIGNAL(clicked()), SLOT(cancelbutton())); 71 connect(cancel, SIGNAL(clicked()), SLOT(cancelbutton()));
74 72
75 QHBoxLayout *l1 = new QHBoxLayout; 73 QHBoxLayout *l1 = new QHBoxLayout;
76 tl->addLayout(l1); 74 tl->addLayout(l1);
77 l1->addStretch(1); 75 l1->addStretch(1);
78 l1->addWidget(cancel); 76 l1->addWidget(cancel);
79 77
80 setFixedSize(sizeHint()); 78 setFixedSize(sizeHint());
81 79
82 step = 0; 80 step = 0;
83 81
84 //////////////////////////////////////////////// 82 ////////////////////////////////////////////////
85 83
86 timeout_timer = new QTimer(this); 84 timeout_timer = new QTimer(this);
87 connect(timeout_timer, SIGNAL(timeout()), SLOT(time_out_slot())); 85 connect(timeout_timer, SIGNAL(timeout()), SLOT(time_out_slot()));
88 86
89 scripttimer = new QTimer(this); 87 scripttimer = new QTimer(this);
90 connect(scripttimer, SIGNAL(timeout()), SLOT(do_script())); 88 connect(scripttimer, SIGNAL(timeout()), SLOT(do_script()));
91 89
92 timeout_timer->start(15000,TRUE); // 15 secs single shot 90 timeout_timer->start(15000,TRUE); // 15 secs single shot
93 QTimer::singleShot(500, this, SLOT(init())); 91 QTimer::singleShot(500, this, SLOT(init()));
94 92
95} 93}
96 94
97 95
98void ModemTransfer::ati_done() { 96void ModemTransfer::ati_done() {
99 scripttimer->stop(); 97 scripttimer->stop();
100 timeout_timer->stop(); 98 timeout_timer->stop();
101 _modem->closetty(); 99 _modem->closetty();
102 _modem->unlockdevice(); 100 _modem->unlockdevice();
103 hide(); 101 hide();
104 102
105 // open the result window 103 // open the result window
106 ModemInfo *mi = new ModemInfo(this); 104 ModemInfo *mi = new ModemInfo(this);
107 for(int i = 0; i < NUM_OF_ATI; i++) 105 for(int i = 0; i < NUM_OF_ATI; i++)
108 mi->setAtiString(i, ati_query_strings[i]); 106 mi->setAtiString(i, ati_query_strings[i]);
109 mi->showMaximized(); 107 mi->showMaximized();
110 mi->exec(); 108 mi->exec();
111 delete mi; 109 delete mi;
112 110
113 accept(); 111 accept();
114} 112}
115 113
116 114
117void ModemTransfer::time_out_slot() { 115void ModemTransfer::time_out_slot() {
118 timeout_timer->stop(); 116 timeout_timer->stop();
119 scripttimer->stop(); 117 scripttimer->stop();
120 118
121 QMessageBox::warning(this, tr("Error"), i18n("Modem Query timed out.")); 119 QMessageBox::warning(this, tr("Error"), QObject::tr("Modem Query timed out."));
122 reject(); 120 reject();
123} 121}
124 122
125 123
126void ModemTransfer::init() { 124void ModemTransfer::init() {
127 125
128 qApp->processEvents(); 126 qApp->processEvents();
129 127
130 int lock = _modem->lockdevice(); 128 int lock = _modem->lockdevice();
131 if (lock == 1) { 129 if (lock == 1) {
132 130
133 statusBar->setText(i18n("Modem device is locked.")); 131 statusBar->setText(QObject::tr("Modem device is locked."));
134 return; 132 return;
135 } 133 }
136 134
137 if (lock == -1) { 135 if (lock == -1) {
138 136
139 statusBar->setText(i18n("Unable to create modem lock file.")); 137 statusBar->setText(QObject::tr("Unable to create modem lock file."));
140 return; 138 return;
141 } 139 }
142 140
143 141
144 if(_modem->opentty()) { 142 if(_modem->opentty()) {
145 if(_modem->hangup()) { 143 if(_modem->hangup()) {
146 usleep(100000); // wait 0.1 secs 144 usleep(100000); // wait 0.1 secs
147 _modem->writeLine("ATE0Q1V1"); // E0 don't echo the commands I send ... 145 _modem->writeLine("ATE0Q1V1"); // E0 don't echo the commands I send ...
148 146
149 statusBar->setText(i18n("Modem Ready")); 147 statusBar->setText(QObject::tr("Modem Ready"));
150 qApp->processEvents(); 148 qApp->processEvents();
151 usleep(100000); // wait 0.1 secs 149 usleep(100000); // wait 0.1 secs
152 qApp->processEvents(); 150 qApp->processEvents();
153 scripttimer->start(1000); // this one does the ati query 151 scripttimer->start(1000); // this one does the ati query
154 152
155 // clear modem buffer 153 // clear modem buffer
156 _modem->flush(); 154 _modem->flush();
157 155
158 _modem->notify(this, SLOT(readChar(unsigned char))); 156 _modem->notify(this, SLOT(readChar(unsigned char)));
159 return; 157 return;
160 } 158 }
161 } 159 }
162 160
163 // opentty() or hangup() failed 161 // opentty() or hangup() failed
164 statusBar->setText(_modem->modemMessage()); 162 statusBar->setText(_modem->modemMessage());
165 step = 99; // wait until cancel is pressed 163 step = 99; // wait until cancel is pressed
166 _modem->unlockdevice(); 164 _modem->unlockdevice();
167} 165}
168 166
169 167
170void ModemTransfer::do_script() { 168void ModemTransfer::do_script() {
171 QString msg; 169 QString msg;
172 QString query; 170 QString query;
173 171
174 switch(step) { 172 switch(step) {
175 case 0: 173 case 0:
176 readtty(); 174 readtty();
177 statusBar->setText("ATI..."); 175 statusBar->setText("ATI...");
178 progressBar->setProgress( progressBar->progress() + 1); 176 progressBar->setProgress( progressBar->progress() + 1);
179 _modem->writeLine("ATI\n"); 177 _modem->writeLine("ATI\n");
180 break; 178 break;
181 179
182 case 1: 180 case 1:
183 case 2: 181 case 2:
184 case 3: 182 case 3:
185 case 4: 183 case 4:
186 case 5: 184 case 5:
187 case 6: 185 case 6:
188 case 7: 186 case 7:
189 readtty(); 187 readtty();
190 msg.sprintf("ATI %d ...", step); 188 msg.sprintf("ATI %d ...", step);
191 query.sprintf("ATI%d\n", step); 189 query.sprintf("ATI%d\n", step);
192 statusBar->setText(msg); 190 statusBar->setText(msg);
193 progressBar->setProgress( progressBar->progress() + 1); 191 progressBar->setProgress( progressBar->progress() + 1);
194 _modem->writeLine(query.local8Bit()); 192 _modem->writeLine(query.local8Bit());
195 break; 193 break;
196 194
197 default: 195 default:
198 readtty(); 196 readtty();
199 ati_done(); 197 ati_done();
200 } 198 }
201 step++; 199 step++;
202} 200}
203 201
204void ModemTransfer::readChar(unsigned char c) { 202void ModemTransfer::readChar(unsigned char c) {
205 if(readbuffer.length() < 255) 203 if(readbuffer.length() < 255)
206 readbuffer += c; 204 readbuffer += c;
207} 205}
208 206
209void ModemTransfer::readtty() { 207void ModemTransfer::readtty() {
210 208
211 if (step == 0) 209 if (step == 0)
212 return; 210 return;
213 211
214 readbuffer.replace(QRegExp("[\n\r]")," "); // remove stray \n and \r 212 readbuffer.replace(QRegExp("[\n\r]")," "); // remove stray \n and \r
215 readbuffer = readbuffer.stripWhiteSpace(); // strip of leading or trailing white 213 readbuffer = readbuffer.stripWhiteSpace(); // strip of leading or trailing white
216 // space 214 // space
217 215
218 if(step <= NUM_OF_ATI) 216 if(step <= NUM_OF_ATI)
219 ati_query_strings[step-1] = readbuffer.copy(); 217 ati_query_strings[step-1] = readbuffer.copy();
220 218
221 readbuffer = ""; 219 readbuffer = "";
222} 220}
223 221
224 222
225void ModemTransfer::cancelbutton() { 223void ModemTransfer::cancelbutton() {
226 scripttimer->stop(); 224 scripttimer->stop();
227 _modem->stop(); 225 _modem->stop();
228 timeout_timer->stop(); 226 timeout_timer->stop();
229 227
230 statusBar->setText(i18n("One moment please...")); 228 statusBar->setText(QObject::tr("One moment please..."));
231 qApp->processEvents(); 229 qApp->processEvents();
232 230
233 _modem->hangup(); 231 _modem->hangup();
234 232
235 _modem->closetty(); 233 _modem->closetty();
236 _modem->unlockdevice(); 234 _modem->unlockdevice();
237 reject(); 235 reject();
238} 236}
239 237
240 238
241void ModemTransfer::closeEvent( QCloseEvent *e ) { 239void ModemTransfer::closeEvent( QCloseEvent *e ) {
242 cancelbutton(); 240 cancelbutton();
243 e->accept(); 241 e->accept();
244} 242}
245 243
246 244
247ModemInfo::ModemInfo(QWidget *parent, const char* name) 245ModemInfo::ModemInfo(QWidget *parent, const char* name)
248 : QDialog(parent, name, TRUE, WStyle_Customize|WStyle_NormalBorder) 246 : QDialog(parent, name, TRUE, WStyle_Customize|WStyle_NormalBorder)
249{ 247{
250 QString label_text; 248 QString label_text;
251 249
252 setCaption(i18n("Modem Query Results")); 250 setCaption(QObject::tr("Modem Query Results"));
253 // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); 251 // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon());
254 252
255 QVBoxLayout *tl = new QVBoxLayout(this, 10, 10); 253 QVBoxLayout *tl = new QVBoxLayout(this, 10, 10);
256 254
257 QGridLayout *l1 = new QGridLayout(NUM_OF_ATI, 2, 5); 255 QGridLayout *l1 = new QGridLayout(NUM_OF_ATI, 2, 5);
258 tl->addLayout(l1, 1); 256 tl->addLayout(l1, 1);
259 for(int i = 0 ; i < NUM_OF_ATI ; i++) { 257 for(int i = 0 ; i < NUM_OF_ATI ; i++) {
260 258
261 label_text = ""; 259 label_text = "";
262 if ( i == 0) 260 if ( i == 0)
263 label_text.sprintf("ATI :"); 261 label_text.sprintf("ATI :");
264 else 262 else
265 label_text.sprintf("ATI %d:", i ); 263 label_text.sprintf("ATI %d:", i );
266 264
267 ati_label[i] = new QLabel(label_text, this); 265 ati_label[i] = new QLabel(label_text, this);
268 l1->addWidget(ati_label[i], i, 0); 266 l1->addWidget(ati_label[i], i, 0);
269 267
270 ati_label_result[i] = new QLineEdit(this); 268 ati_label_result[i] = new QLineEdit(this);
271 ati_label_result[i]->setMinimumWidth(fontMetrics().width('H') * 24); 269 ati_label_result[i]->setMinimumWidth(fontMetrics().width('H') * 24);
272 l1->addWidget(ati_label_result[i], i, 1); 270 l1->addWidget(ati_label_result[i], i, 1);
273 } 271 }
274 //tl->addSpacing(1); 272 //tl->addSpacing(1);
275 273
276 QHBoxLayout *l2 = new QHBoxLayout; 274 QHBoxLayout *l2 = new QHBoxLayout;
277 QPushButton *ok = new QPushButton(i18n("Close"), this); 275 QPushButton *ok = new QPushButton(QObject::tr("Close"), this);
278 ok->setDefault(TRUE); 276 ok->setDefault(TRUE);
279 ok->setFocus(); 277 ok->setFocus();
280 278
281 tl->addLayout(l2); 279 tl->addLayout(l2);
282 l2->addStretch(1); 280 l2->addStretch(1);
283 281
284 connect(ok, SIGNAL(clicked()), SLOT(accept())); 282 connect(ok, SIGNAL(clicked()), SLOT(accept()));
285 l2->addWidget(ok); 283 l2->addWidget(ok);
286 284
287 setMinimumSize(sizeHint()); 285 setMinimumSize(sizeHint());
288} 286}
289 287
290 288
291void ModemInfo::setAtiString(int i, QString s) { 289void ModemInfo::setAtiString(int i, QString s) {
292 if(i < NUM_OF_ATI) 290 if(i < NUM_OF_ATI)
293 ati_label_result[i]->setText(s); 291 ati_label_result[i]->setText(s);
294} 292}
295 293
296//#include "modeminfo.moc" 294//#include "modeminfo.moc"
diff --git a/noncore/settings/networksettings/ppp/ppp.pro b/noncore/settings/networksettings/ppp/ppp.pro
index fc89f35..84acd0e 100644
--- a/noncore/settings/networksettings/ppp/ppp.pro
+++ b/noncore/settings/networksettings/ppp/ppp.pro
@@ -1,18 +1,17 @@
1#TEMPLATE = app 1#TEMPLATE = app
2# 2#
3TEMPLATE = lib 3TEMPLATE = lib
4#CONFIG += qt warn_on release 4#CONFIG += qt warn_on release
5 CONFIG += qt warn_on debug 5 CONFIG += qt warn_on debug
6DESTDIR = $(OPIEDIR)/plugins/networksettings 6DESTDIR = $(OPIEDIR)/plugins/networksettings
7 HEADERS = pppmodule.h devices.h modem.h modeminfo.h pppdata.h kpppconfig.h pppdata.h runtests.h general.h modemcmds.h conwindow.h accounts.h connect.h edit.h scriptedit.h pppdargs.h iplined.h pwentry.h pppconfig.h interfaceinformationppp.h interfaceppp.h authwidget.h 7 HEADERS = pppmodule.h modem.h modeminfo.h pppdata.h kpppconfig.h pppdata.h runtests.h general.h modemcmds.h conwindow.h accounts.h connect.h edit.h scriptedit.h pppdargs.h iplined.h pwentry.h pppconfig.h interfaceinformationppp.h interfaceppp.h authwidget.h chooserwidget.h devices.h
8 SOURCES = pppmodule.cpp modem.cpp modeminfo.cpp pppdata.cpp runtests.cpp general.cpp modemcmds.cpp conwindow.cpp accounts.cpp connect.cpp edit.cpp scriptedit.cpp pppdargs.cpp iplined.cpp pwentry.cpp pppconfig.cpp interfaceinformationppp.cpp interfaceppp.cpp authwidget.cpp 8 SOURCES = pppmodule.cpp modem.cpp modeminfo.cpp pppdata.cpp runtests.cpp general.cpp modemcmds.cpp conwindow.cpp accounts.cpp connect.cpp edit.cpp scriptedit.cpp pppdargs.cpp iplined.cpp pwentry.cpp pppconfig.cpp interfaceinformationppp.cpp interfaceppp.cpp authwidget.cpp chooserwidget.cpp devices.cpp
9 INCLUDEPATH+= $(OPIEDIR)/include ../ ../interfaces/ 9 INCLUDEPATH+= $(OPIEDIR)/include ../ ../interfaces/
10 DEPENDPATH+= $(OPIEDIR)/include 10 DEPENDPATH+= $(OPIEDIR)/include
11LIBS += -lqpe -L../interfaces/ -linterfaces 11LIBS += -lqpe -L../interfaces/ -linterfaces
12 INTERFACES=
13 TARGET = kppp 12 TARGET = kppp
14 VERSION = 1.0.0 13 VERSION = 1.0.0
15 14
16 15
17 16
18include ( $(OPIEDIR)/include.pro ) 17include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings/ppp/pppconfig.cpp b/noncore/settings/networksettings/ppp/pppconfig.cpp
index 5fa7d3f..97baf31 100644
--- a/noncore/settings/networksettings/ppp/pppconfig.cpp
+++ b/noncore/settings/networksettings/ppp/pppconfig.cpp
@@ -1,70 +1,75 @@
1 1
2#include <qlayout.h> 2#include <qlayout.h>
3#include <qmessagebox.h> 3#include <qmessagebox.h>
4#include <qtabwidget.h> 4#include <qtabwidget.h>
5 5
6#include "accounts.h" 6#include "accounts.h"
7#include "devices.h"
7#include "general.h" 8#include "general.h"
8#include "interfaceppp.h" 9#include "interfaceppp.h"
9#include "modem.h" 10#include "modem.h"
10#include "pppconfig.h" 11#include "pppconfig.h"
11#include "pppdata.h" 12#include "pppdata.h"
12#include "runtests.h" 13#include "runtests.h"
13 14
14PPPConfigWidget::PPPConfigWidget( InterfacePPP* iface, QWidget *parent, 15PPPConfigWidget::PPPConfigWidget( InterfacePPP* iface, QWidget *parent,
15 const char *name, 16 const char *name,
16 bool modal, WFlags fl ) 17 bool modal, WFlags fl )
17 : QDialog(parent, name, modal, fl) 18 : QDialog(parent, name, modal, fl)
18{ 19{
19 setCaption(tr("Configure Modem")); 20 setCaption(tr("Configure Modem"));
20 int result = runTests(); 21 int result = runTests();
21 if(result == TEST_CRITICAL){ 22 if(result == TEST_CRITICAL){
22 QMessageBox::critical(0, tr("Modem failure"), tr("A critical failure appeard while testing the modem") ); 23 QMessageBox::critical(0, tr("Modem failure"), tr("A critical failure appeard while testing the modem") );
23 return; 24 return;
24 } 25 }
25 26
26 interface = iface; 27 interface = iface;
27 qDebug("PPPConfigWidget::PPPConfigWidget"); 28 qDebug("PPPConfigWidget::PPPConfigWidget");
28 qDebug(" interface->getHardwareName >%s<", interface->getHardwareName().latin1()); 29 qDebug(" interface->getHardwareName >%s<", interface->getHardwareName().latin1());
29 30
30 qDebug(" _pppdata->accname >%s<",interface->data()->accname().latin1()); 31 qDebug(" _pppdata->accname >%s<",interface->data()->accname().latin1());
31 qDebug(" _pppdata->currentAccountID() >%i<",interface->data()->currentAccountID()); 32
32 33
33 QVBoxLayout *layout = new QVBoxLayout( this ); 34 QVBoxLayout *layout = new QVBoxLayout( this );
34 layout->setSpacing( 0 ); 35 layout->setSpacing( 0 );
35 layout->setMargin( 1 ); 36 layout->setMargin( 1 );
36 tabWindow = new QTabWidget( this, "tabWidget" ); 37 tabWindow = new QTabWidget( this, "tabWidget" );
37 layout->addWidget( tabWindow ); 38 layout->addWidget( tabWindow );
38 39
39 accounts = new AccountWidget( interface->data(), tabWindow, "accounts" ); 40 accounts = new AccountWidget( interface->data(), tabWindow, "accounts", Qt::WStyle_ContextHelp );
40 tabWindow->addTab( accounts, tr("&Accounts") ); 41 tabWindow->addTab( accounts, tr("&Accounts") );
41 modem1 = new ModemWidget( interface, tabWindow, "modem1" ); 42 devices = new DevicesWidget( interface, tabWindow, "devices", Qt::WStyle_ContextHelp );
42 tabWindow->addTab( modem1, tr("&Device") ); 43 tabWindow->addTab( devices, tr("&Devices") );
43 modem2 = new ModemWidget2( interface, tabWindow, "modem2" ); 44
44 tabWindow->addTab( modem2, tr("&Modem") ); 45//OLD:
46// modem1 = new ModemWidget( interface, tabWindow, "modem1" );
47// tabWindow->addTab( modem1, tr("&Device") );
48// modem2 = new ModemWidget2( interface, tabWindow, "modem2" );
49// tabWindow->addTab( modem2, tr("&Modem") );
45 50
46} 51}
47 52
48 53
49PPPConfigWidget::~PPPConfigWidget() 54PPPConfigWidget::~PPPConfigWidget()
50{ 55{
51 56
52} 57}
53 58
54void PPPConfigWidget::accept() 59void PPPConfigWidget::accept()
55{ 60{
56 qDebug("PPPConfigWidget::accept"); 61 qDebug("PPPConfigWidget::accept");
57 qDebug(" _pppdata->accname >%s<",interface->data()->accname().latin1()); 62 qDebug(" _pppdata->accname >%s<",interface->data()->accname().latin1());
58 qDebug(" interface->getHardwareName >%s<", interface->getHardwareName().latin1()); 63 qDebug(" interface->getHardwareName >%s<", interface->getHardwareName().latin1());
59 interface->setInterfaceName( interface->data()->modemDevice() ); 64 interface->setInterfaceName( interface->data()->devname() );
60 interface->setHardwareName( interface->data()->accname() ); 65 interface->setHardwareName( interface->data()->accname() );
61 interface->save(); 66 interface->save();
62 QDialog::accept(); 67 QDialog::accept();
63} 68}
64 69
65 70
66void PPPConfigWidget::reject() 71void PPPConfigWidget::reject()
67{ 72{
68 interface->data()->cancel(); 73 interface->data()->cancel();
69 QDialog::reject(); 74 QDialog::reject();
70} 75}
diff --git a/noncore/settings/networksettings/ppp/pppconfig.h b/noncore/settings/networksettings/ppp/pppconfig.h
index 9bab6fe..4d7912f 100644
--- a/noncore/settings/networksettings/ppp/pppconfig.h
+++ b/noncore/settings/networksettings/ppp/pppconfig.h
@@ -1,37 +1,43 @@
1#ifndef _PPPCONFIG_H_ 1#ifndef _PPPCONFIG_H_
2#define _PPPCONFIG_H_ 2#define _PPPCONFIG_H_
3 3
4#include <qdialog.h> 4#include <qdialog.h>
5 5
6class QTabWidget; 6class QTabWidget;
7//class Interface; 7//class Interface;
8class InterfacePPP; 8class InterfacePPP;
9class AccountWidget; 9class AccountWidget;
10class GeneralWidget; 10class GeneralWidget;
11class DevicesWidget;
12
13//OLD:
11class ModemWidget; 14class ModemWidget;
12class ModemWidget2; 15class ModemWidget2;
13 16
14class PPPConfigWidget : public QDialog { 17class PPPConfigWidget : public QDialog {
15 Q_OBJECT 18 Q_OBJECT
16public: 19public:
17 20
18 PPPConfigWidget( InterfacePPP*, QWidget *parent=0, const char *name=0, 21 PPPConfigWidget( InterfacePPP*, QWidget *parent=0, const char *name=0,
19 bool modal = false, WFlags fl = 0 ); 22 bool modal = false, WFlags fl = 0 );
20 ~PPPConfigWidget(); 23 ~PPPConfigWidget();
21 24
22 25
23protected slots: 26protected slots:
24 virtual void accept(); 27 virtual void accept();
25 virtual void reject(); 28 virtual void reject();
26 29
27 private: 30 private:
28 InterfacePPP *interface; 31 InterfacePPP *interface;
29 QTabWidget *tabWindow; 32 QTabWidget *tabWindow;
30 AccountWidget *accounts; 33 AccountWidget *accounts;
31 GeneralWidget *general; 34 GeneralWidget *general;
35 DevicesWidget* devices;
36
37 //OLD:
32 ModemWidget *modem1; 38 ModemWidget *modem1;
33 ModemWidget2 *modem2; 39 ModemWidget2 *modem2;
34}; 40};
35 41
36 42
37#endif 43#endif
diff --git a/noncore/settings/networksettings/ppp/pppdata.cpp b/noncore/settings/networksettings/ppp/pppdata.cpp
index 8f45e54..f4727c1 100644
--- a/noncore/settings/networksettings/ppp/pppdata.cpp
+++ b/noncore/settings/networksettings/ppp/pppdata.cpp
@@ -1,1302 +1,1495 @@
1/* 1/*
2 * kPPP: A pppd front end for the KDE project 2 * kPPP: A pppd front end for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * based on EzPPP: 9 * based on EzPPP:
10 * Copyright (C) 1997 Jay Painter 10 * Copyright (C) 1997 Jay Painter
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#include "pppdata.h" 27#include "pppdata.h"
28#include "runtests.h" 28#include "runtests.h"
29#include "devices.h" 29//#include "devices.h"
30//#include <klocale.h> 30//#include <klocale.h>
31#define i18n QObject::tr
32#include <qpe/config.h> 31#include <qpe/config.h>
33#include <qmessagebox.h> 32#include <qmessagebox.h>
34#include <qapplication.h> 33#include <qapplication.h>
35// #include <klocale.h> 34// #include <klocale.h>
36// #include <kconfig.h> 35// #include <kconfig.h>
37// #include <kmessagebox.h> 36// #include <kmessagebox.h>
38// #include <kapplication.h> 37// #include <kapplication.h>
39#include <assert.h> 38#include <assert.h>
40 39
41#define SEPARATOR -sseepp- 40#define SEPARATOR -sseepp-
42#define SEP QString("%1SEPARATOR%1") 41#define SEP QString("%1SEPARATOR%1")
43 42
44PPPData::PPPData() 43PPPData::PPPData()
45 : modemDeviceGroup(-1), 44 : passwd(""),
46 passwd(""), 45 _modemName(""),
47 highcount(-1), // start out with no entries 46 highcount(-1), // start out with no entries
48 caccount(-1), // set the current account index also 47 highcountdev(-1), // start out with no entries
48// caccount(-1), // set the current account index also
49 suidprocessid(-1), // process ID of setuid child 49 suidprocessid(-1), // process ID of setuid child
50 pppdisrunning(false), 50 pppdisrunning(false),
51 pppderror(0) 51 pppderror(0)
52{ 52{
53 highcount = readNumConfig(GENERAL_GRP, NUMACCOUNTS_KEY, 0) - 1; 53 highcount = readNumConfig(GENERAL_GRP, NUMACCOUNTS_KEY, 0) - 1;
54 highcountdev = readNumConfig(GENERAL_GRP, NUMDEVICES_KEY, 0) - 1;
55 Config cfg = config();
56 cfg.setGroup(GENERAL_GRP);
57 accountList = cfg.readListEntry(ACCOUNT_LIST, ',' );
58 deviceList = cfg.readListEntry(DEVICESNAMES_LIST, ',' );
59 qDebug("PPPData::PPPData has a accountList %s", accountList.join("---").latin1());
60 qDebug("PPPData::PPPData has a deviceList %s", deviceList.join("---").latin1());
54 61
55 if (highcount > MAX_ACCOUNTS) 62// if (highcount > MAX_ACCOUNTS)
56 highcount = MAX_ACCOUNTS; 63// highcount = MAX_ACCOUNTS;
57 64
58 if(highcount >= 0 && defaultAccount().isEmpty()) { 65 // if(highcount >= 0 && defaultAccount().isEmpty()) {
59 setAccountbyIndex(0); 66// setAccountbyIndex(0);
60 setDefaultAccount(accname()); 67// setDefaultAccount(accname());
61 } else if(!setAccount(defaultAccount())) 68// } else if(!setAccount(defaultAccount()))
62 setDefaultAccount(accname()); 69 setDefaultAccount(accname());
63 70
64 // start out with internal debugging disabled 71 // start out with internal debugging disabled
65 // the user is still free to specify `debug' on his own 72 // the user is still free to specify `debug' on his own
66 setPPPDebug(false); 73 setPPPDebug(false);
67 74
68 ::pppdVersion(&pppdVer, &pppdMod, &pppdPatch); 75 ::pppdVersion(&pppdVer, &pppdMod, &pppdPatch);
69 76
70} 77}
71 78
72Config PPPData::config() 79Config PPPData::config()
73{ 80{
74 return Config("NetworkSetupPPP"); 81 return Config("NetworkSetupPPP");
75} 82}
76 83
77// 84//
78// save configuration 85// save configuration
79// 86//
80void PPPData::save() 87void PPPData::save()
81{ 88{
82 qDebug("PPPData saving data"); 89 qDebug("PPPData saving data");
83 writeConfig(GENERAL_GRP, NUMACCOUNTS_KEY, count()); 90 writeConfig(GENERAL_GRP, NUMACCOUNTS_KEY, count());
91 writeConfig(GENERAL_GRP, NUMDEVICES_KEY, highcountdev + 1);
84 QString key; 92 QString key;
85 QStringList keys; 93 QStringList keys;
86 Config cfg = config(); 94 Config cfg = config();
95 cfg.setGroup(GENERAL_GRP);
96 cfg.writeEntry(ACCOUNT_LIST, accountList, ',' );
97 cfg.writeEntry(DEVICESNAMES_LIST, deviceList, ',' );
98
87 for( QMap<QString,QString>::Iterator it = stringEntries.begin(); 99 for( QMap<QString,QString>::Iterator it = stringEntries.begin();
88 it != stringEntries.end(); ++it ){ 100 it != stringEntries.end(); ++it ){
89 QString val = it.data(); 101 QString val = it.data();
90 key = it.key(); 102 key = it.key();
91// qDebug("saving %s -> %s", key.latin1(), val.latin1() ); 103// qDebug("saving %s -> %s", key.latin1(), val.latin1() );
92 keys = QStringList::split( "SEPARATOR", key ); 104 keys = QStringList::split( "SEPARATOR", key );
93 qDebug("group >%s< key >%s< value >%s<", keys[0].latin1(), keys[1].latin1(), val.latin1() ); 105 //qDebug("group >%s< key >%s< value >%s<", keys[0].latin1(), keys[1].latin1(), val.latin1() );
94 cfg.setGroup(keys[0]); 106 cfg.setGroup(keys[0]);
95 cfg.writeEntry(keys[1], val); 107 cfg.writeEntry(keys[1], val);
96 } 108 }
97 for( QMap<QString,int>::Iterator it = intEntries.begin(); 109 for( QMap<QString,int>::Iterator it = intEntries.begin();
98 it != intEntries.end(); ++it ){ 110 it != intEntries.end(); ++it ){
99 int val = it.data(); 111 int val = it.data();
100 key = it.key(); 112 key = it.key();
101// qDebug("saving %s -> %i", key.latin1(), val ); 113// qDebug("saving %s -> %i", key.latin1(), val );
102 keys = QStringList::split( "SEPARATOR", key ); 114 keys = QStringList::split( "SEPARATOR", key );
103 qDebug("group >%s< key >%s< val %i", keys[0].latin1(), keys[1].latin1(), val ); 115 //qDebug("group >%s< key >%s< val %i", keys[0].latin1(), keys[1].latin1(), val );
104 cfg.setGroup(keys[0]); 116 cfg.setGroup(keys[0]);
105 cfg.writeEntry(keys[1], val); 117 cfg.writeEntry(keys[1], val);
106 } 118 }
107 for( QMap<QString,QStringList>::Iterator it = listEntries.begin(); 119 for( QMap<QString,QStringList>::Iterator it = listEntries.begin();
108 it != listEntries.end(); ++it ){ 120 it != listEntries.end(); ++it ){
109 QStringList val = it.data(); 121 QStringList val = it.data();
110 key = it.key(); 122 key = it.key();
111 QChar sep = sepEntries[key]; 123 QChar sep = sepEntries[key];
112// qDebug("saving %s -> %s", key.latin1(), val.join(sep).latin1() ); 124// qDebug("saving %s -> %s", key.latin1(), val.join(sep).latin1() );
113 keys = QStringList::split( "SEPARATOR", key ); 125 keys = QStringList::split( "SEPARATOR", key );
114 qDebug("group >%s< key >%s<values >%s<", keys[0].latin1(), keys[1].latin1(), val.join(sep).latin1() );
115 cfg.setGroup(keys[0]); 126 cfg.setGroup(keys[0]);
116 cfg.writeEntry(keys[1], val, sep); 127 cfg.writeEntry(keys[1], val, sep);
117 } 128 }
118} 129}
119 130
120 131
121// 132//
122// cancel changes 133// cancel changes
123// 134//
124void PPPData::cancel() { 135void PPPData::cancel() {
125 stringEntries.clear(); 136 stringEntries.clear();
126 intEntries.clear(); 137 intEntries.clear();
127 listEntries.clear(); 138 listEntries.clear();
128} 139}
129 140
130// functions to read/write date to configuration file 141// functions to read/write date to configuration file
131QString PPPData::readConfig(const QString &group, const QString &key, 142QString PPPData::readConfig(const QString &group, const QString &key,
132 const QString &defvalue = "") 143 const QString &defvalue = "")
133{ 144{
134// qDebug("PPPData::readConfig key >%s< group >%s<",key.latin1(), group.latin1()); 145// qDebug("PPPData::readConfig key >%s< group >%s<",key.latin1(), group.latin1());
135 QString idx = SEP.arg(group).arg(key); 146 QString idx = SEP.arg(group).arg(key);
136 if (stringEntries.find(idx) != stringEntries.end()) 147 if (stringEntries.find(idx) != stringEntries.end())
137 return stringEntries[idx]; 148 return stringEntries[idx];
138 Config cfg = config(); 149 Config cfg = config();
139 cfg.setGroup(group); 150 cfg.setGroup(group);
140 return cfg.readEntry(key, defvalue); 151 return cfg.readEntry(key, defvalue);
141} 152}
142 153
143 154
144int PPPData::readNumConfig(const QString &group, const QString &key, 155int PPPData::readNumConfig(const QString &group, const QString &key,
145 int defvalue) 156 int defvalue)
146{ 157{
147 QString idx = SEP.arg(group).arg(key); 158 QString idx = SEP.arg(group).arg(key);
148 if (intEntries.find(idx) != intEntries.end()) 159 if (intEntries.find(idx) != intEntries.end())
149 return intEntries[idx]; 160 return intEntries[idx];
150 Config cfg = config(); 161 Config cfg = config();
151 cfg.setGroup(group); 162 cfg.setGroup(group);
152 return cfg.readNumEntry(key, defvalue); 163 return cfg.readNumEntry(key, defvalue);
153 164
154// if (config) { 165// if (config) {
155// config->setGroup(group); 166// config->setGroup(group);
156// return config->readNumEntry(key, defvalue); 167// return config->readNumEntry(key, defvalue);
157// } else 168// } else
158// return defvalue; 169// return defvalue;
159 170
160} 171}
161 172
162 173
163bool PPPData::readListConfig(const QString &group, const QString &key, 174bool PPPData::readListConfig(const QString &group, const QString &key,
164 QStringList &list, char sep) { 175 QStringList &list, char sep) {
165 list.clear(); 176 list.clear();
166 QString idx = SEP.arg(group).arg(key); 177 QString idx = SEP.arg(group).arg(key);
167 if (listEntries.find(idx) != listEntries.end()){ 178 if (listEntries.find(idx) != listEntries.end()){
168 list = listEntries[idx]; 179 list = listEntries[idx];
169 return true; 180 return true;
170 } 181 }
171 Config cfg = config(); 182 Config cfg = config();
172 cfg.setGroup(group); 183 cfg.setGroup(group);
173 list = cfg.readListEntry(key, sep); 184 list = cfg.readListEntry(key, sep);
174 if (list.count() > 0) return true; 185 if (list.count() > 0) return true;
175 return false; 186 return false;
176 187
177// if (config) { 188// if (config) {
178// config->setGroup(group); 189// config->setGroup(group);
179// list = config->readListEntry(key, sep); 190// list = config->readListEntry(key, sep);
180// return true; 191// return true;
181// } else 192// } else
182// return false; 193// return false;
183} 194}
184 195
185 196
186void PPPData::writeConfig(const QString &group, const QString &key, 197void PPPData::writeConfig(const QString &group, const QString &key,
187 const QString &value) { 198 const QString &value) {
188 stringEntries.insert( SEP.arg(group).arg(key), value ); 199 stringEntries.insert( SEP.arg(group).arg(key), value );
189// if (config) { 200// if (config) {
190// config->setGroup(group); 201// config->setGroup(group);
191// config->writeEntry(key, value); 202// config->writeEntry(key, value);
192// } 203// }
193} 204}
194 205
195 206
196void PPPData::writeConfig(const QString &group, const QString &key, int value) 207void PPPData::writeConfig(const QString &group, const QString &key, int value)
197{ 208{
198 intEntries.insert( SEP.arg(group).arg(key), value ); 209 intEntries.insert( SEP.arg(group).arg(key), value );
199// if (config) { 210// if (config) {
200// config->setGroup(group); 211// config->setGroup(group);
201// config->writeEntry(key, value); 212// config->writeEntry(key, value);
202// } 213// }
203} 214}
204 215
205 216
206void PPPData::writeListConfig(const QString &group, const QString &key, 217void PPPData::writeListConfig(const QString &group, const QString &key,
207 QStringList &list, char sep) 218 QStringList &list, char sep)
208{ 219{
209 listEntries.insert( SEP.arg(group).arg(key), list ); 220 listEntries.insert( SEP.arg(group).arg(key), list );
210 sepEntries.insert( SEP.arg(group).arg(key), sep ); 221 sepEntries.insert( SEP.arg(group).arg(key), sep );
211// if (config) { 222// if (config) {
212// config->setGroup(group); 223// config->setGroup(group);
213// config->writeEntry(key, list, sep); 224// config->writeEntry(key, list, sep);
214// } 225// }
215} 226}
216 227
217 228
218// 229//
219// functions to set/return general information 230// functions to set/return general information
220// 231//
221QString PPPData::password(){ 232QString PPPData::password(){
222 if ( storePassword() ) return storedPassword(); 233 if ( storePassword() ) return storedPassword();
223 else return passwd; 234 else return passwd;
224} 235}
225 236
226 237
227void PPPData::setPassword(const QString &pw) { 238void PPPData::setPassword(const QString &pw) {
228 passwd = pw; 239 passwd = pw;
229} 240}
230 241
231 242
232const QString PPPData::defaultAccount() { 243const QString PPPData::defaultAccount() {
233 return readConfig(GENERAL_GRP, DEFAULTACCOUNT_KEY); 244 return readConfig(GENERAL_GRP, DEFAULTACCOUNT_KEY);
234} 245}
235 246
236 247
237void PPPData::setDefaultAccount(const QString &n) { 248void PPPData::setDefaultAccount(const QString &n) {
238 writeConfig(GENERAL_GRP, DEFAULTACCOUNT_KEY, n); 249 writeConfig(GENERAL_GRP, DEFAULTACCOUNT_KEY, n);
239 250
240 //now set the current account index to the default account 251 //now set the current account index to the default account
241 setAccount(defaultAccount()); 252 setAccount(defaultAccount());
242} 253}
243 254
244 255
245bool PPPData::get_show_clock_on_caption() { 256bool PPPData::get_show_clock_on_caption() {
246 return (bool) readNumConfig(GENERAL_GRP, SHOWCLOCK_KEY, true); 257 return (bool) readNumConfig(GENERAL_GRP, SHOWCLOCK_KEY, true);
247} 258}
248 259
249 260
250void PPPData::set_show_clock_on_caption(bool set) { 261void PPPData::set_show_clock_on_caption(bool set) {
251 writeConfig(GENERAL_GRP, SHOWCLOCK_KEY, (int) set); 262 writeConfig(GENERAL_GRP, SHOWCLOCK_KEY, (int) set);
252} 263}
253 264
254 265
255bool PPPData::get_xserver_exit_disconnect() { 266bool PPPData::get_xserver_exit_disconnect() {
256 return (bool) readNumConfig(GENERAL_GRP, DISCONNECT_KEY, true); 267 return (bool) readNumConfig(GENERAL_GRP, DISCONNECT_KEY, true);
257} 268}
258 269
259 270
260void PPPData::setPPPDebug(bool set) { 271void PPPData::setPPPDebug(bool set) {
261 writeConfig(GENERAL_GRP, PPP_DEBUG_OPTION, (int)set); 272 writeConfig(GENERAL_GRP, PPP_DEBUG_OPTION, (int)set);
262} 273}
263 274
264 275
265bool PPPData::getPPPDebug() { 276bool PPPData::getPPPDebug() {
266 return (bool)readNumConfig(GENERAL_GRP, PPP_DEBUG_OPTION, false); 277 return (bool)readNumConfig(GENERAL_GRP, PPP_DEBUG_OPTION, false);
267} 278}
268 279
269 280
270void PPPData::set_xserver_exit_disconnect(bool set) { 281void PPPData::set_xserver_exit_disconnect(bool set) {
271 writeConfig(GENERAL_GRP, DISCONNECT_KEY, (int) set); 282 writeConfig(GENERAL_GRP, DISCONNECT_KEY, (int) set);
272} 283}
273 284
274 285
275bool PPPData::quit_on_disconnect() { 286bool PPPData::quit_on_disconnect() {
276 return (bool) readNumConfig(GENERAL_GRP, QUITONDISCONNECT_KEY, false); 287 return (bool) readNumConfig(GENERAL_GRP, QUITONDISCONNECT_KEY, false);
277} 288}
278 289
279 290
280void PPPData::set_quit_on_disconnect(bool set) { 291void PPPData::set_quit_on_disconnect(bool set) {
281 writeConfig(GENERAL_GRP, QUITONDISCONNECT_KEY, (int) set); 292 writeConfig(GENERAL_GRP, QUITONDISCONNECT_KEY, (int) set);
282} 293}
283 294
284 295
285bool PPPData::get_show_log_window() { 296bool PPPData::get_show_log_window() {
286 return (bool) readNumConfig (GENERAL_GRP, SHOWLOGWIN_KEY, false); 297 return (bool) readNumConfig (GENERAL_GRP, SHOWLOGWIN_KEY, false);
287} 298}
288 299
289 300
290void PPPData::set_show_log_window(bool set) { 301void PPPData::set_show_log_window(bool set) {
291 writeConfig(GENERAL_GRP, SHOWLOGWIN_KEY, (int) set); 302 writeConfig(GENERAL_GRP, SHOWLOGWIN_KEY, (int) set);
292} 303}
293 304
294 305
295bool PPPData::automatic_redial() { 306bool PPPData::automatic_redial() {
296 return (bool) readNumConfig(GENERAL_GRP, AUTOREDIAL_KEY, FALSE); 307 return (bool) readNumConfig(GENERAL_GRP, AUTOREDIAL_KEY, FALSE);
297} 308}
298 309
299 310
300void PPPData::set_automatic_redial(bool set) { 311void PPPData::set_automatic_redial(bool set) {
301 writeConfig(GENERAL_GRP, AUTOREDIAL_KEY, (int) set); 312 writeConfig(GENERAL_GRP, AUTOREDIAL_KEY, (int) set);
302} 313}
303 314
304 315
305// bool PPPData::get_iconify_on_connect() { 316// bool PPPData::get_iconify_on_connect() {
306// return (bool) readNumConfig(GENERAL_GRP, ICONIFY_ON_CONNECT_KEY, TRUE); 317// return (bool) readNumConfig(GENERAL_GRP, ICONIFY_ON_CONNECT_KEY, TRUE);
307// } 318// }
308 319
309 320
310// void PPPData::set_iconify_on_connect(bool set) { 321// void PPPData::set_iconify_on_connect(bool set) {
311// writeConfig(GENERAL_GRP, ICONIFY_ON_CONNECT_KEY, (int) set); 322// writeConfig(GENERAL_GRP, ICONIFY_ON_CONNECT_KEY, (int) set);
312// } 323// }
313 324
314 325
315// bool PPPData::get_dock_into_panel() { 326// bool PPPData::get_dock_into_panel() {
316// return (bool) readNumConfig(GENERAL_GRP, DOCKING_KEY, false); 327// return (bool) readNumConfig(GENERAL_GRP, DOCKING_KEY, false);
317// } 328// }
318 329
319 330
320// void PPPData::set_dock_into_panel(bool set) { 331// void PPPData::set_dock_into_panel(bool set) {
321// writeConfig(GENERAL_GRP, DOCKING_KEY, (int) set); 332// writeConfig(GENERAL_GRP, DOCKING_KEY, (int) set);
322// } 333// }
323 334
324 335
325QString PPPData::pppdVersion() { 336QString PPPData::pppdVersion() {
326 return QString("%1.%2.%3").arg(pppdVer).arg(pppdMod).arg(pppdPatch); 337 return QString("%1.%2.%3").arg(pppdVer).arg(pppdMod).arg(pppdPatch);
327} 338}
328 339
329bool PPPData::pppdVersionMin(int ver, int mod, int patch) { 340bool PPPData::pppdVersionMin(int ver, int mod, int patch) {
330 // check if pppd version fulfills minimum requirement 341 // check if pppd version fulfills minimum requirement
331 return (pppdVer > ver 342 return (pppdVer > ver
332 || (pppdVer == ver && pppdMod > mod) 343 || (pppdVer == ver && pppdMod > mod)
333 || (pppdVer == ver && pppdMod == mod && pppdPatch >= patch)); 344 || (pppdVer == ver && pppdMod == mod && pppdPatch >= patch));
334} 345}
335 346
336int PPPData::pppdTimeout() { 347int PPPData::pppdTimeout() {
337 return readNumConfig(GENERAL_GRP, PPPDTIMEOUT_KEY, PPPD_TIMEOUT); 348 return readNumConfig(GENERAL_GRP, PPPDTIMEOUT_KEY, PPPD_TIMEOUT);
338} 349}
339 350
340 351
341void PPPData::setpppdTimeout(int n) { 352void PPPData::setpppdTimeout(int n) {
342 writeConfig(GENERAL_GRP, PPPDTIMEOUT_KEY, n); 353 writeConfig(GENERAL_GRP, PPPDTIMEOUT_KEY, n);
343} 354}
344 355
345 356
346const QString PPPData::modemDevice() { 357const QString PPPData::modemDevice() {
347 return readConfig (modemGroup(), MODEMDEV_KEY, devices[DEV_DEFAULT]); 358 return readConfig (modemGroup(), MODEMDEV_KEY, "/dev/modem" );
348} 359}
349 360
350 361
362// const QString PPPData::modemName()
363// {
364// return readConfig(modemGroup(), MODEMNAME_KEY);
365// }
366
367// bool PPPData::setModemName(const QString &n) {
368// qDebug("Setting modem name to >%s<", n.latin1());
369// _modemName = n;
370// writeConfig(cgroup, MODEMNAME_KEY, n);
371// return true; //FIXME
372// }
373
374// bool PPPData::changeModemName(const QString &n) {
375// qDebug("Setting modem name to >%s<", n.latin1());
376// _modemName = n;
377// writeConfig(modemGroup(), MODEMNAME_KEY, n);
378// return true; //FIXME
379// }
380
351bool PPPData::setModemDevice(const QString &n) { 381bool PPPData::setModemDevice(const QString &n) {
352 qDebug("Setting modem dev to >%s<", n.latin1()); 382 qDebug("Setting modem dev to >%s<", n.latin1());
353 bool ret = false; 383 writeConfig(modemGroup(), MODEMDEV_KEY, n);
354 for (int i = 0; devices[i]; i++) 384 return true; //FIXME
355 if (devices[i] == n){
356 modemDeviceGroup = i;
357 writeConfig(modemGroup(), MODEMDEV_KEY, n);
358 ret = true;
359 }
360 qDebug(ret?"SUCCESS":"FAILURE");
361 return ret;
362} 385}
363 386
364 387
365const QString PPPData::flowcontrol() { 388const QString PPPData::flowcontrol() {
366 return readConfig(modemGroup(), FLOWCONTROL_KEY, "CRTSCTS"); 389 return readConfig(modemGroup(), FLOWCONTROL_KEY, "CRTSCTS");
367} 390}
368 391
369 392
370void PPPData::setFlowcontrol(const QString &n) { 393void PPPData::setFlowcontrol(const QString &n) {
371 writeConfig(modemGroup(), FLOWCONTROL_KEY, n); 394 writeConfig(modemGroup(), FLOWCONTROL_KEY, n);
372} 395}
373 396
374 397
375const QString PPPData::speed() { 398const QString PPPData::speed() {
376 QString s = readConfig(modemGroup(), SPEED_KEY, "57600"); 399 QString s = readConfig(modemGroup(), SPEED_KEY, "57600");
377 // undo the damage of a bug in former versions. It left an empty Speed= 400 // undo the damage of a bug in former versions. It left an empty Speed=
378 // entry in kppprc. kppp did set the serial port to 57600 as default but 401 // entry in kppprc. kppp did set the serial port to 57600 as default but
379 // pppd wouldn't receive the speed via the command line. 402 // pppd wouldn't receive the speed via the command line.
380 if(s.toUInt() == 0) 403 if(s.toUInt() == 0)
381 s = "57600"; 404 s = "57600";
382 return s; 405 return s;
383} 406}
384 407
385 408
386void PPPData::setSpeed(const QString &n) { 409void PPPData::setSpeed(const QString &n) {
387 writeConfig(modemGroup(), SPEED_KEY, n); 410 writeConfig(modemGroup(), SPEED_KEY, n);
388} 411}
389 412
390 413
391#if 0 414#if 0
392void PPPData::setUseCDLine(const int n) { 415void PPPData::setUseCDLine(const int n) {
393 writeConfig(modemGroup(),USECDLINE_KEY,n); 416 writeConfig(modemGroup(),USECDLINE_KEY,n);
394} 417}
395 418
396 419
397int PPPData::UseCDLine() { 420int PPPData::UseCDLine() {
398 return readNumConfig(modemGroup(),USECDLINE_KEY,0); 421 return readNumConfig(modemGroup(),USECDLINE_KEY,0);
399} 422}
400#endif 423#endif
401 424
402const QString PPPData::modemEscapeStr() { 425const QString PPPData::modemEscapeStr() {
403 return readConfig(modemGroup(),ESCAPESTR_KEY,"+++"); 426 return readConfig(modemGroup(),ESCAPESTR_KEY,"+++");
404} 427}
405 428
406 429
407void PPPData::setModemEscapeStr(const QString &n) { 430void PPPData::setModemEscapeStr(const QString &n) {
408 writeConfig(modemGroup(),ESCAPESTR_KEY,n); 431 writeConfig(modemGroup(),ESCAPESTR_KEY,n);
409} 432}
410 433
411 434
412const QString PPPData::modemEscapeResp() { 435const QString PPPData::modemEscapeResp() {
413 return readConfig(modemGroup(),ESCAPERESP_KEY,"OK"); 436 return readConfig(modemGroup(),ESCAPERESP_KEY,"OK");
414} 437}
415 438
416 439
417void PPPData::setModemEscapeResp(const QString &n) { 440void PPPData::setModemEscapeResp(const QString &n) {
418 writeConfig(modemGroup(),ESCAPERESP_KEY,n); 441 writeConfig(modemGroup(),ESCAPERESP_KEY,n);
419} 442}
420 443
421 444
422int PPPData::modemEscapeGuardTime() { 445int PPPData::modemEscapeGuardTime() {
423 return readNumConfig(modemGroup(),ESCAPEGUARDTIME_KEY,50); 446 return readNumConfig(modemGroup(),ESCAPEGUARDTIME_KEY,50);
424} 447}
425 448
426 449
427void PPPData::setModemEscapeGuardTime(int n) { 450void PPPData::setModemEscapeGuardTime(int n) {
428 writeConfig(modemGroup(),ESCAPEGUARDTIME_KEY,n); 451 writeConfig(modemGroup(),ESCAPEGUARDTIME_KEY,n);
429} 452}
430 453
431 454
432bool PPPData::modemLockFile() { 455bool PPPData::modemLockFile() {
433 return readNumConfig(modemGroup(), LOCKFILE_KEY, 1); 456 return readNumConfig(modemGroup(), LOCKFILE_KEY, 1);
434} 457}
435 458
436 459
437void PPPData::setModemLockFile(bool set) { 460void PPPData::setModemLockFile(bool set) {
438 writeConfig(modemGroup(), LOCKFILE_KEY, set); 461 writeConfig(modemGroup(), LOCKFILE_KEY, set);
439} 462}
440 463
441 464
442int PPPData::modemTimeout() { 465int PPPData::modemTimeout() {
443 return readNumConfig(modemGroup(), TIMEOUT_KEY, MODEM_TIMEOUT); 466 return readNumConfig(modemGroup(), TIMEOUT_KEY, MODEM_TIMEOUT);
444} 467}
445 468
446 469
447void PPPData::setModemTimeout(int n) { 470void PPPData::setModemTimeout(int n) {
448 writeConfig(modemGroup(), TIMEOUT_KEY, n); 471 writeConfig(modemGroup(), TIMEOUT_KEY, n);
449} 472}
450 473
451 474
452int PPPData::modemToneDuration() { 475int PPPData::modemToneDuration() {
453 return readNumConfig(modemGroup(), TONEDURATION_KEY,MODEM_TONEDURATION); 476 return readNumConfig(modemGroup(), TONEDURATION_KEY,MODEM_TONEDURATION);
454} 477}
455 478
456 479
457void PPPData::setModemToneDuration(int n) { 480void PPPData::setModemToneDuration(int n) {
458 writeConfig(modemGroup(), TONEDURATION_KEY, n); 481 writeConfig(modemGroup(), TONEDURATION_KEY, n);
459} 482}
460 483
461 484
462int PPPData::busyWait() { 485int PPPData::busyWait() {
463 return readNumConfig(modemGroup(), BUSYWAIT_KEY, BUSY_WAIT); 486 return readNumConfig(modemGroup(), BUSYWAIT_KEY, BUSY_WAIT);
464} 487}
465 488
466 489
467void PPPData::setbusyWait(int n) { 490void PPPData::setbusyWait(int n) {
468 writeConfig(modemGroup(), BUSYWAIT_KEY, n); 491 writeConfig(modemGroup(), BUSYWAIT_KEY, n);
469} 492}
470 493
471 494
472// 495//
473//Advanced "Modem" dialog 496//Advanced "Modem" dialog
474// 497//
475// defaults: InitString=ATZ, InitString1="" etc. 498// defaults: InitString=ATZ, InitString1="" etc.
476const QString PPPData::modemInitStr(int i) { 499const QString PPPData::modemInitStr(int i) {
477 assert(i >= 0 && i < NumInitStrings); 500 assert(i >= 0 && i < NumInitStrings);
478 if(i == 0) 501 if(i == 0)
479 return readConfig(modemGroup(), INITSTR_KEY, "ATZ"); 502 return readConfig(modemGroup(), INITSTR_KEY, "ATZ");
480 else 503 else
481 return readConfig(modemGroup(), INITSTR_KEY + QString::number(i), ""); 504 return readConfig(modemGroup(), INITSTR_KEY + QString::number(i), "");
482} 505}
483 506
484 507
485void PPPData::setModemInitStr(int i, const QString &n) { 508void PPPData::setModemInitStr(int i, const QString &n) {
486 assert(i >= 0 && i < NumInitStrings); 509 assert(i >= 0 && i < NumInitStrings);
487 QString k = INITSTR_KEY + (i > 0 ? QString::number(i) : QString("")); 510 QString k = INITSTR_KEY + (i > 0 ? QString::number(i) : QString(""));
488 writeConfig(modemGroup(), k, n); 511 writeConfig(modemGroup(), k, n);
489} 512}
490 513
491 514
492const QString PPPData::modemInitResp() { 515const QString PPPData::modemInitResp() {
493 return readConfig(modemGroup(), INITRESP_KEY, "OK"); 516 return readConfig(modemGroup(), INITRESP_KEY, "OK");
494} 517}
495 518
496 519
497void PPPData::setModemInitResp(const QString &n) { 520void PPPData::setModemInitResp(const QString &n) {
498 writeConfig(modemGroup(), INITRESP_KEY, n); 521 writeConfig(modemGroup(), INITRESP_KEY, n);
499} 522}
500 523
501 524
502int PPPData::modemPreInitDelay() { 525int PPPData::modemPreInitDelay() {
503 return readNumConfig(modemGroup(), PREINITDELAY_KEY, 50); 526 return readNumConfig(modemGroup(), PREINITDELAY_KEY, 50);
504} 527}
505 528
506 529
507void PPPData::setModemPreInitDelay(int n) { 530void PPPData::setModemPreInitDelay(int n) {
508 writeConfig(modemGroup(), PREINITDELAY_KEY, n); 531 writeConfig(modemGroup(), PREINITDELAY_KEY, n);
509} 532}
510 533
511 534
512int PPPData::modemInitDelay() { 535int PPPData::modemInitDelay() {
513 return readNumConfig(modemGroup(), INITDELAY_KEY, 50); 536 return readNumConfig(modemGroup(), INITDELAY_KEY, 50);
514} 537}
515 538
516 539
517void PPPData::setModemInitDelay(int n) { 540void PPPData::setModemInitDelay(int n) {
518 writeConfig(modemGroup(), INITDELAY_KEY, n); 541 writeConfig(modemGroup(), INITDELAY_KEY, n);
519} 542}
520 543
521QString PPPData::modemNoDialToneDetectionStr() { 544QString PPPData::modemNoDialToneDetectionStr() {
522 return readConfig(modemGroup(), NODTDETECT_KEY, "ATX3"); 545 return readConfig(modemGroup(), NODTDETECT_KEY, "ATX3");
523} 546}
524 547
525void PPPData::setModemNoDialToneDetectionStr(const QString &n) { 548void PPPData::setModemNoDialToneDetectionStr(const QString &n) {
526 writeConfig(modemGroup(), NODTDETECT_KEY, n); 549 writeConfig(modemGroup(), NODTDETECT_KEY, n);
527} 550}
528 551
529const QString PPPData::modemDialStr() { 552const QString PPPData::modemDialStr() {
530 return readConfig(modemGroup(), DIALSTR_KEY, "ATDT"); 553 return readConfig(modemGroup(), DIALSTR_KEY, "ATDT");
531} 554}
532 555
533 556
534void PPPData::setModemDialStr(const QString &n) { 557void PPPData::setModemDialStr(const QString &n) {
535 writeConfig(modemGroup(), DIALSTR_KEY, n); 558 writeConfig(modemGroup(), DIALSTR_KEY, n);
536} 559}
537 560
538 561
539const QString PPPData::modemConnectResp() { 562const QString PPPData::modemConnectResp() {
540 return readConfig(modemGroup(), CONNECTRESP_KEY, "CONNECT"); 563 return readConfig(modemGroup(), CONNECTRESP_KEY, "CONNECT");
541} 564}
542 565
543 566
544void PPPData::setModemConnectResp(const QString &n) { 567void PPPData::setModemConnectResp(const QString &n) {
545 writeConfig(modemGroup(), CONNECTRESP_KEY, n); 568 writeConfig(modemGroup(), CONNECTRESP_KEY, n);
546} 569}
547 570
548 571
549const QString PPPData::modemBusyResp() { 572const QString PPPData::modemBusyResp() {
550 return readConfig(modemGroup(), BUSYRESP_KEY, "BUSY"); 573 return readConfig(modemGroup(), BUSYRESP_KEY, "BUSY");
551} 574}
552 575
553 576
554void PPPData::setModemBusyResp(const QString &n) { 577void PPPData::setModemBusyResp(const QString &n) {
555 writeConfig(modemGroup(), BUSYRESP_KEY, n); 578 writeConfig(modemGroup(), BUSYRESP_KEY, n);
556} 579}
557 580
558 581
559const QString PPPData::modemNoCarrierResp() { 582const QString PPPData::modemNoCarrierResp() {
560 return readConfig(modemGroup(), NOCARRIERRESP_KEY, "NO CARRIER"); 583 return readConfig(modemGroup(), NOCARRIERRESP_KEY, "NO CARRIER");
561} 584}
562 585
563 586
564void PPPData::setModemNoCarrierResp(const QString &n) { 587void PPPData::setModemNoCarrierResp(const QString &n) {
565 writeConfig(modemGroup(), NOCARRIERRESP_KEY, n); 588 writeConfig(modemGroup(), NOCARRIERRESP_KEY, n);
566} 589}
567 590
568 591
569const QString PPPData::modemNoDialtoneResp() { 592const QString PPPData::modemNoDialtoneResp() {
570 return readConfig(modemGroup(), NODIALTONERESP_KEY, "NO DIALTONE"); 593 return readConfig(modemGroup(), NODIALTONERESP_KEY, "NO DIALTONE");
571} 594}
572 595
573 596
574void PPPData::setModemNoDialtoneResp(const QString &n) { 597void PPPData::setModemNoDialtoneResp(const QString &n) {
575 writeConfig(modemGroup(), NODIALTONERESP_KEY, n); 598 writeConfig(modemGroup(), NODIALTONERESP_KEY, n);
576} 599}
577 600
578 601
579const QString PPPData::modemHangupStr() { 602const QString PPPData::modemHangupStr() {
580 return readConfig(modemGroup(), HANGUPSTR_KEY, "+++ATH"); 603 return readConfig(modemGroup(), HANGUPSTR_KEY, "+++ATH");
581} 604}
582 605
583void PPPData::setModemHangupStr(const QString &n) { 606void PPPData::setModemHangupStr(const QString &n) {
584 writeConfig(modemGroup(), HANGUPSTR_KEY, n); 607 writeConfig(modemGroup(), HANGUPSTR_KEY, n);
585} 608}
586 609
587 610
588const QString PPPData::modemHangupResp() { 611const QString PPPData::modemHangupResp() {
589 return readConfig(modemGroup(), HANGUPRESP_KEY, "OK"); 612 return readConfig(modemGroup(), HANGUPRESP_KEY, "OK");
590} 613}
591 614
592void PPPData::setModemHangupResp(const QString &n) { 615void PPPData::setModemHangupResp(const QString &n) {
593 writeConfig(modemGroup(), HANGUPRESP_KEY, n); 616 writeConfig(modemGroup(), HANGUPRESP_KEY, n);
594} 617}
595 618
596 619
597const QString PPPData::modemAnswerStr() { 620const QString PPPData::modemAnswerStr() {
598 return readConfig(modemGroup(), ANSWERSTR_KEY, "ATA"); 621 return readConfig(modemGroup(), ANSWERSTR_KEY, "ATA");
599} 622}
600 623
601 624
602QString PPPData::volumeOff() { 625QString PPPData::volumeOff() {
603 return readConfig(modemGroup(), VOLUME_OFF, "M0L0"); 626 return readConfig(modemGroup(), VOLUME_OFF, "M0L0");
604} 627}
605 628
606 629
607void PPPData::setVolumeOff(const QString &s) { 630void PPPData::setVolumeOff(const QString &s) {
608 writeConfig(modemGroup(), VOLUME_OFF, s); 631 writeConfig(modemGroup(), VOLUME_OFF, s);
609} 632}
610 633
611 634
612QString PPPData::volumeMedium() { 635QString PPPData::volumeMedium() {
613 return readConfig(modemGroup(), VOLUME_MEDIUM, "M1L1"); 636 return readConfig(modemGroup(), VOLUME_MEDIUM, "M1L1");
614} 637}
615 638
616 639
617void PPPData::setVolumeMedium(const QString &s) { 640void PPPData::setVolumeMedium(const QString &s) {
618 writeConfig(modemGroup(), VOLUME_MEDIUM, s); 641 writeConfig(modemGroup(), VOLUME_MEDIUM, s);
619} 642}
620 643
621 644
622QString PPPData::volumeHigh() { 645QString PPPData::volumeHigh() {
623 QString tmp = readConfig(modemGroup(), VOLUME_HIGH, "M1L3"); 646 QString tmp = readConfig(modemGroup(), VOLUME_HIGH, "M1L3");
624 if(tmp == "M1L4") 647 if(tmp == "M1L4")
625 tmp = "M1L3"; 648 tmp = "M1L3";
626 return tmp; 649 return tmp;
627} 650}
628 651
629 652
630void PPPData::setVolumeHigh(const QString &s) { 653void PPPData::setVolumeHigh(const QString &s) {
631 writeConfig(modemGroup(), VOLUME_HIGH, s); 654 writeConfig(modemGroup(), VOLUME_HIGH, s);
632} 655}
633 656
634 657
635QString PPPData::volumeInitString() { 658QString PPPData::volumeInitString() {
636 QString s; 659 QString s;
637 660
638 switch(volume()) { 661 switch(volume()) {
639 case 0: 662 case 0:
640 s = volumeOff(); 663 s = volumeOff();
641 break; 664 break;
642 case 1: 665 case 1:
643 s = volumeMedium(); 666 s = volumeMedium();
644 break; 667 break;
645 case 2: 668 case 2:
646 s = volumeHigh(); 669 s = volumeHigh();
647 break; 670 break;
648 default: 671 default:
649 s = volumeMedium(); 672 s = volumeMedium();
650 } 673 }
651 674
652 return s; 675 return s;
653} 676}
654 677
655 678
656int PPPData::volume() { 679int PPPData::volume() {
657 return readNumConfig(modemGroup(), VOLUME_KEY, 1); 680 return readNumConfig(modemGroup(), VOLUME_KEY, 1);
658} 681}
659 682
660 683
661void PPPData::setVolume(int i) { 684void PPPData::setVolume(int i) {
662 writeConfig(modemGroup(), VOLUME_KEY, i); 685 writeConfig(modemGroup(), VOLUME_KEY, i);
663} 686}
664 687
665int PPPData::waitForDialTone() { 688int PPPData::waitForDialTone() {
666 return readNumConfig(modemGroup(), DIALTONEWAIT_KEY, 1); 689 return readNumConfig(modemGroup(), DIALTONEWAIT_KEY, 1);
667} 690}
668 691
669void PPPData::setWaitForDialTone(int i) { 692void PPPData::setWaitForDialTone(int i) {
670 writeConfig(modemGroup(), DIALTONEWAIT_KEY, i); 693 writeConfig(modemGroup(), DIALTONEWAIT_KEY, i);
671} 694}
672 695
673void PPPData::setModemAnswerStr(const QString &n) { 696void PPPData::setModemAnswerStr(const QString &n) {
674 writeConfig(modemGroup(), ANSWERSTR_KEY, n); 697 writeConfig(modemGroup(), ANSWERSTR_KEY, n);
675} 698}
676 699
677 700
678const QString PPPData::modemRingResp() { 701const QString PPPData::modemRingResp() {
679 return readConfig(modemGroup(), RINGRESP_KEY, "RING"); 702 return readConfig(modemGroup(), RINGRESP_KEY, "RING");
680} 703}
681 704
682 705
683void PPPData::setModemRingResp(const QString &n) { 706void PPPData::setModemRingResp(const QString &n) {
684 writeConfig(modemGroup(), RINGRESP_KEY, n); 707 writeConfig(modemGroup(), RINGRESP_KEY, n);
685} 708}
686 709
687 710
688const QString PPPData::modemAnswerResp() { 711const QString PPPData::modemAnswerResp() {
689 return readConfig(modemGroup(), ANSWERRESP_KEY, "CONNECT"); 712 return readConfig(modemGroup(), ANSWERRESP_KEY, "CONNECT");
690} 713}
691 714
692 715
693void PPPData::setModemAnswerResp(const QString &n) { 716void PPPData::setModemAnswerResp(const QString &n) {
694 writeConfig(modemGroup(), ANSWERRESP_KEY, n); 717 writeConfig(modemGroup(), ANSWERRESP_KEY, n);
695} 718}
696 719
697 720
698const QString PPPData::enter() { 721const QString PPPData::enter() {
699 return readConfig(modemGroup(), ENTER_KEY, "CR"); 722 return readConfig(modemGroup(), ENTER_KEY, "CR");
700} 723}
701 724
702 725
703void PPPData::setEnter(const QString &n) { 726void PPPData::setEnter(const QString &n) {
704 writeConfig(modemGroup(), ENTER_KEY, n); 727 writeConfig(modemGroup(), ENTER_KEY, n);
705} 728}
706 729
707 730
708// 731//
709// functions to set/return account information 732// functions to set/return account information
710// 733//
711 734
712//returns number of accounts 735//returns number of accounts
713int PPPData::count() const { 736int PPPData::count() const {
714 return highcount + 1; 737 return highcount + 1;
715} 738}
716 739
717 740
718bool PPPData::setAccount(const QString &aname) { 741bool PPPData::setAccount(const QString &aname) {
719 qDebug("setting account to >%s<", aname.latin1()); 742 qDebug("setting account to >%s<", aname.latin1());
720 for(int i = 0; i <= highcount; i++) { 743 for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) {
721 setAccountbyIndex(i); 744 cgroup = *it;
722 if(accname() == aname) { 745 qDebug("PPPData::setAccount %s", cgroup.latin1());
723 caccount = i; 746 qDebug( "iterator %s", (*it).latin1() );
724 qDebug("SUCCESS"); 747 if(accname() == aname) {
725 return true; 748 qDebug("SUCCESS");
749 return true;
750 }
751
726 } 752 }
727 } 753 qDebug("FAILURE");
728 qDebug("FAILURE"); 754 return false;
729 return false;
730} 755}
731 756
732 757/*
733bool PPPData::setAccountbyIndex(int i) { 758bool PPPData::setAccountbyIndex(int i) {
734 if(i >= 0 && i <= highcount) { 759 if(i >= 0 && i <= highcount) {
760 QString tmp;
761 tmp.sprintf("%s%i", ACCOUNT_GRP, i);
762 if (_deleted.find(tmp)!=_deleted.end()) return false;
735 caccount = i; 763 caccount = i;
736 cgroup.sprintf("%s%i", ACCOUNT_GRP, i); 764 cgroup = tmp;
737 return true; 765 return true;
738 } 766 }
739 return false; 767 return false;
740} 768}
741 769*/
742 770
743bool PPPData::isUniqueAccname(const QString &n) { 771bool PPPData::isUniqueAccname(const QString &n) {
744 int current = caccount; 772 QString save_cgroup = cgroup;
745 for(int i=0; i <= highcount; i++) { 773 for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) {
746 setAccountbyIndex(i); 774 cgroup = *it;
747 if(accname() == n && i != current) { 775 qDebug("PPPData::setAccount %s", cgroup.latin1());
748 setAccountbyIndex(current); 776 qDebug( "%s \n", (*it).latin1() );
749 return false; 777 if(accname() == n && cgroup != save_cgroup) {
750 } 778 cgroup = save_cgroup;
779 qDebug("SUCCESS");
780 return false;
781 }
782
751 } 783 }
752 setAccountbyIndex(current); 784 cgroup = save_cgroup;
753 return true; 785 return true;
754} 786}
755 787
756 788
757bool PPPData::deleteAccount() { 789bool PPPData::isUniqueDevname(const QString &n) {
758 //FIXME: PPPData::deleteAccount 790 QString save_mName = _modemName;
759// if(caccount < 0) 791 qDebug("PPPData::isUniqueDevname checking if %s is unique", n.latin1());
760 return false; 792 for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) {
761 793 _modemName = *it;
762// QMap <QString, QString> map; 794 qDebug("PPPData::isUniqueDevname %s == %s", n.latin1() , devname().latin1());
763// QMap <QString, QString>::Iterator it; 795 if(devname() == n && _modemName != save_mName) {
764 796 _modemName = save_mName;
765// // set all entries of the current account to "" 797 qDebug("NOT UNIQUE");
766// map = config->entryMap(cgroup); 798 return false;
767// it = map.begin(); 799 }
768// while (it != map.end()) {
769// config->writeEntry(it.key(), "");
770// it++;
771// }
772 800
773// // shift the succeeding accounts 801 }
774// for(int i = caccount+1; i <= highcount; i++) { 802 _modemName = save_mName;
775// setAccountbyIndex(i); 803 return true;
776// map = config->entryMap(cgroup); 804}
777// it = map.begin();
778// setAccountbyIndex(i-1);
779// config->setGroup(cgroup);
780// while (it != map.end()) {
781// config->writeEntry(it.key(), *it);
782// it++;
783// }
784// }
785 805
786// // make sure the top account is cleared
787// setAccountbyIndex(highcount);
788// map = config->entryMap(cgroup);
789// it = map.begin();
790// config->setGroup(cgroup);
791// while (it.key() != QString::null) {
792// config->writeEntry(it.key(), "");
793// it++;
794// }
795 806
796// highcount--; 807bool PPPData::deleteAccount() {
797// if(caccount > highcount) 808 // FIXME: check if this account exists in a config...
798// caccount = highcount; 809 Config cfg = PPPData::config();
810 cfg.setGroup(cgroup);
811 cfg.clearGroup();
812 accountList.remove(cgroup);
799 813
800// setAccountbyIndex(caccount); 814 QString key;
815 QStringList keys;
816 for( QMap<QString,QString>::Iterator it = stringEntries.begin();
817 it != stringEntries.end(); ++it ){
818 QString val = it.data();
819 key = it.key();
820 keys = QStringList::split( "SEPARATOR", key );
821 if(keys[0]==cgroup){
822 stringEntries.remove( it );
823 qDebug("deleting >%s< key >%s< value >%s<", keys[0].latin1(), keys[1].latin1(), val.latin1() );
824 }
825 }
826 for( QMap<QString,int>::Iterator it = intEntries.begin();
827 it != intEntries.end(); ++it ){
828 int val = it.data();
829 key = it.key();
830 keys = QStringList::split( "SEPARATOR", key );
831 if(keys[0]==cgroup){
832 intEntries.remove( it );
833 qDebug("deleting >%s< key >%s< value >%i<", keys[0].latin1(), keys[1].latin1(), val );
834 }
835 }
836 for( QMap<QString,QStringList>::Iterator it = listEntries.begin();
837 it != listEntries.end(); ++it ){
838 QStringList val = it.data();
839 key = it.key();
840 if(keys[0]==cgroup){
841 listEntries.remove( it );
842 sepEntries.remove( key );
843 qDebug("deleting >%s< key >%s< value >%s<", keys[0].latin1(), keys[1].latin1(), val.join("").latin1() );
844 }
845 }
801 846
802// return true; 847 return true;
803} 848}
804 849
805 850
806bool PPPData::deleteAccount(const QString &aname) { 851bool PPPData::deleteAccount(const QString &aname) {
807 if(!setAccount(aname)) 852 if(!setAccount(aname))
808 return false; 853 return false;
809 854
810 deleteAccount(); 855 deleteAccount();
811 856
812 return true; 857 return true;
813} 858}
814 859
815 860
816int PPPData::newaccount() { 861int PPPData::newaccount() {
817 862
818 qDebug("PPPData::newaccount highcount %i/%i",highcount,MAX_ACCOUNTS); 863 qDebug("PPPData::newaccount highcount %i/%i",highcount,MAX_ACCOUNTS);
819// if(!config) open(); 864// if(!config) open();
820 if (highcount >= MAX_ACCOUNTS) return -1; 865// if (highcount >= MAX_ACCOUNTS) return -1;
821 866
822 highcount++;
823 setAccountbyIndex(highcount);
824 867
868 QString tmp;
869 tmp.sprintf("%s%i", ACCOUNT_GRP, ++highcount);
870 cgroup = QString(tmp);
871 accountList << tmp;
872 qDebug("PPPData::newaccount() Group: >%s<",cgroup.latin1());
825 setpppdArgumentDefaults(); 873 setpppdArgumentDefaults();
826 qDebug("PPPData::newaccount -> %i",caccount); 874 return highcount;
827 return caccount;
828} 875}
829 876
830int PPPData::copyaccount(int i) { 877int PPPData::copyaccount(const QString&) {
831// FIXME: PPPData::copyaccount 878// FIXME: PPPData::copyaccount
832// if(highcount >= MAX_ACCOUNTS) 879// if(highcount >= MAX_ACCOUNTS)
833 return -1; 880 return -1;
834 881
835// setAccountbyIndex(i); 882// setAccountbyIndex(i);
836 883
837// QMap <QString, QString> map = config->entryMap(cgroup); 884// QMap <QString, QString> map = config->entryMap(cgroup);
838// QMap <QString, QString>::ConstIterator it = map.begin(); 885// QMap <QString, QString>::ConstIterator it = map.begin();
839 886
840// QString newname = i18n("%1_copy").arg(accname()); 887// QString newname = QObject::tr("%1_copy").arg(accname());
841 888
842// newaccount(); 889// newaccount();
843 890
844// while (it != map.end()) { 891// while (it != map.end()) {
845// config->writeEntry(it.key(), *it); 892// config->writeEntry(it.key(), *it);
846// it++; 893// it++;
847// } 894// }
848 895
849// setAccname(newname); 896// setAccname(newname);
850 897
851// return caccount; 898// return caccount;
852} 899}
853 900
854 901
855const QString PPPData::accname() { 902const QString PPPData::accname() {
856 return readConfig(cgroup, NAME_KEY); 903 return readConfig(cgroup, NAME_KEY);
857} 904}
858 905
859void PPPData::setAccname(const QString &n) { 906void PPPData::setAccname(const QString &n) {
860 if(!cgroup.isNull()) { 907 if(!cgroup.isNull()) {
861 // are we manipulating the default account's name ? then change it, too. 908 // are we manipulating the default account's name ? then change it, too.
862 bool def = accname() == defaultAccount(); 909 bool def = accname() == defaultAccount();
863 writeConfig(cgroup, NAME_KEY, n); 910 writeConfig(cgroup, NAME_KEY, n);
864 if (def) 911 if (def)
865 setDefaultAccount(n); 912 setDefaultAccount(n);
866 } 913 }
914 writeConfig(cgroup, NAME_KEY, n);
867} 915}
868 916
869 917
870#define SEPARATOR_CHAR '&' 918#define SEPARATOR_CHAR '&'
871QStringList &PPPData::phonenumbers() { 919QStringList &PPPData::phonenumbers() {
872 920
873 readListConfig(cgroup, PHONENUMBER_KEY, phonelist, SEPARATOR_CHAR); 921 readListConfig(cgroup, PHONENUMBER_KEY, phonelist, SEPARATOR_CHAR);
874 return phonelist; 922 return phonelist;
875 923
876} 924}
877 925
878 926
879const QString PPPData::phonenumber() { 927const QString PPPData::phonenumber() {
880 return readConfig(cgroup, PHONENUMBER_KEY); 928 return readConfig(cgroup, PHONENUMBER_KEY);
881} 929}
882 930
883 931
884void PPPData::setPhonenumber(const QString &n) { 932void PPPData::setPhonenumber(const QString &n) {
885 writeConfig(cgroup, PHONENUMBER_KEY, n); 933 writeConfig(cgroup, PHONENUMBER_KEY, n);
886} 934}
887 935
888 936
889const QString PPPData::dialPrefix() { 937const QString PPPData::dialPrefix() {
890 return readConfig(cgroup, DIAL_PREFIX_KEY, ""); 938 return readConfig(cgroup, DIAL_PREFIX_KEY, "");
891} 939}
892 940
893 941
894void PPPData::setDialPrefix(const QString &s) { 942void PPPData::setDialPrefix(const QString &s) {
895 writeConfig(cgroup, DIAL_PREFIX_KEY, s); 943 writeConfig(cgroup, DIAL_PREFIX_KEY, s);
896} 944}
897 945
898 946
899int PPPData::authMethod() { 947int PPPData::authMethod() {
900 return readNumConfig(cgroup, AUTH_KEY, 0); 948 return readNumConfig(cgroup, AUTH_KEY, 0);
901} 949}
902 950
903 951
904void PPPData::setAuthMethod(int value) { 952void PPPData::setAuthMethod(int value) {
905 writeConfig(cgroup, AUTH_KEY, value); 953 writeConfig(cgroup, AUTH_KEY, value);
906} 954}
907 955
908 956
909const QString PPPData::storedUsername() { 957const QString PPPData::storedUsername() {
910 return readConfig(cgroup, STORED_USERNAME_KEY, ""); 958 return readConfig(cgroup, STORED_USERNAME_KEY, "");
911} 959}
912 960
913 961
914void PPPData::setStoredUsername(const QString &b) { 962void PPPData::setStoredUsername(const QString &b) {
915 writeConfig(cgroup, STORED_USERNAME_KEY, b); 963 writeConfig(cgroup, STORED_USERNAME_KEY, b);
916} 964}
917 965
918 966
919const QString PPPData::storedPassword() { 967const QString PPPData::storedPassword() {
920 qDebug("getting stored pw"); 968 qDebug("getting stored pw");
921 qDebug("g %s", cgroup.latin1() ); 969 qDebug("g %s", cgroup.latin1() );
922 qDebug("k %s", STORED_PASSWORD_KEY); 970 qDebug("k %s", STORED_PASSWORD_KEY);
923 return readConfig(cgroup, STORED_PASSWORD_KEY, ""); 971 return readConfig(cgroup, STORED_PASSWORD_KEY, "");
924} 972}
925 973
926 974
927void PPPData::setStoredPassword(const QString &b) { 975void PPPData::setStoredPassword(const QString &b) {
928 writeConfig(cgroup, STORED_PASSWORD_KEY, b); 976 writeConfig(cgroup, STORED_PASSWORD_KEY, b);
929} 977}
930 978
931 979
932bool PPPData::storePassword() { 980bool PPPData::storePassword() {
933 return (bool)readNumConfig(cgroup, STORE_PASSWORD_KEY, 1); 981 return (bool)readNumConfig(cgroup, STORE_PASSWORD_KEY, 1);
934} 982}
935 983
936 984
937const QString PPPData::command_before_connect() { 985const QString PPPData::command_before_connect() {
938 return readConfig(cgroup, BEFORE_CONNECT_KEY); 986 return readConfig(cgroup, BEFORE_CONNECT_KEY);
939} 987}
940 988
941 989
942void PPPData::setCommand_before_connect(const QString &n) { 990void PPPData::setCommand_before_connect(const QString &n) {
943 writeConfig(cgroup, BEFORE_CONNECT_KEY, n); 991 writeConfig(cgroup, BEFORE_CONNECT_KEY, n);
944} 992}
945 993
946 994
947void PPPData::setStorePassword(bool b) { 995void PPPData::setStorePassword(bool b) {
948 writeConfig(cgroup, STORE_PASSWORD_KEY, (int)b); 996 writeConfig(cgroup, STORE_PASSWORD_KEY, (int)b);
949} 997}
950 998
951 999
952const QString PPPData::command_on_connect() { 1000const QString PPPData::command_on_connect() {
953 return readConfig(cgroup, COMMAND_KEY); 1001 return readConfig(cgroup, COMMAND_KEY);
954} 1002}
955 1003
956 1004
957void PPPData::setCommand_on_connect(const QString &n) { 1005void PPPData::setCommand_on_connect(const QString &n) {
958 writeConfig(cgroup, COMMAND_KEY, n); 1006 writeConfig(cgroup, COMMAND_KEY, n);
959} 1007}
960 1008
961 1009
962const QString PPPData::command_on_disconnect() { 1010const QString PPPData::command_on_disconnect() {
963 return readConfig(cgroup, DISCONNECT_COMMAND_KEY); 1011 return readConfig(cgroup, DISCONNECT_COMMAND_KEY);
964} 1012}
965 1013
966 1014
967void PPPData::setCommand_on_disconnect(const QString &n) { 1015void PPPData::setCommand_on_disconnect(const QString &n) {
968 writeConfig(cgroup, DISCONNECT_COMMAND_KEY, n); 1016 writeConfig(cgroup, DISCONNECT_COMMAND_KEY, n);
969} 1017}
970 1018
971 1019
972const QString PPPData::command_before_disconnect() { 1020const QString PPPData::command_before_disconnect() {
973 return readConfig(cgroup, BEFORE_DISCONNECT_KEY); 1021 return readConfig(cgroup, BEFORE_DISCONNECT_KEY);
974} 1022}
975 1023
976 1024
977void PPPData::setCommand_before_disconnect(const QString &n) { 1025void PPPData::setCommand_before_disconnect(const QString &n) {
978 writeConfig(cgroup, BEFORE_DISCONNECT_KEY, n); 1026 writeConfig(cgroup, BEFORE_DISCONNECT_KEY, n);
979} 1027}
980 1028
981 1029
982const QString PPPData::ipaddr() { 1030const QString PPPData::ipaddr() {
983 return readConfig(cgroup, IPADDR_KEY); 1031 return readConfig(cgroup, IPADDR_KEY);
984} 1032}
985 1033
986 1034
987void PPPData::setIpaddr(const QString &n) { 1035void PPPData::setIpaddr(const QString &n) {
988 writeConfig(cgroup, IPADDR_KEY, n); 1036 writeConfig(cgroup, IPADDR_KEY, n);
989} 1037}
990 1038
991 1039
992const QString PPPData::subnetmask() { 1040const QString PPPData::subnetmask() {
993 return readConfig(cgroup, SUBNETMASK_KEY); 1041 return readConfig(cgroup, SUBNETMASK_KEY);
994} 1042}
995 1043
996 1044
997void PPPData::setSubnetmask(const QString &n) { 1045void PPPData::setSubnetmask(const QString &n) {
998 writeConfig(cgroup, SUBNETMASK_KEY, n); 1046 writeConfig(cgroup, SUBNETMASK_KEY, n);
999} 1047}
1000 1048
1001 1049
1002bool PPPData::autoname() { 1050bool PPPData::autoname() {
1003 return (bool) readNumConfig(cgroup, AUTONAME_KEY, false); 1051 return (bool) readNumConfig(cgroup, AUTONAME_KEY, false);
1004} 1052}
1005 1053
1006 1054
1007void PPPData::setAutoname(bool set) { 1055void PPPData::setAutoname(bool set) {
1008 writeConfig(cgroup, AUTONAME_KEY, (int) set); 1056 writeConfig(cgroup, AUTONAME_KEY, (int) set);
1009} 1057}
1010 1058
1011 1059
1012bool PPPData::AcctEnabled() { 1060bool PPPData::AcctEnabled() {
1013 return (bool) readNumConfig(cgroup, ACCTENABLED_KEY, false); 1061 return (bool) readNumConfig(cgroup, ACCTENABLED_KEY, false);
1014} 1062}
1015 1063
1016 1064
1017void PPPData::setAcctEnabled(bool set) { 1065void PPPData::setAcctEnabled(bool set) {
1018 writeConfig(cgroup, ACCTENABLED_KEY, (int) set); 1066 writeConfig(cgroup, ACCTENABLED_KEY, (int) set);
1019} 1067}
1020 1068
1021 1069
1022// int PPPData::VolAcctEnabled() { 1070// int PPPData::VolAcctEnabled() {
1023// return readNumConfig(cgroup, VOLACCTENABLED_KEY, 0); 1071// return readNumConfig(cgroup, VOLACCTENABLED_KEY, 0);
1024// } 1072// }
1025 1073
1026 1074
1027// void PPPData::setVolAcctEnabled(int set) { 1075// void PPPData::setVolAcctEnabled(int set) {
1028// writeConfig(cgroup, VOLACCTENABLED_KEY, set); 1076// writeConfig(cgroup, VOLACCTENABLED_KEY, set);
1029// } 1077// }
1030 1078
1031 1079
1032const QString PPPData::gateway() { 1080const QString PPPData::gateway() {
1033 return readConfig(cgroup, GATEWAY_KEY); 1081 return readConfig(cgroup, GATEWAY_KEY);
1034} 1082}
1035 1083
1036 1084
1037void PPPData::setGateway(const QString &n ) { 1085void PPPData::setGateway(const QString &n ) {
1038 writeConfig(cgroup, GATEWAY_KEY, n); 1086 writeConfig(cgroup, GATEWAY_KEY, n);
1039} 1087}
1040 1088
1041 1089
1042bool PPPData::defaultroute() { 1090bool PPPData::defaultroute() {
1043 // default route is by default 'on'. 1091 // default route is by default 'on'.
1044 return (bool) readNumConfig(cgroup, DEFAULTROUTE_KEY, true); 1092 return (bool) readNumConfig(cgroup, DEFAULTROUTE_KEY, true);
1045} 1093}
1046 1094
1047 1095
1048void PPPData::setDefaultroute(bool set) { 1096void PPPData::setDefaultroute(bool set) {
1049 writeConfig(cgroup, DEFAULTROUTE_KEY, (int) set); 1097 writeConfig(cgroup, DEFAULTROUTE_KEY, (int) set);
1050} 1098}
1051 1099
1052 1100
1053bool PPPData::autoDNS() { 1101bool PPPData::autoDNS() {
1054 bool set = (bool) readNumConfig(cgroup, AUTODNS_KEY, true); 1102 bool set = (bool) readNumConfig(cgroup, AUTODNS_KEY, true);
1055 return (set && pppdVersionMin(2, 3, 7)); 1103 return (set && pppdVersionMin(2, 3, 7));
1056} 1104}
1057 1105
1058 1106
1059void PPPData::setAutoDNS(bool set) { 1107void PPPData::setAutoDNS(bool set) {
1060 writeConfig(cgroup, AUTODNS_KEY, (int) set); 1108 writeConfig(cgroup, AUTODNS_KEY, (int) set);
1061} 1109}
1062 1110
1063 1111
1064void PPPData::setExDNSDisabled(bool set) { 1112void PPPData::setExDNSDisabled(bool set) {
1065 writeConfig(cgroup, EXDNSDISABLED_KEY, (int) set); 1113 writeConfig(cgroup, EXDNSDISABLED_KEY, (int) set);
1066} 1114}
1067 1115
1068 1116
1069bool PPPData::exDNSDisabled() { 1117bool PPPData::exDNSDisabled() {
1070 return (bool) readNumConfig(cgroup, EXDNSDISABLED_KEY,0); 1118 return (bool) readNumConfig(cgroup, EXDNSDISABLED_KEY,0);
1071} 1119}
1072 1120
1073 1121
1074QStringList &PPPData::dns() { 1122QStringList &PPPData::dns() {
1075 static QStringList dnslist; 1123 static QStringList dnslist;
1076 1124
1077 readListConfig(cgroup, DNS_KEY, dnslist); 1125 readListConfig(cgroup, DNS_KEY, dnslist);
1078 while(dnslist.count() > MAX_DNS_ENTRIES) 1126 while(dnslist.count() > MAX_DNS_ENTRIES)
1079 dnslist.remove(dnslist.last()); 1127 dnslist.remove(dnslist.last());
1080 1128
1081 return dnslist; 1129 return dnslist;
1082} 1130}
1083 1131
1084 1132
1085void PPPData::setDns(QStringList &list) { 1133void PPPData::setDns(QStringList &list) {
1086 writeListConfig(cgroup, DNS_KEY, list); 1134 writeListConfig(cgroup, DNS_KEY, list);
1087} 1135}
1088 1136
1089 1137
1090const QString PPPData::domain() { 1138const QString PPPData::domain() {
1091 return readConfig(cgroup, DOMAIN_KEY); 1139 return readConfig(cgroup, DOMAIN_KEY);
1092} 1140}
1093 1141
1094 1142
1095void PPPData::setDomain(const QString &n ) { 1143void PPPData::setDomain(const QString &n ) {
1096 writeConfig(cgroup, DOMAIN_KEY, n); 1144 writeConfig(cgroup, DOMAIN_KEY, n);
1097} 1145}
1098 1146
1099 1147
1100QStringList &PPPData::scriptType() { 1148QStringList &PPPData::scriptType() {
1101 static QStringList typelist; 1149 static QStringList typelist;
1102 1150
1103 readListConfig(cgroup, SCRIPTCOM_KEY, typelist); 1151 readListConfig(cgroup, SCRIPTCOM_KEY, typelist);
1104 while(typelist.count() > MAX_SCRIPT_ENTRIES) 1152 while(typelist.count() > MAX_SCRIPT_ENTRIES)
1105 typelist.remove(typelist.last()); 1153 typelist.remove(typelist.last());
1106 1154
1107 return typelist; 1155 return typelist;
1108} 1156}
1109 1157
1110 1158
1111void PPPData::setScriptType(QStringList &list) { 1159void PPPData::setScriptType(QStringList &list) {
1112 writeListConfig(cgroup, SCRIPTCOM_KEY, list); 1160 writeListConfig(cgroup, SCRIPTCOM_KEY, list);
1113} 1161}
1114 1162
1115 1163
1116QStringList &PPPData::script() { 1164QStringList &PPPData::script() {
1117 static QStringList scriptlist; 1165 static QStringList scriptlist;
1118 1166
1119 readListConfig(cgroup, SCRIPTARG_KEY, scriptlist); 1167 readListConfig(cgroup, SCRIPTARG_KEY, scriptlist);
1120 while(scriptlist.count() > MAX_SCRIPT_ENTRIES) 1168 while(scriptlist.count() > MAX_SCRIPT_ENTRIES)
1121 scriptlist.remove(scriptlist.last()); 1169 scriptlist.remove(scriptlist.last());
1122 1170
1123 return scriptlist; 1171 return scriptlist;
1124} 1172}
1125 1173
1126 1174
1127void PPPData::setScript(QStringList &list) { 1175void PPPData::setScript(QStringList &list) {
1128 writeListConfig(cgroup, SCRIPTARG_KEY, list); 1176 writeListConfig(cgroup, SCRIPTARG_KEY, list);
1129} 1177}
1130 1178
1131 1179
1132// const QString PPPData::accountingFile() { 1180// const QString PPPData::accountingFile() {
1133// return readConfig(cgroup, ACCTFILE_KEY); 1181// return readConfig(cgroup, ACCTFILE_KEY);
1134// } 1182// }
1135 1183
1136 1184
1137// void PPPData::setAccountingFile(const QString &n) { 1185// void PPPData::setAccountingFile(const QString &n) {
1138// writeConfig(cgroup, ACCTFILE_KEY, n); 1186// writeConfig(cgroup, ACCTFILE_KEY, n);
1139// } 1187// }
1140 1188
1141 1189
1142// const QString PPPData::totalCosts() { 1190// const QString PPPData::totalCosts() {
1143// return readConfig(cgroup, TOTALCOSTS_KEY); 1191// return readConfig(cgroup, TOTALCOSTS_KEY);
1144// } 1192// }
1145 1193
1146 1194
1147// void PPPData::setTotalCosts(const QString &n) { 1195// void PPPData::setTotalCosts(const QString &n) {
1148// writeConfig(cgroup, TOTALCOSTS_KEY, n); 1196// writeConfig(cgroup, TOTALCOSTS_KEY, n);
1149// } 1197// }
1150 1198
1151 1199
1152// int PPPData::totalBytes() { 1200// int PPPData::totalBytes() {
1153// return readNumConfig(cgroup, TOTALBYTES_KEY, 0); 1201// return readNumConfig(cgroup, TOTALBYTES_KEY, 0);
1154// } 1202// }
1155 1203
1156// void PPPData::setTotalBytes(int n) { 1204// void PPPData::setTotalBytes(int n) {
1157// writeConfig(cgroup, TOTALBYTES_KEY, n); 1205// writeConfig(cgroup, TOTALBYTES_KEY, n);
1158// } 1206// }
1159 1207
1160 1208
1161QStringList &PPPData::pppdArgument() { 1209QStringList &PPPData::pppdArgument() {
1162 static QStringList arglist; 1210 static QStringList arglist;
1163 1211
1164 while(arglist.count() > MAX_PPPD_ARGUMENTS) 1212 while(arglist.count() > MAX_PPPD_ARGUMENTS)
1165 arglist.remove(arglist.last()); 1213 arglist.remove(arglist.last());
1166 readListConfig(cgroup, PPPDARG_KEY, arglist); 1214 readListConfig(cgroup, PPPDARG_KEY, arglist);
1167 1215
1168 return arglist; 1216 return arglist;
1169} 1217}
1170 1218
1171 1219
1172void PPPData::setpppdArgument(QStringList &args) { 1220void PPPData::setpppdArgument(QStringList &args) {
1173 writeListConfig(cgroup, PPPDARG_KEY, args); 1221 writeListConfig(cgroup, PPPDARG_KEY, args);
1174} 1222}
1175 1223
1176 1224
1177void PPPData::setpppdArgumentDefaults() { 1225void PPPData::setpppdArgumentDefaults() {
1178 QStringList arg; 1226 QStringList arg;
1227 arg << "lcp-echo-failure 0";
1179 setpppdArgument(arg); 1228 setpppdArgument(arg);
1180} 1229}
1181 1230
1182 1231
1183// // graphing widget 1232// // graphing widget
1184// void PPPData::setGraphingOptions(bool enable, 1233// void PPPData::setGraphingOptions(bool enable,
1185 // QColor bg, 1234 // QColor bg,
1186 // QColor text, 1235 // QColor text,
1187 // QColor in, 1236 // QColor in,
1188 // QColor out) 1237 // QColor out)
1189// { 1238// {
1190// if(config) { 1239// if(config) {
1191// config->setGroup(GRAPH_GRP); 1240// config->setGroup(GRAPH_GRP);
1192// config->writeEntry(GENABLED, enable); 1241// config->writeEntry(GENABLED, enable);
1193// // config->writeEntry(GCOLOR_BG, bg); 1242// // config->writeEntry(GCOLOR_BG, bg);
1194// // config->writeEntry(GCOLOR_TEXT, text); 1243// // config->writeEntry(GCOLOR_TEXT, text);
1195// // config->writeEntry(GCOLOR_IN, in); 1244// // config->writeEntry(GCOLOR_IN, in);
1196// // config->writeEntry(GCOLOR_OUT, out); 1245// // config->writeEntry(GCOLOR_OUT, out);
1197// } 1246// }
1198// } 1247// }
1199 1248
1200// void PPPData::graphingOptions(bool &enable, 1249// void PPPData::graphingOptions(bool &enable,
1201 // QColor &bg, 1250 // QColor &bg,
1202 // QColor &text, 1251 // QColor &text,
1203 // QColor &in, 1252 // QColor &in,
1204 // QColor &out) 1253 // QColor &out)
1205// { 1254// {
1206// QColor c; 1255// QColor c;
1207 1256
1208// if(config) { 1257// if(config) {
1209// config->setGroup(GRAPH_GRP); 1258// config->setGroup(GRAPH_GRP);
1210// enable = config->readBoolEntry(GENABLED, true); 1259// enable = config->readBoolEntry(GENABLED, true);
1211// bg = Qt::white; 1260// bg = Qt::white;
1212// //bg = config->readColorEntry(GCOLOR_BG, &c); 1261// //bg = config->readColorEntry(GCOLOR_BG, &c);
1213// text = Qt::black; 1262// text = Qt::black;
1214// //text = config->readColorEntry(GCOLOR_TEXT, &c); 1263// //text = config->readColorEntry(GCOLOR_TEXT, &c);
1215// in = Qt::blue; 1264// in = Qt::blue;
1216// //in = config->readColorEntry(GCOLOR_IN, &c); 1265// //in = config->readColorEntry(GCOLOR_IN, &c);
1217// out = Qt::red; 1266// out = Qt::red;
1218// //out = config->readColorEntry(GCOLOR_OUT, &c); 1267// //out = config->readColorEntry(GCOLOR_OUT, &c);
1219// } 1268// }
1220// } 1269// }
1221 1270
1222 1271
1223// bool PPPData::graphingEnabled() { 1272// bool PPPData::graphingEnabled() {
1224// return (bool) readNumConfig(GRAPH_GRP, GENABLED, true); 1273// return (bool) readNumConfig(GRAPH_GRP, GENABLED, true);
1225// } 1274// }
1226 1275
1227 1276
1228 1277
1229// 1278//
1230//functions to change/set the child pppd process info 1279//functions to change/set the child pppd process info
1231// 1280//
1232bool PPPData::pppdRunning() const { 1281bool PPPData::pppdRunning() const {
1233 return pppdisrunning; 1282 return pppdisrunning;
1234} 1283}
1235 1284
1236void PPPData::setpppdRunning(bool set) { 1285void PPPData::setpppdRunning(bool set) {
1237 pppdisrunning = set; 1286 pppdisrunning = set;
1238} 1287}
1239 1288
1240int PPPData::pppdError() const { 1289int PPPData::pppdError() const {
1241 return pppderror; 1290 return pppderror;
1242} 1291}
1243 1292
1244void PPPData::setpppdError(int err) { 1293void PPPData::setpppdError(int err) {
1245 pppderror = err; 1294 pppderror = err;
1246} 1295}
1247 1296
1248QString PPPData::modemGroup() 1297QString PPPData::modemGroup()
1249{ 1298{
1250 if (modemDeviceGroup<0){ 1299 if (_modemName.isEmpty())
1251 qDebug("wrong modem %i\n using 0",modemDeviceGroup); 1300 _modemName = deviceList[0];
1252 modemDeviceGroup = 0; //FIXME! 1301 return _modemName;
1253 }
1254 return QString("%1_%1").arg(MODEM_GRP).arg(modemDeviceGroup);
1255} 1302}
1256 1303
1257 1304
1258QMap<QString,QString> PPPData::getConfiguredInterfaces() 1305QMap<QString,QString> PPPData::getConfiguredInterfaces()
1259{ 1306{
1260 QMap<QString,QString> ifaces; 1307 QMap<QString,QString> ifaces;
1261 Config config = PPPData::config(); 1308 Config config = PPPData::config();
1262 config.setGroup(ACCLIST_GRP); 1309 config.setGroup(ACCLIST_GRP);
1263 int count = config.readNumEntry( ACCOUNTS_COUNT, -1 ); 1310 int count = config.readNumEntry( ACCOUNTS_COUNT, -1 );
1264 QString accGrp, dev, acc; 1311 QString accGrp, dev, acc;
1265 for (int i = 0; i < count; i++){ 1312 for (int i = 0; i < count; i++){
1266 accGrp = QString("%1_%1").arg(ACCLIST_GRP).arg(i); 1313 accGrp = QString("%1_%1").arg(ACCLIST_GRP).arg(i);
1267 config.setGroup(accGrp); 1314 config.setGroup(accGrp);
1268 dev = config.readEntry( ACOUNTS_DEV, "error" ); 1315 dev = config.readEntry( ACOUNTS_DEV, "error" );
1269 acc = config.readEntry( ACOUNTS_ACC, "error" ); 1316 acc = config.readEntry( ACOUNTS_ACC, "error" );
1270 ifaces.insert( dev, acc ); 1317 ifaces.insert( dev, acc );
1271 } 1318 }
1272 1319
1273 return ifaces; 1320 return ifaces;
1274} 1321}
1275 1322
1276void PPPData::setConfiguredInterfaces( QMap<QString,QString> ifaces ) 1323void PPPData::setConfiguredInterfaces( QMap<QString,QString> ifaces )
1277{ 1324{
1278 QMap<QString,QString>::Iterator it; 1325 QMap<QString,QString>::Iterator it;
1279 int i = 0; 1326 int i = 0;
1280 Config cfg = config(); 1327 Config cfg = config();
1281 for( it = ifaces.begin(); it != ifaces.end(); ++it ){ 1328 for( it = ifaces.begin(); it != ifaces.end(); ++it ){
1282 cfg.setGroup(QString("%1_%1").arg(ACCLIST_GRP).arg(i++)); 1329 cfg.setGroup(QString("%1_%1").arg(ACCLIST_GRP).arg(i++));
1283 cfg.writeEntry( ACOUNTS_DEV, it.key() ); 1330 cfg.writeEntry( ACOUNTS_DEV, it.key() );
1284 cfg.writeEntry( ACOUNTS_ACC, it.data() ); 1331 cfg.writeEntry( ACOUNTS_ACC, it.data() );
1285 qDebug("I %i",i); 1332 qDebug("I %i",i);
1286 } 1333 }
1287 cfg.setGroup( ACCLIST_GRP ); 1334 cfg.setGroup( ACCLIST_GRP );
1288 qDebug("saved %i account settings", i); 1335 qDebug("saved %i account settings", i);
1289 cfg.writeEntry( ACCOUNTS_COUNT, i ); 1336 cfg.writeEntry( ACCOUNTS_COUNT, i );
1290 1337
1291} 1338}
1292 1339
1293/** 1340/**
1294 * pppd's getword() function knows about escape characters. 1341 * pppd's getword() function knows about escape characters.
1295 * If we write the username and password to the secrets file 1342 * If we write the username and password to the secrets file
1296 * we'll therefore have to escape back slashes. 1343 * we'll therefore have to escape back slashes.
1297 */ 1344 */
1298QString PPPData::encodeWord(const QString &s) { 1345QString PPPData::encodeWord(const QString &s) {
1299 QString r = s; 1346 QString r = s;
1300 r.replace(QRegExp("\\"), "\\\\"); 1347 r.replace(QRegExp("\\"), "\\\\");
1301 return r; 1348 return r;
1302} 1349}
1350
1351QStringList PPPData::getDevicesList()
1352{
1353 Config cfg("NetworkSetupPPP");
1354 cfg.setGroup("Devices_General");
1355 return cfg.readListEntry(DEVICES_LIST,DEVICES_LIST_SEP);
1356}
1357
1358QStringList PPPData::getAccountList()
1359{
1360 QStringList list;
1361 QString save_cgroup;
1362 save_cgroup = cgroup;
1363 for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) {
1364 cgroup = *it;
1365 list << accname();
1366 }
1367 cgroup = save_cgroup;
1368 return list;
1369};
1370
1371
1372const QString PPPData::devname()
1373{
1374 QString tmp = readConfig(modemGroup(), MODEMNAME_KEY );
1375 qDebug("PPPData::devname() of %s is %s", modemGroup().latin1(), tmp.latin1());
1376 return tmp;
1377}
1378
1379void PPPData::setDevname(const QString &n) {
1380 // if(!cgroup.isNull()) {
1381// // are we manipulating the default account's name ? then change it, too.
1382// bool def = accname() == defaultAccount();
1383// writeConfig(cgroup, NAME_KEY, n);
1384// if (def)
1385// setDefaultAccount(n);
1386// }
1387 writeConfig(modemGroup(), MODEMNAME_KEY, n );
1388}
1389
1390
1391bool PPPData::setDevice(const QString &dev )
1392{
1393 qDebug("setting device to >%s<", dev.latin1());
1394 QString save_mName = _modemName;
1395 for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) {
1396 _modemName = *it;
1397 qDebug("PPPData::setDevice %s is named %s", _modemName.latin1(), devname().latin1() );
1398 qDebug( "iterator %s", (*it).latin1() );
1399 if(devname() == dev) {
1400 qDebug("SUCCESS");
1401 return true;
1402 }
1403
1404 }
1405 _modemName = save_mName;
1406 qDebug("FAILURE");
1407 return false;
1408}
1409
1410bool PPPData::deleteDevice()
1411{
1412 // FIXME: check if this account exists in a config...
1413 Config cfg = PPPData::config();
1414 cfg.setGroup(modemGroup());
1415 cfg.clearGroup();
1416 deviceList.remove(modemGroup());
1417
1418 QString key;
1419 QStringList keys;
1420 for( QMap<QString,QString>::Iterator it = stringEntries.begin();
1421 it != stringEntries.end(); ++it ){
1422 QString val = it.data();
1423 key = it.key();
1424 keys = QStringList::split( "SEPARATOR", key );
1425 if(keys[0]==modemGroup()){
1426 stringEntries.remove( it );
1427 qDebug("deleting >%s< key >%s< value >%s<", keys[0].latin1(), keys[1].latin1(), val.latin1() );
1428 }
1429 }
1430 for( QMap<QString,int>::Iterator it = intEntries.begin();
1431 it != intEntries.end(); ++it ){
1432 int val = it.data();
1433 key = it.key();
1434 keys = QStringList::split( "SEPARATOR", key );
1435 if(keys[0]==modemGroup()){
1436 intEntries.remove( it );
1437 qDebug("deleting >%s< key >%s< value >%i<", keys[0].latin1(), keys[1].latin1(), val );
1438 }
1439 }
1440 for( QMap<QString,QStringList>::Iterator it = listEntries.begin();
1441 it != listEntries.end(); ++it ){
1442 QStringList val = it.data();
1443 key = it.key();
1444 if(keys[0]==modemGroup()){
1445 listEntries.remove( it );
1446 sepEntries.remove( key );
1447 qDebug("deleting >%s< key >%s< value >%s<", keys[0].latin1(), keys[1].latin1(), val.join("").latin1() );
1448 }
1449 }
1450
1451 return true;
1452
1453}
1454
1455bool PPPData::deleteDevice(const QString &dev)
1456{
1457 if(!setDevice(dev))
1458 return false;
1459
1460 return deleteDevice();
1461}
1462
1463int PPPData::newdevice()
1464{
1465
1466 qDebug("PPPData::newdevice highcount %i",highcountdev);
1467
1468
1469 QString tmp;
1470 tmp.sprintf("%s%i", MODEM_GRP, ++highcountdev);
1471 _modemName = QString(tmp);
1472 deviceList << tmp;
1473 qDebug("PPPData::newdevice() Group: >%s<",cgroup.latin1());
1474 return highcountdev;
1475}
1476
1477int PPPData::copydevice(const QString&)
1478{
1479 return false;
1480}
1481
1482
1483QStringList PPPData::getDevicesNamesList()
1484{
1485 QStringList list;
1486 QString save_mName = _modemName;
1487 qDebug("PPPData::getDevicesNamesList has %s", deviceList.join("---").latin1());
1488 for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) {
1489 _modemName = *it;
1490 qDebug("PPPData::getDevicesNamesList adding %s as %s",_modemName.latin1(), devname().latin1());
1491 list << devname();
1492 }
1493 _modemName = save_mName;
1494 return list;
1495};
diff --git a/noncore/settings/networksettings/ppp/pppdata.h b/noncore/settings/networksettings/ppp/pppdata.h
index 6e1379d..d1cbeb5 100644
--- a/noncore/settings/networksettings/ppp/pppdata.h
+++ b/noncore/settings/networksettings/ppp/pppdata.h
@@ -1,438 +1,467 @@
1/* -*- C++ -*- 1/* -*- C++ -*-
2 * 2 *
3 * kPPP: A pppd front end for the KDE project 3 * kPPP: A pppd front end for the KDE project
4 * 4 *
5 * $Id$ 5 * $Id$
6 * 6 *
7 * Copyright (C) 1997 Bernd Johannes Wuebben 7 * Copyright (C) 1997 Bernd Johannes Wuebben
8 * wuebben@math.cornell.edu 8 * wuebben@math.cornell.edu
9 * 9 *
10 * based on EzPPP: 10 * based on EzPPP:
11 * Copyright (C) 1997 Jay Painter 11 * Copyright (C) 1997 Jay Painter
12 * 12 *
13 * This program is free software; you can redistribute it and/or 13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU Library General Public 14 * modify it under the terms of the GNU Library General Public
15 * License as published by the Free Software Foundation; either 15 * License as published by the Free Software Foundation; either
16 * version 2 of the License, or (at your option) any later version. 16 * version 2 of the License, or (at your option) any later version.
17 * 17 *
18 * This program is distributed in the hope that it will be useful, 18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 * Library General Public License for more details. 21 * Library General Public License for more details.
22 * 22 *
23 * You should have received a copy of the GNU Library General Public 23 * You should have received a copy of the GNU Library General Public
24 * License along with this program; if not, write to the Free 24 * License along with this program; if not, write to the Free
25 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 */ 26 */
27 27
28#ifndef _PPPDATA_H_ 28#ifndef _PPPDATA_H_
29#define _PPPDATA_H_ 29#define _PPPDATA_H_
30 30
31#include <unistd.h> 31#include <unistd.h>
32#include <sys/types.h> 32#include <sys/types.h>
33 33
34#include <qcolor.h> 34#include <qcolor.h>
35#include <qmap.h> 35#include <qmap.h>
36#include <qstring.h> 36#include <qstring.h>
37#include <qstringlist.h> 37#include <qstringlist.h>
38 38
39#include "kpppconfig.h" 39#include "kpppconfig.h"
40 40
41class Config; 41class Config;
42 42
43// string lengths 43// string lengths
44 44
45#define PATH_SIZE 120 45#define PATH_SIZE 120
46#define MODEMSTR_SIZE 80 46#define MODEMSTR_SIZE 80
47#define ACCNAME_SIZE 50 47#define ACCNAME_SIZE 50
48#define PHONENUMBER_SIZE 60 48#define PHONENUMBER_SIZE 60
49#define COMMAND_SIZE 255 49#define COMMAND_SIZE 255
50#define IPADDR_SIZE 15 50#define IPADDR_SIZE 15
51#define DOMAIN_SIZE 50 51#define DOMAIN_SIZE 50
52#define TIMEOUT_SIZE 60 52#define TIMEOUT_SIZE 60
53 53
54// 54//
55// keys for config file 55// keys for config file
56// 56//
57 57
58// groups 58// groups
59#define GENERAL_GRP "PPP_General" 59#define GENERAL_GRP "PPP_General"
60#define MODEM_GRP "PPP_Modem" 60#define MODEM_GRP "PPP_Modem"
61#define ACCOUNT_GRP "PPP_Account" 61#define ACCOUNT_GRP "PPP_Account"
62#define ACCLIST_GRP "PPP_Accounts_List" 62#define ACCLIST_GRP "PPP_Accounts_List"
63//#define GRAPH_GRP "Graph" 63//#define GRAPH_GRP "Graph"
64//#define WINPOS_GRP "WindowPosition" 64//#define WINPOS_GRP "WindowPosition"
65 65
66// general 66// general
67#define ACCOUNT_LIST "AccountList"
68#define DEVICE_LIST "DeviceList"
67#define DEFAULTACCOUNT_KEY "DefaultAccount" 69#define DEFAULTACCOUNT_KEY "DefaultAccount"
68#define PPPDVERSION_KEY "pppdVersion" 70#define PPPDVERSION_KEY "pppdVersion"
69#define PPPDTIMEOUT_KEY "pppdTimeout" 71#define PPPDTIMEOUT_KEY "pppdTimeout"
70#define SHOWCLOCK_KEY "ShowClock" 72#define SHOWCLOCK_KEY "ShowClock"
71#define SHOWLOGWIN_KEY "ShowLogWindow" 73#define SHOWLOGWIN_KEY "ShowLogWindow"
72#define AUTOREDIAL_KEY "AutomaticRedial" 74#define AUTOREDIAL_KEY "AutomaticRedial"
73#define DISCONNECT_KEY "DisconnectOnXServerExit" 75#define DISCONNECT_KEY "DisconnectOnXServerExit"
74#define QUITONDISCONNECT_KEY "QuitOnDisconnect" 76#define QUITONDISCONNECT_KEY "QuitOnDisconnect"
75#define NUMACCOUNTS_KEY "NumberOfAccounts" 77#define NUMACCOUNTS_KEY "HighcountAccounts"
78#define NUMDEVICES_KEY "HighcountDevices"
76 #define ID_KEY "ID" 79 #define ID_KEY "ID"
77 80
78// modem 81// modem
82#define MODEMNAME_KEY "Modem_Name"
79#define MODEMDEV_KEY "Device" 83#define MODEMDEV_KEY "Device"
80#define LOCKFILE_KEY "UseLockFile" 84#define LOCKFILE_KEY "UseLockFile"
81#define FLOWCONTROL_KEY "FlowControl" 85#define FLOWCONTROL_KEY "FlowControl"
82#define SPEED_KEY "Speed" 86#define SPEED_KEY "Speed"
83#define TIMEOUT_KEY "Timeout" 87#define TIMEOUT_KEY "Timeout"
84#define TONEDURATION_KEY "ToneDuration" 88#define TONEDURATION_KEY "ToneDuration"
85#define BUSYWAIT_KEY "BusyWait" 89#define BUSYWAIT_KEY "BusyWait"
86#define INITSTR_KEY "InitString" 90#define INITSTR_KEY "InitString"
87#define INITRESP_KEY "InitResponse" 91#define INITRESP_KEY "InitResponse"
88#define PREINITDELAY_KEY "PreInitDelay" 92#define PREINITDELAY_KEY "PreInitDelay"
89#define INITDELAY_KEY "InitDelay" 93#define INITDELAY_KEY "InitDelay"
90#define NODTDETECT_KEY "NoDialToneDetection" 94#define NODTDETECT_KEY "NoDialToneDetection"
91#define DIALTONEWAIT_KEY "WaitForDialTone" 95#define DIALTONEWAIT_KEY "WaitForDialTone"
92#define DIALSTR_KEY "DialString" 96#define DIALSTR_KEY "DialString"
93#define CONNECTRESP_KEY "ConnectResponse" 97#define CONNECTRESP_KEY "ConnectResponse"
94#define BUSYRESP_KEY "BusyResponse" 98#define BUSYRESP_KEY "BusyResponse"
95#define NOCARRIERRESP_KEY "NoCarrierResponse" 99#define NOCARRIERRESP_KEY "NoCarrierResponse"
96#define NODIALTONERESP_KEY "NoDialToneResp" 100#define NODIALTONERESP_KEY "NoDialToneResp"
97#define HANGUPSTR_KEY "HangupString" 101#define HANGUPSTR_KEY "HangupString"
98#define HANGUPRESP_KEY "HangUpResponse" 102#define HANGUPRESP_KEY "HangUpResponse"
99#define ANSWERSTR_KEY "AnswerString" 103#define ANSWERSTR_KEY "AnswerString"
100#define RINGRESP_KEY "RingResponse" 104#define RINGRESP_KEY "RingResponse"
101#define ANSWERRESP_KEY "AnswerResponse" 105#define ANSWERRESP_KEY "AnswerResponse"
102#define ENTER_KEY "Enter" 106#define ENTER_KEY "Enter"
103#define ESCAPESTR_KEY "EscapeString" 107#define ESCAPESTR_KEY "EscapeString"
104#define ESCAPERESP_KEY "EscapeResponse" 108#define ESCAPERESP_KEY "EscapeResponse"
105#define ESCAPEGUARDTIME_KEY "EscapeGuardTime" 109#define ESCAPEGUARDTIME_KEY "EscapeGuardTime"
106#define USECDLINE_KEY "UseCDLine" 110#define USECDLINE_KEY "UseCDLine"
107#define VOLUME_HIGH "VolumeHigh" 111#define VOLUME_HIGH "VolumeHigh"
108#define VOLUME_MEDIUM "VolumeMedium" 112#define VOLUME_MEDIUM "VolumeMedium"
109#define VOLUME_OFF "VolumeOff" 113#define VOLUME_OFF "VolumeOff"
110#define VOLUME_KEY "Volume" 114#define VOLUME_KEY "Volume"
111 115
112// account 116// account
113#define NAME_KEY "Name" 117#define NAME_KEY "Name"
114#define PHONENUMBER_KEY "Phonenumber" 118#define PHONENUMBER_KEY "Phonenumber"
115#define DIAL_PREFIX_KEY "DialPrefix" 119#define DIAL_PREFIX_KEY "DialPrefix"
116#define AUTH_KEY "Authentication" 120#define AUTH_KEY "Authentication"
117#define STORED_PASSWORD_KEY "Password" 121#define STORED_PASSWORD_KEY "Password"
118#define STORED_USERNAME_KEY "Username" 122#define STORED_USERNAME_KEY "Username"
119#define STORE_PASSWORD_KEY "StorePassword" 123#define STORE_PASSWORD_KEY "StorePassword"
120#define BEFORE_CONNECT_KEY "BeforeConnect" 124#define BEFORE_CONNECT_KEY "BeforeConnect"
121#define COMMAND_KEY "Command" 125#define COMMAND_KEY "Command"
122#define DISCONNECT_COMMAND_KEY "DisconnectCommand" 126#define DISCONNECT_COMMAND_KEY "DisconnectCommand"
123#define BEFORE_DISCONNECT_KEY "BeforeDisconnect" 127#define BEFORE_DISCONNECT_KEY "BeforeDisconnect"
124#define IPADDR_KEY "IPAddr" 128#define IPADDR_KEY "IPAddr"
125#define SUBNETMASK_KEY "SubnetMask" 129#define SUBNETMASK_KEY "SubnetMask"
126#define ACCTENABLED_KEY "AccountingEnabled" 130#define ACCTENABLED_KEY "AccountingEnabled"
127#define VOLACCTENABLED_KEY "VolumeAccountingEnabled" 131#define VOLACCTENABLED_KEY "VolumeAccountingEnabled"
128#define ACCTFILE_KEY "AccountingFile" 132#define ACCTFILE_KEY "AccountingFile"
129#define AUTONAME_KEY "AutoName" 133#define AUTONAME_KEY "AutoName"
130#define GATEWAY_KEY "Gateway" 134#define GATEWAY_KEY "Gateway"
131#define DEFAULTROUTE_KEY "DefaultRoute" 135#define DEFAULTROUTE_KEY "DefaultRoute"
132#define DOMAIN_KEY "Domain" 136#define DOMAIN_KEY "Domain"
133#define DNS_KEY "DNS" 137#define DNS_KEY "DNS"
134#define AUTODNS_KEY "AutoDNS" 138#define AUTODNS_KEY "AutoDNS"
135#define EXDNSDISABLED_KEY "ExDNSDisabled" 139#define EXDNSDISABLED_KEY "ExDNSDisabled"
136#define SCRIPTCOM_KEY "ScriptCommands" 140#define SCRIPTCOM_KEY "ScriptCommands"
137#define SCRIPTARG_KEY "ScriptArguments" 141#define SCRIPTARG_KEY "ScriptArguments"
138#define PPPDARG_KEY "pppdArguments" 142#define PPPDARG_KEY "pppdArguments"
139#define PPP_DEBUG_OPTION "PPPDebug" 143#define PPP_DEBUG_OPTION "PPPDebug"
140#define ICONIFY_ON_CONNECT_KEY "iconifyOnConnect" 144#define ICONIFY_ON_CONNECT_KEY "iconifyOnConnect"
141#define DOCKING_KEY "DockIntoPanel" 145#define DOCKING_KEY "DockIntoPanel"
142#define TOTALCOSTS_KEY "TotalCosts" 146#define TOTALCOSTS_KEY "TotalCosts"
143#define TOTALBYTES_KEY "TotalBytes" 147#define TOTALBYTES_KEY "TotalBytes"
144 148
145// pppd errors 149// pppd errors
146#define E_IF_TIMEOUT 1 150#define E_IF_TIMEOUT 1
147#define E_PPPD_DIED 2 151#define E_PPPD_DIED 2
148 152
149// account list 153// account list
150#define ACCOUNTS_COUNT "Accounts_Count" 154#define ACCOUNTS_COUNT "Accounts_Count"
151#define ACOUNTS_DEV "Accounts_Modem" 155#define ACOUNTS_DEV "Accounts_Modem"
152#define ACOUNTS_ACC "Accounts_Account" 156#define ACOUNTS_ACC "Accounts_Account"
153 157
158#define DEVICESNAMES_LIST "DevicesNames_List"
159#define DEVICES_LIST "Devices_List"
160#define DEVICES_LIST_SEP ','
161
154class PPPData { 162class PPPData {
155public: 163public:
156 PPPData(); 164 PPPData();
157 ~PPPData() {}; 165 ~PPPData() {};
158 166
159 enum { NumInitStrings = 2 }; 167 enum { NumInitStrings = 2 };
160 168
161 // general functions 169 // general functions
162 void save(); 170 void save();
163 void cancel(); 171 void cancel();
164 172
173 QStringList getAccountList();
174
165 static QMap<QString,QString> getConfiguredInterfaces(); 175 static QMap<QString,QString> getConfiguredInterfaces();
166 static void setConfiguredInterfaces( QMap<QString,QString> ); 176 static void setConfiguredInterfaces( QMap<QString,QString> );
167 177
168 // function to read/write date to configuration file 178 // function to read/write date to configuration file
169 static Config config(); 179 static Config config();
170 QString readConfig(const QString &, const QString &, const QString &); 180 QString readConfig(const QString &, const QString &, const QString &);
171 int readNumConfig(const QString &, const QString &, int); 181 int readNumConfig(const QString &, const QString &, int);
172 bool readListConfig(const QString &, const QString &, 182 bool readListConfig(const QString &, const QString &,
173 QStringList &, char sep = ','); 183 QStringList &, char sep = ',');
174 void writeConfig(const QString &, const QString &, const QString &); 184 void writeConfig(const QString &, const QString &, const QString &);
175 void writeConfig(const QString &, const QString &, int); 185 void writeConfig(const QString &, const QString &, int);
176 void writeListConfig(const QString &, const QString &, 186 void writeListConfig(const QString &, const QString &,
177 QStringList &, char sep = ','); 187 QStringList &, char sep = ',');
178 188
179 // return the current account group 189 // return the current account group
180 QString currentGroup() { return cgroup; } 190 QString currentGroup() { return cgroup; }
181 QString modemGroup(); 191 QString modemGroup();
182 192
183 // functions to set/get general kppp info 193 // functions to set/get general kppp info
184 QString password(); 194 QString password();
185 void setPassword(const QString &); 195 void setPassword(const QString &);
186 196
187 int currentAccountID() { return caccount; }; 197// int currentAccountID() { return caccount; };
188 const QString defaultAccount(); 198 const QString defaultAccount();
189 void setDefaultAccount(const QString &); 199 void setDefaultAccount(const QString &);
190 200
191 void set_xserver_exit_disconnect(bool set); 201 void set_xserver_exit_disconnect(bool set);
192 bool get_xserver_exit_disconnect(); 202 bool get_xserver_exit_disconnect();
193 203
194 void setPPPDebug(bool set); 204 void setPPPDebug(bool set);
195 bool getPPPDebug(); 205 bool getPPPDebug();
196 206
197 void set_quit_on_disconnect(bool); 207 void set_quit_on_disconnect(bool);
198 bool quit_on_disconnect(); 208 bool quit_on_disconnect();
199 209
200 void set_show_clock_on_caption(bool set); 210 void set_show_clock_on_caption(bool set);
201 bool get_show_clock_on_caption(); 211 bool get_show_clock_on_caption();
202 212
203 void set_show_log_window(bool set); 213 void set_show_log_window(bool set);
204 bool get_show_log_window(); 214 bool get_show_log_window();
205 215
206 void set_automatic_redial(bool set); 216 void set_automatic_redial(bool set);
207 bool automatic_redial(); 217 bool automatic_redial();
208 218
209// void set_iconify_on_connect(bool set); 219// void set_iconify_on_connect(bool set);
210// bool get_iconify_on_connect(); 220// bool get_iconify_on_connect();
211 221
212// void set_dock_into_panel(bool set); 222// void set_dock_into_panel(bool set);
213// bool get_dock_into_panel(); 223// bool get_dock_into_panel();
214 224
215 const QString enter(); 225 const QString enter();
216 void setEnter(const QString &); 226 void setEnter(const QString &);
217 227
218 QString pppdVersion(); 228 QString pppdVersion();
219 bool pppdVersionMin(int ver, int mod, int patch); 229 bool pppdVersionMin(int ver, int mod, int patch);
220 230
221 int pppdTimeout(); 231 int pppdTimeout();
222 void setpppdTimeout(int); 232 void setpppdTimeout(int);
223 233
224 int busyWait(); 234 int busyWait();
225 void setbusyWait(int); 235 void setbusyWait(int);
226 236
227 bool modemLockFile(); 237 bool modemLockFile();
228 void setModemLockFile(bool set); 238 void setModemLockFile(bool set);
229 239
230 int modemEscapeGuardTime(); 240 int modemEscapeGuardTime();
231 void setModemEscapeGuardTime(int i); 241 void setModemEscapeGuardTime(int i);
232 242
233 void setModemEscapeStr(const QString &); 243 void setModemEscapeStr(const QString &);
234 const QString modemEscapeStr(); 244 const QString modemEscapeStr();
235 245
236 void setModemEscapeResp(const QString &); 246 void setModemEscapeResp(const QString &);
237 const QString modemEscapeResp(); 247 const QString modemEscapeResp();
238 248
239 const QString modemDevice(); 249// const QString modemName();
240 bool setModemDevice(const QString &); 250// bool setModemName(const QString &);
251// bool changeModemName(const QString &);
252
253 const QString modemDevice();
254 bool setModemDevice(const QString &);
241 255
242 const QString flowcontrol(); 256 const QString flowcontrol();
243 void setFlowcontrol(const QString &); 257 void setFlowcontrol(const QString &);
244 258
245 int modemTimeout(); 259 int modemTimeout();
246 void setModemTimeout(int); 260 void setModemTimeout(int);
247 261
248 int modemToneDuration(); 262 int modemToneDuration();
249 void setModemToneDuration(int); 263 void setModemToneDuration(int);
250 264
251 QString volumeInitString(); 265 QString volumeInitString();
252 int volume(); 266 int volume();
253 void setVolume(int); 267 void setVolume(int);
254 268
255 int waitForDialTone(); 269 int waitForDialTone();
256 void setWaitForDialTone(int i); 270 void setWaitForDialTone(int i);
257 271
258 // modem command strings/responses 272 // modem command strings/responses
259 const QString modemInitStr(int i); 273 const QString modemInitStr(int i);
260 void setModemInitStr(int i, const QString &); 274 void setModemInitStr(int i, const QString &);
261 275
262 const QString modemInitResp(); 276 const QString modemInitResp();
263 void setModemInitResp(const QString &); 277 void setModemInitResp(const QString &);
264 278
265 int modemPreInitDelay(); 279 int modemPreInitDelay();
266 void setModemPreInitDelay(int); 280 void setModemPreInitDelay(int);
267 281
268 int modemInitDelay(); 282 int modemInitDelay();
269 void setModemInitDelay(int); 283 void setModemInitDelay(int);
270 284
271 QString modemNoDialToneDetectionStr(); 285 QString modemNoDialToneDetectionStr();
272 void setModemNoDialToneDetectionStr(const QString &); 286 void setModemNoDialToneDetectionStr(const QString &);
273 287
274 const QString modemDialStr(); 288 const QString modemDialStr();
275 void setModemDialStr(const QString &); 289 void setModemDialStr(const QString &);
276 290
277 const QString modemConnectResp(); 291 const QString modemConnectResp();
278 void setModemConnectResp(const QString &); 292 void setModemConnectResp(const QString &);
279 293
280 const QString modemBusyResp(); 294 const QString modemBusyResp();
281 void setModemBusyResp(const QString &); 295 void setModemBusyResp(const QString &);
282 296
283 const QString modemNoCarrierResp(); 297 const QString modemNoCarrierResp();
284 void setModemNoCarrierResp(const QString &); 298 void setModemNoCarrierResp(const QString &);
285 299
286 const QString modemNoDialtoneResp(); 300 const QString modemNoDialtoneResp();
287 void setModemNoDialtoneResp(const QString &); 301 void setModemNoDialtoneResp(const QString &);
288 302
289 const QString modemHangupStr(); 303 const QString modemHangupStr();
290 void setModemHangupStr(const QString &); 304 void setModemHangupStr(const QString &);
291 305
292 const QString modemHangupResp(); 306 const QString modemHangupResp();
293 void setModemHangupResp(const QString &); 307 void setModemHangupResp(const QString &);
294 308
295 const QString modemAnswerStr(); 309 const QString modemAnswerStr();
296 void setModemAnswerStr(const QString &); 310 void setModemAnswerStr(const QString &);
297 311
298 const QString modemRingResp(); 312 const QString modemRingResp();
299 void setModemRingResp(const QString &); 313 void setModemRingResp(const QString &);
300 314
301 const QString modemAnswerResp(); 315 const QString modemAnswerResp();
302 void setModemAnswerResp(const QString &); 316 void setModemAnswerResp(const QString &);
303 317
304 QString volumeOff(); 318 QString volumeOff();
305 void setVolumeOff(const QString &); 319 void setVolumeOff(const QString &);
306 320
307 QString volumeMedium(); 321 QString volumeMedium();
308 void setVolumeMedium(const QString &); 322 void setVolumeMedium(const QString &);
309 323
310 QString volumeHigh(); 324 QString volumeHigh();
311 void setVolumeHigh(const QString &); 325 void setVolumeHigh(const QString &);
312 326
313 // functions to set/get account information 327 // functions to set/get account information
314 int count() const; 328 int count() const;
315 bool setAccount(const QString &); 329 bool setAccount(const QString &);
316 bool setAccountbyIndex(int); 330// bool setAccountbyIndex(int);
317 331
318 bool isUniqueAccname(const QString &); 332 bool isUniqueAccname(const QString &);
333 bool isUniqueDevname(const QString &);
319 334
320 bool deleteAccount(); 335 bool deleteAccount();
321 bool deleteAccount(const QString &); 336 bool deleteAccount(const QString &);
322 int newaccount(); 337 int newaccount();
323 int copyaccount(int i); 338 int copyaccount(const QString&);
324 339
325 const QString accname(); 340 const QString accname();
326 void setAccname(const QString &); 341 void setAccname(const QString &);
327 342
328 QStringList &phonenumbers(); 343 QStringList &phonenumbers();
329 const QString phonenumber(); 344 const QString phonenumber();
330 void setPhonenumber(const QString &); 345 void setPhonenumber(const QString &);
331 346
332 const QString dialPrefix(); 347 const QString dialPrefix();
333 void setDialPrefix(const QString &); 348 void setDialPrefix(const QString &);
334 349
335 int authMethod(); 350 int authMethod();
336 void setAuthMethod(int); 351 void setAuthMethod(int);
337 352
338 const QString storedUsername(); 353 const QString storedUsername();
339 void setStoredUsername(const QString &); 354 void setStoredUsername(const QString &);
340 355
341 const QString storedPassword(); 356 const QString storedPassword();
342 void setStoredPassword(const QString &); 357 void setStoredPassword(const QString &);
343 358
344 bool storePassword(); 359 bool storePassword();
345 void setStorePassword(bool); 360 void setStorePassword(bool);
346 361
347 const QString speed(); 362 const QString speed();
348 void setSpeed(const QString &); 363 void setSpeed(const QString &);
349 364
350 const QString command_before_connect(); 365 const QString command_before_connect();
351 void setCommand_before_connect(const QString &); 366 void setCommand_before_connect(const QString &);
352 367
353 const QString command_on_connect(); 368 const QString command_on_connect();
354 void setCommand_on_connect(const QString &); 369 void setCommand_on_connect(const QString &);
355 370
356 const QString command_on_disconnect(); 371 const QString command_on_disconnect();
357 void setCommand_on_disconnect(const QString &); 372 void setCommand_on_disconnect(const QString &);
358 373
359 const QString command_before_disconnect(); 374 const QString command_before_disconnect();
360 void setCommand_before_disconnect(const QString &); 375 void setCommand_before_disconnect(const QString &);
361 376
362 const QString ipaddr(); 377 const QString ipaddr();
363 void setIpaddr(const QString &); 378 void setIpaddr(const QString &);
364 379
365 const QString subnetmask(); 380 const QString subnetmask();
366 void setSubnetmask(const QString &); 381 void setSubnetmask(const QString &);
367 382
368 bool AcctEnabled(); 383 bool AcctEnabled();
369 void setAcctEnabled(bool set); 384 void setAcctEnabled(bool set);
370 385
371// int VolAcctEnabled(); 386// int VolAcctEnabled();
372// void setVolAcctEnabled(int set); 387// void setVolAcctEnabled(int set);
373 388
374 bool autoDNS(); 389 bool autoDNS();
375 void setAutoDNS(bool set); 390 void setAutoDNS(bool set);
376 391
377 bool exDNSDisabled(); 392 bool exDNSDisabled();
378 void setExDNSDisabled(bool set); 393 void setExDNSDisabled(bool set);
379 394
380 bool autoname(); 395 bool autoname();
381 void setAutoname(bool set); 396 void setAutoname(bool set);
382 397
383 const QString gateway(); 398 const QString gateway();
384 void setGateway(const QString &); 399 void setGateway(const QString &);
385 400
386 bool defaultroute(); 401 bool defaultroute();
387 void setDefaultroute(bool set); 402 void setDefaultroute(bool set);
388 403
389 QStringList &dns(); 404 QStringList &dns();
390 void setDns(QStringList &); 405 void setDns(QStringList &);
391 406
392 const QString domain(); 407 const QString domain();
393 void setDomain(const QString &); 408 void setDomain(const QString &);
394 409
395 QStringList &scriptType(); 410 QStringList &scriptType();
396 void setScriptType(QStringList &); 411 void setScriptType(QStringList &);
397 412
398 QStringList &script(); 413 QStringList &script();
399 void setScript(QStringList &); 414 void setScript(QStringList &);
400 415
401 QStringList &pppdArgument(); 416 QStringList &pppdArgument();
402 void setpppdArgumentDefaults(); 417 void setpppdArgumentDefaults();
403 void setpppdArgument(QStringList &); 418 void setpppdArgument(QStringList &);
404 419
405 //functions to change/set the child pppd process info 420 //functions to change/set the child pppd process info
406 bool pppdRunning() const; 421 bool pppdRunning() const;
407 void setpppdRunning(bool set); 422 void setpppdRunning(bool set);
408 423
409 int pppdError() const; 424 int pppdError() const;
410 void setpppdError(int err); 425 void setpppdError(int err);
411 426
427 QStringList getDevicesList();
412 428
413 static QString encodeWord(const QString &s); 429 static QString encodeWord(const QString &s);
414 430
431 const QString devname();
432 void setDevname(const QString &);
433 bool setDevice(const QString& );
434 bool deleteDevice();
435 bool deleteDevice(const QString &);
436 int newdevice();
437 int copydevice(const QString&);
438 QStringList getDevicesNamesList();
439
415private: 440private:
416 441
417 //static PPPData *_data; 442 //static PPPData *_data;
418 int modemDeviceGroup; 443// int modemDeviceGroup;
419 QString passwd; 444 QString passwd;
420 // static Config* config; // configuration object 445 QString _modemName;
421 int highcount; // index of highest account 446 int highcount; // index of highest account
422 int caccount; // index of the current account 447 int highcountdev; // index of highest device
448// int caccount; // index of the current account
423 QString cgroup; // name of current config group 449 QString cgroup; // name of current config group
424 pid_t suidprocessid; // process ID of setuid child 450 pid_t suidprocessid; // process ID of setuid child
425 bool pppdisrunning; // pppd process 451 bool pppdisrunning; // pppd process
426 // daemon 452 // daemon
427 int pppderror; // error encounterd running pppd 453 int pppderror; // error encounterd running pppd
428 int pppdVer, pppdMod, pppdPatch; // pppd version 454 int pppdVer, pppdMod, pppdPatch; // pppd version
429 455
456
430 QStringList phonelist; 457 QStringList phonelist;
458 QStringList accountList;
459 QStringList deviceList;
431 QMap<QString,QString> stringEntries; 460 QMap<QString,QString> stringEntries;
432 QMap<QString,int> intEntries; 461 QMap<QString,int> intEntries;
433 QMap<QString,QStringList> listEntries; 462 QMap<QString,QStringList> listEntries;
434 QMap<QString,QChar> sepEntries; 463 QMap<QString,QChar> sepEntries;
435 464
436}; 465};
437 466
438#endif 467#endif
diff --git a/noncore/settings/networksettings/ppp/pppmodule.cpp b/noncore/settings/networksettings/ppp/pppmodule.cpp
index d4c137b..af05eb7 100644
--- a/noncore/settings/networksettings/ppp/pppmodule.cpp
+++ b/noncore/settings/networksettings/ppp/pppmodule.cpp
@@ -1,137 +1,250 @@
1#include <errno.h>
2#include <signal.h>
1 3
4
5#include <qpe/config.h>
6
7#include "modem.h"
2#include "pppconfig.h" 8#include "pppconfig.h"
3#include "pppmodule.h" 9#include "pppmodule.h"
4#include "pppdata.h" 10#include "pppdata.h"
5#include "interfaceinformationppp.h" 11#include "interfaceinformationppp.h"
6#include "interfaceppp.h" 12#include "interfaceppp.h"
7 13
14// don't polute global namespace
15namespace {
16 /*
17 * If network settings is qutting and we've ppp
18 * devices open we need to save the pid_t the PPData
19 * and the interface number
20 */
21 struct Connection {
22 pid_t pid;
23 QString device;
24 QString name;
25 };
26 class InterfaceKeeper {
27 public:
28 InterfaceKeeper();
29 ~InterfaceKeeper();
30
31 void addInterface( pid_t, const QString& pppDev, const QString& name );
32 QMap<QString, Connection> interfaces()const; // will check if still available
33 private:
34 bool isAvailable( pid_t )const;
35 QMap<QString, Connection> m_interfaces;
36 };
37}
38
8 39
9/** 40/**
10 * Constructor, find all of the possible interfaces 41 * Constructor, find all of the possible interfaces
42 * We also need to restore the state.. it could be that
43 * an interface was up while closing the application
44 * we need to be able to shut it down...
11 */ 45 */
12PPPModule::PPPModule() : Module() 46PPPModule::PPPModule() : Module()
13{ 47{
48 InterfaceKeeper inFace;
49 QMap<QString,Connection> running = inFace.interfaces();
50 QStringList handledInterfaceNames;
51
14 QMap<QString,QString> ifaces = PPPData::getConfiguredInterfaces(); 52 QMap<QString,QString> ifaces = PPPData::getConfiguredInterfaces();
15 QMap<QString,QString>::Iterator it; 53 QMap<QString,QString>::Iterator it;
16 InterfacePPP *iface; 54 InterfacePPP *iface;
17 qDebug("getting interfaces"); 55 qDebug("getting interfaces");
18 for( it = ifaces.begin(); it != ifaces.end(); ++it ){ 56 for( it = ifaces.begin(); it != ifaces.end(); ++it ){
19 qDebug("ifaces %s", it.key().latin1()); 57 qDebug("ifaces %s %s", it.key().latin1(), it.data().latin1() );
20 iface = new InterfacePPP( 0, it.key() ); 58 iface = new InterfacePPP( 0, it.key() );
21 iface->setHardwareName( it.data() ); 59 iface->setHardwareName( it.data() );
22 list.append( (Interface*)iface ); 60 list.append( (Interface*)iface );
61
62 // check if (*it) is one of the running ifaces
63 if ( running.contains( it.data() ) ) {
64 qDebug("iface is running %s", it.key().latin1() );
65 handledInterfaceNames << running[it.data()].device;
66 iface->setStatus( true );
67 iface->setPPPDpid( running[it.data()].pid );
68 iface->modem()->setPPPDevice( running[it.data()].device );
69 iface->refresh();
70 }
23 } 71 }
72
73 setHandledInterfaceNames( handledInterfaceNames );
24} 74}
25 75
26/** 76/**
27 * Delete any interfaces that we own. 77 * Delete any interfaces that we own.
28 */ 78 */
29PPPModule::~PPPModule(){ 79PPPModule::~PPPModule(){
80 qDebug("PPPModule::~PPPModule() " );
30 QMap<QString,QString> ifaces; 81 QMap<QString,QString> ifaces;
82 InterfaceKeeper keeper;
31 Interface *i; 83 Interface *i;
32 for ( i=list.first(); i != 0; i=list.next() ){ 84 for ( i=list.first(); i != 0; i=list.next() ){
85 /* if online save the state */
86 if ( i->getStatus() ) {
87 qDebug("Iface %s is still up", i->getHardwareName().latin1() );
88 InterfacePPP* ppp = static_cast<InterfacePPP*>(i);
89 keeper.addInterface( ppp->pppPID(), ppp->pppDev(), ppp->getHardwareName() );
90 }
33 ifaces.insert( i->getInterfaceName(), i->getHardwareName() ); 91 ifaces.insert( i->getInterfaceName(), i->getHardwareName() );
34 delete i; 92 delete i;
35 } 93 }
36 PPPData::setConfiguredInterfaces( ifaces ); 94 PPPData::setConfiguredInterfaces( ifaces );
37} 95}
38 96
39/** 97/**
40 * Change the current profile 98 * Change the current profile
41 */ 99 */
42void PPPModule::setProfile(const QString &newProfile){ 100void PPPModule::setProfile(const QString &newProfile){
43 profile = newProfile; 101 profile = newProfile;
44} 102}
45 103
46/** 104/**
47 * get the icon name for this device. 105 * get the icon name for this device.
48 * @param Interface* can be used in determining the icon. 106 * @param Interface* can be used in determining the icon.
49 * @return QString the icon name (minus .png, .gif etc) 107 * @return QString the icon name (minus .png, .gif etc)
50 */ 108 */
51QString PPPModule::getPixmapName(Interface* ){ 109QString PPPModule::getPixmapName(Interface* ){
52 return "ppp"; 110 return "ppp";
53} 111}
54 112
55/** 113/**
56 * Check to see if the interface i is owned by this module. 114 * Check to see if the interface i is owned by this module.
57 * @param Interface* interface to check against 115 * @param Interface* interface to check against
58 * @return bool true if i is owned by this module, false otherwise. 116 * @return bool true if i is owned by this module, false otherwise.
59 */ 117 */
60bool PPPModule::isOwner(Interface *i){ 118bool PPPModule::isOwner(Interface *i){
61 return list.find( i ) != -1; 119 return list.find( i ) != -1;
62} 120}
63 121
64/** 122/**
65 * Create, and return the WLANConfigure Module 123 * Create, and return the WLANConfigure Module
66 * @return QWidget* pointer to this modules configure. 124 * @return QWidget* pointer to this modules configure.
67 */ 125 */
68QWidget *PPPModule::configure(Interface *i){ 126QWidget *PPPModule::configure(Interface *i){
69 qDebug("return ModemWidget"); 127 qDebug("return ModemWidget");
70 PPPConfigWidget *pppconfig = new PPPConfigWidget( (InterfacePPP*)i, 128 PPPConfigWidget *pppconfig = new PPPConfigWidget( (InterfacePPP*)i,
71 0, "PPPConfig", false, 129 0, "PPPConfig", false,
72 Qt::WDestructiveClose ); 130 Qt::WDestructiveClose | Qt::WStyle_ContextHelp);
73 return pppconfig; 131 return pppconfig;
74} 132}
75 133
76/** 134/**
77 * Create, and return the Information Module 135 * Create, and return the Information Module
78 * @return QWidget* pointer to this modules info. 136 * @return QWidget* pointer to this modules info.
79 */ 137 */
80QWidget *PPPModule::information(Interface *i){ 138QWidget *PPPModule::information(Interface *i){
81 // We don't have any advanced pppd information widget yet :-D 139 // We don't have any advanced pppd information widget yet :-D
82 // TODO ^ 140 // TODO ^
83 141
84 return new InterfaceInformationPPP( 0, "InterfaceInformationPPP", i ); 142 return new InterfaceInformationPPP( 0, "InterfaceInformationPPP", i );
85} 143}
86 144
87/** 145/**
88 * Get all active (up or down) interfaces 146 * Get all active (up or down) interfaces
89 * @return QList<Interface> A list of interfaces that exsist that havn't 147 * @return QList<Interface> A list of interfaces that exsist that havn't
90 * been called by isOwner() 148 * been called by isOwner()
91 */ 149 */
92QList<Interface> PPPModule::getInterfaces(){ 150QList<Interface> PPPModule::getInterfaces(){
93 // List all of the files in the peer directory 151 // List all of the files in the peer directory
94 qDebug("PPPModule::getInterfaces"); 152 qDebug("PPPModule::getInterfaces");
95 return list; 153 return list;
96} 154}
97 155
98/** 156/**
99 * Attempt to add a new interface as defined by name 157 * Attempt to add a new interface as defined by name
100 * @param name the name of the type of interface that should be created given 158 * @param name the name of the type of interface that should be created given
101 * by possibleNewInterfaces(); 159 * by possibleNewInterfaces();
102 * @return Interface* NULL if it was unable to be created. 160 * @return Interface* NULL if it was unable to be created.
103 */ 161 */
104Interface *PPPModule::addNewInterface(const QString &newInterface){ 162Interface *PPPModule::addNewInterface(const QString &newInterface){
105 163
106 InterfacePPP *ifaceppp; 164 InterfacePPP *ifaceppp;
107 Interface *iface; 165 Interface *iface;
108 ifaceppp = new InterfacePPP(); 166 ifaceppp = new InterfacePPP();
109 PPPConfigWidget imp(ifaceppp, 0, "PPPConfigImp", true); 167 PPPConfigWidget imp(ifaceppp, 0, "PPPConfigImp", true);
110 imp.showMaximized(); 168 imp.showMaximized();
111 if(imp.exec() == QDialog::Accepted ){ 169 if(imp.exec() == QDialog::Accepted ){
112 iface = (InterfacePPP*) ifaceppp; 170 iface = (InterfacePPP*) ifaceppp;
113 iface->setModuleOwner( this ); 171 iface->setModuleOwner( this );
114 list.append( iface ); 172 list.append( iface );
115 return iface; 173 return iface;
116 }else { 174 }else {
117 delete ifaceppp; 175 delete ifaceppp;
118 iface = NULL; 176 iface = NULL;
119 } 177 }
120 return iface; 178 return iface;
121} 179}
122 180
123/** 181/**
124 * Attempts to remove the interface, doesn't delete i 182 * Attempts to remove the interface, doesn't delete i
125 * @return bool true if successfull, false otherwise. 183 * @return bool true if successfull, false otherwise.
126 */ 184 */
127bool PPPModule::remove(Interface *i){ 185bool PPPModule::remove(Interface *i){
128 return list.remove(i); 186 return list.remove(i);
129} 187}
130 188
131void PPPModule::possibleNewInterfaces(QMap<QString, QString> &newIfaces) 189void PPPModule::possibleNewInterfaces(QMap<QString, QString> &newIfaces)
132{ 190{
133 newIfaces.insert(QObject::tr("PPP") , 191 newIfaces.insert(QObject::tr("PPP") ,
134 QObject::tr("generic ppp device")); 192 QObject::tr("generic ppp device"));
135} 193}
136 194
137 195
196
197namespace {
198 InterfaceKeeper::InterfaceKeeper( ) {
199 }
200 InterfaceKeeper::~InterfaceKeeper() {
201 Config cfg("ppp_plugin_keeper");
202 QStringList lst = cfg.groupList();
203 for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
204 Connection con;
205 cfg.setGroup( (*it) );
206 cfg.clearGroup();
207 }
208
209 for (QMap<QString, Connection>::Iterator it = m_interfaces.begin(); it != m_interfaces.end(); ++it ) {
210 Connection con = it.data();
211 cfg.setGroup( con.name );
212 cfg.writeEntry( "pid", con.pid );
213 cfg.writeEntry( "device", con.device );
214 }
215 }
216 void InterfaceKeeper::addInterface(pid_t pid, const QString& dev, const QString& name ) {
217 Connection con;
218 con.pid = pid;
219 con.device = dev;
220 con.name = name;
221 m_interfaces.insert( name, con );
222 }
223 QMap<QString, Connection> InterfaceKeeper::interfaces()const {
224 Config cfg("ppp_plugin_keeper");
225 QMap<QString, Connection> ifaces;
226 QStringList lst = cfg.groupList();
227 for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
228 Connection con;
229 cfg.setGroup( (*it) );
230 con.name = (*it);
231 con.pid = cfg.readNumEntry("pid");
232 con.device = cfg.readEntry("device");
233 qDebug(" %s %s %d", con.name.latin1(), con.device.latin1(), con.pid );
234
235 if ( con.pid != -1 && isAvailable( con.pid ) )
236 ifaces.insert( con.name, con );
237 }
238 return ifaces;
239 }
240 bool InterfaceKeeper::isAvailable( pid_t p)const {
241 if (::kill(p, 0 ) == 0 || errno != ESRCH ) {
242 qDebug("isAvailable %d", p);
243 return true;
244 }
245
246 qDebug("notAvailable %d", p);
247 return false;
248 }
249
250}
diff --git a/noncore/settings/networksettings/ppp/runtests.cpp b/noncore/settings/networksettings/ppp/runtests.cpp
index 83ef2ea..5548601 100644
--- a/noncore/settings/networksettings/ppp/runtests.cpp
+++ b/noncore/settings/networksettings/ppp/runtests.cpp
@@ -1,279 +1,277 @@
1/* 1/*
2 * kPPP: A pppd front end for the KDE project 2 * kPPP: A pppd front end for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * 5 *
6 * Copyright (C) 1997 Bernd Johannes Wuebben 6 * Copyright (C) 1997 Bernd Johannes Wuebben
7 * wuebben@math.cornell.edu 7 * wuebben@math.cornell.edu
8 * 8 *
9 * This file was contributed by Mario Weilguni <mweilguni@sime.com> 9 * This file was contributed by Mario Weilguni <mweilguni@sime.com>
10 * Thanks Mario ! 10 * Thanks Mario !
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public 13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either 14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version. 15 * version 2 of the License, or (at your option) any later version.
16 * 16 *
17 * This program is distributed in the hope that it will be useful, 17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details. 20 * Library General Public License for more details.
21 * 21 *
22 * You should have received a copy of the GNU Library General Public 22 * You should have received a copy of the GNU Library General Public
23 * License along with this program; if not, write to the Free 23 * License along with this program; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */ 25 */
26 26
27#include <qdir.h> 27#include <qdir.h>
28#include "runtests.h" 28#include "runtests.h"
29#include <ctype.h> 29#include <ctype.h>
30#include <unistd.h> 30#include <unistd.h>
31#include <qmessagebox.h> 31#include <qmessagebox.h>
32#include <sys/stat.h> 32#include <sys/stat.h>
33#include <stdlib.h> 33#include <stdlib.h>
34#include <sys/types.h> 34#include <sys/types.h>
35#include <pwd.h> 35#include <pwd.h>
36#include <netinet/in.h> 36#include <netinet/in.h>
37 37
38#ifdef HAVE_RESOLV_H 38#ifdef HAVE_RESOLV_H
39#include <arpa/nameser.h> 39#include <arpa/nameser.h>
40#include <resolv.h> 40#include <resolv.h>
41#endif 41#endif
42 42
43#ifndef _PATH_RESCONF 43#ifndef _PATH_RESCONF
44#define _PATH_RESCONF "/etc/resolv.conf" 44#define _PATH_RESCONF "/etc/resolv.conf"
45#endif 45#endif
46 46
47//#include <klocale.h>
48#define i18n QObject::tr
49#include "pppdata.h" 47#include "pppdata.h"
50 48
51// initial effective uid (main.cpp) 49// initial effective uid (main.cpp)
52extern uid_t euid; 50extern uid_t euid;
53 51
54// secure pppd location (opener.cpp) 52// secure pppd location (opener.cpp)
55extern const char* pppdPath(); 53extern const char* pppdPath();
56 54
57// shamelessly stolen from pppd-2.3.5 55// shamelessly stolen from pppd-2.3.5
58/******************************************************************** 56/********************************************************************
59 * 57 *
60 * Internal routine to decode the version.modification.patch level 58 * Internal routine to decode the version.modification.patch level
61 */ 59 */
62 60
63static void decode_version (const char *_buf, int *version, 61static void decode_version (const char *_buf, int *version,
64 int *modification, int *patch) 62 int *modification, int *patch)
65 { 63 {
66 char *buffer = qstrdup(_buf); 64 char *buffer = qstrdup(_buf);
67 char *buf = buffer; 65 char *buf = buffer;
68 *version = (int) strtoul (buf, &buf, 10); 66 *version = (int) strtoul (buf, &buf, 10);
69 *modification = 0; 67 *modification = 0;
70 *patch = 0; 68 *patch = 0;
71 69
72 if (*buf == '.') 70 if (*buf == '.')
73 { 71 {
74 ++buf; 72 ++buf;
75 *modification = (int) strtoul (buf, &buf, 10); 73 *modification = (int) strtoul (buf, &buf, 10);
76 if (*buf == '.') 74 if (*buf == '.')
77 { 75 {
78 ++buf; 76 ++buf;
79 *patch = (int) strtoul (buf, &buf, 10); 77 *patch = (int) strtoul (buf, &buf, 10);
80 } 78 }
81 } 79 }
82 80
83 if (*buf != '\0') 81 if (*buf != '\0')
84 { 82 {
85 *version = 83 *version =
86 *modification = 84 *modification =
87 *patch = 0; 85 *patch = 0;
88 } 86 }
89 87
90 delete [] buffer; 88 delete [] buffer;
91 } 89 }
92 90
93 91
94void pppdVersion(int *version, int *modification, int *patch) { 92void pppdVersion(int *version, int *modification, int *patch) {
95 char buffer[30]; 93 char buffer[30];
96 const char *pppd; 94 const char *pppd;
97 char *query; 95 char *query;
98 96
99 *version = *modification = *patch = 0; 97 *version = *modification = *patch = 0;
100 98
101 // locate pppd 99 // locate pppd
102 if(!(pppd = pppdPath())) 100 if(!(pppd = pppdPath()))
103 return; 101 return;
104 102
105 // call pppd with --version option 103 // call pppd with --version option
106 if(!(query = new char[strlen(pppd)+25])) 104 if(!(query = new char[strlen(pppd)+25]))
107 return; 105 return;
108 strcpy(query, pppd); 106 strcpy(query, pppd);
109 // had to add a dummy device to prevent a "no device specified 107 // had to add a dummy device to prevent a "no device specified
110 // and stdin is not a tty" error from newer pppd versions. 108 // and stdin is not a tty" error from newer pppd versions.
111 strcat(query, " --version /dev/tty 2>&1"); 109 strcat(query, " --version /dev/tty 2>&1");
112 fflush(0L); 110 fflush(0L);
113 FILE *output = popen(query, "r"); 111 FILE *output = popen(query, "r");
114 delete [] query; 112 delete [] query;
115 if(!output) 113 if(!output)
116 return; 114 return;
117 115
118 // read output 116 // read output
119 int size = fread(buffer, sizeof(char), 29, output); 117 int size = fread(buffer, sizeof(char), 29, output);
120 118
121 if(ferror(output)) { 119 if(ferror(output)) {
122 pclose(output); 120 pclose(output);
123 return; 121 return;
124 } 122 }
125 pclose(output); 123 pclose(output);
126 buffer[size] = '\0'; 124 buffer[size] = '\0';
127 125
128 // find position of version number x.y.z 126 // find position of version number x.y.z
129 char *p = buffer; 127 char *p = buffer;
130 while(*p && !isdigit(*p)) 128 while(*p && !isdigit(*p))
131 p++; 129 p++;
132 if (*p == 0) 130 if (*p == 0)
133 return; 131 return;
134 char *p2 = p; 132 char *p2 = p;
135 while(*p2 == '.' || isdigit(*p2)) 133 while(*p2 == '.' || isdigit(*p2))
136 p2++; 134 p2++;
137 *p2 = '\0'; 135 *p2 = '\0';
138 136
139 decode_version(p, version, modification, patch); 137 decode_version(p, version, modification, patch);
140} 138}
141 139
142 140
143int uidFromName(const char *uname) { 141int uidFromName(const char *uname) {
144 struct passwd *pw; 142 struct passwd *pw;
145 143
146 setpwent(); 144 setpwent();
147 while((pw = getpwent()) != NULL) { 145 while((pw = getpwent()) != NULL) {
148 if(strcmp(uname, pw->pw_name) == 0) { 146 if(strcmp(uname, pw->pw_name) == 0) {
149 int uid = pw->pw_uid; 147 int uid = pw->pw_uid;
150 endpwent(); 148 endpwent();
151 return uid; 149 return uid;
152 } 150 }
153 } 151 }
154 152
155 endpwent(); 153 endpwent();
156 return -1; 154 return -1;
157} 155}
158 156
159 157
160const char *homedirFromUid(uid_t uid) { 158const char *homedirFromUid(uid_t uid) {
161 struct passwd *pw; 159 struct passwd *pw;
162 char *d = 0; 160 char *d = 0;
163 161
164 setpwent(); 162 setpwent();
165 while((pw = getpwent()) != NULL) { 163 while((pw = getpwent()) != NULL) {
166 if(pw->pw_uid == uid) { 164 if(pw->pw_uid == uid) {
167 d = strdup(pw->pw_dir); 165 d = strdup(pw->pw_dir);
168 endpwent(); 166 endpwent();
169 return d; 167 return d;
170 } 168 }
171 } 169 }
172 170
173 endpwent(); 171 endpwent();
174 return d; 172 return d;
175} 173}
176 174
177 175
178const char* getHomeDir() { 176const char* getHomeDir() {
179 static const char *hd = 0; 177 static const char *hd = 0;
180 static bool ranTest = false; 178 static bool ranTest = false;
181 if(!ranTest) { 179 if(!ranTest) {
182 hd = homedirFromUid(getuid()); 180 hd = homedirFromUid(getuid());
183 ranTest = true; 181 ranTest = true;
184 } 182 }
185 183
186 return hd; 184 return hd;
187} 185}
188 186
189 187
190int runTests() { 188int runTests() {
191 int warning = 0; 189 int warning = 0;
192 190
193 // Test pre-1: check if the user is allowed to dial-out 191 // Test pre-1: check if the user is allowed to dial-out
194 if(access("/etc/kppp.allow", R_OK) == 0 && getuid() != 0) { 192 if(access("/etc/kppp.allow", R_OK) == 0 && getuid() != 0) {
195 bool access = FALSE; 193 bool access = FALSE;
196 FILE *f; 194 FILE *f;
197 if((f = fopen("/etc/kppp.allow", "r")) != NULL) { 195 if((f = fopen("/etc/kppp.allow", "r")) != NULL) {
198 char buf[2048]; // safe 196 char buf[2048]; // safe
199 while(f != NULL && !feof(f)) { 197 while(f != NULL && !feof(f)) {
200 if(fgets(buf, sizeof(buf), f) != NULL) { 198 if(fgets(buf, sizeof(buf), f) != NULL) {
201 QString s(buf); 199 QString s(buf);
202 200
203 s = s.stripWhiteSpace(); 201 s = s.stripWhiteSpace();
204 if(s[0] == '#' || s.length() == 0) 202 if(s[0] == '#' || s.length() == 0)
205 continue; 203 continue;
206 204
207 if((uid_t)uidFromName(QFile::encodeName(s)) == getuid()) { 205 if((uid_t)uidFromName(QFile::encodeName(s)) == getuid()) {
208 access = TRUE; 206 access = TRUE;
209 fclose(f); 207 fclose(f);
210 f = NULL; 208 f = NULL;
211 } 209 }
212 } 210 }
213 } 211 }
214 if(f) 212 if(f)
215 fclose(f); 213 fclose(f);
216 } 214 }
217 215
218 if(!access) { 216 if(!access) {
219 QMessageBox::warning(0,"error", 217 QMessageBox::warning(0,"error",
220 i18n("You're not allowed to dial out with " 218 QObject::tr("You're not allowed to dial out with "
221 "kppp.\nContact your system administrator.")); 219 "kppp.\nContact your system administrator."));
222 return TEST_CRITICAL; 220 return TEST_CRITICAL;
223 } 221 }
224 } 222 }
225 223
226 // Test 1: search the pppd binary 224 // Test 1: search the pppd binary
227 const char *f = pppdPath(); 225 const char *f = pppdPath();
228 226
229 if(!f) { 227 if(!f) {
230 QMessageBox::warning(0,"error", 228 QMessageBox::warning(0,"error",
231 i18n("Cannot find the PPP daemon!\n" 229 QObject::tr("Cannot find the PPP daemon!\n"
232 "Make sure that pppd is installed.")); 230 "Make sure that pppd is installed."));
233 warning++; 231 warning++;
234 } 232 }
235 233
236 // Test 2: check access to the pppd binary 234 // Test 2: check access to the pppd binary
237 if(f) { 235 if(f) {
238#if 0 236#if 0
239 if(access(f, X_OK) != 0 /* && geteuid() != 0 */) { 237 if(access(f, X_OK) != 0 /* && geteuid() != 0 */) {
240 KMessageBox::warning(0, 238 KMessageBox::warning(0,
241 i18n("You do not have the permission " 239 QObject::tr("You do not have the permission "
242 "to start pppd!\n" 240 "to start pppd!\n"
243 "Contact your system administrator " 241 "Contact your system administrator "
244 "and ask to get access to pppd.")); 242 "and ask to get access to pppd."));
245 return TEST_CRITICAL; 243 return TEST_CRITICAL;
246 } 244 }
247#endif 245#endif
248 246
249 if(geteuid() != 0) { 247 if(geteuid() != 0) {
250 struct stat st; 248 struct stat st;
251 stat(f, &st); 249 stat(f, &st);
252 if(st.st_uid != 0 || (st.st_mode & S_ISUID) == 0) { 250 if(st.st_uid != 0 || (st.st_mode & S_ISUID) == 0) {
253 QMessageBox::warning(0,"error", 251 QMessageBox::warning(0,"error",
254 i18n("You don't have sufficient permission to run\n" 252 QObject::tr("You don't have sufficient permission to run\n"
255 "%1\n" 253 "%1\n"
256 "Please make sure that kppp is owned by root " 254 "Please make sure that kppp is owned by root "
257 "and has the SUID bit set.").arg(f)); 255 "and has the SUID bit set.").arg(f));
258 warning++; 256 warning++;
259 } 257 }
260 } 258 }
261 } 259 }
262 260
263 // Test 5: check for existence of /etc/resolv.conf 261 // Test 5: check for existence of /etc/resolv.conf
264 if (access(_PATH_RESCONF, R_OK) != 0) { 262 if (access(_PATH_RESCONF, R_OK) != 0) {
265 QString file = _PATH_RESCONF" "; 263 QString file = _PATH_RESCONF" ";
266 QString msgstr = i18n("%1 is missing or can't be read!\n" 264 QString msgstr = QObject::tr("%1 is missing or can't be read!\n"
267 "Ask your system administrator to create " 265 "Ask your system administrator to create "
268 "this file (can be empty) with appropriate " 266 "this file (can be empty) with appropriate "
269 "read and write permissions.").arg(file); 267 "read and write permissions.").arg(file);
270 QMessageBox::warning(0, "errror", msgstr); 268 QMessageBox::warning(0, "errror", msgstr);
271 warning ++; 269 warning ++;
272 } 270 }
273 271
274 if(warning == 0) 272 if(warning == 0)
275 return TEST_OK; 273 return TEST_OK;
276 else 274 else
277 return TEST_WARNING; 275 return TEST_WARNING;
278} 276}
279 277
diff --git a/noncore/settings/networksettings/wlan/keyedit.cpp b/noncore/settings/networksettings/wlan/keyedit.cpp
index ad9ecae..13a1c3b 100644
--- a/noncore/settings/networksettings/wlan/keyedit.cpp
+++ b/noncore/settings/networksettings/wlan/keyedit.cpp
@@ -1,21 +1,22 @@
1#include "keyedit.h" 1#include "keyedit.h"
2#include <qlineedit.h> 2#include <qlineedit.h>
3 3
4KeyEdit::KeyEdit(QWidget* parent, const char* name) : 4KeyEdit::KeyEdit(QWidget* parent, const char* name) :
5 QLineEdit(parent, name) 5 QLineEdit(parent, name)
6{ 6{
7 setEchoMode(Password);
7} 8}
8 9
9KeyEdit::~KeyEdit() 10KeyEdit::~KeyEdit()
10{ 11{
11} 12}
12 13
13void KeyEdit::focusInEvent(QFocusEvent *event) 14void KeyEdit::focusInEvent(QFocusEvent *event)
14{ 15{
15 setEchoMode(Normal); 16 setEchoMode(Normal);
16} 17}
17 18
18void KeyEdit::focusOutEvent(QFocusEvent *event) 19void KeyEdit::focusOutEvent(QFocusEvent *event)
19{ 20{
20 setEchoMode(Password); 21 setEchoMode(Password);
21} 22}
diff --git a/noncore/settings/networksettings/wlan/wlan.ui b/noncore/settings/networksettings/wlan/wlan.ui
index 7932445..7e39e23 100644
--- a/noncore/settings/networksettings/wlan/wlan.ui
+++ b/noncore/settings/networksettings/wlan/wlan.ui
@@ -1,569 +1,575 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>WLAN</class> 2<class>WLAN</class>
3<widget> 3<widget>
4 <class>QDialog</class> 4 <class>QDialog</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>WLAN</cstring> 7 <cstring>WLAN</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>251</width> 14 <width>247</width>
15 <height>299</height> 15 <height>299</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Wireless Configuration</string> 20 <string>Wireless Configuration</string>
21 </property> 21 </property>
22 <property stdset="1"> 22 <property stdset="1">
23 <name>sizeGripEnabled</name> 23 <name>sizeGripEnabled</name>
24 <bool>true</bool> 24 <bool>true</bool>
25 </property> 25 </property>
26 <property> 26 <property>
27 <name>layoutMargin</name> 27 <name>layoutMargin</name>
28 </property> 28 </property>
29 <vbox> 29 <vbox>
30 <property stdset="1"> 30 <property stdset="1">
31 <name>margin</name> 31 <name>margin</name>
32 <number>0</number> 32 <number>0</number>
33 </property> 33 </property>
34 <property stdset="1"> 34 <property stdset="1">
35 <name>spacing</name> 35 <name>spacing</name>
36 <number>6</number> 36 <number>6</number>
37 </property> 37 </property>
38 <widget> 38 <widget>
39 <class>QTabWidget</class> 39 <class>QTabWidget</class>
40 <property stdset="1"> 40 <property stdset="1">
41 <name>name</name> 41 <name>name</name>
42 <cstring>tabWidget</cstring> 42 <cstring>tabWidget</cstring>
43 </property> 43 </property>
44 <property stdset="1"> 44 <property stdset="1">
45 <name>enabled</name> 45 <name>enabled</name>
46 <bool>true</bool> 46 <bool>true</bool>
47 </property> 47 </property>
48 <widget> 48 <widget>
49 <class>QWidget</class> 49 <class>QWidget</class>
50 <property stdset="1"> 50 <property stdset="1">
51 <name>name</name> 51 <name>name</name>
52 <cstring>ConfigPage</cstring> 52 <cstring>ConfigPage</cstring>
53 </property> 53 </property>
54 <attribute> 54 <attribute>
55 <name>title</name> 55 <name>title</name>
56 <string>General</string> 56 <string>General</string>
57 </attribute> 57 </attribute>
58 <spacer> 58 <spacer>
59 <property> 59 <property>
60 <name>name</name> 60 <name>name</name>
61 <cstring>Spacer31</cstring> 61 <cstring>Spacer31</cstring>
62 </property> 62 </property>
63 <property stdset="1"> 63 <property stdset="1">
64 <name>orientation</name> 64 <name>orientation</name>
65 <enum>Vertical</enum> 65 <enum>Vertical</enum>
66 </property> 66 </property>
67 <property stdset="1"> 67 <property stdset="1">
68 <name>sizeType</name> 68 <name>sizeType</name>
69 <enum>Expanding</enum> 69 <enum>Expanding</enum>
70 </property> 70 </property>
71 <property> 71 <property>
72 <name>sizeHint</name> 72 <name>sizeHint</name>
73 <size> 73 <size>
74 <width>20</width> 74 <width>20</width>
75 <height>20</height> 75 <height>20</height>
76 </size> 76 </size>
77 </property> 77 </property>
78 </spacer> 78 </spacer>
79 <widget> 79 <widget>
80 <class>QLabel</class> 80 <class>QLabel</class>
81 <property stdset="1"> 81 <property stdset="1">
82 <name>name</name> 82 <name>name</name>
83 <cstring>modeLabel</cstring> 83 <cstring>modeLabel</cstring>
84 </property> 84 </property>
85 <property stdset="1"> 85 <property stdset="1">
86 <name>enabled</name> 86 <name>enabled</name>
87 <bool>true</bool> 87 <bool>true</bool>
88 </property> 88 </property>
89 <property stdset="1"> 89 <property stdset="1">
90 <name>geometry</name> 90 <name>geometry</name>
91 <rect> 91 <rect>
92 <x>11</x> 92 <x>11</x>
93 <y>11</y> 93 <y>11</y>
94 <width>84</width> 94 <width>84</width>
95 <height>29</height> 95 <height>29</height>
96 </rect> 96 </rect>
97 </property> 97 </property>
98 <property stdset="1"> 98 <property stdset="1">
99 <name>sizePolicy</name> 99 <name>sizePolicy</name>
100 <sizepolicy> 100 <sizepolicy>
101 <hsizetype>1</hsizetype> 101 <hsizetype>1</hsizetype>
102 <vsizetype>1</vsizetype> 102 <vsizetype>1</vsizetype>
103 </sizepolicy> 103 </sizepolicy>
104 </property> 104 </property>
105 <property stdset="1"> 105 <property stdset="1">
106 <name>text</name> 106 <name>text</name>
107 <string>Mode</string> 107 <string>Mode</string>
108 </property> 108 </property>
109 </widget> 109 </widget>
110 <widget> 110 <widget>
111 <class>QLabel</class> 111 <class>QLabel</class>
112 <property stdset="1"> 112 <property stdset="1">
113 <name>name</name> 113 <name>name</name>
114 <cstring>essidLabel</cstring> 114 <cstring>essidLabel</cstring>
115 </property> 115 </property>
116 <property stdset="1"> 116 <property stdset="1">
117 <name>enabled</name> 117 <name>enabled</name>
118 <bool>true</bool> 118 <bool>true</bool>
119 </property> 119 </property>
120 <property stdset="1"> 120 <property stdset="1">
121 <name>geometry</name> 121 <name>geometry</name>
122 <rect> 122 <rect>
123 <x>11</x> 123 <x>11</x>
124 <y>46</y> 124 <y>46</y>
125 <width>84</width> 125 <width>84</width>
126 <height>29</height> 126 <height>29</height>
127 </rect> 127 </rect>
128 </property> 128 </property>
129 <property stdset="1"> 129 <property stdset="1">
130 <name>sizePolicy</name> 130 <name>sizePolicy</name>
131 <sizepolicy> 131 <sizepolicy>
132 <hsizetype>1</hsizetype> 132 <hsizetype>1</hsizetype>
133 <vsizetype>1</vsizetype> 133 <vsizetype>1</vsizetype>
134 </sizepolicy> 134 </sizepolicy>
135 </property> 135 </property>
136 <property stdset="1"> 136 <property stdset="1">
137 <name>text</name> 137 <name>text</name>
138 <string>ESS-ID</string> 138 <string>ESS-ID</string>
139 </property> 139 </property>
140 </widget> 140 </widget>
141 <widget> 141 <widget>
142 <class>QSpinBox</class> 142 <class>QSpinBox</class>
143 <property stdset="1"> 143 <property stdset="1">
144 <name>name</name> 144 <name>name</name>
145 <cstring>networkChannel</cstring> 145 <cstring>networkChannel</cstring>
146 </property> 146 </property>
147 <property stdset="1"> 147 <property stdset="1">
148 <name>enabled</name> 148 <name>enabled</name>
149 <bool>false</bool> 149 <bool>false</bool>
150 </property> 150 </property>
151 <property stdset="1"> 151 <property stdset="1">
152 <name>geometry</name> 152 <name>geometry</name>
153 <rect> 153 <rect>
154 <x>146</x> 154 <x>146</x>
155 <y>139</y> 155 <y>139</y>
156 <width>58</width> 156 <width>58</width>
157 <height>25</height> 157 <height>25</height>
158 </rect> 158 </rect>
159 </property> 159 </property>
160 <property stdset="1"> 160 <property stdset="1">
161 <name>maxValue</name> 161 <name>maxValue</name>
162 <number>15</number> 162 <number>15</number>
163 </property> 163 </property>
164 <property stdset="1"> 164 <property stdset="1">
165 <name>minValue</name> 165 <name>minValue</name>
166 <number>1</number> 166 <number>1</number>
167 </property> 167 </property>
168 <property stdset="1"> 168 <property stdset="1">
169 <name>value</name> 169 <name>value</name>
170 <number>1</number> 170 <number>1</number>
171 </property> 171 </property>
172 </widget> 172 </widget>
173 <widget> 173 <widget>
174 <class>QLineEdit</class> 174 <class>QLineEdit</class>
175 <property stdset="1"> 175 <property stdset="1">
176 <name>name</name> 176 <name>name</name>
177 <cstring>macEdit</cstring> 177 <cstring>macEdit</cstring>
178 </property> 178 </property>
179 <property stdset="1"> 179 <property stdset="1">
180 <name>enabled</name> 180 <name>enabled</name>
181 <bool>false</bool> 181 <bool>false</bool>
182 </property> 182 </property>
183 <property stdset="1"> 183 <property stdset="1">
184 <name>geometry</name> 184 <name>geometry</name>
185 <rect> 185 <rect>
186 <x>56</x> 186 <x>56</x>
187 <y>108</y> 187 <y>108</y>
188 <width>182</width> 188 <width>182</width>
189 <height>25</height> 189 <height>25</height>
190 </rect> 190 </rect>
191 </property> 191 </property>
192 <property stdset="1"> 192 <property stdset="1">
193 <name>sizePolicy</name> 193 <name>sizePolicy</name>
194 <sizepolicy> 194 <sizepolicy>
195 <hsizetype>5</hsizetype> 195 <hsizetype>5</hsizetype>
196 <vsizetype>1</vsizetype> 196 <vsizetype>1</vsizetype>
197 </sizepolicy> 197 </sizepolicy>
198 </property> 198 </property>
199 </widget> 199 </widget>
200 <widget> 200 <widget>
201 <class>QLabel</class> 201 <class>QLabel</class>
202 <property stdset="1"> 202 <property stdset="1">
203 <name>name</name> 203 <name>name</name>
204 <cstring>macLabel</cstring> 204 <cstring>macLabel</cstring>
205 </property> 205 </property>
206 <property stdset="1"> 206 <property stdset="1">
207 <name>enabled</name> 207 <name>enabled</name>
208 <bool>false</bool> 208 <bool>false</bool>
209 </property> 209 </property>
210 <property stdset="1"> 210 <property stdset="1">
211 <name>geometry</name> 211 <name>geometry</name>
212 <rect> 212 <rect>
213 <x>11</x> 213 <x>11</x>
214 <y>108</y> 214 <y>108</y>
215 <width>39</width> 215 <width>39</width>
216 <height>25</height> 216 <height>25</height>
217 </rect> 217 </rect>
218 </property> 218 </property>
219 <property stdset="1"> 219 <property stdset="1">
220 <name>text</name> 220 <name>text</name>
221 <string>MAC</string> 221 <string>MAC</string>
222 </property> 222 </property>
223 </widget> 223 </widget>
224 <widget> 224 <widget>
225 <class>QCheckBox</class> 225 <class>QCheckBox</class>
226 <property stdset="1"> 226 <property stdset="1">
227 <name>name</name> 227 <name>name</name>
228 <cstring>specifyAp</cstring> 228 <cstring>specifyAp</cstring>
229 </property> 229 </property>
230 <property stdset="1"> 230 <property stdset="1">
231 <name>geometry</name> 231 <name>geometry</name>
232 <rect> 232 <rect>
233 <x>11</x> 233 <x>11</x>
234 <y>81</y> 234 <y>81</y>
235 <width>227</width> 235 <width>227</width>
236 <height>21</height> 236 <height>21</height>
237 </rect> 237 </rect>
238 </property> 238 </property>
239 <property stdset="1"> 239 <property stdset="1">
240 <name>text</name> 240 <name>text</name>
241 <string>Specify &amp;Access Point</string> 241 <string>Specify &amp;Access Point</string>
242 </property> 242 </property>
243 </widget> 243 </widget>
244 <widget> 244 <widget>
245 <class>QCheckBox</class> 245 <class>QCheckBox</class>
246 <property stdset="1"> 246 <property stdset="1">
247 <name>name</name> 247 <name>name</name>
248 <cstring>specifyChan</cstring> 248 <cstring>specifyChan</cstring>
249 </property> 249 </property>
250 <property stdset="1"> 250 <property stdset="1">
251 <name>geometry</name> 251 <name>geometry</name>
252 <rect> 252 <rect>
253 <x>11</x> 253 <x>11</x>
254 <y>141</y> 254 <y>141</y>
255 <width>129</width> 255 <width>129</width>
256 <height>21</height> 256 <height>21</height>
257 </rect> 257 </rect>
258 </property> 258 </property>
259 <property stdset="1"> 259 <property stdset="1">
260 <name>text</name> 260 <name>text</name>
261 <string>Specify &amp;Channel</string> 261 <string>Specify &amp;Channel</string>
262 </property> 262 </property>
263 </widget> 263 </widget>
264 <spacer> 264 <spacer>
265 <property> 265 <property>
266 <name>name</name> 266 <name>name</name>
267 <cstring>Spacer10</cstring> 267 <cstring>Spacer10</cstring>
268 </property> 268 </property>
269 <property stdset="1"> 269 <property stdset="1">
270 <name>orientation</name> 270 <name>orientation</name>
271 <enum>Horizontal</enum> 271 <enum>Horizontal</enum>
272 </property> 272 </property>
273 <property stdset="1"> 273 <property stdset="1">
274 <name>sizeType</name> 274 <name>sizeType</name>
275 <enum>Expanding</enum> 275 <enum>Expanding</enum>
276 </property> 276 </property>
277 <property> 277 <property>
278 <name>sizeHint</name> 278 <name>sizeHint</name>
279 <size> 279 <size>
280 <width>20</width> 280 <width>20</width>
281 <height>20</height> 281 <height>20</height>
282 </size> 282 </size>
283 </property> 283 </property>
284 </spacer> 284 </spacer>
285 <widget> 285 <widget>
286 <class>QComboBox</class> 286 <class>QComboBox</class>
287 <item> 287 <item>
288 <property> 288 <property>
289 <name>text</name> 289 <name>text</name>
290 <string>Auto</string> 290 <string>any</string>
291 </property>
292 </item>
293 <item>
294 <property>
295 <name>text</name>
296 <string>Managed</string>
297 </property>
298 </item>
299 <item>
300 <property>
301 <name>text</name>
302 <string>Ad-Hoc</string>
303 </property> 291 </property>
304 </item> 292 </item>
305 <property stdset="1"> 293 <property stdset="1">
306 <name>name</name> 294 <name>name</name>
307 <cstring>mode</cstring> 295 <cstring>essid</cstring>
308 </property>
309 <property stdset="1">
310 <name>enabled</name>
311 <bool>true</bool>
312 </property> 296 </property>
313 <property stdset="1"> 297 <property stdset="1">
314 <name>geometry</name> 298 <name>geometry</name>
315 <rect> 299 <rect>
316 <x>101</x> 300 <x>101</x>
317 <y>11</y> 301 <y>46</y>
318 <width>103</width> 302 <width>103</width>
319 <height>29</height> 303 <height>29</height>
320 </rect> 304 </rect>
321 </property> 305 </property>
322 <property stdset="1"> 306 <property stdset="1">
323 <name>sizePolicy</name> 307 <name>sizePolicy</name>
324 <sizepolicy> 308 <sizepolicy>
325 <hsizetype>1</hsizetype> 309 <hsizetype>7</hsizetype>
326 <vsizetype>0</vsizetype> 310 <vsizetype>0</vsizetype>
327 </sizepolicy> 311 </sizepolicy>
328 </property> 312 </property>
313 <property stdset="1">
314 <name>editable</name>
315 <bool>true</bool>
316 </property>
317 <property stdset="1">
318 <name>currentItem</name>
319 <number>0</number>
320 </property>
321 <property stdset="1">
322 <name>sizeLimit</name>
323 <number>5</number>
324 </property>
325 <property stdset="1">
326 <name>autoCompletion</name>
327 <bool>true</bool>
328 </property>
329 <property stdset="1">
330 <name>duplicatesEnabled</name>
331 <bool>false</bool>
332 </property>
329 </widget> 333 </widget>
330 <widget> 334 <widget>
331 <class>QComboBox</class> 335 <class>QComboBox</class>
332 <item> 336 <item>
333 <property> 337 <property>
334 <name>text</name> 338 <name>text</name>
335 <string>any</string> 339 <string>Infrastructure</string>
340 </property>
341 </item>
342 <item>
343 <property>
344 <name>text</name>
345 <string>Auto</string>
346 </property>
347 </item>
348 <item>
349 <property>
350 <name>text</name>
351 <string>Managed</string>
352 </property>
353 </item>
354 <item>
355 <property>
356 <name>text</name>
357 <string>Ad-Hoc</string>
336 </property> 358 </property>
337 </item> 359 </item>
338 <property stdset="1"> 360 <property stdset="1">
339 <name>name</name> 361 <name>name</name>
340 <cstring>essid</cstring> 362 <cstring>mode</cstring>
363 </property>
364 <property stdset="1">
365 <name>enabled</name>
366 <bool>true</bool>
341 </property> 367 </property>
342 <property stdset="1"> 368 <property stdset="1">
343 <name>geometry</name> 369 <name>geometry</name>
344 <rect> 370 <rect>
345 <x>101</x> 371 <x>101</x>
346 <y>46</y> 372 <y>11</y>
347 <width>103</width> 373 <width>103</width>
348 <height>29</height> 374 <height>29</height>
349 </rect> 375 </rect>
350 </property> 376 </property>
351 <property stdset="1"> 377 <property stdset="1">
352 <name>sizePolicy</name> 378 <name>sizePolicy</name>
353 <sizepolicy> 379 <sizepolicy>
354 <hsizetype>7</hsizetype> 380 <hsizetype>1</hsizetype>
355 <vsizetype>0</vsizetype> 381 <vsizetype>0</vsizetype>
356 </sizepolicy> 382 </sizepolicy>
357 </property> 383 </property>
358 <property stdset="1">
359 <name>editable</name>
360 <bool>true</bool>
361 </property>
362 <property stdset="1">
363 <name>currentItem</name>
364 <number>0</number>
365 </property>
366 <property stdset="1">
367 <name>sizeLimit</name>
368 <number>5</number>
369 </property>
370 <property stdset="1">
371 <name>autoCompletion</name>
372 <bool>true</bool>
373 </property>
374 <property stdset="1">
375 <name>duplicatesEnabled</name>
376 <bool>false</bool>
377 </property>
378 </widget> 384 </widget>
379 </widget> 385 </widget>
380 <widget> 386 <widget>
381 <class>QWidget</class> 387 <class>QWidget</class>
382 <property stdset="1"> 388 <property stdset="1">
383 <name>name</name> 389 <name>name</name>
384 <cstring>WepPage</cstring> 390 <cstring>WepPage</cstring>
385 </property> 391 </property>
386 <attribute> 392 <attribute>
387 <name>title</name> 393 <name>title</name>
388 <string>Encryption</string> 394 <string>Encryption</string>
389 </attribute> 395 </attribute>
390 <grid> 396 <grid>
391 <property stdset="1"> 397 <property stdset="1">
392 <name>margin</name> 398 <name>margin</name>
393 <number>11</number> 399 <number>11</number>
394 </property> 400 </property>
395 <property stdset="1"> 401 <property stdset="1">
396 <name>spacing</name> 402 <name>spacing</name>
397 <number>6</number> 403 <number>6</number>
398 </property> 404 </property>
399 <widget row="0" column="0" > 405 <widget row="0" column="0" >
400 <class>QCheckBox</class> 406 <class>QCheckBox</class>
401 <property stdset="1"> 407 <property stdset="1">
402 <name>name</name> 408 <name>name</name>
403 <cstring>wepEnabled</cstring> 409 <cstring>wepEnabled</cstring>
404 </property> 410 </property>
405 <property stdset="1"> 411 <property stdset="1">
406 <name>text</name> 412 <name>text</name>
407 <string>&amp;Enable Encryption</string> 413 <string>&amp;Enable Encryption</string>
408 </property> 414 </property>
409 </widget> 415 </widget>
410 <widget row="1" column="0" > 416 <widget row="1" column="0" >
411 <class>QButtonGroup</class> 417 <class>QButtonGroup</class>
412 <property stdset="1"> 418 <property stdset="1">
413 <name>name</name> 419 <name>name</name>
414 <cstring>KeyButtonGroup</cstring> 420 <cstring>KeyButtonGroup</cstring>
415 </property> 421 </property>
416 <property stdset="1"> 422 <property stdset="1">
417 <name>enabled</name> 423 <name>enabled</name>
418 <bool>false</bool> 424 <bool>false</bool>
419 </property> 425 </property>
420 <property stdset="1"> 426 <property stdset="1">
421 <name>title</name> 427 <name>title</name>
422 <string>&amp;Key Setting</string> 428 <string>&amp;Key Setting</string>
423 </property> 429 </property>
424 <grid> 430 <grid>
425 <property stdset="1"> 431 <property stdset="1">
426 <name>margin</name> 432 <name>margin</name>
427 <number>11</number> 433 <number>11</number>
428 </property> 434 </property>
429 <property stdset="1"> 435 <property stdset="1">
430 <name>spacing</name> 436 <name>spacing</name>
431 <number>6</number> 437 <number>6</number>
432 </property> 438 </property>
433 <widget row="0" column="0" > 439 <widget row="0" column="0" >
434 <class>QRadioButton</class> 440 <class>QRadioButton</class>
435 <property stdset="1"> 441 <property stdset="1">
436 <name>name</name> 442 <name>name</name>
437 <cstring>keyRadio0</cstring> 443 <cstring>keyRadio0</cstring>
438 </property> 444 </property>
439 <property stdset="1"> 445 <property stdset="1">
440 <name>text</name> 446 <name>text</name>
441 <string>Key &amp;1</string> 447 <string>Key &amp;1</string>
442 </property> 448 </property>
443 <property stdset="1"> 449 <property stdset="1">
444 <name>checked</name> 450 <name>checked</name>
445 <bool>true</bool> 451 <bool>true</bool>
446 </property> 452 </property>
447 </widget> 453 </widget>
448 <widget row="1" column="0" > 454 <widget row="1" column="0" >
449 <class>QRadioButton</class> 455 <class>QRadioButton</class>
450 <property stdset="1"> 456 <property stdset="1">
451 <name>name</name> 457 <name>name</name>
452 <cstring>keyRadio1</cstring> 458 <cstring>keyRadio1</cstring>
453 </property> 459 </property>
454 <property stdset="1"> 460 <property stdset="1">
455 <name>text</name> 461 <name>text</name>
456 <string>Key &amp;2</string> 462 <string>Key &amp;2</string>
457 </property> 463 </property>
458 </widget> 464 </widget>
459 <widget row="2" column="0" > 465 <widget row="2" column="0" >
460 <class>QRadioButton</class> 466 <class>QRadioButton</class>
461 <property stdset="1"> 467 <property stdset="1">
462 <name>name</name> 468 <name>name</name>
463 <cstring>keyRadio2</cstring> 469 <cstring>keyRadio2</cstring>
464 </property> 470 </property>
465 <property stdset="1"> 471 <property stdset="1">
466 <name>text</name> 472 <name>text</name>
467 <string>Key &amp;3</string> 473 <string>Key &amp;3</string>
468 </property> 474 </property>
469 </widget> 475 </widget>
470 <widget row="3" column="0" > 476 <widget row="3" column="0" >
471 <class>QRadioButton</class> 477 <class>QRadioButton</class>
472 <property stdset="1"> 478 <property stdset="1">
473 <name>name</name> 479 <name>name</name>
474 <cstring>keyRadio3</cstring> 480 <cstring>keyRadio3</cstring>
475 </property> 481 </property>
476 <property stdset="1"> 482 <property stdset="1">
477 <name>text</name> 483 <name>text</name>
478 <string>Key &amp;4</string> 484 <string>Key &amp;4</string>
479 </property> 485 </property>
480 </widget> 486 </widget>
481 <widget row="0" column="1" > 487 <widget row="0" column="1" >
482 <class>KeyEdit</class> 488 <class>KeyEdit</class>
483 <property stdset="1"> 489 <property stdset="1">
484 <name>name</name> 490 <name>name</name>
485 <cstring>keyLineEdit0</cstring> 491 <cstring>keyLineEdit0</cstring>
486 </property> 492 </property>
487 <property stdset="1"> 493 <property stdset="1">
488 <name>sizePolicy</name> 494 <name>sizePolicy</name>
489 <sizepolicy> 495 <sizepolicy>
490 <hsizetype>3</hsizetype> 496 <hsizetype>3</hsizetype>
491 <vsizetype>5</vsizetype> 497 <vsizetype>5</vsizetype>
492 </sizepolicy> 498 </sizepolicy>
493 </property> 499 </property>
494 <property stdset="1"> 500 <property stdset="1">
495 <name>focusPolicy</name> 501 <name>focusPolicy</name>
496 <enum>StrongFocus</enum> 502 <enum>StrongFocus</enum>
497 </property> 503 </property>
498 </widget> 504 </widget>
499 <widget row="1" column="1" > 505 <widget row="1" column="1" >
500 <class>KeyEdit</class> 506 <class>KeyEdit</class>
501 <property stdset="1"> 507 <property stdset="1">
502 <name>name</name> 508 <name>name</name>
503 <cstring>keyLineEdit1</cstring> 509 <cstring>keyLineEdit1</cstring>
504 </property> 510 </property>
505 <property stdset="1"> 511 <property stdset="1">
506 <name>sizePolicy</name> 512 <name>sizePolicy</name>
507 <sizepolicy> 513 <sizepolicy>
508 <hsizetype>3</hsizetype> 514 <hsizetype>3</hsizetype>
509 <vsizetype>5</vsizetype> 515 <vsizetype>5</vsizetype>
510 </sizepolicy> 516 </sizepolicy>
511 </property> 517 </property>
512 <property stdset="1"> 518 <property stdset="1">
513 <name>focusPolicy</name> 519 <name>focusPolicy</name>
514 <enum>StrongFocus</enum> 520 <enum>StrongFocus</enum>
515 </property> 521 </property>
516 </widget> 522 </widget>
517 <widget row="2" column="1" > 523 <widget row="2" column="1" >
518 <class>KeyEdit</class> 524 <class>KeyEdit</class>
519 <property stdset="1"> 525 <property stdset="1">
520 <name>name</name> 526 <name>name</name>
521 <cstring>keyLineEdit2</cstring> 527 <cstring>keyLineEdit2</cstring>
522 </property> 528 </property>
523 <property stdset="1"> 529 <property stdset="1">
524 <name>sizePolicy</name> 530 <name>sizePolicy</name>
525 <sizepolicy> 531 <sizepolicy>
526 <hsizetype>3</hsizetype> 532 <hsizetype>3</hsizetype>
527 <vsizetype>5</vsizetype> 533 <vsizetype>5</vsizetype>
528 </sizepolicy> 534 </sizepolicy>
529 </property> 535 </property>
530 <property stdset="1"> 536 <property stdset="1">
531 <name>focusPolicy</name> 537 <name>focusPolicy</name>
532 <enum>StrongFocus</enum> 538 <enum>StrongFocus</enum>
533 </property> 539 </property>
534 </widget> 540 </widget>
535 <widget row="3" column="1" > 541 <widget row="3" column="1" >
536 <class>KeyEdit</class> 542 <class>KeyEdit</class>
537 <property stdset="1"> 543 <property stdset="1">
538 <name>name</name> 544 <name>name</name>
539 <cstring>keyLineEdit3</cstring> 545 <cstring>keyLineEdit3</cstring>
540 </property> 546 </property>
541 <property stdset="1"> 547 <property stdset="1">
542 <name>sizePolicy</name> 548 <name>sizePolicy</name>
543 <sizepolicy> 549 <sizepolicy>
544 <hsizetype>3</hsizetype> 550 <hsizetype>3</hsizetype>
545 <vsizetype>5</vsizetype> 551 <vsizetype>5</vsizetype>
546 </sizepolicy> 552 </sizepolicy>
547 </property> 553 </property>
548 <property stdset="1"> 554 <property stdset="1">
549 <name>focusPolicy</name> 555 <name>focusPolicy</name>
550 <enum>StrongFocus</enum> 556 <enum>StrongFocus</enum>
551 </property> 557 </property>
552 </widget> 558 </widget>
553 </grid> 559 </grid>
554 </widget> 560 </widget>
555 <widget row="2" column="0" > 561 <widget row="2" column="0" >
556 <class>QButtonGroup</class> 562 <class>QButtonGroup</class>
557 <property stdset="1"> 563 <property stdset="1">
558 <name>name</name> 564 <name>name</name>
559 <cstring>NonEncButtonGroup</cstring> 565 <cstring>NonEncButtonGroup</cstring>
560 </property> 566 </property>
561 <property stdset="1"> 567 <property stdset="1">
562 <name>enabled</name> 568 <name>enabled</name>
563 <bool>false</bool> 569 <bool>false</bool>
564 </property> 570 </property>
565 <property stdset="1"> 571 <property stdset="1">
566 <name>title</name> 572 <name>title</name>
567 <string>Non-encrypted Packets</string> 573 <string>Non-encrypted Packets</string>
568 </property> 574 </property>
569 <property stdset="1"> 575 <property stdset="1">
diff --git a/noncore/settings/networksettings/wlan/wlanimp2.cpp b/noncore/settings/networksettings/wlan/wlanimp2.cpp
index cdafb4d..26e3aa9 100644
--- a/noncore/settings/networksettings/wlan/wlanimp2.cpp
+++ b/noncore/settings/networksettings/wlan/wlanimp2.cpp
@@ -1,269 +1,276 @@
1#include "wlanimp2.h" 1#include "wlanimp2.h"
2#include "keyedit.h" 2#include "keyedit.h"
3#include "interfacesetupimp.h" 3#include "interfacesetupimp.h"
4 4
5#include <qfile.h> 5#include <qfile.h>
6#include <qdir.h> 6#include <qdir.h>
7#include <qtextstream.h> 7#include <qtextstream.h>
8#include <qmessagebox.h> 8#include <qmessagebox.h>
9#include <qlineedit.h> 9#include <qlineedit.h>
10#include <qlabel.h> 10#include <qlabel.h>
11#include <qspinbox.h> 11#include <qspinbox.h>
12#include <qradiobutton.h> 12#include <qradiobutton.h>
13#include <qcheckbox.h> 13#include <qcheckbox.h>
14#include <qtabwidget.h> 14#include <qtabwidget.h>
15#include <qcombobox.h> 15#include <qcombobox.h>
16 16
17#ifdef QWS 17#ifdef QWS
18 #include <opie/oprocess.h> 18 #include <opie/oprocess.h>
19#else 19#else
20 #define OProcess KProcess 20 #define OProcess KProcess
21 #include <kprocess.h> 21 #include <kprocess.h>
22#endif 22#endif
23 23
24#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" 24#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts"
25#define PREUP "/etc/netwrok/if-pre-up.d/wireless-tools" 25#define PREUP "/etc/netwrok/if-pre-up.d/wireless-tools"
26 26
27/** 27/**
28 * Constructor, read in the wireless.opts file for parsing later. 28 * Constructor, read in the wireless.opts file for parsing later.
29 */ 29 */
30WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), currentProfile("*"), interface(i) { 30WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") {
31 interfaces = new Interfaces(); 31 interfaces = new Interfaces();
32 interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces); 32 interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces);
33 tabWidget->insertTab(interfaceSetup, "TCP/IP"); 33 tabWidget->insertTab(interfaceSetup, "TCP/IP");
34 34
35 // Check sanity - the existance of the wireless-tools if-pre-up script 35 // Check sanity - the existance of the wireless-tools if-pre-up script
36 QFile file(QString(PREUP)); 36 QFile file(QString(PREUP));
37 if (file.exists()) { 37 if (file.exists()) {
38 qWarning(QString("WLANImp: Unable to open /etc/network/if-pre-up.d/wireless-tools")); 38 qWarning(QString("WLANImp: Unable to open /etc/network/if-pre-up.d/wireless-tools"));
39 } 39 }
40} 40}
41 41
42WLANImp::~WLANImp() { 42WLANImp::~WLANImp() {
43//FIXME: delete interfaces; 43//FIXME: delete interfaces;
44} 44}
45 45
46/** 46/**
47 * Change the profile for both wireless settings and network settings. 47 * Change the profile for both wireless settings and network settings.
48 */ 48 */
49void WLANImp::setProfile(const QString &profile){ 49void WLANImp::setProfile(const QString &profile){
50 interfaceSetup->setProfile(profile); 50 interfaceSetup->setProfile(profile);
51 parseOpts(); 51 parseOpts();
52} 52}
53 53
54void WLANImp::parseOpts() { 54void WLANImp::parseOpts() {
55 bool error; 55 bool error;
56 QString opt; 56 QString opt;
57 57
58 if (! interfaces->isInterfaceSet()) 58 if (! interfaces->isInterfaceSet())
59 return; 59 return;
60 60
61 61
62 opt = interfaces->getInterfaceOption("wireless_essid", error); 62 opt = interfaces->getInterfaceOption("wireless_essid", error);
63 if(opt == "any" || opt == "off" || opt.isNull()){ 63 if(opt == "any" || opt == "off" || opt.isNull()){
64 essid->setEditText("any"); 64 essid->setEditText("any");
65 } else { 65 } else {
66 essid->setEditText(opt); 66 essid->setEditText(opt);
67 } 67 }
68 68
69 opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace(); 69 opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace();
70 if (opt == "Auto") { 70
71 mode->setCurrentItem(0); 71 for ( int i = 0; i < mode->count(); i++)
72 } else if (opt == "Ad-Hoc") { 72 if ( mode->text( i ) == opt ) mode->setCurrentItem( i );
73 mode->setCurrentItem(2);
74 } else {
75 // Managed/Infrastructure mode
76 mode->setCurrentItem(1);
77 }
78 73
79 opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace(); 74 opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace();
80 if (! opt.isNull()) { 75 if (! opt.isNull()) {
81 specifyAp->setChecked(true); 76 specifyAp->setChecked(true);
82 macEdit->setText(opt); 77 macEdit->setText(opt);
83 } 78 }
84 79
85 opt = interfaces->getInterfaceOption("wireless_channel", error).simplifyWhiteSpace(); 80 opt = interfaces->getInterfaceOption("wireless_channel", error).simplifyWhiteSpace();
86 if (! opt.isNull()) { 81 if (! opt.isNull()) {
87 specifyChan->setChecked(true); 82 specifyChan->setChecked(true);
88 networkChannel->setValue(opt.toInt()); 83 networkChannel->setValue(opt.toInt());
89 } 84 }
90 85
91 opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace(); 86 opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace();
92 if (opt.isNull()) 87 if (opt.isNull())
93 opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace(); 88 opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace();
94 parseKeyStr(opt); 89 parseKeyStr(opt);
95} 90}
96 91
97void WLANImp::parseKeyStr(QString keystr) { 92void WLANImp::parseKeyStr(QString keystr) {
98 int loc = 0; 93 int loc = 0;
99 int index = 1; 94 int index = 1;
100 QString key; 95 QString key;
101 QStringList keys = QStringList::split(QRegExp("\\s+"), keystr); 96 QStringList keys = QStringList::split(QRegExp("\\s+"), keystr);
102 int enc = -1; // encryption state 97 int enc = -1; // encryption state
103 98
104 for (QStringList::Iterator it = keys.begin(); it != keys.end(); ++it) { 99 for (QStringList::Iterator it = keys.begin(); it != keys.end(); ++it) {
105 if ((*it).left(3) == "off") { 100 if ((*it).left(3) == "off") {
106 // encryption disabled 101 // encryption disabled
107 enc = 0; 102 enc = 0;
108 } else if ((*it).left(2) == "on") { 103 } else if ((*it).left(2) == "on") {
109 // encryption enabled 104 // encryption enabled
110 enc = 1; 105 enc = 1;
111 } else if ((*it).left(4) == "open") { 106 } else if ((*it).left(4) == "open") {
112 // open mode, accept non encrypted packets 107 // open mode, accept non encrypted packets
113 acceptNonEnc->setChecked(true); 108 acceptNonEnc->setChecked(true);
114 } else if ((*it).left(10) == "restricted") { 109 } else if ((*it).left(10) == "restricted") {
115 // restricted mode, only accept encrypted packets 110 // restricted mode, only accept encrypted packets
116 rejectNonEnc->setChecked(true); 111 rejectNonEnc->setChecked(true);
117 } else if ((*it).left(3) == "key") { 112 } else if ((*it).left(3) == "key") {
118 // new set of options 113 // new set of options
119 } else if ((*it).left(1) == "[") { 114 } else if ((*it).left(1) == "[") {
120 index = (*it).mid(1, 1).toInt(); 115 index = (*it).mid(1, 1).toInt();
121 // switch current key to index 116 // switch current key to index
122 switch (index) { 117 switch (index) {
123 case 1: 118 case 1:
124 keyRadio0->setChecked(true); 119 keyRadio0->setChecked(true);
125 break; 120 break;
126 case 2: 121 case 2:
127 keyRadio1->setChecked(true); 122 keyRadio1->setChecked(true);
128 break; 123 break;
129 case 3: 124 case 3:
130 keyRadio2->setChecked(true); 125 keyRadio2->setChecked(true);
131 break; 126 break;
132 case 4: 127 case 4:
133 keyRadio3->setChecked(true); 128 keyRadio3->setChecked(true);
134 break; 129 break;
135 } 130 }
136 } else { 131 } else {
137 // key 132 // key
138 key = (*it); 133 key = (*it);
139 } 134 }
140 if (! key.isNull()) { 135 if (! key.isNull()) {
141 if (enc == -1) 136 if (enc == -1)
142 enc = 1; 137 enc = 1;
143 QStringList::Iterator next = ++it; 138 QStringList::Iterator next = ++it;
144 if (it == keys.end()) { 139 if (it == keys.end()) {
145 break; 140 break;
146 } 141 }
147 if ((*(next)).left(1) == "[") { 142 if ((*(next)).left(1) == "[") {
148 // set key at index 143 // set key at index
149 index = (*(next)).mid(1, 1).toInt(); 144 index = (*(next)).mid(1, 1).toInt();
150 } else { 145 } else {
151 index = 1; 146 index = 1;
152 } 147 }
153 switch (index) { 148 switch (index) {
154 case 1: 149 case 1:
155 keyLineEdit0->setText(key); 150 keyLineEdit0->setText(key);
156 break; 151 break;
157 case 2: 152 case 2:
158 keyLineEdit1->setText(key); 153 keyLineEdit1->setText(key);
159 break; 154 break;
160 case 3: 155 case 3:
161 keyLineEdit2->setText(key); 156 keyLineEdit2->setText(key);
162 break; 157 break;
163 case 4: 158 case 4:
164 keyLineEdit3->setText(key); 159 keyLineEdit3->setText(key);
165 break; 160 break;
166 } 161 }
167 key = QString::null; 162 key = QString::null;
168 } 163 }
169 } 164 }
170 if (enc == 1) { 165 if (enc == 1) {
171 wepEnabled->setChecked(true); 166 wepEnabled->setChecked(true);
172 } else { 167 } else {
173 wepEnabled->setChecked(false); 168 wepEnabled->setChecked(false);
174 } 169 }
175} 170}
176 171
177/** 172/**
178 * Check to see if the current config is valid 173 * Check to see if the current config is valid
179 * Save interfaces 174 * Save interfaces
180 */ 175 */
181void WLANImp::accept() { 176void WLANImp::accept() {
182 if (wepEnabled->isChecked()) { 177 if (wepEnabled->isChecked()) {
183 if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) || 178 if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) ||
184 (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) || 179 (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) ||
185 (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) || 180 (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) ||
186 (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) { 181 (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) {
187 QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok); 182 QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok);
188 return; 183 return;
189 } 184 }
190 } 185 }
191 186
192 if (essid->currentText().isEmpty()) { 187 if (essid->currentText().isEmpty()) {
193 QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok); 188 QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok);
194 return; 189 return;
195 } 190 }
196 191
197 if (specifyAp->isChecked() && macEdit->text().isEmpty()) { 192 if (specifyAp->isChecked() && macEdit->text().isEmpty()) {
198 QMessageBox::information(this, "Error", "Please enter the MAC address of the Access Point.", QMessageBox::Ok); 193 QMessageBox::information(this, "Error", "Please enter the MAC address of the Access Point.", QMessageBox::Ok);
199 return; 194 return;
200 } 195 }
201 196
202 // Try to save the interfaces settings. 197 // Try to save the interfaces settings.
203 writeOpts(); 198 writeOpts();
204 199
205 // Close out the dialog 200 // Close out the dialog
206 QDialog::accept(); 201// FIXME: QDialog::accept();
207} 202}
208 203
209void WLANImp::writeOpts() { 204void WLANImp::writeOpts() {
210 bool error = false; 205 // eh can't really do anything about it other then return. :-D
206 if(!interfaces->isInterfaceSet()){
207 QMessageBox::warning(0,"Inface not set","should not happen!!!");
208 return;
209 }
210 bool error = false;
211
212 qDebug("setting wlan interface %s", interfaces->getInterfaceName( error ).latin1() );
213
214 if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!");
211 215
212 interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText()); 216 interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText());
213 interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText()); 217 interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText());
214 218
215 if (specifyAp->isChecked()) { 219 if (specifyAp->isChecked()) {
216 interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text()); 220 interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text());
217 } else { 221 } else {
218 interfaces->removeInterfaceOption(QString("wireless_ap")); 222 interfaces->removeInterfaceOption(QString("wireless_ap"));
219 } 223 }
220 224
221 if (specifyChan->isChecked()) { 225 if (specifyChan->isChecked()) {
222 interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text()); 226 interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text());
223 } else { 227 } else {
224 interfaces->removeInterfaceOption(QString("wireless_channel")); 228 interfaces->removeInterfaceOption(QString("wireless_channel"));
225 } 229 }
226 230
227 if (wepEnabled->isChecked()) { 231 if (wepEnabled->isChecked()) {
228 QStringList keyList; 232 QStringList keyList;
229 233
230 if (! keyLineEdit0->text().isNull()) { 234 if (! keyLineEdit0->text().isNull()) {
231 keyList += keyLineEdit0->text(); 235 keyList += keyLineEdit0->text();
232 keyList += "[1]"; 236 keyList += "[1]";
233 } else if (! keyLineEdit1->text().isNull()) { 237 } //else
238 if (! keyLineEdit1->text().isNull()) {
234 keyList += keyLineEdit1->text(); 239 keyList += keyLineEdit1->text();
235 keyList += "[2]"; 240 keyList += "[2]";
236 } else if (! keyLineEdit2->text().isNull()) { 241 } //else
242 if (! keyLineEdit2->text().isNull()) {
237 keyList += keyLineEdit2->text(); 243 keyList += keyLineEdit2->text();
238 keyList += "[3]"; 244 keyList += "[3]";
239 } else if (! keyLineEdit3->text().isNull()) { 245 } //else
246 if (! keyLineEdit3->text().isNull()) {
240 keyList += keyLineEdit3->text(); 247 keyList += keyLineEdit3->text();
241 keyList += "[4]"; 248 keyList += "[4]";
242 } 249 }
243 if (acceptNonEnc->isChecked()) { 250 if (acceptNonEnc->isChecked()) {
244 keyList += "open"; 251 keyList += "open";
245 } else { 252 } else {
246 keyList += "restricted"; 253 keyList += "restricted";
247 } 254 }
248 255
249 keyList += "key"; 256 keyList += "key";
250 if (keyRadio0->isChecked()) { 257 if (keyRadio0->isChecked()) {
251 keyList += "[1]"; 258 keyList += "[1]";
252 } else if (keyRadio1->isChecked()) { 259 } else if (keyRadio1->isChecked()) {
253 keyList += "[2]"; 260 keyList += "[2]";
254 } else if (keyRadio2->isChecked()) { 261 } else if (keyRadio2->isChecked()) {
255 keyList += "[3]"; 262 keyList += "[3]";
256 } else if (keyRadio3->isChecked()) { 263 } else if (keyRadio3->isChecked()) {
257 keyList += "[4]"; 264 keyList += "[4]";
258 } 265 }
259 interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" "))); 266 interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" ")));
260 } else { 267 } else {
261 interfaces->removeInterfaceOption(QString("wireless_key")); 268 interfaces->removeInterfaceOption(QString("wireless_key"));
262 } 269 }
263 interfaces->removeInterfaceOption(QString("wireless_enc")); 270 interfaces->removeInterfaceOption(QString("wireless_enc"));
264 271
265 if(!interfaceSetup->saveChanges()) 272 if(!interfaceSetup->saveChanges())
266 return; 273 return;
267 274
268 QDialog::accept(); 275 QDialog::accept();
269} 276}
diff --git a/noncore/settings/networksettings/wlan/wlanmodule.cpp b/noncore/settings/networksettings/wlan/wlanmodule.cpp
index a4488f9..b4c3509 100644
--- a/noncore/settings/networksettings/wlan/wlanmodule.cpp
+++ b/noncore/settings/networksettings/wlan/wlanmodule.cpp
@@ -1,194 +1,194 @@
1#include "wlanmodule.h" 1#include "wlanmodule.h"
2#include "wlanimp.h" 2#include "wlanimp2.h"
3#include "infoimp.h" 3#include "infoimp.h"
4#include "wextensions.h" 4#include "wextensions.h"
5#include "interfaceinformationimp.h" 5#include "interfaceinformationimp.h"
6 6
7#include <qcheckbox.h> 7#include <qcheckbox.h>
8#include <qcombobox.h> 8#include <qcombobox.h>
9#include <qlabel.h> 9#include <qlabel.h>
10#include <qlineedit.h> 10#include <qlineedit.h>
11#include <qprogressbar.h> 11#include <qprogressbar.h>
12#include <qspinbox.h> 12#include <qspinbox.h>
13#include <qtabwidget.h> 13#include <qtabwidget.h>
14 14
15 15
16 16
17 17
18/** 18/**
19 * Constructor, find all of the possible interfaces 19 * Constructor, find all of the possible interfaces
20 */ 20 */
21WLANModule::WLANModule() 21WLANModule::WLANModule()
22 : Module(), 22 : Module(),
23 wlanconfigWiget(0) 23 wlanconfigWiget(0)
24{ 24{
25} 25}
26 26
27/** 27/**
28 * Delete any interfaces that we own. 28 * Delete any interfaces that we own.
29 */ 29 */
30WLANModule::~WLANModule(){ 30WLANModule::~WLANModule(){
31 Interface *i; 31 Interface *i;
32 for ( i=list.first(); i != 0; i=list.next() ) 32 for ( i=list.first(); i != 0; i=list.next() )
33 delete i; 33 delete i;
34 34
35} 35}
36 36
37/** 37/**
38 * Change the current profile 38 * Change the current profile
39 */ 39 */
40void WLANModule::setProfile(const QString &newProfile){ 40void WLANModule::setProfile(const QString &newProfile){
41 profile = newProfile; 41 profile = newProfile;
42} 42}
43 43
44/** 44/**
45 * get the icon name for this device. 45 * get the icon name for this device.
46 * @param Interface* can be used in determining the icon. 46 * @param Interface* can be used in determining the icon.
47 * @return QString the icon name (minus .png, .gif etc) 47 * @return QString the icon name (minus .png, .gif etc)
48 */ 48 */
49QString WLANModule::getPixmapName(Interface* ){ 49QString WLANModule::getPixmapName(Interface* ){
50 return "wlan"; 50 return "wlan";
51} 51}
52 52
53/** 53/**
54 * Check to see if the interface i is owned by this module. 54 * Check to see if the interface i is owned by this module.
55 * @param Interface* interface to check against 55 * @param Interface* interface to check against
56 * @return bool true if i is owned by this module, false otherwise. 56 * @return bool true if i is owned by this module, false otherwise.
57 */ 57 */
58bool WLANModule::isOwner(Interface *i){ 58bool WLANModule::isOwner(Interface *i){
59 WExtensions we(i->getInterfaceName()); 59 WExtensions we(i->getInterfaceName());
60 if(!we.doesHaveWirelessExtensions()) 60 if(!we.doesHaveWirelessExtensions())
61 return false; 61 return false;
62 62
63 i->setHardwareName("802.11b"); 63 i->setHardwareName("802.11b");
64 list.append(i); 64 list.append(i);
65 return true; 65 return true;
66} 66}
67 67
68/** 68/**
69 * Create, and return the WLANConfigure Module 69 * Create, and return the WLANConfigure Module
70 * @return QWidget* pointer to this modules configure. 70 * @return QWidget* pointer to this modules configure.
71 */ 71 */
72QWidget *WLANModule::configure(Interface *i){ 72QWidget *WLANModule::configure(Interface *i){
73 WLANImp *wlanconfig = new WLANImp(0, "WlanConfig", i, true, Qt::WDestructiveClose); 73 WLANImp *wlanconfig = new WLANImp(0, "WlanConfig", i, true, Qt::WDestructiveClose);
74 wlanconfig->setProfile(profile); 74 wlanconfig->setProfile(profile);
75 return wlanconfig; 75 return wlanconfig;
76} 76}
77 77
78/** 78/**
79 * Create, and return the Information Module 79 * Create, and return the Information Module
80 * @return QWidget* pointer to this modules info. 80 * @return QWidget* pointer to this modules info.
81 */ 81 */
82QWidget *WLANModule::information(Interface *i){ 82QWidget *WLANModule::information(Interface *i){
83 WExtensions we(i->getInterfaceName()); 83 WExtensions we(i->getInterfaceName());
84 if(!we.doesHaveWirelessExtensions()) 84 if(!we.doesHaveWirelessExtensions())
85 return NULL; 85 return NULL;
86 86
87 return getInfo( i ); 87 return getInfo( i );
88} 88}
89 89
90/** 90/**
91 * Get all active (up or down) interfaces 91 * Get all active (up or down) interfaces
92 * @return QList<Interface> A list of interfaces that exsist that havn't 92 * @return QList<Interface> A list of interfaces that exsist that havn't
93 * been called by isOwner() 93 * been called by isOwner()
94 */ 94 */
95QList<Interface> WLANModule::getInterfaces(){ 95QList<Interface> WLANModule::getInterfaces(){
96 return list; 96 return list;
97} 97}
98 98
99/** 99/**
100 * Attempt to add a new interface as defined by name 100 * Attempt to add a new interface as defined by name
101 * @param name the name of the type of interface that should be created given 101 * @param name the name of the type of interface that should be created given
102 * by possibleNewInterfaces(); 102 * by possibleNewInterfaces();
103 * @return Interface* NULL if it was unable to be created. 103 * @return Interface* NULL if it was unable to be created.
104 */ 104 */
105Interface *WLANModule::addNewInterface(const QString &){ 105Interface *WLANModule::addNewInterface(const QString &){
106 // We can't add a 802.11 interface, either the hardware will be there 106 // We can't add a 802.11 interface, either the hardware will be there
107 // or it wont. 107 // or it wont.
108 return NULL; 108 return NULL;
109} 109}
110 110
111/** 111/**
112 * Attempts to remove the interface, doesn't delete i 112 * Attempts to remove the interface, doesn't delete i
113 * @return bool true if successfull, false otherwise. 113 * @return bool true if successfull, false otherwise.
114 */ 114 */
115bool WLANModule::remove(Interface*){ 115bool WLANModule::remove(Interface*){
116 // Can't remove a hardware device, you can stop it though. 116 // Can't remove a hardware device, you can stop it though.
117 return false; 117 return false;
118} 118}
119 119
120void WLANModule::receive(const QCString &param, const QByteArray &arg) 120void WLANModule::receive(const QCString &param, const QByteArray &arg)
121{ 121{
122 qDebug("WLANModule::receive "+param); 122 qDebug("WLANModule::receive "+param);
123 QStringList params = QStringList::split(",",param); 123 QStringList params = QStringList::split(",",param);
124 int count = params.count(); 124 int count = params.count();
125 qDebug("WLANModule got %i params", count ); 125 qDebug("WLANModule got %i params", count );
126 if (count < 2){ 126 if (count < 2){
127 qDebug("Erorr less than 2 parameter"); 127 qDebug("Erorr less than 2 parameter");
128 qDebug("RETURNING"); 128 qDebug("RETURNING");
129 return; 129 return;
130 } 130 }
131 131
132 QDataStream stream(arg,IO_ReadOnly); 132 QDataStream stream(arg,IO_ReadOnly);
133 QString interface; 133 QString interface;
134 QString action; 134 QString action;
135 int countMsgs = 0; 135 int countMsgs = 0;
136 stream >> interface; 136 stream >> interface;
137 qDebug("got count? >%s<",interface.latin1()); 137 qDebug("got count? >%s<",interface.latin1());
138 if (interface == "count"){ 138 if (interface == "count"){
139 qDebug("got count"); 139 qDebug("got count");
140 stream >> action; 140 stream >> action;
141 qDebug("Got count num >%s<", action.latin1()); 141 qDebug("Got count num >%s<", action.latin1());
142 countMsgs = action.toInt(); 142 countMsgs = action.toInt();
143 } 143 }
144 144
145 QDialog *toShow; 145 QDialog *toShow;
146 //while (! stream.atEnd() ){ 146 //while (! stream.atEnd() ){
147 for (int i = 0; i < countMsgs; i++){ 147 for (int i = 0; i < countMsgs; i++){
148 qDebug("start stream %d/%d",i,countMsgs); 148 qDebug("start stream %d/%d",i,countMsgs);
149 if (stream.atEnd()){ 149 if (stream.atEnd()){
150 qDebug("end of stream"); 150 qDebug("end of stream");
151 return; 151 return;
152 } 152 }
153 stream >> interface; 153 stream >> interface;
154 qDebug("got iface"); 154 qDebug("got iface");
155 stream >> action; 155 stream >> action;
156 qDebug("WLANModule got interface %s and acion %s", interface.latin1(), action.latin1()); 156 qDebug("WLANModule got interface %s and acion %s", interface.latin1(), action.latin1());
157 // find interfaces 157 // find interfaces
158 Interface *ifa=0; 158 Interface *ifa=0;
159 for ( Interface *i=list.first(); i != 0; i=list.next() ){ 159 for ( Interface *i=list.first(); i != 0; i=list.next() ){
160 if (i->getInterfaceName() == interface){ 160 if (i->getInterfaceName() == interface){
161 qDebug("WLANModule found interface %s",interface.latin1()); 161 qDebug("WLANModule found interface %s",interface.latin1());
162 ifa = i; 162 ifa = i;
163 } 163 }
164 } 164 }
165 165
166 if (ifa == 0){ 166 if (ifa == 0){
167 qDebug("WLANModule Did not find %s",interface.latin1()); 167 qDebug("WLANModule Did not find %s",interface.latin1());
168 qDebug("skipping"); 168 qDebug("skipping");
169 count = 0; 169 count = 0;
170 } 170 }
171 171
172 if (count == 2){ 172 if (count == 2){
173 // those should call the interface directly 173 // those should call the interface directly
174 QWidget *info = getInfo( ifa ); 174 QWidget *info = getInfo( ifa );
175 info->showMaximized(); 175 info->showMaximized();
176 176
177 if ( action.contains("start" ) ){ 177 if ( action.contains("start" ) ){
178 ifa->start(); 178 ifa->start();
179 } else if ( action.contains("restart" ) ){ 179 } else if ( action.contains("restart" ) ){
180 ifa->restart(); 180 ifa->restart();
181 } else if ( action.contains("stop" ) ){ 181 } else if ( action.contains("stop" ) ){
182 ifa->stop(); 182 ifa->stop();
183 }else if ( action.contains("refresh" ) ){ 183 }else if ( action.contains("refresh" ) ){
184 ifa->refresh(); 184 ifa->refresh();
185 } 185 }
186 }else if (count == 3){ 186 }else if (count == 3){
187 QString value; 187 QString value;
188 if (!wlanconfigWiget){ 188 if (!wlanconfigWiget){
189 //FIXME: what if it got closed meanwhile? 189 //FIXME: what if it got closed meanwhile?
190 wlanconfigWiget = (WLANImp*) configure(ifa); 190 wlanconfigWiget = (WLANImp*) configure(ifa);
191 toShow = (QDialog*) wlanconfigWiget; 191 toShow = (QDialog*) wlanconfigWiget;
192 } 192 }
193 wlanconfigWiget->showMaximized(); 193 wlanconfigWiget->showMaximized();
194 stream >> value; 194 stream >> value;
diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp
index c06f639..19b0e84 100644
--- a/noncore/settings/usermanager/userdialog.cpp
+++ b/noncore/settings/usermanager/userdialog.cpp
@@ -236,206 +236,206 @@ bool UserDialog::addUser(int uid, int gid) {
236 adduserDialog->uidLineEdit->text().toInt(), adduserDialog->groupID, adduserDialog->gecosLineEdit->text(), 236 adduserDialog->uidLineEdit->text().toInt(), adduserDialog->groupID, adduserDialog->gecosLineEdit->text(),
237 QString("/home/")+adduserDialog->loginLineEdit->text() , adduserDialog->shellComboBox->currentText()))) { 237 QString("/home/")+adduserDialog->loginLineEdit->text() , adduserDialog->shellComboBox->currentText()))) {
238 QMessageBox::information(0,"Ooops!","Something went wrong!\nUnable to add user."); 238 QMessageBox::information(0,"Ooops!","Something went wrong!\nUnable to add user.");
239 return false; 239 return false;
240 } 240 }
241 241
242 // Add User to additional groups. 242 // Add User to additional groups.
243 QListViewItemIterator it( adduserDialog->groupsListView ); 243 QListViewItemIterator it( adduserDialog->groupsListView );
244 for ( ; it.current(); ++it ) { 244 for ( ; it.current(); ++it ) {
245 temp=(QCheckListItem*)it.current(); 245 temp=(QCheckListItem*)it.current();
246 if (temp->isOn() ) 246 if (temp->isOn() )
247 accounts->addGroupMember(it.current()->text(0),adduserDialog->loginLineEdit->text()); 247 accounts->addGroupMember(it.current()->text(0),adduserDialog->loginLineEdit->text());
248 } 248 }
249 // Copy image to pics/users/ 249 // Copy image to pics/users/
250 if(!(adduserDialog->userImage.isNull())) { 250 if(!(adduserDialog->userImage.isNull())) {
251 QDir d; 251 QDir d;
252 if(!(d.exists("/opt/QtPalmtop/pics/users"))) { 252 if(!(d.exists("/opt/QtPalmtop/pics/users"))) {
253 d.mkdir("/opt/QtPalmtop/pics/users"); 253 d.mkdir("/opt/QtPalmtop/pics/users");
254 } 254 }
255 QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"; 255 QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png";
256 // adduserDialog->userImage=adduserDialog->userImage.smoothScale(48,48); 256 // adduserDialog->userImage=adduserDialog->userImage.smoothScale(48,48);
257 adduserDialog->userImage.save(filename,"PNG"); 257 adduserDialog->userImage.save(filename,"PNG");
258 } 258 }
259 259
260 // Should we copy the skeleton homedirectory /etc/skel to the user's homedirectory? 260 // Should we copy the skeleton homedirectory /etc/skel to the user's homedirectory?
261 accounts->findUser(adduserDialog->loginLineEdit->text()); 261 accounts->findUser(adduserDialog->loginLineEdit->text());
262 if(adduserDialog->skelCheckBox->isChecked()) { 262 if(adduserDialog->skelCheckBox->isChecked()) {
263 QString command_cp; 263 QString command_cp;
264 QString command_chown; 264 QString command_chown;
265 command_cp.sprintf("cp -a /etc/skel/* %s/",accounts->pw_dir.latin1()); 265 command_cp.sprintf("cp -a /etc/skel/* %s/",accounts->pw_dir.latin1());
266 system(command_cp); 266 system(command_cp);
267 267
268 command_cp.sprintf("cp -a /etc/skel/.[!.]* %s/",accounts->pw_dir.latin1());// Bug in busybox, ".*" includes parent directory, does this work as a workaround? 268 command_cp.sprintf("cp -a /etc/skel/.[!.]* %s/",accounts->pw_dir.latin1());// Bug in busybox, ".*" includes parent directory, does this work as a workaround?
269 system(command_cp); 269 system(command_cp);
270 270
271 command_chown.sprintf("chown -R %d:%d %s",accounts->pw_uid,accounts->pw_gid,accounts->pw_dir.latin1()); 271 command_chown.sprintf("chown -R %d:%d %s",accounts->pw_uid,accounts->pw_gid,accounts->pw_dir.latin1());
272 system(command_chown); 272 system(command_chown);
273 } 273 }
274 274
275 return true; 275 return true;
276} 276}
277 277
278/** 278/**
279 * Deletes the user account. 279 * Deletes the user account.
280 * 280 *
281 * @param username User to be deleted. 281 * @param username User to be deleted.
282 * 282 *
283 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>. 283 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>.
284 * 284 *
285 */ 285 */
286bool UserDialog::delUser(const char *username) { 286bool UserDialog::delUser(const char *username) {
287 if((accounts->findUser(username))) {// Does that user exist? 287 if((accounts->findUser(username))) {// Does that user exist?
288 if(!(accounts->delUser(username))) {// Delete the user. 288 if(!(accounts->delUser(username))) {// Delete the user.
289 QMessageBox::information(0,"Ooops!","Something went wrong\nUnable to delete user: "+QString(username)+"."); 289 QMessageBox::information(0,"Ooops!","Something went wrong\nUnable to delete user: "+QString(username)+".");
290 } 290 }
291 } else { 291 } else {
292 QMessageBox::information(0,"Invalid Username","That username ("+QString(username)+")does not exist."); 292 QMessageBox::information(0,"Invalid Username","That username ("+QString(username)+")does not exist.");
293 return false; 293 return false;
294 } 294 }
295 return true; 295 return true;
296} 296}
297 297
298/** 298/**
299 * This displays a confirmation dialog wether a user should be deleted or not. 299 * This displays a confirmation dialog wether a user should be deleted or not.
300 * (And also deletes the account) 300 * (And also deletes the account)
301 * 301 *
302 * @param username User to be deleted. 302 * @param username User to be deleted.
303 * 303 *
304 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>. 304 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>.
305 * 305 *
306 */ 306 */
307bool UserDialog::editUser(const char *username) { 307bool UserDialog::editUser(const char *username) {
308 int invalid_group=0; 308 int invalid_group=0;
309 // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating edituserDialog's widgets here. 309 // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating edituserDialog's widgets here.
310 UserDialog *edituserDialog=new UserDialog(VIEWMODE_EDIT);// Create Dialog 310 UserDialog *edituserDialog=new UserDialog(VIEWMODE_EDIT);// Create Dialog
311 edituserDialog->setCaption(tr("Edit User")); 311 edituserDialog->setCaption(tr("Edit User"));
312 accounts->findUser(username);// Locate user in database and fill variables in 'accounts' object. 312 accounts->findUser(username);// Locate user in database and fill variables in 'accounts' object.
313 if(!(accounts->findGroup(accounts->pw_gid))) {// Locate the user's primary group, and fill group variables in 'accounts' object. 313 if(!(accounts->findGroup(accounts->pw_gid))) {// Locate the user's primary group, and fill group variables in 'accounts' object.
314 invalid_group=1; 314 invalid_group=1;
315 } 315 }
316 // Fill widgets with userinfo. 316 // Fill widgets with userinfo.
317 edituserDialog->loginLineEdit->setText(accounts->pw_name); 317 edituserDialog->loginLineEdit->setText(accounts->pw_name);
318 edituserDialog->uidLineEdit->setText(QString::number(accounts->pw_uid)); 318 edituserDialog->uidLineEdit->setText(QString::number(accounts->pw_uid));
319 edituserDialog->gecosLineEdit->setText(accounts->pw_gecos); 319 edituserDialog->gecosLineEdit->setText(accounts->pw_gecos);
320 // Set password to '........', we will later check if this still is the contents, if not, the password has been changed. 320 // Set password to '........', we will later check if this still is the contents, if not, the password has been changed.
321 edituserDialog->passwordLineEdit->setText("........"); 321 edituserDialog->passwordLineEdit->setText("........");
322 // If this user is not using /bin/sh,/bin/ash or /bin/false as shell, add that entry to the shell-combobox. 322 // If this user is not using /bin/sh,/bin/ash or /bin/false as shell, add that entry to the shell-combobox.
323 if(accounts->pw_shell!="/bin/sh" && accounts->pw_shell!="/bin/ash" && accounts->pw_shell!="/bin/false") { 323 if(accounts->pw_shell!="/bin/sh" && accounts->pw_shell!="/bin/ash" && accounts->pw_shell!="/bin/false") {
324 edituserDialog->shellComboBox->insertItem(accounts->pw_shell,0); 324 edituserDialog->shellComboBox->insertItem(accounts->pw_shell,0);
325 edituserDialog->shellComboBox->setCurrentItem(0); 325 edituserDialog->shellComboBox->setCurrentItem(0);
326 } 326 }
327 // Select the primary group for this user. 327 // Select the primary group for this user.
328 for(int i=0;i<edituserDialog->groupComboBox->count();++i) { 328 for(int i=0;i<edituserDialog->groupComboBox->count();++i) {
329 if(accounts->gr_name==edituserDialog->groupComboBox->text(i)) { 329 if(accounts->gr_name==edituserDialog->groupComboBox->text(i)) {
330 edituserDialog->groupComboBox->setCurrentItem(i); 330 edituserDialog->groupComboBox->setCurrentItem(i);
331 break; 331 break;
332 } 332 }
333 } 333 }
334 if(invalid_group) { 334 if(invalid_group) {
335 edituserDialog->groupComboBox->insertItem("<Undefined group>",0); 335 edituserDialog->groupComboBox->insertItem("<Undefined group>",0);
336 edituserDialog->groupComboBox->setCurrentItem(0); 336 edituserDialog->groupComboBox->setCurrentItem(0);
337 } 337 }
338 338
339 // Select the groups in the listview, to which the user belongs. 339 // Select the groups in the listview, to which the user belongs.
340 QCheckListItem *temp; 340 QCheckListItem *temp;
341 // BAH!!! QRegExp in qt2 sucks... or maybe I do... can't figure out how to check for EITHER end of input ($) OR a comma, so here we do two different QRegExps instead. 341 // BAH!!! QRegExp in qt2 sucks... or maybe I do... can't figure out how to check for EITHER end of input ($) OR a comma, so here we do two different QRegExps instead.
342 QRegExp userRegExp(QString("[:,]%1$").arg(username));// The end of line variant. 342 QRegExp userRegExp(QString("[:,]%1$").arg(username));// The end of line variant.
343 QStringList tempList=accounts->groupStringList.grep(userRegExp);// Find all entries in the group database, that the user is a member of. 343 QStringList tempList=accounts->groupStringList.grep(userRegExp);// Find all entries in the group database, that the user is a member of.
344 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {// Iterate over all of them. 344 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {// Iterate over all of them.
345 qWarning(*it); 345 qWarning(*it);
346 QListViewItemIterator lvit( edituserDialog->groupsListView );// Compare to all groups. 346 QListViewItemIterator lvit( edituserDialog->groupsListView );// Compare to all groups.
347 for ( ; lvit.current(); ++lvit ) { 347 for ( ; lvit.current(); ++lvit ) {
348 if(lvit.current()->text(0)==(*it).left((*it).find(":"))) { 348 if(lvit.current()->text(0)==(*it).left((*it).find(":"))) {
349 temp=(QCheckListItem*)lvit.current(); 349 temp=(QCheckListItem*)lvit.current();
350 temp->setOn(true);// If we find a line with that groupname, select it.; 350 temp->setOn(true);// If we find a line with that groupname, select it.;
351 } 351 }
352 } 352 }
353 } 353 }
354 userRegExp=QRegExp(QString("[:,]%1,").arg(username));// And the other one. (not end of line.) 354 userRegExp=QRegExp(QString("[:,]%1,").arg(username));// And the other one. (not end of line.)
355 tempList=accounts->groupStringList.grep(userRegExp);// Find all entries in the group database, that the user is a member of. 355 tempList=accounts->groupStringList.grep(userRegExp);// Find all entries in the group database, that the user is a member of.
356 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {// Iterate over all of them. 356 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {// Iterate over all of them.
357 qWarning(*it); 357 qWarning(*it);
358 QListViewItemIterator lvit( edituserDialog->groupsListView );// Compare to all groups. 358 QListViewItemIterator lvit( edituserDialog->groupsListView );// Compare to all groups.
359 for ( ; lvit.current(); ++lvit ) { 359 for ( ; lvit.current(); ++lvit ) {
360 if(lvit.current()->text(0)==(*it).left((*it).find(":"))) { 360 if(lvit.current()->text(0)==(*it).left((*it).find(":"))) {
361 temp=(QCheckListItem*)lvit.current(); 361 temp=(QCheckListItem*)lvit.current();
362 temp->setOn(true);// If we find a line with that groupname, select it.; 362 temp->setOn(true);// If we find a line with that groupname, select it.;
363 } 363 }
364 } 364 }
365 } 365 }
366 366
367 if(!(edituserDialog->exec())) return false;// SHOW THE DIALOG! 367 if(!(edituserDialog->exec())) return false;// SHOW THE DIALOG!
368 368
369 accounts->findUser(username);// Fill user variables in 'acccounts' object. 369 accounts->findUser(username);// Fill user variables in 'acccounts' object.
370 accounts->pw_name=edituserDialog->loginLineEdit->text(); 370 accounts->pw_name=edituserDialog->loginLineEdit->text();
371 // Has the password been changed ? Make a new "crypt":ed password. 371 // Has the password been changed ? Make a new "crypt":ed password.
372 if(edituserDialog->passwordLineEdit->text()!="........") accounts->pw_passwd=crypt(edituserDialog->passwordLineEdit->text(), accounts->crypt_make_salt()); 372 if(edituserDialog->passwordLineEdit->text()!="........") accounts->pw_passwd=crypt(edituserDialog->passwordLineEdit->text(), accounts->crypt_make_salt());
373 373
374 // Set all variables in accounts object, that will be used when calling 'updateUser()' 374 // Set all variables in accounts object, that will be used when calling 'updateUser()'
375 accounts->pw_uid=edituserDialog->uidLineEdit->text().toInt(); 375 accounts->pw_uid=edituserDialog->uidLineEdit->text().toInt();
376 if(accounts->findGroup(edituserDialog->groupComboBox->currentText())) {// Fill all group variables in 'accounts' object. 376 if(accounts->findGroup(edituserDialog->groupComboBox->currentText())) {// Fill all group variables in 'accounts' object.
377 accounts->pw_gid=accounts->gr_gid;// Only do this if the group is a valid group (ie. "<Undefined group>"), otherwise keep the old group. 377 accounts->pw_gid=accounts->gr_gid;// Only do this if the group is a valid group (ie. "<Undefined group>"), otherwise keep the old group.
378 } 378 }
379 accounts->pw_gecos=edituserDialog->gecosLineEdit->text(); 379 accounts->pw_gecos=edituserDialog->gecosLineEdit->text();
380 accounts->pw_shell=edituserDialog->shellComboBox->currentText(); 380 accounts->pw_shell=edituserDialog->shellComboBox->currentText();
381 // Update userinfo, using the information stored in the user variables stored in the accounts object. 381 // Update userinfo, using the information stored in the user variables stored in the accounts object.
382 accounts->updateUser(username); 382 accounts->updateUser(username);
383 383
384 // Remove user from all groups he/she is a member of. (could be done in a better way I guess, this was simple though.) 384 // Remove user from all groups he/she is a member of. (could be done in a better way I guess, this was simple though.)
385 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) { 385 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {
386 accounts->delGroupMember((*it).left((*it).find(":")),username); 386 accounts->delGroupMember((*it).left((*it).find(":")),username);
387 } 387 }
388 388
389 // Add User to additional groups that he/she is a member of. 389 // Add User to additional groups that he/she is a member of.
390 QListViewItemIterator it( edituserDialog->groupsListView ); 390 QListViewItemIterator it( edituserDialog->groupsListView );
391 for ( ; it.current(); ++it ) { 391 for ( ; it.current(); ++it ) {
392 temp=(QCheckListItem*)it.current(); 392 temp=(QCheckListItem*)it.current();
393 if ( temp->isOn() ) 393 if ( temp->isOn() )
394 accounts->addGroupMember(it.current()->text(0),edituserDialog->loginLineEdit->text()); 394 accounts->addGroupMember(it.current()->text(0),edituserDialog->loginLineEdit->text());
395 } 395 }
396 396
397 // Copy image to pics/users/ 397 // Copy image to pics/users/
398 if(!(edituserDialog->userImage.isNull())) { 398 if(!(edituserDialog->userImage.isNull())) {
399 QDir d; 399 QDir d;
400 if(!(d.exists("/opt/QtPalmtop/pics/users"))) { 400 if(!(d.exists("/opt/QtPalmtop/pics/users"))) {
401 d.mkdir("/opt/QtPalmtop/pics/users"); 401 d.mkdir("/opt/QtPalmtop/pics/users");
402 } 402 }
403 QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"; 403 QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png";
404 // edituserDialog->userImage=edituserDialog->userImage.smoothScale(48,48); 404 // edituserDialog->userImage=edituserDialog->userImage.smoothScale(48,48);
405 edituserDialog->userImage.save(filename,"PNG"); 405 edituserDialog->userImage.save(filename,"PNG");
406 } 406 }
407 return true; 407 return true;
408} 408}
409 409
410/** 410/**
411 * "OK" has been clicked. Verify some information before closing the dialog. 411 * "OK" has been clicked. Verify some information before closing the dialog.
412 * 412 *
413 */ 413 */
414void UserDialog::accept() { 414void UserDialog::accept() {
415 // Add checking... valid username? username taken? 415 // Add checking... valid username? username taken?
416 if(loginLineEdit->text().isEmpty()) { 416 if(loginLineEdit->text().isEmpty()) {
417 QMessageBox::information(0,"Empty Login","Please enter a login."); 417 QMessageBox::information(0,"Empty Login","Please enter a login.");
418 return; 418 return;
419 } 419 }
420 QDialog::accept(); 420 QDialog::accept();
421} 421}
422 422
423/** 423/**
424 * This slot is called when the usericon is clicked, this loads (should) the iconselector. 424 * This slot is called when the usericon is clicked, this loads (should) the iconselector.
425 * 425 *
426 */ 426 */
427void UserDialog::clickedPicture() { 427void UserDialog::clickedPicture() {
428 QString filename=OFileDialog::getOpenFileName(OFileSelector::EXTENDED,"/opt/QtPalmtop/pics"); 428 QString filename=OFileDialog::getOpenFileName(OFileSelector::EXTENDED, QString::null);
429 if(!(filename.isEmpty())) { 429 if(!(filename.isEmpty())) {
430 userImage.reset(); 430 userImage.reset();
431 if(!(userImage.load(filename))) { 431 if(!(userImage.load(filename))) {
432 QMessageBox::information(0,"Sorry!","That icon could not be loaded.\nLoading failed on: "+filename); 432 QMessageBox::information(0,"Sorry!","That icon could not be loaded.\nLoading failed on: "+filename);
433 } else { 433 } else {
434 // userImage=userImage.smoothScale(48,48); 434 // userImage=userImage.smoothScale(48,48);
435 QPixmap *picture; 435 QPixmap *picture;
436 picture=(QPixmap *)picturePushButton->pixmap(); 436 picture=(QPixmap *)picturePushButton->pixmap();
437 picture->convertFromImage(userImage,0); 437 picture->convertFromImage(userImage,0);
438 picturePushButton->update(); 438 picturePushButton->update();
439 } 439 }
440 } 440 }
441} 441}
diff --git a/noncore/settings/usermanager/userdialog.h b/noncore/settings/usermanager/userdialog.h
index b7b925d..3272afc 100644
--- a/noncore/settings/usermanager/userdialog.h
+++ b/noncore/settings/usermanager/userdialog.h
@@ -1,66 +1,67 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * This program is free software; you can redistribute it and/or modify * 3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by * 4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or * 5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. * 6 * (at your option) any later version. *
7 * * 7 * *
8 ***************************************************************************/ 8 ***************************************************************************/
9#ifndef USERDIALOG_H 9#ifndef USERDIALOG_H
10#define USERDIALOG_H 10#define USERDIALOG_H
11 11
12#include <qdialog.h> 12#include <qdialog.h>
13#include <qlineedit.h> 13#include <qlineedit.h>
14#include <qcombobox.h> 14#include <qcombobox.h>
15#include <qlistview.h> 15#include <qlistview.h>
16#include <qtabwidget.h> 16#include <qtabwidget.h>
17#include <qpushbutton.h> 17#include <qpushbutton.h>
18#include <qcheckbox.h> 18#include <qcheckbox.h>
19#include <qlabel.h>
19 20
20#include <qpe/resource.h> 21#include <qpe/resource.h>
21 22
22#include <opie/ofiledialog.h> 23#include <opie/ofiledialog.h>
23 24
24class UserDialog : public QDialog 25class UserDialog : public QDialog
25{ 26{
26 Q_OBJECT 27 Q_OBJECT
27private: 28private:
28 QTabWidget *myTabWidget; 29 QTabWidget *myTabWidget;
29 QPushButton *picturePushButton; 30 QPushButton *picturePushButton;
30 QLineEdit *loginLineEdit; 31 QLineEdit *loginLineEdit;
31 QLineEdit *uidLineEdit; 32 QLineEdit *uidLineEdit;
32 QLineEdit *gecosLineEdit; 33 QLineEdit *gecosLineEdit;
33 QLineEdit *passwordLineEdit; 34 QLineEdit *passwordLineEdit;
34 QComboBox *shellComboBox; 35 QComboBox *shellComboBox;
35 QComboBox *groupComboBox; 36 QComboBox *groupComboBox;
36 QLabel *skelLabel; 37 QLabel *skelLabel;
37 QCheckBox *skelCheckBox; 38 QCheckBox *skelCheckBox;
38 QListView *groupsListView; 39 QListView *groupsListView;
39 40
40 QStringList groupMembers; 41 QStringList groupMembers;
41 QString pictureLocation; 42 QString pictureLocation;
42 QImage userImage; 43 QImage userImage;
43 int groupID; 44 int groupID;
44 int userID; 45 int userID;
45 int vm; 46 int vm;
46 enum VIEWMODE { 47 enum VIEWMODE {
47 VIEWMODE_NEW, 48 VIEWMODE_NEW,
48 VIEWMODE_EDIT 49 VIEWMODE_EDIT
49 }; 50 };
50 51
51 void setupTab1(void); 52 void setupTab1(void);
52 void setupTab2(void); 53 void setupTab2(void);
53 void accept(void); 54 void accept(void);
54 55
55private slots: 56private slots:
56 void clickedPicture(void); 57 void clickedPicture(void);
57 58
58public: 59public:
59 UserDialog( int viewmode=VIEWMODE_NEW, QWidget* parent = 0, const char* name = 0, bool modal=true, WFlags fl = 0 ); 60 UserDialog( int viewmode=VIEWMODE_NEW, QWidget* parent = 0, const char* name = 0, bool modal=true, WFlags fl = 0 );
60 ~UserDialog(); 61 ~UserDialog();
61 static bool addUser(int uid, int gid); 62 static bool addUser(int uid, int gid);
62 static bool editUser(const char *username); 63 static bool editUser(const char *username);
63 static bool delUser(const char *username); 64 static bool delUser(const char *username);
64}; 65};
65 66
66#endif 67#endif
diff --git a/noncore/settings/usermanager/usermanager.cpp b/noncore/settings/usermanager/usermanager.cpp
index 1946013..65bbd8b 100644
--- a/noncore/settings/usermanager/usermanager.cpp
+++ b/noncore/settings/usermanager/usermanager.cpp
@@ -1,222 +1,222 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * This program is free software; you can redistribute it and/or modify * 3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by * 4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or * 5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. * 6 * (at your option) any later version. *
7 * * 7 * *
8 ***************************************************************************/ 8 ***************************************************************************/
9 9
10#include "usermanager.h" 10#include "usermanager.h"
11 11
12#include <qlayout.h> 12#include <qlayout.h>
13#include <stdio.h> 13#include <stdio.h>
14 14
15#include <qmessagebox.h> 15#include <qmessagebox.h>
16#include <qfile.h> 16#include <qfile.h>
17#include <qpe/resource.h> 17#include <qpe/resource.h>
18 18
19#include <qregexp.h> 19#include <qregexp.h>
20 20
21/** 21/**
22 * The mainwindow constructor. 22 * The mainwindow constructor.
23 * 23 *
24 * @param QWidget *parent 24 * @param QWidget *parent
25 * @param const char *name 25 * @param const char *name
26 * @ param WFlags fl 26 * @ param WFlags fl
27 * 27 *
28 */ 28 */
29UserConfig::UserConfig(QWidget* parent, const char* name, WFlags fl) : QMainWindow(parent, name, fl) { 29UserConfig::UserConfig(QWidget* parent, const char* name, WFlags fl) : QMainWindow(parent, name, fl) {
30 setCaption(tr("OPIE User Manager")); 30 setCaption(tr("Opie User Manager"));
31 31
32 // Create an instance of the global object 'accounts'. This holds all user/group info, and functions to modify them. 32 // Create an instance of the global object 'accounts'. This holds all user/group info, and functions to modify them.
33 accounts=new Passwd(); 33 accounts=new Passwd();
34 accounts->open();// This actually loads the files /etc/passwd & /etc/group into memory. 34 accounts->open();// This actually loads the files /etc/passwd & /etc/group into memory.
35 35
36 // Create the toolbar. 36 // Create the toolbar.
37 QPEToolBar *toolbar = new QPEToolBar(this,"Toolbar"); 37 QPEToolBar *toolbar = new QPEToolBar(this,"Toolbar");
38 toolbar->setHorizontalStretchable(1); // Is there any other way to get the toolbar to stretch of the full screen!? 38 toolbar->setHorizontalStretchable(1); // Is there any other way to get the toolbar to stretch of the full screen!?
39 adduserToolButton = new QToolButton(Resource::loadPixmap("usermanager/adduser"),"Add User",0,this,SLOT(addUser()),toolbar,"Add User"); 39 adduserToolButton = new QToolButton(Resource::loadPixmap("usermanager/adduser"),"Add User",0,this,SLOT(addUser()),toolbar,"Add User");
40 edituserToolButton = new QToolButton(Resource::loadPixmap("usermanager/edituser"),"Edit User",0,this,SLOT(editUser()),toolbar,"Edit User"); 40 edituserToolButton = new QToolButton(Resource::loadPixmap("usermanager/edituser"),"Edit User",0,this,SLOT(editUser()),toolbar,"Edit User");
41 deleteuserToolButton = new QToolButton(Resource::loadPixmap("usermanager/deleteuser"),"Delete User",0,this,SLOT(delUser()),toolbar,"Delete User"); 41 deleteuserToolButton = new QToolButton(Resource::loadPixmap("usermanager/deleteuser"),"Delete User",0,this,SLOT(delUser()),toolbar,"Delete User");
42 QToolButton *userstext = new QToolButton(0,"User",0,0,0,toolbar,"User"); 42 QToolButton *userstext = new QToolButton(0,"User",0,0,0,toolbar,"User");
43 userstext->setUsesTextLabel(true); 43 userstext->setUsesTextLabel(true);
44 toolbar->addSeparator(); 44 toolbar->addSeparator();
45 addgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/addgroup"),"Add Group",0,this,SLOT(addGroup()),toolbar,"Add Group"); 45 addgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/addgroup"),"Add Group",0,this,SLOT(addGroup()),toolbar,"Add Group");
46 editgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/editgroup"),"Edit Group",0,this,SLOT(editGroup()),toolbar,"Edit Group"); 46 editgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/editgroup"),"Edit Group",0,this,SLOT(editGroup()),toolbar,"Edit Group");
47 deletegroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/deletegroup"),"Delete Group",0,this,SLOT(delGroup()),toolbar,"Delete Group"); 47 deletegroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/deletegroup"),"Delete Group",0,this,SLOT(delGroup()),toolbar,"Delete Group");
48 QToolButton *groupstext = new QToolButton(0,"Group",0,0,0,toolbar,"Group"); 48 QToolButton *groupstext = new QToolButton(0,"Group",0,0,0,toolbar,"Group");
49 groupstext->setUsesTextLabel(true); 49 groupstext->setUsesTextLabel(true);
50 addToolBar(toolbar,"myToolBar"); 50 addToolBar(toolbar,"myToolBar");
51 51
52 // Add a tabwidget and all the tabs. 52 // Add a tabwidget and all the tabs.
53 myTabWidget = new QTabWidget(this,"My Tab Widget"); 53 myTabWidget = new QTabWidget(this,"My Tab Widget");
54 setupTabAccounts(); 54 setupTabAccounts();
55 setupTabAllUsers(); 55 setupTabAllUsers();
56 setupTabAllGroups(); 56 setupTabAllGroups();
57 userPopupMenu.insertItem("Copy",0); 57 userPopupMenu.insertItem("Copy",0);
58 58
59 getUsers(); // Fill out the iconview & listview with all users. 59 getUsers(); // Fill out the iconview & listview with all users.
60 getGroups(); // Fill out the group listview with all groups. 60 getGroups(); // Fill out the group listview with all groups.
61 61
62 setCentralWidget(myTabWidget); 62 setCentralWidget(myTabWidget);
63} 63}
64 64
65UserConfig::~UserConfig() { 65UserConfig::~UserConfig() {
66 accounts->close(); 66 accounts->close();
67 delete accounts; 67 delete accounts;
68} 68}
69 69
70void UserConfig::setupTabAccounts() { 70void UserConfig::setupTabAccounts() {
71 QWidget *tabpage = new QWidget(this); 71 QWidget *tabpage = new QWidget(this);
72 QVBoxLayout *layout = new QVBoxLayout(tabpage); 72 QVBoxLayout *layout = new QVBoxLayout(tabpage);
73 layout->setMargin(5); 73 layout->setMargin(5);
74 74
75 usersIconView=new QListView(tabpage,"users"); 75 usersIconView=new QListView(tabpage,"users");
76 usersIconView->addColumn("Icon"); 76 usersIconView->addColumn("Icon");
77 usersIconView->addColumn("Username"); 77 usersIconView->addColumn("Username");
78 usersIconView->setAllColumnsShowFocus(true); 78 usersIconView->setAllColumnsShowFocus(true);
79 layout->addWidget(usersIconView); 79 layout->addWidget(usersIconView);
80 80
81 connect(usersIconView,SIGNAL(returnPressed(QListViewItem *)),this,SLOT(showUserMenu(QListViewItem *))); 81 connect(usersIconView,SIGNAL(returnPressed(QListViewItem *)),this,SLOT(showUserMenu(QListViewItem *)));
82 82
83 myTabWidget->addTab(tabpage,"Users"); 83 myTabWidget->addTab(tabpage,"Users");
84} 84}
85 85
86void UserConfig::setupTabAllUsers() { 86void UserConfig::setupTabAllUsers() {
87 QWidget *tabpage = new QWidget(this); 87 QWidget *tabpage = new QWidget(this);
88 QVBoxLayout *layout = new QVBoxLayout(tabpage); 88 QVBoxLayout *layout = new QVBoxLayout(tabpage);
89 layout->setMargin(5); 89 layout->setMargin(5);
90 90
91 usersListView=new QListView(tabpage,"allusers"); 91 usersListView=new QListView(tabpage,"allusers");
92 usersListView->addColumn("UID"); 92 usersListView->addColumn("UID");
93 usersListView->addColumn("Login"); 93 usersListView->addColumn("Login");
94 usersListView->addColumn("Username"); 94 usersListView->addColumn("Username");
95 layout->addWidget(usersListView); 95 layout->addWidget(usersListView);
96 usersListView->setSorting(1,1); 96 usersListView->setSorting(1,1);
97 usersListView->setAllColumnsShowFocus(true); 97 usersListView->setAllColumnsShowFocus(true);
98 98
99 myTabWidget->addTab(tabpage,"All Users"); 99 myTabWidget->addTab(tabpage,"All Users");
100} 100}
101 101
102void UserConfig::setupTabAllGroups() { 102void UserConfig::setupTabAllGroups() {
103 QWidget *tabpage = new QWidget(this); 103 QWidget *tabpage = new QWidget(this);
104 QVBoxLayout *layout = new QVBoxLayout(tabpage); 104 QVBoxLayout *layout = new QVBoxLayout(tabpage);
105 layout->setMargin(5); 105 layout->setMargin(5);
106 106
107 groupsListView=new QListView(tabpage,"groups"); 107 groupsListView=new QListView(tabpage,"groups");
108 groupsListView->addColumn("GID"); 108 groupsListView->addColumn("GID");
109 groupsListView->addColumn("Groupname"); 109 groupsListView->addColumn("Groupname");
110 layout->addWidget(groupsListView); 110 layout->addWidget(groupsListView);
111 groupsListView->setSorting(1,1); 111 groupsListView->setSorting(1,1);
112 groupsListView->setAllColumnsShowFocus(true); 112 groupsListView->setAllColumnsShowFocus(true);
113 113
114 myTabWidget->addTab(tabpage,"All Groups"); 114 myTabWidget->addTab(tabpage,"All Groups");
115} 115}
116void UserConfig::getUsers() { 116void UserConfig::getUsers() {
117 QString mytext; 117 QString mytext;
118 QPixmap mypixmap; 118 QPixmap mypixmap;
119 QListViewItem *listviewitem; 119 QListViewItem *listviewitem;
120 120
121 // Empty the iconview & the listview. 121 // Empty the iconview & the listview.
122 usersIconView->clear(); 122 usersIconView->clear();
123 usersListView->clear(); 123 usersListView->clear();
124 124
125 // availableUID is used as a deposite for the next available UID on the system, this should start at an ID over 500. 125 // availableUID is used as a deposite for the next available UID on the system, this should start at an ID over 500.
126 availableUID=500; 126 availableUID=500;
127 for(QStringList::Iterator it=accounts->passwdStringList.begin(); it!=accounts->passwdStringList.end(); ++it) { 127 for(QStringList::Iterator it=accounts->passwdStringList.begin(); it!=accounts->passwdStringList.end(); ++it) {
128 accounts->splitPasswdEntry(*it); // Split the string into it's components and store in variables in the accounts object. ("pr_name" and so on.) 128 accounts->splitPasswdEntry(*it); // Split the string into it's components and store in variables in the accounts object. ("pr_name" and so on.)
129 if(accounts->pw_name.find(QRegExp("^#"),0)) {// Skip commented lines. 129 if(accounts->pw_name.find(QRegExp("^#"),0)) {// Skip commented lines.
130 new QListViewItem(usersListView,QString::number(accounts->pw_uid),accounts->pw_name,accounts->pw_gecos); 130 new QListViewItem(usersListView,QString::number(accounts->pw_uid),accounts->pw_name,accounts->pw_gecos);
131 if((accounts->pw_uid>=500) && (accounts->pw_uid<65000)) {// Is this user a "normal" user ? 131 if((accounts->pw_uid>=500) && (accounts->pw_uid<65000)) {// Is this user a "normal" user ?
132 mytext=QString(accounts->pw_name)+" - ("+QString(accounts->pw_gecos)+")"; // The string displayed next to the icon. 132 mytext=QString(accounts->pw_name)+" - ("+QString(accounts->pw_gecos)+")"; // The string displayed next to the icon.
133 if(!(mypixmap.load("/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"))) { // Is there an icon for this user? Resource::loadPixmap is caching, doesn't work. 133 if(!(mypixmap.load("/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"))) { // Is there an icon for this user? Resource::loadPixmap is caching, doesn't work.
134 mypixmap=Resource::loadPixmap(QString("usermanager/usericon"));// If this user has no icon, load the default icon. 134 mypixmap=Resource::loadPixmap(QString("usermanager/usericon"));// If this user has no icon, load the default icon.
135 } 135 }
136 listviewitem=new QListViewItem(usersIconView,"",mytext);// Add the icon+text to the qiconview. 136 listviewitem=new QListViewItem(usersIconView,"",mytext);// Add the icon+text to the qiconview.
137 listviewitem->setPixmap(0,mypixmap); 137 listviewitem->setPixmap(0,mypixmap);
138 } 138 }
139 if((accounts->pw_uid>=availableUID) && (accounts->pw_uid<65000)) availableUID=accounts->pw_uid+1; // Increase 1 to the latest know UID to get a free uid. 139 if((accounts->pw_uid>=availableUID) && (accounts->pw_uid<65000)) availableUID=accounts->pw_uid+1; // Increase 1 to the latest know UID to get a free uid.
140 } 140 }
141 } 141 }
142 usersIconView->sort(); 142 usersIconView->sort();
143} 143}
144 144
145void UserConfig::addUser() { 145void UserConfig::addUser() {
146 if(UserDialog::addUser(availableUID,availableGID)) {// Add the user to the system, also send next available UID and GID. 146 if(UserDialog::addUser(availableUID,availableGID)) {// Add the user to the system, also send next available UID and GID.
147 getUsers(); // Update users views. 147 getUsers(); // Update users views.
148 getGroups(); // Update groups view. 148 getGroups(); // Update groups view.
149 } 149 }
150} 150}
151 151
152void UserConfig::editUser() { 152void UserConfig::editUser() {
153 QString username; 153 QString username;
154 if(myTabWidget->currentPageIndex()==0) {// Users 154 if(myTabWidget->currentPageIndex()==0) {// Users
155 if(usersIconView->currentItem()) {// Any icon selected? 155 if(usersIconView->currentItem()) {// Any icon selected?
156 username=usersIconView->currentItem()->text(1);// Get the text associated with the icon. 156 username=usersIconView->currentItem()->text(1);// Get the text associated with the icon.
157 username=username.left(username.find(" - (",0,true));// Strip out the username. 157 username=username.left(username.find(" - (",0,true));// Strip out the username.
158 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog. 158 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog.
159 // If there were any changed also update the views. 159 // If there were any changed also update the views.
160 getUsers(); 160 getUsers();
161 getGroups(); 161 getGroups();
162 } 162 }
163 } else { 163 } else {
164 QMessageBox::information(this,"No selection.","No user has been selected."); 164 QMessageBox::information(this,"No selection.","No user has been selected.");
165 } 165 }
166 } 166 }
167 if(myTabWidget->currentPageIndex()==1) {// All users 167 if(myTabWidget->currentPageIndex()==1) {// All users
168 if(usersListView->currentItem()) {// Anything changed!? 168 if(usersListView->currentItem()) {// Anything changed!?
169 username=usersListView->currentItem()->text(1);// Get the username. 169 username=usersListView->currentItem()->text(1);// Get the username.
170 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog. 170 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog.
171 // And again update the views if there were any changes. 171 // And again update the views if there were any changes.
172 getUsers(); 172 getUsers();
173 getGroups(); 173 getGroups();
174 } 174 }
175 } else { 175 } else {
176 QMessageBox::information(this,"No selection.","No user has been selected."); 176 QMessageBox::information(this,"No selection.","No user has been selected.");
177 } 177 }
178 } 178 }
179} 179}
180 180
181void UserConfig::delUser() { 181void UserConfig::delUser() {
182 QString username; 182 QString username;
183 183
184 if(myTabWidget->currentPageIndex()==0) {// Users, Iconview. 184 if(myTabWidget->currentPageIndex()==0) {// Users, Iconview.
185 if(usersIconView->currentItem()) {// Anything selected? 185 if(usersIconView->currentItem()) {// Anything selected?
186 username=usersIconView->currentItem()->text(1);// Get string associated with icon. 186 username=usersIconView->currentItem()->text(1);// Get string associated with icon.
187 username=username.left(username.find(" - (",0,true));// Strip out the username. 187 username=username.left(username.find(" - (",0,true));// Strip out the username.
188 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) { 188 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) {
189 if(UserDialog::delUser(username)) {// Delete the user if possible. 189 if(UserDialog::delUser(username)) {// Delete the user if possible.
190 // Update views. 190 // Update views.
191 getUsers(); 191 getUsers();
192 getGroups(); 192 getGroups();
193 } 193 }
194 } 194 }
195 } else { 195 } else {
196 QMessageBox::information(this,"No selection","No user has been selected."); 196 QMessageBox::information(this,"No selection","No user has been selected.");
197 } 197 }
198 } 198 }
199 if(myTabWidget->currentPageIndex()==1) {// All users 199 if(myTabWidget->currentPageIndex()==1) {// All users
200 if(usersListView->currentItem()) {// Anything changed!? 200 if(usersListView->currentItem()) {// Anything changed!?
201 username=usersListView->currentItem()->text(1);// Get the username. 201 username=usersListView->currentItem()->text(1);// Get the username.
202 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) { 202 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) {
203 if(UserDialog::delUser(username)) {// Try to delete the user. 203 if(UserDialog::delUser(username)) {// Try to delete the user.
204 // Update views. 204 // Update views.
205 getUsers(); 205 getUsers();
206 getGroups(); 206 getGroups();
207 } 207 }
208 } 208 }
209 } else { 209 } else {
210 QMessageBox::information(this,"No selection","No user has been selected."); 210 QMessageBox::information(this,"No selection","No user has been selected.");
211 } 211 }
212 } 212 }
213 213
214} 214}
215 215
216void UserConfig::getGroups() { 216void UserConfig::getGroups() {
217 groupsListView->clear();// Empty the listview. 217 groupsListView->clear();// Empty the listview.
218 availableGID=500;// We need to find the next free GID, and are only interested in values between 500 & 65000. 218 availableGID=500;// We need to find the next free GID, and are only interested in values between 500 & 65000.
219 for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {// Split the list into lines. 219 for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {// Split the list into lines.
220 accounts->splitGroupEntry(*it);// Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem). 220 accounts->splitGroupEntry(*it);// Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem).
221 if(accounts->gr_name.find(QRegExp("^#"),0)) {// Skip commented lines. 221 if(accounts->gr_name.find(QRegExp("^#"),0)) {// Skip commented lines.
222 new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name); 222 new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name);
diff --git a/noncore/settings/usermanager/usermanager.pro b/noncore/settings/usermanager/usermanager.pro
index 576a233..1baccb6 100644
--- a/noncore/settings/usermanager/usermanager.pro
+++ b/noncore/settings/usermanager/usermanager.pro
@@ -1,34 +1,34 @@
1 TEMPLATE= app 1 TEMPLATE= app
2 #CONFIG = qt warn_on debug 2 #CONFIG = qt warn_on debug
3 CONFIG = qt warn_on release 3 CONFIG = qt warn_on release
4 HEADERS = usermanager.h userdialog.h groupdialog.h passwd.h 4 HEADERS = usermanager.h userdialog.h groupdialog.h passwd.h
5 SOURCES = usermanager.cpp userdialog.cpp groupdialog.cpp passwd.cpp main.cpp 5 SOURCES = usermanager.cpp userdialog.cpp groupdialog.cpp passwd.h main.cpp
6 INCLUDEPATH+= $(OPIEDIR)/include 6 INCLUDEPATH+= $(OPIEDIR)/include
7 DEPENDPATH+= $(OPIEDIR)/include 7 DEPENDPATH+= $(OPIEDIR)/include
8LIBS += -lqpe -lopie -lcrypt 8LIBS += -lqpe -lopie -lcrypt
9 TARGET = usermanager 9 TARGET = usermanager
10DESTDIR = $(OPIEDIR)/bin 10DESTDIR = $(OPIEDIR)/bin
11 11
12TRANSLATIONS = ../../../i18n/de/usermanager.ts \ 12TRANSLATIONS = ../../../i18n/de/usermanager.ts \
13 ../../../i18n/nl/usermanager.ts \ 13 ../../../i18n/nl/usermanager.ts \
14 ../../../i18n/xx/usermanager.ts \ 14 ../../../i18n/xx/usermanager.ts \
15 ../../../i18n/en/usermanager.ts \ 15 ../../../i18n/en/usermanager.ts \
16 ../../../i18n/es/usermanager.ts \ 16 ../../../i18n/es/usermanager.ts \
17 ../../../i18n/fr/usermanager.ts \ 17 ../../../i18n/fr/usermanager.ts \
18 ../../../i18n/hu/usermanager.ts \ 18 ../../../i18n/hu/usermanager.ts \
19 ../../../i18n/ja/usermanager.ts \ 19 ../../../i18n/ja/usermanager.ts \
20 ../../../i18n/ko/usermanager.ts \ 20 ../../../i18n/ko/usermanager.ts \
21 ../../../i18n/no/usermanager.ts \ 21 ../../../i18n/no/usermanager.ts \
22 ../../../i18n/pl/usermanager.ts \ 22 ../../../i18n/pl/usermanager.ts \
23 ../../../i18n/pt/usermanager.ts \ 23 ../../../i18n/pt/usermanager.ts \
24 ../../../i18n/pt_BR/usermanager.ts \ 24 ../../../i18n/pt_BR/usermanager.ts \
25 ../../../i18n/sl/usermanager.ts \ 25 ../../../i18n/sl/usermanager.ts \
26 ../../../i18n/zh_CN/usermanager.ts \ 26 ../../../i18n/zh_CN/usermanager.ts \
27 ../../../i18n/zh_TW/usermanager.ts \ 27 ../../../i18n/zh_TW/usermanager.ts \
28 ../../../i18n/it/usermanager.ts \ 28 ../../../i18n/it/usermanager.ts \
29 ../../../i18n/da/usermanager.ts 29 ../../../i18n/da/usermanager.ts
30 30
31 31
32 32
33 33
34include ( $(OPIEDIR)/include.pro ) 34include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/styles/flat/flat.cpp b/noncore/styles/flat/flat.cpp
index b6635c5..24366f6 100644
--- a/noncore/styles/flat/flat.cpp
+++ b/noncore/styles/flat/flat.cpp
@@ -1,1032 +1,1102 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "flat.h" 21#include <qtopia/qpeapplication.h>
22#include <qpe/qpeapplication.h>
23#include <qpushbutton.h> 22#include <qpushbutton.h>
24#include <qtoolbutton.h> 23#include <qtoolbutton.h>
25#include <qpainter.h> 24#include <qpainter.h>
26#include <qfontmetrics.h> 25#include <qfontmetrics.h>
27#include <qpalette.h> 26#include <qpalette.h>
28#include <qdrawutil.h> 27#include <qdrawutil.h>
29#include <qscrollbar.h> 28#include <qscrollbar.h>
30#include <qbutton.h> 29#include <qbutton.h>
31#include <qframe.h> 30#include <qframe.h>
32#include <qtabbar.h> 31#include <qtabbar.h>
33#include <qspinbox.h> 32#include <qspinbox.h>
34#include <qlineedit.h> 33#include <qlineedit.h>
34#include <qmap.h>
35 35
36#define INCLUDE_MENUITEM_DEF 36#define INCLUDE_MENUITEM_DEF
37#include <qmenudata.h> 37#include <qmenudata.h>
38#include <qpopupmenu.h>
39
40#include "flat.h"
38 41
39#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) 42#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2)
40 43
41class SpinBoxHack : public QSpinBox 44class SpinBoxHack : public QSpinBox
42{ 45{
43public: 46public:
44 void setFlatButtons( bool f ) { 47 void setFlatButtons( bool f ) {
45 upButton()->setFlat( f ); 48 upButton()->setFlat( f );
46 downButton()->setFlat( f ); 49 downButton()->setFlat( f );
47 } 50 }
48}; 51};
49 52
50class FlatStylePrivate : public QObject 53class FlatStylePrivate : public QObject
51{ 54{
52 Q_OBJECT 55 Q_OBJECT
53public: 56public:
54 FlatStylePrivate() : QObject() {} 57 FlatStylePrivate() : QObject() {}
55 58
56 bool eventFilter( QObject *o, QEvent *e ) { 59 bool eventFilter( QObject *o, QEvent *e ) {
57 if ( e->type() == QEvent::ParentPaletteChange && o->inherits( "QMenuBar" ) ) { 60 if ( e->type() == QEvent::ParentPaletteChange ) {
58 QWidget *w = (QWidget *)o; 61 if ( o->inherits( "QMenuBar" ) ) {
59 if ( w->parentWidget() ) { 62 QWidget *w = (QWidget *)o;
60 QPalette p = w->parentWidget()->palette(); 63 if ( w->parentWidget() ) {
61 QColorGroup a = p.active(); 64 QPalette p = w->parentWidget()->palette();
62 a.setColor( QColorGroup::Light, a.foreground() ); 65 QColorGroup a = p.active();
63 a.setColor( QColorGroup::Dark, a.foreground() ); 66 a.setColor( QColorGroup::Light, a.foreground() );
64 p.setActive( a ); 67 a.setColor( QColorGroup::Dark, a.foreground() );
65 p.setInactive( a ); 68 p.setActive( a );
66 w->setPalette( p ); 69 p.setInactive( a );
70 w->setPalette( p );
71 }
72 } else if ( o->inherits( "QHeader" ) ) {
73 QWidget *w = (QWidget *)o;
74 if ( w->parentWidget() ) {
75 QPalette p = w->parentWidget()->palette();
76 QColorGroup a = p.active();
77 a.setColor( QColorGroup::Light, a.button() );
78 p.setActive( a );
79 p.setInactive( a );
80 w->setPalette( p );
81 }
67 } 82 }
68 } 83 }
69 return FALSE; 84 return FALSE;
70 } 85 }
86
87 QMap<QFrame *,int> frameStyles;
71}; 88};
72 89
73FlatStyle::FlatStyle() : revItem(FALSE) 90FlatStyle::FlatStyle() : revItem(FALSE), fillBtnBorder(FALSE)
74{ 91{
75 setButtonMargin(3); 92 setButtonMargin(3);
76 setScrollBarExtent(13,13); 93 setScrollBarExtent(13,13);
77 setButtonDefaultIndicatorWidth(0); 94 setButtonDefaultIndicatorWidth(0);
78 d = new FlatStylePrivate; 95 d = new FlatStylePrivate;
79} 96}
80 97
81FlatStyle::~FlatStyle() 98FlatStyle::~FlatStyle()
82{ 99{
83 delete d; 100 delete d;
84} 101}
85 102
86int FlatStyle::buttonMargin() const 103int FlatStyle::buttonMargin() const
87{ 104{
88 return 3; 105 return 3;
89} 106}
90 107
91QSize FlatStyle::scrollBarExtent() const 108QSize FlatStyle::scrollBarExtent() const
92{ 109{
93 return QSize(13,13); 110 return QSize(13,13);
94} 111}
95 112
96void FlatStyle::polish ( QPalette & ) 113void FlatStyle::polish ( QPalette & )
97{ 114{
98} 115}
99 116
100void FlatStyle::polish( QWidget *w ) 117void FlatStyle::polish( QWidget *w )
101{ 118{
102 if ( w->inherits( "QFrame" ) ) { 119 if ( w->inherits( "QFrame" ) ) {
103 QFrame *f = (QFrame *)w; 120 QFrame *f = (QFrame *)w;
104 if ( f->frameShape() != QFrame::NoFrame ) 121 if ( f->frameShape() == QFrame::HLine || f->frameShape() == QFrame::VLine )
122 f->setFrameShadow( QFrame::Plain );
123 else if ( f->frameShape() != QFrame::NoFrame )
105 f->setFrameShape( QFrame::StyledPanel ); 124 f->setFrameShape( QFrame::StyledPanel );
106 f->setLineWidth( 1 ); 125 f->setLineWidth( 1 );
107 } 126 }
108 if ( w->inherits( "QSpinBox" ) ) 127 if ( w->inherits( "QSpinBox" ) )
109 ((SpinBoxHack*)w)->setFlatButtons( TRUE ); 128 ((SpinBoxHack*)w)->setFlatButtons( TRUE );
110 if ( w->inherits( "QMenuBar" ) ) { 129 if ( w->inherits( "QMenuBar" ) ) {
111 // make selected item look flat 130 // make selected item look flat
112 QPalette p = w->palette(); 131 QPalette p = w->palette();
113 QColorGroup a = p.active(); 132 QColorGroup a = p.active();
114 a.setColor( QColorGroup::Light, a.foreground() ); 133 a.setColor( QColorGroup::Light, a.foreground() );
115 a.setColor( QColorGroup::Dark, a.foreground() ); 134 a.setColor( QColorGroup::Dark, a.foreground() );
116 p.setActive( a ); 135 p.setActive( a );
117 p.setInactive( a ); 136 p.setInactive( a );
118 w->setPalette( p ); 137 w->setPalette( p );
119 w->installEventFilter( d ); 138 w->installEventFilter( d );
139 } else if ( w->inherits( "QHeader" ) ) {
140 // make headers look flat
141 QPalette p = w->palette();
142 QColorGroup a = p.active();
143 a.setColor( QColorGroup::Light, a.button() );
144 p.setActive( a );
145 p.setInactive( a );
146 w->setPalette( p );
147 w->installEventFilter( d );
120 } 148 }
121} 149}
122 150
123void FlatStyle::unPolish( QWidget *w ) 151void FlatStyle::unPolish( QWidget *w )
124{ 152{
125 if ( w->inherits( "QFrame" ) ) { 153 if ( w->inherits("QFrame") ) {
126 QFrame *f = (QFrame *)w; 154 QFrame *f = (QFrame *)w;
127 if ( f->frameShape() != QFrame::NoFrame ) 155 if ( f->frameShape() == QFrame::HLine || f->frameShape() == QFrame::VLine ) {
156 f->setFrameShadow( QFrame::Sunken );
157 } else if ( f->frameShape() != QFrame::NoFrame ) {
128 f->setFrameShape( QFrame::StyledPanel ); 158 f->setFrameShape( QFrame::StyledPanel );
129 f->setLineWidth( 2 ); 159 f->setLineWidth( 2 );
160 }
130 } 161 }
131 if ( w->inherits( "QSpinBox" ) ) 162 if ( w->inherits("QSpinBox") )
132 ((SpinBoxHack*)w)->setFlatButtons( FALSE ); 163 ((SpinBoxHack*)w)->setFlatButtons( FALSE );
133 if ( w->inherits( "QMenuBar" ) ) { 164 if ( w->inherits("QMenuBar") || w->inherits("QHeader") ) {
134 w->unsetPalette(); 165 w->unsetPalette();
135 w->removeEventFilter( d ); 166 w->removeEventFilter( d );
136 } 167 }
137} 168}
138 169
139int FlatStyle::defaultFrameWidth() const 170int FlatStyle::defaultFrameWidth() const
140{ 171{
141 return 1; 172 return 2;
142} 173}
143 174
144void FlatStyle::drawItem( QPainter *p, int x, int y, int w, int h, 175void FlatStyle::drawItem( QPainter *p, int x, int y, int w, int h,
145 int flags, const QColorGroup &g, bool enabled, 176 int flags, const QColorGroup &g, bool enabled,
146 const QPixmap *pixmap, const QString& text, int len, 177 const QPixmap *pixmap, const QString& text, int len,
147 const QColor* penColor ) 178 const QColor* penColor )
148{ 179{
149 QColor pc( penColor ? *penColor : g.foreground() ); 180 QColor pc( penColor ? *penColor : g.foreground() );
150 QColorGroup cg( g ); 181 QColorGroup cg( g );
151 if ( !enabled ) 182 if ( !enabled )
152 cg.setColor( QColorGroup::Light, cg.background() ); 183 cg.setColor( QColorGroup::Light, cg.background() );
153 if ( revItem ) { 184 if ( revItem ) {
154 pc = cg.button(); 185 pc = cg.button();
155 revItem = FALSE; 186 revItem = FALSE;
156 } 187 }
157 QWindowsStyle::drawItem( p, x, y, w, h, flags, cg, enabled, pixmap, text, len, &pc ); 188 QWindowsStyle::drawItem( p, x, y, w, h, flags, cg, enabled, pixmap, text, len, &pc );
158} 189}
159 190
160void FlatStyle::drawPanel ( QPainter * p, int x, int y, int w, int h, 191void FlatStyle::drawPanel ( QPainter * p, int x, int y, int w, int h,
161 const QColorGroup &g, bool /*sunken*/, int lineWidth, const QBrush * fill ) 192 const QColorGroup &g, bool /*sunken*/, int lineWidth, const QBrush * fill )
162{ 193{
163 if ( fill ) 194 if ( fill )
164 p->setBrush( *fill ); 195 p->setBrush( *fill );
165 p->setPen( QPen(g.foreground(), lineWidth) ); 196 p->setPen( QPen(g.foreground(), lineWidth) );
166 p->drawRect( x, y, w, h ); 197 p->drawRect( x, y, w, h );
167} 198}
168 199
169void FlatStyle::drawButton( QPainter *p, int x, int y, int w, int h, 200void FlatStyle::drawButton( QPainter *p, int x, int y, int w, int h,
170 const QColorGroup &cg, bool /*sunken*/, const QBrush* fill ) 201 const QColorGroup &cg, bool /*sunken*/, const QBrush* fill )
171{ 202{
172 QPen oldPen = p->pen(); 203 QPen oldPen = p->pen();
173 204
205 int x2 = x+w-1;
206 int y2 = y+h-1;
207
208 if ( fillBtnBorder && btnBg != cg.color(QColorGroup::Button) ) {
209 p->setPen( btnBg );
210 p->drawLine( x, y, x2, y );
211 p->drawLine( x, y2, x2, y2 );
212 p->drawLine( x, y+1, x, y2-1 );
213 p->drawLine( x2, y+1, x2, y2-1 );
214 p->fillRect( x+1, y+1, 3, 3, btnBg );
215 p->fillRect( x+1, y2-3, 3, 3, btnBg );
216 p->fillRect( x2-3, y2-3, 3, 3, btnBg );
217 p->fillRect( x2-3, y+1, 3, 3, btnBg );
218 p->fillRect( x+2, y+2, w-4, h-4, fill?(*fill):cg.brush(QColorGroup::Button) );
219 } else {
220 p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):cg.brush(QColorGroup::Button) );
221 }
222
174 if ( h >= 10 ) { 223 if ( h >= 10 ) {
175 x++; y++; 224 x++; y++;
225 x2--; y2--;
176 w -= 2; h -= 2; 226 w -= 2; h -= 2;
177 } 227 }
178 228
179 p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):cg.brush(QColorGroup::Button) );
180
181 int x2 = x+w-1;
182 int y2 = y+h-1;
183
184 p->setPen( cg.foreground() ); 229 p->setPen( cg.foreground() );
185 230
186 if ( h < 10 ) { 231 if ( h < 10 ) {
187 p->setBrush( NoBrush ); 232 p->setBrush( NoBrush );
188 p->drawRect( x, y, w, h ); 233 p->drawRect( x, y, w, h );
189 } else { 234 } else {
190 p->drawLine( x+3, y, x2-3, y ); 235 p->drawLine( x+3, y, x2-3, y );
191 p->drawLine( x+3, y2, x2-3, y2 ); 236 p->drawLine( x+3, y2, x2-3, y2 );
192 p->drawLine( x, y+3, x, y2-3 ); 237 p->drawLine( x, y+3, x, y2-3 );
193 p->drawLine( x2, y+3, x2, y2-3 ); 238 p->drawLine( x2, y+3, x2, y2-3 );
194 239
195 p->drawLine( x+1, y+1, x+2, y+1 ); 240 p->drawLine( x+1, y+1, x+2, y+1 );
196 p->drawPoint( x+1, y+2 ); 241 p->drawPoint( x+1, y+2 );
197 p->drawLine( x2-2, y+1, x2-1, y+1 ); 242 p->drawLine( x2-2, y+1, x2-1, y+1 );
198 p->drawPoint( x2-1, y+2 ); 243 p->drawPoint( x2-1, y+2 );
199 244
200 p->drawLine( x+1, y2-1, x+2, y2-1 ); 245 p->drawLine( x+1, y2-1, x+2, y2-1 );
201 p->drawPoint( x+1, y2-2 ); 246 p->drawPoint( x+1, y2-2 );
202 p->drawLine( x2-2, y2-1, x2-1, y2-1 ); 247 p->drawLine( x2-2, y2-1, x2-1, y2-1 );
203 p->drawPoint( x2-1, y2-2 ); 248 p->drawPoint( x2-1, y2-2 );
204 } 249 }
205 250
206 p->setPen( oldPen ); 251 p->setPen( oldPen );
207} 252}
208 253
209void FlatStyle::drawButtonMask ( QPainter * p, int x, int y, int w, int h ) 254void FlatStyle::drawButtonMask ( QPainter * p, int x, int y, int w, int h )
210{ 255{
211 x++; y++; 256 x++; y++;
212 x-=2; y-=2; 257 x-=2; y-=2;
213 p->fillRect( x, y, w, h, color1 ); 258 p->fillRect( x, y, w, h, color1 );
214} 259}
215 260
216void FlatStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h, 261void FlatStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h,
217 const QColorGroup &g, bool /*sunken*/, const QBrush* fill ) 262 const QColorGroup &g, bool /*sunken*/, const QBrush* fill )
218{ 263{
219 p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):g.brush(QColorGroup::Button) ); 264 p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):g.brush(QColorGroup::Button) );
220 p->setPen( g.foreground() ); 265 p->setPen( g.foreground() );
221 p->setBrush( NoBrush ); 266 p->setBrush( NoBrush );
222 p->drawRect( x, y, w, h ); 267 p->drawRect( x, y, w, h );
223} 268}
224 269
225void FlatStyle::drawToolButton( QPainter *p, int x, int y, int w, int h, 270void FlatStyle::drawToolButton( QPainter *p, int x, int y, int w, int h,
226 const QColorGroup &g, bool sunken, const QBrush* fill ) 271 const QColorGroup &g, bool sunken, const QBrush* fill )
227{ 272{
273 if ( p->device()->devType() == QInternal::Widget ) {
274 QWidget *w = (QWidget *)p->device();
275 if ( w->isA("QToolButton") ) {
276 QToolButton *btn = (QToolButton *)w;
277 if ( btn->parentWidget() ) {
278 btnBg = btn->parentWidget()->backgroundColor();
279 fillBtnBorder = TRUE;
280 }
281 }
282 }
228 QBrush fb( fill ? *fill : g.button() ); 283 QBrush fb( fill ? *fill : g.button() );
229 if ( sunken && fb == g.brush( QColorGroup::Button ) ) { 284 if ( sunken && fb == g.brush( QColorGroup::Button ) ) {
230 fb = g.buttonText(); 285 fb = g.buttonText();
231 revItem = TRUE;// ugh 286 revItem = TRUE;// ugh
232 } 287 }
233 drawButton( p, x, y, w, h, g, sunken, &fb ); 288 drawButton( p, x, y, w, h, g, sunken, &fb );
289 fillBtnBorder = FALSE;
234} 290}
235 291
236void FlatStyle::drawPushButton( QPushButton *btn, QPainter *p ) 292void FlatStyle::drawPushButton( QPushButton *btn, QPainter *p )
237{ 293{
238 QColorGroup g = btn->colorGroup(); 294 QColorGroup g = btn->colorGroup();
239 int x1, y1, x2, y2; 295 int x1, y1, x2, y2;
240 296
241 btn->rect().coords( &x1, &y1, &x2, &y2 );// get coordinates 297 btn->rect().coords( &x1, &y1, &x2, &y2 );// get coordinates
242 298
243 p->setPen( g.foreground() ); 299 p->setPen( g.foreground() );
244 p->setBrush( QBrush(g.button(),NoBrush) ); 300 p->setBrush( QBrush(g.button(),NoBrush) );
245 301
246// int diw = buttonDefaultIndicatorWidth(); 302// int diw = buttonDefaultIndicatorWidth();
247 /* 303 /*
248 if ( btn->isDefault() || btn->autoDefault() ) { 304 if ( btn->isDefault() || btn->autoDefault() ) {
249 if ( btn->isDefault() ) { 305 if ( btn->isDefault() ) {
250 p->setPen( g.shadow() ); 306 p->setPen( g.shadow() );
251 p->drawRect( x1, y1, x2-x1+1, y2-y1+1 ); 307 p->drawRect( x1, y1, x2-x1+1, y2-y1+1 );
252 } 308 }
253 x1 += diw; 309 x1 += diw;
254 y1 += diw; 310 y1 += diw;
255 x2 -= diw; 311 x2 -= diw;
256 y2 -= diw; 312 y2 -= diw;
257 } 313 }
258 */ 314 */
259 315
316 if ( btn->parentWidget() ) {
317 btnBg = btn->parentWidget()->backgroundColor();
318 fillBtnBorder = TRUE;
319 }
320
260 bool clearButton = TRUE; 321 bool clearButton = TRUE;
261 if ( btn->isDown() ) { 322 if ( btn->isDown() ) {
262 drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE, 323 drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE,
263 &g.brush( QColorGroup::Text ) ); 324 &g.brush( QColorGroup::Text ) );
264 } else { 325 } else {
265 if ( btn->isToggleButton() && btn->isOn() && btn->isEnabled() ) { 326 if ( btn->isToggleButton() && btn->isOn() && btn->isEnabled() ) {
266 QBrush fill(g.light(), Dense4Pattern ); 327 QBrush fill(g.light(), Dense4Pattern );
267 drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE, &fill ); 328 drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE, &fill );
268 clearButton = FALSE; 329 clearButton = FALSE;
269 } else { 330 } else {
270 if ( !btn->isFlat() ) 331 if ( !btn->isFlat() )
271 drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, btn->isOn(), 332 drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, btn->isOn(),
272 &g.brush( QColorGroup::Button ) ); 333 &g.brush( QColorGroup::Button ) );
273 } 334 }
274 } 335 }
275 /* 336 /*
276 if ( clearButton ) { 337 if ( clearButton ) {
277 if (btn->isDown()) 338 if (btn->isDown())
278 p->setBrushOrigin(p->brushOrigin() + QPoint(1,1)); 339 p->setBrushOrigin(p->brushOrigin() + QPoint(1,1));
279 p->fillRect( x1+2, y1+2, x2-x1-3, y2-y1-3, 340 p->fillRect( x1+2, y1+2, x2-x1-3, y2-y1-3,
280 g.brush( QColorGroup::Button ) ); 341 g.brush( QColorGroup::Button ) );
281 if (btn->isDown()) 342 if (btn->isDown())
282 p->setBrushOrigin(p->brushOrigin() - QPoint(1,1)); 343 p->setBrushOrigin(p->brushOrigin() - QPoint(1,1));
283 } 344 }
284 */ 345 */
285 346
347 fillBtnBorder = FALSE;
286 if ( p->brush().style() != NoBrush ) 348 if ( p->brush().style() != NoBrush )
287 p->setBrush( NoBrush ); 349 p->setBrush( NoBrush );
288} 350}
289 351
290void FlatStyle::drawPushButtonLabel( QPushButton *btn, QPainter *p ) 352void FlatStyle::drawPushButtonLabel( QPushButton *btn, QPainter *p )
291{ 353{
292 QRect r = pushButtonContentsRect( btn ); 354 QRect r = pushButtonContentsRect( btn );
293 int x, y, w, h; 355 int x, y, w, h;
294 r.rect( &x, &y, &w, &h ); 356 r.rect( &x, &y, &w, &h );
295 QColorGroup cg = btn->colorGroup(); 357 QColorGroup cg = btn->colorGroup();
296 if ( btn->isToggleButton() && btn->isOn() && btn->isEnabled() && !btn->isDown() ) 358 if ( btn->isToggleButton() && btn->isOn() && btn->isEnabled() && !btn->isDown() )
297 cg.setColor( QColorGroup::ButtonText, btn->colorGroup().text() ); 359 cg.setColor( QColorGroup::ButtonText, btn->colorGroup().text() );
298 else if ( btn->isDown() || btn->isOn() ) 360 else if ( btn->isDown() || btn->isOn() )
299 cg.setColor( QColorGroup::ButtonText, btn->colorGroup().button() ); 361 cg.setColor( QColorGroup::ButtonText, btn->colorGroup().button() );
300 if ( btn->isMenuButton() ) { 362 if ( btn->isMenuButton() ) {
301 int dx = menuButtonIndicatorWidth( btn->height() ); 363 int dx = menuButtonIndicatorWidth( btn->height() );
302 drawArrow( p, DownArrow, FALSE, 364 drawArrow( p, DownArrow, FALSE,
303 x+w-dx, y+2, dx-4, h-4, 365 x+w-dx, y+2, dx-4, h-4,
304 cg, 366 cg,
305 btn->isEnabled() ); 367 btn->isEnabled() );
306 w -= dx; 368 w -= dx;
307 } 369 }
308 370
309 if ( btn->iconSet() && !btn->iconSet()->isNull() ) { 371 if ( btn->iconSet() && !btn->iconSet()->isNull() ) {
310 QIconSet::Mode mode = btn->isEnabled() 372 QIconSet::Mode mode = btn->isEnabled()
311 ? QIconSet::Normal : QIconSet::Disabled; 373 ? QIconSet::Normal : QIconSet::Disabled;
312 if ( mode == QIconSet::Normal && btn->hasFocus() ) 374 if ( mode == QIconSet::Normal && btn->hasFocus() )
313 mode = QIconSet::Active; 375 mode = QIconSet::Active;
314 QPixmap pixmap = btn->iconSet()->pixmap( QIconSet::Small, mode ); 376 QPixmap pixmap = btn->iconSet()->pixmap( QIconSet::Small, mode );
315 int pixw = pixmap.width(); 377 int pixw = pixmap.width();
316 int pixh = pixmap.height(); 378 int pixh = pixmap.height();
317 p->drawPixmap( x+2, y+h/2-pixh/2, pixmap ); 379 p->drawPixmap( x+2, y+h/2-pixh/2, pixmap );
318 x += pixw + 4; 380 x += pixw + 4;
319 w -= pixw + 4; 381 w -= pixw + 4;
320 } 382 }
321 drawItem( p, x, y, w, h, 383 drawItem( p, x, y, w, h,
322 AlignCenter | ShowPrefix, 384 AlignCenter | ShowPrefix,
323 cg, btn->isEnabled(), 385 cg, btn->isEnabled(),
324 btn->pixmap(), btn->text(), -1, &cg.buttonText() ); 386 btn->pixmap(), btn->text(), -1, &cg.buttonText() );
325 387
326} 388}
327 389
328QRect FlatStyle::comboButtonRect( int x, int y, int w, int h) 390QRect FlatStyle::comboButtonRect( int x, int y, int w, int h)
329{ 391{
330 return QRect(x+2, y+2, w-4-13, h-4); 392 return QRect(x+2, y+2, w-4-13, h-4);
331} 393}
332 394
333 395
334QRect FlatStyle::comboButtonFocusRect( int x, int y, int w, int h) 396QRect FlatStyle::comboButtonFocusRect( int x, int y, int w, int h)
335{ 397{
336 return QRect(x+2, y+2, w-4-14, h-4); 398 return QRect(x+2, y+2, w-4-14, h-4);
337} 399}
338 400
339void FlatStyle::drawComboButton( QPainter *p, int x, int y, int w, int h, 401void FlatStyle::drawComboButton( QPainter *p, int x, int y, int w, int h,
340 const QColorGroup &g, bool sunken, 402 const QColorGroup &g, bool sunken,
341 bool /*editable*/, 403 bool /*editable*/,
342 bool enabled, 404 bool enabled,
343 const QBrush * /*fill*/ ) 405 const QBrush * /*fill*/ )
344{ 406{
345 x++; y++; 407 x++; y++;
346 w-=2; h-=2; 408 w-=2; h-=2;
347 p->setPen( g.foreground() ); 409 p->setPen( g.foreground() );
348 p->setBrush( QBrush(NoBrush) ); 410 p->setBrush( QBrush(NoBrush) );
349 p->drawRect( x, y, w, h ); 411 p->drawRect( x, y, w, h );
350 p->setPen( g.background() ); 412 p->setPen( g.background() );
351 p->drawRect( x+1, y+1, w-14, h-2 ); 413 p->drawRect( x+1, y+1, w-14, h-2 );
352 p->fillRect( x+2, y+2, w-16, h-4, g.brush( QColorGroup::Base ) ); 414 p->fillRect( x+2, y+2, w-16, h-4, g.brush( QColorGroup::Base ) );
353 QColorGroup cg( g ); 415 QColorGroup cg( g );
354 if ( sunken ) { 416 if ( sunken ) {
355 cg.setColor( QColorGroup::ButtonText, g.button() ); 417 cg.setColor( QColorGroup::ButtonText, g.button() );
356 cg.setColor( QColorGroup::Button, g.buttonText() ); 418 cg.setColor( QColorGroup::Button, g.buttonText() );
357 } 419 }
358 drawArrow( p, QStyle::DownArrow, FALSE, 420 drawArrow( p, QStyle::DownArrow, FALSE,
359 x+w-13, y+1, 12, h-2, cg, enabled, 421 x+w-13, y+1, 12, h-2, cg, enabled,
360 &cg.brush( QColorGroup::Button ) ); 422 &cg.brush( QColorGroup::Button ) );
361 423
362} 424}
363 425
364 426
365void FlatStyle::drawExclusiveIndicator ( QPainter * p, int x, int y, int w, 427void FlatStyle::drawExclusiveIndicator ( QPainter * p, int x, int y, int w,
366 int h, const QColorGroup &cg, bool on, bool down, bool enabled ) 428 int h, const QColorGroup &cg, bool on, bool down, bool enabled )
367{ 429{
368 static const QCOORD pts1[] = { // dark lines 430 static const QCOORD pts1[] = { // dark lines
369 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 }; 431 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 };
370 static const QCOORD pts4[] = { // white lines 432 static const QCOORD pts4[] = { // white lines
371 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7, 433 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7,
372 11,4, 10,3, 10,2 }; 434 11,4, 10,3, 10,2 };
373 static const QCOORD pts5[] = { // inner fill 435 static const QCOORD pts5[] = { // inner fill
374 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 }; 436 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 };
375 437
376 p->eraseRect( x, y, w, h ); 438 p->eraseRect( x, y, w, h );
377 QPointArray a( QCOORDARRLEN(pts1), pts4 ); 439 QPointArray a( QCOORDARRLEN(pts1), pts4 );
378 a.translate( x, y ); 440 a.translate( x, y );
379 p->setPen( cg.foreground() ); 441 p->setPen( cg.foreground() );
380 p->drawPolyline( a ); 442 p->drawPolyline( a );
381 a.setPoints( QCOORDARRLEN(pts4), pts1 ); 443 a.setPoints( QCOORDARRLEN(pts4), pts1 );
382 a.translate( x, y ); 444 a.translate( x, y );
383 p->setPen( cg.foreground() ); 445 p->setPen( cg.foreground() );
384 p->drawPolyline( a ); 446 p->drawPolyline( a );
385 a.setPoints( QCOORDARRLEN(pts5), pts5 ); 447 a.setPoints( QCOORDARRLEN(pts5), pts5 );
386 a.translate( x, y ); 448 a.translate( x, y );
387 QColor fillColor = ( down || !enabled ) ? cg.button() : cg.base(); 449 QColor fillColor = ( down || !enabled ) ? cg.button() : cg.base();
388 p->setPen( fillColor ); 450 p->setPen( fillColor );
389 p->setBrush( fillColor ) ; 451 p->setBrush( fillColor ) ;
390 p->drawPolygon( a ); 452 p->drawPolygon( a );
391 if ( on ) { 453 if ( on ) {
392 p->setPen( NoPen ); 454 p->setPen( NoPen );
393 p->setBrush( cg.text() ); 455 p->setBrush( cg.text() );
394 p->drawRect( x+5, y+4, 2, 4 ); 456 p->drawRect( x+5, y+4, 2, 4 );
395 p->drawRect( x+4, y+5, 4, 2 ); 457 p->drawRect( x+4, y+5, 4, 2 );
396 } 458 }
397} 459}
398 460
399void FlatStyle::drawIndicator ( QPainter * p, int x, int y, int w, int h, 461void FlatStyle::drawIndicator ( QPainter * p, int x, int y, int w, int h,
400 const QColorGroup &cg, int state, bool down, bool enabled ) 462 const QColorGroup &cg, int state, bool down, bool enabled )
401{ 463{
402 QColorGroup mycg( cg ); 464 QColorGroup mycg( cg );
403 mycg.setBrush( QColorGroup::Button, QBrush() ); 465 mycg.setBrush( QColorGroup::Button, QBrush() );
404 QBrush fill; 466 QBrush fill;
405 drawButton( p, x, y, w, h, mycg, TRUE, 0 ); 467 drawButton( p, x, y, w, h, mycg, TRUE, 0 );
406 if ( down ) 468 if ( down )
407 fill = cg.brush( QColorGroup::Button ); 469 fill = cg.brush( QColorGroup::Button );
408 else 470 else
409 fill = cg.brush( enabled ? QColorGroup::Base : QColorGroup::Background ); 471 fill = cg.brush( enabled ? QColorGroup::Base : QColorGroup::Background );
410 mycg.setBrush( QColorGroup::Button, fill ); 472 mycg.setBrush( QColorGroup::Button, fill );
411 p->fillRect( x+1, y+1, w-2, h-2, fill ); 473 p->fillRect( x+1, y+1, w-2, h-2, fill );
412 if ( state != QButton::Off ) { 474 if ( state != QButton::Off ) {
413 QPointArray a( 7*2 ); 475 QPointArray a( 7*2 );
414 int i, xx, yy; 476 int i, xx, yy;
415 xx = x+3; 477 xx = x+3;
416 yy = y+5; 478 yy = y+5;
417 for ( i=0; i<3; i++ ) { 479 for ( i=0; i<3; i++ ) {
418 a.setPoint( 2*i, xx, yy ); 480 a.setPoint( 2*i, xx, yy );
419 a.setPoint( 2*i+1, xx, yy+2 ); 481 a.setPoint( 2*i+1, xx, yy+2 );
420 xx++; yy++; 482 xx++; yy++;
421 } 483 }
422 yy -= 2; 484 yy -= 2;
423 for ( i=3; i<7; i++ ) { 485 for ( i=3; i<7; i++ ) {
424 a.setPoint( 2*i, xx, yy ); 486 a.setPoint( 2*i, xx, yy );
425 a.setPoint( 2*i+1, xx, yy+2 ); 487 a.setPoint( 2*i+1, xx, yy+2 );
426 xx++; yy--; 488 xx++; yy--;
427 } 489 }
428 if ( state == QButton::NoChange ) { 490 if ( state == QButton::NoChange ) {
429 p->setPen( mycg.dark() ); 491 p->setPen( mycg.dark() );
430 } else { 492 } else {
431 p->setPen( mycg.text() ); 493 p->setPen( mycg.text() );
432 } 494 }
433 p->drawLineSegments( a ); 495 p->drawLineSegments( a );
434 } 496 }
435} 497}
436 498
437 #define HORIZONTAL(sb->orientation() == QScrollBar::Horizontal) 499 #define HORIZONTAL(sb->orientation() == QScrollBar::Horizontal)
438 #define VERTICAL!HORIZONTAL 500 #define VERTICAL!HORIZONTAL
439 #define MOTIF_BORDER2 501 #define MOTIF_BORDER2
440 #define SLIDER_MIN9 // ### motif says 6 but that's too small 502 #define SLIDER_MIN9 // ### motif says 6 but that's too small
441 503
442/*! \reimp */ 504/*! \reimp */
443 505
444void FlatStyle::scrollBarMetrics( const QScrollBar* sb, int &sliderMin, int &sliderMax, int &sliderLength, int& buttonDim ) 506void FlatStyle::scrollBarMetrics( const QScrollBar* sb, int &sliderMin, int &sliderMax, int &sliderLength, int& buttonDim )
445{ 507{
446 int maxLength; 508 int maxLength;
447 int length = HORIZONTAL ? sb->width() : sb->height(); 509 int length = HORIZONTAL ? sb->width() : sb->height();
448 int extent = HORIZONTAL ? sb->height() : sb->width(); 510 int extent = HORIZONTAL ? sb->height() : sb->width();
449 511
450 if ( length > (extent - 1)*2 ) 512 if ( length > (extent - 1)*2 )
451 buttonDim = extent; 513 buttonDim = extent;
452 else 514 else
453 buttonDim = length/2 - 1; 515 buttonDim = length/2 - 1;
454 516
455 sliderMin = 0; 517 sliderMin = 0;
456 maxLength = length - buttonDim*2 + 2; 518 maxLength = length - buttonDim*2 + 2;
457 519
458 if ( sb->maxValue() == sb->minValue() ) { 520 if ( sb->maxValue() == sb->minValue() ) {
459 sliderLength = maxLength; 521 sliderLength = maxLength;
460 } else { 522 } else {
461 sliderLength = (sb->pageStep()*maxLength)/ 523 sliderLength = (sb->pageStep()*maxLength)/
462 (sb->maxValue()-sb->minValue()+sb->pageStep()); 524 (sb->maxValue()-sb->minValue()+sb->pageStep());
463 uint range = sb->maxValue()-sb->minValue(); 525 uint range = sb->maxValue()-sb->minValue();
464 if ( sliderLength < SLIDER_MIN || range > INT_MAX/2 ) 526 if ( sliderLength < SLIDER_MIN || range > INT_MAX/2 )
465 sliderLength = SLIDER_MIN; 527 sliderLength = SLIDER_MIN;
466 if ( sliderLength > maxLength ) 528 if ( sliderLength > maxLength )
467 sliderLength = maxLength; 529 sliderLength = maxLength;
468 } 530 }
469 531
470 sliderMax = sliderMin + maxLength - sliderLength; 532 sliderMax = sliderMin + maxLength - sliderLength;
471} 533}
472 534
473/*!\reimp 535/*!\reimp
474 */ 536 */
475QStyle::ScrollControl FlatStyle::scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p ) 537QStyle::ScrollControl FlatStyle::scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p )
476{ 538{
477 if ( !sb->rect().contains( p ) ) 539 if ( !sb->rect().contains( p ) )
478 return NoScroll; 540 return NoScroll;
479 int sliderMin, sliderMax, sliderLength, buttonDim, pos; 541 int sliderMin, sliderMax, sliderLength, buttonDim, pos;
480 scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); 542 scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim );
481 543
482 if (sb->orientation() == QScrollBar::Horizontal) 544 if (sb->orientation() == QScrollBar::Horizontal)
483 pos = p.x(); 545 pos = p.x();
484 else 546 else
485 pos = p.y(); 547 pos = p.y();
486 548
487 if (pos < sliderStart) 549 if (pos < sliderStart)
488 return SubPage; 550 return SubPage;
489 if (pos < sliderStart + sliderLength) 551 if (pos < sliderStart + sliderLength)
490 return Slider; 552 return Slider;
491 if (pos < sliderMax + sliderLength) 553 if (pos < sliderMax + sliderLength)
492 return AddPage; 554 return AddPage;
493 if (pos < sliderMax + sliderLength + buttonDim) 555 if (pos < sliderMax + sliderLength + buttonDim)
494 return SubLine; 556 return SubLine;
495 return AddLine; 557 return AddLine;
496} 558}
497 559
498/*! \reimp */ 560/*! \reimp */
499 561
500void FlatStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl ) 562void FlatStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl )
501{ 563{
502#define ADD_LINE_ACTIVE ( activeControl == AddLine ) 564#define ADD_LINE_ACTIVE ( activeControl == AddLine )
503#define SUB_LINE_ACTIVE ( activeControl == SubLine ) 565#define SUB_LINE_ACTIVE ( activeControl == SubLine )
504 QColorGroup g = sb->colorGroup(); 566 QColorGroup g = sb->colorGroup();
505 567
506 int sliderMin, sliderMax, sliderLength, buttonDim; 568 int sliderMin, sliderMax, sliderLength, buttonDim;
507 scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); 569 scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim );
508 570
509 if ( controls == (AddLine | SubLine | AddPage | SubPage | Slider | First | Last ) ) { 571 if ( controls == (AddLine | SubLine | AddPage | SubPage | Slider | First | Last ) ) {
510 p->setPen( g.foreground() ); 572 p->setPen( g.foreground() );
511 p->setBrush( g.brush( QColorGroup::Mid ) ); 573 p->setBrush( g.brush( QColorGroup::Mid ) );
512 p->drawRect( 0, 0, sb->width(), sb->height() ); 574 p->drawRect( 0, 0, sb->width(), sb->height() );
513 } 575 }
514 576
515 if (sliderStart > sliderMax) { // sanity check 577 if (sliderStart > sliderMax) { // sanity check
516 sliderStart = sliderMax; 578 sliderStart = sliderMax;
517 } 579 }
518 580
519 int dimB = buttonDim; 581 int dimB = buttonDim;
520 QRect addB; 582 QRect addB;
521 QRect subB; 583 QRect subB;
522 QRect addPageR; 584 QRect addPageR;
523 QRect subPageR; 585 QRect subPageR;
524 QRect sliderR; 586 QRect sliderR;
525 int addX, addY, subX, subY; 587 int addX, addY, subX, subY;
526 int length = HORIZONTAL ? sb->width() : sb->height(); 588 int length = HORIZONTAL ? sb->width() : sb->height();
527 int extent = HORIZONTAL ? sb->height() : sb->width(); 589 int extent = HORIZONTAL ? sb->height() : sb->width();
528 590
529 if ( HORIZONTAL ) { 591 if ( HORIZONTAL ) {
530 subY = addY = ( extent - dimB ) / 2; 592 subY = addY = ( extent - dimB ) / 2;
531 subX = length - dimB - dimB + 1; 593 subX = length - dimB - dimB + 1;
532 addX = length - dimB; 594 addX = length - dimB;
533 } else { 595 } else {
534 subX = addX = ( extent - dimB ) / 2; 596 subX = addX = ( extent - dimB ) / 2;
535 subY = length - dimB - dimB + 1; 597 subY = length - dimB - dimB + 1;
536 addY = length - dimB; 598 addY = length - dimB;
537 } 599 }
538 600
539 int sliderEnd = sliderStart + sliderLength; 601 int sliderEnd = sliderStart + sliderLength;
540 int sliderW = extent; 602 int sliderW = extent;
541 if ( HORIZONTAL ) { 603 if ( HORIZONTAL ) {
542 subB.setRect( subX,subY,dimB,dimB ); 604 subB.setRect( subX,subY,dimB,dimB );
543 addB.setRect( addX,addY,dimB,dimB ); 605 addB.setRect( addX,addY,dimB,dimB );
544 subPageR.setRect( 0, 0, sliderStart+1, sliderW ); 606 subPageR.setRect( 0, 0, sliderStart+1, sliderW );
545 addPageR.setRect( sliderEnd-1, 0, subX - sliderEnd+2, sliderW ); 607 addPageR.setRect( sliderEnd-1, 0, subX - sliderEnd+2, sliderW );
546 sliderR .setRect( sliderStart, 0, sliderLength, sliderW ); 608 sliderR .setRect( sliderStart, 0, sliderLength, sliderW );
547 609
548 } else { 610 } else {
549 subB.setRect( subX,subY,dimB,dimB ); 611 subB.setRect( subX,subY,dimB,dimB );
550 addB.setRect( addX,addY,dimB,dimB ); 612 addB.setRect( addX,addY,dimB,dimB );
551 subPageR.setRect( 0, 0, sliderW, sliderStart+1 ); 613 subPageR.setRect( 0, 0, sliderW, sliderStart+1 );
552 addPageR.setRect( 0, sliderEnd-1, sliderW, subY - sliderEnd+2 ); 614 addPageR.setRect( 0, sliderEnd-1, sliderW, subY - sliderEnd+2 );
553 sliderR .setRect( 0, sliderStart, sliderW, sliderLength ); 615 sliderR .setRect( 0, sliderStart, sliderW, sliderLength );
554 } 616 }
555 617
556 bool maxedOut = (sb->maxValue() == sb->minValue()); 618 bool maxedOut = (sb->maxValue() == sb->minValue());
557 p->setPen( g.foreground() ); 619 p->setPen( g.foreground() );
558 if ( controls & AddLine ) { 620 if ( controls & AddLine ) {
559 p->setBrush( ADD_LINE_ACTIVE ? g.foreground() : g.button() ); 621 p->setBrush( ADD_LINE_ACTIVE ? g.foreground() : g.button() );
560 p->drawRect( addB.x(), addB.y(), addB.width(), addB.height() ); 622 p->drawRect( addB.x(), addB.y(), addB.width(), addB.height() );
561 p->setPen( ADD_LINE_ACTIVE ? g.button() : g.foreground() ); 623 p->setPen( ADD_LINE_ACTIVE ? g.button() : g.foreground() );
562 QColorGroup cg( g ); 624 QColorGroup cg( g );
563 if ( maxedOut ) 625 if ( maxedOut )
564 cg.setColor( QColorGroup::ButtonText, g.mid() ); 626 cg.setColor( QColorGroup::ButtonText, g.mid() );
565 else if ( ADD_LINE_ACTIVE ) 627 else if ( ADD_LINE_ACTIVE )
566 cg.setColor( QColorGroup::ButtonText, g.button() ); 628 cg.setColor( QColorGroup::ButtonText, g.button() );
567 int xo = VERTICAL ? 1 : 0; 629 int xo = VERTICAL ? 1 : 0;
568 drawArrow( p, VERTICAL ? DownArrow : RightArrow, FALSE, 630 drawArrow( p, VERTICAL ? DownArrow : RightArrow, FALSE,
569 addB.x()+2+xo, addB.y()+2, addB.width()-4-xo, addB.height()-4, 631 addB.x()+2+xo, addB.y()+2, addB.width()-4-xo, addB.height()-4,
570 cg, TRUE, &p->brush() ); 632 cg, TRUE, &p->brush() );
571 } 633 }
572 if ( controls & SubLine ) { 634 if ( controls & SubLine ) {
573 p->setBrush( SUB_LINE_ACTIVE ? g.foreground() : g.button() ); 635 p->setBrush( SUB_LINE_ACTIVE ? g.foreground() : g.button() );
574 p->drawRect( subB.x(), subB.y(), subB.width(), subB.height() ); 636 p->drawRect( subB.x(), subB.y(), subB.width(), subB.height() );
575 p->setPen( SUB_LINE_ACTIVE ? g.button() : g.foreground() ); 637 p->setPen( SUB_LINE_ACTIVE ? g.button() : g.foreground() );
576 QColorGroup cg( g ); 638 QColorGroup cg( g );
577 if ( maxedOut ) 639 if ( maxedOut )
578 cg.setColor( QColorGroup::ButtonText, g.mid() ); 640 cg.setColor( QColorGroup::ButtonText, g.mid() );
579 else if ( SUB_LINE_ACTIVE ) 641 else if ( SUB_LINE_ACTIVE )
580 cg.setColor( QColorGroup::ButtonText, g.button() ); 642 cg.setColor( QColorGroup::ButtonText, g.button() );
581 int xo = VERTICAL ? 1 : 0; 643 int xo = VERTICAL ? 1 : 0;
582 drawArrow( p, VERTICAL ? UpArrow : LeftArrow, FALSE, 644 drawArrow( p, VERTICAL ? UpArrow : LeftArrow, FALSE,
583 subB.x()+2+xo, subB.y()+2, subB.width()-4-xo, subB.height()-4, 645 subB.x()+2+xo, subB.y()+2, subB.width()-4-xo, subB.height()-4,
584 cg, TRUE, &p->brush() ); 646 cg, TRUE, &p->brush() );
585 } 647 }
586 648
587 649
588 p->setPen( g.foreground() ); 650 p->setPen( g.foreground() );
589 p->setBrush( g.brush( QColorGroup::Mid ) ); 651 p->setBrush( g.brush( QColorGroup::Mid ) );
590 if ( controls & SubPage ) 652 if ( controls & SubPage )
591 p->drawRect( subPageR.x(), subPageR.y(), subPageR.width(), subPageR.height() ); 653 p->drawRect( subPageR.x(), subPageR.y(), subPageR.width(), subPageR.height() );
592 if ( controls & AddPage && addPageR.y() < addPageR.bottom() ) 654 if ( controls & AddPage && addPageR.y() < addPageR.bottom() &&
655 addPageR.x() < addPageR.right() )
593 p->drawRect( addPageR.x(), addPageR.y(), addPageR.width(), addPageR.height() ); 656 p->drawRect( addPageR.x(), addPageR.y(), addPageR.width(), addPageR.height() );
594 if ( controls & Slider ) { 657 if ( controls & Slider ) {
595 QPoint bo = p->brushOrigin(); 658 QPoint bo = p->brushOrigin();
596 p->setBrushOrigin(sliderR.topLeft()); 659 p->setBrushOrigin(sliderR.topLeft());
597 p->setPen( g.foreground() ); 660 p->setPen( g.foreground() );
598 p->setBrush( g.button() ); 661 p->setBrush( g.button() );
599 p->drawRect( sliderR.x(), sliderR.y(), sliderR.width(), sliderR.height() ); 662 p->drawRect( sliderR.x(), sliderR.y(), sliderR.width(), sliderR.height() );
600 p->setBrushOrigin(bo); 663 p->setBrushOrigin(bo);
601 QColorGroup cg( g ); 664 QColorGroup cg( g );
602 if ( maxedOut ) 665 if ( maxedOut )
603 cg.setColor( QColorGroup::ButtonText, g.mid() ); 666 cg.setColor( QColorGroup::ButtonText, g.mid() );
604 drawRiffles( p, sliderR.x(), sliderR.y(), 667 drawRiffles( p, sliderR.x(), sliderR.y(),
605 sliderR.width(), sliderR.height(), cg, HORIZONTAL ); 668 sliderR.width(), sliderR.height(), cg, HORIZONTAL );
606 } 669 }
607 670
608 // ### perhaps this should not be able to accept focus if maxedOut? 671 // ### perhaps this should not be able to accept focus if maxedOut?
609 if ( sb->hasFocus() && (controls & Slider) ) 672 if ( sb->hasFocus() && (controls & Slider) )
610 p->drawWinFocusRect( sliderR.x()+2, sliderR.y()+2, 673 p->drawWinFocusRect( sliderR.x()+2, sliderR.y()+2,
611 sliderR.width()-5, sliderR.height()-5, 674 sliderR.width()-5, sliderR.height()-5,
612 sb->backgroundColor() ); 675 sb->backgroundColor() );
613 676
614} 677}
615 678
616void FlatStyle::drawRiffles( QPainter* p, int x, int y, int w, int h, 679void FlatStyle::drawRiffles( QPainter* p, int x, int y, int w, int h,
617 const QColorGroup &g, bool horizontal ) 680 const QColorGroup &g, bool horizontal )
618{ 681{
619 if (!horizontal) { 682 if (!horizontal) {
620 if (h > 20) { 683 if (h > 20) {
621 y += (h-20)/2 ; 684 y += (h-20)/2 ;
622 h = 20; 685 h = 20;
623 } 686 }
624 if (h > 12) { 687 if (h > 12) {
625 int n = 3; 688 int n = 3;
626 int my = y+h/2-2; 689 int my = y+h/2-2;
627 int i ; 690 int i ;
628 p->setPen(g.buttonText()); 691 p->setPen(g.buttonText());
629 for (i=0; i<n; i++) { 692 for (i=0; i<n; i++) {
630 p->drawLine(x+4, my+3*i, x+w-5, my+3*i); 693 p->drawLine(x+4, my+3*i, x+w-5, my+3*i);
631 } 694 }
632 } 695 }
633 } else { 696 } else {
634 if (w > 20) { 697 if (w > 20) {
635 x += (w-20)/2 ; 698 x += (w-20)/2 ;
636 w = 20; 699 w = 20;
637 } 700 }
638 if (w > 12) { 701 if (w > 12) {
639 int n = 3; 702 int n = 3;
640 int mx = x+w/2-4; 703 int mx = x+w/2-4;
641 int i ; 704 int i ;
642 p->setPen(g.buttonText()); 705 p->setPen(g.buttonText());
643 for (i=0; i<n; i++) { 706 for (i=0; i<n; i++) {
644 p->drawLine(mx+3*i, y+4, mx + 3*i, y+h-5); 707 p->drawLine(mx+3*i, y+4, mx + 3*i, y+h-5);
645 } 708 }
646 } 709 }
647 } 710 }
648} 711}
649 712
650int FlatStyle::sliderLength() const 713int FlatStyle::sliderLength() const
651{ 714{
652 return 12; 715 return 12;
653} 716}
654 717
655void FlatStyle::drawSlider( QPainter *p, int x, int y, int w, int h, 718void FlatStyle::drawSlider( QPainter *p, int x, int y, int w, int h,
656 const QColorGroup &g, Orientation o, bool tickAbove, bool tickBelow ) 719 const QColorGroup &g, Orientation o, bool tickAbove, bool tickBelow )
657{ 720{
658 int a = tickAbove ? 3 : 0; 721 int a = tickAbove ? 3 : 0;
659 int b = tickBelow ? 3 : 0; 722 int b = tickBelow ? 3 : 0;
660 723
661 p->setPen( g.foreground() ); 724 p->setPen( g.foreground() );
662 p->setBrush( g.button() ); 725 p->setBrush( g.button() );
663 if ( o == Horizontal ) { 726 if ( o == Horizontal ) {
664 p->drawRect( x, y+a, w, h-a-b ); 727 p->drawRect( x, y+a, w, h-a-b );
665 int xp = x + w/2; 728 int xp = x + w/2;
666 p->drawLine( xp-1, y+a+3, xp-1, y+h-b-4 ); 729 p->drawLine( xp-1, y+a+3, xp-1, y+h-b-4 );
667 p->drawLine( xp, y+a+3, xp, y+h-b-4 ); 730 p->drawLine( xp, y+a+3, xp, y+h-b-4 );
668 } else { 731 } else {
669 p->drawRect( x+a, y, w-a-b, h ); 732 p->drawRect( x+a, y, w-a-b, h );
670 int yp = y + h/2; 733 int yp = y + h/2;
671 p->drawLine( x+a+3, yp-1, x+w-b-4, yp-1 ); 734 p->drawLine( x+a+3, yp-1, x+w-b-4, yp-1 );
672 p->drawLine( x+a+3, yp, x+w-b-4, yp ); 735 p->drawLine( x+a+3, yp, x+w-b-4, yp );
673 } 736 }
674} 737}
675 738
676void FlatStyle::drawSliderMask ( QPainter * p, int x, int y, int w, int h, 739void FlatStyle::drawSliderMask ( QPainter * p, int x, int y, int w, int h,
677 Orientation o, bool tickAbove, bool tickBelow ) 740 Orientation o, bool tickAbove, bool tickBelow )
678{ 741{
679 int a = tickAbove ? 3 : 0; 742 int a = tickAbove ? 3 : 0;
680 int b = tickBelow ? 3 : 0; 743 int b = tickBelow ? 3 : 0;
681 if ( o == Horizontal ) 744 if ( o == Horizontal )
682 p->fillRect( x, y+a, w, h-a-b, color1 ); 745 p->fillRect( x, y+a, w, h-a-b, color1 );
683 else 746 else
684 p->fillRect( x+a, y, w-a-b, h, color1 ); 747 p->fillRect( x+a, y, w-a-b, h, color1 );
685} 748}
686 749
687/*!\reimp 750/*!\reimp
688 */ 751 */
689void FlatStyle::drawSliderGrooveMask( QPainter *p, 752void FlatStyle::drawSliderGrooveMask( QPainter *p,
690 int x, int y, int w, int h, 753 int x, int y, int w, int h,
691 const QColorGroup& , QCOORD c, 754 const QColorGroup& , QCOORD c,
692 Orientation orient ) 755 Orientation orient )
693{ 756{
694 if ( orient == Horizontal ) 757 if ( orient == Horizontal )
695 p->fillRect( x, y + c - 2, w, 4, color1 ); 758 p->fillRect( x, y + c - 2, w, 4, color1 );
696 else 759 else
697 p->fillRect( x + c - 2, y, 4, h, color1 ); 760 p->fillRect( x + c - 2, y, 4, h, color1 );
698} 761}
699 762
700void FlatStyle::drawSliderGroove( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, QCOORD c, Orientation orient ) 763void FlatStyle::drawSliderGroove( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, QCOORD c, Orientation orient )
701{ 764{
702 if ( orient == Horizontal ) 765 if ( orient == Horizontal )
703 p->fillRect( x, y + c - 2, w, 4, g.foreground() ); 766 p->fillRect( x, y + c - 2, w, 4, g.foreground() );
704 else 767 else
705 p->fillRect( x + c - 2, y, 4, h, g.foreground() ); 768 p->fillRect( x + c - 2, y, 4, h, g.foreground() );
706} 769}
707 770
708void FlatStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected ) 771void FlatStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected )
709{ 772{
710 QRect r( t->rect() ); 773 QRect r( t->rect() );
711 if ( tb->shape() == QTabBar::RoundedAbove ) { 774 if ( tb->shape() == QTabBar::RoundedAbove ) {
712 p->setPen( tb->colorGroup().foreground() ); 775 p->setPen( tb->colorGroup().foreground() );
713 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); 776 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
714 if ( r.left() == 0 ) 777 if ( r.left() == 0 )
715 p->drawPoint( tb->rect().bottomLeft() ); 778 p->drawPoint( tb->rect().bottomLeft() );
716 else 779 else
717 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); 780 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
718 781
719 if ( selected ) { 782 if ( selected ) {
720 p->setPen( tb->colorGroup().background() ); 783 p->setPen( tb->colorGroup().background() );
721 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); 784 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
722 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2), 785 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2),
723 tb->colorGroup().brush( QColorGroup::Background )); 786 tb->colorGroup().brush( QColorGroup::Background ));
724 } else { 787 } else {
725 r.setRect( r.left() + 2, r.top() + 2, 788 r.setRect( r.left() + 2, r.top() + 2,
726 r.width() - 4, r.height() - 2 ); 789 r.width() - 4, r.height() - 2 );
727 p->setPen( tb->colorGroup().button() ); 790 p->setPen( tb->colorGroup().button() );
728 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); 791 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
729 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3), 792 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3),
730 tb->colorGroup().brush( QColorGroup::Button )); 793 tb->colorGroup().brush( QColorGroup::Button ));
731 } 794 }
732 795
733 p->setPen( tb->colorGroup().foreground() ); 796 p->setPen( tb->colorGroup().foreground() );
734 p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 ); 797 p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 );
735 p->drawPoint( r.left()+1, r.top() + 1 ); 798 p->drawPoint( r.left()+1, r.top() + 1 );
736 p->drawLine( r.left()+2, r.top(), 799 p->drawLine( r.left()+2, r.top(),
737 r.right() - 2, r.top() ); 800 r.right() - 2, r.top() );
738 801
739 p->drawPoint( r.right() - 1, r.top() + 1 ); 802 p->drawPoint( r.right() - 1, r.top() + 1 );
740 p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1); 803 p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1);
741 } else if ( tb->shape() == QTabBar::RoundedBelow ) { 804 } else if ( tb->shape() == QTabBar::RoundedBelow ) {
742 if ( selected ) { 805 if ( selected ) {
743 p->setPen( tb->colorGroup().background() ); 806 p->setPen( tb->colorGroup().background() );
744 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); 807 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
745 p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2), 808 p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2),
746 tb->palette().normal().brush( QColorGroup::Background )); 809 tb->palette().normal().brush( QColorGroup::Background ));
747 } else { 810 } else {
748 p->setPen( tb->colorGroup().foreground() ); 811 p->setPen( tb->colorGroup().foreground() );
749 p->drawLine( r.left(), r.top(), 812 p->drawLine( r.left(), r.top(),
750 r.right(), r.top() ); 813 r.right(), r.top() );
751 r.setRect( r.left() + 2, r.top(), 814 r.setRect( r.left() + 2, r.top(),
752 r.width() - 4, r.height() - 2 ); 815 r.width() - 4, r.height() - 2 );
753 p->setPen( tb->colorGroup().button() ); 816 p->setPen( tb->colorGroup().button() );
754 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); 817 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
755 p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3), 818 p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3),
756 tb->palette().normal().brush( QColorGroup::Button )); 819 tb->palette().normal().brush( QColorGroup::Button ));
757 } 820 }
758 821
759 p->setPen( tb->colorGroup().foreground() ); 822 p->setPen( tb->colorGroup().foreground() );
760 p->drawLine( r.right(), r.top(), 823 p->drawLine( r.right(), r.top(),
761 r.right(), r.bottom() - 2 ); 824 r.right(), r.bottom() - 2 );
762 p->drawPoint( r.right() - 1, r.bottom() - 1 ); 825 p->drawPoint( r.right() - 1, r.bottom() - 1 );
763 p->drawLine( r.right() - 2, r.bottom(), 826 p->drawLine( r.right() - 2, r.bottom(),
764 r.left() + 2, r.bottom() ); 827 r.left() + 2, r.bottom() );
765 828
766 p->drawLine( r.left(), r.top()+1, 829 p->drawLine( r.left(), r.top()+1,
767 r.left(), r.bottom() - 2 ); 830 r.left(), r.bottom() - 2 );
768 p->drawPoint( r.left() + 1, r.bottom() - 1 ); 831 p->drawPoint( r.left() + 1, r.bottom() - 1 );
769 if ( r.left() == 0 ) 832 if ( r.left() == 0 )
770 p->drawPoint( tb->rect().topLeft() ); 833 p->drawPoint( tb->rect().topLeft() );
771 834
772 } else { 835 } else {
773 QCommonStyle::drawTab( p, tb, t, selected ); 836 QCommonStyle::drawTab( p, tb, t, selected );
774 } 837 }
775} 838}
776 839
777 static const int motifItemFrame = 0;// menu item frame width 840 static const int motifItemFrame = 0;// menu item frame width
778 static const int motifSepHeight = 2;// separator item height 841 static const int motifSepHeight = 2;// separator item height
779 static const int motifItemHMargin = 1;// menu item hor text margin 842 static const int motifItemHMargin = 1;// menu item hor text margin
780 static const int motifItemVMargin = 2;// menu item ver text margin 843 static const int motifItemVMargin = 2;// menu item ver text margin
781 static const int motifArrowHMargin = 0;// arrow horizontal margin 844 static const int motifArrowHMargin = 0;// arrow horizontal margin
782 static const int motifTabSpacing = 12;// space between text and tab 845 static const int motifTabSpacing = 12;// space between text and tab
783 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark 846 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark
784 static const int windowsRightBorder= 8; // right border on windows 847 static const int windowsRightBorder= 8; // right border on windows
785static const int windowsCheckMarkWidth = 2; // checkmarks width on windows 848static const int windowsCheckMarkWidth = 2; // checkmarks width on windows
786 849
850void FlatStyle::polishPopupMenu ( QPopupMenu *m )
851{
852 QWindowsStyle::polishPopupMenu( m );
853 m->setLineWidth( 1 );
854}
855
787/*! \reimp 856/*! \reimp
788*/ 857*/
789int FlatStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ ) 858int FlatStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ )
790{ 859{
791#ifndef QT_NO_MENUDATA 860#ifndef QT_NO_MENUDATA
792 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm 861 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm
793 862
794 if ( mi->isSeparator() ) 863 if ( mi->isSeparator() )
795 return 10; // arbitrary 864 return 10; // arbitrary
796 else if ( mi->pixmap() ) 865 else if ( mi->pixmap() )
797 w += mi->pixmap()->width();// pixmap only 866 w += mi->pixmap()->width();// pixmap only
798 867
799 if ( !mi->text().isNull() ) { 868 if ( !mi->text().isNull() ) {
800 if ( mi->text().find('\t') >= 0 )// string contains tab 869 if ( mi->text().find('\t') >= 0 )// string contains tab
801 w += motifTabSpacing; 870 w += motifTabSpacing;
802 } 871 }
803 872
804 if ( maxpmw ) { // we have iconsets 873 if ( maxpmw ) { // we have iconsets
805 w += maxpmw; 874 w += maxpmw;
806 w += 6; // add a little extra border around the iconset 875 w += 6; // add a little extra border around the iconset
807 } 876 }
808 877
809 if ( checkable && maxpmw < windowsCheckMarkWidth ) { 878 if ( checkable && maxpmw < windowsCheckMarkWidth ) {
810 w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks 879 w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks
811 } 880 }
812 881
813 if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks) 882 if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks)
814 w += motifCheckMarkHMargin; // add space to separate the columns 883 w += motifCheckMarkHMargin; // add space to separate the columns
815 884
816 w += windowsRightBorder; // windows has a strange wide border on the right side 885 w += windowsRightBorder; // windows has a strange wide border on the right side
817 886
818 return w; 887 return w;
819#endif 888#endif
820} 889}
821 890
822/*! \reimp 891/*! \reimp
823*/ 892*/
824int FlatStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm ) 893int FlatStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm )
825{ 894{
826#ifndef QT_NO_MENUDATA 895#ifndef QT_NO_MENUDATA
827 int h = 0; 896 int h = 0;
828 if ( mi->isSeparator() ) // separator height 897 if ( mi->isSeparator() ) // separator height
829 h = motifSepHeight; 898 h = motifSepHeight;
830 else if ( mi->pixmap() ) // pixmap height 899 else if ( mi->pixmap() ) // pixmap height
831 h = mi->pixmap()->height() + 2*motifItemFrame; 900 h = mi->pixmap()->height() + 2*motifItemFrame;
832 else // text height 901 else // text height
833 h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame - 1; 902 h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame - 1;
834 903
835 if ( !mi->isSeparator() && mi->iconSet() != 0 ) { 904 if ( !mi->isSeparator() && mi->iconSet() != 0 ) {
836 h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame ); 905 h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame );
837 } 906 }
838 if ( mi->custom() ) 907 if ( mi->custom() )
839 h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1; 908 h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1;
840 return h; 909 return h;
841#endif 910#endif
842} 911}
843 912
844void FlatStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, 913void FlatStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
845 const QPalette& pal, 914 const QPalette& pal,
846 bool act, bool enabled, int x, int y, int w, int h) 915 bool act, bool enabled, int x, int y, int w, int h)
847{ 916{
848#ifndef QT_NO_MENUDATA 917#ifndef QT_NO_MENUDATA
849 const QColorGroup & g = pal.active(); 918 const QColorGroup & g = pal.active();
850 bool dis = !enabled; 919 bool dis = !enabled;
851 QColorGroup itemg = dis ? pal.disabled() : pal.active(); 920 QColorGroup itemg = dis ? pal.disabled() : pal.active();
852 921
853 if ( checkable ) 922 if ( checkable )
854 maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks 923 maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks
855 924
856 int checkcol = maxpmw; 925 int checkcol = maxpmw;
857 926
858 if ( mi && mi->isSeparator() ) { // draw separator 927 if ( mi && mi->isSeparator() ) { // draw separator
859 p->setPen( g.dark() ); 928 p->setPen( g.dark() );
860 p->drawLine( x, y, x+w, y ); 929 p->drawLine( x, y, x+w, y );
861 return; 930 return;
862 } 931 }
863 932
864 QBrush fill = act? g.brush( QColorGroup::Highlight ) : 933 QBrush fill = act? g.brush( QColorGroup::Highlight ) :
865 g.brush( QColorGroup::Button ); 934 g.brush( QColorGroup::Button );
866 p->fillRect( x, y, w, h, fill); 935 p->fillRect( x, y, w, h, fill);
867 936
868 if ( !mi ) 937 if ( !mi )
869 return; 938 return;
870 939
871 if ( mi->isChecked() ) { 940 if ( mi->isChecked() ) {
872 if ( act && !dis ) { 941 if ( act && !dis ) {
873 qDrawShadePanel( p, x, y, checkcol, h, 942 qDrawShadePanel( p, x, y, checkcol, h,
874 g, TRUE, 1, &g.brush( QColorGroup::Button ) ); 943 g, TRUE, 1, &g.brush( QColorGroup::Button ) );
875 } else { 944 } else {
876 qDrawShadePanel( p, x, y, checkcol, h, 945 qDrawShadePanel( p, x, y, checkcol, h,
877 g, TRUE, 1, &g.brush( QColorGroup::Midlight ) ); 946 g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );
878 } 947 }
879 } else if ( !act ) { 948 } else if ( !act ) {
880 p->fillRect(x, y, checkcol , h, 949 p->fillRect(x, y, checkcol , h,
881 g.brush( QColorGroup::Button )); 950 g.brush( QColorGroup::Button ));
882 } 951 }
883 952
884 if ( mi->iconSet() ) { // draw iconset 953 if ( mi->iconSet() ) { // draw iconset
885 QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal; 954 QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal;
886 if (act && !dis ) 955 if (act && !dis )
887 mode = QIconSet::Active; 956 mode = QIconSet::Active;
888 QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode ); 957 QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode );
889 int pixw = pixmap.width(); 958 int pixw = pixmap.width();
890 int pixh = pixmap.height(); 959 int pixh = pixmap.height();
891 if ( act && !dis ) { 960 if ( act && !dis ) {
892 if ( !mi->isChecked() ) 961 if ( !mi->isChecked() )
893 qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) ); 962 qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) );
894 } 963 }
895 QRect cr( x, y, checkcol, h ); 964 QRect cr( x, y, checkcol, h );
896 QRect pmr( 0, 0, pixw, pixh ); 965 QRect pmr( 0, 0, pixw, pixh );
897 pmr.moveCenter( cr.center() ); 966 pmr.moveCenter( cr.center() );
898 p->setPen( itemg.text() ); 967 p->setPen( itemg.text() );
899 p->drawPixmap( pmr.topLeft(), pixmap ); 968 p->drawPixmap( pmr.topLeft(), pixmap );
900 969
901 QBrush fill = act? g.brush( QColorGroup::Highlight ) : 970 QBrush fill = act? g.brush( QColorGroup::Highlight ) :
902 g.brush( QColorGroup::Button ); 971 g.brush( QColorGroup::Button );
903 p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill); 972 p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);
904 } else if ( checkable ) {// just "checking"... 973 } else if ( checkable ) {// just "checking"...
905 int mw = checkcol + motifItemFrame; 974 int mw = checkcol + motifItemFrame;
906 int mh = h - 2*motifItemFrame; 975 int mh = h - 2*motifItemFrame;
907 if ( mi->isChecked() ) { 976 if ( mi->isChecked() ) {
908 drawCheckMark( p, x + motifItemFrame + 2, 977 drawCheckMark( p, x + motifItemFrame + 2,
909 y+motifItemFrame, mw, mh, itemg, act, dis ); 978 y+motifItemFrame, mw, mh, itemg, act, dis );
910 } 979 }
911 } 980 }
912 981
913 p->setPen( act ? g.highlightedText() : g.buttonText() ); 982 p->setPen( act ? g.highlightedText() : g.buttonText() );
914 983
915 QColor discol; 984 QColor discol;
916 if ( dis ) { 985 if ( dis ) {
917 discol = itemg.text(); 986 discol = itemg.text();
918 p->setPen( discol ); 987 p->setPen( discol );
919 } 988 }
920 989
921 int xm = motifItemFrame + checkcol + motifItemHMargin; 990 int xm = motifItemFrame + checkcol + motifItemHMargin;
922 991
923 if ( mi->custom() ) { 992 if ( mi->custom() ) {
924 int m = motifItemVMargin; 993 int m = motifItemVMargin;
925 p->save(); 994 p->save();
926 if ( dis && !act ) { 995 if ( dis && !act ) {
927 p->setPen( g.light() ); 996 p->setPen( g.light() );
928 mi->custom()->paint( p, itemg, act, enabled, 997 mi->custom()->paint( p, itemg, act, enabled,
929 x+xm+1, y+m+1, w-xm-tab+1, h-2*m ); 998 x+xm+1, y+m+1, w-xm-tab+1, h-2*m );
930 p->setPen( discol ); 999 p->setPen( discol );
931 } 1000 }
932 mi->custom()->paint( p, itemg, act, enabled, 1001 mi->custom()->paint( p, itemg, act, enabled,
933 x+xm, y+m, w-xm-tab+1, h-2*m ); 1002 x+xm, y+m, w-xm-tab+1, h-2*m );
934 p->restore(); 1003 p->restore();
935 } 1004 }
936 QString s = mi->text(); 1005 QString s = mi->text();
937 if ( !s.isNull() ) { // draw text 1006 if ( !s.isNull() ) { // draw text
938 int t = s.find( '\t' ); 1007 int t = s.find( '\t' );
939 int m = motifItemVMargin; 1008 int m = motifItemVMargin;
940 const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine; 1009 const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine;
941 if ( t >= 0 ) { // draw tab text 1010 if ( t >= 0 ) { // draw tab text
942 if ( dis && !act ) { 1011 if ( dis && !act ) {
943 p->setPen( g.light() ); 1012 p->setPen( g.light() );
944 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1, 1013 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1,
945 y+m+1, tab, h-2*m, text_flags, s.mid( t+1 )); 1014 y+m+1, tab, h-2*m, text_flags, s.mid( t+1 ));
946 p->setPen( discol ); 1015 p->setPen( discol );
947 } 1016 }
948 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame, 1017 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame,
949 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) ); 1018 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) );
950 } 1019 }
951 if ( dis && !act ) 1020 if ( dis && !act )
952 p->setPen( discol ); 1021 p->setPen( discol );
953 p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t ); 1022 p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t );
954 } else if ( mi->pixmap() ) { // draw pixmap 1023 } else if ( mi->pixmap() ) { // draw pixmap
955 QPixmap *pixmap = mi->pixmap(); 1024 QPixmap *pixmap = mi->pixmap();
956 if ( pixmap->depth() == 1 ) 1025 if ( pixmap->depth() == 1 )
957 p->setBackgroundMode( OpaqueMode ); 1026 p->setBackgroundMode( OpaqueMode );
958 p->drawPixmap( x+xm, y+motifItemFrame, *pixmap ); 1027 p->drawPixmap( x+xm, y+motifItemFrame, *pixmap );
959 if ( pixmap->depth() == 1 ) 1028 if ( pixmap->depth() == 1 )
960 p->setBackgroundMode( TransparentMode ); 1029 p->setBackgroundMode( TransparentMode );
961 } 1030 }
962 if ( mi->popup() ) { // draw sub menu arrow 1031 if ( mi->popup() ) { // draw sub menu arrow
963 int dim = (h-2*motifItemFrame) / 2; 1032 int dim = (h-2*motifItemFrame) / 2;
964 if ( act ) { 1033 if ( act ) {
965 if ( !dis ) 1034 if ( !dis )
966 discol = white; 1035 discol = white;
967 QColorGroup g2( discol, g.highlight(), 1036 QColorGroup g2( discol, g.highlight(),
968 white, white, 1037 white, white,
969 dis ? discol : white, 1038 dis ? discol : white,
970 discol, white ); 1039 discol, white );
971 drawArrow( p, RightArrow, FALSE, 1040 drawArrow( p, RightArrow, FALSE,
972 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, 1041 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
973 dim, dim, g2, TRUE ); 1042 dim, dim, g2, TRUE );
974 } else { 1043 } else {
975 drawArrow( p, RightArrow, 1044 drawArrow( p, RightArrow,
976 FALSE, 1045 FALSE,
977 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, 1046 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
978 dim, dim, g, mi->isEnabled() ); 1047 dim, dim, g, mi->isEnabled() );
979 } 1048 }
980 } 1049 }
981#endif 1050#endif
982} 1051}
983 1052
984void FlatStyle::getButtonShift( int &x, int &y ) 1053void FlatStyle::getButtonShift( int &x, int &y )
985{ 1054{
986 x = 0; y = 0; 1055 x = 0; y = 0;
987} 1056}
988 1057
989//=========================================================================== 1058//===========================================================================
990 1059
991FlatStyleImpl::FlatStyleImpl() 1060FlatStyleImpl::FlatStyleImpl()
992 : flat(0), ref(0) 1061 : flat(0), ref(0)
993{ 1062{
994} 1063}
995 1064
996FlatStyleImpl::~FlatStyleImpl() 1065FlatStyleImpl::~FlatStyleImpl()
997{ 1066{
998 // We do not delete the style because Qt does that when a new style 1067 // We do not delete the style because Qt does that when a new style
999 // is set. 1068 // is set.
1000} 1069}
1001 1070
1002QStyle *FlatStyleImpl::style() 1071QStyle *FlatStyleImpl::style()
1003{ 1072{
1004 if ( !flat ) 1073 if ( !flat )
1005 flat = new FlatStyle(); 1074 flat = new FlatStyle();
1006 return flat; 1075 return flat;
1007} 1076}
1008 1077
1009QString FlatStyleImpl::name() const 1078QString FlatStyleImpl::name() const
1010{ 1079{
1011 return QString("Flat"); 1080 return qApp->translate("FlatStyle", "Flat", "Name of the style Flat");
1012} 1081}
1013 1082
1014QRESULT FlatStyleImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ) 1083QRESULT FlatStyleImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
1015{ 1084{
1016 *iface = 0; 1085 *iface = 0;
1017 if ( uuid == IID_QUnknown ) 1086 if ( uuid == IID_QUnknown )
1018 *iface = this; 1087 *iface = this;
1019 else if ( uuid == IID_Style ) 1088 else if ( uuid == IID_Style )
1020 *iface = this; 1089 *iface = this;
1090 else
1091 return QS_FALSE;
1021 1092
1022 if ( *iface ) 1093 (*iface)->addRef();
1023 (*iface)->addRef();
1024 return QS_OK; 1094 return QS_OK;
1025} 1095}
1026 1096
1027Q_EXPORT_INTERFACE() 1097Q_EXPORT_INTERFACE()
1028{ 1098{
1029 Q_CREATE_INSTANCE( FlatStyleImpl ) 1099 Q_CREATE_INSTANCE( FlatStyleImpl )
1030} 1100}
1031 1101
1032#include "flat.moc" 1102#include "flat.moc"
diff --git a/noncore/styles/flat/flat.h b/noncore/styles/flat/flat.h
index e446800..ebea95b 100644
--- a/noncore/styles/flat/flat.h
+++ b/noncore/styles/flat/flat.h
@@ -1,114 +1,118 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#ifndef FLATSTYLE_H 21#ifndef FLATSTYLE_H
22#define FLATSTYLE_H 22#define FLATSTYLE_H
23 23
24#include <qcolor.h>
24#include <qwindowsstyle.h> 25#include <qwindowsstyle.h>
25#include <qpe/styleinterface.h> 26#include <qpe/styleinterface.h>
26 27
27class FlatStylePrivate; 28class FlatStylePrivate;
28 29
29class Q_EXPORT FlatStyle : public QWindowsStyle 30class FlatStyle : public QWindowsStyle
30{ 31{
31public: 32public:
32 FlatStyle(); 33 FlatStyle();
33 virtual ~FlatStyle(); 34 virtual ~FlatStyle();
34 virtual void polish( QPalette &p ); 35 virtual void polish( QPalette &p );
35 virtual void polish( QWidget *w ); 36 virtual void polish( QWidget *w );
36 virtual void unPolish( QWidget *w ); 37 virtual void unPolish( QWidget *w );
37 38
38 int defaultFrameWidth () const; 39 int defaultFrameWidth () const;
39 void drawItem( QPainter *p, int x, int y, int w, int h, 40 void drawItem( QPainter *p, int x, int y, int w, int h,
40 int flags, const QColorGroup &g, bool enabled, 41 int flags, const QColorGroup &g, bool enabled,
41 const QPixmap *pixmap, const QString& text, int len, const QColor* penColor ); 42 const QPixmap *pixmap, const QString& text, int len, const QColor* penColor );
42 void drawPanel ( QPainter * p, int x, int y, int w, int h, 43 void drawPanel ( QPainter * p, int x, int y, int w, int h,
43 const QColorGroup &, bool sunken=FALSE, int lineWidth = 1, const QBrush * fill = 0 ); 44 const QColorGroup &, bool sunken=FALSE, int lineWidth = 1, const QBrush * fill = 0 );
44 void drawButton( QPainter *p, int x, int y, int w, int h, 45 void drawButton( QPainter *p, int x, int y, int w, int h,
45 const QColorGroup &g, bool sunken, const QBrush* fill ); 46 const QColorGroup &g, bool sunken, const QBrush* fill );
46 void drawButtonMask ( QPainter * p, int x, int y, int w, int h ); 47 void drawButtonMask ( QPainter * p, int x, int y, int w, int h );
47 void drawBevelButton( QPainter *p, int x, int y, int w, int h, 48 void drawBevelButton( QPainter *p, int x, int y, int w, int h,
48 const QColorGroup &g, bool sunken=FALSE, const QBrush* fill=0 ); 49 const QColorGroup &g, bool sunken=FALSE, const QBrush* fill=0 );
49 void drawToolButton( QPainter *p, int x, int y, int w, int h, 50 void drawToolButton( QPainter *p, int x, int y, int w, int h,
50 const QColorGroup &g, bool sunken=FALSE, const QBrush* fill=0 ); 51 const QColorGroup &g, bool sunken=FALSE, const QBrush* fill=0 );
51 void drawPushButton( QPushButton *btn, QPainter *p ); 52 void drawPushButton( QPushButton *btn, QPainter *p );
52 void drawPushButtonLabel( QPushButton *btn, QPainter *p ); 53 void drawPushButtonLabel( QPushButton *btn, QPainter *p );
53 QRect comboButtonRect( int x, int y, int w, int h); 54 QRect comboButtonRect( int x, int y, int w, int h);
54 QRect comboButtonFocusRect( int x, int y, int w, int h); 55 QRect comboButtonFocusRect( int x, int y, int w, int h);
55 void drawComboButton( QPainter *p, int x, int y, int w, int h, 56 void drawComboButton( QPainter *p, int x, int y, int w, int h,
56 const QColorGroup &g, bool sunken, bool, bool enabled, 57 const QColorGroup &g, bool sunken, bool, bool enabled,
57 const QBrush *fill ); 58 const QBrush *fill );
58 void drawExclusiveIndicator ( QPainter * p, int x, int y, int w, int h, 59 void drawExclusiveIndicator ( QPainter * p, int x, int y, int w, int h,
59 const QColorGroup & g, bool on, bool down = FALSE, bool enabled = TRUE ); 60 const QColorGroup & g, bool on, bool down = FALSE, bool enabled = TRUE );
60 void drawIndicator ( QPainter * p, int x, int y, int w, int h, 61 void drawIndicator ( QPainter * p, int x, int y, int w, int h,
61 const QColorGroup & g, int state, bool down = FALSE, bool enabled = TRUE ); 62 const QColorGroup & g, int state, bool down = FALSE, bool enabled = TRUE );
62 void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int&); 63 void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int&);
63 void drawScrollBarControls( QPainter*, const QScrollBar*, int sliderStart, uint controls, uint activeControl ); 64 void drawScrollBarControls( QPainter*, const QScrollBar*, int sliderStart, uint controls, uint activeControl );
64 ScrollControl scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p ); 65 ScrollControl scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p );
65 void drawRiffles( QPainter* p, int x, int y, int w, int h, 66 void drawRiffles( QPainter* p, int x, int y, int w, int h,
66 const QColorGroup &g, bool horizontal ); 67 const QColorGroup &g, bool horizontal );
67 int sliderLength() const; 68 int sliderLength() const;
68 void drawSlider( QPainter *p, int x, int y, int w, int h, 69 void drawSlider( QPainter *p, int x, int y, int w, int h,
69 const QColorGroup &g, Orientation, bool tickAbove, bool tickBelow ); 70 const QColorGroup &g, Orientation, bool tickAbove, bool tickBelow );
70 void drawSliderMask( QPainter *p, int x, int y, int w, int h, 71 void drawSliderMask( QPainter *p, int x, int y, int w, int h,
71 Orientation, bool tickAbove, bool tickBelow ); 72 Orientation, bool tickAbove, bool tickBelow );
72 void drawSliderGrooveMask( QPainter *p, int x, int y, int w, int h, 73 void drawSliderGrooveMask( QPainter *p, int x, int y, int w, int h,
73 const QColorGroup& , QCOORD c, Orientation orient ); 74 const QColorGroup& , QCOORD c, Orientation orient );
74 void drawSliderGroove ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, QCOORD c, Orientation ); 75 void drawSliderGroove ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, QCOORD c, Orientation );
75 void drawTab( QPainter *, const QTabBar *, QTab *, bool selected ); 76 void drawTab( QPainter *, const QTabBar *, QTab *, bool selected );
77 void polishPopupMenu ( QPopupMenu * );
76 int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& ); 78 int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& );
77 int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& ); 79 int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& );
78 void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, 80 void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
79 const QPalette& pal, 81 const QPalette& pal,
80 bool act, bool enabled, int x, int y, int w, int h); 82 bool act, bool enabled, int x, int y, int w, int h);
81 83
82 int buttonMargin() const; 84 int buttonMargin() const;
83 QSize scrollBarExtent() const; 85 QSize scrollBarExtent() const;
84 void getButtonShift( int &x, int &y ); 86 void getButtonShift( int &x, int &y );
85 87
86private: 88private:
87 FlatStylePrivate *d; 89 FlatStylePrivate *d;
88 bool revItem; 90 bool revItem;
91 bool fillBtnBorder;
92 QColor btnBg;
89 // Disabled copy constructor and operator= 93 // Disabled copy constructor and operator=
90#if defined(Q_DISABLE_COPY) 94#if defined(Q_DISABLE_COPY)
91 FlatStyle( const FlatStyle & ); 95 FlatStyle( const FlatStyle & );
92 FlatStyle& operator=( const FlatStyle & ); 96 FlatStyle& operator=( const FlatStyle & );
93#endif 97#endif
94}; 98};
95 99
96 100
97class FlatStyleImpl : public StyleInterface 101class FlatStyleImpl : public StyleInterface
98{ 102{
99public: 103public:
100 FlatStyleImpl(); 104 FlatStyleImpl();
101 virtual ~FlatStyleImpl(); 105 virtual ~FlatStyleImpl();
102 106
103 QRESULT queryInterface( const QUuid&, QUnknownInterface** ); 107 QRESULT queryInterface( const QUuid&, QUnknownInterface** );
104 Q_REFCOUNT 108 Q_REFCOUNT
105 109
106 virtual QStyle *style(); 110 virtual QStyle *style();
107 virtual QString name() const; 111 virtual QString name() const;
108 112
109private: 113private:
110 FlatStyle *flat; 114 FlatStyle *flat;
111 ulong ref; 115 ulong ref;
112}; 116};
113 117
114#endif // FLATSTYLE_H 118#endif // FLATSTYLE_H
diff --git a/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp b/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp
index 71dd7eb..73f8bb3 100644
--- a/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp
+++ b/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp
@@ -1,88 +1,89 @@
1#include "inputDialog.h" 1#include "inputDialog.h"
2 2
3#include <qapplication.h> 3#include <qapplication.h>
4 4
5#include <qlayout.h> 5#include <qlayout.h>
6#include <qcheckbox.h> 6#include <qcheckbox.h>
7#include <qlineedit.h> 7#include <qlineedit.h>
8#include <qvariant.h> 8#include <qvariant.h>
9#include <qpushbutton.h> 9#include <qpushbutton.h>
10#include <qwhatsthis.h> 10#include <qwhatsthis.h>
11#include <qlabel.h> 11#include <qlabel.h>
12#include <qlayout.h>
12#include <qpe/config.h> 13#include <qpe/config.h>
13#include <qstringlist.h> 14#include <qstringlist.h>
14#include <qmainwindow.h> 15#include <qmainwindow.h>
15#include "helpwindow.h" 16#include "helpwindow.h"
16 17
17#include <opie/oprocess.h> 18#include <opie/oprocess.h>
18 19
19#include <stdlib.h> 20#include <stdlib.h>
20// #include <sys/stat.h> 21// #include <sys/stat.h>
21// #include <unistd.h> 22// #include <unistd.h>
22 23
23InputDialog::InputDialog( ) 24InputDialog::InputDialog( )
24 : QMainWindow( 0x0, 0x0, WStyle_ContextHelp ) { 25 : QMainWindow( 0x0, 0x0, WStyle_ContextHelp ) {
25 setCaption( tr("Symbol Lookup")); 26 setCaption( tr("Symbol Lookup"));
26 27
27 QGridLayout *layout = new QGridLayout( this ); 28 QGridLayout *layout = new QGridLayout( this );
28 layout->setSpacing(6); 29 layout->setSpacing(6);
29 layout->setMargin( 2); 30 layout->setMargin( 2);
30 31
31 LineEdit1 = new QLineEdit( this, "LineEdit1" ); 32 LineEdit1 = new QLineEdit( this, "LineEdit1" );
32 LineEdit1->setFocus(); 33 LineEdit1->setFocus();
33 34
34 layout->addMultiCellWidget( LineEdit1, 0, 0, 0, 3); 35 layout->addMultiCellWidget( LineEdit1, 0, 0, 0, 3);
35 36
36 QLabel *label; 37 QLabel *label;
37 label = new QLabel(this); 38 label = new QLabel(this);
38 label->setText( tr("Enter something to lookup / search.")); 39 label->setText( tr("Enter something to lookup / search."));
39 label->setMaximumHeight(60); 40 label->setMaximumHeight(60);
40 layout->addMultiCellWidget( label, 1, 1, 0, 3); 41 layout->addMultiCellWidget( label, 1, 1, 0, 3);
41 42
42 connect(LineEdit1,SIGNAL(returnPressed()),this,SLOT(doLookup())); 43 connect(LineEdit1,SIGNAL(returnPressed()),this,SLOT(doLookup()));
43 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding ); 44 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding );
44 layout->addItem( spacer, 8, 0 ); 45 layout->addItem( spacer, 8, 0 );
45 46
46} 47}
47 48
48InputDialog::~InputDialog() { 49InputDialog::~InputDialog() {
49} 50}
50 51
51void InputDialog::doLookup() { 52void InputDialog::doLookup() {
52// http://finance.yahoo.com/l?m=&s=siemens&t= 53// http://finance.yahoo.com/l?m=&s=siemens&t=
53 54
54 QString url = "\"http://finance.yahoo.com/l?m=&s="+LineEdit1->text()+"\""; 55 QString url = "\"http://finance.yahoo.com/l?m=&s="+LineEdit1->text()+"\"";
55 QString tempHtml = "/tmp/stockticker.html"; 56 QString tempHtml = "/tmp/stockticker.html";
56 QString cmd = "wget -O "+tempHtml+" "+url; 57 QString cmd = "wget -O "+tempHtml+" "+url;
57 qDebug(cmd); 58 qDebug(cmd);
58 59
59 60
60/* 61/*
61 OProcess proc; 62 OProcess proc;
62 proc << "/usr/bin/wget"; 63 proc << "/usr/bin/wget";
63 proc<<"-O"<< tempHtml<< url; 64 proc<<"-O"<< tempHtml<< url;
64 65
65 connect( &proc, SIGNAL( processExited( OProcess *)),this, SLOT( showBrowser(OProcess *))); 66 connect( &proc, SIGNAL( processExited( OProcess *)),this, SLOT( showBrowser(OProcess *)));
66 proc.start( OProcess::NotifyOnExit); 67 proc.start( OProcess::NotifyOnExit);
67*/ 68*/
68 system(cmd.latin1()); 69 system(cmd.latin1());
69 HelpWindow *StockLookup = new HelpWindow( tempHtml,".",this, "SymbolLookup"); 70 HelpWindow *StockLookup = new HelpWindow( tempHtml,".",this, "SymbolLookup");
70 StockLookup->setCaption("Symbol"); 71 StockLookup->setCaption("Symbol");
71 StockLookup->showMaximized(); 72 StockLookup->showMaximized();
72 StockLookup->show(); 73 StockLookup->show();
73 LineEdit1->text(); 74 LineEdit1->text();
74 75
75 76
76} 77}
77 78
78void InputDialog::showBrowser(OProcess*) { 79void InputDialog::showBrowser(OProcess*) {
79 qDebug("BLAH"); 80 qDebug("BLAH");
80 QString tempHtml = "/tmp/stockticker.html"; 81 QString tempHtml = "/tmp/stockticker.html";
81 82
82 HelpWindow *StockLookup = new HelpWindow( tempHtml,".",this, "SymbolLookup"); 83 HelpWindow *StockLookup = new HelpWindow( tempHtml,".",this, "SymbolLookup");
83 StockLookup->setCaption("Symbol"); 84 StockLookup->setCaption("Symbol");
84 StockLookup->showMaximized(); 85 StockLookup->showMaximized();
85 StockLookup->show(); 86 StockLookup->show();
86 LineEdit1->text(); 87 LineEdit1->text();
87 88
88} 89}
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp
index d740b6f..915233a 100644
--- a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp
@@ -1,209 +1,209 @@
1/* 1/*
2 * stocktickeRconfig.cpp 2 * stocktickeRconfig.cpp
3 * 3 *
4 * copyright : (c) 2002 by ljp 4 * copyright : (c) 2002 by ljp
5 * email : llornkcor@handhelds.org 5 * email : llornkcor@handhelds.org
6 * 6 *
7 */ 7 */
8/*************************************************************************** 8/***************************************************************************
9 * * 9 * *
10 * This program is free software; you can redistribute it and/or modify * 10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by * 11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or * 12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. * 13 * (at your option) any later version. *
14 * * 14 * *
15 ***************************************************************************/ 15 ***************************************************************************/
16 16
17#include "stocktickerconfig.h" 17#include "stocktickerconfig.h"
18#include <opie/todayconfigwidget.h> 18#include <opie/todayconfigwidget.h>
19 19
20#include <qpe/config.h> 20#include <qpe/config.h>
21 21
22#include <qapplication.h> 22#include <qapplication.h>
23 23
24#include <qlayout.h> 24#include <qlayout.h>
25#include <qspinbox.h> 25#include <qspinbox.h>
26#include <qcheckbox.h> 26#include <qcheckbox.h>
27#include <qlineedit.h> 27#include <qlineedit.h>
28#include <qvariant.h> 28#include <qvariant.h>
29#include <qpushbutton.h> 29#include <qpushbutton.h>
30#include <qwhatsthis.h> 30#include <qwhatsthis.h>
31#include <qlabel.h> 31#include <qlabel.h>
32#include <qstringlist.h> 32#include <qstringlist.h>
33#include <qmainwindow.h> 33#include <qmainwindow.h>
34 34
35#include <stdlib.h> 35#include <stdlib.h>
36 36
37StocktickerPluginConfig::StocktickerPluginConfig( QWidget *parent, const char* name) 37StocktickerPluginConfig::StocktickerPluginConfig( QWidget *parent, const char* name)
38 : TodayConfigWidget(parent, name ) { 38 : TodayConfigWidget(parent, name ) {
39 39
40 QGridLayout *layout = new QGridLayout( this ); 40 QGridLayout *layout = new QGridLayout( this );
41 layout->setSpacing(2); 41 layout->setSpacing(2);
42 layout->setMargin( 2); 42 layout->setMargin( 2);
43 43
44 LineEdit1 = new QLineEdit( this, "LineEdit1" ); 44 LineEdit1 = new QLineEdit( this, "LineEdit1" );
45 LineEdit1->setFocus(); 45 LineEdit1->setFocus();
46// QWhatsThis::add( LineEdit1, tr("Enter the stock symbols you want to be shown here.")); 46// QWhatsThis::add( LineEdit1, tr("Enter the stock symbols you want to be shown here."));
47 47
48 layout->addMultiCellWidget( LineEdit1, 0, 0, 0, 4); 48 layout->addMultiCellWidget( LineEdit1, 0, 0, 0, 4);
49 49
50 Config cfg( "stockticker"); 50 Config cfg( "stockticker");
51 cfg.setGroup( "Symbols" ); 51 cfg.setGroup( "Symbols" );
52 QString symbollist; 52 QString symbollist;
53 symbollist = cfg.readEntry("Symbols", ""); 53 symbollist = cfg.readEntry("Symbols", "");
54 LineEdit1->setText(symbollist); 54 LineEdit1->setText(symbollist);
55 55
56 QLabel *label; 56 QLabel *label;
57 label = new QLabel(this); 57 label = new QLabel(this);
58 label->setText( tr("Enter stock symbols seperated\nby a space.")); 58 label->setText( tr("Enter stock symbols seperated\nby a space."));
59 label->setMaximumHeight(60); 59 label->setMaximumHeight(60);
60 layout->addMultiCellWidget( label, 1, 1, 0, 4); 60 layout->addMultiCellWidget( label, 1, 1, 0, 4);
61 61
62 cfg.setGroup( "Fields" ); 62 cfg.setGroup( "Fields" );
63 63
64 timeCheck= new QCheckBox ( "Time",this ); 64 timeCheck= new QCheckBox ( "Time",this );
65 timeCheck->setChecked( cfg.readBoolEntry("timeCheck",1)); 65 timeCheck->setChecked( cfg.readBoolEntry("timeCheck",1));
66 layout->addMultiCellWidget(timeCheck, 2, 2, 0, 0 ); 66 layout->addMultiCellWidget(timeCheck, 2, 2, 0, 0 );
67 QWhatsThis::add( timeCheck, tr("Toggles Time of current price field")); 67 QWhatsThis::add( timeCheck, tr("Toggles Time of current price field"));
68 68
69 dateCheck= new QCheckBox ( "Date", this ); 69 dateCheck= new QCheckBox ( "Date", this );
70 dateCheck->setChecked( cfg.readBoolEntry("dateCheck",1)); 70 dateCheck->setChecked( cfg.readBoolEntry("dateCheck",1));
71 layout->addMultiCellWidget( dateCheck, 2, 2, 1, 1 ); 71 layout->addMultiCellWidget( dateCheck, 2, 2, 1, 1 );
72 QWhatsThis::add(dateCheck, tr("Toggles date field")); 72 QWhatsThis::add(dateCheck, tr("Toggles date field"));
73 73
74 symbolCheck= new QCheckBox ( "Symbol", this ); 74 symbolCheck= new QCheckBox ( "Symbol", this );
75 symbolCheck->setChecked( cfg.readBoolEntry("symbolCheck",1)); 75 symbolCheck->setChecked( cfg.readBoolEntry("symbolCheck",1));
76 layout->addMultiCellWidget( symbolCheck, 2, 2, 2, 2 ); 76 layout->addMultiCellWidget( symbolCheck, 2, 2, 2, 2 );
77 QWhatsThis::add(symbolCheck, tr("Toggles Symbol field")); 77 QWhatsThis::add(symbolCheck, tr("Toggles Symbol field"));
78 78
79 nameCheck= new QCheckBox ( "Name", this ); 79 nameCheck= new QCheckBox ( "Name", this );
80 nameCheck->setChecked( cfg.readBoolEntry("nameCheck",1)); 80 nameCheck->setChecked( cfg.readBoolEntry("nameCheck",1));
81 layout->addMultiCellWidget( nameCheck, 3, 3, 0, 0 ); 81 layout->addMultiCellWidget( nameCheck, 3, 3, 0, 0 );
82 QWhatsThis::add(nameCheck, tr("Toggles Name of symbols owner field")); 82 QWhatsThis::add(nameCheck, tr("Toggles Name of symbols owner field"));
83 83
84 currentPriceCheck= new QCheckBox ( "Price", this ); 84 currentPriceCheck= new QCheckBox ( "Price", this );
85 currentPriceCheck->setChecked( cfg.readBoolEntry("currentPriceCheck",1)); 85 currentPriceCheck->setChecked( cfg.readBoolEntry("currentPriceCheck",1));
86 layout->addMultiCellWidget( currentPriceCheck, 3, 3, 1, 1 ); 86 layout->addMultiCellWidget( currentPriceCheck, 3, 3, 1, 1 );
87 QWhatsThis::add(currentPriceCheck, tr("Toggles current Price field")); 87 QWhatsThis::add(currentPriceCheck, tr("Toggles current Price field"));
88 88
89 lastPriceCheck= new QCheckBox ( "Last Price", this ); 89 lastPriceCheck= new QCheckBox ( "Last Price", this );
90 lastPriceCheck->setChecked( cfg.readBoolEntry("lastPriceCheck",1)); 90 lastPriceCheck->setChecked( cfg.readBoolEntry("lastPriceCheck",1));
91 layout->addMultiCellWidget(lastPriceCheck, 3, 3, 2, 2); 91 layout->addMultiCellWidget(lastPriceCheck, 3, 3, 2, 2);
92 QWhatsThis::add(lastPriceCheck, tr("Toggles last price field")); 92 QWhatsThis::add(lastPriceCheck, tr("Toggles last price field"));
93 93
94 openPriceCheck= new QCheckBox ( "Open Price", this); 94 openPriceCheck= new QCheckBox ( "Open Price", this);
95 openPriceCheck->setChecked( cfg.readBoolEntry("openPriceCheck",1)); 95 openPriceCheck->setChecked( cfg.readBoolEntry("openPriceCheck",1));
96 layout->addMultiCellWidget( openPriceCheck, 4, 4, 0, 0 ); 96 layout->addMultiCellWidget( openPriceCheck, 4, 4, 0, 0 );
97 QWhatsThis::add(openPriceCheck, tr("Toggles opening price field")); 97 QWhatsThis::add(openPriceCheck, tr("Toggles opening price field"));
98 98
99 minPriceCheck= new QCheckBox ( "Min Price", this ); 99 minPriceCheck= new QCheckBox ( "Min Price", this );
100 minPriceCheck->setChecked( cfg.readBoolEntry("minPriceCheck",1)); 100 minPriceCheck->setChecked( cfg.readBoolEntry("minPriceCheck",1));
101 layout->addMultiCellWidget( minPriceCheck, 4, 4, 1, 1); 101 layout->addMultiCellWidget( minPriceCheck, 4, 4, 1, 1);
102 QWhatsThis::add(minPriceCheck, tr("Toggles minimum daily price field")); 102 QWhatsThis::add(minPriceCheck, tr("Toggles minimum daily price field"));
103 103
104 maxPriceCheck= new QCheckBox ( "Max Price", this); 104 maxPriceCheck= new QCheckBox ( "Max Price", this);
105 maxPriceCheck->setChecked( cfg.readBoolEntry("maxPriceCheck",1)); 105 maxPriceCheck->setChecked( cfg.readBoolEntry("maxPriceCheck",1));
106 layout->addMultiCellWidget( maxPriceCheck, 4, 4, 2, 2 ); 106 layout->addMultiCellWidget( maxPriceCheck, 4, 4, 2, 2 );
107 QWhatsThis::add(maxPriceCheck, tr("Toggles maximum daily price field")); 107 QWhatsThis::add(maxPriceCheck, tr("Toggles maximum daily price field"));
108 108
109 variationCheck= new QCheckBox ( "Variation", this ); 109 variationCheck= new QCheckBox ( "Variation", this );
110 variationCheck->setChecked( cfg.readBoolEntry("variationCheck",1)); 110 variationCheck->setChecked( cfg.readBoolEntry("variationCheck",1));
111 layout->addMultiCellWidget( variationCheck, 5, 5, 0, 0 ); 111 layout->addMultiCellWidget( variationCheck, 5, 5, 0, 0 );
112 QWhatsThis::add(variationCheck, tr("Toggles daily variation of price field")); 112 QWhatsThis::add(variationCheck, tr("Toggles daily variation of price field"));
113 113
114 volumeCheck= new QCheckBox ( "Volume", this ); 114 volumeCheck= new QCheckBox ( "Volume", this );
115 volumeCheck->setChecked( cfg.readBoolEntry("volumeCheck",1)); 115 volumeCheck->setChecked( cfg.readBoolEntry("volumeCheck",1));
116 layout->addMultiCellWidget( volumeCheck , 5, 5, 1, 1); 116 layout->addMultiCellWidget( volumeCheck , 5, 5, 1, 1);
117 QWhatsThis::add(volumeCheck, tr("Toggles volume of trading field")); 117 QWhatsThis::add(volumeCheck, tr("Toggles volume of trading field"));
118 118
119 timerDelaySpin = new QSpinBox( this, "timer spin" ); 119 timerDelaySpin = new QSpinBox( this, "timer spin" );
120 QWhatsThis::add( timerDelaySpin , tr( "How often stocks prices should be looked up. In minutes" ) ); 120 QWhatsThis::add( timerDelaySpin , tr( "How often stocks prices should be looked up. In minutes" ) );
121 timerDelaySpin->setMaxValue( 60); 121 timerDelaySpin->setMaxValue( 60);
122 122
123 cfg.setGroup("Timer"); 123 cfg.setGroup("Timer");
124 timerDelaySpin->setValue( cfg.readNumEntry("Delay",0)); 124 timerDelaySpin->setValue( cfg.readNumEntry("Delay",15));
125 layout->addMultiCellWidget( timerDelaySpin , 6, 6, 0, 0); 125 layout->addMultiCellWidget( timerDelaySpin , 6, 6, 0, 0);
126 126
127 QLabel *label2; 127 QLabel *label2;
128 label2 = new QLabel(this); 128 label2 = new QLabel(this);
129 label2->setText( tr("Minutes between lookups.")); 129 label2->setText( tr("Minutes between lookups."));
130 label2->setMaximumHeight(60); 130 label2->setMaximumHeight(60);
131 layout->addMultiCellWidget( label2, 6, 6, 1, 2); 131 layout->addMultiCellWidget( label2, 6, 6, 1, 2);
132 132
133 scrollSpeed = new QSpinBox( this, "Scrollspin" ); 133 scrollSpeed = new QSpinBox( this, "Scrollspin" );
134 QWhatsThis::add( timerDelaySpin , tr( "Speed of scrolling action, in milliseconds" ) ); 134 QWhatsThis::add( timerDelaySpin , tr( "Speed of scrolling action, in milliseconds" ) );
135 scrollSpeed->setMaxValue( 1000); 135 scrollSpeed->setMaxValue( 1000);
136 scrollSpeed->setSteps(50,50); 136 scrollSpeed->setSteps(50,50);
137 cfg.setGroup("Timer"); 137 cfg.setGroup("Timer");
138 scrollSpeed->setValue( cfg.readNumEntry("ScrollSpeed",50)); 138 scrollSpeed->setValue( cfg.readNumEntry("ScrollSpeed",50));
139 layout->addMultiCellWidget( scrollSpeed , 7, 7, 0, 0); 139 layout->addMultiCellWidget( scrollSpeed , 7, 7, 0, 0);
140 140
141 QLabel *label3; 141 QLabel *label3;
142 label3 = new QLabel(this); 142 label3 = new QLabel(this);
143 label3->setText( tr("Scroll Speed, in milliseconds")); 143 label3->setText( tr("Scroll Speed, in milliseconds"));
144 label3->setMaximumHeight(60); 144 label3->setMaximumHeight(60);
145 layout->addMultiCellWidget( label3, 7, 7, 1, 2); 145 layout->addMultiCellWidget( label3, 7, 7, 1, 2);
146 146
147 scrollLength = new QSpinBox( this, "ScrollLength" ); 147 scrollLength = new QSpinBox( this, "ScrollLength" );
148 QWhatsThis::add( timerDelaySpin , tr( "Length of scrolling" ) ); 148 QWhatsThis::add( timerDelaySpin , tr( "Length of scrolling" ) );
149 scrollLength->setMaxValue( 10); 149 scrollLength->setMaxValue( 10);
150// scrollLength->setSteps(5,5); 150// scrollLength->setSteps(5,5);
151 cfg.setGroup("Timer"); 151 cfg.setGroup("Timer");
152 scrollLength->setValue( cfg.readNumEntry("ScrollLength",1)); 152 scrollLength->setValue( cfg.readNumEntry("ScrollLength",1));
153 layout->addMultiCellWidget( scrollLength , 8, 8, 0, 0); 153 layout->addMultiCellWidget( scrollLength , 8, 8, 0, 0);
154 154
155 QLabel *label4; 155 QLabel *label4;
156 label4 = new QLabel(this); 156 label4 = new QLabel(this);
157 label4->setText( tr("Scroll Length")); 157 label4->setText( tr("Scroll Length"));
158 label4->setMaximumHeight(60); 158 label4->setMaximumHeight(60);
159 layout->addMultiCellWidget( label4, 8, 8, 1, 2); 159 layout->addMultiCellWidget( label4, 8, 8, 1, 2);
160 160
161// lookupButton = new QPushButton(this, "LookupButton"); 161// lookupButton = new QPushButton(this, "LookupButton");
162// lookupButton->setText(tr("Symbol Lookup")); 162// lookupButton->setText(tr("Symbol Lookup"));
163// connect(lookupButton,SIGNAL(clicked()),SLOT( doLookup())); 163// connect(lookupButton,SIGNAL(clicked()),SLOT( doLookup()));
164// layout->addMultiCellWidget( lookupButton , 9, 9, 0, 0); 164// layout->addMultiCellWidget( lookupButton , 9, 9, 0, 0);
165 165
166 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding ); 166 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding );
167 layout->addItem( spacer, 9, 0 ); 167 layout->addItem( spacer, 9, 0 );
168 168
169} 169}
170 170
171 171
172void StocktickerPluginConfig::writeConfig() { 172void StocktickerPluginConfig::writeConfig() {
173 Config cfg( "stockticker"); 173 Config cfg( "stockticker");
174 cfg.setGroup( "Symbols" ); 174 cfg.setGroup( "Symbols" );
175 QString outText = text().upper(); 175 QString outText = text().upper();
176 outText.stripWhiteSpace(); 176 outText.stripWhiteSpace();
177 cfg.writeEntry("Symbols", outText ); 177 cfg.writeEntry("Symbols", outText );
178 cfg.setGroup( "Fields" ); 178 cfg.setGroup( "Fields" );
179 cfg.writeEntry("timeCheck",timeCheck->isChecked()); 179 cfg.writeEntry("timeCheck",timeCheck->isChecked());
180 cfg.writeEntry("dateCheck",dateCheck->isChecked()); 180 cfg.writeEntry("dateCheck",dateCheck->isChecked());
181 cfg.writeEntry("symbolCheck",symbolCheck->isChecked()); 181 cfg.writeEntry("symbolCheck",symbolCheck->isChecked());
182 cfg.writeEntry("nameCheck",nameCheck->isChecked()); 182 cfg.writeEntry("nameCheck",nameCheck->isChecked());
183 cfg.writeEntry("currentPriceCheck",currentPriceCheck->isChecked()); 183 cfg.writeEntry("currentPriceCheck",currentPriceCheck->isChecked());
184 cfg.writeEntry("lastPriceCheck",lastPriceCheck->isChecked()); 184 cfg.writeEntry("lastPriceCheck",lastPriceCheck->isChecked());
185 cfg.writeEntry("openPriceCheck",openPriceCheck->isChecked()); 185 cfg.writeEntry("openPriceCheck",openPriceCheck->isChecked());
186 cfg.writeEntry("minPriceCheck",minPriceCheck->isChecked()); 186 cfg.writeEntry("minPriceCheck",minPriceCheck->isChecked());
187 cfg.writeEntry("maxPriceCheck",maxPriceCheck->isChecked()); 187 cfg.writeEntry("maxPriceCheck",maxPriceCheck->isChecked());
188 cfg.writeEntry("variationCheck",variationCheck->isChecked()); 188 cfg.writeEntry("variationCheck",variationCheck->isChecked());
189 cfg.writeEntry("volumeCheck",volumeCheck->isChecked()); 189 cfg.writeEntry("volumeCheck",volumeCheck->isChecked());
190 190
191 cfg.setGroup("Timer"); 191 cfg.setGroup("Timer");
192 cfg.writeEntry("Delay",timerDelaySpin->value()); 192 cfg.writeEntry("Delay",timerDelaySpin->value());
193 cfg.writeEntry("ScrollLength",scrollLength->value()); 193 cfg.writeEntry("ScrollLength",scrollLength->value());
194 cfg.writeEntry("ScrollSpeed",scrollSpeed->value()); 194 cfg.writeEntry("ScrollSpeed",scrollSpeed->value());
195 195
196 cfg.write(); 196 cfg.write();
197} 197}
198 198
199StocktickerPluginConfig::~StocktickerPluginConfig() { 199StocktickerPluginConfig::~StocktickerPluginConfig() {
200} 200}
201 201
202QString StocktickerPluginConfig::text() const { 202QString StocktickerPluginConfig::text() const {
203 return LineEdit1->text(); 203 return LineEdit1->text();
204} 204}
205 205
206void StocktickerPluginConfig::doLookup() { 206void StocktickerPluginConfig::doLookup() {
207 207
208 system("stockticker"); 208 system("stockticker");
209} 209}
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h
index 2b67a8b..10f9678 100644
--- a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h
@@ -1,46 +1,46 @@
1/* 1/*
2 * stocktickerconfig.h 2 * stocktickerconfig.h
3 * 3 *
4 * copyright : (c) 2002 by LJP 4 * copyright : (c) 2002 by LJP
5 * email : llornkcor@handhelds.org 5 * email : llornkcor@handhelds.org
6 * 6 *
7 */ 7 */
8/*************************************************************************** 8/***************************************************************************
9 * * 9 * *
10 * This program is free software; you can redistribute it and/or modify * 10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by * 11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or * 12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. * 13 * (at your option) any later version. *
14 * * 14 * *
15 ***************************************************************************/ 15 ***************************************************************************/
16 16
17#ifndef STOCKTICKER_PLUGIN_CONFIG_H 17#ifndef STOCKTICKER_PLUGIN_CONFIG_H
18#define STOCKTICKER_PLUGIN_CONFIG_H 18#define STOCKTICKER_PLUGIN_CONFIG_H
19 19
20#include <qwidget.h> 20#include <qwidget.h>
21#include <opie/todayconfigwidget.h> 21#include <opie/todayconfigwidget.h>
22#include <qstring.h> 22#include <qstring.h>
23 23
24class QLineEdit; 24class QLineEdit;
25class QCheckBox; 25class QCheckBox;
26class QPushButton; 26class QPushButton;
27class QCheckBox; 27class QCheckBox;
28class QSpinBox; 28class QSpinBox;
29 29
30class StocktickerPluginConfig : public TodayConfigWidget { 30class StocktickerPluginConfig : public TodayConfigWidget {
31//Q_OBJECT 31 Q_OBJECT
32public: 32public:
33 StocktickerPluginConfig( QWidget *parent, const char *name ); 33 StocktickerPluginConfig( QWidget *parent, const char *name );
34 ~StocktickerPluginConfig(); 34 ~StocktickerPluginConfig();
35 QString text() const; 35 QString text() const;
36 void writeConfig(); 36 void writeConfig();
37private: 37private:
38 QLineEdit* LineEdit1; 38 QLineEdit* LineEdit1;
39 QCheckBox *timeCheck, *dateCheck, *symbolCheck, *nameCheck, *currentPriceCheck, *lastPriceCheck, *openPriceCheck, *minPriceCheck, *maxPriceCheck, *variationCheck, *volumeCheck; 39 QCheckBox *timeCheck, *dateCheck, *symbolCheck, *nameCheck, *currentPriceCheck, *lastPriceCheck, *openPriceCheck, *minPriceCheck, *maxPriceCheck, *variationCheck, *volumeCheck;
40 QPushButton *lookupButton; 40 QPushButton *lookupButton;
41 QSpinBox *timerDelaySpin, *scrollSpeed, *scrollLength; 41 QSpinBox *timerDelaySpin, *scrollSpeed, *scrollLength;
42private slots: 42private slots:
43 void doLookup(); 43 void doLookup();
44 44
45}; 45};
46#endif 46#endif
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp
index c3ca52d..fedc79c 100644
--- a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp
@@ -1,301 +1,327 @@
1/* 1 /*
2 * stocktickerpluginwidget.cpp 2 * stocktickerpluginwidget.cpp
3 * 3 *
4 * copyright : (c) 2002 by L.J. Potter 4 * copyright : (c) 2002 by L.J. Potter
5 * email : llornkcor@handhelds.org 5 * email : llornkcor@handhelds.org
6 * 6 *
7 */ 7 */
8/*************************************************************************** 8 /***************************************************************************
9 * * 9 * *
10 * This program is free software; you can redistribute it and/or modify * 10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by * 11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or * 12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. * 13 * (at your option) any later version. *
14 * * 14 * *
15 ***************************************************************************/ 15 ***************************************************************************/
16 16
17#include <qlayout.h> 17 #include <qlayout.h>
18 18
19#include <qpe/config.h> 19 #include <qpe/config.h>
20 20
21#include <opie/oticker.h> 21 #include <opie/oticker.h>
22 22
23extern "C" { 23 extern "C" {
24#include "libstocks/stocks.h" 24 #include "libstocks/stocks.h"
25} 25 }
26 26
27#include <pthread.h> 27 #include <pthread.h>
28 28
29#include "stocktickerpluginwidget.h" 29 #include "stocktickerpluginwidget.h"
30 30
31QString output; 31 QString output;
32OTicker *stocktickerTicker; 32 OTicker *stocktickerTicker;
33 QCString stock_liste;
34 bool dotimeCheck, dodateCheck, dosymbolCheck, donameCheck;
35 bool docurrentPriceCheck, dolastPriceCheck, doopenPriceCheck;
36 bool dominPriceCheck, domaxPriceCheck, dovariationCheck, dovolumeCheck;
33 37
34void getStocks(char *blah) { 38void getStocks(char *blah) {
35 39
36// stocktickerTicker->setText( "Downloading stock data."); 40 // stocktickerTicker->setText( "Downloading stock data.");
37 stock *stocks_quotes=NULL; 41 stock *stocks_quotes=NULL;
38 stock *stocks_tmp; 42 stock *stocks_tmp;
39 QCString stock_liste = blah; 43 stock_liste = blah;
40 ::free ( blah ); 44 ::free ( blah );
41 // char *stock_liste = (char *)blah->latin1(); 45 // char *stock_liste = (char *)blah->latin1();
42 qDebug("%s", stock_liste.data() ); 46 // qDebug("%s", stock_liste.data() );
43 QString tempString; 47 output = "";
44 output = ""; 48 QString tempString;
45 49 libstocks_return_code error;
46 libstocks_return_code error; 50
47 51// Config cfg( "stockticker");
48 Config cfg( "stockticker"); 52// cfg.setGroup( "Fields" );
49 cfg.setGroup( "Fields" ); 53// bool dotimeCheck, dodateCheck, dosymbolCheck, donameCheck;
50 bool dotimeCheck, dodateCheck, dosymbolCheck, donameCheck; 54// bool docurrentPriceCheck, dolastPriceCheck, doopenPriceCheck;
51 bool docurrentPriceCheck, dolastPriceCheck, doopenPriceCheck; 55// bool dominPriceCheck, domaxPriceCheck, dovariationCheck, dovolumeCheck;
52 bool dominPriceCheck, domaxPriceCheck, dovariationCheck, dovolumeCheck; 56
53 57 dotimeCheck=dodateCheck=dosymbolCheck=donameCheck= docurrentPriceCheck=dolastPriceCheck=doopenPriceCheck=dominPriceCheck=domaxPriceCheck=dovariationCheck=dovolumeCheck=false;
54 dotimeCheck=dodateCheck=dosymbolCheck=donameCheck= docurrentPriceCheck=dolastPriceCheck=doopenPriceCheck=dominPriceCheck=domaxPriceCheck=dovariationCheck=dovolumeCheck=false; 58
55 59 dotimeCheck=1;
56 dotimeCheck=cfg.readBoolEntry("timeCheck",1); 60 dodateCheck=1;
57 dodateCheck=cfg.readBoolEntry("dateCheck",1); 61 dosymbolCheck=1;
58 dosymbolCheck=cfg.readBoolEntry("symbolCheck",1); 62 donameCheck=1;
59 donameCheck=cfg.readBoolEntry("nameCheck",1); 63 docurrentPriceCheck=1;
60 docurrentPriceCheck=cfg.readBoolEntry("currentPriceCheck",1); 64 dolastPriceCheck=1;
61 dolastPriceCheck=cfg.readBoolEntry("lastPriceCheck",1); 65 doopenPriceCheck=1;
62 doopenPriceCheck=cfg.readBoolEntry("openPriceCheck",1); 66 dominPriceCheck=1;
63 dominPriceCheck=cfg.readBoolEntry("minPriceCheck",1); 67 domaxPriceCheck=1;
64 domaxPriceCheck=cfg.readBoolEntry("maxPriceCheck",1); 68 dovariationCheck=1;
65 dovariationCheck=cfg.readBoolEntry("variationCheck",1); 69 dovolumeCheck=1;
66 dovolumeCheck=cfg.readBoolEntry("volumeCheck",1); 70
67 71// dotimeCheck=cfg.readBoolEntry("timeCheck",1);
68// DefProxy(); 72// dodateCheck=cfg.readBoolEntry("dateCheck",1);
69 { 73// dosymbolCheck=cfg.readBoolEntry("symbolCheck",1);
70 char *proxy; 74// donameCheck=cfg.readBoolEntry("nameCheck",1);
71 libstocks_return_code error; 75// docurrentPriceCheck=cfg.readBoolEntry("currentPriceCheck",1);
72 76// dolastPriceCheck=cfg.readBoolEntry("lastPriceCheck",1);
73 /* Proxy support */ 77// doopenPriceCheck=cfg.readBoolEntry("openPriceCheck",1);
74 /* Checks for "http_proxy" environment variable */ 78// dominPriceCheck=cfg.readBoolEntry("minPriceCheck",1);
75 proxy = getenv("http_proxy"); 79// domaxPriceCheck=cfg.readBoolEntry("maxPriceCheck",1);
76 if(proxy) { 80// dovariationCheck=cfg.readBoolEntry("variationCheck",1);
77 /* printf("proxy set\n"); */ 81// dovolumeCheck=cfg.readBoolEntry("volumeCheck",1);
78 error = set_proxy(proxy); 82
79 if (error) { 83 // DefProxy();
80 printf("Proxy error (%d)\n", error); 84 // {
81 QString tempString; 85 char *proxy;
82 tempString.sprintf("Proxy error (%d)\n", error); 86 // libstocks_return_code error;
83 output = tempString; 87
84 return; 88 /* Proxy support */
85// exit(1); 89 /* Checks for "http_proxy" environment variable */
86 } 90 proxy = getenv("http_proxy");
87 } 91 if(proxy) {
88 } 92 /* printf("proxy set\n"); */
89// char *stock_liste = (char *)blah; 93 error = set_proxy(proxy);
90 /* Get the stocks and process errors */ 94 if (error) {
91 error = get_stocks( stock_liste.data(), &stocks_quotes); 95// printf("Proxy error (%d)\n", error);
92 96// QString tempString2;
93 if (error) { 97// tempString2.sprintf("Proxy error (%d)\n", error);
94 printf("Error in getting stocks (%d)\n", error); 98// output = tempString2;
95 tempString.sprintf("Error in getting stocks (%d)\n", error); 99 // delete tempString2;
96 output =tempString; 100 return;
97 return; 101 // exit(1);
98// exit(1); 102 }
99 } 103 }
100 104 ::free(proxy);
101 stocks_tmp = stocks_quotes; 105 // }
102 106 /* Get the stocks and process errors */
103 /* Displays the stocks */ 107 error = get_stocks( stock_liste.data(), &stocks_quotes);
104 while(stocks_tmp!=0){ 108
105 109 if (error) {
106 if (stocks_tmp->Time) { 110 printf("Error in getting stocks (%d)\n", error);
107// printf("%s ", stocks_tmp->Time); 111 tempString.sprintf("Error in getting stocks (%d)\n", error);
108 tempString.sprintf("| %s ", stocks_tmp->Time); 112 output =tempString;
109 tempString.replace(QRegExp("\""),""); 113 return;
110 if( dotimeCheck) 114 }
111 output +=tempString; 115
112 } 116 stocks_tmp = stocks_quotes;
113 if (stocks_tmp->Date) { 117
114// printf("%s ", stocks_tmp->Date); 118 /* Displays the stocks */
115 tempString.sprintf("| %s ", stocks_tmp->Date); 119 while(stocks_tmp!=0){
116 tempString.replace(QRegExp("\""),""); 120
117 if(dodateCheck) 121 if (stocks_tmp->Time) {
118 output +=tempString; 122 // printf("%s ", stocks_tmp->Time);
119 } 123 tempString.sprintf("| %s ", stocks_tmp->Time);
120// printf("\n"); 124 tempString.replace(QRegExp("\""),"");
121 125 if( dotimeCheck)
122// printf("----------------------------------------\n"); 126 output +=tempString;
123 127 }
124 if ( strlen(stocks_tmp->Symbol) > 20 ) { 128 if (stocks_tmp->Date) {
125// printf("| Symbol | %.20s |\n",stocks_tmp->Symbol); 129 // printf("%s ", stocks_tmp->Date);
126 tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol); 130 tempString.sprintf("| %s ", stocks_tmp->Date);
127 if(dosymbolCheck) 131 tempString.replace(QRegExp("\""),"");
128 output +=tempString; 132 if(dodateCheck)
129 } 133 output +=tempString;
130 else { 134 }
131// printf("| Symbol | %-20s |\n",stocks_tmp->Symbol); 135 // printf("\n");
132 tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol); 136
133 if(dosymbolCheck) 137 // printf("----------------------------------------\n");
134 output +=tempString; 138
135 } 139 if ( strlen(stocks_tmp->Symbol) > 20 ) {
136 140 // printf("| Symbol | %.20s |\n",stocks_tmp->Symbol);
137 if (stocks_tmp->Name) { 141 tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol);
138 if ( strlen(stocks_tmp->Name) > 20 ) { 142 if(dosymbolCheck)
139// printf("| Name %.20s |\n",stocks_tmp->Name); 143 output +=tempString;
140 tempString.sprintf("| Name %s ",stocks_tmp->Name); 144 }
141 tempString.stripWhiteSpace(); 145 else {
142 if(donameCheck) 146 // printf("| Symbol | %-20s |\n",stocks_tmp->Symbol);
143 output +=tempString; 147 tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol);
144 } else { 148 if(dosymbolCheck)
145// printf("| Name | %-20s |\n",stocks_tmp->Name); 149 output +=tempString;
146 tempString.sprintf("| Name %s ",stocks_tmp->Name); 150 }
147 tempString.stripWhiteSpace(); 151
148 if(donameCheck) 152 if (stocks_tmp->Name) {
149 output +=tempString; 153 if ( strlen(stocks_tmp->Name) > 20 ) {
150 } 154 // printf("| Name %.20s |\n",stocks_tmp->Name);
151 } 155 tempString.sprintf("| Name %s ",stocks_tmp->Name);
152 else { 156 tempString.stripWhiteSpace();
153// printf("| Name | |\n"); 157 if(donameCheck)
154 tempString.sprintf("| Name | |"); 158 output +=tempString;
155 if(donameCheck) 159 } else {
156 output +=tempString; 160 // printf("| Name | %-20s |\n",stocks_tmp->Name);
157 } 161 tempString.sprintf("| Name %s ",stocks_tmp->Name);
158 162 tempString.stripWhiteSpace();
159// printf("| Price | %-7.2f |\n", stocks_tmp->CurrentPrice); 163 if(donameCheck)
160 tempString.sprintf("| Price %-7.2f ", stocks_tmp->CurrentPrice); 164 output +=tempString;
161 if(docurrentPriceCheck) 165 }
162 output +=tempString; 166 }
163 167 else {
164// printf("| Yesterday | %-7.2f |\n",stocks_tmp->LastPrice); 168 // printf("| Name | |\n");
165 tempString.sprintf("| Yesterday %-7.2f ",stocks_tmp->LastPrice); 169 tempString.sprintf("| Name | |");
166 if(dolastPriceCheck) 170 if(donameCheck)
167 output +=tempString; 171 output +=tempString;
168 172 }
169// printf("| Open | %-7.2f |\n",stocks_tmp->OpenPrice); 173
170 tempString.sprintf("| Open %-7.2f ",stocks_tmp->OpenPrice); 174 // printf("| Price | %-7.2f |\n", stocks_tmp->CurrentPrice);
171 if(doopenPriceCheck) 175 tempString.sprintf("| Price %-7.2f ", stocks_tmp->CurrentPrice);
172 output +=tempString; 176 if(docurrentPriceCheck)
173 177 output +=tempString;
174// printf("| Min | %-7.2f |\n", stocks_tmp->MinPrice); 178
175 tempString.sprintf("| Min %-7.2f ", stocks_tmp->MinPrice); 179 // printf("| Yesterday | %-7.2f |\n",stocks_tmp->LastPrice);
176 if(dominPriceCheck) 180 tempString.sprintf("| Yesterday %-7.2f ",stocks_tmp->LastPrice);
177 output +=tempString; 181 if(dolastPriceCheck)
178 182 output +=tempString;
179// printf("| Max | %-7.2f |\n",stocks_tmp->MaxPrice); 183
180 tempString.sprintf("| Max %-7.2f ",stocks_tmp->MaxPrice); 184 // printf("| Open | %-7.2f |\n",stocks_tmp->OpenPrice);
181 if(domaxPriceCheck) 185 tempString.sprintf("| Open %-7.2f ",stocks_tmp->OpenPrice);
182 output +=tempString; 186 if(doopenPriceCheck)
183 187 output +=tempString;
184// printf("| Var | %-6.2f (%5.2f %%) |\n", stocks_tmp->Variation, stocks_tmp->Pourcentage); 188
185 tempString.sprintf("| Var %-6.2f (%5.2f %%) ", stocks_tmp->Variation, stocks_tmp->Pourcentage); 189 // printf("| Min | %-7.2f |\n", stocks_tmp->MinPrice);
186 if(dovariationCheck) 190 tempString.sprintf("| Min %-7.2f ", stocks_tmp->MinPrice);
187 output +=tempString; 191 if(dominPriceCheck)
188 192 output +=tempString;
189// printf("| Volume | %-9d |\n", stocks_tmp->Volume); 193
190 tempString.sprintf("| Volume %-9d ", stocks_tmp->Volume); 194 // printf("| Max | %-7.2f |\n",stocks_tmp->MaxPrice);
191 if(dovolumeCheck) 195 tempString.sprintf("| Max %-7.2f ",stocks_tmp->MaxPrice);
192 output +=tempString; 196 if(domaxPriceCheck)
193 197 output +=tempString;
194// printf("----------------------------------------\n\n"); 198
195 tempString.sprintf("||==++==|"); 199 // printf("| Var | %-6.2f (%5.2f %%) |\n", stocks_tmp->Variation, stocks_tmp->Pourcentage);
196 output +=tempString; 200 tempString.sprintf("| Var %-6.2f (%5.2f %%) ", stocks_tmp->Variation, stocks_tmp->Pourcentage);
197 201 if(dovariationCheck)
198 /* Simple function which help to browse in the stocks list */ 202 output +=tempString;
199 stocks_tmp = next_stock(stocks_tmp); 203
200 } 204 // printf("| Volume | %-9d |\n", stocks_tmp->Volume);
201 205 tempString.sprintf("| Volume %-9d ", stocks_tmp->Volume);
202 /* frees stocks */ 206 if(dovolumeCheck)
203 free_stocks(stocks_quotes); 207 output +=tempString;
204 stocktickerTicker->setText( output.latin1() ); 208
205 209 // printf("----------------------------------------\n\n");
206} 210 tempString.sprintf("||==++==|");
207 211 output +=tempString;
208StockTickerPluginWidget::StockTickerPluginWidget( QWidget *parent, const char* name) 212
209 : QWidget(parent, name ) { 213 /* Simple function which help to browse in the stocks list */
210 init(); 214 stocks_tmp = next_stock(stocks_tmp);
211 startTimer(1000); 215 }
212 216
213 stocktickerTicker->setTextFormat(Qt::RichText); 217 stocktickerTicker->setText( output.latin1() );
214// checkConnection(); 218
215} 219 /* frees stocks */
216 220 free_stocks(stocks_quotes);
217StockTickerPluginWidget::~StockTickerPluginWidget() { 221 free_stocks(stocks_tmp);
218} 222
219 223 stock_liste="";
220void StockTickerPluginWidget::init() { 224 //delete stock_liste;
221 225 tempString="";
222 QHBoxLayout* layout = new QHBoxLayout( this ); 226 output="";
223 stocktickerTicker = new OTicker(this); 227 }
224// stocktickerTicker->setMinimumHeight(15); 228
225 connect( stocktickerTicker, SIGNAL( mousePressed()), this, SLOT( checkConnection() )); 229 StockTickerPluginWidget::StockTickerPluginWidget( QWidget *parent, const char* name)
226 layout->addWidget( stocktickerTicker); 230 : QWidget(parent, name ) {
227 wasError = true; 231 init();
228} 232 startTimer(1000);
229 233
230void StockTickerPluginWidget::doStocks() { 234 stocktickerTicker->setTextFormat(Qt::RichText);
231 Config cfg( "stockticker"); 235 // checkConnection();
232 cfg.setGroup( "Symbols" ); 236 }
233 symbollist=""; 237
234 symbollist = cfg.readEntry("Symbols", ""); 238 StockTickerPluginWidget::~StockTickerPluginWidget() {
235 symbollist.replace(QRegExp(" "),"+");//seperated by + 239 }
236 240
237 cfg.setGroup("Timer"); 241 void StockTickerPluginWidget::init() {
238 stocktickerTicker->setUpdateTime( cfg.readNumEntry("ScrollSpeed",50)); 242
239 stocktickerTicker->setScrollLength( cfg.readNumEntry("ScrollLength",10)); 243 QHBoxLayout* layout = new QHBoxLayout( this );
240 244 stocktickerTicker = new OTicker(this);
241 if (!symbollist.isEmpty()) { 245 // stocktickerTicker->setMinimumHeight(15);
242 pthread_t thread1; 246 connect( stocktickerTicker, SIGNAL( mousePressed()), this, SLOT( checkConnection() ));
243 char *blah = ::strdup(symbollist.latin1()); 247 layout->addWidget( stocktickerTicker);
244 pthread_create(&thread1,NULL, (void * (*)(void *))getStocks, (void *) blah); 248 wasError = true;
245 } 249 }
246} 250
247 251 void StockTickerPluginWidget::doStocks() {
248void StockTickerPluginWidget::timerEvent( QTimerEvent *e ) { 252 Config cfg( "stockticker");
249 killTimer(e->timerId()); 253 cfg.setGroup( "Symbols" );
250 checkConnection(); 254 symbollist="";
251} 255 symbollist = cfg.readEntry("Symbols", "");
252 256 symbollist.replace(QRegExp(" "),"+");//seperated by +
253void StockTickerPluginWidget::checkConnection() { 257
254// qDebug("checking connection"); 258 cfg.setGroup("Timer");
255// Sock = new QSocket( this ); 259 stocktickerTicker->setUpdateTime( cfg.readNumEntry("ScrollSpeed",50));
256 260 stocktickerTicker->setScrollLength( cfg.readNumEntry("ScrollLength",10));
257// if( wasError) 261
258// stocktickerTicker->setText("Checking connection"); 262 if (!symbollist.isEmpty()) {
259 263 pthread_t thread1;
260// if(Sock->state() == QSocket::Idle) { 264 char *blah = ::strdup(symbollist.latin1());
261// Sock->connectToHost("finance.yahoo.com", 80); 265 pthread_create( &thread1, NULL, (void * (*)(void *))getStocks, (void *) blah);
262// connect( Sock, SIGNAL( error(int) ), SLOT(socketError(int)) ); 266 pthread_detach( thread1);
263// connect( Sock, SIGNAL( hostFound() ), SLOT(isConnected()) ); 267
264// } else { 268 //::free((void*)thread1);
265// qDebug("State is not Idle"); 269 //getStocks(blah);
266 isConnected(); 270 }
267// } 271 }
268} 272
269 273 void StockTickerPluginWidget::timerEvent( QTimerEvent *e ) {
270void StockTickerPluginWidget::isConnected() { 274 killTimer(e->timerId());
271// qDebug("We connect, so ok to grab stocks"); 275 checkConnection();
272 doStocks(); 276 }
273 277
274 Config cfg( "stockticker"); 278 void StockTickerPluginWidget::checkConnection() {
275 cfg.setGroup("Timer"); 279 // qDebug("checking connection");
276 timerDelay= cfg.readNumEntry("Delay",0); 280 // Sock = new QSocket( this );
277 if(timerDelay > 0) 281
278 startTimer(timerDelay*60000); 282 // if( wasError)
279 qDebug("timer set for %d",(timerDelay*60000)/60000); 283 // stocktickerTicker->setText("Checking connection");
280 wasError = false; 284
281 285 // if(Sock->state() == QSocket::Idle) {
282// Sock->close(); 286 // Sock->connectToHost("finance.yahoo.com", 80);
283} 287 // connect( Sock, SIGNAL( error(int) ), SLOT(socketError(int)) );
284 288 // connect( Sock, SIGNAL( hostFound() ), SLOT(isConnected()) );
285void StockTickerPluginWidget::socketError(int errcode) { 289 // } else {
286 switch(errcode) { 290 // qDebug("State is not Idle");
287 case QSocket::ErrConnectionRefused: 291 isConnected();
288 output = tr("Connection refused."); 292 // }
289 break; 293 }
290 case QSocket::ErrHostNotFound: 294
291 output = tr("Could not find server."); 295 void StockTickerPluginWidget::isConnected() {
292 break; 296 // qDebug("We connect, so ok to grab stocks");
293 case QSocket::ErrSocketRead : 297 if(this->isVisible())
294 output = tr("Socket read error."); 298 doStocks();
295 break; 299
296 }; 300 Config cfg( "stockticker");
297 stocktickerTicker->setText( output ); 301 cfg.setGroup("Timer");
298 wasError = true; 302 timerDelay= cfg.readNumEntry("Delay",0);
299// Sock->close(); 303 if(timerDelay > 0)
300 304 startTimer(timerDelay*60000);
301} 305 // qDebug("timer set for %d",(timerDelay*60000)/60000);
306 wasError = false;
307
308 // Sock->close();
309 }
310
311 void StockTickerPluginWidget::socketError(int errcode) {
312 switch(errcode) {
313 case QSocket::ErrConnectionRefused:
314 output = tr("Connection refused.");
315 break;
316 case QSocket::ErrHostNotFound:
317 output = tr("Could not find server.");
318 break;
319 case QSocket::ErrSocketRead :
320 output = tr("Socket read error.");
321 break;
322 };
323 stocktickerTicker->setText( output );
324 wasError = true;
325 // Sock->close();
326
327 }
diff --git a/noncore/todayplugins/weather/weatherconfig.h b/noncore/todayplugins/weather/weatherconfig.h
index 3877818..d9ffec2 100644
--- a/noncore/todayplugins/weather/weatherconfig.h
+++ b/noncore/todayplugins/weather/weatherconfig.h
@@ -1,59 +1,60 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 =. 3 =.
4             .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> 4             .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org>
5           .>+-= 5           .>+-=
6 _;:,     .>    :=|. This file is free software; you can 6 _;:,     .>    :=|. This file is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under 7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU General Public 8:`=1 )Y*s>-.--   : the terms of the GNU General Public
9.="- .-=="i,     .._ License as published by the Free Software 9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License, 10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version. 11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_. 12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This file is distributed in the hope that 13    .i_,=:_.      -<s. This file is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of 15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
18..}^=.=       =       ; Public License for more details. 18..}^=.=       =       ; Public License for more details.
19++=   -.     .`     .: 19++=   -.     .`     .:
20 :     =  ...= . :.=- You should have received a copy of the GNU 20 :     =  ...= . :.=- You should have received a copy of the GNU
21 -.   .:....=;==+<; General Public License along with this file; 21 -.   .:....=;==+<; General Public License along with this file;
22  -_. . .   )=.  = see the file COPYING. If not, write to the 22  -_. . .   )=.  = see the file COPYING. If not, write to the
23    --        :-=` Free Software Foundation, Inc., 23    --        :-=` Free Software Foundation, Inc.,
24 59 Temple Place - Suite 330, 24 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29#ifndef WEATHER_PLUGIN_CONFIG_H 29#ifndef WEATHER_PLUGIN_CONFIG_H
30#define WEATHER_PLUGIN_CONFIG_H 30#define WEATHER_PLUGIN_CONFIG_H
31 31
32#include <qstring.h> 32#include <qstring.h>
33#include <qwidget.h> 33#include <qwidget.h>
34 34
35#include <opie/todayconfigwidget.h> 35#include <opie/todayconfigwidget.h>
36 36
37class QCheckBox; 37class QCheckBox;
38class QLineEdit; 38class QLineEdit;
39class QPushButton; 39class QPushButton;
40class QSpinBox; 40class QSpinBox;
41 41
42class WeatherPluginConfig : public TodayConfigWidget 42class WeatherPluginConfig : public TodayConfigWidget
43{ 43{
44 Q_OBJECT
44 public: 45 public:
45 WeatherPluginConfig( QWidget *parent, const char *name ); 46 WeatherPluginConfig( QWidget *parent, const char *name );
46 ~WeatherPluginConfig(); 47 ~WeatherPluginConfig();
47 void writeConfig(); 48 void writeConfig();
48 49
49 private: 50 private:
50 QLineEdit *locationEdit; 51 QLineEdit *locationEdit;
51 QCheckBox *metricCB; 52 QCheckBox *metricCB;
52 QSpinBox *timerDelaySB; 53 QSpinBox *timerDelaySB;
53 54
54 private slots: 55 private slots:
55 void doLookup(); 56 void doLookup();
56 //void slotCopyLink(); 57 //void slotCopyLink();
57}; 58};
58 59
59#endif 60#endif
diff --git a/noncore/tools/clock/clock.cpp b/noncore/tools/clock/clock.cpp
index 41c99a8..ecbf12f 100644
--- a/noncore/tools/clock/clock.cpp
+++ b/noncore/tools/clock/clock.cpp
@@ -244,404 +244,405 @@ void Clock::updateClock()
244 if ( swatch_running ) 244 if ( swatch_running )
245 totalms += swatch_start.elapsed(); 245 totalms += swatch_start.elapsed();
246 swatch_time = QTime( 0, 0, 0 ).addMSecs( totalms ); 246 swatch_time = QTime( 0, 0, 0 ).addMSecs( totalms );
247 QString d = swatch_running ? QString( " " ) 247 QString d = swatch_running ? QString( " " )
248 : QString::number( totalms % 1000 + 1000 ); 248 : QString::number( totalms % 1000 + 1000 );
249 lcdtext = swatch_time.toString() + "." + d.right( 3 ).left( sw_prec ); 249 lcdtext = swatch_time.toString() + "." + d.right( 3 ).left( sw_prec );
250 lcd->display( lcdtext ); 250 lcd->display( lcdtext );
251 lcd->repaint( FALSE ); 251 lcd->repaint( FALSE );
252 aclock->display( swatch_time ); 252 aclock->display( swatch_time );
253 date->setText( TimeString::longDateString( QDate::currentDate() ) ); 253 date->setText( TimeString::longDateString( QDate::currentDate() ) );
254 } 254 }
255} 255}
256 256
257void Clock::changeClock( bool a ) 257void Clock::changeClock( bool a )
258{ 258{
259 ampm = a; 259 ampm = a;
260 updateClock(); 260 updateClock();
261} 261}
262 262
263void Clock::clearClock( void ) 263void Clock::clearClock( void )
264{ 264{
265 lcd->display( QTime( 0, 0, 0 ).toString() ); 265 lcd->display( QTime( 0, 0, 0 ).toString() );
266 aclock->display( QTime( 0, 0, 0 ) ); 266 aclock->display( QTime( 0, 0, 0 ) );
267} 267}
268 268
269void Clock::startSWatch() 269void Clock::startSWatch()
270{ 270{
271 if(swatch_running) { 271 if(swatch_running) {
272 stopSWatch(); 272 stopSWatch();
273 return; 273 return;
274 } 274 }
275 qDebug("startSWatch()"); 275 qDebug("startSWatch()");
276 swatch_start.start(); 276 swatch_start.start();
277 set->setText( tr( "Stop" ) ); 277 set->setText( tr( "Stop" ) );
278 t->start( 1000 ); 278 t->start( 1000 );
279 swatch_running = TRUE; 279 swatch_running = TRUE;
280 // disable screensaver while stop watch is running 280 // disable screensaver while stop watch is running
281 toggleScreenSaver( FALSE ); 281 toggleScreenSaver( FALSE );
282} 282}
283 283
284void Clock::stopSWatch() 284void Clock::stopSWatch()
285{ 285{
286 qDebug("stopSWatch()"); 286 qDebug("stopSWatch()");
287 swatch_totalms += swatch_start.elapsed(); 287 swatch_totalms += swatch_start.elapsed();
288 set->setText( tr( "Start" ) ); 288 set->setText( tr( "Start" ) );
289 t->stop(); 289 t->stop();
290 swatch_running = FALSE; 290 swatch_running = FALSE;
291 toggleScreenSaver( TRUE ); 291 toggleScreenSaver( TRUE );
292 updateClock(); 292 updateClock();
293} 293}
294 294
295 295
296void Clock::slotSet() 296void Clock::slotSet()
297{ 297{
298 if ( t->isActive() ) 298 if ( t->isActive() )
299 { 299 {
300 startSWatch(); 300 startSWatch();
301 } 301 }
302 else 302 else
303 { 303 {
304 stopSWatch(); 304 stopSWatch();
305 } 305 }
306} 306}
307 307
308void Clock::slotReset() 308void Clock::slotReset()
309{ 309{
310 t->stop(); 310 t->stop();
311 swatch_start.start(); 311 swatch_start.start();
312 swatch_totalms = 0; 312 swatch_totalms = 0;
313 313
314 if ( swatch_running ) 314 if ( swatch_running )
315 t->start( 1000 ); 315 t->start( 1000 );
316 316
317 updateClock(); 317 updateClock();
318} 318}
319 319
320void Clock::modeSelect( int m ) 320void Clock::modeSelect( int m )
321{ 321{
322 qDebug("Clock::modeSelect( %d) ", m); 322 qDebug("Clock::modeSelect( %d) ", m);
323 if ( m != 0 ) 323 if ( m != 0 )
324 { 324 {
325 lcd->setNumDigits( 8 + 1 + sw_prec ); 325 lcd->setNumDigits( 8 + 1 + sw_prec );
326 lcd->setMinimumWidth( lcd->sizeHint().width() ); 326 lcd->setMinimumWidth( lcd->sizeHint().width() );
327 set->setEnabled( TRUE ); 327 set->setEnabled( TRUE );
328 reset->setEnabled( TRUE ); 328 reset->setEnabled( TRUE );
329 ampmLabel->hide(); 329 ampmLabel->hide();
330 330
331// if(m == 2) { 331// if(m == 2) {
332 if ( !swatch_running ) { 332 if ( !swatch_running ) {
333 t->start( 1000 ); 333 t->start( 1000 );
334 } 334 }
335// else 335// else
336// { 336// {
337// stopSWatch(); 337// stopSWatch();
338// } 338// }
339// } 339// }
340 } 340 }
341 else //clock mode 341 else //clock mode
342 { 342 {
343 lcd->setNumDigits( 5 ); 343 lcd->setNumDigits( 5 );
344 lcd->setMinimumWidth( lcd->sizeHint().width() ); 344 lcd->setMinimumWidth( lcd->sizeHint().width() );
345 set->setEnabled( FALSE ); 345 set->setEnabled( FALSE );
346 reset->setEnabled( FALSE ); 346 reset->setEnabled( FALSE );
347 t->start( 1000 ); 347 t->start( 1000 );
348 } 348 }
349 349
350 Config config( "Clock" ); 350 Config config( "Clock" );
351 config.setGroup( "Mode" ); 351 config.setGroup( "Mode" );
352 config.writeEntry( "clockMode", m ); 352 config.writeEntry( "clockMode", m );
353 updateClock(); 353 updateClock();
354} 354}
355 355
356//this sets the alarm time 356//this sets the alarm time
357void Clock::slotSetAlarm() 357void Clock::slotSetAlarm()
358{ 358{
359 if ( !snoozeBtn->isHidden() ) 359 if ( !snoozeBtn->isHidden() )
360 slotToggleAlarm(); 360 slotToggleAlarm();
361 Set_Alarm *setAlarmDlg; 361 Set_Alarm *setAlarmDlg;
362 setAlarmDlg = new Set_Alarm( this, "SetAlarm", TRUE ); 362 setAlarmDlg = new Set_Alarm( this, "SetAlarm", TRUE );
363 int result = setAlarmDlg->exec(); 363 int result = setAlarmDlg->exec();
364 if ( result == 1 ) { 364 if ( result == 1 ) {
365 Config config( "qpe" ); 365 Config config( "qpe" );
366 config.setGroup( "Time" ); 366 config.setGroup( "Time" );
367 QString tmp; 367 QString tmp;
368 hour = setAlarmDlg->Hour_Slider->value(); 368 hour = setAlarmDlg->Hour_Slider->value();
369 minute = setAlarmDlg->Minute_Slider->value(); 369 minute = setAlarmDlg->Minute_Slider->value();
370 snoozeTime = setAlarmDlg->SnoozeSlider->value(); 370 snoozeTime = setAlarmDlg->SnoozeSlider->value();
371 if ( ampm ) { 371 if ( ampm ) {
372 if ( hour == 12 ) 372 if ( hour == 12 )
373 hour = 0; 373 hour = 0;
374 374
375 if ( setAlarmDlg->Pm_RadioButton->isChecked() && hour < 12 ) 375 if ( setAlarmDlg->Pm_RadioButton->isChecked() && hour < 12 )
376 hour += 12; 376 hour += 12;
377 } 377 }
378 config.writeEntry( "clockAlarmHour", tmp.setNum( hour ), 10 ); 378 config.writeEntry( "clockAlarmHour", tmp.setNum( hour ), 10 );
379 config.writeEntry( "clockAlarmMinute", tmp.setNum( minute ), 10 ); 379 config.writeEntry( "clockAlarmMinute", tmp.setNum( minute ), 10 );
380 config.writeEntry( "clockAlarmSnooze", tmp.setNum( snoozeTime ), 10 ); 380 config.writeEntry( "clockAlarmSnooze", tmp.setNum( snoozeTime ), 10 );
381 config.write(); 381 config.write();
382 } 382 }
383} 383}
384 384
385void Clock::slotSnooze() 385void Clock::slotSnooze()
386{ 386{
387 bSound = FALSE; 387 bSound = FALSE;
388 int warn = 0; 388 int warn = 0;
389 QTime t = QTime::currentTime(); 389 QTime t = QTime::currentTime();
390 QDateTime whenl( when.date(), t.addSecs( snoozeTime * 60 ) ); 390 QDateTime whenl( when.date(), t.addSecs( snoozeTime * 60 ) );
391 when = whenl; 391 when = whenl;
392 AlarmServer::addAlarm( when, 392 AlarmServer::addAlarm( when,
393 "QPE/Application/clock", 393 "QPE/Application/clock",
394 "alarm(QDateTime,int)", warn ); 394 "alarm(QDateTime,int)", warn );
395 395
396} 396}
397 397
398//toggles alarm on/off 398//toggles alarm on/off
399void Clock::slotToggleAlarm() 399void Clock::slotToggleAlarm()
400{ 400{
401 Config config( "qpe" ); 401 Config config( "qpe" );
402 config.setGroup( "Time" ); 402 config.setGroup( "Time" );
403 if ( alarmBool ) 403 if ( alarmBool )
404 { 404 {
405 config.writeEntry( "clockAlarmSet", "FALSE" ); 405 config.writeEntry( "clockAlarmSet", "FALSE" );
406 alarmOffBtn->setText( tr( "Alarm Is Off" ) ); 406 alarmOffBtn->setText( tr( "Alarm Is Off" ) );
407 snoozeBtn->hide(); 407 snoozeBtn->hide();
408 alarmBool = FALSE; 408 alarmBool = FALSE;
409 alarmOff(); 409 alarmOff();
410 } 410 }
411 else 411 else
412 { 412 {
413 config.writeEntry( "clockAlarmSet", "TRUE" ); 413 config.writeEntry( "clockAlarmSet", "TRUE" );
414 alarmOffBtn->setText( tr( "Alarm Is On" ) ); 414 alarmOffBtn->setText( tr( "Alarm Is On" ) );
415 snoozeBtn->show(); 415 snoozeBtn->show();
416 alarmBool = TRUE; 416 alarmBool = TRUE;
417 alarmOn(); 417 alarmOn();
418 } 418 }
419 config.write(); 419 config.write();
420} 420}
421 421
422void Clock::alarmOn() 422void Clock::alarmOn()
423{ 423{
424 QDate d = QDate::currentDate(); 424 QDate d = QDate::currentDate();
425 QTime tm( ( int ) hour, ( int ) minute, 0 ); 425 QTime tm( ( int ) hour, ( int ) minute, 0 );
426 qDebug( "Time set " + tm.toString() ); 426 qDebug( "Time set " + tm.toString() );
427 QTime t = QTime::currentTime(); 427 QTime t = QTime::currentTime();
428 if ( t > tm ) 428 if ( t > tm )
429 d = d.addDays( 1 ); 429 d = d.addDays( 1 );
430 int warn = 0; 430 int warn = 0;
431 QDateTime whenl( d, tm ); 431 QDateTime whenl( d, tm );
432 when = whenl; 432 when = whenl;
433 AlarmServer::addAlarm( when, 433 AlarmServer::addAlarm( when,
434 "QPE/Application/clock", 434 "QPE/Application/clock",
435 "alarm(QDateTime,int)", warn ); 435 "alarm(QDateTime,int)", warn );
436 setCaption( "Alarm set: " + whenl.toString() ); 436// setCaption( "Alarm set: " + whenl.toString() );
437 setCaption( tr("Alarm set: %1" ).arg(whenl.toString()) );
437} 438}
438 439
439void Clock::alarmOff() 440void Clock::alarmOff()
440{ 441{
441 int warn = 0; 442 int warn = 0;
442 bSound = FALSE; 443 bSound = FALSE;
443 AlarmServer::deleteAlarm( when, 444 AlarmServer::deleteAlarm( when,
444 "QPE/Application/clock", 445 "QPE/Application/clock",
445 "alarm(QDateTime,int)", warn ); 446 "alarm(QDateTime,int)", warn );
446 qDebug( "Alarm Off " + when.toString() ); 447 qDebug( "Alarm Off " + when.toString() );
447 setCaption( "Clock" ); 448 setCaption( tr("Clock") );
448} 449}
449 450
450void Clock::clearTimer() 451void Clock::clearTimer()
451{ 452{
452 alarmOffBtn->setText( tr( "Alarm Is Off" ) ); 453 alarmOffBtn->setText( tr( "Alarm Is Off" ) );
453 alarmBool = FALSE; 454 alarmBool = FALSE;
454 snoozeBtn->hide(); 455 snoozeBtn->hide();
455 setCaption( "Clock" ); 456 setCaption( tr("Clock") );
456} 457}
457 458
458void Clock::appMessage( const QCString& msg, const QByteArray& /*data*/ ) 459void Clock::appMessage( const QCString& msg, const QByteArray& /*data*/ )
459{ 460{
460 int stopTimer = 0; 461 int stopTimer = 0;
461 int timerStay = 5000; 462 int timerStay = 5000;
462 bSound = TRUE; 463 bSound = TRUE;
463 qDebug( "Message received in clock" ); 464 qDebug( "Message received in clock" );
464 if ( msg == "alarm(QDateTime,int)" ) 465 if ( msg == "alarm(QDateTime,int)" )
465 { 466 {
466 Config config( "qpe" ); 467 Config config( "qpe" );
467 config.setGroup( "Time" ); 468 config.setGroup( "Time" );
468 if ( config.readBoolEntry( "mp3Alarm", 0 ) ) 469 if ( config.readBoolEntry( "mp3Alarm", 0 ) )
469 { 470 {
470 clearTimer(); 471 clearTimer();
471 pthread_t thread; 472 pthread_t thread;
472 pthread_create(&thread, NULL, (void * (*) (void *))startPlayer, NULL/* &*/); 473 pthread_create(&thread, NULL, (void * (*) (void *))startPlayer, NULL/* &*/);
473 474
474 } 475 }
475 else 476 else
476 { 477 {
477 478
478 Sound::soundAlarm(); 479 Sound::soundAlarm();
479 stopTimer = startTimer( timerStay ); 480 stopTimer = startTimer( timerStay );
480 } 481 }
481 } 482 }
482 483
483 if ( msg == "timerStart()" ) 484 if ( msg == "timerStart()" )
484 { 485 {
485 slotStartTimer(); 486 slotStartTimer();
486 } 487 }
487 if ( msg == "timerStop()" ) 488 if ( msg == "timerStop()" )
488 { 489 {
489 slotStopTimer(); 490 slotStopTimer();
490 } 491 }
491 if ( msg == "timerReset()" ) 492 if ( msg == "timerReset()" )
492 { 493 {
493 slotResetTimer(); 494 slotResetTimer();
494 } 495 }
495 496
496 show(); 497 show();
497 raise(); 498 raise();
498 QPEApplication::setKeepRunning(); 499 QPEApplication::setKeepRunning();
499 setActiveWindow(); 500 setActiveWindow();
500} 501}
501 502
502void Clock::timerEvent( QTimerEvent *e ) 503void Clock::timerEvent( QTimerEvent *e )
503{ 504{
504 static int stop = 0; 505 static int stop = 0;
505 if ( stop < 120 && bSound ) 506 if ( stop < 120 && bSound )
506 { 507 {
507 Sound::soundAlarm(); 508 Sound::soundAlarm();
508 stop++; 509 stop++;
509 } 510 }
510 else 511 else
511 { 512 {
512 stop = 0; 513 stop = 0;
513 killTimer( e->timerId() ); 514 killTimer( e->timerId() );
514 clearTimer(); 515 clearTimer();
515 setCaption( tr( "Clock: Alarm was missed." ) ); 516 setCaption( tr( "Clock: Alarm was missed." ) );
516 } 517 }
517} 518}
518 519
519AnalogClock::AnalogClock(QWidget * parent, const char * name) : QFrame( parent, name ), clear(true) 520AnalogClock::AnalogClock(QWidget * parent, const char * name) : QFrame( parent, name ), clear(true)
520{ 521{
521 bg = Resource::loadPixmap("clock/bg"); 522 bg = Resource::loadPixmap("clock/bg");
522} 523}
523 524
524QSizePolicy AnalogClock::sizePolicy() const 525QSizePolicy AnalogClock::sizePolicy() const
525{ 526{
526 return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); 527 return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
527} 528}
528 529
529void AnalogClock::drawContents( QPainter *p ) 530void AnalogClock::drawContents( QPainter *p )
530{ 531{
531 QRect r = contentsRect(); 532 QRect r = contentsRect();
532 QRect fr; 533 QRect fr;
533 534
534 p->drawPixmap(QPoint(0, 0), bg, r); 535 p->drawPixmap(QPoint(0, 0), bg, r);
535 536
536 if ( r. width ( ) > r. height ( )) 537 if ( r. width ( ) > r. height ( ))
537 fr. setRect (( r. width ( ) - r. height ( )) / 2, r. y ( ), r. height ( ), r. height ( )); 538 fr. setRect (( r. width ( ) - r. height ( )) / 2, r. y ( ), r. height ( ), r. height ( ));
538 else 539 else
539 fr. setRect ( r. x ( ), ( r. height ( ) - r. width ( )) / 2, r. width ( ), r. width ( )); 540 fr. setRect ( r. x ( ), ( r. height ( ) - r. width ( )) / 2, r. width ( ), r. width ( ));
540 541
541 QPoint center = fr. center ( ); // ( fr.x() + fr.width() / 2, fr.y() + fr.height() / 2 ); 542 QPoint center = fr. center ( ); // ( fr.x() + fr.width() / 2, fr.y() + fr.height() / 2 );
542 QPoint l1 ( center. x ( ), fr. y ( ) + 2 ); 543 QPoint l1 ( center. x ( ), fr. y ( ) + 2 );
543 QPoint l2 ( center. x ( ), fr. y ( ) + 8 ); 544 QPoint l2 ( center. x ( ), fr. y ( ) + 8 );
544 545
545 546
546 547
547 if ( clear ) 548 if ( clear )
548 { 549 {
549 erase ( r ); 550 erase ( r );
550 p-> setPen ( NoPen ); 551 p-> setPen ( NoPen );
551 p-> setBrush ( colorGroup ( ). color ( QColorGroup::Base )); 552 p-> setBrush ( colorGroup ( ). color ( QColorGroup::Base ));
552 p-> drawEllipse ( fr ); 553 p-> drawEllipse ( fr );
553 p-> setBrush ( NoBrush ); 554 p-> setBrush ( NoBrush );
554 555
555 // draw ticks 556 // draw ticks
556 p->setPen( QPen( colorGroup ( ). color ( QColorGroup::Text ), 1 ) ); 557 p->setPen( QPen( colorGroup ( ). color ( QColorGroup::Text ), 1 ) );
557 for ( int i = 0; i < 12; i++ ) 558 for ( int i = 0; i < 12; i++ )
558 p->drawLine( rotate( center, l1, i * 30 ), rotate( center, l2, i * 30 ) ); 559 p->drawLine( rotate( center, l1, i * 30 ), rotate( center, l2, i * 30 ) );
559 } 560 }
560 else 561 else
561 { 562 {
562 drawPointers ( p, fr, colorGroup ( ). color ( QColorGroup::Base ), prevTime, &currTime ); 563 drawPointers ( p, fr, colorGroup ( ). color ( QColorGroup::Base ), prevTime, &currTime );
563 } 564 }
564 565
565 drawPointers ( p, fr, colorGroup ( ). color ( QColorGroup::Text ), currTime ); 566 drawPointers ( p, fr, colorGroup ( ). color ( QColorGroup::Text ), currTime );
566 567
567 prevTime = currTime; 568 prevTime = currTime;
568} 569}
569 570
570void AnalogClock::drawPointers ( QPainter *p, const QRect &r, const QColor &c, const QTime &t, const QTime *t2 ) 571void AnalogClock::drawPointers ( QPainter *p, const QRect &r, const QColor &c, const QTime &t, const QTime *t2 )
571{ 572{
572 QPoint center = r. center ( ); 573 QPoint center = r. center ( );
573 574
574 QPoint h1( center. x ( ), r. y ( ) + r. height ( ) / 4 ); 575 QPoint h1( center. x ( ), r. y ( ) + r. height ( ) / 4 );
575 QPoint h2( center. x ( ), center. y ( ) ); 576 QPoint h2( center. x ( ), center. y ( ) );
576 577
577 QPoint m1( center. x ( ), r.y() + r.height() / 8 ); 578 QPoint m1( center. x ( ), r.y() + r.height() / 8 );
578 QPoint m2( center. x ( ), center. y ( ) ); 579 QPoint m2( center. x ( ), center. y ( ) );
579 580
580 QPoint s1( center. x ( ), r. y ( ) + 8 ); 581 QPoint s1( center. x ( ), r. y ( ) + 8 );
581 QPoint s2( center. x ( ), center. y ( ) ); 582 QPoint s2( center. x ( ), center. y ( ) );
582 583
583 584
584 if ( !t2 || ( t. minute ( ) != t2-> minute ( ) || t. hour ( ) != t2-> hour ( ))) { 585 if ( !t2 || ( t. minute ( ) != t2-> minute ( ) || t. hour ( ) != t2-> hour ( ))) {
585 // draw hour pointer 586 // draw hour pointer
586 h1 = rotate( center, h1, 30 * ( t.hour() % 12 ) + t.minute() / 2 ); 587 h1 = rotate( center, h1, 30 * ( t.hour() % 12 ) + t.minute() / 2 );
587 h2 = rotate( center, h2, 30 * ( t.hour() % 12 ) + t.minute() / 2 ); 588 h2 = rotate( center, h2, 30 * ( t.hour() % 12 ) + t.minute() / 2 );
588 p-> setPen ( QPen ( c, 3 )); 589 p-> setPen ( QPen ( c, 3 ));
589 p-> drawLine ( h1, h2 ); 590 p-> drawLine ( h1, h2 );
590 } 591 }
591 592
592 if ( !t2 || ( t. minute ( ) != t2-> minute ( ))) { 593 if ( !t2 || ( t. minute ( ) != t2-> minute ( ))) {
593 // draw minute pointer 594 // draw minute pointer
594 m1 = rotate( center, m1, t.minute() * 6 ); 595 m1 = rotate( center, m1, t.minute() * 6 );
595 m2 = rotate( center, m2, t.minute() * 6 ); 596 m2 = rotate( center, m2, t.minute() * 6 );
596 p-> setPen ( QPen ( c, 2 )); 597 p-> setPen ( QPen ( c, 2 ));
597 p-> drawLine ( m1, m2 ); 598 p-> drawLine ( m1, m2 );
598 } 599 }
599 600
600 if ( !t2 || ( t. second ( ) != t2-> second ( ))) { 601 if ( !t2 || ( t. second ( ) != t2-> second ( ))) {
601 // draw second pointer 602 // draw second pointer
602 s1 = rotate( center, s1, t.second() * 6 ); 603 s1 = rotate( center, s1, t.second() * 6 );
603 s2 = rotate( center, s2, t.second() * 6 ); 604 s2 = rotate( center, s2, t.second() * 6 );
604 p-> setPen ( QPen ( c, 1 )); 605 p-> setPen ( QPen ( c, 1 ));
605 p-> drawLine ( s1, s2 ); 606 p-> drawLine ( s1, s2 );
606 } 607 }
607} 608}
608 609
609void AnalogClock::display( const QTime& t ) 610void AnalogClock::display( const QTime& t )
610{ 611{
611 currTime = t; 612 currTime = t;
612 clear = false; 613 clear = false;
613 repaint( false ); 614 repaint( false );
614 clear = true; 615 clear = true;
615} 616}
616 617
617QPoint AnalogClock::rotate( QPoint c, QPoint p, int a ) 618QPoint AnalogClock::rotate( QPoint c, QPoint p, int a )
618{ 619{
619 double angle = deg2rad * ( - a + 180 ); 620 double angle = deg2rad * ( - a + 180 );
620 double nx = c.x() - ( p.x() - c.x() ) * cos( angle ) - 621 double nx = c.x() - ( p.x() - c.x() ) * cos( angle ) -
621 ( p.y() - c.y() ) * sin( angle ); 622 ( p.y() - c.y() ) * sin( angle );
622 double ny = c.y() - ( p.y() - c.y() ) * cos( angle ) + 623 double ny = c.y() - ( p.y() - c.y() ) * cos( angle ) +
623 ( p.x() - c.x() ) * sin( angle ); 624 ( p.x() - c.x() ) * sin( angle );
624 return QPoint( nx, ny ); 625 return QPoint( nx, ny );
625} 626}
626 627
627void Clock::slotAdjustTime() 628void Clock::slotAdjustTime()
628{ 629{
629 QCopEnvelope e( "QPE/System", "execute(QString)" ); 630 QCopEnvelope e( "QPE/System", "execute(QString)" );
630 e << QString( "systemtime" ); 631 e << QString( "systemtime" );
631} 632}
632 633
633void Clock::slotStartTimer() 634void Clock::slotStartTimer()
634{ 635{
635 if ( clockRB->isChecked() ) 636 if ( clockRB->isChecked() )
636 setSwatchMode( 1); 637 setSwatchMode( 1);
637 startSWatch(); 638 startSWatch();
638} 639}
639 640
640void Clock::slotStopTimer() 641void Clock::slotStopTimer()
641{ 642{
642 if ( clockRB->isChecked() ) 643 if ( clockRB->isChecked() )
643 setSwatchMode( 1); 644 setSwatchMode( 1);
644 stopSWatch(); 645 stopSWatch();
645} 646}
646 647
647void Clock::slotResetTimer() 648void Clock::slotResetTimer()
diff --git a/noncore/tools/euroconv/main.cpp b/noncore/tools/euroconv/main.cpp
index 2d97f4e..7d69535 100644
--- a/noncore/tools/euroconv/main.cpp
+++ b/noncore/tools/euroconv/main.cpp
@@ -1,39 +1,39 @@
1/**************************************************************************** 1/****************************************************************************
2 * 2 *
3 * File: main.cpp 3 * File: main.cpp
4 * 4 *
5 * Description: main file for OPIE Euroconv aapp 5 * Description: main file for OPIE Euroconv aapp
6 * 6 *
7 * 7 *
8 * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> 8 * Authors: Eric Santonacci <Eric.Santonacci@talc.fr>
9 * 9 *
10 * Requirements: Qt 10 * Requirements: Qt
11 * 11 *
12 * $Id$ 12 * $Id$
13 * 13 *
14 ***************************************************************************/ 14 ***************************************************************************/
15 15
16#include <qpe/qpeapplication.h> 16#include <qpe/qpeapplication.h>
17#include <qvbox.h> 17#include <qvbox.h>
18//#include <qapplication.h> 18//#include <qapplication.h>
19 19
20#include "calcdisplay.h" 20#include "calcdisplay.h"
21#include "calckeypad.h" 21#include "calckeypad.h"
22 22
23 23
24 24
25int main( int argc, char **argv ) { 25int main( int argc, char **argv ) {
26 26
27 QPEApplication app( argc, argv ); 27 QPEApplication app( argc, argv );
28 28
29 QVBox *layout = new QVBox(0, "fond"); 29 QVBox *layout = new QVBox(0, "fond");
30 30
31 LCDDisplay lcd (layout, "lcd"); 31 LCDDisplay lcd (layout, "lcd");
32 KeyPad num(&lcd, layout, "keypad"); 32 KeyPad num(&lcd, layout, "keypad");
33 app.setMainWidget(layout); 33 app.setMainWidget(layout);
34 layout->setCaption("Euroconv"); 34 layout->setCaption( QObject::tr("Euroconv") );
35 layout->showMaximized (); 35 layout->showMaximized ();
36 layout->show(); 36 layout->show();
37 return app.exec(); 37 return app.exec();
38} 38}
39 39
diff --git a/noncore/tools/formatter/formatter.cpp b/noncore/tools/formatter/formatter.cpp
index 21de4d2..49f6355 100644
--- a/noncore/tools/formatter/formatter.cpp
+++ b/noncore/tools/formatter/formatter.cpp
@@ -211,373 +211,374 @@ void FormatterApp::doFormat() {
211 ,tr("No") 211 ,tr("No")
212 ,0 212 ,0
213 ,1 213 ,1
214 ,1) ) { 214 ,1) ) {
215 case 0: { 215 case 0: {
216 if(fs == "vfat") 216 if(fs == "vfat")
217 cmd = "mkdosfs -v " + diskDevice+" 2>&1"; 217 cmd = "mkdosfs -v " + diskDevice+" 2>&1";
218 else if(fs == "ext2") 218 else if(fs == "ext2")
219 cmd = "mke2fs -v " + diskDevice+" 2>&1"; 219 cmd = "mke2fs -v " + diskDevice+" 2>&1";
220 else { 220 else {
221 QMessageBox::warning(this, tr("Formatter"),tr("Could not format.\nUnknown type"), tr("Ok")); 221 QMessageBox::warning(this, tr("Formatter"),tr("Could not format.\nUnknown type"), tr("Ok"));
222 break; 222 break;
223 } 223 }
224// cmd = "ls -l"; 224// cmd = "ls -l";
225 outDlg = new Output(this, tr("Formatter Output"),FALSE); 225 outDlg = new Output(this, tr("Formatter Output"),FALSE);
226 outDlg->showMaximized(); 226 outDlg->showMaximized();
227 outDlg->show(); 227 outDlg->show();
228 qApp->processEvents(); 228 qApp->processEvents();
229 FILE *fp; 229 FILE *fp;
230 char line[130]; 230 char line[130];
231 231
232 232
233 outDlg->OutputEdit->append( tr("Trying to umount %1.").arg( currentText) ); 233 outDlg->OutputEdit->append( tr("Trying to umount %1.").arg( currentText) );
234 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 234 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
235 235
236 sleep(1); 236 sleep(1);
237 qDebug("Command is "+umountS); 237 qDebug("Command is "+umountS);
238 fp = popen( (const char *) umountS, "r"); 238 fp = popen( (const char *) umountS, "r");
239 // qDebug("%d", fp); 239 // qDebug("%d", fp);
240 if ( !fp ) { 240 if ( !fp ) {
241 qDebug("Could not execute '" + umountS + "'! err=%d\n" +(QString)strerror(errno), err); 241 qDebug("Could not execute '" + umountS + "'! err=%d\n" +(QString)strerror(errno), err);
242 QMessageBox::warning( this, tr("Formatter"), tr("umount failed!"), tr("&OK") ); 242 QMessageBox::warning( this, tr("Formatter"), tr("umount failed!"), tr("&OK") );
243 pclose(fp); 243 pclose(fp);
244 return; 244 return;
245 } else { 245 } else {
246// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully umounted.")); 246// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully umounted."));
247// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 247// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
248 while ( fgets( line, sizeof line, fp)) { 248 while ( fgets( line, sizeof line, fp)) {
249 if( ((QString)line).find("busy",0,TRUE) != -1) { 249 if( ((QString)line).find("busy",0,TRUE) != -1) {
250 qDebug("Could not find '" + umountS); 250 qDebug("Could not find '" + umountS);
251 QMessageBox::warning( this, tr("Formatter"), tr("Could not umount.\nDevice is busy!"), tr("&OK") ); 251 QMessageBox::warning( this, tr("Formatter"), tr("Could not umount.\nDevice is busy!"), tr("&OK") );
252 pclose(fp); 252 pclose(fp);
253 return; 253 return;
254 } else { 254 } else {
255 QString lineStr = line; 255 QString lineStr = line;
256 lineStr=lineStr.left(lineStr.length()-1); 256 lineStr=lineStr.left(lineStr.length()-1);
257 outDlg->OutputEdit->append(lineStr); 257 outDlg->OutputEdit->append(lineStr);
258 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 258 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
259 } 259 }
260 } 260 }
261 } 261 }
262 pclose(fp); 262 pclose(fp);
263 263
264 qDebug("Command would be: "+cmd); 264 qDebug("Command would be: "+cmd);
265 outDlg->OutputEdit->append( tr("Trying to format.") ); 265 outDlg->OutputEdit->append( tr("Trying to format.") );
266 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 266 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
267 267
268 fp = popen( (const char *) cmd, "r"); 268 fp = popen( (const char *) cmd, "r");
269 while ( fgets( line, sizeof line, fp)) { 269 while ( fgets( line, sizeof line, fp)) {
270 if( ((QString)line).find("No such device",0,TRUE) != -1) { 270 if( ((QString)line).find("No such device",0,TRUE) != -1) {
271 qDebug("No such device '" + umountS); 271 qDebug("No such device '" + umountS);
272 QMessageBox::warning( this, tr("Formatter"), tr("No such device!"), tr("&OK") ); 272 QMessageBox::warning( this, tr("Formatter"), tr("No such device!"), tr("&OK") );
273 pclose(fp); 273 pclose(fp);
274// outDlg->OutputEdit->append("No such device"); 274// outDlg->OutputEdit->append("No such device");
275// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 275// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
276 return; 276 return;
277 } else { 277 } else {
278 QString lineStr = line; 278 QString lineStr = line;
279 lineStr=lineStr.left(lineStr.length()-1); 279 lineStr=lineStr.left(lineStr.length()-1);
280 outDlg->OutputEdit->append(lineStr); 280 outDlg->OutputEdit->append(lineStr);
281 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 281 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
282 } 282 }
283 } 283 }
284 outDlg->OutputEdit->append( currentText + tr("\nhas been successfully formatted.")); 284 outDlg->OutputEdit->append( currentText + tr("\nhas been successfully formatted."));
285 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 285 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
286 pclose(fp); 286 pclose(fp);
287 287
288 outDlg->OutputEdit->append( tr("Trying to mount %1.").arg( currentText) ); 288 outDlg->OutputEdit->append( tr("Trying to mount %1.").arg( currentText) );
289 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 289 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
290 fp = popen( (const char *) remountS, "r"); 290 fp = popen( (const char *) remountS, "r");
291 if ( !fp) { 291 if ( !fp) {
292 qDebug("Could not execute '" + remountS + "'! err=%d\n" +(QString)strerror(errno), err); 292 qDebug("Could not execute '" + remountS + "'! err=%d\n" +(QString)strerror(errno), err);
293 QMessageBox::warning( this, tr("Formatter"), tr("Card mount failed!"), tr("&OK") ); 293 QMessageBox::warning( this, tr("Formatter"), tr("Card mount failed!"), tr("&OK") );
294 294
295 } else { 295 } else {
296 outDlg->OutputEdit->append(tr("%1\nhas been successfully mounted.").arg( currentText )); 296 outDlg->OutputEdit->append(tr("%1\nhas been successfully mounted.").arg( currentText ));
297 while ( fgets( line, sizeof line, fp)) { 297 while ( fgets( line, sizeof line, fp)) {
298 QString lineStr = line; 298 QString lineStr = line;
299 lineStr=lineStr.left(lineStr.length()-1); 299 lineStr=lineStr.left(lineStr.length()-1);
300 outDlg->OutputEdit->append(lineStr); 300 outDlg->OutputEdit->append(lineStr);
301 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 301 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
302 } 302 }
303 } 303 }
304 pclose(fp); 304 pclose(fp);
305 sleep(1); 305 sleep(1);
306 306
307 outDlg->OutputEdit->append(tr("You can now close the output window.")); 307 outDlg->OutputEdit->append(tr("You can now close the output window."));
308 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 308 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
309// outDlg->close(); 309// outDlg->close();
310// if(outDlg) 310// if(outDlg)
311// delete outDlg; 311// delete outDlg;
312 } 312 }
313 break; 313 break;
314 }; 314 };
315} 315}
316 316
317bool FormatterApp::doFdisk() { 317bool FormatterApp::doFdisk() {
318 return FALSE; 318 return FALSE;
319 319
320} 320}
321 321
322void FormatterApp::fillCombos() { 322void FormatterApp::fillCombos() {
323 323
324 StorageInfo storageInfo; 324 StorageInfo storageInfo;
325 const QList<FileSystem> &fs = storageInfo.fileSystems(); 325 const QList<FileSystem> &fs = storageInfo.fileSystems();
326 QListIterator<FileSystem> it ( fs ); 326 QListIterator<FileSystem> it ( fs );
327 QString storage; 327 QString storage;
328 for( ; it.current(); ++it ){ 328 for( ; it.current(); ++it ){
329 const QString name = (*it)->name(); 329 const QString name = (*it)->name();
330 const QString path = (*it)->path(); 330 const QString path = (*it)->path();
331 const QString disk = (*it)->disk(); 331 const QString disk = (*it)->disk();
332 const QString options = (*it)->options(); 332 const QString options = (*it)->options();
333 if( name.find( tr("Internal"),0,TRUE) == -1) { 333 if( name.find( tr("Internal"),0,TRUE) == -1) {
334 storageComboBox->insertItem(name +" -> "+disk); 334 storageComboBox->insertItem(name +" -> "+disk);
335 } 335 }
336// deviceComboBox->insertItem(disk); 336// deviceComboBox->insertItem(disk);
337 } 337 }
338 parsetab("/etc/mtab"); 338 parsetab("/etc/mtab");
339// parsetab("/etc/fstab"); 339// parsetab("/etc/fstab");
340 fileSystemsCombo->insertStringList( fsList,-1); 340 fileSystemsCombo->insertStringList( fsList,-1);
341 deviceComboBox->insertStringList( deviceList,-1); 341 deviceComboBox->insertStringList( deviceList,-1);
342 storageComboSelected(0); 342 storageComboSelected(0);
343 deviceComboSelected(0); 343 deviceComboSelected(0);
344} 344}
345 345
346 346
347void FormatterApp::fsComboSelected(int ) { 347void FormatterApp::fsComboSelected(int ) {
348 348
349} 349}
350 350
351void FormatterApp::storageComboSelected(int index ) { 351void FormatterApp::storageComboSelected(int index ) {
352 352
353 QString currentText = storageComboBox->text(index); 353 QString currentText = storageComboBox->text(index);
354 QString nameS = currentText.left( currentText.find("->",0,TRUE)); 354 QString nameS = currentText.left( currentText.find("->",0,TRUE));
355 355
356 TextLabel4->setText( tr( "Storage Type: %1").arg( nameS) ); 356 TextLabel4->setText( tr( "Storage Type: %1").arg( nameS) );
357 currentText = currentText.right( currentText.length() - currentText.find(" -> ",0,TRUE) - 4); 357 currentText = currentText.right( currentText.length() - currentText.find(" -> ",0,TRUE) - 4);
358 358
359 QString fsType = getFileSystemType((const QString &) currentText); 359 QString fsType = getFileSystemType((const QString &) currentText);
360// qDebug(fsType); 360// qDebug(fsType);
361 for(int i = 0; i < fileSystemsCombo->count(); i++) { 361 for(int i = 0; i < fileSystemsCombo->count(); i++) {
362 if( fsType == fileSystemsCombo->text(i)) 362 if( fsType == fileSystemsCombo->text(i))
363 fileSystemsCombo->setCurrentItem(i); 363 fileSystemsCombo->setCurrentItem(i);
364 } 364 }
365// deviceComboSelected(index); 365// deviceComboSelected(index);
366} 366}
367 367
368void FormatterApp::deviceComboSelected(int index) { 368void FormatterApp::deviceComboSelected(int index) {
369 369
370 StorageInfo storageInfo; 370 StorageInfo storageInfo;
371 QString totalS, usedS, avS, diskS, nameS, fsType, selectedText; 371 QString totalS, usedS, avS, diskS, nameS, fsType, selectedText;
372 372
373 selectedText = deviceComboBox->text(index); 373 selectedText = deviceComboBox->text(index);
374 374
375 const QList<FileSystem> &fs = storageInfo.fileSystems(); 375 const QList<FileSystem> &fs = storageInfo.fileSystems();
376 QListIterator<FileSystem> it ( fs ); 376 QListIterator<FileSystem> it ( fs );
377 QString storage; 377 QString storage;
378 for( ; it.current(); ++it ){ 378 for( ; it.current(); ++it ){
379 const QString name = (*it)->name(); 379 const QString name = (*it)->name();
380 const QString path = (*it)->path(); 380 const QString path = (*it)->path();
381 const QString disk = (*it)->disk(); 381 const QString disk = (*it)->disk();
382// const QString options = (*it)->options(); 382// const QString options = (*it)->options();
383 if( selectedText == disk) { 383 if( selectedText == disk) {
384 diskS = disk; nameS= name; 384 diskS = disk; nameS= name;
385 mountPointLineEdit->setText(path); 385 mountPointLineEdit->setText(path);
386 long mult = (*it)->blockSize() / 1024; 386 long mult = (*it)->blockSize() / 1024;
387 long div = 1024 / (*it)->blockSize(); 387 long div = 1024 / (*it)->blockSize();
388 if ( !mult ) mult = 1; 388 if ( !mult ) mult = 1;
389 if ( !div ) div = 1; 389 if ( !div ) div = 1;
390 long total = (*it)->totalBlocks() * mult / div; 390 long total = (*it)->totalBlocks() * mult / div;
391 long totalMb = total/1024; 391 long totalMb = total/1024;
392 long avail = (*it)->availBlocks() * mult / div; 392 long avail = (*it)->availBlocks() * mult / div;
393 long availMb = avail/1024; 393 long availMb = avail/1024;
394 long used = total - avail; 394 long used = total - avail;
395 long usedMb = used/1024; 395 long usedMb = used/1024;
396 totalS.sprintf(tr("Total: %1 kB ( %d mB)\n").arg( total ), totalMb ); 396 totalS.sprintf(tr("Total: %1 kB ( %d mB)\n").arg( total ), totalMb );
397 usedS.sprintf(tr("Used: %1 kB ( %d mB)\n").arg(used) ,usedMb); 397 usedS.sprintf(tr("Used: %1 kB ( %d mB)\n").arg(used) ,usedMb);
398 avS.sprintf( tr("Available: %1 kB ( %d mB)").arg(avail), availMb ); 398 avS.sprintf( tr("Available: %1 kB ( %d mB)").arg(avail), availMb );
399 } 399 }
400 } 400 }
401 fsType = getFileSystemType((const QString &)selectedText); 401 fsType = getFileSystemType((const QString &)selectedText);
402 402
403 TextLabel5->setText(tr("Type: %1\nFormatted with %1\n%1, %1, %1").arg( nameS).arg( fsType).arg(totalS).arg( usedS).arg( avS )); 403 TextLabel5->setText(tr("Type: %1\nFormatted with %2\n%3, %4, %5").arg( nameS).arg( fsType).arg(totalS).arg( usedS).arg( avS ));
404 TextLabel5->setTextFormat( Qt::RichText );
404// storageComboSelected(0); 405// storageComboSelected(0);
405} 406}
406 407
407void FormatterApp::cleanUp() { 408void FormatterApp::cleanUp() {
408 409
409} 410}
410 411
411 412
412void FormatterApp::editFstab() { 413void FormatterApp::editFstab() {
413 QCopEnvelope e("QPE/Application/textedit","setDocument(QString)"); 414 QCopEnvelope e("QPE/Application/textedit","setDocument(QString)");
414 e << (const QString &)"/etc/fstab"; 415 e << (const QString &)"/etc/fstab";
415} 416}
416 417
417void FormatterApp::parsetab(const QString &fileName) { 418void FormatterApp::parsetab(const QString &fileName) {
418 419
419 fileSystemTypeList.clear(); 420 fileSystemTypeList.clear();
420 fsList.clear(); 421 fsList.clear();
421 struct mntent *me; 422 struct mntent *me;
422// if(fileName == "/etc/mtab") { 423// if(fileName == "/etc/mtab") {
423 FILE *mntfp = setmntent( fileName.latin1(), "r" ); 424 FILE *mntfp = setmntent( fileName.latin1(), "r" );
424 if ( mntfp ) { 425 if ( mntfp ) {
425 while ( (me = getmntent( mntfp )) != 0 ) { 426 while ( (me = getmntent( mntfp )) != 0 ) {
426 QString deviceName = me->mnt_fsname; 427 QString deviceName = me->mnt_fsname;
427 QString filesystemType = me->mnt_type; 428 QString filesystemType = me->mnt_type;
428 if(deviceName != "none") { 429 if(deviceName != "none") {
429 if( fsList.contains(filesystemType) == 0 430 if( fsList.contains(filesystemType) == 0
430 & filesystemType.find("proc",0,TRUE) == -1 431 & filesystemType.find("proc",0,TRUE) == -1
431 & filesystemType.find("cramfs",0,TRUE) == -1 432 & filesystemType.find("cramfs",0,TRUE) == -1
432 & filesystemType.find("auto",0,TRUE) == -1) 433 & filesystemType.find("auto",0,TRUE) == -1)
433 fsList << filesystemType; 434 fsList << filesystemType;
434 deviceList << deviceName; 435 deviceList << deviceName;
435 qDebug(deviceName+"::"+filesystemType); 436 qDebug(deviceName+"::"+filesystemType);
436 fileSystemTypeList << deviceName+"::"+filesystemType; 437 fileSystemTypeList << deviceName+"::"+filesystemType;
437 } 438 }
438 } 439 }
439 } 440 }
440 endmntent( mntfp ); 441 endmntent( mntfp );
441// } else if(fileName == "/etc/fstab") { 442// } else if(fileName == "/etc/fstab") {
442// QFile f("/etc/fstab"); 443// QFile f("/etc/fstab");
443// if ( f.open(IO_ReadOnly) ) { 444// if ( f.open(IO_ReadOnly) ) {
444// QTextStream t (&f); 445// QTextStream t (&f);
445// QString s; 446// QString s;
446// while (! t.eof()) { 447// while (! t.eof()) {
447// s=t.readLine(); 448// s=t.readLine();
448// s=s.simplifyWhiteSpace(); 449// s=s.simplifyWhiteSpace();
449// if ( (!s.isEmpty() ) && (s.find(" ")!=0) ) { 450// if ( (!s.isEmpty() ) && (s.find(" ")!=0) ) {
450// // = me->mnt_fsname; 451// // = me->mnt_fsname;
451// QString filesystemType = me->mnt_type; 452// QString filesystemType = me->mnt_type;
452// QString deviceName = s.left(0,s.find(BLANK) ); 453// QString deviceName = s.left(0,s.find(BLANK) );
453// s=s.remove(0,s.find(BLANK)+1 ); // devicename 454// s=s.remove(0,s.find(BLANK)+1 ); // devicename
454 455
455// s=s.remove(0,s.find(BLANK)+1 ); // mountpoint 456// s=s.remove(0,s.find(BLANK)+1 ); // mountpoint
456// QStringt mountPoint= s.left(0,s.find(BLANK) ); 457// QStringt mountPoint= s.left(0,s.find(BLANK) );
457// s=s.remove(0,s.find(BLANK)+1 ); // fs 458// s=s.remove(0,s.find(BLANK)+1 ); // fs
458// QString filesystemType= s.left(0,s.find(BLANK) ); 459// QString filesystemType= s.left(0,s.find(BLANK) );
459// } 460// }
460// } 461// }
461// } 462// }
462// f.close(); 463// f.close();
463// } 464// }
464} 465}
465 466
466QString FormatterApp::getFileSystemType(const QString &currentText) { 467QString FormatterApp::getFileSystemType(const QString &currentText) {
467 468
468 parsetab("/etc/mtab"); //why did TT forget filesystem type? 469 parsetab("/etc/mtab"); //why did TT forget filesystem type?
469 470
470 for ( QStringList::Iterator it = fileSystemTypeList.begin(); it != fileSystemTypeList.end(); ++it ) { 471 for ( QStringList::Iterator it = fileSystemTypeList.begin(); it != fileSystemTypeList.end(); ++it ) {
471 QString temp = (*it); 472 QString temp = (*it);
472 if( temp.find( currentText,0,TRUE) != -1) { 473 if( temp.find( currentText,0,TRUE) != -1) {
473 return temp.right( temp.length() - temp.find("::",0,TRUE) - 2); 474 return temp.right( temp.length() - temp.find("::",0,TRUE) - 2);
474// qDebug(fsType); 475// qDebug(fsType);
475 } 476 }
476 } 477 }
477 return ""; 478 return "";
478} 479}
479 480
480bool FormatterApp::doFsck() { 481bool FormatterApp::doFsck() {
481 482
482 Output *outDlg; 483 Output *outDlg;
483 QString selectedDevice; 484 QString selectedDevice;
484// #if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) 485// #if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
485 selectedDevice = deviceComboBox->currentText(); 486 selectedDevice = deviceComboBox->currentText();
486 QString mountPoint = mountPointLineEdit->text(); 487 QString mountPoint = mountPointLineEdit->text();
487 QString umountS = "umount -v "+mountPoint+" 2>&1"; 488 QString umountS = "umount -v "+mountPoint+" 2>&1";
488 QString remountS = "mount -v "+mountPoint+" 2>&1"; 489 QString remountS = "mount -v "+mountPoint+" 2>&1";
489// #else 490// #else
490// // for testing 491// // for testing
491// // currentText = diskDevice = "/dev/fd0"; 492// // currentText = diskDevice = "/dev/fd0";
492// QString umountS = "umount -v /floppy 2>&1"; 493// QString umountS = "umount -v /floppy 2>&1";
493// QString remountS = "mount -v /floppy 2>&1"; 494// QString remountS = "mount -v /floppy 2>&1";
494// selectedDevice ="/dev/fd0"; 495// selectedDevice ="/dev/fd0";
495 496
496// #endif 497// #endif
497 498
498 QString fsType = getFileSystemType((const QString &)selectedDevice); 499 QString fsType = getFileSystemType((const QString &)selectedDevice);
499 QString cmd; 500 QString cmd;
500 qDebug( selectedDevice +" "+ fsType); 501 qDebug( selectedDevice +" "+ fsType);
501 if(fsType == "vfat") cmd = "dosfsck -vy "; 502 if(fsType == "vfat") cmd = "dosfsck -vy ";
502 if(fsType == "ext2") cmd = "e2fsck -cpvy "; 503 if(fsType == "ext2") cmd = "e2fsck -cpvy ";
503 cmd += selectedDevice + " 2>&1"; 504 cmd += selectedDevice + " 2>&1";
504 505
505 outDlg = new Output(this, tr("Formatter Output"),FALSE); 506 outDlg = new Output(this, tr("Formatter Output"),FALSE);
506 outDlg->showMaximized(); 507 outDlg->showMaximized();
507 outDlg->show(); 508 outDlg->show();
508 qApp->processEvents(); 509 qApp->processEvents();
509 FILE *fp; 510 FILE *fp;
510 char line[130]; 511 char line[130];
511 outDlg->OutputEdit->append( tr("Trying to umount.")); 512 outDlg->OutputEdit->append( tr("Trying to umount."));
512 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 513 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
513 514
514 sleep(1); 515 sleep(1);
515// qDebug("Command is "+umountS); 516// qDebug("Command is "+umountS);
516 fp = popen( (const char *) umountS, "r"); 517 fp = popen( (const char *) umountS, "r");
517// qDebug("%d", fp); 518// qDebug("%d", fp);
518 if ( !fp ) { 519 if ( !fp ) {
519 qDebug("Could not execute '" + umountS + "'!\n" +(QString)strerror(errno)); 520 qDebug("Could not execute '" + umountS + "'!\n" +(QString)strerror(errno));
520 QMessageBox::warning( this, tr("Formatter"), tr("umount failed!"), tr("&OK") ); 521 QMessageBox::warning( this, tr("Formatter"), tr("umount failed!"), tr("&OK") );
521 pclose(fp); 522 pclose(fp);
522 return false; 523 return false;
523 } else { 524 } else {
524// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully umounted.")); 525// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully umounted."));
525// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 526// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
526 while ( fgets( line, sizeof line, fp)) { 527 while ( fgets( line, sizeof line, fp)) {
527 if( ((QString)line).find("busy",0,TRUE) != -1) { 528 if( ((QString)line).find("busy",0,TRUE) != -1) {
528 qDebug("Could not find '" + umountS); 529 qDebug("Could not find '" + umountS);
529 QMessageBox::warning( this, tr("Formatter"), 530 QMessageBox::warning( this, tr("Formatter"),
530 tr("Could not umount.\nDevice is busy!"), tr("&OK") ); 531 tr("Could not umount.\nDevice is busy!"), tr("&OK") );
531 pclose(fp); 532 pclose(fp);
532 return false; 533 return false;
533 } else { 534 } else {
534 QString lineStr = line; 535 QString lineStr = line;
535 lineStr=lineStr.left(lineStr.length()-1); 536 lineStr=lineStr.left(lineStr.length()-1);
536 outDlg->OutputEdit->append(lineStr); 537 outDlg->OutputEdit->append(lineStr);
537 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 538 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
538 } 539 }
539 } 540 }
540 } 541 }
541 pclose(fp); 542 pclose(fp);
542///////////////////////////////////// 543/////////////////////////////////////
543 fp = popen( (const char *) cmd, "r"); 544 fp = popen( (const char *) cmd, "r");
544 while ( fgets( line, sizeof line, fp)) { 545 while ( fgets( line, sizeof line, fp)) {
545 if( ((QString)line).find("No such device",0,TRUE) != -1) { 546 if( ((QString)line).find("No such device",0,TRUE) != -1) {
546 qDebug("No such device '" + umountS); 547 qDebug("No such device '" + umountS);
547 QMessageBox::warning( this, tr("Formatter"), tr("No such device!"), tr("&OK") ); 548 QMessageBox::warning( this, tr("Formatter"), tr("No such device!"), tr("&OK") );
548 pclose(fp); 549 pclose(fp);
549// outDlg->OutputEdit->append("No such device"); 550// outDlg->OutputEdit->append("No such device");
550// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 551// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
551 return false; 552 return false;
552 } else { 553 } else {
553 QString lineStr = line; 554 QString lineStr = line;
554 lineStr=lineStr.left(lineStr.length()-1); 555 lineStr=lineStr.left(lineStr.length()-1);
555 outDlg->OutputEdit->append(lineStr); 556 outDlg->OutputEdit->append(lineStr);
556 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 557 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
557 } 558 }
558 } 559 }
559 outDlg->OutputEdit->append(tr("You can now close the output window.")); 560 outDlg->OutputEdit->append(tr("You can now close the output window."));
560 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 561 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
561// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully formatted.")); 562// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully formatted."));
562// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 563// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
563 pclose(fp); 564 pclose(fp);
564 565
565///////////////////////////////////////// 566/////////////////////////////////////////
566 567
567 return true; 568 return true;
568} 569}
569 570
570bool FormatterApp::doFsckCheck() { 571bool FormatterApp::doFsckCheck() {
571 572
572 return FALSE; 573 return FALSE;
573} 574}
574 575
575int FormatterApp::formatCheck(const QString &) { 576int FormatterApp::formatCheck(const QString &) {
576 577
577 return -1; 578 return -1;
578} 579}
579 580
580int FormatterApp::runCommand(const QString &) { 581int FormatterApp::runCommand(const QString &) {
581 582
582 return -1; 583 return -1;
583} 584}