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
29 #include "QAD_ObjectBrowserItem.h"
30 #include "QAD_ObjectBrowser.h"
31 #include "QAD_Application.h"
32 #include "QAD_MessageBox.h"
33 #include "QAD_Desktop.h"
34 #include "QAD_Config.h"
35 #include "QAD_Settings.h"
36 #include "QAD_Tools.h"
37 #include "QAD_RightFrame.h"
38 #include "QAD_LeftFrame.h"
39 #include "SALOME_Selection.h"
40 #include "SALOME_InteractiveObject.hxx"
41 #include "SALOME_ListIteratorOfListIO.hxx"
42 #include "SALOMEGUI_SetValueDlg.h"
43 #include "SALOMEGUI_TableDlg.h"
44 #include "SALOMEGUI_NameDlg.h"
47 #include <qlistview.h>
49 #include <qpopupmenu.h>
50 #include <qtabwidget.h>
51 #include <qpushbutton.h>
56 #include <qdragobject.h>
57 #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
78 static int MYDEBUG = 0;
80 static int MYDEBUG = 0;
85 Small button which updates Object Browser's contents
87 Btn::Btn ( QWidget * parent, const char * name ) : QToolButton( parent, name )
89 connect( this, SIGNAL(clicked()), this, SLOT(onClicked()) );
93 QAD_ObjectBrowser* OB = QAD_Application::getDesktop()->getActiveApp()->getActiveStudy()->getActiveStudyFrame()->getLeftFrame()->getObjectBrowser();
98 Gets selected top-level items (i.e. not including sub-items) [ static ]
100 static void getSelectedParents( QListViewItem* listViewItem, QList<QListViewItem>& itemList )
102 QListViewItem* item = listViewItem->firstChild();
104 if ( item->isSelected() ) {
105 itemList.append( item );
108 getSelectedParents( item, itemList );
110 item = item->nextSibling();
114 Gets selected top-level items (i.e. not including sub-items) [ static ]
116 static void getSelectedParents( QListView* listView, QList<QListViewItem>& itemList, bool ignoreRoot = false )
119 QListViewItem* item = listView->firstChild();
121 if ( item->isSelected() && !ignoreRoot ) {
122 itemList.append( item );
125 getSelectedParents( item, itemList );
127 item = item->nextSibling();
131 Gets top-most parent item [ static ]
133 static QListViewItem* getTopParent( QListViewItem* item )
137 QListViewItem* p = item->parent();
140 while ( p->parent() ) {
146 Returns true if the item is top-level (root)
148 static bool isRootItem( QListViewItem* item )
150 return ( item->listView() && !item->parent() );
155 QAD_ObjectBrowser::QAD_ObjectBrowser( SALOMEDS::Study_var study, QWidget* parent, const char* name, WFlags fl )
156 : QTabWidget( parent, name, fl )
158 myStudy = SALOMEDS::Study::_duplicate( study );
159 myListViewMap.clear();
160 myUseCaseMap.clear();
161 myListView=0; // must be done before setupListView(): setCornerWidget() provoque call to eventFilter
162 myUseCaseView=0; // and test myUseCaseView->viewport() before initialisation
169 QAD_ObjectBrowser::~QAD_ObjectBrowser()
171 if (!myStudy->_is_nil())
172 CORBA::release(myStudy);
176 Configures Object Browser and UseCase Browser.
177 Columns, Selection Mode and Palette.
179 void QAD_ObjectBrowser::setupListView()
181 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
183 this->setTabPosition( QTabWidget::Bottom );
185 /* Reading setting : Columns for Value, OCAF Doc entry, object IOR, OCAF Doc ref entry and Chrono sorting */
186 QString AddColumn = QAD_CONFIG->getSetting( "ObjectBrowser:AddColumn" );
187 QString ValueColumn = QAD_CONFIG->getSetting( "ObjectBrowser:ValueColumn" );
188 QString ShowCHRONO_SORT = QAD_CONFIG->getSetting( "ObjectBrowser:ChronologicalSort" );
189 QString showUseCase = QAD_CONFIG->getSetting("ObjectBrowser:ShowUseCaseBrowser");
190 QString noAutoSizeColumns = QAD_CONFIG->getSetting( "ObjectBrowser:NoAutoSizeColumns" );
192 /* create and setup Object Browser ================================= */
193 myListView = new QListView( this, "Object Browser");
194 myListView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
195 myListView->setMinimumSize( 1, 1 );
196 myListView->setPalette( QAD_Application::getPalette( true ) );
198 /* First two columns = object name and value - always visible */
199 myListView->addColumn( tr( "OBJECT_BROWSER_OBJECT" ) ); /* Adding Object column */
200 myListView->addColumn( tr( "OBJECT_BROWSER_VALUE" ) ); /* Adding Value column */
201 myListView->addColumn( tr( "OBJECT_BROWSER_ENTRY" ) ); /* Adding Doc entry column */
202 myListView->addColumn( tr( "OBJECT_BROWSER_IOR" ) ); /* Adding Object IOR column */
203 myListView->addColumn( tr( "OBJECT_BROWSER_REFENTRY" ) ); /* Adding OCAF Doc ref entry column */
204 myListView->header()->setMovingEnabled( false );
207 myListView->header()->setClickEnabled( TRUE ); /* Enable clicking on the header */
208 myListView->setShowSortIndicator( TRUE ) ; /* Add user arrows to indicate the sort order : LPN */
209 myListView->setRootIsDecorated( TRUE ); /* Enable expand/collapse control for the root item */
210 myListView->setSelectionMode ( QListView::Extended ); /* Enable multiple selection */
211 myListView->setVScrollBarMode( QScrollView::AlwaysOn ); /* Set scrollbars always visible */
212 myListView->setHScrollBarMode( QScrollView::AlwaysOn ); /* ... */
214 myListView->setCornerWidget( new Btn( this ) );
215 /* Connect section */
216 //VRV: porting on Qt 3.0.5
217 #if QT_VERSION < 0x030005
218 connect( myListView, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint&, int ) ),
219 this, SLOT( showPopupMenu( QListViewItem* ) ) );
221 connect( myListView, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
222 this, SLOT( showPopupMenu( QListViewItem* ) ) );
224 //VRV: porting on Qt 3.0.5
226 connect( myListView, SIGNAL( selectionChanged() ),
227 this, SLOT( onSelectedItem() ) );
228 connect( myListView, SIGNAL( expanded( QListViewItem* ) ),
229 this, SLOT( onExpanded( QListViewItem* ) ) );
230 connect( myListView, SIGNAL( collapsed( QListViewItem* ) ),
231 this, SLOT( onCollapsed( QListViewItem* ) ) );
233 /* create and setup UseCase Browser ================================ */
234 myVBox = new QWidget( this );
235 QVBoxLayout* vBoxLayout = new QVBoxLayout( myVBox );
237 myUseCaseView = new QListView( myVBox, "UseCase Browser");
238 myUseCaseView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
239 myUseCaseView->setMinimumSize( 1, 1 );
240 myUseCaseView->setPalette( QAD_Application::getPalette( true ) );
242 /* First column = object name */
243 myUseCaseView->addColumn( tr( "OBJECT_BROWSER_OBJECT" ) );
245 myUseCaseView->header()->setClickEnabled( TRUE ); /* Enable clicking on the header */
246 myUseCaseView->setShowSortIndicator( TRUE ) ; /* Add user arrows to indicate the sort order : LPN */
247 myUseCaseView->setRootIsDecorated( TRUE ); /* Enable expand/collapse control for the root item */
248 myUseCaseView->setSelectionMode ( QListView::Extended ); /* Enable multiple selection */
249 myUseCaseView->setVScrollBarMode( QScrollView::AlwaysOn ); /* Set scrollbars always visible */
250 myUseCaseView->setHScrollBarMode( QScrollView::AlwaysOn ); /* ... */
251 myUseCaseView->header()->setMovingEnabled( false );
252 myUseCaseView->viewport()->setAcceptDrops( true );
253 myUseCaseView->installEventFilter( this );
254 myUseCaseView->viewport()->installEventFilter( this );
255 myUseCaseView->setSorting( -1 ) ;
256 vBoxLayout->addWidget( myUseCaseView );
258 myUseCaseView->setCornerWidget( new Btn( this ) );
260 myNewBtn = new QToolButton( myVBox );
261 myNewBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_NEW") ) );
262 myNewBtn->setAutoRaise( true );
263 QToolTip::add( myNewBtn, tr( "UC_NEW_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_NEW_TIP" ) );
264 myAddBtn = new QToolButton( myVBox );
265 myAddBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_ADD") ) );
266 myAddBtn->setAutoRaise( true );
267 QToolTip::add( myAddBtn, tr( "UC_APPEND_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_APPEND_TIP" ) );
268 myDelBtn = new QToolButton( myVBox );
269 myDelBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_REMOVE") ) );
270 myDelBtn->setAutoRaise( true );
271 QToolTip::add( myDelBtn, tr( "UC_REMOVE_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_REMOVE_TIP" ) );
272 myClearBtn = new QToolButton( myVBox );
273 myClearBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_CLEAR") ) );
274 myClearBtn->setAutoRaise( true );
275 QToolTip::add( myClearBtn, tr( "UC_CLEAR_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_CLEAR_TIP" ) );
276 myCurrentBtn = new QToolButton( myVBox );
277 myCurrentBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_SET_CURRENT") ) );
278 myCurrentBtn->setAutoRaise( true );
279 QToolTip::add( myCurrentBtn, tr( "UC_SET_CURRENT_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_SET_CURRENT_TIP" ) );
281 QHBoxLayout* btnLayout = new QHBoxLayout;
282 btnLayout->setMargin( 3 ); btnLayout->setSpacing( 3 );
283 btnLayout->addWidget( myNewBtn );
284 btnLayout->addStretch();
285 btnLayout->addSpacing( 5 );
286 btnLayout->addStretch();
287 btnLayout->addWidget( myAddBtn );
288 btnLayout->addWidget( myDelBtn );
289 btnLayout->addStretch();
290 btnLayout->addSpacing( 5 );
291 btnLayout->addStretch();
292 btnLayout->addWidget( myClearBtn );
293 btnLayout->addStretch();
294 btnLayout->addSpacing( 5 );
295 btnLayout->addStretch();
296 btnLayout->addWidget( myCurrentBtn );
297 btnLayout->addStretch();
299 vBoxLayout->addLayout( btnLayout );
301 connect( myNewBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
302 connect( myAddBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
303 connect( myDelBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
304 connect( myClearBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
305 connect( myCurrentBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
307 /* Connect section */
308 #if QT_VERSION < 0x030005
309 connect( myUseCaseView, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint&, int ) ),
310 this, SLOT( showPopupMenu( QListViewItem* ) ) );
312 connect( myUseCaseView, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
313 this, SLOT( showPopupMenu( QListViewItem* ) ) );
316 connect( myUseCaseView, SIGNAL( selectionChanged() ),
317 this, SLOT( onSelectedItem() ) );
319 /* add Object Browser and UseCase Browser as pages ================= */
320 this->addTab( myListView, tr( "TLT_OBJECT_BROWSER" ) );
321 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
323 if ( showUseCase != "true")
324 this->removePage(myVBox);
326 setShowInfoColumns( AddColumn == "true" );
327 setShowValueColumn( ValueColumn == "true" );
328 setEnableChronoSort( ShowCHRONO_SORT == "true" );
330 if ( noAutoSizeColumns == "true" )
332 for (int i = 0; i < myListView->header()->count(); i++ )
333 myListView->setColumnWidthMode(i, QListView::Manual);
336 resize( QSize( 100, 400 ) );
343 bool QAD_ObjectBrowser::eventFilter( QObject* o, QEvent* e )
345 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
346 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
348 if ( myStudy->_is_nil() )
349 return QTabWidget::eventFilter( o, e );
351 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
352 if (! myUseCaseView) return QTabWidget::eventFilter( o, e );
353 if (o == myUseCaseView->viewport()) {
354 if ( e->type() == QEvent::MouseButtonPress ) {
355 // Test if clicked on selection and start drag if necessary
356 QMouseEvent* me = ( QMouseEvent* )e;
357 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )( myUseCaseView->itemAt( me->pos() ) );
358 if ( item && item->isSelected() && me->button() == LeftButton) {
359 if ( me->pos().x() > myUseCaseView->header()->sectionPos( myUseCaseView->header()->mapToIndex( 0 ) ) +
360 myUseCaseView->treeStepSize() * ( item->depth() + ( myUseCaseView->rootIsDecorated() ? 1 : 0 ) ) +
361 myUseCaseView->itemMargin() ||
362 me->pos().x() < myUseCaseView->header()->sectionPos( myUseCaseView->header()->mapToIndex( 0 ) ) ) {
363 QStringList entryList;
364 QListViewItemIterator it( myUseCaseView );
366 for ( ; it.current(); ++it ) {
367 QAD_ObjectBrowserItem* selItem = ( QAD_ObjectBrowserItem* )( it.current() );
368 if ( selItem->isSelected() ) {
369 if ( isRootItem( selItem ) ) {
374 entryList.append( selItem->getEntry() );
378 if ( done && !entryList.isEmpty() ) {
379 QTextDrag *d = new QTextDrag( entryList.join("*"), myUseCaseView->viewport() );
386 else if ( e->type() == QEvent::DragMove ) {
387 QDragMoveEvent* dme = ( QDragMoveEvent* )e;
388 if ( dme->source() == myUseCaseView->viewport() ) {
396 else if ( e->type() == QEvent::Drop ) {
397 QDropEvent* de = ( QDropEvent* )e;
399 QAD_ObjectBrowserItem* dropItem = ( QAD_ObjectBrowserItem* )( myUseCaseView->itemAt( de->pos() ) );
400 if ( de->source() == myUseCaseView->viewport() ) {
401 if ( QTextDrag::decode( de, text ) && dropItem && !dropItem->isSelected() ) {
402 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )getTopParent( dropItem );
404 if ( !UCBuilder->_is_nil() ) {
405 UCBuilder->SetRootCurrent();
406 if ( useCaseItem != dropItem ) {
407 SALOMEDS::SObject_var dropObject = myStudy->FindObjectID( dropItem->getEntry() );
408 if ( !dropObject->_is_nil() )
409 UCBuilder->SetCurrentObject( dropObject );
411 QStringList entryList = QStringList::split( "*", text, false );
412 // if Move action then first remove all selected items
413 if ( de->action() == QDropEvent::Move ) {
414 QList<QListViewItem> ucSelected;
415 ucSelected.setAutoDelete( false );
416 getSelectedParents( myUseCaseView, ucSelected );
417 for ( int j = 0; j < entryList.count(); j++ ) {
418 QAD_ObjectBrowserItem* delItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( j ) );
419 QAD_ObjectBrowserItem* ucDelItem = ( QAD_ObjectBrowserItem* )getTopParent( delItem );
420 SALOMEDS::SObject_var delSO = myStudy->FindObjectID( delItem->getEntry() );
421 if ( !delSO->_is_nil() && ucDelItem ) {
422 UCBuilder->Remove( delSO );
426 // then try to append items to destination
427 for ( int i = 0; i < entryList.count(); i++ ) {
428 SALOMEDS::SObject_var SO = myStudy->FindObjectID( entryList[i] );
429 if ( !SO->_is_nil() ) {
430 UCBuilder->Remove( SO );
431 UCBuilder->Append( SO );
434 myActiveStudy->updateUseCaseBrowser();
446 else if ( o == myUseCaseView ) {
447 if ( e->type() == QEvent::KeyPress ) {
448 QKeyEvent* ke = ( QKeyEvent* )e;
449 if ( ke->key() == Key_Delete ) {
450 onUseCasePopupMenu( UC_REMOVE_ID );
455 return QTabWidget::eventFilter( o, e );
462 void QAD_ObjectBrowser::onCreatePopup()
464 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
465 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
466 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
468 /* VSR : Creation of common POPUP menu for Object Browser/Use Case Browser */
469 if ( Sel->IObjectCount() > 0 ) {
474 Desktop->definePopup( theContext, theParent, theObject );
476 Desktop->createPopup( myPopup, theContext, "ObjectBrowser", theObject);
477 if ( !Desktop->getActiveComponent().isEmpty() ) {
478 Desktop->customPopup( myPopup, theContext, "ObjectBrowser", theObject );
480 // VSR:22/01/03 - Command for edit attributes value
481 bool EditValues = QAD_CONFIG->getSetting( "ObjectBrowser:EditValues" ) == "true";
482 if ( EditValues && Sel->IObjectCount() == 1 && hasEditableAttribute(Sel->firstIObject()) ) {
483 if ( myPopup->count() > 0 )
484 myPopup->insertSeparator();
485 myPopup->insertItem( tr( "EDIT_VALUE_CMD" ),
487 SLOT( onEditAttribute() ) );
492 // No selected item => it's not necessary to create popup
493 //NRI- : Desktop->createPopup( myPopup, "", "ObjectBrowser", "");
495 if ( currentPage() != myListView ) {
496 /* VSR : Creation of POPUP menu for UseCase Browser */
497 QList<QListViewItem> ucSelected;
498 ucSelected.setAutoDelete( false );
499 getSelectedParents( myUseCaseView, ucSelected );
501 if ( myPopup && !myStudy->_is_nil() ) {
502 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
504 bool isOne = ucSelected.count() == 1;
505 bool isMany = ucSelected.count() > 1;
506 bool isEmpty = ucSelected.count() == 1;
507 bool obSelected = Sel->IObjectCount() > 0;
508 bool isRoot = isOne && isRootItem( ucSelected.at( 0 ) );
509 bool manyChildren = myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0;
510 bool isUseCase = isOne &&
511 ( isRoot || UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) );
515 QPopupMenu *UseCasePopup = new QPopupMenu( myPopup );
517 UseCasePopup->insertItem( tr( "UC_NEW_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_NEW_EMPTY_ID );
519 UseCasePopup->insertItem( tr( "UC_SET_CURRENT_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_SET_CURRENT_ID );
521 UseCasePopup->insertItem( tr( "UC_RENAME_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_RENAME_ID );
522 if ( isRoot && manyChildren )
523 UseCasePopup->insertItem( tr( "UC_CLEAR_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_CLEAR_ID );
525 if ( UseCasePopup->count() > 0 ) {
526 if ( myPopup->count() > 0 )
527 myPopup->insertSeparator();
528 myPopup->insertItem( tr( "UC_POPUP" ), UseCasePopup );
538 Returns Object Browser list view
540 QListView* QAD_ObjectBrowser::getListView() const
546 Returns UseCase Browser list view
548 QListView* QAD_ObjectBrowser::getUseCaseView() const
550 return myUseCaseView;
554 Adds anItem ( probably a SComponent )
556 QAD_ObjectBrowserItem* QAD_ObjectBrowser::AddItem(QListView* theView,
557 const QString& theName,
558 const QString& theEntry,
559 const QString& theIOR,
561 const QString& theValue,
562 QAD_ObjectBrowserItem* theAfter)
565 QAD_ObjectBrowserItem* last = (QAD_ObjectBrowserItem*)(theView->firstChild());
569 for ( ; last->nextSibling(); last = (QAD_ObjectBrowserItem*)(last->nextSibling()) );
571 QAD_ObjectBrowserItem* anItem = new QAD_ObjectBrowserItem( theView, last );
573 anItem->setType( theType );
574 anItem->setOpen( FALSE );
575 anItem->setName( theName );
576 anItem->setValue( theValue );
577 anItem->setEntry( theEntry );
578 anItem->setIOR( theIOR );
579 anItem->setReference( "" );
585 Adds anItem ( probably a StudyObject )
587 QAD_ObjectBrowserItem* QAD_ObjectBrowser::AddItem(QAD_ObjectBrowserItem* theParentItem,
588 const QString& theName,
589 const QString& theEntry,
590 const QString& theIOR,
592 const QString& theRef,
593 const QString& theValue,
594 QAD_ObjectBrowserItem* theAfter)
597 QAD_ObjectBrowserItem* last = (QAD_ObjectBrowserItem*)(theParentItem->firstChild());
601 for ( ; last->nextSibling(); last = (QAD_ObjectBrowserItem*)(last->nextSibling()) );
603 QAD_ObjectBrowserItem* anItem = new QAD_ObjectBrowserItem(theParentItem, last);
604 anItem->setType( theType );
605 anItem->setOpen( FALSE );
606 anItem->setName( theName );
607 anItem->setValue( theValue );
608 anItem->setEntry( theEntry );
609 anItem->setIOR( theIOR );
610 anItem->setReference( theRef );
616 Updates Object Browsers' item [ protected ]
618 void QAD_ObjectBrowser::Update( SALOMEDS::SObject_ptr SO,
619 QAD_ObjectBrowserItem* theParentItem )
621 if ( myStudy->_is_nil() || SO->_is_nil() || !theParentItem ) {
624 SALOMEDS::ChildIterator_var it = myStudy->NewChildIterator(SO);
626 for (; it->More();it->Next()) {
627 SALOMEDS::SObject_var CSO = it->Value();
628 SALOMEDS::SObject_var RefSO;
630 QString CSOEntry = strdup( CSO->GetID() );
631 SALOMEDS::GenericAttribute_var anAttr;
632 SALOMEDS::AttributeName_var aName;
633 SALOMEDS::AttributeComment_var aCmnt;
634 SALOMEDS::AttributeIOR_var anIOR;
635 SALOMEDS::AttributeReal_var aReal;
636 SALOMEDS::AttributeInteger_var anInt;
637 SALOMEDS::AttributeSelectable_var aSelectable;
638 SALOMEDS::AttributeExpandable_var anExpandable;
639 SALOMEDS::AttributeOpened_var anOpened;
640 SALOMEDS::AttributePixMap_var aPixmap;
641 SALOMEDS::AttributeTextColor_var aTextColor;
642 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
644 QAD_ObjectBrowserItem* Item = 0;
645 QAD_ObjectBrowserItem* subItem;
648 if ( CSO->ReferencedObject(RefSO) && !RefSO->_is_nil() ) {
650 QString RefSOEntry = strdup( RefSO->GetID() );
651 if (CSO->FindAttribute(anAttr, "AttributeName") || RefSO->FindAttribute(anAttr, "AttributeName")) {
652 aName = SALOMEDS::AttributeName::_narrow(anAttr);
653 if (RefSO->FindAttribute(anAttr, "AttributeIOR")) {
654 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
655 ior = strdup( anIOR->Value() );
657 valueString = getValueFromObject( RefSO );
658 // AddItem (Item, QString(" * ") + strdup( aName->Value() ), RefSOEntry, ior, 2, CSOEntry);
659 Item = AddItem(theParentItem,
660 QString(" * ") + strdup( aName->Value() ),
666 myListViewMap[ RefSOEntry ].append( Item );
669 if(MYDEBUG) MESSAGE("QAD_ObjectBrowser::Update : noname item: "<<CSO->GetID());
673 valueString = getValueFromObject( CSO );
675 if (CSO->FindAttribute(anAttr, "AttributeIOR")) {
676 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
677 ior = strdup( anIOR->Value() );
679 // getting Name and adding new Item
680 if (CSO->FindAttribute(anAttr, "AttributeName") ) {
681 aName = SALOMEDS::AttributeName::_narrow(anAttr);
682 Item = AddItem(theParentItem, strdup( aName->Value() ), CSOEntry, ior, 0, "", valueString);
683 myListViewMap[ CSOEntry ].append( Item );
686 if(MYDEBUG) MESSAGE("QAD_ObjectBrowser::Update : noname item: "<<CSO->GetID());
688 // adding other attributes
691 if ( CSO->FindAttribute(anAttr, "AttributeSelectable") ) {
692 aSelectable = SALOMEDS::AttributeSelectable::_narrow(anAttr);
693 Item->setSelectable(aSelectable->IsSelectable());
696 if ( CSO->FindAttribute(anAttr, "AttributeExpandable") ) {
697 anExpandable = SALOMEDS::AttributeExpandable::_narrow(anAttr);
698 Item->setExpandable(anExpandable->IsExpandable());
701 if ( CSO->FindAttribute(anAttr, "AttributeOpened") ) {
702 anOpened = SALOMEDS::AttributeOpened::_narrow(anAttr);
703 Item->setOpen(anOpened->IsOpened());
706 if ( CSO->FindAttribute(anAttr, "AttributeTextColor") ) {
707 aTextColor = SALOMEDS::AttributeTextColor::_narrow(anAttr);
708 QColor aColor((int)(aTextColor->TextColor().R), (int)(aTextColor->TextColor().G), (int)(aTextColor->TextColor().B)) ;
709 Item->setTextColor(aColor);
711 // TextHighlightColor
712 if ( CSO->FindAttribute(anAttr, "AttributeTextHighlightColor") ) {
713 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow(anAttr);
714 QColor aColor((int)(aTextHighlightColor->TextHighlightColor().R),
715 (int)(aTextHighlightColor->TextHighlightColor().G),
716 (int)(aTextHighlightColor->TextHighlightColor().B)) ;
717 Item->setTextHighlightColor(aColor);
720 if ( CSO->FindAttribute(anAttr, "AttributePixMap") ) {
721 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
722 if ( aPixmap->HasPixMap() ) {
723 SALOMEDS::SComponent_var father = CSO->GetFatherComponent();
724 if (father->FindAttribute(anAttr, "AttributeName") ) {
725 SALOMEDS::AttributeName_var aFatherName;
726 aFatherName = SALOMEDS::AttributeName::_narrow(anAttr);
729 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
731 //if(resMgr->loadResources( QString(aFatherName->Value()) + "GUI", msg )) {
732 if( resMgr->loadResources( QAD_Application::getDesktop()->getComponentName( QString( aFatherName->Value() ) ), msg ) ) {
733 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName( QString( aFatherName->Value() ) ),
734 tr( aPixmap->GetPixMap() ) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ) );
735 //QPixmap icon ( resMgr->loadPixmap( QString(aFatherName->Value()) + "GUI",
736 //tr(aPixmap->GetPixMap()) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ));
737 Item->setPixmap( 0, icon );
745 // if ( theParentItem->isOpen() )
746 // Item->setOpen(TRUE);
754 Updates Object Browser tree and UseCase Browser tree
756 void QAD_ObjectBrowser::Update()
758 int xc = myListView->contentsX();
759 int yc = myListView->contentsY();
760 myListView->viewport()->setUpdatesEnabled( false );
763 myListViewMap.clear();
765 if ( myStudy->_is_nil() ) {
769 QString ShowIAPP = QAD_CONFIG->getSetting("ObjectBrowser:IAPP");
771 /* Updating Object Browser ============================================== */
772 SALOMEDS::SComponentIterator_var itcomp = myStudy->NewComponentIterator();
773 for (; itcomp->More(); itcomp->Next()) {
774 QAD_ObjectBrowserItem* Item = 0;
775 SALOMEDS::SComponent_var SC = itcomp->Value();
776 QString dataType = strdup( SC->ComponentDataType() );
778 QString SCEntry = strdup( SC->GetID() );
780 SALOMEDS::GenericAttribute_var anAttr;
781 SALOMEDS::AttributeName_var aName;
782 SALOMEDS::AttributeComment_var aCmnt;
783 SALOMEDS::AttributeIOR_var anIOR;
784 SALOMEDS::AttributeReal_var aReal;
785 SALOMEDS::AttributeInteger_var anInt;
786 SALOMEDS::AttributeSelectable_var aSelectable;
787 SALOMEDS::AttributeExpandable_var anExpandable;
788 SALOMEDS::AttributeOpened_var anOpened;
789 SALOMEDS::AttributePixMap_var aPixmap;
790 SALOMEDS::AttributeTextColor_var aTextColor;
791 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
793 if (SC->FindAttribute(anAttr, "AttributeIOR")) {
794 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
795 ior = strdup( anIOR->Value() );
798 bool caseIAPP = false;
800 // create data-tree item, corresponding to component (and set name if component has it)
801 if ( dataType.compare("Interface Applicative") == 0 ) {
803 if ( ShowIAPP.compare("true") == 0 ) {
804 if (SC->FindAttribute(anAttr, "AttributeName")) {
805 aName = SALOMEDS::AttributeName::_narrow(anAttr);
806 Item = AddItem (myListView, strdup( aName->Value() ), strdup( SCEntry ), ior, 1, "");
807 myListViewMap[ SCEntry ].append( Item );
810 Item = AddItem (myListView, dataType, SCEntry, ior, 1, "");
811 myListViewMap[ SCEntry ].append( Item );
818 if (SC->FindAttribute(anAttr, "AttributeName")) {
819 aName = SALOMEDS::AttributeName::_narrow(anAttr);
820 Item = AddItem (myListView, strdup( aName->Value() ), SCEntry, ior, 1, "");
821 myListViewMap[ SCEntry ].append( Item );
824 /*In according to CAF - any label (even if it is empty) exist during to whole session.
825 So, if label haven't an "AttributeName" it is means that the label is empty.
826 Therefore follow action couses bug -
827 Item = AddItem (myListView, dataType, SC->GetID(), ior, 1, "");
831 // add other attributes
833 QAD_ObjectBrowserItem* subItem;
835 if ( SC->FindAttribute(anAttr, "AttributeSelectable") ) {
836 aSelectable = SALOMEDS::AttributeSelectable::_narrow(anAttr);
837 Item->setSelectable(aSelectable->IsSelectable());
840 if ( SC->FindAttribute(anAttr, "AttributeExpandable") ) {
841 anExpandable = SALOMEDS::AttributeExpandable::_narrow(anAttr);
842 Item->setExpandable(anExpandable->IsExpandable());
845 if ( SC->FindAttribute(anAttr, "AttributeOpened") ) {
846 anOpened = SALOMEDS::AttributeOpened::_narrow(anAttr);
847 Item->setOpen(anOpened->IsOpened());
850 if ( SC->FindAttribute(anAttr, "AttributeTextColor") ) {
851 aTextColor = SALOMEDS::AttributeTextColor::_narrow(anAttr);
852 QColor aColor((int)(aTextColor->TextColor().R), (int)(aTextColor->TextColor().G), (int)(aTextColor->TextColor().B)) ;
853 Item->setTextColor(aColor);
855 // TextHighlightColor
856 if ( SC->FindAttribute(anAttr, "AttributeTextHighlightColor") ) {
857 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow(anAttr);
858 QColor aColor((int)(aTextHighlightColor->TextHighlightColor().R),
859 (int)(aTextHighlightColor->TextHighlightColor().G),
860 (int)(aTextHighlightColor->TextHighlightColor().B)) ;
861 Item->setTextHighlightColor(aColor);
865 if ( SC->FindAttribute(anAttr, "AttributePixMap") ) {
866 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
867 if ( aPixmap->HasPixMap() ) {
869 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
871 if(MYDEBUG) MESSAGE ( " Component " << aName->Value() );
872 if(MYDEBUG) MESSAGE ( " Icon " << aPixmap->GetPixMap() );
873 if(resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString(aName->Value())), msg )) {
874 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString(aName->Value())),
875 tr(aPixmap->GetPixMap()) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ));
876 Item->setPixmap( 0, icon );
882 if ( strcmp(dataType, TypeComponent) == 0 )
885 if ( caseIAPP && ShowIAPP.compare("true") == 0 )
892 myListView->setContentsPos(xc,yc);
894 myListView->viewport()->setUpdatesEnabled( true );
895 myListView->viewport()->repaint( false );
896 /* Updating UseCase Browser ============================================= */
897 if ( this->count() > 1 )
898 UpdateUseCaseBrowser();
902 Removes item with all childs from the map - used to optimize UseCase browser update
904 void removeFromMap( ItemMap& theMap, QAD_ObjectBrowserItem* item )
907 QAD_ObjectBrowserItem* subItem = ( QAD_ObjectBrowserItem* )( item->firstChild() );
909 removeFromMap( theMap, subItem );
910 subItem = ( QAD_ObjectBrowserItem* )( subItem->nextSibling() );
912 if ( theMap.contains( item->getEntry() ) ) {
913 theMap[ item->getEntry() ].removeRef( item );
914 if ( theMap[ item->getEntry() ].isEmpty() ) {
915 theMap.remove( item->getEntry() );
922 Updates only UseCase Browser
924 void QAD_ObjectBrowser::UpdateUseCaseBrowser() {
925 // myUseCaseView->clear(); myUseCaseMap.clear();
926 if ( myStudy->_is_nil() || this->count()<2 ) {
929 myUseCaseView->blockSignals( true );
930 // myUseCaseView->setUpdatesEnabled( false );
932 QAD_ObjectBrowserItem* root = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild();
933 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
934 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
935 QString UCName = QString( strdup( UCBuilder->GetName() ) );
936 if ( UCName.isEmpty() )
937 UCName = QString( tr( "Root" ) );
938 // creating root item if is not yet created
940 root = AddItem( myUseCaseView, UCName, "0:2", "", 1, "" );
941 myUseCaseMap[ "0:2" ].append( root );
944 root->setName( UCName );
945 // setting it current if necessary
946 root->setCurrent( SOCurrent->_is_nil() || !strcmp( SOCurrent->GetID(), "0:2" ) );
947 // updating list view...
948 QMap<QString,SALOMEDS::SObject_var> ucList;
949 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( SALOMEDS::SObject::_nil() );
950 if ( !UCIter->_is_nil() ) {
951 for ( ; UCIter->More(); UCIter->Next() ) {
952 SALOMEDS::SObject_var UCObject = UCIter->Value();
953 QString UCEntry = strdup( UCObject->GetID() );
954 ucList[ UCEntry ] = UCObject;
957 // ... 1) delete removed items
958 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )root->firstChild();
959 while ( childItem ) {
960 QAD_ObjectBrowserItem* prevItem = childItem;
961 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
962 if ( !ucList.contains( prevItem->getEntry() ) ) {
963 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
964 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
965 // myUseCaseMap.remove( prevItem->getEntry() );
966 removeFromMap( myUseCaseMap, prevItem );
970 // ... 2) create/update existing
971 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
972 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
973 UpdateUCItem( it.data(), root );
975 myUseCaseView->blockSignals( false );
976 // myUseCaseView->setUpdatesEnabled( true );
977 // myUseCaseView->update();
978 // UCItem->setOpen( true );
982 Updates UseCase Browser's item
984 void QAD_ObjectBrowser::UpdateUCItem( SALOMEDS::SObject_var UCObject, QAD_ObjectBrowserItem* UCItem )
986 if ( myStudy->_is_nil() || !UCItem )
989 /* Creating SObjects item */
990 SALOMEDS::SObject_var RefSO;
991 SALOMEDS::GenericAttribute_var anAttr;
992 SALOMEDS::AttributeName_var aName;
993 SALOMEDS::AttributeIOR_var anIOR;
994 SALOMEDS::AttributeSelectable_var aSelectable;
995 SALOMEDS::AttributeExpandable_var anExpandable;
996 SALOMEDS::AttributePixMap_var aPixmap;
997 SALOMEDS::AttributeTextColor_var aTextColor;
998 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
1001 QString UCEntry = strdup( UCObject->GetID() );
1003 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1004 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
1006 bool bFound = false;
1007 QAD_ObjectBrowserItem* UCSubItem = 0;
1008 if ( myUseCaseMap.contains( UCEntry ) && myUseCaseMap[ UCEntry ].count() > 0 )
1009 UCSubItem = myUseCaseMap[ UCEntry ].first();
1012 if ( UCObject->ReferencedObject( RefSO ) && !RefSO->_is_nil() ) {
1013 QString RefSOEntry = strdup( RefSO->GetID() );
1014 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) || RefSO->FindAttribute( anAttr, "AttributeName" ) ) {
1015 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1016 if ( RefSO->FindAttribute( anAttr, "AttributeIOR" ) ) {
1017 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1018 ior = strdup( anIOR->Value() );
1020 valueString = getValueFromObject( RefSO );
1022 UCSubItem = AddItem( UCItem,
1023 QString( " * " ) + strdup( aName->Value() ),
1029 myUseCaseMap[ RefSOEntry ].append( UCSubItem );
1032 UCSubItem->setName( QString( " * " ) + strdup( aName->Value() ) );
1033 UCSubItem->setEntry( RefSOEntry );
1034 UCSubItem->setIOR( ior );
1035 UCSubItem->setReference( UCEntry );
1036 UCSubItem->setValue( valueString );
1038 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1043 valueString = getValueFromObject( UCObject );
1045 if ( UCObject->FindAttribute( anAttr, "AttributeIOR" ) ) {
1046 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1047 ior = strdup( anIOR->Value() );
1049 // getting Name and adding new Item
1050 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) ) {
1051 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1053 UCSubItem = AddItem( UCItem, strdup( aName->Value() ), UCEntry, ior, 0, "", valueString );
1054 myUseCaseMap[ UCEntry ].append( UCSubItem );
1057 UCSubItem->setName( strdup( aName->Value() ) );
1058 UCSubItem->setEntry( UCEntry );
1059 UCSubItem->setIOR( ior );
1060 UCSubItem->setReference( "" );
1061 UCSubItem->setValue( valueString );
1064 // adding other attributes
1066 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1068 // if ( UCObject->FindAttribute( anAttr, "AttributeSelectable" ) ) {
1069 // aSelectable = SALOMEDS::AttributeSelectable::_narrow( anAttr );
1070 // UCSubItem->setSelectable( aSelectable->IsSelectable() );
1073 // if ( UCObject->FindAttribute( anAttr, "AttributeExpandable" ) ) {
1074 // anExpandable = SALOMEDS::AttributeExpandable::_narrow( anAttr );
1075 // UCSubItem->setExpandable( anExpandable->IsExpandable() );
1078 if ( UCObject->FindAttribute(anAttr, "AttributeTextColor" ) ) {
1079 aTextColor = SALOMEDS::AttributeTextColor::_narrow( anAttr );
1080 QColor aColor( (int)(aTextColor->TextColor().R),
1081 (int)(aTextColor->TextColor().G),
1082 (int)(aTextColor->TextColor().B) );
1083 UCSubItem->setTextColor( aColor );
1085 // TextHighlightColor
1086 if ( UCObject->FindAttribute( anAttr, "AttributeTextHighlightColor" ) ) {
1087 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow( anAttr );
1088 QColor aColor( (int)(aTextHighlightColor->TextHighlightColor().R),
1089 (int)(aTextHighlightColor->TextHighlightColor().G),
1090 (int)(aTextHighlightColor->TextHighlightColor().B) );
1091 UCSubItem->setTextHighlightColor( aColor );
1094 if ( UCObject->FindAttribute( anAttr, "AttributePixMap" ) ) {
1095 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
1096 if ( aPixmap->HasPixMap() ) {
1097 SALOMEDS::SComponent_var father = UCObject->GetFatherComponent();
1098 if ( father->FindAttribute( anAttr, "AttributeName" ) ) {
1099 SALOMEDS::AttributeName_var aFatherName;
1100 aFatherName = SALOMEDS::AttributeName::_narrow( anAttr );
1101 QAD_ResourceMgr* resMgr = QAD_Desktop::getResourceManager();
1104 if( resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )), msg ) ) {
1105 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )),
1106 tr( aPixmap->GetPixMap() ) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ) );
1107 UCSubItem->setPixmap( 0, icon );
1116 // updating children ...
1117 QMap<QString,SALOMEDS::SObject_var> ucList;
1118 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( UCObject );
1119 if ( !UCIter->_is_nil() ) {
1120 for ( ; UCIter->More(); UCIter->Next() ) {
1121 SALOMEDS::SObject_var UCSubObject = UCIter->Value();
1122 QString UCSubEntry = strdup( UCSubObject->GetID() );
1123 ucList[ UCSubEntry ] = UCSubObject;
1126 // ... 1) delete removed items
1127 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )UCSubItem->firstChild();
1128 while ( childItem ) {
1129 QAD_ObjectBrowserItem* prevItem = childItem;
1130 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
1131 if ( !ucList.contains( prevItem->getEntry() ) ) {
1132 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
1133 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
1134 // myUseCaseMap.remove( prevItem->getEntry() );
1135 removeFromMap( myUseCaseMap, prevItem );
1139 // ... 2) create/update existing
1140 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
1141 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
1142 UpdateUCItem( it.data(), UCSubItem );
1148 Unhighlights all items
1150 void QAD_ObjectBrowser::unHighlightAll()
1152 myListView->clearSelection();
1153 myUseCaseView->clearSelection();
1157 Highlights items which refer to object
1159 void QAD_ObjectBrowser::highlight( const Handle(SALOME_InteractiveObject)& IObject, bool highlight )
1161 QList<QAD_ObjectBrowserItem> List;
1162 if (getItems(IObject, List)) {
1163 for (int i = 0; i < List.count(); i++) {
1164 List.at(i)->setSelected( highlight );
1165 List.at(i)->repaint();
1171 Gets items from Object Browser which refer to object
1173 bool QAD_ObjectBrowser::getItems( const Handle(SALOME_InteractiveObject)& IObject,
1174 QList<QAD_ObjectBrowserItem>& List)
1177 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1178 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1179 for ( int i = 0; i < ilist.count(); i++ )
1180 List.append( ilist.at(i) );
1182 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1183 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1184 for ( int i = 0; i < ilist.count(); i++ )
1185 List.append( ilist.at(i) );
1187 return (List.count() > 0);
1191 Gets items from Object Browser which refer to object
1193 bool QAD_ObjectBrowser::getItems( SALOMEDS::SObject_ptr SO,
1194 QList<QAD_ObjectBrowserItem>& List)
1197 if ( myListViewMap.contains( SO->GetID() ) ) {
1198 ItemList ilist = myListViewMap[ SO->GetID() ];
1199 for ( int i = 0; i < ilist.count(); i++ )
1200 List.append( ilist.at(i) );
1202 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1203 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1204 for ( int i = 0; i < ilist.count(); i++ )
1205 List.append( ilist.at(i) );
1207 return (List.count() > 0);
1211 Gets first item from Object Browser which refers to object (not reference)
1213 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( const Handle(SALOME_InteractiveObject)& IObject )
1215 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1216 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1217 for ( int i = 0; i < ilist.count(); i++ ) {
1218 QString aRef = ilist.at(i)->getReference();
1219 if ( ilist.at(i)->getReference().isEmpty() )
1227 Finds item from Object Browser corresponding to Object, returns 0 if fails
1229 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( SALOMEDS::SObject_ptr SO )
1231 if ( myListViewMap.contains( SO->GetID() ) ) {
1232 ItemList ilist = myListViewMap[ SO->GetID() ];
1233 for ( int i = 0; i < ilist.count(); i++ ) {
1234 QString aRef = ilist.at(i)->getReference();
1235 if ( ilist.at(i)->getReference().isEmpty() )
1244 Gets first item from UseCase Browser which refers to object (not reference)
1246 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( const Handle(SALOME_InteractiveObject)& IObject )
1248 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1249 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1250 for ( int i = 0; i < ilist.count(); i++ ) {
1251 QString aRef = ilist.at(i)->getReference();
1252 if ( ilist.at(i)->getReference().isEmpty() )
1260 Finds item from UseCase Browser corresponding to Object, returns 0 if fails
1262 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( SALOMEDS::SObject_ptr SO )
1264 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1265 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1266 for ( int i = 0; i < ilist.count(); i++ ) {
1267 QString aRef = ilist.at(i)->getReference();
1268 if ( ilist.at(i)->getReference().isEmpty() )
1275 Finds item corresponding to interactive object, returns 0 if fails
1277 void QAD_ObjectBrowser::rename( const Handle(SALOME_InteractiveObject)& IObject, QString newName )
1279 QAD_ObjectBrowserItem* item = getItem( IObject );
1281 item->setName( newName );
1284 item = getUCItem( IObject );
1286 item->setName( newName );
1292 Creates and show specific Popup to this according to current selection (Object Browser)
1294 void QAD_ObjectBrowser::showPopupMenu(QListViewItem* theItem)
1296 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1297 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1298 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1300 if (theItem != NULL && ( Sel->IObjectCount()>0 || ActiveComp.isEmpty() ) ) {
1304 QAD_Tools::checkPopup( myPopup );
1305 if ( myPopup->count()>0 ) {
1306 myPopup->exec( QCursor::pos() );
1314 Creates and show specific Popup to this according to current selection (UseCase Browser)
1316 void QAD_ObjectBrowser::showUseCasePopupMenu(QListViewItem* theItem)
1320 QAD_Tools::checkPopup( myPopup );
1321 if ( myPopup->count() > 0 ) {
1322 myPopup->exec( QCursor::pos() );
1329 Called when current selection was changed (Object Browser)
1331 void QAD_ObjectBrowser::onSelectedItem()
1333 if (currentPage()==myListView)
1334 myUseCaseView->clearSelection();
1337 if ( sender()->inherits("QListView") )
1338 whoIs = (QListView*)sender();
1341 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1342 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1343 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1344 QAD_Application* myApp = QAD_Application::getDesktop()->getActiveApp();
1346 SALOME_ListIO DeltaPos;
1348 SALOME_ListIO DeltaNeg;
1351 QListViewItemIterator it( whoIs );
1352 for ( ; it.current(); ++it ) {
1353 QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)it.current();
1354 QString theEntry = item->getEntry();
1355 QString theName = item->getName();
1356 QString theRef = item->getReference();
1358 if ( !theEntry.isEmpty() ) {
1359 if ( item->isSelected() ) {
1360 bool itemAlreadySelected = false;
1362 SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
1363 for(;It.More();It.Next()) {
1364 Handle(SALOME_InteractiveObject) IO = It.Value();
1365 if ( strcmp ( IO->getEntry(), theEntry ) == 0 ) {
1366 itemAlreadySelected = true;
1371 if (!itemAlreadySelected) {
1372 Handle(SALOME_InteractiveObject) newIO;
1373 SALOMEDS::SObject_var obj = aStudy->FindObjectID( theEntry.latin1() );
1374 if ( !obj->_is_nil() ) {
1375 SALOMEDS::SComponent_var comp = obj->GetFatherComponent();
1376 if ( !comp->_is_nil() ) {
1377 Standard_CString datatype = comp->ComponentDataType();
1378 newIO = new SALOME_InteractiveObject( strdup(theEntry),
1381 newIO->setReference( strdup(theRef) );
1384 newIO = new SALOME_InteractiveObject( strdup(theEntry),
1387 newIO->setReference( strdup(theRef) );
1389 if (!newIO.IsNull()) {
1390 DeltaPos.Append( newIO );
1394 SALOME_ListIteratorOfListIO It1( Sel->StoredIObjects() );
1395 for(;It1.More();It1.Next()) {
1396 Handle(SALOME_InteractiveObject) IO = It1.Value();
1397 if ( strcmp( IO->getEntry(), item->getEntry() ) == 0 ) {
1398 DeltaNeg.Append( IO );
1406 SALOME_ListIteratorOfListIO ItNeg( DeltaNeg );
1407 for(;ItNeg.More();ItNeg.Next()) {
1408 Sel->RemoveIObject( ItNeg.Value() );
1411 SALOME_ListIteratorOfListIO ItPos( DeltaPos );
1412 for(;ItPos.More();ItPos.Next()) {
1413 Sel->AddIObject( ItPos.Value() );
1416 myApp->updateActions();
1420 Called when selection is changed (UseCase Browser)
1422 void QAD_ObjectBrowser::onUseCaseSelectedItem()
1427 Called when item is expanded
1429 void QAD_ObjectBrowser::onExpanded (QListViewItem* item)
1431 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1432 if (!myStudy->_is_nil() && aItem)
1434 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1435 if (!Object->_is_nil())
1437 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1438 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1439 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1440 anAttr->SetOpened(true);
1446 Called when item is collapsed
1448 void QAD_ObjectBrowser::onCollapsed(QListViewItem* item)
1450 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1451 if (!myStudy->_is_nil() && aItem)
1453 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1454 if (!Object->_is_nil())
1456 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1457 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1458 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1459 anAttr->SetOpened(false);
1465 Find and returns value for the object
1466 Warning: object can have several values attributes, search is done in the following order:
1467 [integer], [real], [table of integer], [table of real], [comment]
1469 QString QAD_ObjectBrowser::getValueFromObject( SALOMEDS::SObject_ptr SO )
1471 if ( SO->_is_nil() )
1472 return QString::null;
1473 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1474 if ( !isComponent->_is_nil() )
1475 return QString::null; // no values to show for components
1477 SALOMEDS::GenericAttribute_var anAttr;
1478 SALOMEDS::AttributeInteger_var anInt;
1479 SALOMEDS::AttributeReal_var aReal;
1480 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1481 SALOMEDS::AttributeTableOfReal_var aTableReal;
1482 SALOMEDS::AttributeComment_var aComment;
1485 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1486 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1487 QString val = QString::number( anInt->Value() );
1491 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1492 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1493 QString val = QString::number( aReal->Value() );
1497 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1498 aTableInt = SALOMEDS::AttributeTableOfInteger::_narrow( anAttr );
1499 QString tlt = QString( strdup( aTableInt->GetTitle() ) );
1500 if ( !tlt.isEmpty() )
1502 int nbRows = aTableInt->GetNbRows() ;
1503 int nbCols = aTableInt->GetNbColumns();
1504 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1508 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1509 aTableReal = SALOMEDS::AttributeTableOfReal::_narrow( anAttr );
1510 QString tlt = QString( strdup( aTableReal->GetTitle() ) );
1511 if ( !tlt.isEmpty() )
1513 int nbRows = aTableReal->GetNbRows() ;
1514 int nbCols = aTableReal->GetNbColumns();
1515 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1519 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1520 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1521 QString val = QString( strdup( aComment->Value() ) );
1524 return QString::null;
1528 Shows/hides IAPP sub-tree in ObjectBrowser
1529 Current implementation just udpates browser
1531 void QAD_ObjectBrowser::setShowIAPP( bool show )
1537 Shows/hides info columns: Entry, IOR, Reference
1539 void QAD_ObjectBrowser::setShowInfoColumns( bool show )
1541 bool shown = myListView->header()->isResizeEnabled( 2 );
1543 if ( show != shown ) {
1545 myListView->header()->setResizeEnabled( true, 2 );
1546 myListView->header()->setResizeEnabled( true, 3 );
1547 myListView->header()->setResizeEnabled( true, 4 );
1548 myListView->setColumnWidthMode( 2, QListView::Maximum );
1549 myListView->setColumnWidthMode( 3, QListView::Maximum );
1550 myListView->setColumnWidthMode( 4, QListView::Maximum );
1551 if ( myListView->columnWidth( 2 ) <= 0 )
1552 myListView->header()->resizeSection( 2, 50 );
1553 if ( myListView->columnWidth( 3 ) <= 0 )
1554 myListView->header()->resizeSection( 3, 50 );
1555 if ( myListView->columnWidth( 4 ) <= 0 )
1556 myListView->header()->resizeSection( 4, 50 );
1559 myListView->setColumnWidthMode( 2, QListView::Manual );
1560 myListView->setColumnWidthMode( 3, QListView::Manual );
1561 myListView->setColumnWidthMode( 4, QListView::Manual );
1562 myListView->header()->resizeSection( 2, 0 );
1563 myListView->header()->resizeSection( 3, 0 );
1564 myListView->header()->resizeSection( 4, 0 );
1565 myListView->header()->setResizeEnabled( false, 2 );
1566 myListView->header()->setResizeEnabled( false, 3 );
1567 myListView->header()->setResizeEnabled( false, 4 );
1573 Shows/hides Value column
1575 void QAD_ObjectBrowser::setShowValueColumn( bool show )
1577 bool shown = myListView->header()->isResizeEnabled( 1 );
1579 if ( show != shown ) {
1581 myListView->header()->setResizeEnabled( true, 1 );
1582 myListView->setColumnWidthMode( 1, QListView::Maximum );
1583 if ( myListView->columnWidth( 1 ) <= 0 )
1584 myListView->header()->resizeSection( 1, 50 );
1587 myListView->setColumnWidthMode( 1, QListView::Manual );
1588 myListView->header()->resizeSection( 1, 0 );
1589 myListView->header()->setResizeEnabled( false, 1 );
1595 Sets CHRONO sorting enabled/disabled
1596 Note: when CHRONO sorting is enabled items are sorted by Entry value and column headers
1597 become unclickable to prohibit another sort type;
1598 when CHRONO sorting is disabled column headers become clickable - this allows
1599 to sort data by any column
1601 void QAD_ObjectBrowser::setEnableChronoSort( bool enable )
1604 // if CHRONO sorting is enabled set clickable header disabled ...
1605 myListView->header()->setClickEnabled( false );
1606 // ... and then sort by column 2 - OCAF doc entry
1607 myListView->setSorting( 2, TRUE ) ;
1610 // if CHRONO sorting is enabled set clickable header enabled ...
1611 myListView->header()->setClickEnabled( true );
1612 // and clear sorting by column 2
1613 myListView->setSorting( 10, TRUE );
1615 // myListView->sort( ) ;
1619 Slot, called to edit value
1621 void QAD_ObjectBrowser::onEditAttribute()
1623 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1624 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1625 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1626 if ( myStudy->_is_nil() )
1629 if ( Sel->IObjectCount() == 1 ) {
1630 SALOMEDS::SObject_var SO = myStudy->FindObjectID( Sel->firstIObject()->getEntry() );
1631 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1632 if ( !SO->_is_nil() && isComponent->_is_nil() ) { // no values to show for components
1633 SALOMEDS::GenericAttribute_var anAttr;
1634 SALOMEDS::AttributeInteger_var anInt;
1635 SALOMEDS::AttributeReal_var aReal;
1636 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1637 SALOMEDS::AttributeTableOfReal_var aTableReal;
1638 SALOMEDS::AttributeComment_var aComment;
1642 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1643 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1644 int val = SALOMEGUI_SetValueDlg::getInteger( tr( "SET_VALUE_INT_TLT" ),
1645 tr( "SET_VALUE_INT_LBL" ),
1648 QAD_Application::getDesktop() );
1650 anInt->SetValue( val );
1655 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1656 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1657 double val = SALOMEGUI_SetValueDlg::getDouble( tr( "SET_VALUE_REAL_TLT" ),
1658 tr( "SET_VALUE_REAL_LBL" ),
1661 QAD_Application::getDesktop() );
1663 aReal->SetValue( val );
1666 // if Table of integer
1668 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1669 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1672 SALOMEGUI_TableDlg::ttInt );
1673 bOk = ( dlg->exec() == QDialog::Accepted );
1677 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1678 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1681 SALOMEGUI_TableDlg::ttReal );
1682 bOk = ( dlg->exec() == QDialog::Accepted );
1686 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1687 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1688 QString val = SALOMEGUI_SetValueDlg::getString( tr( "SET_VALUE_COMMENT_TLT" ),
1689 tr( "SET_VALUE_COMMENT_LBL" ),
1692 QAD_Application::getDesktop() );
1694 aComment->SetValue( val );
1705 Returns true if object has editable attrubute :
1706 integer, real, table or comment
1708 bool QAD_ObjectBrowser::hasEditableAttribute( const Handle(SALOME_InteractiveObject)& object )
1710 if ( !myStudy->_is_nil() ) {
1711 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1712 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1713 if ( !comp->_is_nil() || obj->_is_nil() )
1715 QString val = getValueFromObject( obj );
1716 return ( !val.isNull() );
1722 Returns true if object has table attrubute ( integer and/or real )
1724 bool QAD_ObjectBrowser::hasTable( const Handle(SALOME_InteractiveObject)& object )
1726 SALOMEDS::GenericAttribute_var anAttr;
1727 if ( !myStudy->_is_nil() ) {
1728 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1729 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1730 if ( !comp->_is_nil() || obj->_is_nil() )
1732 if ( obj->FindAttribute( anAttr, "AttributeTableOfInteger" ) )
1734 if ( obj->FindAttribute( anAttr, "AttributeTableOfReal" ) )
1741 Slot, called when one of the UseCase Browser menu command is called
1743 void QAD_ObjectBrowser::onUseCasePopupMenu( int action )
1745 if ( myStudy->_is_nil() )
1747 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1748 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1749 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1750 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1751 SALOMEDS::SObject_var Current = UCBuilder->GetCurrentObject();
1753 QList<QListViewItem> ucSelected;
1754 ucSelected.setAutoDelete( false );
1755 getSelectedParents( myUseCaseView, ucSelected );
1757 if ( action == UC_NEW_EMPTY_ID ) {
1758 if ( ucSelected.count() == 1 ) {
1759 if ( isRootItem( ucSelected.at(0) ) )
1760 UCBuilder->SetRootCurrent();
1762 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1763 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1764 myActiveStudy->updateUseCaseBrowser();
1768 if ( action == UC_SET_CURRENT_ID ) {
1769 if ( ucSelected.count() > 0 ) {
1770 if ( isRootItem( ucSelected.at(0) ) )
1771 UCBuilder->SetRootCurrent();
1773 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1775 myActiveStudy->updateUseCaseBrowser( );
1778 if ( action == UC_RENAME_ID ) {
1779 if ( ucSelected.count() == 1 ) {
1780 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( 0 ) );
1781 if ( isRootItem( useCaseItem ) ) {
1782 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), strdup( UCBuilder->GetName() ) );
1783 if ( !name.isEmpty() ) {
1784 bool ok = UCBuilder->SetName( strdup( name.latin1() ) );
1785 myActiveStudy->updateUseCaseBrowser( );
1788 else/* if ( UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) )*/ {
1789 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), strdup( useCaseItem->getName() ) );
1790 if ( !name.isEmpty() ) {
1791 myActiveStudy->renameIObject( Sel->firstIObject(), name );
1797 if ( action == UC_APPEND_ID ) {
1798 if ( Sel->IObjectCount() > 0 ) {
1799 SALOME_ListIO SelIO; SelIO = Sel->StoredIObjects();
1800 SALOME_ListIteratorOfListIO SelIt( SelIO );
1801 for( ; SelIt.More(); SelIt.Next() ) {
1802 SALOMEDS::SObject_var selSO = myStudy->FindObjectID( SelIt.Value()->getEntry() );
1803 if ( !selSO->_is_nil() && strcmp( SelIt.Value()->getEntry(), ( "0:2" ) ) != 0 ) {
1804 UCBuilder->Remove( selSO ); // first remove object for sure ...
1805 UCBuilder->Append( selSO ); // ... and now re-append it
1808 myActiveStudy->updateUseCaseBrowser( true );
1812 if ( action == UC_REMOVE_ID ) {
1814 getSelectedParents( myUseCaseView, ucSelected, true );
1815 for ( int i = 0; i < ucSelected.count(); i++ ) {
1816 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )ucSelected.at( i );
1817 if ( !isRootItem( item ) ) {
1819 SALOMEDS::SObject_var SO = myStudy->FindObjectID( item->getEntry() );
1820 if ( !SO->_is_nil() ) {
1821 UCBuilder->Remove( SO );
1827 Sel->ClearIObjects();
1828 myActiveStudy->updateUseCaseBrowser( true );
1831 if ( action == UC_CLEAR_ID ) {
1832 if ( myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0) {
1833 QAD_ObjectBrowserItem* child = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild()->firstChild();
1835 UCBuilder->Remove( myStudy->FindObjectID( child->getEntry().latin1() ) );
1836 child = ( QAD_ObjectBrowserItem* )( child->nextSibling() );
1838 Sel->ClearIObjects();
1839 myActiveStudy->updateUseCaseBrowser();
1844 Use Case browser buttons slot
1846 void QAD_ObjectBrowser::onUseCaseBtn()
1848 if ( sender() == myNewBtn ) {
1849 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1850 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1851 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1852 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1853 myActiveStudy->updateUseCaseBrowser();
1855 if ( sender() == myAddBtn )
1856 onUseCasePopupMenu( UC_APPEND_ID );
1857 if ( sender() == myDelBtn )
1858 onUseCasePopupMenu( UC_REMOVE_ID );
1859 if ( sender() == myClearBtn )
1860 onUseCasePopupMenu( UC_CLEAR_ID );
1861 if ( sender() == myCurrentBtn )
1862 onUseCasePopupMenu( UC_SET_CURRENT_ID );
1866 Show/remove UseCase Browser
1869 void QAD_ObjectBrowser::showUseCaseBrowser ( bool show )
1871 bool shown = (this->count() > 1);
1877 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
1878 UpdateUseCaseBrowser();
1882 this->removePage(myVBox);
1887 Switch between auto resizing of columns and manual mode
1889 void QAD_ObjectBrowser::autoSizeColumns( bool autosize )
1893 for (int i = 0; i < myListView->header()->count(); i++ )
1894 if (myListView->header()->isResizeEnabled(i))
1895 myListView->setColumnWidthMode(i, QListView::Maximum);
1900 for (int i = 0; i < myListView->header()->count(); i++ )
1901 myListView->setColumnWidthMode(i, QListView::Manual);