// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "DependencyTree_View.h" #include "DependencyTree_Object.h" #include "DependencyTree_Arrow.h" #include #include #include // GUI includes #include #include #include #include #include #include #include // Qt includes #include #include #include #include int iter = 0; DependencyTree_View::DependencyTree_View( QWidget* theParent ) :GraphicsView_ViewPort(theParent), myMaxDownwardLevelsNumber(0), myMaxUpwardLevelsNumber(0), myLevelsNumber(0), myIsCompute(true), myIsUpdate( true ) { SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; SalomeApp_Study* study = dynamic_cast(app->activeStudy()); SALOMEDS::Study_var myStudy = GeometryGUI::ClientStudyToStudy( study->studyDS()); LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); if ( !aSelMgr ) return; SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); GEOM::string_array_var ObjectIORs = new GEOM::string_array(); ObjectIORs->length( aSelList.Extent()); int aaa=0; for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next() ) { Handle( SALOME_InteractiveObject ) io = It.Value(); GEOM::GEOM_Object_var myObject = GEOM::GEOM_Object::_nil(); myObject = GEOMBase::ConvertIOinGEOMObject( io ); QString ior = myObject->GetEntry(); ObjectIORs[aaa] = ior.toLatin1().constData(); aaa++; std::cout << "\n\n IOR = " << ior.toStdString() << std::endl; } SALOMEDS::TMPFile_var SeqFile = GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, ObjectIORs ); char* buf; buf = (char*) &SeqFile[0]; std::cout << "\n\n\n\n\n TREE = " << buf << std::endl; GEOMUtils::ConvertStringToTree( buf, myTreeModel ); aSelMgr->clearSelected(); } DependencyTree_View::~DependencyTree_View() { } void DependencyTree_View::drawArrows() { GEOMUtils::TreeModel::const_iterator i; for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { DependencyTree_Object* Main_object = myTreeMap[i->first]; if( i->second.first.size() > 0 ) { GEOMUtils::LevelInfo Levelup = i->second.first.at(0); if( myDisplayAscendants ->isChecked() ) { GEOMUtils::LevelInfo::const_iterator node; for (node = Levelup.begin(); node != Levelup.end(); node++ ) { DependencyTree_Object* object = myTreeMap[node->first]; DependencyTree_Arrow* arrow = Arrows[std::pair(Main_object, object)]; if( arrow && !isItemAdded( arrow) ) addItem( arrow ); } } } if( myDisplayAscendants ->isChecked() ) drawWardArrows( i->second.first ); if( myDisplayDescendants->isChecked() ) drawWardArrows( i->second.second ); } } void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard ) { for(int j = 0; j < theWard.size(); j++ ) { if( j >= myLevelsNumber ) break; GEOMUtils::LevelInfo Level = theWard.at(j); GEOMUtils::LevelInfo::const_iterator node; for (node = Level.begin(); node != Level.end(); node++ ) { DependencyTree_Object* object = myTreeMap[node->first]; GEOMUtils::NodeLinks Links = node->second; for( int link = 0; link < Links.size(); link++ ) { DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; if( isItemAdded( object ) && isItemAdded( LinkObject ) ) { DependencyTree_Arrow* arrow = Arrows[std::pair(object, LinkObject)]; if( arrow && !isItemAdded( arrow) ) addItem( arrow ); } } } } } void DependencyTree_View::parseTree() { GEOMUtils::TreeModel::const_iterator i; for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { std::string objectEntry = i->first; addNode( objectEntry ); parseTreeWard( i->second.first ); if( i->second.first.size() > myMaxUpwardLevelsNumber ) myMaxUpwardLevelsNumber = i->second.first.size(); parseTreeWard( i->second.second ); if( i->second.second.size() > myMaxDownwardLevelsNumber ) myMaxDownwardLevelsNumber = i->second.second.size(); } for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { DependencyTree_Object* Main_object = myTreeMap[i->first]; if( i->second.first.size() > 0 ) { GEOMUtils::LevelInfo Levelup = i->second.first.at(0); GEOMUtils::LevelInfo::const_iterator node; for (node = Levelup.begin(); node != Levelup.end(); node++ ) { DependencyTree_Object* object = myTreeMap[node->first]; addArrow( Main_object, object ); } } parseTreeWardArrow( i->second.first ); parseTreeWardArrow( i->second.second ); } } void DependencyTree_View::parseTreeWard(const GEOMUtils::LevelsList theWard) { int levelsNumber = theWard.size(); for( int level = 0; level < levelsNumber; level++ ) { GEOMUtils::LevelInfo levelInfo = theWard[ level ]; GEOMUtils::LevelInfo::const_iterator node; for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { addNode( node->first ); } } } void DependencyTree_View::parseTreeWardArrow(const GEOMUtils::LevelsList theWard) { for(int j = 0; j < theWard.size(); j++ ) { GEOMUtils::LevelInfo Level = theWard.at(j); GEOMUtils::LevelInfo::const_iterator node; for (node = Level.begin(); node != Level.end(); node++ ) { DependencyTree_Object* object = myTreeMap[node->first]; std::vector Links = node->second; for( int link = 0; link < Links.size(); link++ ) { DependencyTree_Object* LinkObject = myTreeMap[Links[link]]; if( object && LinkObject ) addArrow( object, LinkObject ); } } } } //void DependencyTree_View::parseData( QString& theData ) //{ // int cursor = 0; // // while( theData.indexOf('-',cursor) != -1 ) //find next selected object // { // int objectIndex = theData.indexOf( '-', cursor ); // QString objectEntry = theData.mid( cursor, objectIndex - cursor ); // //addNode( objectEntry ); // std::cout<<"\n\nMainObject = " << objectEntry.toStdString() < myMaxUpwardLevelsNumber ) // myMaxUpwardLevelsNumber = upwardList.size(); // std::cout<<" Downward:" << std::endl; // LevelsList downwardList = parseWard( theData, cursor ); // if( downwardList.size() > myMaxDownwardLevelsNumber ) // myMaxDownwardLevelsNumber = downwardList.size(); // // myTreeModel[objectEntry] = QPair( upwardList, downwardList ); // } //} void DependencyTree_View::addNode( const std::string& theEntry ) { if( !myTreeMap[theEntry] ) myTreeMap[theEntry] = new DependencyTree_Object( theEntry ); } void DependencyTree_View::addArrow( DependencyTree_Object *startItem, DependencyTree_Object *endItem ) { bool isFind = false; std::cout << " " << startItem->getEntry() << " " << endItem->getEntry() << std::endl; std::map, DependencyTree_Arrow* >::const_iterator i; for (i = Arrows.begin(); i != Arrows.end(); i++ ) { DependencyTree_Arrow* arrow = i->second; if( arrow->getStartItem() == startItem && arrow->getEndItem() == endItem ) { isFind = true; std::cout<<" theSame " << std::endl; } else if( arrow->getStartItem() == endItem && arrow->getEndItem() == startItem ) { arrow->setIsBiLink( true ); std::cout<<" Bilink " << std::endl; isFind = true; } } if( !isFind ) { DependencyTree_Arrow *arrow = new DependencyTree_Arrow(startItem, endItem); //Arrows.append( arrow ); //addItem(arrow); Arrows[std::pair( startItem, endItem )] = arrow; std::cout<<" addArrow " << std::endl; } } //DependencyTree_View::LevelsList DependencyTree_View::parseWard( const QString& theData, int& theCursor ) //{ // int indexStart = theData.indexOf( "{", theCursor ) + 1; // int indexEnd = theData.indexOf( "}", indexStart ); // // QString ward = theData.mid( indexStart, indexEnd - indexStart ); // QStringList levelsListStr = ward.split( ';' ); // LevelsList levelsListData; // for( int level = 0; level < levelsListStr.size(); level++ ) { // std::cout<<" Level" << level + 1 << ":" << std::endl; // QStringList namesListStr = levelsListStr[level].split( ',' ); // LevelInfo levelInfoData; // for( int node = 0; node < namesListStr.size(); node++ ) { // QStringList linksListStr = namesListStr[node].split( '_' ); // QString nodeItem = linksListStr[0]; // if( !nodeItem.isEmpty() ) { // //addNode( nodeItem ); // NodeLinks linksListData; // std::cout<<" " << nodeItem.toStdString() << " - "; // for( int link = 1; link < linksListStr.size(); link++ ) { // QString linkItem = linksListStr[link]; // //addNode( linkItem ); // linksListData.append( linkItem ); // std::cout << linkItem.toStdString() << ", "; // }// Links // levelInfoData[nodeItem] = linksListData; // std::cout << std::endl; // } // }// Level's objects // levelsListData.append(levelInfoData); // }// Levels // // theCursor = indexEnd + 1; // // return levelsListData; //} void DependencyTree_View::drawTree() { int horDistance, verDistance; myCurrentLevel = 0; GEOMUtils::TreeModel::const_iterator i; for (i = myTreeModel.begin(); i != myTreeModel.end(); i++ ) { myCurrentLevel = 0; std::string objectEntry = i->first; DependencyTree_Object* objectItem = myTreeMap[ objectEntry ]; horDistance = 100 + int( objectItem->boundingRect().width() ); verDistance = 3 * int( objectItem->boundingRect().height() ); if( isItemAdded( objectItem ) ) { myCurrentLevel = myLevelMap[ objectEntry ]; } else { addItem( objectItem ); myLevelMap[ objectEntry ] = myCurrentLevel; myLevelsObject[ myCurrentLevel ].push_back( objectEntry ); } objectItem->setIsMainObject( true ); int levelposition = myCurrentLevel; if( myDisplayAscendants ->isChecked() ){ drawWard( i->second.first, -1 ); myCurrentLevel = levelposition; } if( myDisplayDescendants->isChecked() ) drawWard( i->second.second, 1 ); } std::map< int, std::vector >::const_iterator j; for (j = myLevelsObject.begin(); j != myLevelsObject.end(); j++ ) { int step = -horDistance*( j->second.size() - 1 )/2; std::cout<<"\n\n LEVEL = " << j->first << std::endl; for( int object = 0; object < j->second.size(); object++ ) { if( myIsCompute ) { std::cout << j->second.at( object ) << ", "; DependencyTree_Object* anObject = myTreeMap[ j->second.at( object ) ]; anObject->setPos( step, verDistance*j->first ); step += horDistance; //sleep(1); } } } centerOn( scene()->sceneRect().center() ); fitAll( true ); } void DependencyTree_View::drawWard( const GEOMUtils::LevelsList theWard, const int theLevelStep ) { std::cout << "\n\n myLevelsNumber2 = " << myLevelsNumber << std::endl; int levelsNumber = theWard.size(); std::cout << "\n\n levelsNumber = " << levelsNumber << std::endl; for( int level = 0; level < levelsNumber; level++ ) { if( level >= myLevelsNumber ) return; myCurrentLevel += theLevelStep; GEOMUtils::LevelInfo levelInfo = theWard.at( level ); GEOMUtils::LevelInfo::const_iterator node; for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) { DependencyTree_Object* object = myTreeMap[ node->first ]; if( !isItemAdded( object ) ) { addItem( object ); myLevelMap[ node->first ] = myCurrentLevel; myLevelsObject[ myCurrentLevel ].push_back( node->first ); } } } } void DependencyTree_View::onUpdateTree() { myLevelMap.clear(); myLevelsObject.clear(); std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; if( isItemAdded( object ) && object ) removeItem( object ); } std::map, DependencyTree_Arrow* >::const_iterator j; for (j = Arrows.begin(); j != Arrows.end(); j++ ) { DependencyTree_Arrow* object = Arrows[ j->first ]; if( isItemAdded( object ) && object ) removeItem( object ); } drawTree(); drawArrows(); } int DependencyTree_View::checkMaxLevelsNumber() { if( myDisplayAscendants ->isChecked() && myDisplayDescendants->isChecked() ) return myMaxUpwardLevelsNumber>myMaxDownwardLevelsNumber?myMaxUpwardLevelsNumber:myMaxDownwardLevelsNumber; else if( myDisplayAscendants ->isChecked() ) return myMaxUpwardLevelsNumber; else if( myDisplayDescendants->isChecked() ) return myMaxDownwardLevelsNumber; } void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame ) { SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); std::string Data = "MainObject1-upward{up11_up21_up22,up12_up23,up13_up24;up21_up11,up22_up21_up12,up23_up23,up24}" "downward{down11_MainObject1,down12_MainObject1;down21_down11,down22_down12,down23_down12,down24_down24_down11,down25_down12;down31_down11_down23,down32_down25}" "down23-upward{down12_MainObject1;MainObject1_up11_up12_up13;up11_up21_up22,up12_up23,up13_up24;up21,up22_up21_up12,up23,up24}" "downward{down31_down11_down23}" "MainObject2-upward{up21,newup11_newup31,newup12_newup21;newup21_newup31LongName;newup31LongName}downward{newdown11_MainObject2,newdown12_MainObject2,newdown13_MainObject2;newdown21_newdown13,down21;newdown31_newdown11}" "MainObject3-upward{moUP1_moUP4,moUP2_moUP3;moUP4,moUP3_down23}downward{moDOWN1_MainObject3}"; //GEOMUtils::ConvertStringToTree( Data, myTreeModel ); // GEOMUtils::TreeModel::const_iterator i; // for ( i = aTreeModel.begin(); i != aTreeModel.end(); i++ ) { // std::string objectEntry = i->first; // std::cout << "\n\n Main object = " << objectEntry << std::endl; // } // parseData( Data ); parseTree(); myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) ); QWidgetAction* moveNodesAction = new QWidgetAction( theViewFrame ); moveNodesAction->setDefaultWidget( myNodesMovable ); myDisplayAscendants = new QCheckBox( tr( "DISPLAY_ASCENDANTS" )); myDisplayAscendants ->setChecked( true ); QWidgetAction* ShowParentsAction = new QWidgetAction(theViewFrame); ShowParentsAction->setDefaultWidget( myDisplayAscendants ); myDisplayDescendants = new QCheckBox(tr("DISPLAY_DESCENDANTS")); QWidgetAction* ShowChildrenAction = new QWidgetAction(theViewFrame); ShowChildrenAction->setDefaultWidget( myDisplayDescendants ); myLevelsNumber = checkMaxLevelsNumber(); std::cout << "\n\n myLevelsNumber1 = " << myLevelsNumber << std::endl; myHierarchyDepth = new QSpinBox(); myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); myHierarchyDepth->setValue( 0 ); myHierarchyDepth->setSpecialValueText( "All" ); QWidgetAction* LevelsAction = new QWidgetAction(theViewFrame); LevelsAction->setDefaultWidget( myHierarchyDepth ); QLabel* LevelsLabel = new QLabel( tr("HIERARCHY_DEPTH") ); QWidgetAction* LevelsLebelAction = new QWidgetAction(theViewFrame); LevelsLebelAction->setDefaultWidget( LevelsLabel ); QPushButton* UpdateButton = new QPushButton(tr("Update")); QWidgetAction* UpdateAction = new QWidgetAction(theViewFrame); UpdateAction->setDefaultWidget( UpdateButton ); cancelButton = new QPushButton(tr("CANCEL")); cancelButton->setCheckable(true); cancelButton->setVisible( false ); cancelAction = new QWidgetAction(theViewFrame); cancelAction->setDefaultWidget( cancelButton ); cancelAction->setVisible(false); progressBar = new QProgressBar(this); progressBar->setMinimum( 0 ); progressBar->setMaximum( 1000 ); progressBar->setFixedWidth(100); progressAction = new QWidgetAction(theViewFrame); progressAction->setDefaultWidget( progressBar ); progressAction->setVisible(false); QAction* separator = theViewFrame->toolMgr()->separator(false); theViewFrame->toolMgr()->append( separator, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( moveNodesAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( LevelsLebelAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( LevelsAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( ShowParentsAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( ShowChildrenAction, theViewFrame->getToolBarId() ); QAction* separator2 = theViewFrame->toolMgr()->separator(false); theViewFrame->toolMgr()->append( separator2, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( UpdateAction, theViewFrame->getToolBarId() ); std::cout<<"\n\n\n\n ToolBarId = " << theViewFrame->getToolBarId() << std::endl; theViewFrame->toolMgr()->append( progressAction, theViewFrame->getToolBarId() ); theViewFrame->toolMgr()->append( cancelAction, theViewFrame->getToolBarId() ); connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) ); connect( myDisplayAscendants , SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) ); connect( myDisplayDescendants, SIGNAL( toggled(bool) ), this, SLOT( onHierarchyType() ) ); connect( UpdateButton, SIGNAL( clicked() ), this, SLOT( updateView() ) ); connect( myNodesMovable, SIGNAL( toggled(bool) ), this, SLOT( onMoveNodes( bool ) ) ); setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) ); setNodesMovable( resMgr->booleanValue( "Geometry", "dependency_tree_move_nodes", true ) ); setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) ); } void DependencyTree_View::onMoveNodes( bool theIsMoveNodes ) { std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; if( object ) object->setMovable( theIsMoveNodes ); } } void DependencyTree_View::onHierarchyType() { myHierarchyDepth->setRange( 0, checkMaxLevelsNumber() ); if( myHierarchyDepth->value() > checkMaxLevelsNumber() ) myHierarchyDepth->setValue( checkMaxLevelsNumber() ); if( myHierarchyDepth->value() == 0 ) myLevelsNumber = myHierarchyDepth->maximum(); else myLevelsNumber = myHierarchyDepth->value(); updateView(); } void DependencyTree_View::updateView() { if( !myIsUpdate ) return; myLevelMap.clear(); myLevelsObject.clear(); std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; if( isItemAdded( object ) && object ) removeItem( object ); } std::map, DependencyTree_Arrow* >::const_iterator j; for (j = Arrows.begin(); j != Arrows.end(); j++ ) { DependencyTree_Arrow* object = Arrows[ j->first ]; if( isItemAdded( object ) && object ) removeItem( object ); } iter = 0; qthread = new DependencyTree_ComputeDlg_QThread(this);// = DependencyTree_ComputeDlg_QThread(this);// const_cast(this) ); cancelAction->setVisible( true ); progressAction->setVisible(true); myNodesMovable->setEnabled(false); myHierarchyDepth->setEnabled( false); myDisplayAscendants->setEnabled( false ); myDisplayDescendants->setEnabled( false ); myTimer = startTimer(100); // millisecs qthread->start(); } void DependencyTree_View::onRedrawTree() { drawTree(); drawArrows(); } void DependencyTree_View::onCancel() { qthread->cancel(); cancelButton->setText( tr("CANCELING")); cancelButton->setEnabled(false); killTimer( myTimer ); qthread->killTimer( myTimer ); qthread->deleteLater(); } void DependencyTree_View::timerEvent(QTimerEvent *event) { if ( !cancelButton->isChecked() ) // not yet cancelled // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() ); progressBar->setValue( iter++ ); if(!myIsCompute || qthread->isFinished()) { cancelAction->setVisible( false ); progressAction->setVisible(false); cancelButton->setText( tr("CANCEL")); cancelButton->setEnabled(true); myNodesMovable->setEnabled( true ); myHierarchyDepth->setEnabled( true ); myDisplayAscendants->setEnabled( true ); myDisplayDescendants->setEnabled( true ); } event->accept(); } void DependencyTree_View::closeEvent(QCloseEvent *event) { if(qthread->isRunning()) { event->ignore(); return; } event->accept(); } void DependencyTree_View::setIsCompute( bool theIsCompute ) { myIsCompute = theIsCompute; } void DependencyTree_View::setHierarchyType( const int theType ) { myIsUpdate = false; switch( theType ) { case 0: myDisplayAscendants->setChecked( true ); myDisplayDescendants->setChecked( true ); break; case 1: myDisplayAscendants->setChecked( true ); myDisplayDescendants->setChecked( false ); break; case 2: myDisplayAscendants->setChecked( false ); myDisplayDescendants->setChecked( true ); break; } myIsUpdate = true; onHierarchyType(); } void DependencyTree_View::setNodesMovable( const bool theIsMovable ) { myNodesMovable->setChecked( theIsMovable ); } void DependencyTree_View::setPrefBackgroundColor( const QColor& theColor ) { if( isForegroundEnabled() ) { setForegroundColor( theColor ); updateForeground(); } else setBackgroundColor( theColor ); } void DependencyTree_View::setNodeColor( const QColor& theColor ) { std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; object->setColor( theColor ); } } void DependencyTree_View::setMainNodeColor( const QColor& theColor ) { std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; object->setMainObjectColor( theColor ); } } void DependencyTree_View::setSelectNodeColor( const QColor& theColor ) { std::map::const_iterator i; for (i = myTreeMap.begin(); i != myTreeMap.end(); i++ ) { DependencyTree_Object* object = myTreeMap[ i->first ]; object->setSelectColor( theColor ); } } void DependencyTree_View::setArrowColor( const QColor& theColor ) { std::map, DependencyTree_Arrow* >::const_iterator j; for (j = Arrows.begin(); j != Arrows.end(); j++ ) { DependencyTree_Arrow* arrow = Arrows[ j->first ]; arrow->setColor( theColor ); } } void DependencyTree_View::setHighlightArrowColor( const QColor& theColor ) { std::map, DependencyTree_Arrow* >::const_iterator j; for (j = Arrows.begin(); j != Arrows.end(); j++ ) { DependencyTree_Arrow* arrow = Arrows[ j->first ]; arrow->setHighlightColor( theColor ); } } void DependencyTree_View::setSelectArrowColor( const QColor& theColor ) { std::map, DependencyTree_Arrow* >::const_iterator j; for (j = Arrows.begin(); j != Arrows.end(); j++ ) { DependencyTree_Arrow* arrow = Arrows[ j->first ]; arrow->setSelectColor( theColor ); } } int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend ) { GraphicsView_ViewPort::select( theRect, theIsAppend ); SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); // get selection SALOME_ListIO listIO; aSelMgr->clearSelected(); SalomeApp_Study* study = dynamic_cast(app->activeStudy()); SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy( study->studyDS()); int StudyId = aStudyDS->StudyId(); for( initSelected(); moreSelected(); nextSelected() ) if( DependencyTree_Object* aDepObject = dynamic_cast( selectedObject() ) ) { GEOM::_objref_GEOM_BaseObject* object = GeometryGUI::GetGeomGen()->GetObject( StudyId, aDepObject->getEntry().c_str() ); CORBA::String_var aChildEntry = object->GetStudyEntry(); Handle(SALOME_InteractiveObject) tmpIO = new SALOME_InteractiveObject( aChildEntry.in(), "GEOM", "TEMP_IO"); listIO.Append(tmpIO); } aSelMgr->setSelectedObjects( listIO, true ); } //================================================================================ //================================================================================ DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread(DependencyTree_View* theView) { myView = theView; } void DependencyTree_ComputeDlg_QThread::run() { myView->setIsCompute( true ); myView->onRedrawTree(); } bool DependencyTree_ComputeDlg_QThread::result() { } void DependencyTree_ComputeDlg_QThread::cancel() { myView->setIsCompute( false ); } ////================================================================================ ////================================================================================ // //DependencyTree_ComputeDlg_QThreadQDialog::DependencyTree_ComputeDlg_QThreadQDialog(QWidget* parent, // DependencyTree_View* theView) // : QDialog(parent, // Qt::WindowSystemMenuHint | // Qt::WindowCloseButtonHint | // Qt::Dialog | // Qt::WindowMaximizeButtonHint), // qthread( theView ) //{ // // -- // setWindowTitle(tr("TITLE")); // setMinimumWidth( 200 ); // // cancelButton = new QPushButton(tr("CANCEL")); // cancelButton->setDefault(true); // cancelButton->setCheckable(true); // // progressBar = new QProgressBar(this); // progressBar->setMinimum( 0 ); // progressBar->setMaximum( 1000 ); // // QGridLayout* layout = new QGridLayout(this); // layout->setMargin( 11 ); // layout->setSpacing( 6 ); // int row = 0; // layout->addWidget(progressBar, row++, 0, 1, 2); // layout->addWidget(cancelButton, row++, 0, 1, 2); // adjustSize(); // update(); // // connect(cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); // // -- // startTimer(300); // millisecs // qthread.start(); //} // //bool DependencyTree_ComputeDlg_QThreadQDialog::result() //{ // return qthread.result(); //} // //void DependencyTree_ComputeDlg_QThreadQDialog::onCancel() //{ // qthread.cancel(); // cancelButton->setText( tr("CANCELING")); // cancelButton->setEnabled(false); //} // //void DependencyTree_ComputeDlg_QThreadQDialog::timerEvent(QTimerEvent *event) //{ // if ( !cancelButton->isChecked() ) // not yet cancelled // // progressBar->setValue( progressBar->maximum() * qthread.getMesh()->GetComputeProgress() ); // progressBar->setValue( 10 ); // // if(qthread.isFinished()) // { // close(); // } // // event->accept(); //} // //void DependencyTree_ComputeDlg_QThreadQDialog::closeEvent(QCloseEvent *event) //{ // if(qthread.isRunning()) // { // event->ignore(); // return; // } // event->accept(); //} //