summaryrefslogtreecommitdiff
authorwimpie <wimpie>2005-01-12 00:29:48 (UTC)
committer wimpie <wimpie>2005-01-12 00:29:48 (UTC)
commita846a0be197d3a6ff7f8c76a3ba322db0da7d058 (patch) (unidiff)
tree0db1eccb73b0756ff49029dcfa71ff1a3699cab0
parent4b1d4fc9f4170ec22d196dd352cae5d9c1ecb232 (diff)
downloadopie-a846a0be197d3a6ff7f8c76a3ba322db0da7d058.zip
opie-a846a0be197d3a6ff7f8c76a3ba322db0da7d058.tar.gz
opie-a846a0be197d3a6ff7f8c76a3ba322db0da7d058.tar.bz2
Fixed Crash in editing new profiles
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings2/editconnection.cpp17
-rw-r--r--noncore/settings/networksettings2/nsdata.cpp2
2 files changed, 14 insertions, 5 deletions
diff --git a/noncore/settings/networksettings2/editconnection.cpp b/noncore/settings/networksettings2/editconnection.cpp
index 6ab2dd6..bda9d7e 100644
--- a/noncore/settings/networksettings2/editconnection.cpp
+++ b/noncore/settings/networksettings2/editconnection.cpp
@@ -1,631 +1,640 @@
1#include <opie2/odebug.h> 1#include <opie2/odebug.h>
2#include <qlistview.h> 2#include <qlistview.h>
3#include <qwidgetstack.h> 3#include <qwidgetstack.h>
4#include <qframe.h> 4#include <qframe.h>
5#include <qcombobox.h> 5#include <qcombobox.h>
6#include <qtabwidget.h> 6#include <qtabwidget.h>
7#include <qmessagebox.h> 7#include <qmessagebox.h>
8#include <qpushbutton.h> 8#include <qpushbutton.h>
9#include <qlineedit.h> 9#include <qlineedit.h>
10#include <qheader.h> 10#include <qheader.h>
11#include <qpainter.h> 11#include <qpainter.h>
12#include <qcheckbox.h> 12#include <qcheckbox.h>
13#include <qlabel.h> 13#include <qlabel.h>
14 14
15#include "editconnection.h" 15#include "editconnection.h"
16#include "resources.h" 16#include "resources.h"
17#include "netnode.h" 17#include "netnode.h"
18 18
19// 19//
20// 20//
21// THESE TO GIVE BETTER FEEDBACK ABOUT DISABLED ITEMS 21// THESE TO GIVE BETTER FEEDBACK ABOUT DISABLED ITEMS
22// 22//
23// 23//
24 24
25class MyQCheckListItem : public QCheckListItem 25class MyQCheckListItem : public QCheckListItem
26{ 26{
27public: 27public:
28 MyQCheckListItem( QListView *parent, const QString & S, Type T ) : 28 MyQCheckListItem( QListView *parent, const QString & S, Type T ) :
29 QCheckListItem( parent, S, T ) { } 29 QCheckListItem( parent, S, T ) { }
30 MyQCheckListItem( QCheckListItem *parent, const QString & S, Type T ) : 30 MyQCheckListItem( QCheckListItem *parent, const QString & S, Type T ) :
31 QCheckListItem( parent, S, T ) { } 31 QCheckListItem( parent, S, T ) { }
32 MyQCheckListItem( QListViewItem *parent, const QString & S, Type T ) : 32 MyQCheckListItem( QListViewItem *parent, const QString & S, Type T ) :
33 QCheckListItem( parent, S, T ) { } 33 QCheckListItem( parent, S, T ) { }
34 34
35 MyQCheckListItem( QListView *parent, const QString & S ) : 35 MyQCheckListItem( QListView *parent, const QString & S ) :
36 QCheckListItem( parent, S, QCheckListItem::Controller ) { } 36 QCheckListItem( parent, S, QCheckListItem::Controller ) { }
37 MyQCheckListItem( QCheckListItem *parent, const QString & S ) : 37 MyQCheckListItem( QCheckListItem *parent, const QString & S ) :
38 QCheckListItem( parent, S, QCheckListItem::Controller ) { } 38 QCheckListItem( parent, S, QCheckListItem::Controller ) { }
39 MyQCheckListItem( QListViewItem *parent, const QString & S ) : 39 MyQCheckListItem( QListViewItem *parent, const QString & S ) :
40 QCheckListItem( parent, S, QCheckListItem::Controller ) { } 40 QCheckListItem( parent, S, QCheckListItem::Controller ) { }
41 41
42 virtual void paintCell( QPainter *p, const QColorGroup &cg, 42 virtual void paintCell( QPainter *p, const QColorGroup &cg,
43 int column, int width, int alignment ); 43 int column, int width, int alignment );
44 44
45}; 45};
46 46
47void MyQCheckListItem::paintCell( QPainter *p, const QColorGroup &cg, 47void MyQCheckListItem::paintCell( QPainter *p, const QColorGroup &cg,
48 int column, int width, int alignment ) 48 int column, int width, int alignment )
49{ 49{
50 QColorGroup _cg( cg ); 50 QColorGroup _cg( cg );
51 QColor c = _cg.text(); 51 QColor c = _cg.text();
52 if ( ! isSelectable() ) 52 if ( ! isSelectable() )
53 _cg.setColor( QColorGroup::Text, Qt::lightGray ); 53 _cg.setColor( QColorGroup::Text, Qt::lightGray );
54 QCheckListItem::paintCell( p, _cg, column, width, alignment ); 54 QCheckListItem::paintCell( p, _cg, column, width, alignment );
55 _cg.setColor( QColorGroup::Text, c ); 55 _cg.setColor( QColorGroup::Text, c );
56} 56}
57 57
58class MyQListViewItem : public QListViewItem 58class MyQListViewItem : public QListViewItem
59{ 59{
60public: 60public:
61 MyQListViewItem( QListView *parent, const QString & S ) : 61 MyQListViewItem( QListView *parent, const QString & S ) :
62 QListViewItem( parent, S ) { } 62 QListViewItem( parent, S ) { }
63 MyQListViewItem( QListViewItem *parent, const QString & S ) : 63 MyQListViewItem( QListViewItem *parent, const QString & S ) :
64 QListViewItem( parent, S ) { } 64 QListViewItem( parent, S ) { }
65 65
66 virtual void paintCell( QPainter *p, const QColorGroup &cg, 66 virtual void paintCell( QPainter *p, const QColorGroup &cg,
67 int column, int width, int alignment ); 67 int column, int width, int alignment );
68 68
69}; 69};
70 70
71void MyQListViewItem::paintCell( QPainter *p, const QColorGroup &cg, 71void MyQListViewItem::paintCell( QPainter *p, const QColorGroup &cg,
72 int column, int width, int alignment ) 72 int column, int width, int alignment )
73{ 73{
74 QColorGroup _cg( cg ); 74 QColorGroup _cg( cg );
75 QColor c = _cg.text(); 75 QColor c = _cg.text();
76 if ( ! isSelectable() ) 76 if ( ! isSelectable() )
77 _cg.setColor( QColorGroup::Text, Qt::lightGray ); 77 _cg.setColor( QColorGroup::Text, Qt::lightGray );
78 QListViewItem::paintCell( p, _cg, column, width, alignment ); 78 QListViewItem::paintCell( p, _cg, column, width, alignment );
79 _cg.setColor( QColorGroup::Text, c ); 79 _cg.setColor( QColorGroup::Text, c );
80} 80}
81 81
82// 82//
83// 83//
84// REAL GUI 84// REAL GUI
85// 85//
86// 86//
87 87
88bool EditNetworkSetup::AutoCollapse = 1; 88bool EditNetworkSetup::AutoCollapse = 1;
89 89
90EditNetworkSetup::EditNetworkSetup( QWidget* parent ) : 90EditNetworkSetup::EditNetworkSetup( QWidget* parent ) :
91 EditNetworkSetupGUI( parent, 0, TRUE ), TmpCollection() { 91 EditNetworkSetupGUI( parent, 0, TRUE ), TmpCollection() {
92 92
93 Tab_TB->setTabEnabled( Setup_FRM, FALSE ); 93 Tab_TB->setTabEnabled( Setup_FRM, FALSE );
94 Setup_FRM->setEnabled( FALSE ); 94 Setup_FRM->setEnabled( FALSE );
95 95
96 TmpIsValid = 0; 96 TmpIsValid = 0;
97 SelectedNodes = 0; 97 SelectedNodes = 0;
98 98
99 AutoCollapse_CB->setChecked( AutoCollapse ); 99 AutoCollapse_CB->setChecked( AutoCollapse );
100 100
101 Mapping = new QPtrDict<ANetNode>; 101 Mapping = new QPtrDict<ANetNode>;
102 Mapping->setAutoDelete( FALSE ); 102 Mapping->setAutoDelete( FALSE );
103 Nodes_LV->header()->hide(); 103 Nodes_LV->header()->hide();
104 // popluate tree with all NetNodes 104 // popluate tree with all NetNodes
105 buildFullTree(); 105 buildFullTree();
106} 106}
107 107
108NetworkSetup * EditNetworkSetup::getTmpCollection( void ) { 108NetworkSetup * EditNetworkSetup::getTmpCollection( void ) {
109 109
110 if( TmpIsValid ) 110 if( TmpIsValid )
111 // content is stil OK 111 // content is stil OK
112 return &(TmpCollection); 112 return &(TmpCollection);
113 113
114 // reset collection -> delete all NEW NetNodes 114 // reset collection -> delete all NEW NetNodes
115 for( QListIterator<ANetNodeInstance> it(TmpCollection); 115 for( QListIterator<ANetNodeInstance> it(TmpCollection);
116 it.current(); 116 it.current();
117 ++it ) { 117 ++it ) {
118 if( it.current()->isNew() ) { 118 if( it.current()->isNew() ) {
119 delete it.current(); 119 delete it.current();
120 } 120 }
121 } 121 }
122 122
123 TmpCollection.clear(); 123 TmpCollection.clear();
124 TmpCollection.copyFrom( *SelectedNodes ); 124 if( SelectedNodes ) {
125 // initialize like original
126 TmpCollection.copyFrom( *SelectedNodes );
127 }
125 128
126 // update content 129 // update content
127 QListViewItem * it = Nodes_LV->firstChild(); 130 QListViewItem * it = Nodes_LV->firstChild();
128 ANetNode * NN; 131 ANetNode * NN;
129 132
130 // start iter (if there is a collection) 133 // start iter (if there is a collection)
131 /* 134 /*
132 135
133 a node collection is sorted from the toplevel 136 a node collection is sorted from the toplevel
134 node to the deepest node 137 node to the deepest node
135 138
136 */ 139 */
137 ANetNodeInstance * NNI = 140 ANetNodeInstance * NNI =
138 (SelectedNodes) ? SelectedNodes->first() : 0 ; 141 (SelectedNodes) ? SelectedNodes->first() : 0 ;
139 142
140 TmpCollection.setModified( 0 ); 143 TmpCollection.setModified( 0 );
141 144
142 // the listview always starts with the toplevel 145 // the listview always starts with the toplevel
143 // hierarchy. This is always a controller item 146 // hierarchy. This is always a controller item
144 while ( it ) { 147 while ( it ) {
145 NN = (*Mapping)[it]; 148 NN = (*Mapping)[it];
146 if( NN == 0 ) { 149 if( NN == 0 ) {
147 // this item is a controller -> 150 // this item is a controller ->
148 // has radio items as children -> 151 // has radio items as children ->
149 // find selected one 152 // find selected one
150 it = it->firstChild(); 153 it = it->firstChild();
151 while( it ) { 154 while( it ) {
152 if( ((QCheckListItem *)it)->isOn() ) { 155 if( ((QCheckListItem *)it)->isOn() ) {
153 // this radio is selected -> go deeper 156 // this radio is selected -> go deeper
154 break; 157 break;
155 } 158 }
156 it = it->nextSibling(); 159 it = it->nextSibling();
157 } 160 }
158 161
159 if( ! it ) { 162 if( ! it ) {
160 TmpIsValid = 0; 163 TmpIsValid = 0;
161 return 0; 164 return 0;
162 } 165 }
163 166
164 // it now contains selected radio 167 // it now contains selected radio
165 NN = (*Mapping)[it]; 168 NN = (*Mapping)[it];
166 } 169 }
167 170
168 // NN here contains the netnode of the 171 // NN here contains the netnode of the
169 // current item -> this node needs to 172 // current item -> this node needs to
170 // be stored in the collection 173 // be stored in the collection
171 if( NNI == 0 || 174 if( NNI == 0 ||
172 it->text(0) != NNI->nodeClass()->name() ) { 175 it->text(0) != NNI->nodeClass()->name() ) {
173 // new item not in previous collection 176 // new item not in previous collection
174 ANetNodeInstance * NNI = NN->createInstance(); 177 ANetNodeInstance * NNI = NN->createInstance();
175 NNI->initialize(); 178 NNI->initialize();
176 // this node type not in collection 179 // this node type not in collection
177 TmpCollection.append( NNI ); 180 TmpCollection.append( NNI );
178 // master collection changed because new item in it 181 // master collection changed because new item in it
179 TmpCollection.setModified( 1 ); 182 TmpCollection.setModified( 1 );
180 // no more valid items in old list 183 // no more valid items in old list
181 NNI = 0; 184 NNI = 0;
182 } else { 185 } else {
183 // already in list -> copy pointer 186 // already in list -> copy pointer
184 TmpCollection.append( NNI ); 187 TmpCollection.append( NNI );
185 NNI = SelectedNodes->next(); 188 NNI = SelectedNodes->next();
186 } 189 }
187 190
188 // go deeper to next level 191 // go deeper to next level
189 // this level is can be a new controller 192 // this level is can be a new controller
190 // or an item 193 // or an item
191 it = it->firstChild(); 194 it = it->firstChild();
192 } 195 }
193 196
194 TmpIsValid = 1; 197 TmpIsValid = 1;
195 return &(TmpCollection); 198 return &(TmpCollection);
196} 199}
197 200
198// pass a NetworkSetup NetworkSetup to be edited 201// pass a NetworkSetup NetworkSetup to be edited
199void EditNetworkSetup::setNetworkSetup( NetworkSetup * NC ) { 202void EditNetworkSetup::setNetworkSetup( NetworkSetup * NC ) {
200 ANetNodeInstance * NNI; 203 ANetNodeInstance * NNI;
201 ANetNode * NN; 204 ANetNode * NN;
202 205
203 SelectedNodes = NC; 206 SelectedNodes = NC;
204 Name_LE->setText( NC->name() ); 207 Name_LE->setText( NC->name() );
205 NNI = NC->first(); 208 NNI = NC->first();
206 209
207 // show configure tabl 210 // show configure tabl
208 Tab_TB->setCurrentPage( 1 ); 211 Tab_TB->setCurrentPage( 1 );
209 212
210 // valid colledction 213 // valid colledction
211 Tab_TB->setTabEnabled( Setup_FRM, FALSE ); 214 Tab_TB->setTabEnabled( Setup_FRM, FALSE );
212 Setup_FRM->setEnabled( FALSE ); 215 Setup_FRM->setEnabled( FALSE );
213 216
214 // select items in collection 217 // select items in collection
215 QListViewItem * it = Nodes_LV->firstChild(); 218 QListViewItem * it = Nodes_LV->firstChild();
216 bool Found; 219 bool Found;
217 220
218 TmpIsValid = 0; 221 TmpIsValid = 0;
219 222
220 while ( it ) { 223 while ( it ) {
221 NN = (*Mapping)[it]; 224 NN = (*Mapping)[it];
222 if( NN == 0 ) { 225 if( NN == 0 ) {
223 // this item is a controller -> 226 // this item is a controller ->
224 // has radio items as children -> 227 // has radio items as children ->
225 // find selected one 228 // find selected one
226 it = it->firstChild(); 229 it = it->firstChild();
227 Found = 0; 230 Found = 0;
228 while( it ) { 231 while( it ) {
229 if( NNI && it->text(0) == NNI->nodeClass()->name() ) { 232 if( NNI && it->text(0) == NNI->nodeClass()->name() ) {
230 // this radio is part of the collection 233 // this radio is part of the collection
231 ((QCheckListItem *)it)->setOn( 1 ); 234 ((QCheckListItem *)it)->setOn( 1 );
232 updateGUI( it, NNI->nodeClass() ); 235 updateGUI( it, NNI->nodeClass() );
233 // check its children 236 // check its children
234 Found = 1; 237 Found = 1;
235 it = it->firstChild(); 238 it = it->firstChild();
236 NNI = SelectedNodes->next(); 239 NNI = SelectedNodes->next();
237 // do not bother to check other items 240 // do not bother to check other items
238 break; 241 break;
239 } 242 }
240 it = it->nextSibling(); 243 it = it->nextSibling();
241 } 244 }
242 245
243 if( ! Found ) { 246 if( ! Found ) {
244 // this means that this level is NOT present in collection 247 // this means that this level is NOT present in collection
245 // probably INCOMPATIBEL collection OR Missing plugin 248 // probably INCOMPATIBEL collection OR Missing plugin
246 QMessageBox::warning( 249 QMessageBox::warning(
247 0, 250 0,
248 tr( "Error presentig NetworkSetup" ), 251 tr( "Error presentig NetworkSetup" ),
249 tr( "<p>Old NetworkSetup or missing plugin \"<i>%1</i>\"</p>" ). 252 tr( "<p>Old NetworkSetup or missing plugin \"<i>%1</i>\"</p>" ).
250 arg(NNI->nodeClass()->name()) ); 253 arg(NNI->nodeClass()->name()) );
251 return; 254 return;
252 } 255 }
253 256
254 // it now contains selected radio 257 // it now contains selected radio
255 NN = (*Mapping)[it]; 258 NN = (*Mapping)[it];
256 } else { 259 } else {
257 // automatic selection 260 // automatic selection
258 if( NNI == 0 || it->text(0) != NNI->nodeClass()->name() ) { 261 if( NNI == 0 || it->text(0) != NNI->nodeClass()->name() ) {
259 // should exist and be the same 262 // should exist and be the same
260 if( NNI ) { 263 if( NNI ) {
261 QMessageBox::warning( 264 QMessageBox::warning(
262 0, 265 0,
263 tr( "Error presentig NetworkSetup" ), 266 tr( "Error presentig NetworkSetup" ),
264 tr( "<p>Old NetworkSetup or missing plugin \"<i>%1</i>\"</p>" ). 267 tr( "<p>Old NetworkSetup or missing plugin \"<i>%1</i>\"</p>" ).
265 arg(NNI->nodeClass()->name()) ); 268 arg(NNI->nodeClass()->name()) );
266 } else { 269 } else {
267 QMessageBox::warning( 270 QMessageBox::warning(
268 0, 271 0,
269 tr( "Error presentig NetworkSetup" ), 272 tr( "Error presentig NetworkSetup" ),
270 tr( "<p>Missing NetworkSetup\"<i>%1</i>\"</p>" ). 273 tr( "<p>Missing NetworkSetup\"<i>%1</i>\"</p>" ).
271 arg(it->text(0)) ); 274 arg(it->text(0)) );
272 } 275 }
273 return; 276 return;
274 } 277 }
275 it = it->firstChild(); 278 it = it->firstChild();
276 } 279 }
277 } 280 }
278} 281}
279 282
280// get result of editing (either new OR updated collection 283// get result of editing (either new OR updated collection
281NetworkSetup * EditNetworkSetup::networkSetup( void ) { 284NetworkSetup * EditNetworkSetup::networkSetup( void ) {
282 285
283 if( SelectedNodes == 0 ) { 286 if( SelectedNodes == 0 ) {
284 // new collection 287 // new collection
285 SelectedNodes = new NetworkSetup; 288 SelectedNodes = new NetworkSetup;
286 } 289 }
287 290
288 // clean out old entries 291 // clean out old entries
289 SelectedNodes->clear(); 292 SelectedNodes->clear();
290 293
291 // transfer 294 // transfer
292 for( QListIterator<ANetNodeInstance> it(TmpCollection); 295 for( QListIterator<ANetNodeInstance> it(TmpCollection);
293 it.current(); 296 it.current();
294 ++it ) { 297 ++it ) {
295 SelectedNodes->append( it.current() ); 298 SelectedNodes->append( it.current() );
296 } 299 }
297 300
298 if( TmpCollection.isModified() ) 301 if( TmpCollection.isModified() )
299 SelectedNodes->setModified( 1 ); 302 SelectedNodes->setModified( 1 );
300 303
301 if( SelectedNodes->name() != Name_LE->text() ) { 304 if( SelectedNodes->name() != Name_LE->text() ) {
302 SelectedNodes->setName( Name_LE->text() ); 305 SelectedNodes->setName( Name_LE->text() );
303 SelectedNodes->setModified( 1 ); 306 SelectedNodes->setModified( 1 );
304 } 307 }
305 308
306 return SelectedNodes; 309 return SelectedNodes;
307} 310}
308 311
309// Build device tree -> start 312// Build device tree -> start
310void EditNetworkSetup::buildFullTree( void ) { 313void EditNetworkSetup::buildFullTree( void ) {
311 ANetNode * NN; 314 ANetNode * NN;
312 315
313 // toplevel item 316 // toplevel item
314 MyQCheckListItem * TheTop = new MyQCheckListItem( 317 MyQCheckListItem * TheTop = new MyQCheckListItem(
315 Nodes_LV, 318 Nodes_LV,
316 NSResources->netNode2Name("fullsetup"), 319 NSResources->netNode2Name("fullsetup"),
317 QCheckListItem::Controller ); 320 QCheckListItem::Controller );
318 TheTop->setOpen( TRUE ); 321 TheTop->setOpen( TRUE );
319 Description_LBL->setText( 322 Description_LBL->setText(
320 NSResources->netNode2Description( "fullsetup" ) ); 323 NSResources->netNode2Description( "fullsetup" ) );
321 Nodes_LV->setSelected( TheTop, TRUE ); 324 Nodes_LV->setSelected( TheTop, TRUE );
322 325
323 // find all Nodes that are toplevel nodes -> ie provide 326 // find all Nodes that are toplevel nodes -> ie provide
324 // TCP/IP NetworkSetup 327 // TCP/IP NetworkSetup
325 for( QDictIterator<ANetNode> Iter(NSResources->netNodes()); 328 for( QDictIterator<ANetNode> Iter(NSResources->netNodes());
326 Iter.current(); 329 Iter.current();
327 ++Iter ) { 330 ++Iter ) {
328 NN = Iter.current(); 331 NN = Iter.current();
329 332
330 if( ! NN->isToplevel() ) { 333 if( ! NN->isToplevel() ) {
331 continue; 334 continue;
332 } 335 }
333 336
334 MyQCheckListItem * it = new MyQCheckListItem( TheTop, 337 MyQCheckListItem * it = new MyQCheckListItem( TheTop,
335 NN->name(), 338 NN->name(),
336 QCheckListItem::RadioButton ); 339 QCheckListItem::RadioButton );
337 it->setPixmap( 0, 340 it->setPixmap( 0,
338 NSResources->getPixmap( NN->pixmapName() ) 341 NSResources->getPixmap( NN->pixmapName() )
339 ); 342 );
340 // remember that this node maps to this listitem 343 // remember that this node maps to this listitem
341 Mapping->insert( it, NN ); 344 Mapping->insert( it, NN );
342 buildSubTree( it, NN ); 345 buildSubTree( it, NN );
343 } 346 }
344} 347}
345 348
346// Build device tree -> help function 349// Build device tree -> help function
347void EditNetworkSetup::buildSubTree( QListViewItem * it, ANetNode *NN ) { 350void EditNetworkSetup::buildSubTree( QListViewItem * it, ANetNode *NN ) {
348 ANetNode::NetNodeList & NNL = NN->alternatives(); 351 ANetNode::NetNodeList & NNL = NN->alternatives();
349 352
350 if( NNL.size() > 1 ) { 353 if( NNL.size() > 1 ) {
351 // this node has alternatives -> needs radio buttons 354 // this node has alternatives -> needs radio buttons
352 it = new MyQCheckListItem( 355 it = new MyQCheckListItem(
353 it, 356 it,
354 NSResources->netNode2Name(NN->needs()[0]), 357 NSResources->netNode2Name(NN->needs()[0]),
355 QCheckListItem::Controller ); 358 QCheckListItem::Controller );
356 it->setSelectable( FALSE ); 359 it->setSelectable( FALSE );
357 } 360 }
358 361
359 for ( unsigned int i=0; i < NNL.size(); i++ ) { 362 for ( unsigned int i=0; i < NNL.size(); i++ ) {
360 QListViewItem * CI; 363 QListViewItem * CI;
361 if( NNL.size() > 1 ) { 364 if( NNL.size() > 1 ) {
362 // generate radio buttons 365 // generate radio buttons
363 CI = new MyQCheckListItem( 366 CI = new MyQCheckListItem(
364 (QCheckListItem *)it, 367 (QCheckListItem *)it,
365 NNL[i]->name(), QCheckListItem::RadioButton ); 368 NNL[i]->name(), QCheckListItem::RadioButton );
366 // remember that this node maps to this listitem 369 // remember that this node maps to this listitem
367 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) ); 370 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) );
368 Mapping->insert( CI, NNL[i] ); 371 Mapping->insert( CI, NNL[i] );
369 CI->setSelectable( FALSE ); 372 CI->setSelectable( FALSE );
370 } else { 373 } else {
371 // Single item 374 // Single item
372 CI = new MyQListViewItem( it, NNL[i]->name() ); 375 CI = new MyQListViewItem( it, NNL[i]->name() );
373 // remember that this node maps to this listitem 376 // remember that this node maps to this listitem
374 Mapping->insert( CI, NNL[i] ); 377 Mapping->insert( CI, NNL[i] );
375 CI->setSelectable( FALSE ); 378 CI->setSelectable( FALSE );
376 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) ); 379 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) );
377 } 380 }
378 buildSubTree( CI, NNL[i] ); 381 buildSubTree( CI, NNL[i] );
379 } 382 }
380} 383}
381 384
382// Clicked ok OK button 385// Clicked ok OK button
383void EditNetworkSetup::accept( void ) { 386void EditNetworkSetup::accept( void ) {
384 if( ! haveCompleteConfig( 0 ) || Name_LE->text().isEmpty() ) { 387 if( ! haveCompleteConfig( 0 ) || Name_LE->text().isEmpty() ) {
385 QMessageBox::warning( 388 QMessageBox::warning(
386 0, 389 0,
387 tr( "Closing NetworkSetup Setup" ), 390 tr( "Closing NetworkSetup Setup" ),
388 tr( "Definition not complete or no name" ) ); 391 tr( "Definition not complete or no name" ) );
389 return; 392 return;
390 } 393 }
391 394
392 // check if all devices have acceptable input 395 // check if all devices have acceptable input
393 getTmpCollection(); 396 getTmpCollection();
394 { ANetNodeInstance * NNI; 397 { ANetNodeInstance * NNI;
395 QString S; 398 QString S;
396 399
397 for( QListIterator<ANetNodeInstance> it(TmpCollection); 400 for( QListIterator<ANetNodeInstance> it(TmpCollection);
398 it.current(); 401 it.current();
399 ++it ) { 402 ++it ) {
400 NNI = it.current(); 403 NNI = it.current();
401 // widget must show its own problems 404 // widget must show its own problems
402 S = NNI->acceptable(); 405 S = NNI->acceptable();
403 if( ! S.isEmpty() ) { 406 if( ! S.isEmpty() ) {
404 QMessageBox::warning( 407 QMessageBox::warning(
405 0, 408 0,
406 tr( "Cannot save" ), 409 tr( "Cannot save" ),
407 S ); 410 S );
408 return; 411 return;
409 } 412 }
410 NNI->commit(); 413 NNI->commit();
411 414
412 if( NNI->isModified() ) { 415 if( NNI->isModified() ) {
413 TmpCollection.setModified( 1 ); 416 TmpCollection.setModified( 1 );
414 // commit the data 417 // commit the data
415 } 418 }
416 } 419 }
417 } 420 }
418 421
419 QDialog::accept(); 422 QDialog::accept();
420} 423}
421 424
422// triggered by CB 425// triggered by CB
423void EditNetworkSetup::SLOT_AutoCollapse( bool b ) { 426void EditNetworkSetup::SLOT_AutoCollapse( bool b ) {
424 AutoCollapse = b; 427 AutoCollapse = b;
425} 428}
426 429
427// clicked on node in tree -> update GUI 430// clicked on node in tree -> update GUI
428void EditNetworkSetup::SLOT_SelectNode( QListViewItem * it ) { 431void EditNetworkSetup::SLOT_SelectNode( QListViewItem * it ) {
429 ANetNode * NN; 432 ANetNode * NN;
430 if( it == 0 || it->depth() == 0 ) { 433 if( it == 0 || it->depth() == 0 ) {
431 Description_LBL->setText( 434 Description_LBL->setText(
432 NSResources->netNode2Description( "fullsetup" ) ); 435 NSResources->netNode2Description( "fullsetup" ) );
433 // topevel or no selection 436 // topevel or no selection
434 return; 437 return;
435 } 438 }
436 439
437 // store conversion from lvitem to node 440 // store conversion from lvitem to node
438 NN = (*Mapping)[ it ]; 441 NN = (*Mapping)[ it ];
439 442
440 if( ! NN ) { 443 if( ! NN ) {
441 // intermediate node 444 // intermediate node
442 NN = (*Mapping)[ it->parent() ]; 445 NN = (*Mapping)[ it->parent() ];
443 if( NN ) { 446 if( NN ) {
444 // figure out type of this node -> produce mesage 447 // figure out type of this node -> produce mesage
445 Description_LBL->setText( NSResources->netNode2Description( 448 Description_LBL->setText( NSResources->netNode2Description(
446 NN->needs()[0]) ); 449 NN->needs()[0]) );
447 } else { 450 } else {
448 Description_LBL->setText( "" ); 451 Description_LBL->setText( "" );
449 } 452 }
450 return; 453 return;
451 } 454 }
452 455
453 Description_LBL->setText( NN->nodeDescription() ); 456 Description_LBL->setText( NN->nodeDescription() );
454 457
455 if( ! it->isSelectable() ) { 458 if( ! it->isSelectable() ) {
456 return; 459 return;
457 } 460 }
458 461
459 if( ! ((QCheckListItem *)it)->isOn() ) { 462 ANetNode::NetNodeList & NNL = NN->alternatives();
460 // clicked on line but NOT on Check or Radio item 463
461 return; 464 if( NNL.size() != 1 ) {
465 if( NNL.size() == 0 ||
466 ! ((MyQCheckListItem *)it)->isOn()
467 ) {
468 // not clicked on Check or Radio item
469 return;
470 }
462 } 471 }
463 472
464 // item has really changed -> update 473 // item has really changed -> update
465 TmpIsValid = 0; 474 TmpIsValid = 0;
466 updateGUI( it, NN ); 475 updateGUI( it, NN );
467} 476}
468 477
469// cliecked on TAB to go to setup 478// cliecked on TAB to go to setup
470void EditNetworkSetup::SLOT_AlterTab( const QString & S ) { 479void EditNetworkSetup::SLOT_AlterTab( const QString & S ) {
471 if( S == tr( "Setup" ) && Setup_FRM->isEnabled() ) { 480 if( S == tr( "Setup" ) && Setup_FRM->isEnabled() ) {
472 // switched to setup -> update CB and populate ws with 481 // switched to setup -> update CB and populate ws with
473 // forms for devices 482 // forms for devices
474 483
475 if( ! TmpIsValid ) { 484 if( ! TmpIsValid ) {
476 getTmpCollection(); 485 getTmpCollection();
477 486
478 // clear CB and Ws 487 // clear CB and Ws
479 { QWidget * W; 488 { QWidget * W;
480 int i = 0; 489 int i = 0;
481 490
482 Devices_CB->clear(); 491 Devices_CB->clear();
483 while( ( W = Setup_WS->widget( i ) ) ) { 492 while( ( W = Setup_WS->widget( i ) ) ) {
484 Setup_WS->removeWidget( W ); 493 Setup_WS->removeWidget( W );
485 i ++; 494 i ++;
486 } 495 }
487 } 496 }
488 497
489 // update CB 498 // update CB
490 // and populate WidgetStack 499 // and populate WidgetStack
491 { ANetNodeInstance * NNI; 500 { ANetNodeInstance * NNI;
492 QListIterator<ANetNodeInstance> it(TmpCollection); 501 QListIterator<ANetNodeInstance> it(TmpCollection);
493 int i = 0; 502 int i = 0;
494 QWidget * W; 503 QWidget * W;
495 504
496 for ( ; it.current(); ++it ) { 505 for ( ; it.current(); ++it ) {
497 NNI = it.current(); 506 NNI = it.current();
498 Devices_CB->insertItem( 507 Devices_CB->insertItem(
499 NSResources->getPixmap( NNI->nodeClass()->pixmapName() ), 508 NSResources->getPixmap( NNI->nodeClass()->pixmapName() ),
500 NNI->nodeClass()->name() 509 NNI->nodeClass()->name()
501 ); 510 );
502 511
503 // add edit widget 512 // add edit widget
504 W = NNI->edit( Setup_WS ); 513 W = NNI->edit( Setup_WS );
505 if( ! W) { 514 if( ! W) {
506 W = new QLabel( Setup_WS, 515 W = new QLabel( Setup_WS,
507 tr("No configuration required")); 516 tr("No configuration required"));
508 } 517 }
509 Setup_WS->addWidget( W , i ); 518 Setup_WS->addWidget( W , i );
510 i ++; 519 i ++;
511 } 520 }
512 } 521 }
513 Setup_WS->raiseWidget( 0 ); 522 Setup_WS->raiseWidget( 0 );
514 } // still valid 523 } // still valid
515 } 524 }
516} 525}
517 526
518// update visual feedback of selection state 527// update visual feedback of selection state
519void EditNetworkSetup::updateGUI( QListViewItem * it, ANetNode * NN ) { 528void EditNetworkSetup::updateGUI( QListViewItem * it, ANetNode * NN ) {
520 529
521 bool HCC = haveCompleteConfig( it ); 530 bool HCC = haveCompleteConfig( it );
522 Tab_TB->setTabEnabled( Setup_FRM, HCC ); 531 Tab_TB->setTabEnabled( Setup_FRM, HCC );
523 Setup_FRM->setEnabled( HCC ); 532 Setup_FRM->setEnabled( HCC );
524 533
525 // disable children of all siblings at same level 534 // disable children of all siblings at same level
526 QListViewItem * Sbl = it->parent()->firstChild(); 535 QListViewItem * Sbl = it->parent()->firstChild();
527 while( Sbl ) { 536 while( Sbl ) {
528 if ( Sbl != it ) { 537 if ( Sbl != it ) {
529 disableTree( Sbl->firstChild(), FALSE ); 538 disableTree( Sbl->firstChild(), FALSE );
530 Sbl->setSelectable( TRUE ); 539 Sbl->setSelectable( TRUE );
531 if( AutoCollapse ) 540 if( AutoCollapse )
532 Sbl->setOpen( FALSE ); 541 Sbl->setOpen( FALSE );
533 } 542 }
534 Sbl = Sbl->nextSibling(); 543 Sbl = Sbl->nextSibling();
535 } 544 }
536 545
537 // enable selected path (as deep as it goes 546 // enable selected path (as deep as it goes
538 it->setOpen( TRUE ); 547 it->setOpen( TRUE );
539 enablePath( it->firstChild(), 548 enablePath( it->firstChild(),
540 (it->depth()==1) ? 549 (it->depth()==1) ?
541 1 : // toplevel always alternatives 550 1 : // toplevel always alternatives
542 (NN->alternatives().size() > 1) ); 551 (NN->alternatives().size() > 1) );
543} 552}
544 553
545void EditNetworkSetup::disableTree( QListViewItem * it, bool Mode ) { 554void EditNetworkSetup::disableTree( QListViewItem * it, bool Mode ) {
546 while( it ) { 555 while( it ) {
547 // disable sbl's chidren 556 // disable sbl's chidren
548 it->setSelectable( Mode ); 557 it->setSelectable( Mode );
549 if( AutoCollapse ) 558 if( AutoCollapse )
550 it->setOpen( Mode ); 559 it->setOpen( Mode );
551 disableTree( it->firstChild(), Mode ); 560 disableTree( it->firstChild(), Mode );
552 it = it->nextSibling(); 561 it = it->nextSibling();
553 } 562 }
554} 563}
555 564
556// pah : ParentHasAlternatives 565// pah : ParentHasAlternatives
557void EditNetworkSetup::enablePath( QListViewItem * it, bool pha ) { 566void EditNetworkSetup::enablePath( QListViewItem * it, bool pha ) {
558 while( it ) { 567 while( it ) {
559 ANetNode * NN; 568 ANetNode * NN;
560 NN = (*Mapping)[it]; 569 NN = (*Mapping)[it];
561 if( NN ) { 570 if( NN ) {
562 if( pha ) { 571 if( pha ) {
563 bool doOn = ((QCheckListItem *)it)->isOn(); 572 bool doOn = ((QCheckListItem *)it)->isOn();
564 // we are a checklistitem for sure 573 // we are a checklistitem for sure
565 it->setSelectable( TRUE ); 574 it->setSelectable( TRUE );
566 if( AutoCollapse && ! doOn ) 575 if( AutoCollapse && ! doOn )
567 it->setOpen( doOn ); 576 it->setOpen( doOn );
568 if( doOn ) { 577 if( doOn ) {
569 // selected alternative 578 // selected alternative
570 enablePath( it->firstChild(), 579 enablePath( it->firstChild(),
571 NN->alternatives().size() > 1); 580 NN->alternatives().size() > 1);
572 } else { 581 } else {
573 // non-selected alternative 582 // non-selected alternative
574 disableTree( it->firstChild(), FALSE); 583 disableTree( it->firstChild(), FALSE);
575 } 584 }
576 } else { 585 } else {
577 // we are single subitem 586 // we are single subitem
578 it->setSelectable( TRUE ); 587 it->setSelectable( TRUE );
579 it->setOpen( TRUE ); 588 it->setOpen( TRUE );
580 enablePath( it->firstChild(), 589 enablePath( it->firstChild(),
581 NN->alternatives().size() > 1); 590 NN->alternatives().size() > 1);
582 } 591 }
583 } else { 592 } else {
584 // controller node 593 // controller node
585 it->setSelectable( TRUE ); 594 it->setSelectable( TRUE );
586 it->setOpen( TRUE ); 595 it->setOpen( TRUE );
587 enablePath( it->firstChild(), pha ); 596 enablePath( it->firstChild(), pha );
588 } 597 }
589 it = it->nextSibling(); 598 it = it->nextSibling();
590 } 599 }
591} 600}
592 601
593// do we have a complete configuration (all needs are provided for ?) 602// do we have a complete configuration (all needs are provided for ?)
594bool EditNetworkSetup::haveCompleteConfig( QListViewItem * it ) { 603bool EditNetworkSetup::haveCompleteConfig( QListViewItem * it ) {
595 604
596 // check if all below this level is selected 605 // check if all below this level is selected
597 it = ( it ) ?it : Nodes_LV->firstChild(); 606 it = ( it ) ?it : Nodes_LV->firstChild();
598 ANetNode *NN; 607 ANetNode *NN;
599 bool Found; 608 bool Found;
600 609
601 while ( it ) { 610 while ( it ) {
602 NN = (*Mapping)[it]; 611 NN = (*Mapping)[it];
603 if( NN == 0 ) { 612 if( NN == 0 ) {
604 // this item is a controller -> 613 // this item is a controller ->
605 // has radio items as children -> 614 // has radio items as children ->
606 // find selected one 615 // find selected one
607 it = it->firstChild(); 616 it = it->firstChild();
608 Found = 0; 617 Found = 0;
609 while( it ) { 618 while( it ) {
610 if( ((QCheckListItem *)it)->isOn() ) { 619 if( ((QCheckListItem *)it)->isOn() ) {
611 Found = 1; 620 Found = 1;
612 // go deeper 621 // go deeper
613 it = it->firstChild(); 622 it = it->firstChild();
614 break; 623 break;
615 } 624 }
616 it = it->nextSibling(); 625 it = it->nextSibling();
617 } 626 }
618 627
619 if( ! Found ) { 628 if( ! Found ) {
620 return 0; // no not complete -> a radio should have been chkd 629 return 0; // no not complete -> a radio should have been chkd
621 } 630 }
622 631
623 // it now contains selected radio 632 // it now contains selected radio
624 NN = (*Mapping)[it]; 633 NN = (*Mapping)[it];
625 } else { 634 } else {
626 // automatic selection 635 // automatic selection
627 it = it->firstChild(); 636 it = it->firstChild();
628 } 637 }
629 } 638 }
630 return 1; 639 return 1;
631} 640}
diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp
index b4622fc..835c7c3 100644
--- a/noncore/settings/networksettings2/nsdata.cpp
+++ b/noncore/settings/networksettings2/nsdata.cpp
@@ -532,256 +532,256 @@ QString NetworkSettingsData::generateSettings( void ) {
532 "<p>Error in section \"Common\" for file \"%1\" and node \"%2\"</p>" ). 532 "<p>Error in section \"Common\" for file \"%1\" and node \"%2\"</p>" ).
533 arg( SF->name() ). 533 arg( SF->name() ).
534 arg( CurDevNN->name() ); 534 arg( CurDevNN->name() );
535 return S; 535 return S;
536 } 536 }
537 FirstWithData->nodeClass()->setDone( 1 ); 537 FirstWithData->nodeClass()->setDone( 1 );
538 Log(( "Systemfile %s for node instance %s is done\n", 538 Log(( "Systemfile %s for node instance %s is done\n",
539 SF->name().latin1(), 539 SF->name().latin1(),
540 FirstWithData->name() )); 540 FirstWithData->name() ));
541 } 541 }
542 542
543 NoOfDevs = 0; 543 NoOfDevs = 0;
544 DevCtStart = -1; 544 DevCtStart = -1;
545 545
546 if( SF->knowsDeviceInstances() ) { 546 if( SF->knowsDeviceInstances() ) {
547 DevCtStart = 0; 547 DevCtStart = 0;
548 NoOfDevs = CurDevNN->instanceCount(); 548 NoOfDevs = CurDevNN->instanceCount();
549 } 549 }
550 550
551 if( ! CurDev->netNode()->nodeClass()->done() ) { 551 if( ! CurDev->netNode()->nodeClass()->done() ) {
552 // first time this device is handled 552 // first time this device is handled
553 // generate common device specific part 553 // generate common device specific part
554 for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { 554 for( int i = DevCtStart; i < NoOfDevs ; i ++ ) {
555 555
556 if( FirstWithData->nodeClass()->generateFile( 556 if( FirstWithData->nodeClass()->generateFile(
557 *SF, CurDev->netNode(), i ) == 2 ) { 557 *SF, CurDev->netNode(), i ) == 2 ) {
558 S = qApp->translate( "NetworkSettings", 558 S = qApp->translate( "NetworkSettings",
559 "<p>Error in section \"Device\" for file \"%1\" and node \"%2\"</p>" ). 559 "<p>Error in section \"Device\" for file \"%1\" and node \"%2\"</p>" ).
560 arg( SF->name() ). 560 arg( SF->name() ).
561 arg( CurDevNN->name() ); 561 arg( CurDevNN->name() );
562 return S; 562 return S;
563 } 563 }
564 } 564 }
565 CurDev->netNode()->nodeClass()->setDone( 1 ); 565 CurDev->netNode()->nodeClass()->setDone( 1 );
566 566
567 Log(( "Systemfile %s for Nodeclass %s is done\n", 567 Log(( "Systemfile %s for Nodeclass %s is done\n",
568 SF->name().latin1(), 568 SF->name().latin1(),
569 CurDev->netNode()->nodeClass()->name() 569 CurDev->netNode()->nodeClass()->name()
570 )); 570 ));
571 } 571 }
572 572
573 // generate profile specific info 573 // generate profile specific info
574 // for all nodeNetworkSetups that work on the same device 574 // for all nodeNetworkSetups that work on the same device
575 for( QDictIterator<NetworkSetup> ncit2(M); 575 for( QDictIterator<NetworkSetup> ncit2(M);
576 ncit2.current(); 576 ncit2.current();
577 ++ncit2 ) { 577 ++ncit2 ) {
578 578
579 if( ncit2.current()->device() != CurDev ) { 579 if( ncit2.current()->device() != CurDev ) {
580 // different device 580 // different device
581 continue; 581 continue;
582 } 582 }
583 583
584 Log(("NetworkSetup %s of family %s\n", 584 Log(("NetworkSetup %s of family %s\n",
585 ncit2.current()->name().latin1(), 585 ncit2.current()->name().latin1(),
586 CurDev->name() )); 586 CurDev->name() ));
587 // generate 587 // generate
588 NNI = ncit2.current()->firstWithDataForFile( *SF ); 588 NNI = ncit2.current()->firstWithDataForFile( *SF );
589 for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { 589 for( int i = DevCtStart; i < NoOfDevs ; i ++ ) {
590 if( ! SF->preNodeSection( NNI, i ) ) { 590 if( ! SF->preNodeSection( NNI, i ) ) {
591 S = qApp->translate( "NetworkSettings", 591 S = qApp->translate( "NetworkSettings",
592 "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ). 592 "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ).
593 arg( SF->name() ). 593 arg( SF->name() ).
594 arg( CurDevNN->name() ); 594 arg( CurDevNN->name() );
595 return S; 595 return S;
596 } 596 }
597 597
598 switch( NNI->generateFile( *SF, i ) ) { 598 switch( NNI->generateFile( *SF, i ) ) {
599 case 0 : 599 case 0 :
600 (*SF) << endl; 600 (*SF) << endl;
601 break; 601 break;
602 case 1 : 602 case 1 :
603 break; 603 break;
604 case 2 : 604 case 2 :
605 S = qApp->translate( "NetworkSettings", 605 S = qApp->translate( "NetworkSettings",
606 "<p>Error in section \"Node\" for file \"%1\" and node \"%2\"</p>" ). 606 "<p>Error in section \"Node\" for file \"%1\" and node \"%2\"</p>" ).
607 arg( SF->name() ). 607 arg( SF->name() ).
608 arg( CurDevNN->name() ); 608 arg( CurDevNN->name() );
609 return S; 609 return S;
610 } 610 }
611 611
612 if( ! SF->postNodeSection( NNI, i ) ) { 612 if( ! SF->postNodeSection( NNI, i ) ) {
613 S = qApp->translate( "NetworkSettings", 613 S = qApp->translate( "NetworkSettings",
614 "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ). 614 "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ).
615 arg( SF->name() ). 615 arg( SF->name() ).
616 arg( CurDevNN->name() ); 616 arg( CurDevNN->name() );
617 return S; 617 return S;
618 } 618 }
619 } 619 }
620 620
621 ncit2.current()->setDone( 1 ); 621 ncit2.current()->setDone( 1 );
622 622
623 } 623 }
624 } 624 }
625 625
626 if( ! SF->postDeviceSection( CurDevNN ) ) { 626 if( ! SF->postDeviceSection( CurDevNN ) ) {
627 S = qApp->translate( "NetworkSettings", 627 S = qApp->translate( "NetworkSettings",
628 "<p>Error in section \"Post-Device\" for file \"%1\" and node \"%2\"</p>" ). 628 "<p>Error in section \"Post-Device\" for file \"%1\" and node \"%2\"</p>" ).
629 arg( SF->name() ). 629 arg( SF->name() ).
630 arg( CurDevNN->name() ); 630 arg( CurDevNN->name() );
631 return S; 631 return S;
632 } 632 }
633 633
634 634
635 if( ! SF->postSection() ) { 635 if( ! SF->postSection() ) {
636 S = qApp->translate( "NetworkSettings", 636 S = qApp->translate( "NetworkSettings",
637 "<p>Error in section \"Closure\" for file \"%1\"</p>" ). 637 "<p>Error in section \"Closure\" for file \"%1\"</p>" ).
638 arg( SF->name() ); 638 arg( SF->name() );
639 return S; 639 return S;
640 } 640 }
641 641
642 // end of file 642 // end of file
643 SF->close(); 643 SF->close();
644 } 644 }
645 return S; 645 return S;
646} 646}
647 647
648QList<NetworkSetup> NetworkSettingsData::collectPossible( 648QList<NetworkSetup> NetworkSettingsData::collectPossible(
649 const QString & Interface ) { 649 const QString & Interface ) {
650 // collect NetworkSetups that can work on top of this interface 650 // collect NetworkSetups that can work on top of this interface
651 NetworkSetup * NC; 651 NetworkSetup * NC;
652 QList<NetworkSetup> PossibleNetworkSetups; 652 QList<NetworkSetup> PossibleNetworkSetups;
653 Name2NetworkSetup_t & M = NSResources->networkSetups(); 653 Name2NetworkSetup_t & M = NSResources->networkSetups();
654 654
655 // for all NetworkSetups 655 // for all NetworkSetups
656 for( QDictIterator<NetworkSetup> it(M); 656 for( QDictIterator<NetworkSetup> it(M);
657 it.current(); 657 it.current();
658 ++it ) { 658 ++it ) {
659 NC = it.current(); 659 NC = it.current();
660 // check if this profile handles the requested interface 660 // check if this profile handles the requested interface
661 if( NC->handlesInterface( Interface ) && // if different Intf. 661 if( NC->handlesInterface( Interface ) && // if different Intf.
662 NC->state() != Disabled && // if enabled 662 NC->state() != Disabled && // if enabled
663 NC->state() != IsUp // if already used 663 NC->state() != IsUp // if already used
664 ) { 664 ) {
665 Log( ( "Append %s for %s\n", 665 Log( ( "Append %s for %s\n",
666 NC->name().latin1(), Interface.latin1() )); 666 NC->name().latin1(), Interface.latin1() ));
667 PossibleNetworkSetups.append( NC ); 667 PossibleNetworkSetups.append( NC );
668 } 668 }
669 } 669 }
670 return PossibleNetworkSetups; 670 return PossibleNetworkSetups;
671} 671}
672 672
673 673
674/* 674/*
675 Called by the system to see if interface can be brought UP 675 Called by the system to see if interface can be brought UP
676 676
677 if allowed, echo Interface-allowed else Interface-disallowed 677 if allowed, echo Interface-allowed else Interface-disallowed
678*/ 678*/
679 679
680bool NetworkSettingsData::canStart( const QString & Interface ) { 680bool NetworkSettingsData::canStart( const QString & Interface ) {
681 // load situation 681 // load situation
682 NetworkSetup * NC = 0; 682 NetworkSetup * NC = 0;
683 QList<NetworkSetup> PossibleNetworkSetups; 683 QList<NetworkSetup> PossibleNetworkSetups;
684 684
685 PossibleNetworkSetups = collectPossible( Interface ); 685 PossibleNetworkSetups = collectPossible( Interface );
686 686
687 Log( ( "for %s : Possiblilies %d\n", 687 Log( ( "for %s : Possiblilies %d\n",
688 Interface.latin1(), PossibleNetworkSetups.count() )); 688 Interface.latin1(), PossibleNetworkSetups.count() ));
689 switch( PossibleNetworkSetups.count() ) { 689 switch( PossibleNetworkSetups.count() ) {
690 case 0 : // no NetworkSetups 690 case 0 : // no NetworkSetups
691 break; 691 break;
692 case 1 : // one NetworkSetup 692 case 1 : // one NetworkSetup
693 NC = PossibleNetworkSetups.first(); 693 NC = PossibleNetworkSetups.first();
694 break; 694 break;
695 default : // need to ask user ? 695 default : // need to ask user ?
696 return 1; 696 return 1;
697 } 697 }
698 698
699 if( NC ) { 699 if( NC ) {
700 switch( NC->state() ) { 700 switch( NC->state() ) {
701 case Unchecked : 701 case Unchecked :
702 case Unknown : 702 case Unknown :
703 case Unavailable : 703 case Unavailable :
704 case Disabled : 704 case Disabled :
705 // this profile does not allow interface to be UP 705 // this profile does not allow interface to be UP
706 // -> try others 706 // -> try others
707 break; 707 break;
708 case Off : 708 case Off :
709 // try to UP the device 709 // try to UP the device
710 { QString S= NC->setState( Activate ); 710 { QString S= NC->setState( Activate );
711 if( ! S.isEmpty() ) { 711 if( ! S.isEmpty() ) {
712 // could not bring device Online -> try other alters 712 // could not bring device Online -> try other alters
713 Log(( "disallow %ld for %s : %s\n", 713 Log(( "disallow %ld for %s : %s\n",
714 NC->number(), Interface.latin1(), S.latin1() )); 714 NC->number(), Interface.latin1(), S.latin1() ));
715 break; 715 break;
716 } 716 }
717 // interface assigned 717 // interface assigned
718 } 718 }
719 // FT 719 // FT
720 case Available : 720 case Available :
721 case IsUp : // also called for 'ifdown' 721 case IsUp : // also called for 'ifdown'
722 // device is ready -> done 722 // device is ready -> done
723 Log(( "allow %ld for %s\n", NC->number(), Interface.latin1())); 723 Log(( "allow %ld for %s\n", NC->number(), Interface.latin1()));
724 printf( "A%ld%s\n", NC->number(), Interface.latin1() ); 724 printf( "A%d%s\n", NC->number(), Interface.latin1() );
725 return 0; 725 return 0;
726 } 726 }
727 } 727 }
728 728
729 // if we come here no alternatives are possible 729 // if we come here no alternatives are possible
730 Log(( "disallow %s\n", Interface.latin1())); 730 Log(( "disallow %s\n", Interface.latin1()));
731 printf( "D-%s\n", Interface.latin1() ); 731 printf( "D-%s\n", Interface.latin1() );
732 return 0; 732 return 0;
733} 733}
734 734
735bool NetworkSettingsData::isModified( void ) { 735bool NetworkSettingsData::isModified( void ) {
736 if( ForceModified ) 736 if( ForceModified )
737 return 1; 737 return 1;
738 738
739 for( QDictIterator<NetworkSetup> it(NSResources->networkSetups()); 739 for( QDictIterator<NetworkSetup> it(NSResources->networkSetups());
740 it.current(); 740 it.current();
741 ++it ) { 741 ++it ) {
742 if( it.current()->isModified() ) { 742 if( it.current()->isModified() ) {
743 return 1; 743 return 1;
744 } 744 }
745 } 745 }
746 return 0; 746 return 0;
747} 747}
748 748
749bool NetworkSettingsData::couldBeTriggered( const QString & Interface ) { 749bool NetworkSettingsData::couldBeTriggered( const QString & Interface ) {
750 // load situation 750 // load situation
751 QList<NetworkSetup> PossibleTriggered; 751 QList<NetworkSetup> PossibleTriggered;
752 752
753 PossibleTriggered = collectTriggered( Interface ); 753 PossibleTriggered = collectTriggered( Interface );
754 754
755 Log( ( "for %s : Possiblilies %d\n", 755 Log( ( "for %s : Possiblilies %d\n",
756 Interface.latin1(), PossibleTriggered.count() )); 756 Interface.latin1(), PossibleTriggered.count() ));
757 757
758 return ( PossibleTriggered.count() ) ? 1 : 0; 758 return ( PossibleTriggered.count() ) ? 1 : 0;
759} 759}
760 760
761QList<NetworkSetup> NetworkSettingsData::collectTriggered( 761QList<NetworkSetup> NetworkSettingsData::collectTriggered(
762 const QString & Interface ) { 762 const QString & Interface ) {
763 763
764 // collect NetworkSetups that could be triggered by this interface 764 // collect NetworkSetups that could be triggered by this interface
765 NetworkSetup * NC; 765 NetworkSetup * NC;
766 QList<NetworkSetup> PossibleTriggered; 766 QList<NetworkSetup> PossibleTriggered;
767 767
768 // for all NetworkSetups 768 // for all NetworkSetups
769 Name2NetworkSetup_t & M = NSResources->networkSetups(); 769 Name2NetworkSetup_t & M = NSResources->networkSetups();
770 770
771 for( QDictIterator<NetworkSetup> it(M); 771 for( QDictIterator<NetworkSetup> it(M);
772 it.current(); 772 it.current();
773 ++it ) { 773 ++it ) {
774 NC = it.current(); 774 NC = it.current();
775 // check if this profile handles the requested interface 775 // check if this profile handles the requested interface
776 if( NC->triggeredBy( Interface ) && // if different Intf. 776 if( NC->triggeredBy( Interface ) && // if different Intf.
777 NC->state() != Disabled && // if enabled 777 NC->state() != Disabled && // if enabled
778 NC->state() != IsUp // if already used 778 NC->state() != IsUp // if already used
779 ) { 779 ) {
780 Log( ( "Append %s for %s\n", 780 Log( ( "Append %s for %s\n",
781 NC->name().latin1(), Interface.latin1() )); 781 NC->name().latin1(), Interface.latin1() ));
782 PossibleTriggered.append( NC ); 782 PossibleTriggered.append( NC );
783 } 783 }
784 } 784 }
785 return PossibleTriggered; 785 return PossibleTriggered;
786} 786}
787 787