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 // --- VSR: 01/02/05 --- start
1056 // skip all 'Interface Applicative' objects
1057 SALOMEDS::SComponent_var SCO = UCObject->GetFatherComponent();
1058 CORBA::String_var aCorbaString = SCO->ComponentDataType();
1059 QString dataType = aCorbaString.in();
1060 if ( dataType.compare("Interface Applicative") == 0 )
1062 // --- VSR: 01/02/05 --- finish
1064 /* Creating SObjects item */
1065 SALOMEDS::SObject_var RefSO;
1066 SALOMEDS::GenericAttribute_var anAttr;
1067 SALOMEDS::AttributeName_var aName;
1068 SALOMEDS::AttributeIOR_var anIOR;
1069 SALOMEDS::AttributeSelectable_var aSelectable;
1070 SALOMEDS::AttributeExpandable_var anExpandable;
1071 SALOMEDS::AttributePixMap_var aPixmap;
1072 SALOMEDS::AttributeTextColor_var aTextColor;
1073 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
1074 QString valueString;
1076 CORBA::String_var aString = UCObject->GetID();
1077 QString UCEntry = aString.in();
1079 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1080 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
1081 bool isUseCase = UCBuilder->IsUseCase( UCObject );
1083 QAD_ObjectBrowserItem* UCSubItem = 0;
1084 if ( myUseCaseMap.contains( UCEntry ) && myUseCaseMap[ UCEntry ].count() > 0 )
1085 UCSubItem = myUseCaseMap[ UCEntry ].first();
1087 if ( UCObject->ReferencedObject( RefSO ) && !RefSO->_is_nil() ) {
1088 aString = RefSO->GetID();
1089 QString RefSOEntry = aString.in();
1090 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) || RefSO->FindAttribute( anAttr, "AttributeName" ) ) {
1091 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1092 if ( RefSO->FindAttribute( anAttr, "AttributeIOR" ) ) {
1093 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1094 aString = anIOR->Value();
1097 valueString = getValueFromObject( RefSO );
1098 aString = aName->Value();
1100 UCSubItem = AddItem( UCItem,
1101 QString( " * " ) + aString.in(),
1107 myUseCaseMap[ RefSOEntry ].append( UCSubItem );
1110 UCSubItem->setName( QString( " * " ) + aString.in() );
1111 UCSubItem->setEntry( RefSOEntry );
1112 UCSubItem->setIOR( ior );
1113 UCSubItem->setReference( UCEntry );
1114 UCSubItem->setValue( valueString );
1116 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1121 valueString = getValueFromObject( UCObject );
1123 if ( UCObject->FindAttribute( anAttr, "AttributeIOR" ) ) {
1124 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1125 aString = anIOR->Value();
1128 // getting Name and adding new Item
1129 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) ) {
1130 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1131 aString = aName->Value();
1133 UCSubItem = AddItem( UCItem, aString.in(), UCEntry, ior, isUseCase ? 1 : 0, "", valueString );
1134 myUseCaseMap[ UCEntry ].append( UCSubItem );
1137 UCSubItem->setName( aString.in() );
1138 UCSubItem->setEntry( UCEntry );
1139 UCSubItem->setIOR( ior );
1140 UCSubItem->setReference( "" );
1141 UCSubItem->setValue( valueString );
1144 // adding other attributes
1146 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1148 // if ( UCObject->FindAttribute( anAttr, "AttributeSelectable" ) ) {
1149 // aSelectable = SALOMEDS::AttributeSelectable::_narrow( anAttr );
1150 // UCSubItem->setSelectable( aSelectable->IsSelectable() );
1153 // if ( UCObject->FindAttribute( anAttr, "AttributeExpandable" ) ) {
1154 // anExpandable = SALOMEDS::AttributeExpandable::_narrow( anAttr );
1155 // UCSubItem->setExpandable( anExpandable->IsExpandable() );
1158 if ( UCObject->FindAttribute(anAttr, "AttributeTextColor" ) ) {
1159 aTextColor = SALOMEDS::AttributeTextColor::_narrow( anAttr );
1160 QColor aColor( (int)(aTextColor->TextColor().R),
1161 (int)(aTextColor->TextColor().G),
1162 (int)(aTextColor->TextColor().B) );
1163 UCSubItem->setTextColor( aColor );
1165 // TextHighlightColor
1166 if ( UCObject->FindAttribute( anAttr, "AttributeTextHighlightColor" ) ) {
1167 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow( anAttr );
1168 QColor aColor( (int)(aTextHighlightColor->TextHighlightColor().R),
1169 (int)(aTextHighlightColor->TextHighlightColor().G),
1170 (int)(aTextHighlightColor->TextHighlightColor().B) );
1171 UCSubItem->setTextHighlightColor( aColor );
1174 if ( UCObject->FindAttribute( anAttr, "AttributePixMap" ) ) {
1175 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
1176 if ( aPixmap->HasPixMap() ) {
1177 SALOMEDS::SComponent_var father = UCObject->GetFatherComponent();
1178 if ( father->FindAttribute( anAttr, "AttributeName" ) ) {
1179 SALOMEDS::AttributeName_var aFatherName;
1180 aFatherName = SALOMEDS::AttributeName::_narrow( anAttr );
1181 QAD_ResourceMgr* resMgr = QAD_Desktop::getResourceManager();
1184 if( resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )), msg ) ) {
1185 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )),
1186 tr( aPixmap->GetPixMap() ) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ) );
1187 UCSubItem->setPixmap( 0, icon );
1196 // updating children ...
1197 QMap<QString,SALOMEDS::SObject_var> ucList;
1198 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( UCObject );
1199 if ( !UCIter->_is_nil() ) {
1200 for ( ; UCIter->More(); UCIter->Next() ) {
1201 SALOMEDS::SObject_var UCSubObject = UCIter->Value();
1202 aString = UCSubObject->GetID();
1203 QString UCSubEntry = aString.in();
1204 ucList[ UCSubEntry ] = UCSubObject;
1207 // ... 1) delete removed items
1208 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )UCSubItem->firstChild();
1209 while ( childItem ) {
1210 QAD_ObjectBrowserItem* prevItem = childItem;
1211 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
1212 if ( !ucList.contains( prevItem->getEntry() ) ) {
1213 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
1214 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
1215 // myUseCaseMap.remove( prevItem->getEntry() );
1216 removeFromMap( myUseCaseMap, prevItem );
1220 // ... 2) create/update existing
1221 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
1222 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
1223 UpdateUCItem( it.data(), UCSubItem );
1229 Unhighlights all items
1231 void QAD_ObjectBrowser::unHighlightAll()
1233 myListView->clearSelection();
1234 myUseCaseView->clearSelection();
1238 Highlights items which refer to object
1240 void QAD_ObjectBrowser::highlight( const Handle(SALOME_InteractiveObject)& IObject, bool highlight )
1242 QList<QAD_ObjectBrowserItem> List;
1243 if (getItems(IObject, List)) {
1244 for (int i = 0; i < List.count(); i++) {
1245 List.at(i)->setSelected( highlight );
1246 List.at(i)->repaint();
1252 Gets items from Object Browser which refer to object
1254 bool QAD_ObjectBrowser::getItems( const Handle(SALOME_InteractiveObject)& IObject,
1255 QList<QAD_ObjectBrowserItem>& List)
1258 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1259 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1260 for ( int i = 0; i < ilist.count(); i++ )
1261 List.append( ilist.at(i) );
1263 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1264 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1265 for ( int i = 0; i < ilist.count(); i++ )
1266 List.append( ilist.at(i) );
1268 return (List.count() > 0);
1272 Gets items from Object Browser which refer to object
1274 bool QAD_ObjectBrowser::getItems( SALOMEDS::SObject_ptr SO,
1275 QList<QAD_ObjectBrowserItem>& List)
1278 if ( myListViewMap.contains( SO->GetID() ) ) {
1279 ItemList ilist = myListViewMap[ SO->GetID() ];
1280 for ( int i = 0; i < ilist.count(); i++ )
1281 List.append( ilist.at(i) );
1283 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1284 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1285 for ( int i = 0; i < ilist.count(); i++ )
1286 List.append( ilist.at(i) );
1288 return (List.count() > 0);
1292 Gets first item from Object Browser which refers to object (not reference)
1294 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( const Handle(SALOME_InteractiveObject)& IObject )
1296 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1297 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1298 for ( int i = 0; i < ilist.count(); i++ ) {
1299 QString aRef = ilist.at(i)->getReference();
1300 if ( ilist.at(i)->getReference().isEmpty() )
1308 Finds item from Object Browser corresponding to Object, returns 0 if fails
1310 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( SALOMEDS::SObject_ptr SO )
1312 if ( myListViewMap.contains( SO->GetID() ) ) {
1313 ItemList ilist = myListViewMap[ SO->GetID() ];
1314 for ( int i = 0; i < ilist.count(); i++ ) {
1315 QString aRef = ilist.at(i)->getReference();
1316 if ( ilist.at(i)->getReference().isEmpty() )
1325 Gets first item from UseCase Browser which refers to object (not reference)
1327 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( const Handle(SALOME_InteractiveObject)& IObject )
1329 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1330 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1331 for ( int i = 0; i < ilist.count(); i++ ) {
1332 QString aRef = ilist.at(i)->getReference();
1333 if ( ilist.at(i)->getReference().isEmpty() )
1341 Finds item from UseCase Browser corresponding to Object, returns 0 if fails
1343 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( SALOMEDS::SObject_ptr SO )
1345 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1346 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1347 for ( int i = 0; i < ilist.count(); i++ ) {
1348 QString aRef = ilist.at(i)->getReference();
1349 if ( ilist.at(i)->getReference().isEmpty() )
1356 Finds item corresponding to interactive object, returns 0 if fails
1358 void QAD_ObjectBrowser::rename( const Handle(SALOME_InteractiveObject)& IObject, QString newName )
1360 QAD_ObjectBrowserItem* item = getItem( IObject );
1362 item->setName( newName );
1365 item = getUCItem( IObject );
1367 item->setName( newName );
1373 Creates and show specific Popup to this according to current selection (Object Browser)
1375 void QAD_ObjectBrowser::showPopupMenu(QListViewItem* theItem)
1377 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1378 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1379 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1381 if (theItem != NULL && ( Sel->IObjectCount()>0 || ActiveComp.isEmpty() ) ) {
1383 // PAL5618: if IO is presented by several items, assure that the selected IO
1384 // is presented exactly by theItem: difference is in reference
1385 QAD_ObjectBrowserItem *item = (QAD_ObjectBrowserItem *) theItem;
1386 QString theEntry = item->getEntry();
1387 const SALOME_ListIO& SelIO = Sel->StoredIObjects();
1388 for ( SALOME_ListIteratorOfListIO SelIt( SelIO ); SelIt.More(); SelIt.Next() ) {
1389 const Handle(SALOME_InteractiveObject)& IO = SelIt.Value();
1390 if ( strcmp ( IO->getEntry(), theEntry ) == 0 )
1391 IO->setReference( item->getReference() );
1397 QAD_Tools::checkPopup( myPopup );
1398 if ( myPopup->count()>0 ) {
1399 myPopup->exec( QCursor::pos() );
1407 Creates and show specific Popup to this according to current selection (UseCase Browser)
1409 void QAD_ObjectBrowser::showUseCasePopupMenu(QListViewItem* theItem)
1413 QAD_Tools::checkPopup( myPopup );
1414 if ( myPopup->count() > 0 ) {
1415 myPopup->exec( QCursor::pos() );
1422 Called when current selection was changed (Object Browser)
1424 void QAD_ObjectBrowser::onSelectedItem()
1426 if (currentPage()==myListView)
1427 myUseCaseView->clearSelection();
1430 if ( sender()->inherits("QListView") )
1431 whoIs = (QListView*)sender();
1434 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1435 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1436 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1437 QAD_Application* myApp = QAD_Application::getDesktop()->getActiveApp();
1439 SALOME_ListIO DeltaPos;
1441 SALOME_ListIO DeltaNeg;
1444 typedef QMap<QString, SALOME_InteractiveObject*> SelMap;
1446 SelMap currMap, allMap;
1447 for( SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() ); It.More(); It.Next() )
1448 currMap.insert( It.Value()->getEntry(), It.Value().operator->() );
1450 QListViewItemIterator it( whoIs );
1451 for ( ; it.current(); ++it ) {
1452 QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)it.current();
1453 QString theEntry = item->getEntry();
1454 QString theName = item->getName();
1455 QString theRef = item->getReference();
1457 if ( !theEntry.isEmpty() ) {
1458 if ( item->isSelected() ) {
1459 allMap.insert( theEntry, 0 );
1461 if ( !currMap.contains( theEntry ) ) {
1462 Handle(SALOME_InteractiveObject) newIO;
1463 SALOMEDS::SObject_var obj = aStudy->FindObjectID( theEntry.latin1() );
1464 if ( !obj->_is_nil() ) {
1465 SALOMEDS::SComponent_var comp = obj->GetFatherComponent();
1466 if ( !comp->_is_nil() ) {
1467 CORBA::String_var datatype(comp->ComponentDataType());
1468 newIO = new SALOME_InteractiveObject( theEntry.latin1(),
1471 newIO->setReference( theRef.latin1() );
1474 newIO = new SALOME_InteractiveObject( theEntry.latin1(),
1477 newIO->setReference( theRef.latin1() );
1479 if (!newIO.IsNull()) {
1480 DeltaPos.Append( newIO );
1483 } else if ( currMap.contains( theEntry ) )
1484 DeltaNeg.Append( currMap[theEntry] );
1488 SALOME_ListIteratorOfListIO ItNeg( DeltaNeg );
1489 for(;ItNeg.More();ItNeg.Next()) {
1490 Sel->RemoveIObject( ItNeg.Value() );
1493 SALOME_ListIteratorOfListIO ItPos( DeltaPos );
1494 for(;ItPos.More();ItPos.Next()) {
1495 Sel->AddIObject( ItPos.Value() );
1498 for ( SelMap::iterator it = currMap.begin(); it != currMap.end(); ++it )
1499 if ( !allMap.contains( it.key() ) )
1500 Sel->RemoveIObject( it.data() );
1503 myApp->updateActions();
1507 Called when selection is changed (UseCase Browser)
1509 void QAD_ObjectBrowser::onUseCaseSelectedItem()
1514 Called when item is expanded
1516 void QAD_ObjectBrowser::onExpanded (QListViewItem* item)
1518 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1519 if (!myStudy->_is_nil() && aItem)
1521 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1522 if (!Object->_is_nil())
1524 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1525 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1526 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1527 anAttr->SetOpened(true);
1533 Called when item is collapsed
1535 void QAD_ObjectBrowser::onCollapsed(QListViewItem* item)
1537 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1538 if (!myStudy->_is_nil() && aItem)
1540 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1541 if (!Object->_is_nil())
1543 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1544 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1545 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1546 anAttr->SetOpened(false);
1552 Find and returns value for the object
1553 Warning: object can have several values attributes, search is done in the following order:
1554 [integer], [real], [table of integer], [table of real], [comment]
1556 QString QAD_ObjectBrowser::getValueFromObject( SALOMEDS::SObject_ptr SO )
1558 if ( SO->_is_nil() )
1559 return QString::null;
1560 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1561 if ( !isComponent->_is_nil() )
1562 return QString::null; // no values to show for components
1564 SALOMEDS::GenericAttribute_var anAttr;
1565 SALOMEDS::AttributeInteger_var anInt;
1566 SALOMEDS::AttributeReal_var aReal;
1567 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1568 SALOMEDS::AttributeTableOfReal_var aTableReal;
1569 SALOMEDS::AttributeComment_var aComment;
1570 CORBA::String_var aString;
1573 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1574 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1575 QString val = QString::number( anInt->Value() );
1579 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1580 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1581 QString val = QString::number( aReal->Value() );
1585 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1586 aTableInt = SALOMEDS::AttributeTableOfInteger::_narrow( anAttr );
1587 aString = aTableInt->GetTitle();
1588 QString tlt( aString.in() );
1589 if ( !tlt.isEmpty() )
1591 int nbRows = aTableInt->GetNbRows() ;
1592 int nbCols = aTableInt->GetNbColumns();
1593 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1597 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1598 aTableReal = SALOMEDS::AttributeTableOfReal::_narrow( anAttr );
1599 aString = aTableReal->GetTitle();
1600 QString tlt( aString.in() );
1601 if ( !tlt.isEmpty() )
1603 int nbRows = aTableReal->GetNbRows() ;
1604 int nbCols = aTableReal->GetNbColumns();
1605 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1609 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1610 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1611 aString = aComment->Value();
1612 QString val = QString( aString.in() );
1615 return QString::null;
1619 Shows/hides IAPP sub-tree in ObjectBrowser
1620 Current implementation just udpates browser
1622 void QAD_ObjectBrowser::setShowIAPP( bool show )
1628 Shows/hides info columns: Entry, IOR, Reference
1630 void QAD_ObjectBrowser::setShowInfoColumns( bool show )
1632 bool shown = myListView->header()->isResizeEnabled( 2 );
1634 if ( show != shown ) {
1636 myListView->header()->setResizeEnabled( true, 2 );
1637 myListView->header()->setResizeEnabled( true, 3 );
1638 myListView->header()->setResizeEnabled( true, 4 );
1639 myListView->setColumnWidthMode( 2, QListView::Maximum );
1640 myListView->setColumnWidthMode( 3, QListView::Maximum );
1641 myListView->setColumnWidthMode( 4, QListView::Maximum );
1642 if ( myListView->columnWidth( 2 ) <= 0 )
1643 myListView->header()->resizeSection( 2, 50 );
1644 if ( myListView->columnWidth( 3 ) <= 0 )
1645 myListView->header()->resizeSection( 3, 50 );
1646 if ( myListView->columnWidth( 4 ) <= 0 )
1647 myListView->header()->resizeSection( 4, 50 );
1650 myListView->setColumnWidthMode( 2, QListView::Manual );
1651 myListView->setColumnWidthMode( 3, QListView::Manual );
1652 myListView->setColumnWidthMode( 4, QListView::Manual );
1653 myListView->header()->resizeSection( 2, 0 );
1654 myListView->header()->resizeSection( 3, 0 );
1655 myListView->header()->resizeSection( 4, 0 );
1656 myListView->header()->setResizeEnabled( false, 2 );
1657 myListView->header()->setResizeEnabled( false, 3 );
1658 myListView->header()->setResizeEnabled( false, 4 );
1664 Shows/hides Value column
1666 void QAD_ObjectBrowser::setShowValueColumn( bool show )
1668 bool shown = myListView->header()->isResizeEnabled( 1 );
1670 if ( show != shown ) {
1672 myListView->header()->setResizeEnabled( true, 1 );
1673 myListView->setColumnWidthMode( 1, QListView::Maximum );
1674 if ( myListView->columnWidth( 1 ) <= 0 )
1675 myListView->header()->resizeSection( 1, 50 );
1678 myListView->setColumnWidthMode( 1, QListView::Manual );
1679 myListView->header()->resizeSection( 1, 0 );
1680 myListView->header()->setResizeEnabled( false, 1 );
1686 Sets CHRONO sorting enabled/disabled
1687 Note: when CHRONO sorting is enabled items are sorted by Entry value and column headers
1688 become unclickable to prohibit another sort type;
1689 when CHRONO sorting is disabled column headers become clickable - this allows
1690 to sort data by any column
1692 void QAD_ObjectBrowser::setEnableChronoSort( bool enable )
1695 // if CHRONO sorting is enabled set clickable header disabled ...
1696 myListView->header()->setClickEnabled( false );
1697 // ... and then sort by column 2 - OCAF doc entry
1698 myListView->setSorting( 2, TRUE ) ;
1701 // if CHRONO sorting is enabled set clickable header enabled ...
1702 myListView->header()->setClickEnabled( true );
1703 // and clear sorting by column 2
1704 myListView->setSorting( 10, TRUE );
1706 // myListView->sort( ) ;
1710 Slot, called to edit value
1712 void QAD_ObjectBrowser::onEditAttribute()
1714 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1715 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1716 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1717 if ( myStudy->_is_nil() )
1720 if ( Sel->IObjectCount() == 1 ) {
1721 SALOMEDS::SObject_var SO = myStudy->FindObjectID( Sel->firstIObject()->getEntry() );
1722 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1723 if ( !SO->_is_nil() && isComponent->_is_nil() ) { // no values to show for components
1724 SALOMEDS::GenericAttribute_var anAttr;
1725 SALOMEDS::AttributeInteger_var anInt;
1726 SALOMEDS::AttributeReal_var aReal;
1727 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1728 SALOMEDS::AttributeTableOfReal_var aTableReal;
1729 SALOMEDS::AttributeComment_var aComment;
1733 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1734 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1735 int val = SALOMEGUI_SetValueDlg::getInteger( tr( "SET_VALUE_INT_TLT" ),
1736 tr( "SET_VALUE_INT_LBL" ),
1739 QAD_Application::getDesktop() );
1741 anInt->SetValue( val );
1746 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1747 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1748 double val = SALOMEGUI_SetValueDlg::getDouble( tr( "SET_VALUE_REAL_TLT" ),
1749 tr( "SET_VALUE_REAL_LBL" ),
1752 QAD_Application::getDesktop() );
1754 aReal->SetValue( val );
1757 // if Table of integer
1759 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1760 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1763 SALOMEGUI_TableDlg::ttInt );
1764 bOk = ( dlg->exec() == QDialog::Accepted );
1768 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1769 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1772 SALOMEGUI_TableDlg::ttReal );
1773 bOk = ( dlg->exec() == QDialog::Accepted );
1777 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1778 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1779 QString val = SALOMEGUI_SetValueDlg::getString( tr( "SET_VALUE_COMMENT_TLT" ),
1780 tr( "SET_VALUE_COMMENT_LBL" ),
1783 QAD_Application::getDesktop() );
1785 aComment->SetValue( val );
1796 Returns true if object has editable attrubute :
1797 integer, real, table or comment
1799 bool QAD_ObjectBrowser::hasEditableAttribute( const Handle(SALOME_InteractiveObject)& object )
1801 if ( !myStudy->_is_nil() ) {
1802 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1803 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1804 if ( !comp->_is_nil() || obj->_is_nil() )
1806 QString val = getValueFromObject( obj );
1807 return ( !val.isNull() );
1813 Returns true if object has table attrubute ( integer and/or real )
1815 bool QAD_ObjectBrowser::hasTable( const Handle(SALOME_InteractiveObject)& object )
1817 SALOMEDS::GenericAttribute_var anAttr;
1818 if ( !myStudy->_is_nil() ) {
1819 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1820 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1821 if ( !comp->_is_nil() || obj->_is_nil() )
1823 if ( obj->FindAttribute( anAttr, "AttributeTableOfInteger" ) )
1825 if ( obj->FindAttribute( anAttr, "AttributeTableOfReal" ) )
1832 Slot, called when one of the UseCase Browser menu command is called
1834 void QAD_ObjectBrowser::onUseCasePopupMenu( int action )
1836 if ( myStudy->_is_nil() )
1839 // Check if the study is locked
1840 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1841 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1842 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1843 if ( aStudy->GetProperties()->IsLocked() )
1845 QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(),
1846 QObject::tr("WRN_WARNING"),
1847 QObject::tr("WRN_STUDY_LOCKED"),
1848 QObject::tr("BUT_OK") );
1852 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1853 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1854 SALOMEDS::SObject_var Current = UCBuilder->GetCurrentObject();
1855 CORBA::String_var aString;
1857 QList<QListViewItem> ucSelected;
1858 ucSelected.setAutoDelete( false );
1859 getSelectedParents( myUseCaseView, ucSelected );
1861 if ( action == UC_NEW_EMPTY_ID ) {
1862 if ( ucSelected.count() == 1 ) {
1863 if ( isRootItem( ucSelected.at(0) ) )
1864 UCBuilder->SetRootCurrent();
1866 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1867 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1868 myActiveStudy->updateUseCaseBrowser();
1872 if ( action == UC_SET_CURRENT_ID ) {
1873 if ( ucSelected.count() > 0 ) {
1874 if ( isRootItem( ucSelected.at(0) ) )
1875 UCBuilder->SetRootCurrent();
1877 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1879 myActiveStudy->updateUseCaseBrowser( );
1882 if ( action == UC_RENAME_ID ) {
1883 if ( ucSelected.count() == 1 ) {
1884 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( 0 ) );
1885 aString = UCBuilder->GetName();
1886 if ( isRootItem( useCaseItem ) ) {
1887 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), aString.in() );
1888 if ( !name.isEmpty() ) {
1889 UCBuilder->SetName( name.latin1() );
1890 myActiveStudy->updateUseCaseBrowser( );
1893 else/* if ( UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) )*/ {
1894 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), aString.in() );
1895 if ( !name.isEmpty() ) {
1896 myActiveStudy->renameIObject( Sel->firstIObject(), name );
1902 if ( action == UC_APPEND_ID ) {
1903 if ( Sel->IObjectCount() > 0 ) {
1904 SALOME_ListIO SelIO; SelIO = Sel->StoredIObjects();
1905 SALOME_ListIteratorOfListIO SelIt( SelIO );
1906 for( ; SelIt.More(); SelIt.Next() ) {
1907 SALOMEDS::SObject_var selSO = myStudy->FindObjectID( SelIt.Value()->getEntry() );
1908 if ( !selSO->_is_nil() && strcmp( SelIt.Value()->getEntry(), ( "0:2" ) ) != 0 ) {
1909 UCBuilder->Remove( selSO ); // first remove object for sure ...
1910 UCBuilder->Append( selSO ); // ... and now re-append it
1913 myActiveStudy->updateUseCaseBrowser( true );
1917 if ( action == UC_REMOVE_ID ) {
1919 getSelectedParents( myUseCaseView, ucSelected, true );
1920 for ( int i = 0; i < ucSelected.count(); i++ ) {
1921 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )ucSelected.at( i );
1922 if ( !isRootItem( item ) ) {
1924 SALOMEDS::SObject_var SO = myStudy->FindObjectID( item->getEntry() );
1925 if ( !SO->_is_nil() ) {
1926 UCBuilder->Remove( SO );
1932 Sel->ClearIObjects();
1933 myActiveStudy->updateUseCaseBrowser( true );
1936 if ( action == UC_CLEAR_ID ) {
1937 if ( myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0) {
1938 QAD_ObjectBrowserItem* child = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild()->firstChild();
1940 UCBuilder->Remove( myStudy->FindObjectID( child->getEntry().latin1() ) );
1941 child = ( QAD_ObjectBrowserItem* )( child->nextSibling() );
1943 Sel->ClearIObjects();
1944 myActiveStudy->updateUseCaseBrowser();
1949 Use Case browser buttons slot
1951 void QAD_ObjectBrowser::onUseCaseBtn()
1953 // Check if the study is locked
1954 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1955 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1956 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1957 if ( aStudy->GetProperties()->IsLocked() )
1959 QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(),
1960 QObject::tr("WRN_WARNING"),
1961 QObject::tr("WRN_STUDY_LOCKED"),
1962 QObject::tr("BUT_OK") );
1966 if ( sender() == myNewBtn ) {
1967 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1968 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1969 myActiveStudy->updateUseCaseBrowser();
1971 if ( sender() == myAddBtn )
1972 onUseCasePopupMenu( UC_APPEND_ID );
1973 if ( sender() == myDelBtn )
1974 onUseCasePopupMenu( UC_REMOVE_ID );
1975 if ( sender() == myClearBtn )
1976 onUseCasePopupMenu( UC_CLEAR_ID );
1977 if ( sender() == myCurrentBtn )
1978 onUseCasePopupMenu( UC_SET_CURRENT_ID );
1982 Show/remove UseCase Browser
1985 void QAD_ObjectBrowser::showUseCaseBrowser ( bool show )
1987 bool shown = (this->count() > 1);
1993 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
1994 UpdateUseCaseBrowser();
1998 this->removePage(myVBox);
2003 Switch between auto resizing of columns and manual mode
2005 void QAD_ObjectBrowser::autoSizeColumns( bool autosize )
2009 for (int i = 0; i < myListView->header()->count(); i++ )
2010 if (myListView->header()->isResizeEnabled(i))
2011 myListView->setColumnWidthMode(i, QListView::Maximum);
2016 for (int i = 0; i < myListView->header()->count(); i++ )
2017 myListView->setColumnWidthMode(i, QListView::Manual);