1 // Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "DependencyTree_View.h"
21 #include "DependencyTree_Object.h"
22 #include "DependencyTree_Arrow.h"
24 #include <GEOM_InteractiveObject.hxx>
25 #include <GeometryGUI.h>
29 #include <SUIT_Session.h>
30 #include <SUIT_ResourceMgr.h>
31 #include <SalomeApp_Application.h>
32 #include <SalomeApp_Study.h>
33 #include <QtxActionToolMgr.h>
34 #include <LightApp_SelectionMgr.h>
35 #include <SALOME_ListIteratorOfListIO.hxx>
38 #include <QCloseEvent>
39 #include <QTimerEvent>
40 #include <QGraphicsScene>
46 DependencyTree_View::DependencyTree_View( QWidget* theParent )
47 :GraphicsView_ViewPort(theParent),
48 myMaxDownwardLevelsNumber(0),
49 myMaxUpwardLevelsNumber(0),
54 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
57 SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
58 SALOMEDS::Study_var myStudy = GeometryGUI::ClientStudyToStudy( study->studyDS());
60 LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
61 if ( !aSelMgr ) return;
63 SALOME_ListIO aSelList;
64 aSelMgr->selectedObjects(aSelList);
66 GEOM::string_array_var ObjectIORs = new GEOM::string_array();
67 ObjectIORs->length( aSelList.Extent());
70 for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next() ) {
71 Handle( SALOME_InteractiveObject ) io = It.Value();
74 GEOM::GEOM_Object_var myObject = GEOM::GEOM_Object::_nil();
75 myObject = GEOMBase::ConvertIOinGEOMObject( io );
76 QString ior = myObject->GetEntry();
77 ObjectIORs[aaa] = ior.toLatin1().constData();
80 std::cout << "\n\n IOR = " << ior.toStdString() << std::endl;
83 SALOMEDS::TMPFile_var SeqFile =
84 GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, ObjectIORs );
86 buf = (char*) &SeqFile[0];
88 std::cout << "\n\n\n\n\n TREE = " << buf << std::endl;
90 GEOMUtils::ConvertStringToTree( buf, myTreeModel );
94 DependencyTree_View::~DependencyTree_View()
99 void DependencyTree_View::drawArrows()
101 GEOMUtils::TreeModel::const_iterator i;
102 for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) {
103 DependencyTree_Object* Main_object = myTreeMap[i->first];
104 GEOMUtils::LevelInfo Levelup = i->second.first.at(0);
105 if( myDisplayAscendants ->isChecked() ) {
106 GEOMUtils::LevelInfo::const_iterator node;
107 for (node = Levelup.begin(); node != Levelup.end(); node++ ) {
108 DependencyTree_Object* object = myTreeMap[node->first];
109 DependencyTree_Arrow* arrow = Arrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>(Main_object, object)];
110 if( arrow && !isItemAdded( arrow) )
114 if( myDisplayAscendants ->isChecked() )
115 drawWardArrows( i->second.first );
116 if( myDisplayDescendants->isChecked() )
117 drawWardArrows( i->second.second );
122 void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard )
124 for(int j = 0; j < theWard.size(); j++ ) {
125 if( j >= myLevelsNumber )
127 GEOMUtils::LevelInfo Level = theWard.at(j);
128 GEOMUtils::LevelInfo::const_iterator node;
129 for (node = Level.begin(); node != Level.end(); node++ ) {
130 DependencyTree_Object* object = myTreeMap[node->first];
131 GEOMUtils::NodeLinks Links = node->second;
132 for( int link = 0; link < Links.size(); link++ ) {
133 DependencyTree_Object* LinkObject = myTreeMap[Links[link]];
134 if( isItemAdded( object ) && isItemAdded( LinkObject ) ) {
135 DependencyTree_Arrow* arrow = Arrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>(object, LinkObject)];
136 if( arrow && !isItemAdded( arrow) )
144 void DependencyTree_View::parseTree()
147 GEOMUtils::TreeModel::const_iterator i;
148 for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) {
149 std::string objectEntry = i->first;
150 addNode( objectEntry );
151 parseTreeWard( i->second.first );
152 if( i->second.first.size() > myMaxUpwardLevelsNumber )
153 myMaxUpwardLevelsNumber = i->second.first.size();
154 parseTreeWard( i->second.second );
155 if( i->second.second.size() > myMaxDownwardLevelsNumber )
156 myMaxDownwardLevelsNumber = i->second.second.size();
159 for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) {
160 DependencyTree_Object* Main_object = myTreeMap[i->first];
161 GEOMUtils::LevelInfo Levelup = i->second.first.at(0);
162 GEOMUtils::LevelInfo::const_iterator node;
163 for (node = Levelup.begin(); node != Levelup.end(); node++ ) {
164 DependencyTree_Object* object = myTreeMap[node->first];
165 addArrow( Main_object, object );
167 parseTreeWardArrow( i->second.first );
168 parseTreeWardArrow( i->second.second );
173 void DependencyTree_View::parseTreeWard(const GEOMUtils::LevelsList theWard)
175 int levelsNumber = theWard.size();
176 for( int level = 0; level < levelsNumber; level++ ) {
177 GEOMUtils::LevelInfo levelInfo = theWard[ level ];
178 GEOMUtils::LevelInfo::const_iterator node;
179 for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) {
180 addNode( node->first );
184 void DependencyTree_View::parseTreeWardArrow(const GEOMUtils::LevelsList theWard)
186 for(int j = 0; j < theWard.size(); j++ ) {
187 GEOMUtils::LevelInfo Level = theWard.at(j);
188 GEOMUtils::LevelInfo::const_iterator node;
189 for (node = Level.begin(); node != Level.end(); node++ ) {
190 DependencyTree_Object* object = myTreeMap[node->first];
191 std::vector<std::string> Links = node->second;
192 for( int link = 0; link < Links.size(); link++ ) {
193 DependencyTree_Object* LinkObject = myTreeMap[Links[link]];
194 if( object && LinkObject )
195 addArrow( object, LinkObject );
200 //void DependencyTree_View::parseData( QString& theData )
204 // while( theData.indexOf('-',cursor) != -1 ) //find next selected object
206 // int objectIndex = theData.indexOf( '-', cursor );
207 // QString objectEntry = theData.mid( cursor, objectIndex - cursor );
208 // //addNode( objectEntry );
209 // std::cout<<"\n\nMainObject = " << objectEntry.toStdString() <<std::endl;
210 // cursor = objectIndex;
212 // int upwardIndexBegin = theData.indexOf("{",cursor) + 1;
213 // int upwardIndexFinish = theData.indexOf("}",upwardIndexBegin);
214 // std::cout<<" Upward:" << std::endl;
215 // LevelsList upwardList = parseWard( theData, cursor );
216 // if( upwardList.size() > myMaxUpwardLevelsNumber )
217 // myMaxUpwardLevelsNumber = upwardList.size();
218 // std::cout<<" Downward:" << std::endl;
219 // LevelsList downwardList = parseWard( theData, cursor );
220 // if( downwardList.size() > myMaxDownwardLevelsNumber )
221 // myMaxDownwardLevelsNumber = downwardList.size();
223 // myTreeModel[objectEntry] = QPair<LevelsList,LevelsList>( upwardList, downwardList );
227 void DependencyTree_View::addNode( const std::string& theEntry )
229 if( !myTreeMap[theEntry] )
230 myTreeMap[theEntry] = new DependencyTree_Object( theEntry );
233 void DependencyTree_View::addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem )
237 std::cout << " " << startItem->getEntry() << " " << endItem->getEntry() << std::endl;
238 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator i;
239 for (i = Arrows.begin(); i != Arrows.end(); i++ ) {
240 DependencyTree_Arrow* arrow = i->second;
241 if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) {
243 std::cout<<" theSame " << std::endl;
245 else if( arrow->getStartItem() == endItem && arrow->getEndItem() == startItem ) {
246 arrow->setIsBiLink( true );
247 std::cout<<" Bilink " << std::endl;
253 DependencyTree_Arrow *arrow = new DependencyTree_Arrow(startItem, endItem);
254 //Arrows.append( arrow );
256 Arrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>( startItem, endItem )] = arrow;
257 std::cout<<" addArrow " << std::endl;
261 //DependencyTree_View::LevelsList DependencyTree_View::parseWard( const QString& theData, int& theCursor )
263 // int indexStart = theData.indexOf( "{", theCursor ) + 1;
264 // int indexEnd = theData.indexOf( "}", indexStart );
266 // QString ward = theData.mid( indexStart, indexEnd - indexStart );
267 // QStringList levelsListStr = ward.split( ';' );
268 // LevelsList levelsListData;
269 // for( int level = 0; level < levelsListStr.size(); level++ ) {
270 // std::cout<<" Level" << level + 1 << ":" << std::endl;
271 // QStringList namesListStr = levelsListStr[level].split( ',' );
272 // LevelInfo levelInfoData;
273 // for( int node = 0; node < namesListStr.size(); node++ ) {
274 // QStringList linksListStr = namesListStr[node].split( '_' );
275 // QString nodeItem = linksListStr[0];
276 // if( !nodeItem.isEmpty() ) {
277 // //addNode( nodeItem );
278 // NodeLinks linksListData;
279 // std::cout<<" " << nodeItem.toStdString() << " - ";
280 // for( int link = 1; link < linksListStr.size(); link++ ) {
281 // QString linkItem = linksListStr[link];
282 // //addNode( linkItem );
283 // linksListData.append( linkItem );
284 // std::cout << linkItem.toStdString() << ", ";
286 // levelInfoData[nodeItem] = linksListData;
287 // std::cout << std::endl;
289 // }// Level's objects
290 // levelsListData.append(levelInfoData);
293 // theCursor = indexEnd + 1;
295 // return levelsListData;
298 void DependencyTree_View::drawTree()
301 int horDistance, verDistance;
303 GEOMUtils::TreeModel::const_iterator i;
304 for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) {
306 std::string objectEntry = i->first;
307 DependencyTree_Object* objectItem = myTreeMap[ objectEntry ];
308 horDistance = 100 + int( objectItem->boundingRect().width() );
309 verDistance = 3 * int( objectItem->boundingRect().height() );
310 if( isItemAdded( objectItem ) ) {
311 myCurrentLevel = myLevelMap[ objectEntry ];
314 addItem( objectItem );
315 myLevelMap[ objectEntry ] = myCurrentLevel;
316 myLevelsObject[ myCurrentLevel ].push_back( objectEntry );
318 objectItem->setIsMainObject( true );
320 int levelposition = myCurrentLevel;
321 if( myDisplayAscendants ->isChecked() ){
322 drawWard( i->second.first, -1 );
323 myCurrentLevel = levelposition;
325 if( myDisplayDescendants->isChecked() )
326 drawWard( i->second.second, 1 );
329 std::map< int, std::vector<std::string> >::const_iterator j;
330 for (j = myLevelsObject.begin(); j != myLevelsObject.end(); j++ ) {
331 int step = -horDistance*( j->second.size() - 1 )/2;
332 std::cout<<"\n\n LEVEL = " << j->first << std::endl;
333 for( int object = 0; object < j->second.size(); object++ ) {
335 std::cout << j->second.at( object ) << ", ";
336 DependencyTree_Object* anObject = myTreeMap[ j->second.at( object ) ];
337 anObject->setPos( step, verDistance*j->first );
343 centerOn( scene()->sceneRect().center() );
347 void DependencyTree_View::drawWard( const GEOMUtils::LevelsList theWard, const int theLevelStep )
349 std::cout << "\n\n myLevelsNumber2 = " << myLevelsNumber << std::endl;
350 int levelsNumber = theWard.size();
351 std::cout << "\n\n levelsNumber = " << levelsNumber << std::endl;
352 for( int level = 0; level < levelsNumber; level++ ) {
353 if( level >= myLevelsNumber )
355 myCurrentLevel += theLevelStep;
356 GEOMUtils::LevelInfo levelInfo = theWard.at( level );
357 GEOMUtils::LevelInfo::const_iterator node;
358 for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) {
359 DependencyTree_Object* object = myTreeMap[ node->first ];
360 if( !isItemAdded( object ) ) {
361 std::cout<< "\n\n\n addItem = " << object->getEntry() << std::endl;
363 myLevelMap[ node->first ] = myCurrentLevel;
364 myLevelsObject[ myCurrentLevel ].push_back( node->first );
371 void DependencyTree_View::onUpdateTree()
374 myLevelsObject.clear();
377 std::map<std::string,DependencyTree_Object*>::const_iterator i;
378 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
379 DependencyTree_Object* object = myTreeMap[ i->first ];
380 if( isItemAdded( object ) && object )
381 removeItem( object );
385 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
386 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
387 DependencyTree_Arrow* object = Arrows[ j->first ];
388 if( isItemAdded( object ) && object )
389 removeItem( object );
397 int DependencyTree_View::checkMaxLevelsNumber()
399 if( myDisplayAscendants ->isChecked() && myDisplayDescendants->isChecked() )
400 return myMaxUpwardLevelsNumber>myMaxDownwardLevelsNumber?myMaxUpwardLevelsNumber:myMaxDownwardLevelsNumber;
401 else if( myDisplayAscendants ->isChecked() )
402 return myMaxUpwardLevelsNumber;
403 else if( myDisplayDescendants->isChecked() )
404 return myMaxDownwardLevelsNumber;
408 void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
410 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
412 std::string Data = "MainObject1-upward{up11_up21_up22,up12_up23,up13_up24;up21_up11,up22_up21_up12,up23_up23,up24}"
413 "downward{down11_MainObject1,down12_MainObject1;down21_down11,down22_down12,down23_down12,down24_down24_down11,down25_down12;down31_down11_down23,down32_down25}"
414 "down23-upward{down12_MainObject1;MainObject1_up11_up12_up13;up11_up21_up22,up12_up23,up13_up24;up21,up22_up21_up12,up23,up24}"
415 "downward{down31_down11_down23}"
416 "MainObject2-upward{up21,newup11_newup31,newup12_newup21;newup21_newup31LongName;newup31LongName}downward{newdown11_MainObject2,newdown12_MainObject2,newdown13_MainObject2;newdown21_newdown13,down21;newdown31_newdown11}"
417 "MainObject3-upward{moUP1_moUP4,moUP2_moUP3;moUP4,moUP3_down23}downward{moDOWN1_MainObject3}";
420 //GEOMUtils::ConvertStringToTree( Data, myTreeModel );
424 // GEOMUtils::TreeModel::const_iterator i;
425 // for ( i = aTreeModel.begin(); i != aTreeModel.end(); i++ ) {
426 // std::string objectEntry = i->first;
427 // std::cout << "\n\n Main object = " << objectEntry << std::endl;
429 // parseData( Data );
433 myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) );
434 QWidgetAction* moveNodesAction = new QWidgetAction( theViewFrame );
435 moveNodesAction->setDefaultWidget( myNodesMovable );
437 myDisplayAscendants = new QCheckBox( tr( "DISPLAY_ASCENDANTS" ));
438 myDisplayAscendants ->setChecked( true );
439 QWidgetAction* ShowParentsAction = new QWidgetAction(theViewFrame);
440 ShowParentsAction->setDefaultWidget( myDisplayAscendants );
442 myDisplayDescendants = new QCheckBox(tr("DISPLAY_DESCENDANTS"));
443 QWidgetAction* ShowChildrenAction = new QWidgetAction(theViewFrame);
444 ShowChildrenAction->setDefaultWidget( myDisplayDescendants );
446 myLevelsNumber = checkMaxLevelsNumber();
447 std::cout << "\n\n myLevelsNumber1 = " << myLevelsNumber << std::endl;
448 myHierarchyDepth = new QSpinBox();
449 myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() );
450 myHierarchyDepth->setValue( 0 );
451 myHierarchyDepth->setSpecialValueText( "All" );
452 QWidgetAction* LevelsAction = new QWidgetAction(theViewFrame);
453 LevelsAction->setDefaultWidget( myHierarchyDepth );
455 QLabel* LevelsLabel = new QLabel( tr("HIERARCHY_DEPTH") );
456 QWidgetAction* LevelsLebelAction = new QWidgetAction(theViewFrame);
457 LevelsLebelAction->setDefaultWidget( LevelsLabel );
460 QPushButton* UpdateButton = new QPushButton(tr("Update"));
461 QWidgetAction* UpdateAction = new QWidgetAction(theViewFrame);
462 UpdateAction->setDefaultWidget( UpdateButton );
464 cancelButton = new QPushButton(tr("CANCEL"));
465 cancelButton->setCheckable(true);
466 cancelButton->setVisible( false );
467 cancelAction = new QWidgetAction(theViewFrame);
468 cancelAction->setDefaultWidget( cancelButton );
469 cancelAction->setVisible(false);
471 progressBar = new QProgressBar(this);
472 progressBar->setMinimum( 0 );
473 progressBar->setMaximum( 1000 );
474 progressBar->setFixedWidth(100);
475 progressAction = new QWidgetAction(theViewFrame);
476 progressAction->setDefaultWidget( progressBar );
477 progressAction->setVisible(false);
479 QAction* separator = theViewFrame->toolMgr()->separator(false);
480 theViewFrame->toolMgr()->append( separator, theViewFrame->getToolBarId() );
481 theViewFrame->toolMgr()->append( moveNodesAction, theViewFrame->getToolBarId() );
482 theViewFrame->toolMgr()->append( LevelsLebelAction, theViewFrame->getToolBarId() );
483 theViewFrame->toolMgr()->append( LevelsAction, theViewFrame->getToolBarId() );
484 theViewFrame->toolMgr()->append( ShowParentsAction, theViewFrame->getToolBarId() );
485 theViewFrame->toolMgr()->append( ShowChildrenAction, theViewFrame->getToolBarId() );
486 QAction* separator2 = theViewFrame->toolMgr()->separator(false);
487 theViewFrame->toolMgr()->append( separator2, theViewFrame->getToolBarId() );
488 theViewFrame->toolMgr()->append( UpdateAction, theViewFrame->getToolBarId() );
489 std::cout<<"\n\n\n\n ToolBarId = " << theViewFrame->getToolBarId() << std::endl;
490 theViewFrame->toolMgr()->append( progressAction, theViewFrame->getToolBarId() );
491 theViewFrame->toolMgr()->append( cancelAction, theViewFrame->getToolBarId() );
493 connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel()));
495 connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) );
496 connect( myDisplayAscendants , SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) );
497 connect( myDisplayDescendants, SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) );
498 connect( UpdateButton, SIGNAL( clicked() ), this, SLOT( updateView() ) );
499 connect( myNodesMovable, SIGNAL( toggled(bool) ), this, SLOT( onMoveNodes( bool ) ) );
501 setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) );
502 setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) );
503 setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) );
507 void DependencyTree_View::onMoveNodes( bool theIsMoveNodes )
509 std::map<std::string,DependencyTree_Object*>::const_iterator i;
510 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
511 DependencyTree_Object* object = myTreeMap[ i->first ];
513 object->setMovable( theIsMoveNodes );
517 void DependencyTree_View::onHierarchyType()
519 myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() );
520 if( myHierarchyDepth->value() > checkMaxLevelsNumber() )
521 myHierarchyDepth->setValue( checkMaxLevelsNumber() );
523 if( myHierarchyDepth->value() == 0 )
524 myLevelsNumber = myHierarchyDepth->maximum();
526 myLevelsNumber = myHierarchyDepth->value();
530 void DependencyTree_View::updateView()
537 myLevelsObject.clear();
540 std::map<std::string,DependencyTree_Object*>::const_iterator i;
541 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
542 DependencyTree_Object* object = myTreeMap[ i->first ];
543 if( isItemAdded( object ) && object )
544 removeItem( object );
549 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
550 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
551 DependencyTree_Arrow* object = Arrows[ j->first ];
552 if( isItemAdded( object ) && object )
553 removeItem( object );
560 qthread = new DependencyTree_ComputeDlg_QThread(this);// = DependencyTree_ComputeDlg_QThread(this);// const_cast<DependencyTree_View*>(this) );
561 cancelAction->setVisible( true );
562 progressAction->setVisible(true);
563 startTimer(100); // millisecs
567 void DependencyTree_View::onRedrawTree()
572 void DependencyTree_View::onCancel()
575 cancelButton->setText( tr("CANCELING"));
576 cancelButton->setEnabled(false);
579 void DependencyTree_View::timerEvent(QTimerEvent *event)
581 if ( !cancelButton->isChecked() ) // not yet cancelled
582 // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() );
583 progressBar->setValue( iter++ );
585 if(!myIsCompute || qthread->isFinished())
587 cancelAction->setVisible( false );
588 progressAction->setVisible(false);
589 cancelButton->setText( tr("CANCEL"));
590 cancelButton->setEnabled(true);
596 void DependencyTree_View::closeEvent(QCloseEvent *event)
598 if(qthread->isRunning())
606 void DependencyTree_View::setIsCompute( bool theIsCompute )
608 myIsCompute = theIsCompute;
611 void DependencyTree_View::setHierarchyType( const int theType )
616 myDisplayAscendants->setChecked( true );
617 myDisplayDescendants->setChecked( true );
620 myDisplayAscendants->setChecked( true );
621 myDisplayDescendants->setChecked( false );
624 myDisplayAscendants->setChecked( false );
625 myDisplayDescendants->setChecked( true );
632 void DependencyTree_View::setNodesMovable( const bool theIsMovable )
634 myNodesMovable->setChecked( theIsMovable );
637 void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor )
639 if( isForegroundEnabled() )
641 setForegroundColor( theColor );
645 setBackgroundColor( theColor );
648 void DependencyTree_View::setNodeColor( const QColor& theColor )
650 std::map<std::string,DependencyTree_Object*>::const_iterator i;
651 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
652 DependencyTree_Object* object = myTreeMap[ i->first ];
653 object->setColor( theColor );
657 void DependencyTree_View::setMainNodeColor( const QColor& theColor )
659 std::map<std::string,DependencyTree_Object*>::const_iterator i;
660 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
661 DependencyTree_Object* object = myTreeMap[ i->first ];
662 object->setMainObjectColor( theColor );
666 void DependencyTree_View::setSelectNodeColor( const QColor& theColor )
668 std::map<std::string,DependencyTree_Object*>::const_iterator i;
669 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
670 DependencyTree_Object* object = myTreeMap[ i->first ];
671 object->setSelectColor( theColor );
675 void DependencyTree_View::setArrowColor( const QColor& theColor )
677 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
678 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
679 DependencyTree_Arrow* arrow = Arrows[ j->first ];
680 arrow->setColor( theColor );
684 void DependencyTree_View::setHighlightArrowColor( const QColor& theColor )
686 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
687 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
688 DependencyTree_Arrow* arrow = Arrows[ j->first ];
689 arrow->setHighlightColor( theColor );
693 void DependencyTree_View::setSelectArrowColor( const QColor& theColor )
695 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
696 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
697 DependencyTree_Arrow* arrow = Arrows[ j->first ];
698 arrow->setSelectColor( theColor );
702 //================================================================================
703 //================================================================================
705 DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread(DependencyTree_View* theView)
710 void DependencyTree_ComputeDlg_QThread::run()
712 myView->setIsCompute( true );
713 myView->onRedrawTree();
716 bool DependencyTree_ComputeDlg_QThread::result()
721 void DependencyTree_ComputeDlg_QThread::cancel()
723 myView->setIsCompute( false );
726 ////================================================================================
727 ////================================================================================
729 //DependencyTree_ComputeDlg_QThreadQDialog::DependencyTree_ComputeDlg_QThreadQDialog(QWidget* parent,
730 // DependencyTree_View* theView)
732 // Qt::WindowSystemMenuHint |
733 // Qt::WindowCloseButtonHint |
735 // Qt::WindowMaximizeButtonHint),
736 // qthread( theView )
739 // setWindowTitle(tr("TITLE"));
740 // setMinimumWidth( 200 );
742 // cancelButton = new QPushButton(tr("CANCEL"));
743 // cancelButton->setDefault(true);
744 // cancelButton->setCheckable(true);
746 // progressBar = new QProgressBar(this);
747 // progressBar->setMinimum( 0 );
748 // progressBar->setMaximum( 1000 );
750 // QGridLayout* layout = new QGridLayout(this);
751 // layout->setMargin( 11 );
752 // layout->setSpacing( 6 );
754 // layout->addWidget(progressBar, row++, 0, 1, 2);
755 // layout->addWidget(cancelButton, row++, 0, 1, 2);
759 // connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel()));
761 // startTimer(300); // millisecs
765 //bool DependencyTree_ComputeDlg_QThreadQDialog::result()
767 // return qthread.result();
770 //void DependencyTree_ComputeDlg_QThreadQDialog::onCancel()
773 // cancelButton->setText( tr("CANCELING"));
774 // cancelButton->setEnabled(false);
777 //void DependencyTree_ComputeDlg_QThreadQDialog::timerEvent(QTimerEvent *event)
779 // if ( !cancelButton->isChecked() ) // not yet cancelled
780 // // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() );
781 // progressBar->setValue( 10 );
783 // if(qthread.isFinished())
791 //void DependencyTree_ComputeDlg_QThreadQDialog::closeEvent(QCloseEvent *event)
793 // if(qthread.isRunning())