mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-25 17:00:35 +05:00
- add possibility to rebuild dependency tree by selecting objects
This commit is contained in:
parent
2d26f49c9f
commit
66d16d30f7
@ -86,33 +86,3 @@ DependencyTree::DependencyTree()
|
||||
DependencyTree::~DependencyTree()
|
||||
{
|
||||
}
|
||||
|
||||
//void DependencyTree::setBackgroundColor( const QColor& theColor )
|
||||
//{
|
||||
// //myView->setBackgroundColor( theColor );
|
||||
// myBackgroundColor = theColor;
|
||||
//}
|
||||
//void DependencyTree::setNodeColor( const QColor& theColor )
|
||||
//{
|
||||
// myView->setNodeColor( theColor );
|
||||
//}
|
||||
//void DependencyTree::setMainNodeColor( const QColor& theColor )
|
||||
//{
|
||||
// myView->setMainNodeColor( theColor );
|
||||
//}
|
||||
//void DependencyTree::setSelectNodeColor( const QColor& theColor )
|
||||
//{
|
||||
// myView->setSelectNodeColor( theColor );
|
||||
//}
|
||||
//void DependencyTree::setArrowColor( const QColor& theColor )
|
||||
//{
|
||||
// myView->setArrowColor( theColor );
|
||||
//}
|
||||
//void DependencyTree::setHighlightArrowColor( const QColor& theColor )
|
||||
//{
|
||||
// myView->setHighlightArrowColor( theColor );
|
||||
//}
|
||||
//void DependencyTree::setSelectArrowColor( const QColor& theColor )
|
||||
//{
|
||||
// myView->setSelectArrowColor( theColor );
|
||||
//}
|
||||
|
@ -169,6 +169,7 @@ void DependencyTree_Object::updateName()
|
||||
|
||||
QString name = myGeomObject->GetName();
|
||||
QString studyEntry = myGeomObject->GetStudyEntry();
|
||||
std::cout<<"\n\n name = " << name.toStdString() << " studyEntry = " << studyEntry.toStdString() << std::endl;
|
||||
|
||||
if( studyEntry.isEmpty() ) {
|
||||
if( name.isEmpty() )
|
||||
|
@ -47,7 +47,7 @@ DependencyTree_View::DependencyTree_View( QWidget* theParent )
|
||||
myMaxDownwardLevelsNumber(0),
|
||||
myMaxUpwardLevelsNumber(0),
|
||||
myLevelsNumber(0),
|
||||
myIsCompute(true),
|
||||
myIsCompute(false),
|
||||
myIsUpdate( true ),
|
||||
myTotalCost(0),
|
||||
myComputedCost(0)
|
||||
@ -70,6 +70,8 @@ DependencyTree_View::~DependencyTree_View()
|
||||
|
||||
void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
|
||||
{
|
||||
qthread = new DependencyTree_ComputeDlg_QThread( this );
|
||||
|
||||
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
|
||||
|
||||
myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) );
|
||||
@ -134,7 +136,7 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
|
||||
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( updateButton, SIGNAL( clicked() ), this, SLOT( onUpdateModel( false ) ) );
|
||||
connect( cancelButton, SIGNAL( clicked() ), this, SLOT( onCancel() ) );
|
||||
|
||||
setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) );
|
||||
@ -142,9 +144,9 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
|
||||
setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) );
|
||||
}
|
||||
|
||||
void DependencyTree_View::updateModel()
|
||||
void DependencyTree_View::updateModel( bool getSelectedObjects )
|
||||
{
|
||||
getNewTreeModel();
|
||||
getNewTreeModel( getSelectedObjects );
|
||||
|
||||
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
|
||||
|
||||
@ -159,8 +161,11 @@ void DependencyTree_View::drawTree()
|
||||
calcTotalCost();
|
||||
std::cout << "\n\n\n TOTAL COST = " << myTotalCost << std::endl;
|
||||
|
||||
clearSelected();
|
||||
if( !myIsCompute )
|
||||
return;
|
||||
|
||||
clearView( false );
|
||||
clearSelected();
|
||||
|
||||
// draw nodes on scene
|
||||
std::map< std::string, int > entryLevelMap;
|
||||
@ -180,7 +185,7 @@ void DependencyTree_View::drawTree()
|
||||
if( isItemAdded( objectItem ) )
|
||||
currentLevel = entryLevelMap[ objectEntry ];
|
||||
else {
|
||||
addItem( objectItem );
|
||||
addNewItem( objectItem );
|
||||
objectItem->unselect();
|
||||
entryLevelMap[ objectEntry ] = currentLevel;
|
||||
levelObjects[ currentLevel ].push_back( objectEntry );
|
||||
@ -217,7 +222,7 @@ void DependencyTree_View::drawTree()
|
||||
DependencyTree_Object* object = myTreeMap[node->first];
|
||||
DependencyTree_Arrow* arrow = myArrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>(Main_object, object)];
|
||||
if( arrow && !isItemAdded( arrow) )
|
||||
addItem( arrow );
|
||||
addNewItem( arrow );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -227,6 +232,7 @@ void DependencyTree_View::drawTree()
|
||||
drawWardArrows( j->second.second );
|
||||
}
|
||||
std::cout << "\n ComputedCost = " << myComputedCost << std::endl;
|
||||
|
||||
}
|
||||
|
||||
int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend )
|
||||
@ -248,36 +254,33 @@ int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend )
|
||||
mySelectionMgr->setSelectedObjects( listIO, true );
|
||||
}
|
||||
|
||||
void DependencyTree_View::customEvent ( QEvent * event )
|
||||
void DependencyTree_View::customEvent( QEvent * event )
|
||||
{
|
||||
if( event->type() == DRAW_EVENT ) {
|
||||
//qthread->sleepDraw();
|
||||
|
||||
std::cout << "\n\n\n DRAW_EVENT!!! " << std::endl;
|
||||
QPushButton* cancelButton = dynamic_cast<QPushButton*>( cancelAction->defaultWidget() );
|
||||
QProgressBar* progressBar = dynamic_cast<QProgressBar*>( progressAction->defaultWidget() );
|
||||
|
||||
std::cout << "\n\n *** myIsCompute " << myIsCompute << std::endl;
|
||||
if ( !cancelButton->isChecked() ) {
|
||||
std::cout << "\n\n *** getComputeProgress = " << getComputeProgress() << std::endl;
|
||||
if ( !cancelButton->isChecked() )
|
||||
progressBar->setValue( progressBar->maximum() * getComputeProgress() );
|
||||
|
||||
}
|
||||
|
||||
std::cout << "\n\n *** qthread->isFinished() = " << qthread->isFinished() << std::endl;
|
||||
if( !myIsCompute || qthread->isFinished() ) {
|
||||
changeWidgetState( false );
|
||||
cancelButton->setChecked( false );
|
||||
progressBar->setValue(0);
|
||||
fitAll();
|
||||
QApplication::removePostedEvents( this, ( QEvent::Type )DRAW_EVENT );
|
||||
}
|
||||
}
|
||||
event->accept();
|
||||
}
|
||||
|
||||
void DependencyTree_View::addItem( QGraphicsItem* theObject )
|
||||
void DependencyTree_View::addNewItem( QGraphicsItem* theObject )
|
||||
{
|
||||
GraphicsView_ViewPort::addItem( theObject );
|
||||
qthread->sleepDraw();
|
||||
if( theObject )
|
||||
addItem( theObject );
|
||||
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
|
||||
QApplication::postEvent( this, new QEvent( ( QEvent::Type )DRAW_EVENT ) );
|
||||
}
|
||||
@ -424,19 +427,23 @@ void DependencyTree_View::closeEvent( QCloseEvent* event )
|
||||
event->accept();
|
||||
}
|
||||
|
||||
void DependencyTree_View::onUpdateModel( bool getSelectedObjects )
|
||||
{
|
||||
updateModel( getSelectedObjects );
|
||||
}
|
||||
|
||||
void DependencyTree_View::updateView()
|
||||
{
|
||||
if( !myIsUpdate )
|
||||
return;
|
||||
|
||||
// clearView( false );
|
||||
|
||||
qthread = new DependencyTree_ComputeDlg_QThread( this );
|
||||
|
||||
changeWidgetState( true );
|
||||
|
||||
//myTimer = startTimer( 100 ); // millisecs
|
||||
qthread->start();
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void DependencyTree_View::onMoveNodes( bool theIsMoveNodes )
|
||||
@ -575,7 +582,7 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard,
|
||||
for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) {
|
||||
DependencyTree_Object* object = myTreeMap[ node->first ];
|
||||
if( !isItemAdded( object ) ) {
|
||||
addItem( object );
|
||||
addNewItem( object );
|
||||
object->unselect();
|
||||
theEntryLevelMap[ node->first ] = theCurrentLevel;
|
||||
theLevelObjects[ theCurrentLevel ].push_back( node->first );
|
||||
@ -600,25 +607,25 @@ void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard )
|
||||
if( isItemAdded( object ) && isItemAdded( LinkObject ) ) {
|
||||
DependencyTree_Arrow* arrow = myArrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>(object, LinkObject)];
|
||||
if( arrow && !isItemAdded( arrow) )
|
||||
addItem( arrow );
|
||||
addNewItem( arrow );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DependencyTree_View::getNewTreeModel()
|
||||
void DependencyTree_View::getNewTreeModel( bool getSelectedObjects )
|
||||
{
|
||||
clearView( true );
|
||||
|
||||
SALOME_ListIO aSelList;
|
||||
mySelectionMgr->selectedObjects( aSelList );
|
||||
if( getSelectedObjects )
|
||||
mySelectionMgr->selectedObjects( myMainObjects );
|
||||
|
||||
// create a list of selected object entry
|
||||
GEOM::string_array_var objectsEntry = new GEOM::string_array();
|
||||
objectsEntry->length( aSelList.Extent());
|
||||
objectsEntry->length( myMainObjects.Extent());
|
||||
int iter = 0;
|
||||
for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next(), iter++ ) {
|
||||
for ( SALOME_ListIteratorOfListIO It( myMainObjects ); It.More(); It.Next(), iter++ ) {
|
||||
Handle( SALOME_InteractiveObject ) io = It.Value();
|
||||
GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil();
|
||||
geomObject = GEOMBase::ConvertIOinGEOMObject( io );
|
||||
@ -647,14 +654,16 @@ void DependencyTree_View::clearView( bool isClearModel )
|
||||
EntryObjectMap::const_iterator objectIter;
|
||||
for( objectIter = myTreeMap.begin(); objectIter != myTreeMap.end(); objectIter++ ) {
|
||||
DependencyTree_Object* object = objectIter->second;
|
||||
if( isItemAdded( object ) && object )
|
||||
if( object )
|
||||
if( isItemAdded( object ) )
|
||||
removeItem( object );
|
||||
}
|
||||
|
||||
ArrowsInfo::const_iterator arrowIter;
|
||||
for( arrowIter = myArrows.begin(); arrowIter != myArrows.end(); arrowIter++ ) {
|
||||
DependencyTree_Arrow* object = arrowIter->second;
|
||||
if( isItemAdded( object ) && object )
|
||||
if( object )
|
||||
if( isItemAdded( object ) )
|
||||
removeItem( object );
|
||||
}
|
||||
if( isClearModel ) {
|
||||
@ -664,7 +673,7 @@ void DependencyTree_View::clearView( bool isClearModel )
|
||||
myMaxDownwardLevelsNumber = 0;
|
||||
myMaxUpwardLevelsNumber = 0;
|
||||
myLevelsNumber = 0;
|
||||
myIsCompute = true;
|
||||
myIsCompute = false;
|
||||
myIsUpdate = true;
|
||||
}
|
||||
}
|
||||
@ -714,16 +723,19 @@ DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread( Dependency
|
||||
|
||||
void DependencyTree_ComputeDlg_QThread::run()
|
||||
{
|
||||
myView->myMutex.lock();
|
||||
// QMutexLocker lock( &myView->myMutex );
|
||||
myView->setIsCompute( true );
|
||||
myView->drawTree();
|
||||
myView->fitAll( true );
|
||||
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
|
||||
|
||||
QApplication::postEvent( myView, new QEvent( ( QEvent::Type )DRAW_EVENT ) );
|
||||
myView->myMutex.unlock();
|
||||
//exec();
|
||||
}
|
||||
|
||||
void DependencyTree_ComputeDlg_QThread::sleepDraw()
|
||||
{
|
||||
msleep(10);
|
||||
msleep(1);
|
||||
}
|
||||
|
||||
void DependencyTree_ComputeDlg_QThread::cancel()
|
||||
|
@ -26,6 +26,8 @@
|
||||
|
||||
#include <SalomeApp_Application.h>
|
||||
|
||||
#include <SALOME_ListIO.hxx>
|
||||
|
||||
#include <GEOMUtils.hxx>
|
||||
|
||||
#include <QWidgetAction>
|
||||
@ -34,6 +36,7 @@
|
||||
#include <QCheckBox>
|
||||
#include <QProgressBar>
|
||||
#include <QThread>
|
||||
#include <QMutex>
|
||||
|
||||
class DependencyTree_Object;
|
||||
class DependencyTree_Arrow;
|
||||
@ -71,12 +74,11 @@ public:
|
||||
~DependencyTree_View();
|
||||
|
||||
void init( GraphicsView_ViewFrame* );
|
||||
void updateModel();
|
||||
void updateModel( bool = true );
|
||||
void drawTree();
|
||||
|
||||
virtual int select( const QRectF&, bool );
|
||||
virtual void customEvent ( QEvent* );
|
||||
void addItem( QGraphicsItem* );
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
|
||||
void setHierarchyType( const int );
|
||||
@ -92,8 +94,13 @@ public:
|
||||
void setIsCompute( bool );
|
||||
bool getIsCompute();
|
||||
|
||||
|
||||
QMutex myMutex;
|
||||
|
||||
public slots:
|
||||
void onUpdateModel( bool = true );
|
||||
|
||||
protected:
|
||||
// void timerEvent( QTimerEvent* );
|
||||
void closeEvent( QCloseEvent* );
|
||||
|
||||
private slots:
|
||||
@ -108,6 +115,7 @@ private:
|
||||
|
||||
void addNode( const std::string& );
|
||||
void addArrow( DependencyTree_Object*, DependencyTree_Object* );
|
||||
void addNewItem( QGraphicsItem* );
|
||||
|
||||
void parseTree();
|
||||
void parseTreeWard(const GEOMUtils::LevelsList);
|
||||
@ -117,7 +125,7 @@ private:
|
||||
std::map< int, std::vector< std::string > >&, int, const int );
|
||||
void drawWardArrows( GEOMUtils::LevelsList );
|
||||
|
||||
void getNewTreeModel();
|
||||
void getNewTreeModel( bool = true );
|
||||
void clearView( bool );
|
||||
|
||||
int checkMaxLevelsNumber();
|
||||
@ -154,10 +162,12 @@ private:
|
||||
|
||||
DependencyTree_ComputeDlg_QThread* qthread;
|
||||
|
||||
SALOME_ListIO myMainObjects;
|
||||
|
||||
SALOMEDS::Study_var myStudy;
|
||||
LightApp_SelectionMgr* mySelectionMgr;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -119,13 +119,16 @@ void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu )
|
||||
GraphicsView_Viewer::contextMenuPopup( theMenu );
|
||||
std::cout<<"\n\n\n\n *****contextMenuPopup " << std::endl;
|
||||
|
||||
|
||||
if( DependencyTree_View* aViewPort = dynamic_cast<DependencyTree_View*>(getActiveViewPort()) )
|
||||
{
|
||||
int aNbSelected = aViewPort->nbSelected();
|
||||
std::cout<<"\n aNbSelected " << aNbSelected << std::endl;
|
||||
if( aNbSelected > 0 ) {
|
||||
theMenu->clear();
|
||||
theMenu->addAction( tr( "MEN_DISPLAY" ), this, SLOT( onShowSelected() ) );
|
||||
theMenu->addAction( tr( "MEN_DISPLAY_ONLY" ), this, SLOT( onShowOnlySelected() ) );
|
||||
theMenu->addAction( tr( "REBUILD_THE_TREE"), aViewPort, SLOT( onUpdateModel() ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user