X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FObjBrowser%2FOB_Browser.cxx;h=a660a57d762860607f6a1f12c68544be83fdc7ef;hb=95c32a3d017f9611ca3519ad1da9c9c23b4e183d;hp=fe451d4b1ee423890ba926da32c676db6f0fefb6;hpb=26c42324c345edd513f45434137aac7a48acfa08;p=modules%2Fgui.git diff --git a/src/ObjBrowser/OB_Browser.cxx b/src/ObjBrowser/OB_Browser.cxx index fe451d4b1..a660a57d7 100755 --- a/src/ObjBrowser/OB_Browser.cxx +++ b/src/ObjBrowser/OB_Browser.cxx @@ -82,6 +82,7 @@ myRootDecorated( true ) myView->setRootIsDecorated( true ); myView->setSelectionMode( QListView::Extended ); myView->installEventFilter( this ); + myView->viewport()->installEventFilter( this ); QVBoxLayout* main = new QVBoxLayout( this ); main->addWidget( myView ); @@ -178,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; @@ -428,9 +430,22 @@ 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 { - myColumnIds.contains( id ) && myView->isShown( myColumnIds[id] ); + return myColumnIds.contains( id ) && myView->isShown( myColumnIds[id] ); } void OB_Browser::setColumnShown( const int id, const bool on ) @@ -441,14 +456,39 @@ void OB_Browser::setColumnShown( const int id, const bool on ) myView->setShown( myColumnIds[id], on ); } -void OB_Browser::updateTree( SUIT_DataObject* o ) +void OB_Browser::setWidthMode( QListView::WidthMode mode ) { - updateTree( o ? o : getRootObject(), false ); + for ( int i = 0, n = myView->columns(); i < n; i++ ) + myView->setColumnWidthMode( i, mode ); } -void OB_Browser::updateTree( SUIT_DataObject* obj, const bool notify ) +QValueList OB_Browser::columns() const { - if ( !obj ) + QValueList lst; + for ( QMap::ConstIterator it = myColumnIds.begin(); it != myColumnIds.end(); ++it ) + lst.append( it.key() ); + return lst; +} + +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 ) +{ + if ( !myColumnIds.contains( id ) ) + return; + + myView->setAppropriate( myColumnIds[id], on ); +} + +void OB_Browser::updateTree( SUIT_DataObject* obj ) +{ + if ( !obj && !(obj = getRootObject()) ) return; DataObjectKey curKey; @@ -459,9 +499,6 @@ void OB_Browser::updateTree( SUIT_DataObject* obj, const bool notify ) SUIT_DataObject* curObj = storeState( selObjs, openObjs, selKeys, openKeys, curKey ); - if ( notify ) - emit aboutRefresh(); - createConnections( obj ); updateView( obj ); @@ -475,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; @@ -491,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 ) @@ -564,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, @@ -580,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; } @@ -699,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(); @@ -723,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 @@ -829,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 ) @@ -887,18 +943,53 @@ void OB_Browser::updateText( QListViewItem* item ) item->setText( it.data(), obj->text( it.key() ) ); } -bool OB_Browser::eventFilter(QObject* watched, QEvent* e) +bool OB_Browser::eventFilter( QObject* o, QEvent* e ) { - if ( watched == myView && e->type() == QEvent::ContextMenu ) + if ( o == myView && e->type() == QEvent::ContextMenu ) { - contextMenuRequest( (QContextMenuEvent*)e ); + QContextMenuEvent* ce = (QContextMenuEvent*)e; + if ( ce->reason() != QContextMenuEvent::Mouse ) + contextMenuRequest( ce ); return true; } - return QFrame::eventFilter(watched, e); + if ( o == myView->viewport() && e->type() == QEvent::MouseButtonRelease ) + { + QMouseEvent* me = (QMouseEvent*)e; + if ( me->button() == RightButton ) + { + QContextMenuEvent ce( QContextMenuEvent::Mouse, me->pos(), me->globalPos(), me->state() ); + contextMenuRequest( &ce ); + return true; + } + } + + return QFrame::eventFilter( o, 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 ); @@ -911,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 ) @@ -954,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 ) @@ -991,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(); } }