Diffstat (limited to 'noncore/settings/networksettings2/editconnection.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/settings/networksettings2/editconnection.cpp | 188 |
1 files changed, 121 insertions, 67 deletions
diff --git a/noncore/settings/networksettings2/editconnection.cpp b/noncore/settings/networksettings2/editconnection.cpp index 77826d1..3f8a53f 100644 --- a/noncore/settings/networksettings2/editconnection.cpp +++ b/noncore/settings/networksettings2/editconnection.cpp @@ -1 +1,2 @@ +#include <opie2/odebug.h> #include <qlistview.h> @@ -33,2 +34,9 @@ public: + MyQCheckListItem( QListView *parent, const QString & S ) : + QCheckListItem( parent, S, QCheckListItem::Controller ) { } + MyQCheckListItem( QCheckListItem *parent, const QString & S ) : + QCheckListItem( parent, S, QCheckListItem::Controller ) { } + MyQCheckListItem( QListViewItem *parent, const QString & S ) : + QCheckListItem( parent, S, QCheckListItem::Controller ) { } + virtual void paintCell( QPainter *p, const QColorGroup &cg, @@ -118,3 +126,10 @@ NodeCollection * EditConnection::getTmpCollection( void ) { ANetNode * NN; - // start iter + + // start iter (if there is a collection) + /* + + a node collection is sorted from the toplevel + node to the deepest node + + */ ANetNodeInstance * NNI = @@ -124,2 +139,4 @@ NodeCollection * EditConnection::getTmpCollection( void ) { + // the listview always starts with the toplevel + // hierarchy. This is always a controller item while ( it ) { @@ -127,4 +144,5 @@ NodeCollection * EditConnection::getTmpCollection( void ) { if( NN == 0 ) { - // child is controller -> has sub radio - // check if one radio is selected + // this item is a controller -> + // has radio items as children -> + // find selected one it = it->firstChild(); @@ -133,21 +151,2 @@ NodeCollection * EditConnection::getTmpCollection( void ) { // this radio is selected -> go deeper - if( SelectedNodes == 0 || - NNI == 0 || - it->text(0) != NNI->nodeClass()->name() ) { - // new item not in previous collection - ANetNodeInstance * NNI = (*Mapping)[it]->createInstance(); - NNI->initialize(); - // this node type not in collection - TmpCollection.append( NNI ); - // master collection changed because new item in it - TmpCollection.setModified( 1 ); - // no more valid items in old list - NNI = 0; - } else { - // already in list -> copy pointer - TmpCollection.append( NNI ); - NNI = SelectedNodes->next(); - } - it = it->firstChild(); - // do not bother to check other items break; @@ -156,6 +155,37 @@ NodeCollection * EditConnection::getTmpCollection( void ) { } + + if( ! it ) { + owarn << "Radio not selected" << oendl; + TmpIsValid = 0; + return 0; + } + + // it now contains selected radio + NN = (*Mapping)[it]; + } + + // NN here contains the netnode of the + // current item -> this node needs to + // be stored in the collection + if( NNI == 0 || + it->text(0) != NNI->nodeClass()->name() ) { + // new item not in previous collection + ANetNodeInstance * NNI = NN->createInstance(); + NNI->initialize(); + // this node type not in collection + TmpCollection.append( NNI ); + // master collection changed because new item in it + TmpCollection.setModified( 1 ); + // no more valid items in old list + NNI = 0; } else { - // check children - it = it->firstChild(); + // already in list -> copy pointer + TmpCollection.append( NNI ); + NNI = SelectedNodes->next(); } + + // go deeper to next level + // this level is can be a new controller + // or an item + it = it->firstChild(); } @@ -189,8 +219,7 @@ void EditConnection::setConnection( NodeCollection * NC ) { while ( it ) { - // listitem corresponds to netnode NN = (*Mapping)[it]; if( NN == 0 ) { - // child is controller -> has sub radio - QString Ctr = it->text(0); - // check if one radio is selected + // this item is a controller -> + // has radio items as children -> + // find selected one it = it->firstChild(); @@ -211,2 +240,3 @@ void EditConnection::setConnection( NodeCollection * NC ) { } + if( ! Found ) { @@ -218,7 +248,27 @@ void EditConnection::setConnection( NodeCollection * NC ) { tr( "<p>Old connection or missing plugin \"<i>%1</i>\"</p>" ). - arg(Ctr) ); + arg(NNI->nodeClass()->name()) ); return; } + + // it now contains selected radio + NN = (*Mapping)[it]; } else { - // automatic item -> check children + // automatic selection + if( NNI == 0 || it->text(0) != NNI->nodeClass()->name() ) { + // should exist and be the same + if( NNI ) { + QMessageBox::warning( + 0, + tr( "Error presentig Connection" ), + tr( "<p>Old connection or missing plugin \"<i>%1</i>\"</p>" ). + arg(NNI->nodeClass()->name()) ); + } else { + QMessageBox::warning( + 0, + tr( "Error presentig Connection" ), + tr( "<p>Missing connection\"<i>%1</i>\"</p>" ). + arg(it->text(0)) ); + } + return; + } it = it->firstChild(); @@ -271,3 +321,3 @@ void EditConnection::buildFullTree( void ) { - // find all Nodes that care toplevel nodes -> ie provide + // find all Nodes that are toplevel nodes -> ie provide // TCP/IP Connection @@ -286,3 +336,5 @@ void EditConnection::buildFullTree( void ) { QCheckListItem::RadioButton ); - it->setPixmap( 0, NSResources->getPixmap( "Devices/commprofile" ) ); + it->setPixmap( 0, + NSResources->getPixmap( NN->pixmapName() ) + ); // remember that this node maps to this listitem @@ -301,3 +353,3 @@ void EditConnection::buildSubTree( QListViewItem * it, ANetNode *NN ) { it, - NSResources->netNode2Name(NNL[0]->provides()), + NSResources->netNode2Name(NN->needs()[0]), QCheckListItem::Controller ); @@ -389,6 +441,7 @@ void EditConnection::SLOT_SelectNode( QListViewItem * it ) { // intermediate node - NN = (*Mapping)[ it->firstChild() ]; + NN = (*Mapping)[ it->parent() ]; if( NN ) { // figure out type of this node -> produce mesage - Description_LBL->setText( NSResources->netNode2Description(NN->provides()) ); + Description_LBL->setText( NSResources->netNode2Description( + NN->needs()[0]) ); } else { @@ -541,37 +594,38 @@ void EditConnection::enablePath( QListViewItem * it, bool pha ) { bool EditConnection::haveCompleteConfig( QListViewItem * it ) { - if( it == 0 || ((QCheckListItem *)it)->isOn() ) { - // check children - it = (it) ? it->firstChild() : Nodes_LV->firstChild() ; - while ( it ) { - if( ((QCheckListItem *)it)->type() == - QCheckListItem::Controller ) { - // child is controller -> has sub radio - // check if one radio is selected - it = it->firstChild(); - while( it ) { - if( ((QCheckListItem *)it)->isOn() ) { - // this radio is selected -> go deeper - it = it->firstChild(); - if( ! it ) { - // was deepest level - return 1; - } - // do not bother to check other items - break; - } - it = it->nextSibling(); - } - if( ! it ) { - // no radio selected - return 0; + + // check if all below this level is selected + it = ( it ) ?it : Nodes_LV->firstChild(); + ANetNode *NN; + bool Found; + + while ( it ) { + NN = (*Mapping)[it]; + if( NN == 0 ) { + // this item is a controller -> + // has radio items as children -> + // find selected one + it = it->firstChild(); + Found = 0; + while( it ) { + if( ((QCheckListItem *)it)->isOn() ) { + Found = 1; + // go deeper + it = it->firstChild(); + break; } - } else { - // check children - it = it->firstChild(); + it = it->nextSibling(); } + + if( ! Found ) { + return 0; // no not complete -> a radio should have been chkd + } + + // it now contains selected radio + NN = (*Mapping)[it]; + } else { + // automatic selection + it = it->firstChild(); } - // deepest level -> all is still OK - return 1; - } // was not ON - return 0; + } + return 1; } |