X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FObjBrowser%2FOB_Browser.cxx;h=a660a57d762860607f6a1f12c68544be83fdc7ef;hb=95c32a3d017f9611ca3519ad1da9c9c23b4e183d;hp=419933094d5204b41fd5d16a9072000ae6cce6da;hpb=df63f9345b7280b239f6d7c165ab008766950a8c;p=modules%2Fgui.git diff --git a/src/ObjBrowser/OB_Browser.cxx b/src/ObjBrowser/OB_Browser.cxx index 419933094..a660a57d7 100755 --- a/src/ObjBrowser/OB_Browser.cxx +++ b/src/ObjBrowser/OB_Browser.cxx @@ -179,6 +179,7 @@ void OB_Browser::setRootObject( SUIT_DataObject* theRoot ) if ( theRoot ) curObj = storeState( selObjs, openObjs, selKeys, openKeys, curKey ); + removeConnections( myRoot ); if ( myRoot != theRoot && isAutoDeleteObjects() ) delete myRoot; @@ -429,6 +430,19 @@ void OB_Browser::setColumnTitle( const int id, const QIconSet& icon, const QStri lv->setColumnText( myColumnIds[id], icon, label ); } +QString OB_Browser::nameTitle() const +{ + return myView->columnText( 0 ); +} + +QString OB_Browser::columnTitle( const int id ) const +{ + QString txt; + if ( myColumnIds.contains( id ) ) + txt = myView->columnText( myColumnIds[id] ); + return txt; +} + bool OB_Browser::isColumnVisible( const int id ) const { return myColumnIds.contains( id ) && myView->isShown( myColumnIds[id] ); @@ -442,6 +456,12 @@ void OB_Browser::setColumnShown( const int id, const bool on ) myView->setShown( myColumnIds[id], on ); } +void OB_Browser::setWidthMode( QListView::WidthMode mode ) +{ + for ( int i = 0, n = myView->columns(); i < n; i++ ) + myView->setColumnWidthMode( i, mode ); +} + QValueList OB_Browser::columns() const { QValueList lst; @@ -450,14 +470,25 @@ QValueList OB_Browser::columns() const return lst; } -void OB_Browser::updateTree( SUIT_DataObject* o ) +bool OB_Browser::appropriateColumn( const int id ) const +{ + bool res = false; + if ( myColumnIds.contains( id ) ) + res = myView->appropriate( myColumnIds[id] ); + return res; +} + +void OB_Browser::setAppropriateColumn( const int id, const bool on ) { - updateTree( o ? o : getRootObject(), false ); + if ( !myColumnIds.contains( id ) ) + return; + + myView->setAppropriate( myColumnIds[id], on ); } -void OB_Browser::updateTree( SUIT_DataObject* obj, const bool notify ) +void OB_Browser::updateTree( SUIT_DataObject* obj ) { - if ( !obj ) + if ( !obj && !(obj = getRootObject()) ) return; DataObjectKey curKey; @@ -468,14 +499,6 @@ void OB_Browser::updateTree( SUIT_DataObject* obj, const bool notify ) SUIT_DataObject* curObj = storeState( selObjs, openObjs, selKeys, openKeys, curKey ); - if ( notify ) - { - bool upd = isAutoUpdate(); - setAutoUpdate( false ); - emit aboutRefresh(); - setAutoUpdate( upd ); - } - createConnections( obj ); updateView( obj ); @@ -489,7 +512,7 @@ void OB_Browser::updateTree( SUIT_DataObject* obj, const bool notify ) void OB_Browser::replaceTree( SUIT_DataObject* src, SUIT_DataObject* trg ) { - if ( !src || !trg || src->root() != getRootObject() ) + if ( !src || !trg || src == trg || src->root() != getRootObject() ) return; DataObjectKey curKey; @@ -505,7 +528,8 @@ void OB_Browser::replaceTree( SUIT_DataObject* src, SUIT_DataObject* trg ) src->setParent( 0 ); - if ( src != trg && isAutoDeleteObjects() ) + removeConnections( src ); + if ( isAutoDeleteObjects() ) delete src; if ( parent && pos != -1 ) @@ -578,7 +602,7 @@ void OB_Browser::updateView( const SUIT_DataObject* theStartObj ) createTree( it.current(), 0, 0 ); } else - createTree( theStartObj, parent, after ); + createTree( theStartObj, parent, after ? after : parent ); } QListViewItem* OB_Browser::createTree( const SUIT_DataObject* obj, @@ -594,6 +618,9 @@ QListViewItem* OB_Browser::createTree( const SUIT_DataObject* obj, for ( DataObjectListIterator it ( lst ); it.current(); ++it ) createTree( it.current(), item ); + if ( item ) + item->setOpen( obj->isOpen() ); + return item; } @@ -713,6 +740,7 @@ void OB_Browser::removeReferences( QListViewItem* item ) return; SUIT_DataObject* obj = dataObject( item ); + obj->disconnect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); myItems.remove( obj ); QListViewItem* i = item->firstChild(); @@ -737,6 +765,20 @@ void OB_Browser::createConnections( SUIT_DataObject* obj ) it.current()->connect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); } +void OB_Browser::removeConnections( SUIT_DataObject* obj ) +{ + if ( !obj ) + return; + + DataObjectList childList; + obj->children( childList, true ); + + childList.prepend( obj ); + + for ( DataObjectListIterator it( childList ); it.current(); ++it ) + it.current()->disconnect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); +} + SUIT_DataObject* OB_Browser::storeState( DataObjectMap& selObjs, DataObjectMap& openObjs, DataObjectKeyMap& selKeys, DataObjectKeyMap& openKeys, DataObjectKey& curKey ) const @@ -843,9 +885,9 @@ void OB_Browser::onExpand() expand( listViewItem( itr.current() ) ); } -void OB_Browser::onRefresh() +void OB_Browser::onColumnVisible( int id ) { - updateTree( 0, true ); + setColumnShown( id, !isColumnVisible( id ) ); } void OB_Browser::onDestroyed( SUIT_DataObject* obj ) @@ -926,6 +968,28 @@ bool OB_Browser::eventFilter( QObject* o, QEvent* e ) void OB_Browser::contextMenuPopup( QPopupMenu* menu ) { +/* QValueList cols; + for ( QMap::ConstIterator it = myColumnIds.begin(); it != myColumnIds.end(); ++it ) + { + if ( appropriateColumn( it.key() ) ) + cols.append( it.key() ); + } + + uint num = menu->count(); + menu->setCheckable( true ); + for ( QValueList::const_iterator iter = cols.begin(); iter != cols.end(); ++iter ) + { + QString name = columnTitle( *iter ); + if ( name.isEmpty() ) + continue; + + int id = menu->insertItem( name, this, SLOT( onColumnVisible( int ) ) ); + menu->setItemChecked( id, isColumnVisible( *iter ) ); + menu->setItemParameter( id, *iter ); + } + if ( menu->count() != num ) + menu->insertSeparator();*/ + DataObjectList selected; getSelected( selected ); @@ -938,7 +1002,6 @@ void OB_Browser::contextMenuPopup( QPopupMenu* menu ) menu->insertItem( tr( "MEN_EXPAND_ALL" ), this, SLOT( onExpand() ) ); menu->insertSeparator(); } - menu->insertItem( tr( "MEN_REFRESH" ), this, SLOT( onRefresh() ) ); } void OB_Browser::expand( QListViewItem* item ) @@ -981,6 +1044,7 @@ void OB_Browser::removeObject( SUIT_DataObject* obj, const bool autoUpd ) QListViewItem* item = listViewItem( obj ); + obj->disconnect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); myItems.remove( obj ); if ( obj == myRoot ) @@ -1018,10 +1082,10 @@ void OB_Browser::openBranch( QListViewItem* item, const int level ) if ( !item || level < 1 || !item->childCount() ) return; - item->setOpen( true ); while ( item ) { - openBranch( item, level - 1 ); + item->setOpen( true ); + openBranch( item->firstChild(), level - 1 ); item = item->nextSibling(); } }