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>
62 //VRV: porting on Qt 3.0.5
63 #if QT_VERSION >= 0x030005
66 //VRV: porting on Qt 3.0.5
68 #define UC_NEW_EMPTY_ID 1000000
69 #define UC_NEW_COMP_ID 1000002
70 #define UC_NEW_FULL_ID 1000004
71 #define UC_NEW_COPY_ID 1000006
72 #define UC_APPEND_ID 1000008
73 #define UC_REMOVE_ID 1000010
74 #define UC_RENAME_ID 1000012
75 #define UC_CLEAR_ID 1000014
76 #define UC_SET_CURRENT_ID 1000016
80 static int MYDEBUG = 0;
82 static int MYDEBUG = 0;
87 Small button which updates Object Browser's contents
89 Btn::Btn ( QWidget * parent, const char * name ) : QToolButton( parent, name )
91 connect( this, SIGNAL(clicked()), this, SLOT(onClicked()) );
95 QAD_ObjectBrowser* OB = QAD_Application::getDesktop()->getActiveApp()->getActiveStudy()->getActiveStudyFrame()->getLeftFrame()->getObjectBrowser();
100 Gets selected top-level items (i.e. not including sub-items) [ static ]
102 static void getSelectedParents( QListViewItem* listViewItem, QList<QListViewItem>& itemList )
104 QListViewItem* item = listViewItem->firstChild();
106 if ( item->isSelected() ) {
107 itemList.append( item );
110 getSelectedParents( item, itemList );
112 item = item->nextSibling();
116 Gets selected top-level items (i.e. not including sub-items) [ static ]
118 static void getSelectedParents( QListView* listView, QList<QListViewItem>& itemList, bool ignoreRoot = false )
121 QListViewItem* item = listView->firstChild();
123 if ( item->isSelected() && !ignoreRoot ) {
124 itemList.append( item );
127 getSelectedParents( item, itemList );
129 item = item->nextSibling();
133 Gets top-most parent item [ static ]
135 static QListViewItem* getTopParent( QListViewItem* item )
139 QListViewItem* p = item->parent();
142 while ( p->parent() ) {
148 Returns true if the item is top-level (root)
150 static bool isRootItem( QListViewItem* item )
152 return ( item->listView() && !item->parent() );
157 QAD_ObjectBrowser::QAD_ObjectBrowser( SALOMEDS::Study_var study, QWidget* parent, const char* name, WFlags fl )
158 : QTabWidget( parent, name, fl )
160 myStudy = SALOMEDS::Study::_duplicate( study );
161 myListViewMap.clear();
162 myUseCaseMap.clear();
163 myListView=0; // must be done before setupListView(): setCornerWidget() provoque call to eventFilter
164 myUseCaseView=0; // and test myUseCaseView->viewport() before initialisation
171 QAD_ObjectBrowser::~QAD_ObjectBrowser()
173 if (!myStudy->_is_nil())
174 CORBA::release(myStudy);
178 Configures Object Browser and UseCase Browser.
179 Columns, Selection Mode and Palette.
181 void QAD_ObjectBrowser::setupListView()
183 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
185 this->setTabPosition( QTabWidget::Bottom );
187 /* Reading setting : Columns for Value, OCAF Doc entry, object IOR, OCAF Doc ref entry and Chrono sorting */
188 QString AddColumn = QAD_CONFIG->getSetting( "ObjectBrowser:AddColumn" );
189 QString ValueColumn = QAD_CONFIG->getSetting( "ObjectBrowser:ValueColumn" );
190 QString ShowCHRONO_SORT = QAD_CONFIG->getSetting( "ObjectBrowser:ChronologicalSort" );
191 QString showUseCase = QAD_CONFIG->getSetting("ObjectBrowser:ShowUseCaseBrowser");
192 QString noAutoSizeColumns = QAD_CONFIG->getSetting( "ObjectBrowser:NoAutoSizeColumns" );
194 /* create and setup Object Browser ================================= */
195 myListView = new QListView( this, "Object Browser");
196 myListView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
197 myListView->setMinimumSize( 1, 1 );
198 myListView->setPalette( QAD_Application::getPalette( true ) );
200 /* First two columns = object name and value - always visible */
201 myListView->addColumn( tr( "OBJECT_BROWSER_OBJECT" ) ); /* Adding Object column */
202 myListView->addColumn( tr( "OBJECT_BROWSER_VALUE" ) ); /* Adding Value column */
203 myListView->addColumn( tr( "OBJECT_BROWSER_ENTRY" ) ); /* Adding Doc entry column */
204 myListView->addColumn( tr( "OBJECT_BROWSER_IOR" ) ); /* Adding Object IOR column */
205 myListView->addColumn( tr( "OBJECT_BROWSER_REFENTRY" ) ); /* Adding OCAF Doc ref entry column */
206 myListView->header()->setMovingEnabled( false );
209 myListView->header()->setClickEnabled( TRUE ); /* Enable clicking on the header */
210 myListView->setShowSortIndicator( TRUE ) ; /* Add user arrows to indicate the sort order : LPN */
211 myListView->setRootIsDecorated( TRUE ); /* Enable expand/collapse control for the root item */
212 myListView->setSelectionMode ( QListView::Extended ); /* Enable multiple selection */
213 myListView->setVScrollBarMode( QScrollView::AlwaysOn ); /* Set scrollbars always visible */
214 myListView->setHScrollBarMode( QScrollView::AlwaysOn ); /* ... */
216 myListView->setCornerWidget( new Btn( this ) );
217 /* Connect section */
218 //VRV: porting on Qt 3.0.5
219 #if QT_VERSION < 0x030005
220 connect( myListView, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint&, int ) ),
221 this, SLOT( showPopupMenu( QListViewItem* ) ) );
223 connect( myListView, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
224 this, SLOT( showPopupMenu( QListViewItem* ) ) );
226 //VRV: porting on Qt 3.0.5
228 connect( myListView, SIGNAL( selectionChanged() ),
229 this, SLOT( onSelectedItem() ) );
230 connect( myListView, SIGNAL( expanded( QListViewItem* ) ),
231 this, SLOT( onExpanded( QListViewItem* ) ) );
232 connect( myListView, SIGNAL( collapsed( QListViewItem* ) ),
233 this, SLOT( onCollapsed( QListViewItem* ) ) );
235 /* create and setup UseCase Browser ================================ */
236 myVBox = new QWidget( this );
237 QVBoxLayout* vBoxLayout = new QVBoxLayout( myVBox );
239 myUseCaseView = new QListView( myVBox, "UseCase Browser");
240 myUseCaseView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
241 myUseCaseView->setMinimumSize( 1, 1 );
242 myUseCaseView->setPalette( QAD_Application::getPalette( true ) );
244 /* First column = object name */
245 myUseCaseView->addColumn( tr( "OBJECT_BROWSER_OBJECT" ) );
247 myUseCaseView->header()->setClickEnabled( TRUE ); /* Enable clicking on the header */
248 myUseCaseView->setShowSortIndicator( TRUE ) ; /* Add user arrows to indicate the sort order : LPN */
249 myUseCaseView->setRootIsDecorated( TRUE ); /* Enable expand/collapse control for the root item */
250 myUseCaseView->setSelectionMode ( QListView::Extended ); /* Enable multiple selection */
251 myUseCaseView->setVScrollBarMode( QScrollView::AlwaysOn ); /* Set scrollbars always visible */
252 myUseCaseView->setHScrollBarMode( QScrollView::AlwaysOn ); /* ... */
253 myUseCaseView->header()->setMovingEnabled( false );
254 myUseCaseView->viewport()->setAcceptDrops( true );
255 myUseCaseView->installEventFilter( this );
256 myUseCaseView->viewport()->installEventFilter( this );
257 myUseCaseView->setSorting( -1 ) ;
258 vBoxLayout->addWidget( myUseCaseView );
260 myUseCaseView->setCornerWidget( new Btn( this ) );
262 myNewBtn = new QToolButton( myVBox );
263 myNewBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_NEW") ) );
264 myNewBtn->setAutoRaise( true );
265 QToolTip::add( myNewBtn, tr( "UC_NEW_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_NEW_TIP" ) );
266 myAddBtn = new QToolButton( myVBox );
267 myAddBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_ADD") ) );
268 myAddBtn->setAutoRaise( true );
269 QToolTip::add( myAddBtn, tr( "UC_APPEND_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_APPEND_TIP" ) );
270 myDelBtn = new QToolButton( myVBox );
271 myDelBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_REMOVE") ) );
272 myDelBtn->setAutoRaise( true );
273 QToolTip::add( myDelBtn, tr( "UC_REMOVE_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_REMOVE_TIP" ) );
274 myClearBtn = new QToolButton( myVBox );
275 myClearBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_CLEAR") ) );
276 myClearBtn->setAutoRaise( true );
277 QToolTip::add( myClearBtn, tr( "UC_CLEAR_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_CLEAR_TIP" ) );
278 myCurrentBtn = new QToolButton( myVBox );
279 myCurrentBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_SET_CURRENT") ) );
280 myCurrentBtn->setAutoRaise( true );
281 QToolTip::add( myCurrentBtn, tr( "UC_SET_CURRENT_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_SET_CURRENT_TIP" ) );
283 QHBoxLayout* btnLayout = new QHBoxLayout;
284 btnLayout->setMargin( 3 ); btnLayout->setSpacing( 3 );
285 btnLayout->addWidget( myNewBtn );
286 btnLayout->addStretch();
287 btnLayout->addSpacing( 5 );
288 btnLayout->addStretch();
289 btnLayout->addWidget( myAddBtn );
290 btnLayout->addWidget( myDelBtn );
291 btnLayout->addStretch();
292 btnLayout->addSpacing( 5 );
293 btnLayout->addStretch();
294 btnLayout->addWidget( myClearBtn );
295 btnLayout->addStretch();
296 btnLayout->addSpacing( 5 );
297 btnLayout->addStretch();
298 btnLayout->addWidget( myCurrentBtn );
299 btnLayout->addStretch();
301 vBoxLayout->addLayout( btnLayout );
303 connect( myNewBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
304 connect( myAddBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
305 connect( myDelBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
306 connect( myClearBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
307 connect( myCurrentBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
309 /* Connect section */
310 #if QT_VERSION < 0x030005
311 connect( myUseCaseView, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint&, int ) ),
312 this, SLOT( showPopupMenu( QListViewItem* ) ) );
314 connect( myUseCaseView, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
315 this, SLOT( showPopupMenu( QListViewItem* ) ) );
318 connect( myUseCaseView, SIGNAL( selectionChanged() ),
319 this, SLOT( onSelectedItem() ) );
321 /* add Object Browser and UseCase Browser as pages ================= */
322 this->addTab( myListView, tr( "TLT_OBJECT_BROWSER" ) );
323 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
325 if ( showUseCase != "true")
326 this->removePage(myVBox);
328 setShowInfoColumns( AddColumn == "true" );
329 setShowValueColumn( ValueColumn == "true" );
330 setEnableChronoSort( ShowCHRONO_SORT == "true" );
332 if ( noAutoSizeColumns == "true" )
334 for (int i = 0; i < myListView->header()->count(); i++ )
335 myListView->setColumnWidthMode(i, QListView::Manual);
338 resize( QSize( 100, 400 ) );
345 bool QAD_ObjectBrowser::eventFilter( QObject* o, QEvent* e )
347 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
348 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
350 if ( myStudy->_is_nil() )
351 return QTabWidget::eventFilter( o, e );
353 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
354 if (! myUseCaseView) return QTabWidget::eventFilter( o, e );
355 if (o == myUseCaseView->viewport()) {
356 if ( e->type() == QEvent::MouseButtonPress ) {
357 // Test if clicked on selection and start drag if necessary
358 QMouseEvent* me = ( QMouseEvent* )e;
359 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )( myUseCaseView->itemAt( me->pos() ) );
360 if ( item && item->isSelected() && me->button() == LeftButton) {
361 if ( me->pos().x() > myUseCaseView->header()->sectionPos( myUseCaseView->header()->mapToIndex( 0 ) ) +
362 myUseCaseView->treeStepSize() * ( item->depth() + ( myUseCaseView->rootIsDecorated() ? 1 : 0 ) ) +
363 myUseCaseView->itemMargin() ||
364 me->pos().x() < myUseCaseView->header()->sectionPos( myUseCaseView->header()->mapToIndex( 0 ) ) ) {
365 QStringList entryList;
366 QListViewItemIterator it( myUseCaseView );
368 for ( ; it.current(); ++it ) {
369 QAD_ObjectBrowserItem* selItem = ( QAD_ObjectBrowserItem* )( it.current() );
370 if ( selItem->isSelected() ) {
371 if ( isRootItem( selItem ) ) {
376 entryList.append( selItem->getEntry() );
380 if ( done && !entryList.isEmpty() ) {
381 QTextDrag *d = new QTextDrag( entryList.join("*"), myUseCaseView->viewport() );
388 else if ( e->type() == QEvent::DragMove ) {
389 QDragMoveEvent* dme = ( QDragMoveEvent* )e;
390 if ( dme->source() == myUseCaseView->viewport() ) {
398 else if ( e->type() == QEvent::Drop ) {
399 QDropEvent* de = ( QDropEvent* )e;
401 QAD_ObjectBrowserItem* dropItem = ( QAD_ObjectBrowserItem* )( myUseCaseView->itemAt( de->pos() ) );
402 if ( de->source() == myUseCaseView->viewport() ) {
403 if ( QTextDrag::decode( de, text ) && dropItem && !dropItem->isSelected() ) {
404 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )getTopParent( dropItem );
406 if ( !UCBuilder->_is_nil() ) {
407 UCBuilder->SetRootCurrent();
408 if ( useCaseItem != dropItem ) {
409 SALOMEDS::SObject_var dropObject = myStudy->FindObjectID( dropItem->getEntry() );
410 if ( !dropObject->_is_nil() )
411 UCBuilder->SetCurrentObject( dropObject );
413 QStringList entryList = QStringList::split( "*", text, false );
414 // if Move action then first remove all selected items
415 if ( de->action() == QDropEvent::Move ) {
416 QList<QListViewItem> ucSelected;
417 ucSelected.setAutoDelete( false );
418 getSelectedParents( myUseCaseView, ucSelected );
419 for ( int j = 0; j < entryList.count(); j++ ) {
420 QAD_ObjectBrowserItem* delItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( j ) );
421 QAD_ObjectBrowserItem* ucDelItem = ( QAD_ObjectBrowserItem* )getTopParent( delItem );
422 SALOMEDS::SObject_var delSO = myStudy->FindObjectID( delItem->getEntry() );
423 if ( !delSO->_is_nil() && ucDelItem ) {
424 UCBuilder->Remove( delSO );
428 // then try to append items to destination
429 for ( int i = 0; i < entryList.count(); i++ ) {
430 SALOMEDS::SObject_var SO = myStudy->FindObjectID( entryList[i] );
431 if ( !SO->_is_nil() ) {
432 UCBuilder->Remove( SO );
433 UCBuilder->Append( SO );
436 myActiveStudy->updateUseCaseBrowser();
448 else if ( o == myUseCaseView ) {
449 if ( e->type() == QEvent::KeyPress ) {
450 QKeyEvent* ke = ( QKeyEvent* )e;
451 if ( ke->key() == Key_Delete ) {
452 onUseCasePopupMenu( UC_REMOVE_ID );
457 return QTabWidget::eventFilter( o, e );
462 Returns true if item is collapsed has collapsed children
464 static bool hasCollapsed( QListViewItem* item )
469 bool res = ( item->childCount() && !item->isOpen() );
470 for ( QListViewItem* child = item->firstChild(); !res && child; child = child->nextSibling() )
471 res = hasCollapsed( child );
477 Expands item and all its children
479 static void expand(QListViewItem* item)
484 item->setOpen( true );
486 for ( QListViewItem* child = item->firstChild(); child; child = child->nextSibling() )
493 void QAD_ObjectBrowser::onCreatePopup()
495 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
496 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
497 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
499 bool canExpand = false;
500 /* VSR : Creation of common POPUP menu for Object Browser/Use Case Browser */
501 if ( Sel->IObjectCount() > 0 ) {
506 Desktop->definePopup( theContext, theParent, theObject );
508 Desktop->createPopup( myPopup, theContext, "ObjectBrowser", theObject);
509 if ( !Desktop->getActiveComponent().isEmpty() ) {
510 Desktop->customPopup( myPopup, theContext, "ObjectBrowser", theObject );
512 // VSR:22/01/03 - Command for edit attributes value
513 bool EditValues = QAD_CONFIG->getSetting( "ObjectBrowser:EditValues" ) == "true";
514 if ( EditValues && Sel->IObjectCount() == 1 && hasEditableAttribute(Sel->firstIObject()) ) {
515 if ( myPopup->count() > 0 )
516 myPopup->insertSeparator();
517 myPopup->insertItem( tr( "EDIT_VALUE_CMD" ),
519 SLOT( onEditAttribute() ) );
522 for ( QListViewItemIterator it( currentPage() == myListView ? myListView : myUseCaseView ); it.current() && !canExpand; ++it )
523 canExpand = canExpand || ( it.current()->isSelected() && hasCollapsed( it.current() ) );
526 if ( myPopup->count() > 0 )
527 myPopup->insertSeparator();
528 myPopup->insertItem( tr( "EXPAND_ALL_CMD" ),
530 SLOT( onExpandAll() ) );
535 // No selected item => it's not necessary to create popup
536 //NRI- : Desktop->createPopup( myPopup, "", "ObjectBrowser", "");
538 if ( currentPage() != myListView ) {
539 /* VSR : Creation of POPUP menu for UseCase Browser */
540 QList<QListViewItem> ucSelected;
541 ucSelected.setAutoDelete( false );
542 getSelectedParents( myUseCaseView, ucSelected );
544 if ( myPopup && !myStudy->_is_nil() ) {
545 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
547 bool isOne = ucSelected.count() == 1;
548 bool isRoot = isOne && isRootItem( ucSelected.at( 0 ) );
549 bool manyChildren = myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0;
550 bool isUseCase = isOne &&
551 ( isRoot || UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) );
556 myPopup->insertItem( tr( "EXPAND_ALL_CMD" ),
558 SLOT( onExpandAll() ) );
561 QPopupMenu *UseCasePopup = new QPopupMenu( myPopup );
563 UseCasePopup->insertItem( tr( "UC_NEW_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_NEW_EMPTY_ID );
565 UseCasePopup->insertItem( tr( "UC_SET_CURRENT_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_SET_CURRENT_ID );
567 UseCasePopup->insertItem( tr( "UC_RENAME_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_RENAME_ID );
568 if ( isRoot && manyChildren )
569 UseCasePopup->insertItem( tr( "UC_CLEAR_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_CLEAR_ID );
571 if ( UseCasePopup->count() > 0 ) {
572 if ( myPopup->count() > 0 )
573 myPopup->insertSeparator();
574 myPopup->insertItem( tr( "UC_POPUP" ), UseCasePopup );
584 Called on "Expand all" popup menu command
586 void QAD_ObjectBrowser::onExpandAll()
588 for ( QListViewItemIterator it( currentPage() == myListView ? myListView : myUseCaseView ); it.current(); ++it )
589 if ( it.current()->isSelected() )
590 expand( it.current() );
594 Returns Object Browser list view
596 QListView* QAD_ObjectBrowser::getListView() const
602 Returns UseCase Browser list view
604 QListView* QAD_ObjectBrowser::getUseCaseView() const
606 return myUseCaseView;
610 Adds anItem ( probably a SComponent )
612 QAD_ObjectBrowserItem* QAD_ObjectBrowser::AddItem(QListView* theView,
613 const QString& theName,
614 const QString& theEntry,
615 const QString& theIOR,
617 const QString& theValue,
618 QAD_ObjectBrowserItem* theAfter)
621 QAD_ObjectBrowserItem* last = (QAD_ObjectBrowserItem*)(theView->firstChild());
625 for ( ; last->nextSibling(); last = (QAD_ObjectBrowserItem*)(last->nextSibling()) );
627 QAD_ObjectBrowserItem* anItem = new QAD_ObjectBrowserItem( theView, last );
629 anItem->setType( theType );
630 anItem->setOpen( FALSE );
631 anItem->setName( theName );
632 anItem->setValue( theValue );
633 anItem->setEntry( theEntry );
634 anItem->setIOR( theIOR );
635 anItem->setReference( "" );
641 Adds anItem ( probably a StudyObject )
643 QAD_ObjectBrowserItem* QAD_ObjectBrowser::AddItem(QAD_ObjectBrowserItem* theParentItem,
644 const QString& theName,
645 const QString& theEntry,
646 const QString& theIOR,
648 const QString& theRef,
649 const QString& theValue,
650 QAD_ObjectBrowserItem* theAfter)
653 QAD_ObjectBrowserItem* last = (QAD_ObjectBrowserItem*)(theParentItem->firstChild());
657 for ( ; last->nextSibling(); last = (QAD_ObjectBrowserItem*)(last->nextSibling()) );
659 QAD_ObjectBrowserItem* anItem = new QAD_ObjectBrowserItem(theParentItem, last);
660 anItem->setType( theType );
661 anItem->setOpen( FALSE );
662 anItem->setName( theName );
663 anItem->setValue( theValue );
664 anItem->setEntry( theEntry );
665 anItem->setIOR( theIOR );
666 anItem->setReference( theRef );
672 Updates Object Browsers' item [ protected ]
674 void QAD_ObjectBrowser::Update( SALOMEDS::SObject_ptr SO,
675 QAD_ObjectBrowserItem* theParentItem )
677 if ( myStudy->_is_nil() || SO->_is_nil() || !theParentItem ) {
680 SALOMEDS::ChildIterator_var it = myStudy->NewChildIterator(SO);
682 for (; it->More();it->Next()) {
683 SALOMEDS::SObject_var CSO = it->Value();
684 SALOMEDS::SObject_var RefSO;
686 CORBA::String_var aString(CSO->GetID());
687 QString CSOEntry(aString.in());
688 SALOMEDS::GenericAttribute_var anAttr;
689 SALOMEDS::AttributeName_var aName;
690 SALOMEDS::AttributeComment_var aCmnt;
691 SALOMEDS::AttributeIOR_var anIOR;
692 SALOMEDS::AttributeReal_var aReal;
693 SALOMEDS::AttributeInteger_var anInt;
694 SALOMEDS::AttributeSelectable_var aSelectable;
695 SALOMEDS::AttributeExpandable_var anExpandable;
696 SALOMEDS::AttributeOpened_var anOpened;
697 SALOMEDS::AttributePixMap_var aPixmap;
698 SALOMEDS::AttributeTextColor_var aTextColor;
699 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
701 QAD_ObjectBrowserItem* Item = 0;
704 if ( CSO->ReferencedObject(RefSO) && !RefSO->_is_nil() ) {
706 aString = RefSO->GetID();
707 QString RefSOEntry(aString.in());
708 if (CSO->FindAttribute(anAttr, "AttributeName") || RefSO->FindAttribute(anAttr, "AttributeName")) {
709 aName = SALOMEDS::AttributeName::_narrow(anAttr);
710 if (RefSO->FindAttribute(anAttr, "AttributeIOR")) {
711 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
712 aString = anIOR->Value();
715 valueString = getValueFromObject( RefSO );
716 aString = aName->Value();
717 Item = AddItem(theParentItem,
718 QString(" * ") + aString.in(),
724 myListViewMap[ RefSOEntry ].append( Item );
727 if(MYDEBUG) MESSAGE("QAD_ObjectBrowser::Update : noname item: "<<CSO->GetID());
731 valueString = getValueFromObject( CSO );
733 if (CSO->FindAttribute(anAttr, "AttributeIOR")) {
734 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
735 aString = anIOR->Value();
738 // getting Name and adding new Item
739 if (CSO->FindAttribute(anAttr, "AttributeName") ) {
740 aName = SALOMEDS::AttributeName::_narrow(anAttr);
741 aString = aName->Value();
742 Item = AddItem(theParentItem, aString.in(), CSOEntry, ior, 0, "", valueString);
743 myListViewMap[ CSOEntry ].append( Item );
746 if(MYDEBUG) MESSAGE("QAD_ObjectBrowser::Update : noname item: "<<CSO->GetID());
748 // adding other attributes
751 if ( CSO->FindAttribute(anAttr, "AttributeSelectable") ) {
752 aSelectable = SALOMEDS::AttributeSelectable::_narrow(anAttr);
753 Item->setSelectable(aSelectable->IsSelectable());
756 if ( CSO->FindAttribute(anAttr, "AttributeExpandable") ) {
757 anExpandable = SALOMEDS::AttributeExpandable::_narrow(anAttr);
758 Item->setExpandable(anExpandable->IsExpandable());
761 if ( CSO->FindAttribute(anAttr, "AttributeOpened") ) {
762 anOpened = SALOMEDS::AttributeOpened::_narrow(anAttr);
763 Item->setOpen(anOpened->IsOpened());
766 if ( CSO->FindAttribute(anAttr, "AttributeTextColor") ) {
767 aTextColor = SALOMEDS::AttributeTextColor::_narrow(anAttr);
768 QColor aColor((int)(aTextColor->TextColor().R), (int)(aTextColor->TextColor().G), (int)(aTextColor->TextColor().B)) ;
769 Item->setTextColor(aColor);
771 // TextHighlightColor
772 if ( CSO->FindAttribute(anAttr, "AttributeTextHighlightColor") ) {
773 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow(anAttr);
774 QColor aColor((int)(aTextHighlightColor->TextHighlightColor().R),
775 (int)(aTextHighlightColor->TextHighlightColor().G),
776 (int)(aTextHighlightColor->TextHighlightColor().B)) ;
777 Item->setTextHighlightColor(aColor);
780 if ( CSO->FindAttribute(anAttr, "AttributePixMap") ) {
781 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
782 if ( aPixmap->HasPixMap() ) {
783 SALOMEDS::SComponent_var father = CSO->GetFatherComponent();
784 if (father->FindAttribute(anAttr, "AttributeName") ) {
785 SALOMEDS::AttributeName_var aFatherName;
786 aFatherName = SALOMEDS::AttributeName::_narrow(anAttr);
789 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
791 //if(resMgr->loadResources( QString(aFatherName->Value()) + "GUI", msg )) {
792 if( resMgr->loadResources( QAD_Application::getDesktop()->getComponentName( QString( aFatherName->Value() ) ), msg ) ) {
793 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName( QString( aFatherName->Value() ) ),
794 tr( aPixmap->GetPixMap() ) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ) );
795 //QPixmap icon ( resMgr->loadPixmap( QString(aFatherName->Value()) + "GUI",
796 //tr(aPixmap->GetPixMap()) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ));
797 Item->setPixmap( 0, icon );
805 // if ( theParentItem->isOpen() )
806 // Item->setOpen(TRUE);
814 Updates Object Browser tree and UseCase Browser tree
816 void QAD_ObjectBrowser::Update()
818 int xc = myListView->contentsX();
819 int yc = myListView->contentsY();
820 myListView->viewport()->setUpdatesEnabled( false );
823 myListViewMap.clear();
825 if ( myStudy->_is_nil() ) {
829 QString ShowIAPP = QAD_CONFIG->getSetting("ObjectBrowser:IAPP");
831 /* Updating Object Browser ============================================== */
832 SALOMEDS::SComponentIterator_var itcomp = myStudy->NewComponentIterator();
833 for (; itcomp->More(); itcomp->Next()) {
834 QAD_ObjectBrowserItem* Item = 0;
835 SALOMEDS::SComponent_var SC = itcomp->Value();
836 CORBA::String_var aString = SC->ComponentDataType();
837 QString dataType = aString.in();
839 aString = SC->GetID();
840 QString SCEntry = aString.in();
842 SALOMEDS::GenericAttribute_var anAttr;
843 SALOMEDS::AttributeName_var aName;
844 SALOMEDS::AttributeComment_var aCmnt;
845 SALOMEDS::AttributeIOR_var anIOR;
846 SALOMEDS::AttributeReal_var aReal;
847 SALOMEDS::AttributeInteger_var anInt;
848 SALOMEDS::AttributeSelectable_var aSelectable;
849 SALOMEDS::AttributeExpandable_var anExpandable;
850 SALOMEDS::AttributeOpened_var anOpened;
851 SALOMEDS::AttributePixMap_var aPixmap;
852 SALOMEDS::AttributeTextColor_var aTextColor;
853 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
855 if (SC->FindAttribute(anAttr, "AttributeIOR")) {
856 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
857 aString = anIOR->Value();
861 bool caseIAPP = false;
863 // create data-tree item, corresponding to component (and set name if component has it)
864 if ( dataType.compare("Interface Applicative") == 0 ) {
866 if ( ShowIAPP.compare("true") == 0 ) {
867 if (SC->FindAttribute(anAttr, "AttributeName")) {
868 aName = SALOMEDS::AttributeName::_narrow(anAttr);
869 aString = aName->Value();
870 Item = AddItem (myListView, aString.in(), SCEntry.latin1(), ior, 1, "");
871 myListViewMap[ SCEntry ].append( Item );
874 Item = AddItem (myListView, dataType, SCEntry, ior, 1, "");
875 myListViewMap[ SCEntry ].append( Item );
882 if (SC->FindAttribute(anAttr, "AttributeName")) {
883 aName = SALOMEDS::AttributeName::_narrow(anAttr);
884 aString = aName->Value();
885 Item = AddItem (myListView, aString.in(), SCEntry, ior, 1, "");
886 myListViewMap[ SCEntry ].append( Item );
889 /*In according to CAF - any label (even if it is empty) exist during to whole session.
890 So, if label haven't an "AttributeName" it is means that the label is empty.
891 Therefore follow action couses bug -
892 Item = AddItem (myListView, dataType, SC->GetID(), ior, 1, "");
896 // add other attributes
899 if ( SC->FindAttribute(anAttr, "AttributeSelectable") ) {
900 aSelectable = SALOMEDS::AttributeSelectable::_narrow(anAttr);
901 Item->setSelectable(aSelectable->IsSelectable());
904 if ( SC->FindAttribute(anAttr, "AttributeExpandable") ) {
905 anExpandable = SALOMEDS::AttributeExpandable::_narrow(anAttr);
906 Item->setExpandable(anExpandable->IsExpandable());
909 if ( SC->FindAttribute(anAttr, "AttributeOpened") ) {
910 anOpened = SALOMEDS::AttributeOpened::_narrow(anAttr);
911 Item->setOpen(anOpened->IsOpened());
914 if ( SC->FindAttribute(anAttr, "AttributeTextColor") ) {
915 aTextColor = SALOMEDS::AttributeTextColor::_narrow(anAttr);
916 QColor aColor((int)(aTextColor->TextColor().R), (int)(aTextColor->TextColor().G), (int)(aTextColor->TextColor().B)) ;
917 Item->setTextColor(aColor);
919 // TextHighlightColor
920 if ( SC->FindAttribute(anAttr, "AttributeTextHighlightColor") ) {
921 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow(anAttr);
922 QColor aColor((int)(aTextHighlightColor->TextHighlightColor().R),
923 (int)(aTextHighlightColor->TextHighlightColor().G),
924 (int)(aTextHighlightColor->TextHighlightColor().B)) ;
925 Item->setTextHighlightColor(aColor);
929 if ( SC->FindAttribute(anAttr, "AttributePixMap") ) {
930 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
931 if ( aPixmap->HasPixMap() ) {
933 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
935 if(MYDEBUG) MESSAGE ( " Component " << aName->Value() );
936 if(MYDEBUG) MESSAGE ( " Icon " << aPixmap->GetPixMap() );
937 if(resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString(aName->Value())), msg )) {
938 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString(aName->Value())),
939 tr(aPixmap->GetPixMap()) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ));
940 Item->setPixmap( 0, icon );
946 if ( strcmp(dataType, TypeComponent) == 0 )
949 if ( caseIAPP && ShowIAPP.compare("true") == 0 )
956 myListView->setContentsPos(xc,yc);
958 myListView->viewport()->setUpdatesEnabled( true );
959 myListView->viewport()->repaint( false );
960 /* Updating UseCase Browser ============================================= */
961 if ( this->count() > 1 )
962 UpdateUseCaseBrowser();
966 Removes item with all childs from the map - used to optimize UseCase browser update
968 void removeFromMap( ItemMap& theMap, QAD_ObjectBrowserItem* item )
971 QAD_ObjectBrowserItem* subItem = ( QAD_ObjectBrowserItem* )( item->firstChild() );
973 removeFromMap( theMap, subItem );
974 subItem = ( QAD_ObjectBrowserItem* )( subItem->nextSibling() );
976 if ( theMap.contains( item->getEntry() ) ) {
977 theMap[ item->getEntry() ].removeRef( item );
978 if ( theMap[ item->getEntry() ].isEmpty() ) {
979 theMap.remove( item->getEntry() );
986 Updates only UseCase Browser
988 void QAD_ObjectBrowser::UpdateUseCaseBrowser() {
989 // myUseCaseView->clear(); myUseCaseMap.clear();
990 if ( myStudy->_is_nil() || this->count()<2 ) {
993 myUseCaseView->blockSignals( true );
994 // myUseCaseView->setUpdatesEnabled( false );
996 QAD_ObjectBrowserItem* root = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild();
997 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
998 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
999 CORBA::String_var aString = UCBuilder->GetName();
1000 QString UCName = aString.in();
1001 if ( UCName.isEmpty() )
1002 UCName = QString( tr( "Root" ) );
1003 // creating root item if is not yet created
1005 root = AddItem( myUseCaseView, UCName, "0:2", "", 1, "" );
1006 myUseCaseMap[ "0:2" ].append( root );
1009 root->setName( UCName );
1010 // setting it current if necessary
1011 root->setCurrent( SOCurrent->_is_nil() || !strcmp( SOCurrent->GetID(), "0:2" ) );
1012 // updating list view...
1013 QMap<QString,SALOMEDS::SObject_var> ucList;
1014 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( SALOMEDS::SObject::_nil() );
1015 if ( !UCIter->_is_nil() ) {
1016 for ( ; UCIter->More(); UCIter->Next() ) {
1017 SALOMEDS::SObject_var UCObject = UCIter->Value();
1018 aString = UCObject->GetID();
1019 QString UCEntry = aString.in();
1020 ucList[ UCEntry ] = UCObject;
1023 // ... 1) delete removed items
1024 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )root->firstChild();
1025 while ( childItem ) {
1026 QAD_ObjectBrowserItem* prevItem = childItem;
1027 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
1028 if ( !ucList.contains( prevItem->getEntry() ) ) {
1029 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
1030 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
1031 // myUseCaseMap.remove( prevItem->getEntry() );
1032 removeFromMap( myUseCaseMap, prevItem );
1036 // ... 2) create/update existing
1037 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
1038 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
1039 UpdateUCItem( it.data(), root );
1041 myUseCaseView->blockSignals( false );
1042 // myUseCaseView->setUpdatesEnabled( true );
1043 // myUseCaseView->update();
1044 // UCItem->setOpen( true );
1048 Updates UseCase Browser's item
1050 void QAD_ObjectBrowser::UpdateUCItem( SALOMEDS::SObject_var UCObject, QAD_ObjectBrowserItem* UCItem )
1052 if ( myStudy->_is_nil() || !UCItem )
1055 /* Creating SObjects item */
1056 SALOMEDS::SObject_var RefSO;
1057 SALOMEDS::GenericAttribute_var anAttr;
1058 SALOMEDS::AttributeName_var aName;
1059 SALOMEDS::AttributeIOR_var anIOR;
1060 SALOMEDS::AttributeSelectable_var aSelectable;
1061 SALOMEDS::AttributeExpandable_var anExpandable;
1062 SALOMEDS::AttributePixMap_var aPixmap;
1063 SALOMEDS::AttributeTextColor_var aTextColor;
1064 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
1065 QString valueString;
1067 CORBA::String_var aString = UCObject->GetID();
1068 QString UCEntry = aString.in();
1070 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1071 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
1072 bool isUseCase = UCBuilder->IsUseCase( UCObject );
1074 QAD_ObjectBrowserItem* UCSubItem = 0;
1075 if ( myUseCaseMap.contains( UCEntry ) && myUseCaseMap[ UCEntry ].count() > 0 )
1076 UCSubItem = myUseCaseMap[ UCEntry ].first();
1078 if ( UCObject->ReferencedObject( RefSO ) && !RefSO->_is_nil() ) {
1079 aString = RefSO->GetID();
1080 QString RefSOEntry = aString.in();
1081 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) || RefSO->FindAttribute( anAttr, "AttributeName" ) ) {
1082 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1083 if ( RefSO->FindAttribute( anAttr, "AttributeIOR" ) ) {
1084 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1085 aString = anIOR->Value();
1088 valueString = getValueFromObject( RefSO );
1089 aString = aName->Value();
1091 UCSubItem = AddItem( UCItem,
1092 QString( " * " ) + aString.in(),
1098 myUseCaseMap[ RefSOEntry ].append( UCSubItem );
1101 UCSubItem->setName( QString( " * " ) + aString.in() );
1102 UCSubItem->setEntry( RefSOEntry );
1103 UCSubItem->setIOR( ior );
1104 UCSubItem->setReference( UCEntry );
1105 UCSubItem->setValue( valueString );
1107 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1112 valueString = getValueFromObject( UCObject );
1114 if ( UCObject->FindAttribute( anAttr, "AttributeIOR" ) ) {
1115 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1116 aString = anIOR->Value();
1119 // getting Name and adding new Item
1120 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) ) {
1121 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1122 aString = aName->Value();
1124 UCSubItem = AddItem( UCItem, aString.in(), UCEntry, ior, isUseCase ? 1 : 0, "", valueString );
1125 myUseCaseMap[ UCEntry ].append( UCSubItem );
1128 UCSubItem->setName( aString.in() );
1129 UCSubItem->setEntry( UCEntry );
1130 UCSubItem->setIOR( ior );
1131 UCSubItem->setReference( "" );
1132 UCSubItem->setValue( valueString );
1135 // adding other attributes
1137 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1139 // if ( UCObject->FindAttribute( anAttr, "AttributeSelectable" ) ) {
1140 // aSelectable = SALOMEDS::AttributeSelectable::_narrow( anAttr );
1141 // UCSubItem->setSelectable( aSelectable->IsSelectable() );
1144 // if ( UCObject->FindAttribute( anAttr, "AttributeExpandable" ) ) {
1145 // anExpandable = SALOMEDS::AttributeExpandable::_narrow( anAttr );
1146 // UCSubItem->setExpandable( anExpandable->IsExpandable() );
1149 if ( UCObject->FindAttribute(anAttr, "AttributeTextColor" ) ) {
1150 aTextColor = SALOMEDS::AttributeTextColor::_narrow( anAttr );
1151 QColor aColor( (int)(aTextColor->TextColor().R),
1152 (int)(aTextColor->TextColor().G),
1153 (int)(aTextColor->TextColor().B) );
1154 UCSubItem->setTextColor( aColor );
1156 // TextHighlightColor
1157 if ( UCObject->FindAttribute( anAttr, "AttributeTextHighlightColor" ) ) {
1158 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow( anAttr );
1159 QColor aColor( (int)(aTextHighlightColor->TextHighlightColor().R),
1160 (int)(aTextHighlightColor->TextHighlightColor().G),
1161 (int)(aTextHighlightColor->TextHighlightColor().B) );
1162 UCSubItem->setTextHighlightColor( aColor );
1165 if ( UCObject->FindAttribute( anAttr, "AttributePixMap" ) ) {
1166 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
1167 if ( aPixmap->HasPixMap() ) {
1168 SALOMEDS::SComponent_var father = UCObject->GetFatherComponent();
1169 if ( father->FindAttribute( anAttr, "AttributeName" ) ) {
1170 SALOMEDS::AttributeName_var aFatherName;
1171 aFatherName = SALOMEDS::AttributeName::_narrow( anAttr );
1172 QAD_ResourceMgr* resMgr = QAD_Desktop::getResourceManager();
1175 if( resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )), msg ) ) {
1176 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )),
1177 tr( aPixmap->GetPixMap() ) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ) );
1178 UCSubItem->setPixmap( 0, icon );
1187 // updating children ...
1188 QMap<QString,SALOMEDS::SObject_var> ucList;
1189 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( UCObject );
1190 if ( !UCIter->_is_nil() ) {
1191 for ( ; UCIter->More(); UCIter->Next() ) {
1192 SALOMEDS::SObject_var UCSubObject = UCIter->Value();
1193 aString = UCSubObject->GetID();
1194 QString UCSubEntry = aString.in();
1195 ucList[ UCSubEntry ] = UCSubObject;
1198 // ... 1) delete removed items
1199 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )UCSubItem->firstChild();
1200 while ( childItem ) {
1201 QAD_ObjectBrowserItem* prevItem = childItem;
1202 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
1203 if ( !ucList.contains( prevItem->getEntry() ) ) {
1204 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
1205 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
1206 // myUseCaseMap.remove( prevItem->getEntry() );
1207 removeFromMap( myUseCaseMap, prevItem );
1211 // ... 2) create/update existing
1212 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
1213 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
1214 UpdateUCItem( it.data(), UCSubItem );
1220 Unhighlights all items
1222 void QAD_ObjectBrowser::unHighlightAll()
1224 myListView->clearSelection();
1225 myUseCaseView->clearSelection();
1229 Highlights items which refer to object
1231 void QAD_ObjectBrowser::highlight( const Handle(SALOME_InteractiveObject)& IObject, bool highlight )
1233 QList<QAD_ObjectBrowserItem> List;
1234 if (getItems(IObject, List)) {
1235 for (int i = 0; i < List.count(); i++) {
1236 List.at(i)->setSelected( highlight );
1237 List.at(i)->repaint();
1243 Gets items from Object Browser which refer to object
1245 bool QAD_ObjectBrowser::getItems( const Handle(SALOME_InteractiveObject)& IObject,
1246 QList<QAD_ObjectBrowserItem>& List)
1249 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1250 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1251 for ( int i = 0; i < ilist.count(); i++ )
1252 List.append( ilist.at(i) );
1254 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1255 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1256 for ( int i = 0; i < ilist.count(); i++ )
1257 List.append( ilist.at(i) );
1259 return (List.count() > 0);
1263 Gets items from Object Browser which refer to object
1265 bool QAD_ObjectBrowser::getItems( SALOMEDS::SObject_ptr SO,
1266 QList<QAD_ObjectBrowserItem>& List)
1269 if ( myListViewMap.contains( SO->GetID() ) ) {
1270 ItemList ilist = myListViewMap[ SO->GetID() ];
1271 for ( int i = 0; i < ilist.count(); i++ )
1272 List.append( ilist.at(i) );
1274 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1275 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1276 for ( int i = 0; i < ilist.count(); i++ )
1277 List.append( ilist.at(i) );
1279 return (List.count() > 0);
1283 Gets first item from Object Browser which refers to object (not reference)
1285 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( const Handle(SALOME_InteractiveObject)& IObject )
1287 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1288 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1289 for ( int i = 0; i < ilist.count(); i++ ) {
1290 QString aRef = ilist.at(i)->getReference();
1291 if ( ilist.at(i)->getReference().isEmpty() )
1299 Finds item from Object Browser corresponding to Object, returns 0 if fails
1301 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( SALOMEDS::SObject_ptr SO )
1303 if ( myListViewMap.contains( SO->GetID() ) ) {
1304 ItemList ilist = myListViewMap[ SO->GetID() ];
1305 for ( int i = 0; i < ilist.count(); i++ ) {
1306 QString aRef = ilist.at(i)->getReference();
1307 if ( ilist.at(i)->getReference().isEmpty() )
1316 Gets first item from UseCase Browser which refers to object (not reference)
1318 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( const Handle(SALOME_InteractiveObject)& IObject )
1320 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1321 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1322 for ( int i = 0; i < ilist.count(); i++ ) {
1323 QString aRef = ilist.at(i)->getReference();
1324 if ( ilist.at(i)->getReference().isEmpty() )
1332 Finds item from UseCase Browser corresponding to Object, returns 0 if fails
1334 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( SALOMEDS::SObject_ptr SO )
1336 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1337 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1338 for ( int i = 0; i < ilist.count(); i++ ) {
1339 QString aRef = ilist.at(i)->getReference();
1340 if ( ilist.at(i)->getReference().isEmpty() )
1347 Finds item corresponding to interactive object, returns 0 if fails
1349 void QAD_ObjectBrowser::rename( const Handle(SALOME_InteractiveObject)& IObject, QString newName )
1351 QAD_ObjectBrowserItem* item = getItem( IObject );
1353 item->setName( newName );
1356 item = getUCItem( IObject );
1358 item->setName( newName );
1364 Creates and show specific Popup to this according to current selection (Object Browser)
1366 void QAD_ObjectBrowser::showPopupMenu(QListViewItem* theItem)
1368 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1369 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1370 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1372 if (theItem != NULL && ( Sel->IObjectCount()>0 || ActiveComp.isEmpty() ) ) {
1374 // PAL5618: if IO is presented by several items, assure that the selected IO
1375 // is presented exactly by theItem: difference is in reference
1376 QAD_ObjectBrowserItem *item = (QAD_ObjectBrowserItem *) theItem;
1377 QString theEntry = item->getEntry();
1378 const SALOME_ListIO& SelIO = Sel->StoredIObjects();
1379 for ( SALOME_ListIteratorOfListIO SelIt( SelIO ); SelIt.More(); SelIt.Next() ) {
1380 const Handle(SALOME_InteractiveObject)& IO = SelIt.Value();
1381 if ( strcmp ( IO->getEntry(), theEntry ) == 0 )
1382 IO->setReference( item->getReference() );
1388 QAD_Tools::checkPopup( myPopup );
1389 if ( myPopup->count()>0 ) {
1390 myPopup->exec( QCursor::pos() );
1398 Creates and show specific Popup to this according to current selection (UseCase Browser)
1400 void QAD_ObjectBrowser::showUseCasePopupMenu(QListViewItem* theItem)
1404 QAD_Tools::checkPopup( myPopup );
1405 if ( myPopup->count() > 0 ) {
1406 myPopup->exec( QCursor::pos() );
1413 Called when current selection was changed (Object Browser)
1415 void QAD_ObjectBrowser::onSelectedItem()
1417 if (currentPage()==myListView)
1418 myUseCaseView->clearSelection();
1421 if ( sender()->inherits("QListView") )
1422 whoIs = (QListView*)sender();
1425 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1426 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1427 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1428 QAD_Application* myApp = QAD_Application::getDesktop()->getActiveApp();
1430 SALOME_ListIO DeltaPos;
1432 SALOME_ListIO DeltaNeg;
1435 typedef QMap<QString, SALOME_InteractiveObject*> SelMap;
1437 SelMap currMap, allMap;
1438 for( SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() ); It.More(); It.Next() )
1439 currMap.insert( It.Value()->getEntry(), It.Value().operator->() );
1441 QListViewItemIterator it( whoIs );
1442 for ( ; it.current(); ++it ) {
1443 QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)it.current();
1444 QString theEntry = item->getEntry();
1445 QString theName = item->getName();
1446 QString theRef = item->getReference();
1448 if ( !theEntry.isEmpty() ) {
1449 if ( item->isSelected() ) {
1450 allMap.insert( theEntry, 0 );
1452 if ( !currMap.contains( theEntry ) ) {
1453 Handle(SALOME_InteractiveObject) newIO;
1454 SALOMEDS::SObject_var obj = aStudy->FindObjectID( theEntry.latin1() );
1455 if ( !obj->_is_nil() ) {
1456 SALOMEDS::SComponent_var comp = obj->GetFatherComponent();
1457 if ( !comp->_is_nil() ) {
1458 CORBA::String_var datatype(comp->ComponentDataType());
1459 newIO = new SALOME_InteractiveObject( theEntry.latin1(),
1462 newIO->setReference( theRef.latin1() );
1465 newIO = new SALOME_InteractiveObject( theEntry.latin1(),
1468 newIO->setReference( theRef.latin1() );
1470 if (!newIO.IsNull()) {
1471 DeltaPos.Append( newIO );
1474 } else if ( currMap.contains( theEntry ) )
1475 DeltaNeg.Append( currMap[theEntry] );
1479 SALOME_ListIteratorOfListIO ItNeg( DeltaNeg );
1480 for(;ItNeg.More();ItNeg.Next()) {
1481 Sel->RemoveIObject( ItNeg.Value() );
1484 SALOME_ListIteratorOfListIO ItPos( DeltaPos );
1485 for(;ItPos.More();ItPos.Next()) {
1486 Sel->AddIObject( ItPos.Value() );
1489 for ( SelMap::iterator it = currMap.begin(); it != currMap.end(); ++it )
1490 if ( !allMap.contains( it.key() ) )
1491 Sel->RemoveIObject( it.data() );
1494 myApp->updateActions();
1498 Called when selection is changed (UseCase Browser)
1500 void QAD_ObjectBrowser::onUseCaseSelectedItem()
1505 Called when item is expanded
1507 void QAD_ObjectBrowser::onExpanded (QListViewItem* item)
1509 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1510 if (!myStudy->_is_nil() && aItem)
1512 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1513 if (!Object->_is_nil())
1515 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1516 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1517 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1518 anAttr->SetOpened(true);
1524 Called when item is collapsed
1526 void QAD_ObjectBrowser::onCollapsed(QListViewItem* item)
1528 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1529 if (!myStudy->_is_nil() && aItem)
1531 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1532 if (!Object->_is_nil())
1534 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1535 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1536 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1537 anAttr->SetOpened(false);
1543 Find and returns value for the object
1544 Warning: object can have several values attributes, search is done in the following order:
1545 [integer], [real], [table of integer], [table of real], [comment]
1547 QString QAD_ObjectBrowser::getValueFromObject( SALOMEDS::SObject_ptr SO )
1549 if ( SO->_is_nil() )
1550 return QString::null;
1551 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1552 if ( !isComponent->_is_nil() )
1553 return QString::null; // no values to show for components
1555 SALOMEDS::GenericAttribute_var anAttr;
1556 SALOMEDS::AttributeInteger_var anInt;
1557 SALOMEDS::AttributeReal_var aReal;
1558 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1559 SALOMEDS::AttributeTableOfReal_var aTableReal;
1560 SALOMEDS::AttributeComment_var aComment;
1561 CORBA::String_var aString;
1564 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1565 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1566 QString val = QString::number( anInt->Value() );
1570 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1571 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1572 QString val = QString::number( aReal->Value() );
1576 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1577 aTableInt = SALOMEDS::AttributeTableOfInteger::_narrow( anAttr );
1578 aString = aTableInt->GetTitle();
1579 QString tlt( aString.in() );
1580 if ( !tlt.isEmpty() )
1582 int nbRows = aTableInt->GetNbRows() ;
1583 int nbCols = aTableInt->GetNbColumns();
1584 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1588 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1589 aTableReal = SALOMEDS::AttributeTableOfReal::_narrow( anAttr );
1590 aString = aTableReal->GetTitle();
1591 QString tlt( aString.in() );
1592 if ( !tlt.isEmpty() )
1594 int nbRows = aTableReal->GetNbRows() ;
1595 int nbCols = aTableReal->GetNbColumns();
1596 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1600 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1601 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1602 aString = aComment->Value();
1603 QString val = QString( aString.in() );
1606 return QString::null;
1610 Shows/hides IAPP sub-tree in ObjectBrowser
1611 Current implementation just udpates browser
1613 void QAD_ObjectBrowser::setShowIAPP( bool show )
1619 Shows/hides info columns: Entry, IOR, Reference
1621 void QAD_ObjectBrowser::setShowInfoColumns( bool show )
1623 bool shown = myListView->header()->isResizeEnabled( 2 );
1625 if ( show != shown ) {
1627 myListView->header()->setResizeEnabled( true, 2 );
1628 myListView->header()->setResizeEnabled( true, 3 );
1629 myListView->header()->setResizeEnabled( true, 4 );
1630 myListView->setColumnWidthMode( 2, QListView::Maximum );
1631 myListView->setColumnWidthMode( 3, QListView::Maximum );
1632 myListView->setColumnWidthMode( 4, QListView::Maximum );
1633 if ( myListView->columnWidth( 2 ) <= 0 )
1634 myListView->header()->resizeSection( 2, 50 );
1635 if ( myListView->columnWidth( 3 ) <= 0 )
1636 myListView->header()->resizeSection( 3, 50 );
1637 if ( myListView->columnWidth( 4 ) <= 0 )
1638 myListView->header()->resizeSection( 4, 50 );
1641 myListView->setColumnWidthMode( 2, QListView::Manual );
1642 myListView->setColumnWidthMode( 3, QListView::Manual );
1643 myListView->setColumnWidthMode( 4, QListView::Manual );
1644 myListView->header()->resizeSection( 2, 0 );
1645 myListView->header()->resizeSection( 3, 0 );
1646 myListView->header()->resizeSection( 4, 0 );
1647 myListView->header()->setResizeEnabled( false, 2 );
1648 myListView->header()->setResizeEnabled( false, 3 );
1649 myListView->header()->setResizeEnabled( false, 4 );
1655 Shows/hides Value column
1657 void QAD_ObjectBrowser::setShowValueColumn( bool show )
1659 bool shown = myListView->header()->isResizeEnabled( 1 );
1661 if ( show != shown ) {
1663 myListView->header()->setResizeEnabled( true, 1 );
1664 myListView->setColumnWidthMode( 1, QListView::Maximum );
1665 if ( myListView->columnWidth( 1 ) <= 0 )
1666 myListView->header()->resizeSection( 1, 50 );
1669 myListView->setColumnWidthMode( 1, QListView::Manual );
1670 myListView->header()->resizeSection( 1, 0 );
1671 myListView->header()->setResizeEnabled( false, 1 );
1677 Sets CHRONO sorting enabled/disabled
1678 Note: when CHRONO sorting is enabled items are sorted by Entry value and column headers
1679 become unclickable to prohibit another sort type;
1680 when CHRONO sorting is disabled column headers become clickable - this allows
1681 to sort data by any column
1683 void QAD_ObjectBrowser::setEnableChronoSort( bool enable )
1686 // if CHRONO sorting is enabled set clickable header disabled ...
1687 myListView->header()->setClickEnabled( false );
1688 // ... and then sort by column 2 - OCAF doc entry
1689 myListView->setSorting( 2, TRUE ) ;
1692 // if CHRONO sorting is enabled set clickable header enabled ...
1693 myListView->header()->setClickEnabled( true );
1694 // and clear sorting by column 2
1695 myListView->setSorting( 10, TRUE );
1697 // myListView->sort( ) ;
1701 Slot, called to edit value
1703 void QAD_ObjectBrowser::onEditAttribute()
1705 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1706 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1707 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1708 if ( myStudy->_is_nil() )
1711 if ( Sel->IObjectCount() == 1 ) {
1712 SALOMEDS::SObject_var SO = myStudy->FindObjectID( Sel->firstIObject()->getEntry() );
1713 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1714 if ( !SO->_is_nil() && isComponent->_is_nil() ) { // no values to show for components
1715 SALOMEDS::GenericAttribute_var anAttr;
1716 SALOMEDS::AttributeInteger_var anInt;
1717 SALOMEDS::AttributeReal_var aReal;
1718 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1719 SALOMEDS::AttributeTableOfReal_var aTableReal;
1720 SALOMEDS::AttributeComment_var aComment;
1724 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1725 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1726 int val = SALOMEGUI_SetValueDlg::getInteger( tr( "SET_VALUE_INT_TLT" ),
1727 tr( "SET_VALUE_INT_LBL" ),
1730 QAD_Application::getDesktop() );
1732 anInt->SetValue( val );
1737 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1738 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1739 double val = SALOMEGUI_SetValueDlg::getDouble( tr( "SET_VALUE_REAL_TLT" ),
1740 tr( "SET_VALUE_REAL_LBL" ),
1743 QAD_Application::getDesktop() );
1745 aReal->SetValue( val );
1748 // if Table of integer
1750 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1751 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1754 SALOMEGUI_TableDlg::ttInt );
1755 bOk = ( dlg->exec() == QDialog::Accepted );
1759 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1760 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1763 SALOMEGUI_TableDlg::ttReal );
1764 bOk = ( dlg->exec() == QDialog::Accepted );
1768 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1769 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1770 QString val = SALOMEGUI_SetValueDlg::getString( tr( "SET_VALUE_COMMENT_TLT" ),
1771 tr( "SET_VALUE_COMMENT_LBL" ),
1774 QAD_Application::getDesktop() );
1776 aComment->SetValue( val );
1787 Returns true if object has editable attrubute :
1788 integer, real, table or comment
1790 bool QAD_ObjectBrowser::hasEditableAttribute( const Handle(SALOME_InteractiveObject)& object )
1792 if ( !myStudy->_is_nil() ) {
1793 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1794 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1795 if ( !comp->_is_nil() || obj->_is_nil() )
1797 QString val = getValueFromObject( obj );
1798 return ( !val.isNull() );
1804 Returns true if object has table attrubute ( integer and/or real )
1806 bool QAD_ObjectBrowser::hasTable( const Handle(SALOME_InteractiveObject)& object )
1808 SALOMEDS::GenericAttribute_var anAttr;
1809 if ( !myStudy->_is_nil() ) {
1810 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1811 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1812 if ( !comp->_is_nil() || obj->_is_nil() )
1814 if ( obj->FindAttribute( anAttr, "AttributeTableOfInteger" ) )
1816 if ( obj->FindAttribute( anAttr, "AttributeTableOfReal" ) )
1823 Slot, called when one of the UseCase Browser menu command is called
1825 void QAD_ObjectBrowser::onUseCasePopupMenu( int action )
1827 if ( myStudy->_is_nil() )
1830 // Check if the study is locked
1831 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1832 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1833 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1834 if ( aStudy->GetProperties()->IsLocked() )
1836 QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(),
1837 QObject::tr("WRN_WARNING"),
1838 QObject::tr("WRN_STUDY_LOCKED"),
1839 QObject::tr("BUT_OK") );
1843 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1844 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1845 SALOMEDS::SObject_var Current = UCBuilder->GetCurrentObject();
1846 CORBA::String_var aString;
1848 QList<QListViewItem> ucSelected;
1849 ucSelected.setAutoDelete( false );
1850 getSelectedParents( myUseCaseView, ucSelected );
1852 if ( action == UC_NEW_EMPTY_ID ) {
1853 if ( ucSelected.count() == 1 ) {
1854 if ( isRootItem( ucSelected.at(0) ) )
1855 UCBuilder->SetRootCurrent();
1857 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1858 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1859 myActiveStudy->updateUseCaseBrowser();
1863 if ( action == UC_SET_CURRENT_ID ) {
1864 if ( ucSelected.count() > 0 ) {
1865 if ( isRootItem( ucSelected.at(0) ) )
1866 UCBuilder->SetRootCurrent();
1868 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1870 myActiveStudy->updateUseCaseBrowser( );
1873 if ( action == UC_RENAME_ID ) {
1874 if ( ucSelected.count() == 1 ) {
1875 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( 0 ) );
1876 aString = UCBuilder->GetName();
1877 if ( isRootItem( useCaseItem ) ) {
1878 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), aString.in() );
1879 if ( !name.isEmpty() ) {
1880 UCBuilder->SetName( name.latin1() );
1881 myActiveStudy->updateUseCaseBrowser( );
1884 else/* if ( UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) )*/ {
1885 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), aString.in() );
1886 if ( !name.isEmpty() ) {
1887 myActiveStudy->renameIObject( Sel->firstIObject(), name );
1893 if ( action == UC_APPEND_ID ) {
1894 if ( Sel->IObjectCount() > 0 ) {
1895 SALOME_ListIO SelIO; SelIO = Sel->StoredIObjects();
1896 SALOME_ListIteratorOfListIO SelIt( SelIO );
1897 for( ; SelIt.More(); SelIt.Next() ) {
1898 SALOMEDS::SObject_var selSO = myStudy->FindObjectID( SelIt.Value()->getEntry() );
1899 if ( !selSO->_is_nil() && strcmp( SelIt.Value()->getEntry(), ( "0:2" ) ) != 0 ) {
1900 UCBuilder->Remove( selSO ); // first remove object for sure ...
1901 UCBuilder->Append( selSO ); // ... and now re-append it
1904 myActiveStudy->updateUseCaseBrowser( true );
1908 if ( action == UC_REMOVE_ID ) {
1910 getSelectedParents( myUseCaseView, ucSelected, true );
1911 for ( int i = 0; i < ucSelected.count(); i++ ) {
1912 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )ucSelected.at( i );
1913 if ( !isRootItem( item ) ) {
1915 SALOMEDS::SObject_var SO = myStudy->FindObjectID( item->getEntry() );
1916 if ( !SO->_is_nil() ) {
1917 UCBuilder->Remove( SO );
1923 Sel->ClearIObjects();
1924 myActiveStudy->updateUseCaseBrowser( true );
1927 if ( action == UC_CLEAR_ID ) {
1928 if ( myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0) {
1929 QAD_ObjectBrowserItem* child = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild()->firstChild();
1931 UCBuilder->Remove( myStudy->FindObjectID( child->getEntry().latin1() ) );
1932 child = ( QAD_ObjectBrowserItem* )( child->nextSibling() );
1934 Sel->ClearIObjects();
1935 myActiveStudy->updateUseCaseBrowser();
1940 Use Case browser buttons slot
1942 void QAD_ObjectBrowser::onUseCaseBtn()
1944 // Check if the study is locked
1945 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1946 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1947 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1948 if ( aStudy->GetProperties()->IsLocked() )
1950 QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(),
1951 QObject::tr("WRN_WARNING"),
1952 QObject::tr("WRN_STUDY_LOCKED"),
1953 QObject::tr("BUT_OK") );
1957 if ( sender() == myNewBtn ) {
1958 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1959 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1960 myActiveStudy->updateUseCaseBrowser();
1962 if ( sender() == myAddBtn )
1963 onUseCasePopupMenu( UC_APPEND_ID );
1964 if ( sender() == myDelBtn )
1965 onUseCasePopupMenu( UC_REMOVE_ID );
1966 if ( sender() == myClearBtn )
1967 onUseCasePopupMenu( UC_CLEAR_ID );
1968 if ( sender() == myCurrentBtn )
1969 onUseCasePopupMenu( UC_SET_CURRENT_ID );
1973 Show/remove UseCase Browser
1976 void QAD_ObjectBrowser::showUseCaseBrowser ( bool show )
1978 bool shown = (this->count() > 1);
1984 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
1985 UpdateUseCaseBrowser();
1989 this->removePage(myVBox);
1994 Switch between auto resizing of columns and manual mode
1996 void QAD_ObjectBrowser::autoSizeColumns( bool autosize )
2000 for (int i = 0; i < myListView->header()->count(); i++ )
2001 if (myListView->header()->isResizeEnabled(i))
2002 myListView->setColumnWidthMode(i, QListView::Maximum);
2007 for (int i = 0; i < myListView->header()->count(); i++ )
2008 myListView->setColumnWidthMode(i, QListView::Manual);