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 if( i->second.first.size() > 0 ) {
105 GEOMUtils::LevelInfo Levelup = i->second.first.at(0);
106 if( myDisplayAscendants ->isChecked() ) {
107 GEOMUtils::LevelInfo::const_iterator node;
108 for (node = Levelup.begin(); node != Levelup.end(); node++ ) {
109 DependencyTree_Object* object = myTreeMap[node->first];
110 DependencyTree_Arrow* arrow = Arrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>(Main_object, object)];
111 if( arrow && !isItemAdded( arrow) )
116 if( myDisplayAscendants ->isChecked() )
117 drawWardArrows( i->second.first );
118 if( myDisplayDescendants->isChecked() )
119 drawWardArrows( i->second.second );
124 void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard )
126 for(int j = 0; j < theWard.size(); j++ ) {
127 if( j >= myLevelsNumber )
129 GEOMUtils::LevelInfo Level = theWard.at(j);
130 GEOMUtils::LevelInfo::const_iterator node;
131 for (node = Level.begin(); node != Level.end(); node++ ) {
132 DependencyTree_Object* object = myTreeMap[node->first];
133 GEOMUtils::NodeLinks Links = node->second;
134 for( int link = 0; link < Links.size(); link++ ) {
135 DependencyTree_Object* LinkObject = myTreeMap[Links[link]];
136 if( isItemAdded( object ) && isItemAdded( LinkObject ) ) {
137 DependencyTree_Arrow* arrow = Arrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>(object, LinkObject)];
138 if( arrow && !isItemAdded( arrow) )
146 void DependencyTree_View::parseTree()
149 GEOMUtils::TreeModel::const_iterator i;
150 for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) {
151 std::string objectEntry = i->first;
152 addNode( objectEntry );
153 parseTreeWard( i->second.first );
154 if( i->second.first.size() > myMaxUpwardLevelsNumber )
155 myMaxUpwardLevelsNumber = i->second.first.size();
156 parseTreeWard( i->second.second );
157 if( i->second.second.size() > myMaxDownwardLevelsNumber )
158 myMaxDownwardLevelsNumber = i->second.second.size();
161 for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) {
162 DependencyTree_Object* Main_object = myTreeMap[i->first];
163 if( i->second.first.size() > 0 ) {
164 GEOMUtils::LevelInfo Levelup = i->second.first.at(0);
165 GEOMUtils::LevelInfo::const_iterator node;
166 for (node = Levelup.begin(); node != Levelup.end(); node++ ) {
167 DependencyTree_Object* object = myTreeMap[node->first];
168 addArrow( Main_object, object );
171 parseTreeWardArrow( i->second.first );
172 parseTreeWardArrow( i->second.second );
177 void DependencyTree_View::parseTreeWard(const GEOMUtils::LevelsList theWard)
179 int levelsNumber = theWard.size();
180 for( int level = 0; level < levelsNumber; level++ ) {
181 GEOMUtils::LevelInfo levelInfo = theWard[ level ];
182 GEOMUtils::LevelInfo::const_iterator node;
183 for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) {
184 addNode( node->first );
188 void DependencyTree_View::parseTreeWardArrow(const GEOMUtils::LevelsList theWard)
190 for(int j = 0; j < theWard.size(); j++ ) {
191 GEOMUtils::LevelInfo Level = theWard.at(j);
192 GEOMUtils::LevelInfo::const_iterator node;
193 for (node = Level.begin(); node != Level.end(); node++ ) {
194 DependencyTree_Object* object = myTreeMap[node->first];
195 std::vector<std::string> Links = node->second;
196 for( int link = 0; link < Links.size(); link++ ) {
197 DependencyTree_Object* LinkObject = myTreeMap[Links[link]];
198 if( object && LinkObject )
199 addArrow( object, LinkObject );
204 //void DependencyTree_View::parseData( QString& theData )
208 // while( theData.indexOf('-',cursor) != -1 ) //find next selected object
210 // int objectIndex = theData.indexOf( '-', cursor );
211 // QString objectEntry = theData.mid( cursor, objectIndex - cursor );
212 // //addNode( objectEntry );
213 // std::cout<<"\n\nMainObject = " << objectEntry.toStdString() <<std::endl;
214 // cursor = objectIndex;
216 // int upwardIndexBegin = theData.indexOf("{",cursor) + 1;
217 // int upwardIndexFinish = theData.indexOf("}",upwardIndexBegin);
218 // std::cout<<" Upward:" << std::endl;
219 // LevelsList upwardList = parseWard( theData, cursor );
220 // if( upwardList.size() > myMaxUpwardLevelsNumber )
221 // myMaxUpwardLevelsNumber = upwardList.size();
222 // std::cout<<" Downward:" << std::endl;
223 // LevelsList downwardList = parseWard( theData, cursor );
224 // if( downwardList.size() > myMaxDownwardLevelsNumber )
225 // myMaxDownwardLevelsNumber = downwardList.size();
227 // myTreeModel[objectEntry] = QPair<LevelsList,LevelsList>( upwardList, downwardList );
231 void DependencyTree_View::addNode( const std::string& theEntry )
233 if( !myTreeMap[theEntry] )
234 myTreeMap[theEntry] = new DependencyTree_Object( theEntry );
237 void DependencyTree_View::addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem )
241 std::cout << " " << startItem->getEntry() << " " << endItem->getEntry() << std::endl;
242 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator i;
243 for (i = Arrows.begin(); i != Arrows.end(); i++ ) {
244 DependencyTree_Arrow* arrow = i->second;
245 if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) {
247 std::cout<<" theSame " << std::endl;
249 else if( arrow->getStartItem() == endItem && arrow->getEndItem() == startItem ) {
250 arrow->setIsBiLink( true );
251 std::cout<<" Bilink " << std::endl;
257 DependencyTree_Arrow *arrow = new DependencyTree_Arrow(startItem, endItem);
258 //Arrows.append( arrow );
260 Arrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>( startItem, endItem )] = arrow;
261 std::cout<<" addArrow " << std::endl;
265 //DependencyTree_View::LevelsList DependencyTree_View::parseWard( const QString& theData, int& theCursor )
267 // int indexStart = theData.indexOf( "{", theCursor ) + 1;
268 // int indexEnd = theData.indexOf( "}", indexStart );
270 // QString ward = theData.mid( indexStart, indexEnd - indexStart );
271 // QStringList levelsListStr = ward.split( ';' );
272 // LevelsList levelsListData;
273 // for( int level = 0; level < levelsListStr.size(); level++ ) {
274 // std::cout<<" Level" << level + 1 << ":" << std::endl;
275 // QStringList namesListStr = levelsListStr[level].split( ',' );
276 // LevelInfo levelInfoData;
277 // for( int node = 0; node < namesListStr.size(); node++ ) {
278 // QStringList linksListStr = namesListStr[node].split( '_' );
279 // QString nodeItem = linksListStr[0];
280 // if( !nodeItem.isEmpty() ) {
281 // //addNode( nodeItem );
282 // NodeLinks linksListData;
283 // std::cout<<" " << nodeItem.toStdString() << " - ";
284 // for( int link = 1; link < linksListStr.size(); link++ ) {
285 // QString linkItem = linksListStr[link];
286 // //addNode( linkItem );
287 // linksListData.append( linkItem );
288 // std::cout << linkItem.toStdString() << ", ";
290 // levelInfoData[nodeItem] = linksListData;
291 // std::cout << std::endl;
293 // }// Level's objects
294 // levelsListData.append(levelInfoData);
297 // theCursor = indexEnd + 1;
299 // return levelsListData;
302 void DependencyTree_View::drawTree()
305 int horDistance, verDistance;
307 GEOMUtils::TreeModel::const_iterator i;
308 for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) {
310 std::string objectEntry = i->first;
311 DependencyTree_Object* objectItem = myTreeMap[ objectEntry ];
312 horDistance = 100 + int( objectItem->boundingRect().width() );
313 verDistance = 3 * int( objectItem->boundingRect().height() );
314 if( isItemAdded( objectItem ) ) {
315 myCurrentLevel = myLevelMap[ objectEntry ];
318 addItem( objectItem );
319 myLevelMap[ objectEntry ] = myCurrentLevel;
320 myLevelsObject[ myCurrentLevel ].push_back( objectEntry );
322 objectItem->setIsMainObject( true );
324 int levelposition = myCurrentLevel;
325 if( myDisplayAscendants ->isChecked() ){
326 drawWard( i->second.first, -1 );
327 myCurrentLevel = levelposition;
329 if( myDisplayDescendants->isChecked() )
330 drawWard( i->second.second, 1 );
333 std::map< int, std::vector<std::string> >::const_iterator j;
334 for (j = myLevelsObject.begin(); j != myLevelsObject.end(); j++ ) {
335 int step = -horDistance*( j->second.size() - 1 )/2;
336 std::cout<<"\n\n LEVEL = " << j->first << std::endl;
337 for( int object = 0; object < j->second.size(); object++ ) {
339 std::cout << j->second.at( object ) << ", ";
340 DependencyTree_Object* anObject = myTreeMap[ j->second.at( object ) ];
341 anObject->setPos( step, verDistance*j->first );
347 centerOn( scene()->sceneRect().center() );
351 void DependencyTree_View::drawWard( const GEOMUtils::LevelsList theWard, const int theLevelStep )
353 std::cout << "\n\n myLevelsNumber2 = " << myLevelsNumber << std::endl;
354 int levelsNumber = theWard.size();
355 std::cout << "\n\n levelsNumber = " << levelsNumber << std::endl;
356 for( int level = 0; level < levelsNumber; level++ ) {
357 if( level >= myLevelsNumber )
359 myCurrentLevel += theLevelStep;
360 GEOMUtils::LevelInfo levelInfo = theWard.at( level );
361 GEOMUtils::LevelInfo::const_iterator node;
362 for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) {
363 DependencyTree_Object* object = myTreeMap[ node->first ];
364 if( !isItemAdded( object ) ) {
365 std::cout<< "\n\n\n addItem = " << object->getEntry() << std::endl;
367 myLevelMap[ node->first ] = myCurrentLevel;
368 myLevelsObject[ myCurrentLevel ].push_back( node->first );
375 void DependencyTree_View::onUpdateTree()
378 myLevelsObject.clear();
381 std::map<std::string,DependencyTree_Object*>::const_iterator i;
382 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
383 DependencyTree_Object* object = myTreeMap[ i->first ];
384 if( isItemAdded( object ) && object )
385 removeItem( object );
389 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
390 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
391 DependencyTree_Arrow* object = Arrows[ j->first ];
392 if( isItemAdded( object ) && object )
393 removeItem( object );
401 int DependencyTree_View::checkMaxLevelsNumber()
403 if( myDisplayAscendants ->isChecked() && myDisplayDescendants->isChecked() )
404 return myMaxUpwardLevelsNumber>myMaxDownwardLevelsNumber?myMaxUpwardLevelsNumber:myMaxDownwardLevelsNumber;
405 else if( myDisplayAscendants ->isChecked() )
406 return myMaxUpwardLevelsNumber;
407 else if( myDisplayDescendants->isChecked() )
408 return myMaxDownwardLevelsNumber;
412 void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
414 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
416 std::string Data = "MainObject1-upward{up11_up21_up22,up12_up23,up13_up24;up21_up11,up22_up21_up12,up23_up23,up24}"
417 "downward{down11_MainObject1,down12_MainObject1;down21_down11,down22_down12,down23_down12,down24_down24_down11,down25_down12;down31_down11_down23,down32_down25}"
418 "down23-upward{down12_MainObject1;MainObject1_up11_up12_up13;up11_up21_up22,up12_up23,up13_up24;up21,up22_up21_up12,up23,up24}"
419 "downward{down31_down11_down23}"
420 "MainObject2-upward{up21,newup11_newup31,newup12_newup21;newup21_newup31LongName;newup31LongName}downward{newdown11_MainObject2,newdown12_MainObject2,newdown13_MainObject2;newdown21_newdown13,down21;newdown31_newdown11}"
421 "MainObject3-upward{moUP1_moUP4,moUP2_moUP3;moUP4,moUP3_down23}downward{moDOWN1_MainObject3}";
424 //GEOMUtils::ConvertStringToTree( Data, myTreeModel );
428 // GEOMUtils::TreeModel::const_iterator i;
429 // for ( i = aTreeModel.begin(); i != aTreeModel.end(); i++ ) {
430 // std::string objectEntry = i->first;
431 // std::cout << "\n\n Main object = " << objectEntry << std::endl;
433 // parseData( Data );
437 myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) );
438 QWidgetAction* moveNodesAction = new QWidgetAction( theViewFrame );
439 moveNodesAction->setDefaultWidget( myNodesMovable );
441 myDisplayAscendants = new QCheckBox( tr( "DISPLAY_ASCENDANTS" ));
442 myDisplayAscendants ->setChecked( true );
443 QWidgetAction* ShowParentsAction = new QWidgetAction(theViewFrame);
444 ShowParentsAction->setDefaultWidget( myDisplayAscendants );
446 myDisplayDescendants = new QCheckBox(tr("DISPLAY_DESCENDANTS"));
447 QWidgetAction* ShowChildrenAction = new QWidgetAction(theViewFrame);
448 ShowChildrenAction->setDefaultWidget( myDisplayDescendants );
450 myLevelsNumber = checkMaxLevelsNumber();
451 std::cout << "\n\n myLevelsNumber1 = " << myLevelsNumber << std::endl;
452 myHierarchyDepth = new QSpinBox();
453 myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() );
454 myHierarchyDepth->setValue( 0 );
455 myHierarchyDepth->setSpecialValueText( "All" );
456 QWidgetAction* LevelsAction = new QWidgetAction(theViewFrame);
457 LevelsAction->setDefaultWidget( myHierarchyDepth );
459 QLabel* LevelsLabel = new QLabel( tr("HIERARCHY_DEPTH") );
460 QWidgetAction* LevelsLebelAction = new QWidgetAction(theViewFrame);
461 LevelsLebelAction->setDefaultWidget( LevelsLabel );
464 QPushButton* UpdateButton = new QPushButton(tr("Update"));
465 QWidgetAction* UpdateAction = new QWidgetAction(theViewFrame);
466 UpdateAction->setDefaultWidget( UpdateButton );
468 cancelButton = new QPushButton(tr("CANCEL"));
469 cancelButton->setCheckable(true);
470 cancelButton->setVisible( false );
471 cancelAction = new QWidgetAction(theViewFrame);
472 cancelAction->setDefaultWidget( cancelButton );
473 cancelAction->setVisible(false);
475 progressBar = new QProgressBar(this);
476 progressBar->setMinimum( 0 );
477 progressBar->setMaximum( 1000 );
478 progressBar->setFixedWidth(100);
479 progressAction = new QWidgetAction(theViewFrame);
480 progressAction->setDefaultWidget( progressBar );
481 progressAction->setVisible(false);
483 QAction* separator = theViewFrame->toolMgr()->separator(false);
484 theViewFrame->toolMgr()->append( separator, theViewFrame->getToolBarId() );
485 theViewFrame->toolMgr()->append( moveNodesAction, theViewFrame->getToolBarId() );
486 theViewFrame->toolMgr()->append( LevelsLebelAction, theViewFrame->getToolBarId() );
487 theViewFrame->toolMgr()->append( LevelsAction, theViewFrame->getToolBarId() );
488 theViewFrame->toolMgr()->append( ShowParentsAction, theViewFrame->getToolBarId() );
489 theViewFrame->toolMgr()->append( ShowChildrenAction, theViewFrame->getToolBarId() );
490 QAction* separator2 = theViewFrame->toolMgr()->separator(false);
491 theViewFrame->toolMgr()->append( separator2, theViewFrame->getToolBarId() );
492 theViewFrame->toolMgr()->append( UpdateAction, theViewFrame->getToolBarId() );
493 std::cout<<"\n\n\n\n ToolBarId = " << theViewFrame->getToolBarId() << std::endl;
494 theViewFrame->toolMgr()->append( progressAction, theViewFrame->getToolBarId() );
495 theViewFrame->toolMgr()->append( cancelAction, theViewFrame->getToolBarId() );
497 connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel()));
499 connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) );
500 connect( myDisplayAscendants , SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) );
501 connect( myDisplayDescendants, SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) );
502 connect( UpdateButton, SIGNAL( clicked() ), this, SLOT( updateView() ) );
503 connect( myNodesMovable, SIGNAL( toggled(bool) ), this, SLOT( onMoveNodes( bool ) ) );
505 setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) );
506 setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) );
507 setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) );
511 void DependencyTree_View::onMoveNodes( bool theIsMoveNodes )
513 std::map<std::string,DependencyTree_Object*>::const_iterator i;
514 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
515 DependencyTree_Object* object = myTreeMap[ i->first ];
517 object->setMovable( theIsMoveNodes );
521 void DependencyTree_View::onHierarchyType()
523 myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() );
524 if( myHierarchyDepth->value() > checkMaxLevelsNumber() )
525 myHierarchyDepth->setValue( checkMaxLevelsNumber() );
527 if( myHierarchyDepth->value() == 0 )
528 myLevelsNumber = myHierarchyDepth->maximum();
530 myLevelsNumber = myHierarchyDepth->value();
534 void DependencyTree_View::updateView()
541 myLevelsObject.clear();
544 std::map<std::string,DependencyTree_Object*>::const_iterator i;
545 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
546 DependencyTree_Object* object = myTreeMap[ i->first ];
547 if( isItemAdded( object ) && object )
548 removeItem( object );
553 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
554 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
555 DependencyTree_Arrow* object = Arrows[ j->first ];
556 if( isItemAdded( object ) && object )
557 removeItem( object );
564 qthread = new DependencyTree_ComputeDlg_QThread(this);// = DependencyTree_ComputeDlg_QThread(this);// const_cast<DependencyTree_View*>(this) );
565 cancelAction->setVisible( true );
566 progressAction->setVisible(true);
567 startTimer(100); // millisecs
571 void DependencyTree_View::onRedrawTree()
576 void DependencyTree_View::onCancel()
579 cancelButton->setText( tr("CANCELING"));
580 cancelButton->setEnabled(false);
583 void DependencyTree_View::timerEvent(QTimerEvent *event)
585 if ( !cancelButton->isChecked() ) // not yet cancelled
586 // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() );
587 progressBar->setValue( iter++ );
589 if(!myIsCompute || qthread->isFinished())
591 cancelAction->setVisible( false );
592 progressAction->setVisible(false);
593 cancelButton->setText( tr("CANCEL"));
594 cancelButton->setEnabled(true);
600 void DependencyTree_View::closeEvent(QCloseEvent *event)
602 if(qthread->isRunning())
610 void DependencyTree_View::setIsCompute( bool theIsCompute )
612 myIsCompute = theIsCompute;
615 void DependencyTree_View::setHierarchyType( const int theType )
620 myDisplayAscendants->setChecked( true );
621 myDisplayDescendants->setChecked( true );
624 myDisplayAscendants->setChecked( true );
625 myDisplayDescendants->setChecked( false );
628 myDisplayAscendants->setChecked( false );
629 myDisplayDescendants->setChecked( true );
636 void DependencyTree_View::setNodesMovable( const bool theIsMovable )
638 myNodesMovable->setChecked( theIsMovable );
641 void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor )
643 if( isForegroundEnabled() )
645 setForegroundColor( theColor );
649 setBackgroundColor( theColor );
652 void DependencyTree_View::setNodeColor( const QColor& theColor )
654 std::map<std::string,DependencyTree_Object*>::const_iterator i;
655 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
656 DependencyTree_Object* object = myTreeMap[ i->first ];
657 object->setColor( theColor );
661 void DependencyTree_View::setMainNodeColor( const QColor& theColor )
663 std::map<std::string,DependencyTree_Object*>::const_iterator i;
664 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
665 DependencyTree_Object* object = myTreeMap[ i->first ];
666 object->setMainObjectColor( theColor );
670 void DependencyTree_View::setSelectNodeColor( const QColor& theColor )
672 std::map<std::string,DependencyTree_Object*>::const_iterator i;
673 for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) {
674 DependencyTree_Object* object = myTreeMap[ i->first ];
675 object->setSelectColor( theColor );
679 void DependencyTree_View::setArrowColor( const QColor& theColor )
681 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
682 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
683 DependencyTree_Arrow* arrow = Arrows[ j->first ];
684 arrow->setColor( theColor );
688 void DependencyTree_View::setHighlightArrowColor( const QColor& theColor )
690 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
691 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
692 DependencyTree_Arrow* arrow = Arrows[ j->first ];
693 arrow->setHighlightColor( theColor );
697 void DependencyTree_View::setSelectArrowColor( const QColor& theColor )
699 std::map<std::pair<DependencyTree_Object*,DependencyTree_Object*>, DependencyTree_Arrow* >::const_iterator j;
700 for (j = Arrows.begin(); j != Arrows.end(); j++ ) {
701 DependencyTree_Arrow* arrow = Arrows[ j->first ];
702 arrow->setSelectColor( theColor );
706 int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend )
708 GraphicsView_ViewPort::select( theRect, theIsAppend );
710 // SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
712 // LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
715 // SALOME_ListIO listIO;
717 // SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
718 // SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS());
719 // int StudyId = aStudyDS->StudyId();
720 // for( initSelected(); moreSelected(); nextSelected() )
721 // if( DependencyTree_Object* aDepObject = dynamic_cast<DependencyTree_Object*>( selectedObject() ) ) {
723 // _PTR(SObject) SO ( aStudyDS->FindObjectID( aDepObject->getEntry().c_str() ) );
724 // if ( SO ) { //;&& QString(SO->GetID().c_str()) == QString(SO->GetFatherComponent()->GetID().c_str()) ) {
725 // _PTR(SComponent) SC ( SO->GetFatherComponent() );
726 // // if component is selected
727 // _PTR(ChildIterator) anIter ( aStudyDS->NewChildIterator( SO ) );
728 // anIter->InitEx( true );
729 // while( anIter->More() ) {
730 // _PTR(SObject) valSO ( anIter->Value() );
731 // _PTR(SObject) refSO;
732 // if ( !valSO->ReferencedObject( refSO ) ) {
733 // listIO.Append( new SALOME_InteractiveObject(valSO->GetID().c_str(),
734 // SC->ComponentDataType().c_str(),
735 // valSO->GetName().c_str()) );
742 // aSelMgr->setSelectedObjects( listIO, true );
745 //================================================================================
746 //================================================================================
748 DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread(DependencyTree_View* theView)
753 void DependencyTree_ComputeDlg_QThread::run()
755 myView->setIsCompute( true );
756 myView->onRedrawTree();
759 bool DependencyTree_ComputeDlg_QThread::result()
764 void DependencyTree_ComputeDlg_QThread::cancel()
766 myView->setIsCompute( false );
769 ////================================================================================
770 ////================================================================================
772 //DependencyTree_ComputeDlg_QThreadQDialog::DependencyTree_ComputeDlg_QThreadQDialog(QWidget* parent,
773 // DependencyTree_View* theView)
775 // Qt::WindowSystemMenuHint |
776 // Qt::WindowCloseButtonHint |
778 // Qt::WindowMaximizeButtonHint),
779 // qthread( theView )
782 // setWindowTitle(tr("TITLE"));
783 // setMinimumWidth( 200 );
785 // cancelButton = new QPushButton(tr("CANCEL"));
786 // cancelButton->setDefault(true);
787 // cancelButton->setCheckable(true);
789 // progressBar = new QProgressBar(this);
790 // progressBar->setMinimum( 0 );
791 // progressBar->setMaximum( 1000 );
793 // QGridLayout* layout = new QGridLayout(this);
794 // layout->setMargin( 11 );
795 // layout->setSpacing( 6 );
797 // layout->addWidget(progressBar, row++, 0, 1, 2);
798 // layout->addWidget(cancelButton, row++, 0, 1, 2);
802 // connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel()));
804 // startTimer(300); // millisecs
808 //bool DependencyTree_ComputeDlg_QThreadQDialog::result()
810 // return qthread.result();
813 //void DependencyTree_ComputeDlg_QThreadQDialog::onCancel()
816 // cancelButton->setText( tr("CANCELING"));
817 // cancelButton->setEnabled(false);
820 //void DependencyTree_ComputeDlg_QThreadQDialog::timerEvent(QTimerEvent *event)
822 // if ( !cancelButton->isChecked() ) // not yet cancelled
823 // // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() );
824 // progressBar->setValue( 10 );
826 // if(qthread.isFinished())
834 //void DependencyTree_ComputeDlg_QThreadQDialog::closeEvent(QCloseEvent *event)
836 // if(qthread.isRunning())