1 // SALOME SALOMEGUI : implementation of desktop and GUI kernel
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : QAD_ObjectBrowser.cxx
25 // Author : Nicolas REJNERI
30 #include "QAD_ObjectBrowserItem.h"
31 #include "QAD_ObjectBrowser.h"
32 #include "QAD_Application.h"
33 #include "QAD_MessageBox.h"
34 #include "QAD_Desktop.h"
35 #include "QAD_Config.h"
36 #include "QAD_Settings.h"
37 #include "QAD_Tools.h"
38 #include "QAD_RightFrame.h"
39 #include "QAD_LeftFrame.h"
40 #include "SALOME_Selection.h"
41 #include "SALOME_InteractiveObject.hxx"
42 #include "SALOME_ListIteratorOfListIO.hxx"
43 #include "SALOMEGUI_SetValueDlg.h"
44 #include "SALOMEGUI_TableDlg.h"
45 #include "SALOMEGUI_NameDlg.h"
48 #include <qlistview.h>
50 #include <qpopupmenu.h>
51 #include <qtabwidget.h>
52 #include <qpushbutton.h>
57 #include <qdragobject.h>
58 #include <qstringlist.h>
60 //VRV: porting on Qt 3.0.5
61 #if QT_VERSION >= 0x030005
64 //VRV: porting on Qt 3.0.5
66 #define UC_NEW_EMPTY_ID 1000000
67 #define UC_NEW_COMP_ID 1000002
68 #define UC_NEW_FULL_ID 1000004
69 #define UC_NEW_COPY_ID 1000006
70 #define UC_APPEND_ID 1000008
71 #define UC_REMOVE_ID 1000010
72 #define UC_RENAME_ID 1000012
73 #define UC_CLEAR_ID 1000014
74 #define UC_SET_CURRENT_ID 1000016
77 Small button which updates Object Browser's contents
79 Btn::Btn ( QWidget * parent, const char * name ) : QToolButton( parent, name )
81 connect( this, SIGNAL(clicked()), this, SLOT(onClicked()) );
85 QAD_ObjectBrowser* OB = QAD_Application::getDesktop()->getActiveApp()->getActiveStudy()->getActiveStudyFrame()->getLeftFrame()->getObjectBrowser();
90 Gets selected top-level items (i.e. not including sub-items) [ static ]
92 static void getSelectedParents( QListViewItem* listViewItem, QList<QListViewItem>& itemList )
94 QListViewItem* item = listViewItem->firstChild();
96 if ( item->isSelected() ) {
97 itemList.append( item );
100 getSelectedParents( item, itemList );
102 item = item->nextSibling();
106 Gets selected top-level items (i.e. not including sub-items) [ static ]
108 static void getSelectedParents( QListView* listView, QList<QListViewItem>& itemList, bool ignoreRoot = false )
111 QListViewItem* item = listView->firstChild();
113 if ( item->isSelected() && !ignoreRoot ) {
114 itemList.append( item );
117 getSelectedParents( item, itemList );
119 item = item->nextSibling();
123 Gets top-most parent item [ static ]
125 static QListViewItem* getTopParent( QListViewItem* item )
129 QListViewItem* p = item->parent();
132 while ( p->parent() ) {
138 Returns true if the item is top-level (root)
140 static bool isRootItem( QListViewItem* item )
142 return ( item->listView() && !item->parent() );
147 QAD_ObjectBrowser::QAD_ObjectBrowser( SALOMEDS::Study_var study, QWidget* parent, const char* name, WFlags fl )
148 : QTabWidget( parent, name, fl )
150 myStudy = SALOMEDS::Study::_duplicate( study );
151 myListViewMap.clear();
152 myUseCaseMap.clear();
159 QAD_ObjectBrowser::~QAD_ObjectBrowser()
161 if (!myStudy->_is_nil())
162 CORBA::release(myStudy);
166 Configures Object Browser and UseCase Browser.
167 Columns, Selection Mode and Palette.
169 void QAD_ObjectBrowser::setupListView()
171 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
173 this->setTabPosition( QTabWidget::Bottom );
175 /* Reading setting : Columns for Value, OCAF Doc entry, object IOR, OCAF Doc ref entry and Chrono sorting */
176 QString AddColumn = QAD_CONFIG->getSetting( "ObjectBrowser:AddColumn" );
177 QString ValueColumn = QAD_CONFIG->getSetting( "ObjectBrowser:ValueColumn" );
178 QString ShowCHRONO_SORT = QAD_CONFIG->getSetting( "ObjectBrowser:ChronologicalSort" );
179 QString showUseCase = QAD_CONFIG->getSetting("ObjectBrowser:ShowUseCaseBrowser");
180 QString noAutoSizeColumns = QAD_CONFIG->getSetting( "ObjectBrowser:NoAutoSizeColumns" );
182 /* create and setup Object Browser ================================= */
183 myListView = new QListView( this, "Object Browser");
184 myListView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
185 myListView->setMinimumSize( 1, 1 );
186 myListView->setPalette( QAD_Application::getPalette( true ) );
188 /* First two columns = object name and value - always visible */
189 myListView->addColumn( tr( "OBJECT_BROWSER_OBJECT" ) ); /* Adding Object column */
190 myListView->addColumn( tr( "OBJECT_BROWSER_VALUE" ) ); /* Adding Value column */
191 myListView->addColumn( tr( "OBJECT_BROWSER_ENTRY" ) ); /* Adding Doc entry column */
192 myListView->addColumn( tr( "OBJECT_BROWSER_IOR" ) ); /* Adding Object IOR column */
193 myListView->addColumn( tr( "OBJECT_BROWSER_REFENTRY" ) ); /* Adding OCAF Doc ref entry column */
194 myListView->header()->setMovingEnabled( false );
197 myListView->header()->setClickEnabled( TRUE ); /* Enable clicking on the header */
198 myListView->setShowSortIndicator( TRUE ) ; /* Add user arrows to indicate the sort order : LPN */
199 myListView->setRootIsDecorated( TRUE ); /* Enable expand/collapse control for the root item */
200 myListView->setSelectionMode ( QListView::Extended ); /* Enable multiple selection */
201 myListView->setVScrollBarMode( QScrollView::AlwaysOn ); /* Set scrollbars always visible */
202 myListView->setHScrollBarMode( QScrollView::AlwaysOn ); /* ... */
204 myListView->setCornerWidget( new Btn( this ) );
205 /* Connect section */
206 //VRV: porting on Qt 3.0.5
207 #if QT_VERSION < 0x030005
208 connect( myListView, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint&, int ) ),
209 this, SLOT( showPopupMenu( QListViewItem* ) ) );
211 connect( myListView, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
212 this, SLOT( showPopupMenu( QListViewItem* ) ) );
214 //VRV: porting on Qt 3.0.5
216 connect( myListView, SIGNAL( selectionChanged() ),
217 this, SLOT( onSelectedItem() ) );
218 connect( myListView, SIGNAL( expanded( QListViewItem* ) ),
219 this, SLOT( onExpanded( QListViewItem* ) ) );
220 connect( myListView, SIGNAL( collapsed( QListViewItem* ) ),
221 this, SLOT( onCollapsed( QListViewItem* ) ) );
223 /* create and setup UseCase Browser ================================ */
224 myVBox = new QWidget( this );
225 QVBoxLayout* vBoxLayout = new QVBoxLayout( myVBox );
227 myUseCaseView = new QListView( myVBox, "UseCase Browser");
228 myUseCaseView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
229 myUseCaseView->setMinimumSize( 1, 1 );
230 myUseCaseView->setPalette( QAD_Application::getPalette( true ) );
232 /* First column = object name */
233 myUseCaseView->addColumn( tr( "OBJECT_BROWSER_OBJECT" ) );
235 myUseCaseView->header()->setClickEnabled( TRUE ); /* Enable clicking on the header */
236 myUseCaseView->setShowSortIndicator( TRUE ) ; /* Add user arrows to indicate the sort order : LPN */
237 myUseCaseView->setRootIsDecorated( TRUE ); /* Enable expand/collapse control for the root item */
238 myUseCaseView->setSelectionMode ( QListView::Extended ); /* Enable multiple selection */
239 myUseCaseView->setVScrollBarMode( QScrollView::AlwaysOn ); /* Set scrollbars always visible */
240 myUseCaseView->setHScrollBarMode( QScrollView::AlwaysOn ); /* ... */
241 myUseCaseView->header()->setMovingEnabled( false );
242 myUseCaseView->viewport()->setAcceptDrops( true );
243 myUseCaseView->installEventFilter( this );
244 myUseCaseView->viewport()->installEventFilter( this );
245 myUseCaseView->setSorting( -1 ) ;
246 vBoxLayout->addWidget( myUseCaseView );
248 myUseCaseView->setCornerWidget( new Btn( this ) );
250 myNewBtn = new QToolButton( myVBox );
251 myNewBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_NEW") ) );
252 myNewBtn->setAutoRaise( true );
253 QToolTip::add( myNewBtn, tr( "UC_NEW_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_NEW_TIP" ) );
254 myAddBtn = new QToolButton( myVBox );
255 myAddBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_ADD") ) );
256 myAddBtn->setAutoRaise( true );
257 QToolTip::add( myAddBtn, tr( "UC_APPEND_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_APPEND_TIP" ) );
258 myDelBtn = new QToolButton( myVBox );
259 myDelBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_REMOVE") ) );
260 myDelBtn->setAutoRaise( true );
261 QToolTip::add( myDelBtn, tr( "UC_REMOVE_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_REMOVE_TIP" ) );
262 myClearBtn = new QToolButton( myVBox );
263 myClearBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_CLEAR") ) );
264 myClearBtn->setAutoRaise( true );
265 QToolTip::add( myClearBtn, tr( "UC_CLEAR_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_CLEAR_TIP" ) );
266 myCurrentBtn = new QToolButton( myVBox );
267 myCurrentBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_SET_CURRENT") ) );
268 myCurrentBtn->setAutoRaise( true );
269 QToolTip::add( myCurrentBtn, tr( "UC_SET_CURRENT_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_SET_CURRENT_TIP" ) );
271 QHBoxLayout* btnLayout = new QHBoxLayout;
272 btnLayout->setMargin( 3 ); btnLayout->setSpacing( 3 );
273 btnLayout->addWidget( myNewBtn );
274 btnLayout->addStretch();
275 btnLayout->addSpacing( 5 );
276 btnLayout->addStretch();
277 btnLayout->addWidget( myAddBtn );
278 btnLayout->addWidget( myDelBtn );
279 btnLayout->addStretch();
280 btnLayout->addSpacing( 5 );
281 btnLayout->addStretch();
282 btnLayout->addWidget( myClearBtn );
283 btnLayout->addStretch();
284 btnLayout->addSpacing( 5 );
285 btnLayout->addStretch();
286 btnLayout->addWidget( myCurrentBtn );
287 btnLayout->addStretch();
289 vBoxLayout->addLayout( btnLayout );
291 connect( myNewBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
292 connect( myAddBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
293 connect( myDelBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
294 connect( myClearBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
295 connect( myCurrentBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
297 /* Connect section */
298 #if QT_VERSION < 0x030005
299 connect( myUseCaseView, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint&, int ) ),
300 this, SLOT( showPopupMenu( QListViewItem* ) ) );
302 connect( myUseCaseView, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
303 this, SLOT( showPopupMenu( QListViewItem* ) ) );
306 connect( myUseCaseView, SIGNAL( selectionChanged() ),
307 this, SLOT( onSelectedItem() ) );
309 /* add Object Browser and UseCase Browser as pages ================= */
310 this->addTab( myListView, tr( "TLT_OBJECT_BROWSER" ) );
311 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
313 if ( showUseCase != "true")
314 this->removePage(myVBox);
316 setShowInfoColumns( AddColumn == "true" );
317 setShowValueColumn( ValueColumn == "true" );
318 setEnableChronoSort( ShowCHRONO_SORT == "true" );
320 if ( noAutoSizeColumns == "true" )
322 for (int i = 0; i < myListView->header()->count(); i++ )
323 myListView->setColumnWidthMode(i, QListView::Manual);
326 resize( QSize( 100, 400 ) );
333 bool QAD_ObjectBrowser::eventFilter( QObject* o, QEvent* e )
335 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
336 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
338 if ( myStudy->_is_nil() )
339 return QTabWidget::eventFilter( o, e );
341 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
342 if (o == myUseCaseView->viewport()) {
343 if ( e->type() == QEvent::MouseButtonPress ) {
344 // Test if clicked on selection and start drag if necessary
345 QMouseEvent* me = ( QMouseEvent* )e;
346 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )( myUseCaseView->itemAt( me->pos() ) );
347 if ( item && item->isSelected() && me->button() == LeftButton) {
348 if ( me->pos().x() > myUseCaseView->header()->sectionPos( myUseCaseView->header()->mapToIndex( 0 ) ) +
349 myUseCaseView->treeStepSize() * ( item->depth() + ( myUseCaseView->rootIsDecorated() ? 1 : 0 ) ) +
350 myUseCaseView->itemMargin() ||
351 me->pos().x() < myUseCaseView->header()->sectionPos( myUseCaseView->header()->mapToIndex( 0 ) ) ) {
352 QStringList entryList;
353 QListViewItemIterator it( myUseCaseView );
355 for ( ; it.current(); ++it ) {
356 QAD_ObjectBrowserItem* selItem = ( QAD_ObjectBrowserItem* )( it.current() );
357 if ( selItem->isSelected() ) {
358 if ( isRootItem( selItem ) ) {
363 entryList.append( selItem->getEntry() );
367 if ( done && !entryList.isEmpty() ) {
368 QTextDrag *d = new QTextDrag( entryList.join("*"), myUseCaseView->viewport() );
375 else if ( e->type() == QEvent::DragMove ) {
376 QDragMoveEvent* dme = ( QDragMoveEvent* )e;
377 if ( dme->source() == myUseCaseView->viewport() ) {
385 else if ( e->type() == QEvent::Drop ) {
386 QDropEvent* de = ( QDropEvent* )e;
388 QAD_ObjectBrowserItem* dropItem = ( QAD_ObjectBrowserItem* )( myUseCaseView->itemAt( de->pos() ) );
389 if ( de->source() == myUseCaseView->viewport() ) {
390 if ( QTextDrag::decode( de, text ) && dropItem && !dropItem->isSelected() ) {
391 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )getTopParent( dropItem );
393 if ( !UCBuilder->_is_nil() ) {
394 UCBuilder->SetRootCurrent();
395 if ( useCaseItem != dropItem ) {
396 SALOMEDS::SObject_var dropObject = myStudy->FindObjectID( dropItem->getEntry() );
397 if ( !dropObject->_is_nil() )
398 UCBuilder->SetCurrentObject( dropObject );
400 QStringList entryList = QStringList::split( "*", text, false );
401 // if Move action then first remove all selected items
402 if ( de->action() == QDropEvent::Move ) {
403 QList<QListViewItem> ucSelected;
404 ucSelected.setAutoDelete( false );
405 getSelectedParents( myUseCaseView, ucSelected );
406 for ( int j = 0; j < entryList.count(); j++ ) {
407 QAD_ObjectBrowserItem* delItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( j ) );
408 QAD_ObjectBrowserItem* ucDelItem = ( QAD_ObjectBrowserItem* )getTopParent( delItem );
409 SALOMEDS::SObject_var delSO = myStudy->FindObjectID( delItem->getEntry() );
410 if ( !delSO->_is_nil() && ucDelItem ) {
411 UCBuilder->Remove( delSO );
415 // then try to append items to destination
416 for ( int i = 0; i < entryList.count(); i++ ) {
417 SALOMEDS::SObject_var SO = myStudy->FindObjectID( entryList[i] );
418 if ( !SO->_is_nil() ) {
419 UCBuilder->Remove( SO );
420 UCBuilder->Append( SO );
423 myActiveStudy->updateUseCaseBrowser();
435 else if ( o == myUseCaseView ) {
436 if ( e->type() == QEvent::KeyPress ) {
437 QKeyEvent* ke = ( QKeyEvent* )e;
438 if ( ke->key() == Key_Delete ) {
439 onUseCasePopupMenu( UC_REMOVE_ID );
444 return QTabWidget::eventFilter( o, e );
451 void QAD_ObjectBrowser::onCreatePopup()
453 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
454 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
455 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
457 /* VSR : Creation of common POPUP menu for Object Browser/Use Case Browser */
458 if ( Sel->IObjectCount() > 0 ) {
463 Desktop->definePopup( theContext, theParent, theObject );
465 Desktop->createPopup( myPopup, theContext, "ObjectBrowser", theObject);
466 if ( !Desktop->getActiveComponent().isEmpty() ) {
467 Desktop->customPopup( myPopup, theContext, "ObjectBrowser", theObject );
469 // VSR:22/01/03 - Command for edit attributes value
470 bool EditValues = QAD_CONFIG->getSetting( "ObjectBrowser:EditValues" ) == "true";
471 if ( EditValues && Sel->IObjectCount() == 1 && hasEditableAttribute(Sel->firstIObject()) ) {
472 if ( myPopup->count() > 0 )
473 myPopup->insertSeparator();
474 myPopup->insertItem( tr( "EDIT_VALUE_CMD" ),
476 SLOT( onEditAttribute() ) );
481 // No selected item => it's not necessary to create popup
482 //NRI- : Desktop->createPopup( myPopup, "", "ObjectBrowser", "");
484 if ( currentPage() != myListView ) {
485 /* VSR : Creation of POPUP menu for UseCase Browser */
486 QList<QListViewItem> ucSelected;
487 ucSelected.setAutoDelete( false );
488 getSelectedParents( myUseCaseView, ucSelected );
490 if ( myPopup && !myStudy->_is_nil() ) {
491 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
493 bool isOne = ucSelected.count() == 1;
494 bool isMany = ucSelected.count() > 1;
495 bool isEmpty = ucSelected.count() == 1;
496 bool obSelected = Sel->IObjectCount() > 0;
497 bool isRoot = isOne && isRootItem( ucSelected.at( 0 ) );
498 bool manyChildren = myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0;
499 bool isUseCase = isOne &&
500 ( isRoot || UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) );
504 QPopupMenu *UseCasePopup = new QPopupMenu( myPopup );
506 UseCasePopup->insertItem( tr( "UC_NEW_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_NEW_EMPTY_ID );
508 UseCasePopup->insertItem( tr( "UC_SET_CURRENT_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_SET_CURRENT_ID );
510 UseCasePopup->insertItem( tr( "UC_RENAME_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_RENAME_ID );
511 if ( isRoot && manyChildren )
512 UseCasePopup->insertItem( tr( "UC_CLEAR_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_CLEAR_ID );
514 if ( UseCasePopup->count() > 0 ) {
515 if ( myPopup->count() > 0 )
516 myPopup->insertSeparator();
517 myPopup->insertItem( tr( "UC_POPUP" ), UseCasePopup );
527 Returns Object Browser list view
529 QListView* QAD_ObjectBrowser::getListView() const
535 Returns UseCase Browser list view
537 QListView* QAD_ObjectBrowser::getUseCaseView() const
539 return myUseCaseView;
543 Adds anItem ( probably a SComponent )
545 QAD_ObjectBrowserItem* QAD_ObjectBrowser::AddItem(QListView* theView,
546 const QString& theName,
547 const QString& theEntry,
548 const QString& theIOR,
550 const QString& theValue,
551 QAD_ObjectBrowserItem* theAfter)
554 QAD_ObjectBrowserItem* last = (QAD_ObjectBrowserItem*)(theView->firstChild());
558 for ( ; last->nextSibling(); last = (QAD_ObjectBrowserItem*)(last->nextSibling()) );
560 QAD_ObjectBrowserItem* anItem = new QAD_ObjectBrowserItem( theView, last );
562 anItem->setType( theType );
563 anItem->setOpen( FALSE );
564 anItem->setName( theName );
565 anItem->setValue( theValue );
566 anItem->setEntry( theEntry );
567 anItem->setIOR( theIOR );
568 anItem->setReference( "" );
574 Adds anItem ( probably a StudyObject )
576 QAD_ObjectBrowserItem* QAD_ObjectBrowser::AddItem(QAD_ObjectBrowserItem* theParentItem,
577 const QString& theName,
578 const QString& theEntry,
579 const QString& theIOR,
581 const QString& theRef,
582 const QString& theValue,
583 QAD_ObjectBrowserItem* theAfter)
586 QAD_ObjectBrowserItem* last = (QAD_ObjectBrowserItem*)(theParentItem->firstChild());
590 for ( ; last->nextSibling(); last = (QAD_ObjectBrowserItem*)(last->nextSibling()) );
592 QAD_ObjectBrowserItem* anItem = new QAD_ObjectBrowserItem(theParentItem, last);
593 anItem->setType( theType );
594 anItem->setOpen( FALSE );
595 anItem->setName( theName );
596 anItem->setValue( theValue );
597 anItem->setEntry( theEntry );
598 anItem->setIOR( theIOR );
599 anItem->setReference( theRef );
605 Updates Object Browsers' item [ protected ]
607 void QAD_ObjectBrowser::Update( SALOMEDS::SObject_ptr SO,
608 QAD_ObjectBrowserItem* theParentItem )
610 if ( myStudy->_is_nil() || SO->_is_nil() || !theParentItem ) {
613 SALOMEDS::ChildIterator_var it = myStudy->NewChildIterator(SO);
615 for (; it->More();it->Next()) {
616 SALOMEDS::SObject_var CSO = it->Value();
617 SALOMEDS::SObject_var RefSO;
619 QString CSOEntry = strdup( CSO->GetID() );
620 SALOMEDS::GenericAttribute_var anAttr;
621 SALOMEDS::AttributeName_var aName;
622 SALOMEDS::AttributeComment_var aCmnt;
623 SALOMEDS::AttributeIOR_var anIOR;
624 SALOMEDS::AttributeReal_var aReal;
625 SALOMEDS::AttributeInteger_var anInt;
626 SALOMEDS::AttributeSelectable_var aSelectable;
627 SALOMEDS::AttributeExpandable_var anExpandable;
628 SALOMEDS::AttributeOpened_var anOpened;
629 SALOMEDS::AttributePixMap_var aPixmap;
630 SALOMEDS::AttributeTextColor_var aTextColor;
631 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
633 QAD_ObjectBrowserItem* Item = 0;
634 QAD_ObjectBrowserItem* subItem;
637 if ( CSO->ReferencedObject(RefSO) && !RefSO->_is_nil() ) {
639 QString RefSOEntry = strdup( RefSO->GetID() );
640 if (CSO->FindAttribute(anAttr, "AttributeName") || RefSO->FindAttribute(anAttr, "AttributeName")) {
641 aName = SALOMEDS::AttributeName::_narrow(anAttr);
642 if (RefSO->FindAttribute(anAttr, "AttributeIOR")) {
643 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
644 ior = strdup( anIOR->Value() );
646 valueString = getValueFromObject( RefSO );
647 // AddItem (Item, QString(" * ") + strdup( aName->Value() ), RefSOEntry, ior, 2, CSOEntry);
648 Item = AddItem(theParentItem,
649 QString(" * ") + strdup( aName->Value() ),
655 myListViewMap[ RefSOEntry ].append( Item );
658 MESSAGE("QAD_ObjectBrowser::Update : noname item: "<<CSO->GetID());
662 valueString = getValueFromObject( CSO );
664 if (CSO->FindAttribute(anAttr, "AttributeIOR")) {
665 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
666 ior = strdup( anIOR->Value() );
668 // getting Name and adding new Item
669 if (CSO->FindAttribute(anAttr, "AttributeName") ) {
670 aName = SALOMEDS::AttributeName::_narrow(anAttr);
671 Item = AddItem(theParentItem, strdup( aName->Value() ), CSOEntry, ior, 0, "", valueString);
672 myListViewMap[ CSOEntry ].append( Item );
675 MESSAGE("QAD_ObjectBrowser::Update : noname item: "<<CSO->GetID());
677 // adding other attributes
680 if ( CSO->FindAttribute(anAttr, "AttributeSelectable") ) {
681 aSelectable = SALOMEDS::AttributeSelectable::_narrow(anAttr);
682 Item->setSelectable(aSelectable->IsSelectable());
685 if ( CSO->FindAttribute(anAttr, "AttributeExpandable") ) {
686 anExpandable = SALOMEDS::AttributeExpandable::_narrow(anAttr);
687 Item->setExpandable(anExpandable->IsExpandable());
690 if ( CSO->FindAttribute(anAttr, "AttributeOpened") ) {
691 anOpened = SALOMEDS::AttributeOpened::_narrow(anAttr);
692 Item->setOpen(anOpened->IsOpened());
695 if ( CSO->FindAttribute(anAttr, "AttributeTextColor") ) {
696 aTextColor = SALOMEDS::AttributeTextColor::_narrow(anAttr);
697 QColor aColor((int)(aTextColor->TextColor().R), (int)(aTextColor->TextColor().G), (int)(aTextColor->TextColor().B)) ;
698 Item->setTextColor(aColor);
700 // TextHighlightColor
701 if ( CSO->FindAttribute(anAttr, "AttributeTextHighlightColor") ) {
702 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow(anAttr);
703 QColor aColor((int)(aTextHighlightColor->TextHighlightColor().R),
704 (int)(aTextHighlightColor->TextHighlightColor().G),
705 (int)(aTextHighlightColor->TextHighlightColor().B)) ;
706 Item->setTextHighlightColor(aColor);
709 if ( CSO->FindAttribute(anAttr, "AttributePixMap") ) {
710 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
711 if ( aPixmap->HasPixMap() ) {
712 SALOMEDS::SComponent_var father = CSO->GetFatherComponent();
713 if (father->FindAttribute(anAttr, "AttributeName") ) {
714 SALOMEDS::AttributeName_var aFatherName;
715 aFatherName = SALOMEDS::AttributeName::_narrow(anAttr);
718 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
720 if(resMgr->loadResources( QString(aFatherName->Value()) + "GUI", msg )) {
721 QPixmap icon ( resMgr->loadPixmap( QString(aFatherName->Value()) + "GUI",
722 tr(aPixmap->GetPixMap()) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ));
723 Item->setPixmap( 0, icon );
731 // if ( theParentItem->isOpen() )
732 // Item->setOpen(TRUE);
740 Updates Object Browser tree and UseCase Browser tree
742 void QAD_ObjectBrowser::Update()
744 int xc = myListView->contentsX();
745 int yc = myListView->contentsY();
746 myListView->viewport()->setUpdatesEnabled( false );
749 myListViewMap.clear();
751 if ( myStudy->_is_nil() ) {
755 QString ShowIAPP = QAD_CONFIG->getSetting("ObjectBrowser:IAPP");
757 /* Updating Object Browser ============================================== */
758 SALOMEDS::SComponentIterator_var itcomp = myStudy->NewComponentIterator();
759 for (; itcomp->More(); itcomp->Next()) {
760 QAD_ObjectBrowserItem* Item = 0;
761 SALOMEDS::SComponent_var SC = itcomp->Value();
762 QString dataType = strdup( SC->ComponentDataType() );
764 QString SCEntry = strdup( SC->GetID() );
766 SALOMEDS::GenericAttribute_var anAttr;
767 SALOMEDS::AttributeName_var aName;
768 SALOMEDS::AttributeComment_var aCmnt;
769 SALOMEDS::AttributeIOR_var anIOR;
770 SALOMEDS::AttributeReal_var aReal;
771 SALOMEDS::AttributeInteger_var anInt;
772 SALOMEDS::AttributeSelectable_var aSelectable;
773 SALOMEDS::AttributeExpandable_var anExpandable;
774 SALOMEDS::AttributeOpened_var anOpened;
775 SALOMEDS::AttributePixMap_var aPixmap;
776 SALOMEDS::AttributeTextColor_var aTextColor;
777 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
779 if (SC->FindAttribute(anAttr, "AttributeIOR")) {
780 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
781 ior = strdup( anIOR->Value() );
784 bool caseIAPP = false;
786 // create data-tree item, corresponding to component (and set name if component has it)
787 if ( dataType.compare("Interface Applicative") == 0 ) {
789 if ( ShowIAPP.compare("true") == 0 ) {
790 if (SC->FindAttribute(anAttr, "AttributeName")) {
791 aName = SALOMEDS::AttributeName::_narrow(anAttr);
792 Item = AddItem (myListView, strdup( aName->Value() ), strdup( SCEntry ), ior, 1, "");
793 myListViewMap[ SCEntry ].append( Item );
796 Item = AddItem (myListView, dataType, SCEntry, ior, 1, "");
797 myListViewMap[ SCEntry ].append( Item );
804 if (SC->FindAttribute(anAttr, "AttributeName")) {
805 aName = SALOMEDS::AttributeName::_narrow(anAttr);
806 Item = AddItem (myListView, strdup( aName->Value() ), SCEntry, ior, 1, "");
807 myListViewMap[ SCEntry ].append( Item );
810 /*In according to CAF - any label (even if it is empty) exist during to whole session.
811 So, if label haven't an "AttributeName" it is means that the label is empty.
812 Therefore follow action couses bug -
813 Item = AddItem (myListView, dataType, SC->GetID(), ior, 1, "");
817 // add other attributes
819 QAD_ObjectBrowserItem* subItem;
821 if ( SC->FindAttribute(anAttr, "AttributeSelectable") ) {
822 aSelectable = SALOMEDS::AttributeSelectable::_narrow(anAttr);
823 Item->setSelectable(aSelectable->IsSelectable());
826 if ( SC->FindAttribute(anAttr, "AttributeExpandable") ) {
827 anExpandable = SALOMEDS::AttributeExpandable::_narrow(anAttr);
828 Item->setExpandable(anExpandable->IsExpandable());
831 if ( SC->FindAttribute(anAttr, "AttributeOpened") ) {
832 anOpened = SALOMEDS::AttributeOpened::_narrow(anAttr);
833 Item->setOpen(anOpened->IsOpened());
836 if ( SC->FindAttribute(anAttr, "AttributeTextColor") ) {
837 aTextColor = SALOMEDS::AttributeTextColor::_narrow(anAttr);
838 QColor aColor((int)(aTextColor->TextColor().R), (int)(aTextColor->TextColor().G), (int)(aTextColor->TextColor().B)) ;
839 Item->setTextColor(aColor);
841 // TextHighlightColor
842 if ( SC->FindAttribute(anAttr, "AttributeTextHighlightColor") ) {
843 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow(anAttr);
844 QColor aColor((int)(aTextHighlightColor->TextHighlightColor().R),
845 (int)(aTextHighlightColor->TextHighlightColor().G),
846 (int)(aTextHighlightColor->TextHighlightColor().B)) ;
847 Item->setTextHighlightColor(aColor);
851 if ( SC->FindAttribute(anAttr, "AttributePixMap") ) {
852 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
853 if ( aPixmap->HasPixMap() ) {
855 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
857 MESSAGE ( " Component " << aName->Value() )
858 MESSAGE ( " Icon " << aPixmap->GetPixMap() )
859 if(resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString(aName->Value())), msg )) {
860 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString(aName->Value())),
861 tr(aPixmap->GetPixMap()) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ));
862 Item->setPixmap( 0, icon );
868 if ( strcmp(dataType, TypeComponent) == 0 )
871 if ( caseIAPP && ShowIAPP.compare("true") == 0 )
878 myListView->setContentsPos(xc,yc);
880 myListView->viewport()->setUpdatesEnabled( true );
881 myListView->viewport()->repaint( false );
882 /* Updating UseCase Browser ============================================= */
883 if ( this->count() > 1 )
884 UpdateUseCaseBrowser();
888 Removes item with all childs from the map - used to optimize UseCase browser update
890 void removeFromMap( ItemMap& theMap, QAD_ObjectBrowserItem* item )
893 QAD_ObjectBrowserItem* subItem = ( QAD_ObjectBrowserItem* )( item->firstChild() );
895 removeFromMap( theMap, subItem );
896 subItem = ( QAD_ObjectBrowserItem* )( subItem->nextSibling() );
898 if ( theMap.contains( item->getEntry() ) ) {
899 theMap[ item->getEntry() ].removeRef( item );
900 if ( theMap[ item->getEntry() ].isEmpty() ) {
901 theMap.remove( item->getEntry() );
908 Updates only UseCase Browser
910 void QAD_ObjectBrowser::UpdateUseCaseBrowser() {
911 // myUseCaseView->clear(); myUseCaseMap.clear();
912 if ( myStudy->_is_nil() || this->count()<2 ) {
915 myUseCaseView->blockSignals( true );
916 // myUseCaseView->setUpdatesEnabled( false );
918 QAD_ObjectBrowserItem* root = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild();
919 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
920 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
921 QString UCName = QString( strdup( UCBuilder->GetName() ) );
922 if ( UCName.isEmpty() )
923 UCName = QString( tr( "Root" ) );
924 // creating root item if is not yet created
926 root = AddItem( myUseCaseView, UCName, "0:2", "", 1, "" );
927 myUseCaseMap[ "0:2" ].append( root );
930 root->setName( UCName );
931 // setting it current if necessary
932 root->setCurrent( SOCurrent->_is_nil() || !strcmp( SOCurrent->GetID(), "0:2" ) );
933 // updating list view...
934 QMap<QString,SALOMEDS::SObject_var> ucList;
935 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( SALOMEDS::SObject::_nil() );
936 if ( !UCIter->_is_nil() ) {
937 for ( ; UCIter->More(); UCIter->Next() ) {
938 SALOMEDS::SObject_var UCObject = UCIter->Value();
939 QString UCEntry = strdup( UCObject->GetID() );
940 ucList[ UCEntry ] = UCObject;
943 // ... 1) delete removed items
944 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )root->firstChild();
945 while ( childItem ) {
946 QAD_ObjectBrowserItem* prevItem = childItem;
947 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
948 if ( !ucList.contains( prevItem->getEntry() ) ) {
949 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
950 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
951 // myUseCaseMap.remove( prevItem->getEntry() );
952 removeFromMap( myUseCaseMap, prevItem );
956 // ... 2) create/update existing
957 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
958 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
959 UpdateUCItem( it.data(), root );
961 myUseCaseView->blockSignals( false );
962 // myUseCaseView->setUpdatesEnabled( true );
963 // myUseCaseView->update();
964 // UCItem->setOpen( true );
968 Updates UseCase Browser's item
970 void QAD_ObjectBrowser::UpdateUCItem( SALOMEDS::SObject_var UCObject, QAD_ObjectBrowserItem* UCItem )
972 if ( myStudy->_is_nil() || !UCItem )
975 /* Creating SObjects item */
976 SALOMEDS::SObject_var RefSO;
977 SALOMEDS::GenericAttribute_var anAttr;
978 SALOMEDS::AttributeName_var aName;
979 SALOMEDS::AttributeIOR_var anIOR;
980 SALOMEDS::AttributeSelectable_var aSelectable;
981 SALOMEDS::AttributeExpandable_var anExpandable;
982 SALOMEDS::AttributePixMap_var aPixmap;
983 SALOMEDS::AttributeTextColor_var aTextColor;
984 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
987 QString UCEntry = strdup( UCObject->GetID() );
989 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
990 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
993 QAD_ObjectBrowserItem* UCSubItem = 0;
994 if ( myUseCaseMap.contains( UCEntry ) && myUseCaseMap[ UCEntry ].count() > 0 )
995 UCSubItem = myUseCaseMap[ UCEntry ].first();
998 if ( UCObject->ReferencedObject( RefSO ) && !RefSO->_is_nil() ) {
999 QString RefSOEntry = strdup( RefSO->GetID() );
1000 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) || RefSO->FindAttribute( anAttr, "AttributeName" ) ) {
1001 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1002 if ( RefSO->FindAttribute( anAttr, "AttributeIOR" ) ) {
1003 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1004 ior = strdup( anIOR->Value() );
1006 valueString = getValueFromObject( RefSO );
1008 UCSubItem = AddItem( UCItem,
1009 QString( " * " ) + strdup( aName->Value() ),
1015 myUseCaseMap[ RefSOEntry ].append( UCSubItem );
1018 UCSubItem->setName( QString( " * " ) + strdup( aName->Value() ) );
1019 UCSubItem->setEntry( RefSOEntry );
1020 UCSubItem->setIOR( ior );
1021 UCSubItem->setReference( UCEntry );
1022 UCSubItem->setValue( valueString );
1024 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1029 valueString = getValueFromObject( UCObject );
1031 if ( UCObject->FindAttribute( anAttr, "AttributeIOR" ) ) {
1032 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1033 ior = strdup( anIOR->Value() );
1035 // getting Name and adding new Item
1036 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) ) {
1037 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1039 UCSubItem = AddItem( UCItem, strdup( aName->Value() ), UCEntry, ior, 0, "", valueString );
1040 myUseCaseMap[ UCEntry ].append( UCSubItem );
1043 UCSubItem->setName( strdup( aName->Value() ) );
1044 UCSubItem->setEntry( UCEntry );
1045 UCSubItem->setIOR( ior );
1046 UCSubItem->setReference( "" );
1047 UCSubItem->setValue( valueString );
1050 // adding other attributes
1052 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1054 // if ( UCObject->FindAttribute( anAttr, "AttributeSelectable" ) ) {
1055 // aSelectable = SALOMEDS::AttributeSelectable::_narrow( anAttr );
1056 // UCSubItem->setSelectable( aSelectable->IsSelectable() );
1059 // if ( UCObject->FindAttribute( anAttr, "AttributeExpandable" ) ) {
1060 // anExpandable = SALOMEDS::AttributeExpandable::_narrow( anAttr );
1061 // UCSubItem->setExpandable( anExpandable->IsExpandable() );
1064 if ( UCObject->FindAttribute(anAttr, "AttributeTextColor" ) ) {
1065 aTextColor = SALOMEDS::AttributeTextColor::_narrow( anAttr );
1066 QColor aColor( (int)(aTextColor->TextColor().R),
1067 (int)(aTextColor->TextColor().G),
1068 (int)(aTextColor->TextColor().B) );
1069 UCSubItem->setTextColor( aColor );
1071 // TextHighlightColor
1072 if ( UCObject->FindAttribute( anAttr, "AttributeTextHighlightColor" ) ) {
1073 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow( anAttr );
1074 QColor aColor( (int)(aTextHighlightColor->TextHighlightColor().R),
1075 (int)(aTextHighlightColor->TextHighlightColor().G),
1076 (int)(aTextHighlightColor->TextHighlightColor().B) );
1077 UCSubItem->setTextHighlightColor( aColor );
1080 if ( UCObject->FindAttribute( anAttr, "AttributePixMap" ) ) {
1081 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
1082 if ( aPixmap->HasPixMap() ) {
1083 SALOMEDS::SComponent_var father = UCObject->GetFatherComponent();
1084 if ( father->FindAttribute( anAttr, "AttributeName" ) ) {
1085 SALOMEDS::AttributeName_var aFatherName;
1086 aFatherName = SALOMEDS::AttributeName::_narrow( anAttr );
1087 QAD_ResourceMgr* resMgr = QAD_Desktop::getResourceManager();
1090 if( resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )), msg ) ) {
1091 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )),
1092 tr( aPixmap->GetPixMap() ) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ) );
1093 UCSubItem->setPixmap( 0, icon );
1102 // updating children ...
1103 QMap<QString,SALOMEDS::SObject_var> ucList;
1104 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( UCObject );
1105 if ( !UCIter->_is_nil() ) {
1106 for ( ; UCIter->More(); UCIter->Next() ) {
1107 SALOMEDS::SObject_var UCSubObject = UCIter->Value();
1108 QString UCSubEntry = strdup( UCSubObject->GetID() );
1109 ucList[ UCSubEntry ] = UCSubObject;
1112 // ... 1) delete removed items
1113 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )UCSubItem->firstChild();
1114 while ( childItem ) {
1115 QAD_ObjectBrowserItem* prevItem = childItem;
1116 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
1117 if ( !ucList.contains( prevItem->getEntry() ) ) {
1118 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
1119 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
1120 // myUseCaseMap.remove( prevItem->getEntry() );
1121 removeFromMap( myUseCaseMap, prevItem );
1125 // ... 2) create/update existing
1126 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
1127 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
1128 UpdateUCItem( it.data(), UCSubItem );
1134 Unhighlights all items
1136 void QAD_ObjectBrowser::unHighlightAll()
1138 myListView->clearSelection();
1139 myUseCaseView->clearSelection();
1143 Highlights items which refer to object
1145 void QAD_ObjectBrowser::highlight( const Handle(SALOME_InteractiveObject)& IObject, bool highlight )
1147 QList<QAD_ObjectBrowserItem> List;
1148 if (getItems(IObject, List)) {
1149 for (int i = 0; i < List.count(); i++) {
1150 List.at(i)->setSelected( highlight );
1151 List.at(i)->repaint();
1157 Gets items from Object Browser which refer to object
1159 bool QAD_ObjectBrowser::getItems( const Handle(SALOME_InteractiveObject)& IObject,
1160 QList<QAD_ObjectBrowserItem>& List)
1163 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1164 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1165 for ( int i = 0; i < ilist.count(); i++ )
1166 List.append( ilist.at(i) );
1168 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1169 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1170 for ( int i = 0; i < ilist.count(); i++ )
1171 List.append( ilist.at(i) );
1173 return (List.count() > 0);
1177 Gets items from Object Browser which refer to object
1179 bool QAD_ObjectBrowser::getItems( SALOMEDS::SObject_ptr SO,
1180 QList<QAD_ObjectBrowserItem>& List)
1183 if ( myListViewMap.contains( SO->GetID() ) ) {
1184 ItemList ilist = myListViewMap[ SO->GetID() ];
1185 for ( int i = 0; i < ilist.count(); i++ )
1186 List.append( ilist.at(i) );
1188 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1189 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1190 for ( int i = 0; i < ilist.count(); i++ )
1191 List.append( ilist.at(i) );
1193 return (List.count() > 0);
1197 Gets first item from Object Browser which refers to object (not reference)
1199 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( const Handle(SALOME_InteractiveObject)& IObject )
1201 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1202 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1203 for ( int i = 0; i < ilist.count(); i++ ) {
1204 QString aRef = ilist.at(i)->getReference();
1205 if ( ilist.at(i)->getReference().isEmpty() )
1213 Finds item from Object Browser corresponding to Object, returns 0 if fails
1215 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( SALOMEDS::SObject_ptr SO )
1217 if ( myListViewMap.contains( SO->GetID() ) ) {
1218 ItemList ilist = myListViewMap[ SO->GetID() ];
1219 for ( int i = 0; i < ilist.count(); i++ ) {
1220 QString aRef = ilist.at(i)->getReference();
1221 if ( ilist.at(i)->getReference().isEmpty() )
1230 Gets first item from UseCase Browser which refers to object (not reference)
1232 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( const Handle(SALOME_InteractiveObject)& IObject )
1234 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1235 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1236 for ( int i = 0; i < ilist.count(); i++ ) {
1237 QString aRef = ilist.at(i)->getReference();
1238 if ( ilist.at(i)->getReference().isEmpty() )
1246 Finds item from UseCase Browser corresponding to Object, returns 0 if fails
1248 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( SALOMEDS::SObject_ptr SO )
1250 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1251 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1252 for ( int i = 0; i < ilist.count(); i++ ) {
1253 QString aRef = ilist.at(i)->getReference();
1254 if ( ilist.at(i)->getReference().isEmpty() )
1261 Finds item corresponding to interactive object, returns 0 if fails
1263 void QAD_ObjectBrowser::rename( const Handle(SALOME_InteractiveObject)& IObject, QString newName )
1265 QAD_ObjectBrowserItem* item = getItem( IObject );
1267 item->setName( newName );
1270 item = getUCItem( IObject );
1272 item->setName( newName );
1278 Creates and show specific Popup to this according to current selection (Object Browser)
1280 void QAD_ObjectBrowser::showPopupMenu(QListViewItem* theItem)
1282 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1283 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1284 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1286 if (theItem != NULL && ( Sel->IObjectCount()>0 || ActiveComp.isEmpty() ) ) {
1290 QAD_Tools::checkPopup( myPopup );
1291 if ( myPopup->count()>0 ) {
1292 myPopup->exec( QCursor::pos() );
1300 Creates and show specific Popup to this according to current selection (UseCase Browser)
1302 void QAD_ObjectBrowser::showUseCasePopupMenu(QListViewItem* theItem)
1306 QAD_Tools::checkPopup( myPopup );
1307 if ( myPopup->count() > 0 ) {
1308 myPopup->exec( QCursor::pos() );
1315 Called when current selection was changed (Object Browser)
1317 void QAD_ObjectBrowser::onSelectedItem()
1319 if (currentPage()==myListView)
1320 myUseCaseView->clearSelection();
1323 if ( sender()->inherits("QListView") )
1324 whoIs = (QListView*)sender();
1327 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1328 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1329 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1330 QAD_Application* myApp = QAD_Application::getDesktop()->getActiveApp();
1332 SALOME_ListIO DeltaPos;
1334 SALOME_ListIO DeltaNeg;
1337 QListViewItemIterator it( whoIs );
1338 for ( ; it.current(); ++it ) {
1339 QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)it.current();
1340 QString theEntry = item->getEntry();
1341 QString theName = item->getName();
1342 QString theRef = item->getReference();
1344 if ( !theEntry.isEmpty() ) {
1345 if ( item->isSelected() ) {
1346 bool itemAlreadySelected = false;
1348 SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
1349 for(;It.More();It.Next()) {
1350 Handle(SALOME_InteractiveObject) IO = It.Value();
1351 if ( strcmp ( IO->getEntry(), theEntry ) == 0 ) {
1352 itemAlreadySelected = true;
1357 if (!itemAlreadySelected) {
1358 Handle(SALOME_InteractiveObject) newIO;
1359 SALOMEDS::SObject_var obj = aStudy->FindObjectID( theEntry.latin1() );
1360 if ( !obj->_is_nil() ) {
1361 SALOMEDS::SComponent_var comp = obj->GetFatherComponent();
1362 if ( !comp->_is_nil() ) {
1363 Standard_CString datatype = comp->ComponentDataType();
1364 newIO = new SALOME_InteractiveObject( strdup(theEntry),
1367 newIO->setReference( strdup(theRef) );
1370 newIO = new SALOME_InteractiveObject( strdup(theEntry),
1373 newIO->setReference( strdup(theRef) );
1375 if (!newIO.IsNull()) {
1376 DeltaPos.Append( newIO );
1380 SALOME_ListIteratorOfListIO It1( Sel->StoredIObjects() );
1381 for(;It1.More();It1.Next()) {
1382 Handle(SALOME_InteractiveObject) IO = It1.Value();
1383 if ( strcmp( IO->getEntry(), item->getEntry() ) == 0 ) {
1384 DeltaNeg.Append( IO );
1392 SALOME_ListIteratorOfListIO ItNeg( DeltaNeg );
1393 for(;ItNeg.More();ItNeg.Next()) {
1394 Sel->RemoveIObject( ItNeg.Value() );
1397 SALOME_ListIteratorOfListIO ItPos( DeltaPos );
1398 for(;ItPos.More();ItPos.Next()) {
1399 Sel->AddIObject( ItPos.Value() );
1402 myApp->updateActions();
1406 Called when selection is changed (UseCase Browser)
1408 void QAD_ObjectBrowser::onUseCaseSelectedItem()
1413 Called when item is expanded
1415 void QAD_ObjectBrowser::onExpanded (QListViewItem* item)
1417 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1418 if (!myStudy->_is_nil() && aItem)
1420 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1421 if (!Object->_is_nil())
1423 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1424 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1425 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1426 anAttr->SetOpened(true);
1432 Called when item is collapsed
1434 void QAD_ObjectBrowser::onCollapsed(QListViewItem* item)
1436 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1437 if (!myStudy->_is_nil() && aItem)
1439 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1440 if (!Object->_is_nil())
1442 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1443 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1444 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1445 anAttr->SetOpened(false);
1451 Find and returns value for the object
1452 Warning: object can have several values attributes, search is done in the following order:
1453 [integer], [real], [table of integer], [table of real], [comment]
1455 QString QAD_ObjectBrowser::getValueFromObject( SALOMEDS::SObject_ptr SO )
1457 if ( SO->_is_nil() )
1458 return QString::null;
1459 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1460 if ( !isComponent->_is_nil() )
1461 return QString::null; // no values to show for components
1463 SALOMEDS::GenericAttribute_var anAttr;
1464 SALOMEDS::AttributeInteger_var anInt;
1465 SALOMEDS::AttributeReal_var aReal;
1466 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1467 SALOMEDS::AttributeTableOfReal_var aTableReal;
1468 SALOMEDS::AttributeComment_var aComment;
1471 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1472 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1473 QString val = QString::number( anInt->Value() );
1477 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1478 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1479 QString val = QString::number( aReal->Value() );
1483 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1484 aTableInt = SALOMEDS::AttributeTableOfInteger::_narrow( anAttr );
1485 QString tlt = QString( strdup( aTableInt->GetTitle() ) );
1486 if ( !tlt.isEmpty() )
1488 int nbRows = aTableInt->GetNbRows() ;
1489 int nbCols = aTableInt->GetNbColumns();
1490 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1494 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1495 aTableReal = SALOMEDS::AttributeTableOfReal::_narrow( anAttr );
1496 QString tlt = QString( strdup( aTableReal->GetTitle() ) );
1497 if ( !tlt.isEmpty() )
1499 int nbRows = aTableReal->GetNbRows() ;
1500 int nbCols = aTableReal->GetNbColumns();
1501 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1505 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1506 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1507 QString val = QString( strdup( aComment->Value() ) );
1510 return QString::null;
1514 Shows/hides IAPP sub-tree in ObjectBrowser
1515 Current implementation just udpates browser
1517 void QAD_ObjectBrowser::setShowIAPP( bool show )
1523 Shows/hides info columns: Entry, IOR, Reference
1525 void QAD_ObjectBrowser::setShowInfoColumns( bool show )
1527 bool shown = myListView->header()->isResizeEnabled( 2 );
1529 if ( show != shown ) {
1531 myListView->header()->setResizeEnabled( true, 2 );
1532 myListView->header()->setResizeEnabled( true, 3 );
1533 myListView->header()->setResizeEnabled( true, 4 );
1534 myListView->setColumnWidthMode( 2, QListView::Maximum );
1535 myListView->setColumnWidthMode( 3, QListView::Maximum );
1536 myListView->setColumnWidthMode( 4, QListView::Maximum );
1537 if ( myListView->columnWidth( 2 ) <= 0 )
1538 myListView->header()->resizeSection( 2, 50 );
1539 if ( myListView->columnWidth( 3 ) <= 0 )
1540 myListView->header()->resizeSection( 3, 50 );
1541 if ( myListView->columnWidth( 4 ) <= 0 )
1542 myListView->header()->resizeSection( 4, 50 );
1545 myListView->setColumnWidthMode( 2, QListView::Manual );
1546 myListView->setColumnWidthMode( 3, QListView::Manual );
1547 myListView->setColumnWidthMode( 4, QListView::Manual );
1548 myListView->header()->resizeSection( 2, 0 );
1549 myListView->header()->resizeSection( 3, 0 );
1550 myListView->header()->resizeSection( 4, 0 );
1551 myListView->header()->setResizeEnabled( false, 2 );
1552 myListView->header()->setResizeEnabled( false, 3 );
1553 myListView->header()->setResizeEnabled( false, 4 );
1559 Shows/hides Value column
1561 void QAD_ObjectBrowser::setShowValueColumn( bool show )
1563 bool shown = myListView->header()->isResizeEnabled( 1 );
1565 if ( show != shown ) {
1567 myListView->header()->setResizeEnabled( true, 1 );
1568 myListView->setColumnWidthMode( 1, QListView::Maximum );
1569 if ( myListView->columnWidth( 1 ) <= 0 )
1570 myListView->header()->resizeSection( 1, 50 );
1573 myListView->setColumnWidthMode( 1, QListView::Manual );
1574 myListView->header()->resizeSection( 1, 0 );
1575 myListView->header()->setResizeEnabled( false, 1 );
1581 Sets CHRONO sorting enabled/disabled
1582 Note: when CHRONO sorting is enabled items are sorted by Entry value and column headers
1583 become unclickable to prohibit another sort type;
1584 when CHRONO sorting is disabled column headers become clickable - this allows
1585 to sort data by any column
1587 void QAD_ObjectBrowser::setEnableChronoSort( bool enable )
1590 // if CHRONO sorting is enabled set clickable header disabled ...
1591 myListView->header()->setClickEnabled( false );
1592 // ... and then sort by column 2 - OCAF doc entry
1593 myListView->setSorting( 2, TRUE ) ;
1596 // if CHRONO sorting is enabled set clickable header enabled ...
1597 myListView->header()->setClickEnabled( true );
1598 // and clear sorting by column 2
1599 myListView->setSorting( 10, TRUE );
1601 // myListView->sort( ) ;
1605 Slot, called to edit value
1607 void QAD_ObjectBrowser::onEditAttribute()
1609 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1610 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1611 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1612 if ( myStudy->_is_nil() )
1615 if ( Sel->IObjectCount() == 1 ) {
1616 SALOMEDS::SObject_var SO = myStudy->FindObjectID( Sel->firstIObject()->getEntry() );
1617 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1618 if ( !SO->_is_nil() && isComponent->_is_nil() ) { // no values to show for components
1619 SALOMEDS::GenericAttribute_var anAttr;
1620 SALOMEDS::AttributeInteger_var anInt;
1621 SALOMEDS::AttributeReal_var aReal;
1622 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1623 SALOMEDS::AttributeTableOfReal_var aTableReal;
1624 SALOMEDS::AttributeComment_var aComment;
1628 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1629 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1630 int val = SALOMEGUI_SetValueDlg::getInteger( tr( "SET_VALUE_INT_TLT" ),
1631 tr( "SET_VALUE_INT_LBL" ),
1634 QAD_Application::getDesktop() );
1636 anInt->SetValue( val );
1641 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1642 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1643 double val = SALOMEGUI_SetValueDlg::getDouble( tr( "SET_VALUE_REAL_TLT" ),
1644 tr( "SET_VALUE_REAL_LBL" ),
1647 QAD_Application::getDesktop() );
1649 aReal->SetValue( val );
1652 // if Table of integer
1654 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1655 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1658 SALOMEGUI_TableDlg::ttInt );
1659 bOk = ( dlg->exec() == QDialog::Accepted );
1663 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1664 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1667 SALOMEGUI_TableDlg::ttReal );
1668 bOk = ( dlg->exec() == QDialog::Accepted );
1672 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1673 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1674 QString val = SALOMEGUI_SetValueDlg::getString( tr( "SET_VALUE_COMMENT_TLT" ),
1675 tr( "SET_VALUE_COMMENT_LBL" ),
1678 QAD_Application::getDesktop() );
1680 aComment->SetValue( val );
1691 Returns true if object has editable attrubute :
1692 integer, real, table or comment
1694 bool QAD_ObjectBrowser::hasEditableAttribute( const Handle(SALOME_InteractiveObject)& object )
1696 if ( !myStudy->_is_nil() ) {
1697 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1698 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1699 if ( !comp->_is_nil() || obj->_is_nil() )
1701 QString val = getValueFromObject( obj );
1702 return ( !val.isNull() );
1708 Returns true if object has table attrubute ( integer and/or real )
1710 bool QAD_ObjectBrowser::hasTable( const Handle(SALOME_InteractiveObject)& object )
1712 SALOMEDS::GenericAttribute_var anAttr;
1713 if ( !myStudy->_is_nil() ) {
1714 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1715 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1716 if ( !comp->_is_nil() || obj->_is_nil() )
1718 if ( obj->FindAttribute( anAttr, "AttributeTableOfInteger" ) )
1720 if ( obj->FindAttribute( anAttr, "AttributeTableOfReal" ) )
1727 Slot, called when one of the UseCase Browser menu command is called
1729 void QAD_ObjectBrowser::onUseCasePopupMenu( int action )
1731 if ( myStudy->_is_nil() )
1733 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1734 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1735 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1736 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1737 SALOMEDS::SObject_var Current = UCBuilder->GetCurrentObject();
1739 QList<QListViewItem> ucSelected;
1740 ucSelected.setAutoDelete( false );
1741 getSelectedParents( myUseCaseView, ucSelected );
1743 if ( action == UC_NEW_EMPTY_ID ) {
1744 if ( ucSelected.count() == 1 ) {
1745 if ( isRootItem( ucSelected.at(0) ) )
1746 UCBuilder->SetRootCurrent();
1748 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1749 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1750 myActiveStudy->updateUseCaseBrowser();
1754 if ( action == UC_SET_CURRENT_ID ) {
1755 if ( ucSelected.count() > 0 ) {
1756 if ( isRootItem( ucSelected.at(0) ) )
1757 UCBuilder->SetRootCurrent();
1759 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1761 myActiveStudy->updateUseCaseBrowser( );
1764 if ( action == UC_RENAME_ID ) {
1765 if ( ucSelected.count() == 1 ) {
1766 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( 0 ) );
1767 if ( isRootItem( useCaseItem ) ) {
1768 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), strdup( UCBuilder->GetName() ) );
1769 if ( !name.isEmpty() ) {
1770 bool ok = UCBuilder->SetName( strdup( name.latin1() ) );
1771 myActiveStudy->updateUseCaseBrowser( );
1774 else/* if ( UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) )*/ {
1775 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), strdup( useCaseItem->getName() ) );
1776 if ( !name.isEmpty() ) {
1777 myActiveStudy->renameIObject( Sel->firstIObject(), name );
1783 if ( action == UC_APPEND_ID ) {
1784 if ( Sel->IObjectCount() > 0 ) {
1785 SALOME_ListIO SelIO; SelIO = Sel->StoredIObjects();
1786 SALOME_ListIteratorOfListIO SelIt( SelIO );
1787 for( ; SelIt.More(); SelIt.Next() ) {
1788 SALOMEDS::SObject_var selSO = myStudy->FindObjectID( SelIt.Value()->getEntry() );
1789 if ( !selSO->_is_nil() && strcmp( SelIt.Value()->getEntry(), ( "0:2" ) ) != 0 ) {
1790 UCBuilder->Remove( selSO ); // first remove object for sure ...
1791 UCBuilder->Append( selSO ); // ... and now re-append it
1794 myActiveStudy->updateUseCaseBrowser( true );
1798 if ( action == UC_REMOVE_ID ) {
1800 getSelectedParents( myUseCaseView, ucSelected, true );
1801 for ( int i = 0; i < ucSelected.count(); i++ ) {
1802 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )ucSelected.at( i );
1803 if ( !isRootItem( item ) ) {
1805 SALOMEDS::SObject_var SO = myStudy->FindObjectID( item->getEntry() );
1806 if ( !SO->_is_nil() ) {
1807 UCBuilder->Remove( SO );
1813 Sel->ClearIObjects();
1814 myActiveStudy->updateUseCaseBrowser( true );
1817 if ( action == UC_CLEAR_ID ) {
1818 if ( myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0) {
1819 QAD_ObjectBrowserItem* child = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild()->firstChild();
1821 UCBuilder->Remove( myStudy->FindObjectID( child->getEntry().latin1() ) );
1822 child = ( QAD_ObjectBrowserItem* )( child->nextSibling() );
1824 Sel->ClearIObjects();
1825 myActiveStudy->updateUseCaseBrowser();
1830 Use Case browser buttons slot
1832 void QAD_ObjectBrowser::onUseCaseBtn()
1834 if ( sender() == myNewBtn ) {
1835 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1836 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1837 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1838 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1839 myActiveStudy->updateUseCaseBrowser();
1841 if ( sender() == myAddBtn )
1842 onUseCasePopupMenu( UC_APPEND_ID );
1843 if ( sender() == myDelBtn )
1844 onUseCasePopupMenu( UC_REMOVE_ID );
1845 if ( sender() == myClearBtn )
1846 onUseCasePopupMenu( UC_CLEAR_ID );
1847 if ( sender() == myCurrentBtn )
1848 onUseCasePopupMenu( UC_SET_CURRENT_ID );
1852 Show/remove UseCase Browser
1855 void QAD_ObjectBrowser::showUseCaseBrowser ( bool show )
1857 bool shown = (this->count() > 1);
1863 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
1864 UpdateUseCaseBrowser();
1868 this->removePage(myVBox);
1873 Switch between auto resizing of columns and manual mode
1875 void QAD_ObjectBrowser::autoSizeColumns( bool autosize )
1879 for (int i = 0; i < myListView->header()->count(); i++ )
1880 if (myListView->header()->isResizeEnabled(i))
1881 myListView->setColumnWidthMode(i, QListView::Maximum);
1886 for (int i = 0; i < myListView->header()->count(); i++ )
1887 myListView->setColumnWidthMode(i, QListView::Manual);