1 // SALOME SALOMEGUI : implementation of desktop and GUI kernel
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : QAD_ObjectBrowser.cxx
25 // Author : Nicolas REJNERI
30 #include "QAD_ObjectBrowserItem.h"
31 #include "QAD_ObjectBrowser.h"
32 #include "QAD_Application.h"
33 #include "QAD_MessageBox.h"
34 #include "QAD_Desktop.h"
35 #include "QAD_Config.h"
36 #include "QAD_Settings.h"
37 #include "QAD_Tools.h"
38 #include "QAD_RightFrame.h"
39 #include "QAD_LeftFrame.h"
40 #include "SALOME_Selection.h"
41 #include "SALOME_InteractiveObject.hxx"
42 #include "SALOME_ListIteratorOfListIO.hxx"
43 #include "SALOMEGUI_SetValueDlg.h"
44 #include "SALOMEGUI_TableDlg.h"
45 #include "SALOMEGUI_NameDlg.h"
48 #include <qlistview.h>
50 #include <qpopupmenu.h>
51 #include <qtabwidget.h>
52 #include <qpushbutton.h>
57 #include <qdragobject.h>
58 #include <qstringlist.h>
60 //VRV: porting on Qt 3.0.5
61 #if QT_VERSION >= 0x030005
64 //VRV: porting on Qt 3.0.5
66 #define UC_NEW_EMPTY_ID 1000000
67 #define UC_NEW_COMP_ID 1000002
68 #define UC_NEW_FULL_ID 1000004
69 #define UC_NEW_COPY_ID 1000006
70 #define UC_APPEND_ID 1000008
71 #define UC_REMOVE_ID 1000010
72 #define UC_RENAME_ID 1000012
73 #define UC_CLEAR_ID 1000014
74 #define UC_SET_CURRENT_ID 1000016
77 Small button which updates Object Browser's contents
79 Btn::Btn ( QWidget * parent, const char * name ) : QToolButton( parent, name )
81 connect( this, SIGNAL(clicked()), this, SLOT(onClicked()) );
85 QAD_ObjectBrowser* OB = QAD_Application::getDesktop()->getActiveApp()->getActiveStudy()->getActiveStudyFrame()->getLeftFrame()->getObjectBrowser();
90 Gets selected top-level items (i.e. not including sub-items) [ static ]
92 static void getSelectedParents( QListViewItem* listViewItem, QList<QListViewItem>& itemList )
94 QListViewItem* item = listViewItem->firstChild();
96 if ( item->isSelected() ) {
97 itemList.append( item );
100 getSelectedParents( item, itemList );
102 item = item->nextSibling();
106 Gets selected top-level items (i.e. not including sub-items) [ static ]
108 static void getSelectedParents( QListView* listView, QList<QListViewItem>& itemList, bool ignoreRoot = false )
111 QListViewItem* item = listView->firstChild();
113 if ( item->isSelected() && !ignoreRoot ) {
114 itemList.append( item );
117 getSelectedParents( item, itemList );
119 item = item->nextSibling();
123 Gets top-most parent item [ static ]
125 static QListViewItem* getTopParent( QListViewItem* item )
129 QListViewItem* p = item->parent();
132 while ( p->parent() ) {
138 Returns true if the item is top-level (root)
140 static bool isRootItem( QListViewItem* item )
142 return ( item->listView() && !item->parent() );
147 QAD_ObjectBrowser::QAD_ObjectBrowser( SALOMEDS::Study_var study, QWidget* parent, const char* name, WFlags fl )
148 : QTabWidget( parent, name, fl )
150 myStudy = SALOMEDS::Study::_duplicate( study );
151 myListViewMap.clear();
152 myUseCaseMap.clear();
153 myListView=0; // must be done before setupListView(): setCornerWidget() provoque call to eventFilter
154 myUseCaseView=0; // and test myUseCaseView->viewport() before initialisation
161 QAD_ObjectBrowser::~QAD_ObjectBrowser()
163 if (!myStudy->_is_nil())
164 CORBA::release(myStudy);
168 Configures Object Browser and UseCase Browser.
169 Columns, Selection Mode and Palette.
171 void QAD_ObjectBrowser::setupListView()
173 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
175 this->setTabPosition( QTabWidget::Bottom );
177 /* Reading setting : Columns for Value, OCAF Doc entry, object IOR, OCAF Doc ref entry and Chrono sorting */
178 QString AddColumn = QAD_CONFIG->getSetting( "ObjectBrowser:AddColumn" );
179 QString ValueColumn = QAD_CONFIG->getSetting( "ObjectBrowser:ValueColumn" );
180 QString ShowCHRONO_SORT = QAD_CONFIG->getSetting( "ObjectBrowser:ChronologicalSort" );
181 QString showUseCase = QAD_CONFIG->getSetting("ObjectBrowser:ShowUseCaseBrowser");
182 QString noAutoSizeColumns = QAD_CONFIG->getSetting( "ObjectBrowser:NoAutoSizeColumns" );
184 /* create and setup Object Browser ================================= */
185 myListView = new QListView( this, "Object Browser");
186 myListView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
187 myListView->setMinimumSize( 1, 1 );
188 myListView->setPalette( QAD_Application::getPalette( true ) );
190 /* First two columns = object name and value - always visible */
191 myListView->addColumn( tr( "OBJECT_BROWSER_OBJECT" ) ); /* Adding Object column */
192 myListView->addColumn( tr( "OBJECT_BROWSER_VALUE" ) ); /* Adding Value column */
193 myListView->addColumn( tr( "OBJECT_BROWSER_ENTRY" ) ); /* Adding Doc entry column */
194 myListView->addColumn( tr( "OBJECT_BROWSER_IOR" ) ); /* Adding Object IOR column */
195 myListView->addColumn( tr( "OBJECT_BROWSER_REFENTRY" ) ); /* Adding OCAF Doc ref entry column */
196 myListView->header()->setMovingEnabled( false );
199 myListView->header()->setClickEnabled( TRUE ); /* Enable clicking on the header */
200 myListView->setShowSortIndicator( TRUE ) ; /* Add user arrows to indicate the sort order : LPN */
201 myListView->setRootIsDecorated( TRUE ); /* Enable expand/collapse control for the root item */
202 myListView->setSelectionMode ( QListView::Extended ); /* Enable multiple selection */
203 myListView->setVScrollBarMode( QScrollView::AlwaysOn ); /* Set scrollbars always visible */
204 myListView->setHScrollBarMode( QScrollView::AlwaysOn ); /* ... */
206 myListView->setCornerWidget( new Btn( this ) );
207 /* Connect section */
208 //VRV: porting on Qt 3.0.5
209 #if QT_VERSION < 0x030005
210 connect( myListView, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint&, int ) ),
211 this, SLOT( showPopupMenu( QListViewItem* ) ) );
213 connect( myListView, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
214 this, SLOT( showPopupMenu( QListViewItem* ) ) );
216 //VRV: porting on Qt 3.0.5
218 connect( myListView, SIGNAL( selectionChanged() ),
219 this, SLOT( onSelectedItem() ) );
220 connect( myListView, SIGNAL( expanded( QListViewItem* ) ),
221 this, SLOT( onExpanded( QListViewItem* ) ) );
222 connect( myListView, SIGNAL( collapsed( QListViewItem* ) ),
223 this, SLOT( onCollapsed( QListViewItem* ) ) );
225 /* create and setup UseCase Browser ================================ */
226 myVBox = new QWidget( this );
227 QVBoxLayout* vBoxLayout = new QVBoxLayout( myVBox );
229 myUseCaseView = new QListView( myVBox, "UseCase Browser");
230 myUseCaseView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
231 myUseCaseView->setMinimumSize( 1, 1 );
232 myUseCaseView->setPalette( QAD_Application::getPalette( true ) );
234 /* First column = object name */
235 myUseCaseView->addColumn( tr( "OBJECT_BROWSER_OBJECT" ) );
237 myUseCaseView->header()->setClickEnabled( TRUE ); /* Enable clicking on the header */
238 myUseCaseView->setShowSortIndicator( TRUE ) ; /* Add user arrows to indicate the sort order : LPN */
239 myUseCaseView->setRootIsDecorated( TRUE ); /* Enable expand/collapse control for the root item */
240 myUseCaseView->setSelectionMode ( QListView::Extended ); /* Enable multiple selection */
241 myUseCaseView->setVScrollBarMode( QScrollView::AlwaysOn ); /* Set scrollbars always visible */
242 myUseCaseView->setHScrollBarMode( QScrollView::AlwaysOn ); /* ... */
243 myUseCaseView->header()->setMovingEnabled( false );
244 myUseCaseView->viewport()->setAcceptDrops( true );
245 myUseCaseView->installEventFilter( this );
246 myUseCaseView->viewport()->installEventFilter( this );
247 myUseCaseView->setSorting( -1 ) ;
248 vBoxLayout->addWidget( myUseCaseView );
250 myUseCaseView->setCornerWidget( new Btn( this ) );
252 myNewBtn = new QToolButton( myVBox );
253 myNewBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_NEW") ) );
254 myNewBtn->setAutoRaise( true );
255 QToolTip::add( myNewBtn, tr( "UC_NEW_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_NEW_TIP" ) );
256 myAddBtn = new QToolButton( myVBox );
257 myAddBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_ADD") ) );
258 myAddBtn->setAutoRaise( true );
259 QToolTip::add( myAddBtn, tr( "UC_APPEND_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_APPEND_TIP" ) );
260 myDelBtn = new QToolButton( myVBox );
261 myDelBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_REMOVE") ) );
262 myDelBtn->setAutoRaise( true );
263 QToolTip::add( myDelBtn, tr( "UC_REMOVE_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_REMOVE_TIP" ) );
264 myClearBtn = new QToolButton( myVBox );
265 myClearBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_CLEAR") ) );
266 myClearBtn->setAutoRaise( true );
267 QToolTip::add( myClearBtn, tr( "UC_CLEAR_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_CLEAR_TIP" ) );
268 myCurrentBtn = new QToolButton( myVBox );
269 myCurrentBtn->setIconSet( resMgr->loadPixmap( "QAD", tr("ICON_UC_SET_CURRENT") ) );
270 myCurrentBtn->setAutoRaise( true );
271 QToolTip::add( myCurrentBtn, tr( "UC_SET_CURRENT_ID" ), QAD_Application::getDesktop()->toolTipGroup(), tr( "UC_SET_CURRENT_TIP" ) );
273 QHBoxLayout* btnLayout = new QHBoxLayout;
274 btnLayout->setMargin( 3 ); btnLayout->setSpacing( 3 );
275 btnLayout->addWidget( myNewBtn );
276 btnLayout->addStretch();
277 btnLayout->addSpacing( 5 );
278 btnLayout->addStretch();
279 btnLayout->addWidget( myAddBtn );
280 btnLayout->addWidget( myDelBtn );
281 btnLayout->addStretch();
282 btnLayout->addSpacing( 5 );
283 btnLayout->addStretch();
284 btnLayout->addWidget( myClearBtn );
285 btnLayout->addStretch();
286 btnLayout->addSpacing( 5 );
287 btnLayout->addStretch();
288 btnLayout->addWidget( myCurrentBtn );
289 btnLayout->addStretch();
291 vBoxLayout->addLayout( btnLayout );
293 connect( myNewBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
294 connect( myAddBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
295 connect( myDelBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
296 connect( myClearBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
297 connect( myCurrentBtn, SIGNAL( clicked() ), this, SLOT( onUseCaseBtn() ) );
299 /* Connect section */
300 #if QT_VERSION < 0x030005
301 connect( myUseCaseView, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint&, int ) ),
302 this, SLOT( showPopupMenu( QListViewItem* ) ) );
304 connect( myUseCaseView, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
305 this, SLOT( showPopupMenu( QListViewItem* ) ) );
308 connect( myUseCaseView, SIGNAL( selectionChanged() ),
309 this, SLOT( onSelectedItem() ) );
311 /* add Object Browser and UseCase Browser as pages ================= */
312 this->addTab( myListView, tr( "TLT_OBJECT_BROWSER" ) );
313 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
315 if ( showUseCase != "true")
316 this->removePage(myVBox);
318 setShowInfoColumns( AddColumn == "true" );
319 setShowValueColumn( ValueColumn == "true" );
320 setEnableChronoSort( ShowCHRONO_SORT == "true" );
322 if ( noAutoSizeColumns == "true" )
324 for (int i = 0; i < myListView->header()->count(); i++ )
325 myListView->setColumnWidthMode(i, QListView::Manual);
328 resize( QSize( 100, 400 ) );
335 bool QAD_ObjectBrowser::eventFilter( QObject* o, QEvent* e )
337 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
338 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
340 if ( myStudy->_is_nil() )
341 return QTabWidget::eventFilter( o, e );
343 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
344 if (! myUseCaseView) return QTabWidget::eventFilter( o, e );
345 if (o == myUseCaseView->viewport()) {
346 if ( e->type() == QEvent::MouseButtonPress ) {
347 // Test if clicked on selection and start drag if necessary
348 QMouseEvent* me = ( QMouseEvent* )e;
349 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )( myUseCaseView->itemAt( me->pos() ) );
350 if ( item && item->isSelected() && me->button() == LeftButton) {
351 if ( me->pos().x() > myUseCaseView->header()->sectionPos( myUseCaseView->header()->mapToIndex( 0 ) ) +
352 myUseCaseView->treeStepSize() * ( item->depth() + ( myUseCaseView->rootIsDecorated() ? 1 : 0 ) ) +
353 myUseCaseView->itemMargin() ||
354 me->pos().x() < myUseCaseView->header()->sectionPos( myUseCaseView->header()->mapToIndex( 0 ) ) ) {
355 QStringList entryList;
356 QListViewItemIterator it( myUseCaseView );
358 for ( ; it.current(); ++it ) {
359 QAD_ObjectBrowserItem* selItem = ( QAD_ObjectBrowserItem* )( it.current() );
360 if ( selItem->isSelected() ) {
361 if ( isRootItem( selItem ) ) {
366 entryList.append( selItem->getEntry() );
370 if ( done && !entryList.isEmpty() ) {
371 QTextDrag *d = new QTextDrag( entryList.join("*"), myUseCaseView->viewport() );
378 else if ( e->type() == QEvent::DragMove ) {
379 QDragMoveEvent* dme = ( QDragMoveEvent* )e;
380 if ( dme->source() == myUseCaseView->viewport() ) {
388 else if ( e->type() == QEvent::Drop ) {
389 QDropEvent* de = ( QDropEvent* )e;
391 QAD_ObjectBrowserItem* dropItem = ( QAD_ObjectBrowserItem* )( myUseCaseView->itemAt( de->pos() ) );
392 if ( de->source() == myUseCaseView->viewport() ) {
393 if ( QTextDrag::decode( de, text ) && dropItem && !dropItem->isSelected() ) {
394 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )getTopParent( dropItem );
396 if ( !UCBuilder->_is_nil() ) {
397 UCBuilder->SetRootCurrent();
398 if ( useCaseItem != dropItem ) {
399 SALOMEDS::SObject_var dropObject = myStudy->FindObjectID( dropItem->getEntry() );
400 if ( !dropObject->_is_nil() )
401 UCBuilder->SetCurrentObject( dropObject );
403 QStringList entryList = QStringList::split( "*", text, false );
404 // if Move action then first remove all selected items
405 if ( de->action() == QDropEvent::Move ) {
406 QList<QListViewItem> ucSelected;
407 ucSelected.setAutoDelete( false );
408 getSelectedParents( myUseCaseView, ucSelected );
409 for ( int j = 0; j < entryList.count(); j++ ) {
410 QAD_ObjectBrowserItem* delItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( j ) );
411 QAD_ObjectBrowserItem* ucDelItem = ( QAD_ObjectBrowserItem* )getTopParent( delItem );
412 SALOMEDS::SObject_var delSO = myStudy->FindObjectID( delItem->getEntry() );
413 if ( !delSO->_is_nil() && ucDelItem ) {
414 UCBuilder->Remove( delSO );
418 // then try to append items to destination
419 for ( int i = 0; i < entryList.count(); i++ ) {
420 SALOMEDS::SObject_var SO = myStudy->FindObjectID( entryList[i] );
421 if ( !SO->_is_nil() ) {
422 UCBuilder->Remove( SO );
423 UCBuilder->Append( SO );
426 myActiveStudy->updateUseCaseBrowser();
438 else if ( o == myUseCaseView ) {
439 if ( e->type() == QEvent::KeyPress ) {
440 QKeyEvent* ke = ( QKeyEvent* )e;
441 if ( ke->key() == Key_Delete ) {
442 onUseCasePopupMenu( UC_REMOVE_ID );
447 return QTabWidget::eventFilter( o, e );
454 void QAD_ObjectBrowser::onCreatePopup()
456 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
457 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
458 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
460 /* VSR : Creation of common POPUP menu for Object Browser/Use Case Browser */
461 if ( Sel->IObjectCount() > 0 ) {
466 Desktop->definePopup( theContext, theParent, theObject );
468 Desktop->createPopup( myPopup, theContext, "ObjectBrowser", theObject);
469 if ( !Desktop->getActiveComponent().isEmpty() ) {
470 Desktop->customPopup( myPopup, theContext, "ObjectBrowser", theObject );
472 // VSR:22/01/03 - Command for edit attributes value
473 bool EditValues = QAD_CONFIG->getSetting( "ObjectBrowser:EditValues" ) == "true";
474 if ( EditValues && Sel->IObjectCount() == 1 && hasEditableAttribute(Sel->firstIObject()) ) {
475 if ( myPopup->count() > 0 )
476 myPopup->insertSeparator();
477 myPopup->insertItem( tr( "EDIT_VALUE_CMD" ),
479 SLOT( onEditAttribute() ) );
484 // No selected item => it's not necessary to create popup
485 //NRI- : Desktop->createPopup( myPopup, "", "ObjectBrowser", "");
487 if ( currentPage() != myListView ) {
488 /* VSR : Creation of POPUP menu for UseCase Browser */
489 QList<QListViewItem> ucSelected;
490 ucSelected.setAutoDelete( false );
491 getSelectedParents( myUseCaseView, ucSelected );
493 if ( myPopup && !myStudy->_is_nil() ) {
494 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
496 bool isOne = ucSelected.count() == 1;
497 bool isMany = ucSelected.count() > 1;
498 bool isEmpty = ucSelected.count() == 1;
499 bool obSelected = Sel->IObjectCount() > 0;
500 bool isRoot = isOne && isRootItem( ucSelected.at( 0 ) );
501 bool manyChildren = myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0;
502 bool isUseCase = isOne &&
503 ( isRoot || UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) );
507 QPopupMenu *UseCasePopup = new QPopupMenu( myPopup );
509 UseCasePopup->insertItem( tr( "UC_NEW_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_NEW_EMPTY_ID );
511 UseCasePopup->insertItem( tr( "UC_SET_CURRENT_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_SET_CURRENT_ID );
513 UseCasePopup->insertItem( tr( "UC_RENAME_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_RENAME_ID );
514 if ( isRoot && manyChildren )
515 UseCasePopup->insertItem( tr( "UC_CLEAR_ID" ), this, SLOT( onUseCasePopupMenu( int ) ), 0, UC_CLEAR_ID );
517 if ( UseCasePopup->count() > 0 ) {
518 if ( myPopup->count() > 0 )
519 myPopup->insertSeparator();
520 myPopup->insertItem( tr( "UC_POPUP" ), UseCasePopup );
530 Returns Object Browser list view
532 QListView* QAD_ObjectBrowser::getListView() const
538 Returns UseCase Browser list view
540 QListView* QAD_ObjectBrowser::getUseCaseView() const
542 return myUseCaseView;
546 Adds anItem ( probably a SComponent )
548 QAD_ObjectBrowserItem* QAD_ObjectBrowser::AddItem(QListView* theView,
549 const QString& theName,
550 const QString& theEntry,
551 const QString& theIOR,
553 const QString& theValue,
554 QAD_ObjectBrowserItem* theAfter)
557 QAD_ObjectBrowserItem* last = (QAD_ObjectBrowserItem*)(theView->firstChild());
561 for ( ; last->nextSibling(); last = (QAD_ObjectBrowserItem*)(last->nextSibling()) );
563 QAD_ObjectBrowserItem* anItem = new QAD_ObjectBrowserItem( theView, last );
565 anItem->setType( theType );
566 anItem->setOpen( FALSE );
567 anItem->setName( theName );
568 anItem->setValue( theValue );
569 anItem->setEntry( theEntry );
570 anItem->setIOR( theIOR );
571 anItem->setReference( "" );
577 Adds anItem ( probably a StudyObject )
579 QAD_ObjectBrowserItem* QAD_ObjectBrowser::AddItem(QAD_ObjectBrowserItem* theParentItem,
580 const QString& theName,
581 const QString& theEntry,
582 const QString& theIOR,
584 const QString& theRef,
585 const QString& theValue,
586 QAD_ObjectBrowserItem* theAfter)
589 QAD_ObjectBrowserItem* last = (QAD_ObjectBrowserItem*)(theParentItem->firstChild());
593 for ( ; last->nextSibling(); last = (QAD_ObjectBrowserItem*)(last->nextSibling()) );
595 QAD_ObjectBrowserItem* anItem = new QAD_ObjectBrowserItem(theParentItem, last);
596 anItem->setType( theType );
597 anItem->setOpen( FALSE );
598 anItem->setName( theName );
599 anItem->setValue( theValue );
600 anItem->setEntry( theEntry );
601 anItem->setIOR( theIOR );
602 anItem->setReference( theRef );
608 Updates Object Browsers' item [ protected ]
610 void QAD_ObjectBrowser::Update( SALOMEDS::SObject_ptr SO,
611 QAD_ObjectBrowserItem* theParentItem )
613 if ( myStudy->_is_nil() || SO->_is_nil() || !theParentItem ) {
616 SALOMEDS::ChildIterator_var it = myStudy->NewChildIterator(SO);
618 for (; it->More();it->Next()) {
619 SALOMEDS::SObject_var CSO = it->Value();
620 SALOMEDS::SObject_var RefSO;
622 QString CSOEntry = strdup( CSO->GetID() );
623 SALOMEDS::GenericAttribute_var anAttr;
624 SALOMEDS::AttributeName_var aName;
625 SALOMEDS::AttributeComment_var aCmnt;
626 SALOMEDS::AttributeIOR_var anIOR;
627 SALOMEDS::AttributeReal_var aReal;
628 SALOMEDS::AttributeInteger_var anInt;
629 SALOMEDS::AttributeSelectable_var aSelectable;
630 SALOMEDS::AttributeExpandable_var anExpandable;
631 SALOMEDS::AttributeOpened_var anOpened;
632 SALOMEDS::AttributePixMap_var aPixmap;
633 SALOMEDS::AttributeTextColor_var aTextColor;
634 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
636 QAD_ObjectBrowserItem* Item = 0;
637 QAD_ObjectBrowserItem* subItem;
640 if ( CSO->ReferencedObject(RefSO) && !RefSO->_is_nil() ) {
642 QString RefSOEntry = strdup( RefSO->GetID() );
643 if (CSO->FindAttribute(anAttr, "AttributeName") || RefSO->FindAttribute(anAttr, "AttributeName")) {
644 aName = SALOMEDS::AttributeName::_narrow(anAttr);
645 if (RefSO->FindAttribute(anAttr, "AttributeIOR")) {
646 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
647 ior = strdup( anIOR->Value() );
649 valueString = getValueFromObject( RefSO );
650 // AddItem (Item, QString(" * ") + strdup( aName->Value() ), RefSOEntry, ior, 2, CSOEntry);
651 Item = AddItem(theParentItem,
652 QString(" * ") + strdup( aName->Value() ),
658 myListViewMap[ RefSOEntry ].append( Item );
661 MESSAGE("QAD_ObjectBrowser::Update : noname item: "<<CSO->GetID());
665 valueString = getValueFromObject( CSO );
667 if (CSO->FindAttribute(anAttr, "AttributeIOR")) {
668 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
669 ior = strdup( anIOR->Value() );
671 // getting Name and adding new Item
672 if (CSO->FindAttribute(anAttr, "AttributeName") ) {
673 aName = SALOMEDS::AttributeName::_narrow(anAttr);
674 Item = AddItem(theParentItem, strdup( aName->Value() ), CSOEntry, ior, 0, "", valueString);
675 myListViewMap[ CSOEntry ].append( Item );
678 MESSAGE("QAD_ObjectBrowser::Update : noname item: "<<CSO->GetID());
680 // adding other attributes
683 if ( CSO->FindAttribute(anAttr, "AttributeSelectable") ) {
684 aSelectable = SALOMEDS::AttributeSelectable::_narrow(anAttr);
685 Item->setSelectable(aSelectable->IsSelectable());
688 if ( CSO->FindAttribute(anAttr, "AttributeExpandable") ) {
689 anExpandable = SALOMEDS::AttributeExpandable::_narrow(anAttr);
690 Item->setExpandable(anExpandable->IsExpandable());
693 if ( CSO->FindAttribute(anAttr, "AttributeOpened") ) {
694 anOpened = SALOMEDS::AttributeOpened::_narrow(anAttr);
695 Item->setOpen(anOpened->IsOpened());
698 if ( CSO->FindAttribute(anAttr, "AttributeTextColor") ) {
699 aTextColor = SALOMEDS::AttributeTextColor::_narrow(anAttr);
700 QColor aColor((int)(aTextColor->TextColor().R), (int)(aTextColor->TextColor().G), (int)(aTextColor->TextColor().B)) ;
701 Item->setTextColor(aColor);
703 // TextHighlightColor
704 if ( CSO->FindAttribute(anAttr, "AttributeTextHighlightColor") ) {
705 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow(anAttr);
706 QColor aColor((int)(aTextHighlightColor->TextHighlightColor().R),
707 (int)(aTextHighlightColor->TextHighlightColor().G),
708 (int)(aTextHighlightColor->TextHighlightColor().B)) ;
709 Item->setTextHighlightColor(aColor);
712 if ( CSO->FindAttribute(anAttr, "AttributePixMap") ) {
713 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
714 if ( aPixmap->HasPixMap() ) {
715 SALOMEDS::SComponent_var father = CSO->GetFatherComponent();
716 if (father->FindAttribute(anAttr, "AttributeName") ) {
717 SALOMEDS::AttributeName_var aFatherName;
718 aFatherName = SALOMEDS::AttributeName::_narrow(anAttr);
721 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
723 if(resMgr->loadResources( QString(aFatherName->Value()) + "GUI", msg )) {
724 QPixmap icon ( resMgr->loadPixmap( QString(aFatherName->Value()) + "GUI",
725 tr(aPixmap->GetPixMap()) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ));
726 Item->setPixmap( 0, icon );
734 // if ( theParentItem->isOpen() )
735 // Item->setOpen(TRUE);
743 Updates Object Browser tree and UseCase Browser tree
745 void QAD_ObjectBrowser::Update()
747 int xc = myListView->contentsX();
748 int yc = myListView->contentsY();
749 myListView->viewport()->setUpdatesEnabled( false );
752 myListViewMap.clear();
754 if ( myStudy->_is_nil() ) {
758 QString ShowIAPP = QAD_CONFIG->getSetting("ObjectBrowser:IAPP");
760 /* Updating Object Browser ============================================== */
761 SALOMEDS::SComponentIterator_var itcomp = myStudy->NewComponentIterator();
762 for (; itcomp->More(); itcomp->Next()) {
763 QAD_ObjectBrowserItem* Item = 0;
764 SALOMEDS::SComponent_var SC = itcomp->Value();
765 QString dataType = strdup( SC->ComponentDataType() );
767 QString SCEntry = strdup( SC->GetID() );
769 SALOMEDS::GenericAttribute_var anAttr;
770 SALOMEDS::AttributeName_var aName;
771 SALOMEDS::AttributeComment_var aCmnt;
772 SALOMEDS::AttributeIOR_var anIOR;
773 SALOMEDS::AttributeReal_var aReal;
774 SALOMEDS::AttributeInteger_var anInt;
775 SALOMEDS::AttributeSelectable_var aSelectable;
776 SALOMEDS::AttributeExpandable_var anExpandable;
777 SALOMEDS::AttributeOpened_var anOpened;
778 SALOMEDS::AttributePixMap_var aPixmap;
779 SALOMEDS::AttributeTextColor_var aTextColor;
780 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
782 if (SC->FindAttribute(anAttr, "AttributeIOR")) {
783 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
784 ior = strdup( anIOR->Value() );
787 bool caseIAPP = false;
789 // create data-tree item, corresponding to component (and set name if component has it)
790 if ( dataType.compare("Interface Applicative") == 0 ) {
792 if ( ShowIAPP.compare("true") == 0 ) {
793 if (SC->FindAttribute(anAttr, "AttributeName")) {
794 aName = SALOMEDS::AttributeName::_narrow(anAttr);
795 Item = AddItem (myListView, strdup( aName->Value() ), strdup( SCEntry ), ior, 1, "");
796 myListViewMap[ SCEntry ].append( Item );
799 Item = AddItem (myListView, dataType, SCEntry, ior, 1, "");
800 myListViewMap[ SCEntry ].append( Item );
807 if (SC->FindAttribute(anAttr, "AttributeName")) {
808 aName = SALOMEDS::AttributeName::_narrow(anAttr);
809 Item = AddItem (myListView, strdup( aName->Value() ), SCEntry, ior, 1, "");
810 myListViewMap[ SCEntry ].append( Item );
813 /*In according to CAF - any label (even if it is empty) exist during to whole session.
814 So, if label haven't an "AttributeName" it is means that the label is empty.
815 Therefore follow action couses bug -
816 Item = AddItem (myListView, dataType, SC->GetID(), ior, 1, "");
820 // add other attributes
822 QAD_ObjectBrowserItem* subItem;
824 if ( SC->FindAttribute(anAttr, "AttributeSelectable") ) {
825 aSelectable = SALOMEDS::AttributeSelectable::_narrow(anAttr);
826 Item->setSelectable(aSelectable->IsSelectable());
829 if ( SC->FindAttribute(anAttr, "AttributeExpandable") ) {
830 anExpandable = SALOMEDS::AttributeExpandable::_narrow(anAttr);
831 Item->setExpandable(anExpandable->IsExpandable());
834 if ( SC->FindAttribute(anAttr, "AttributeOpened") ) {
835 anOpened = SALOMEDS::AttributeOpened::_narrow(anAttr);
836 Item->setOpen(anOpened->IsOpened());
839 if ( SC->FindAttribute(anAttr, "AttributeTextColor") ) {
840 aTextColor = SALOMEDS::AttributeTextColor::_narrow(anAttr);
841 QColor aColor((int)(aTextColor->TextColor().R), (int)(aTextColor->TextColor().G), (int)(aTextColor->TextColor().B)) ;
842 Item->setTextColor(aColor);
844 // TextHighlightColor
845 if ( SC->FindAttribute(anAttr, "AttributeTextHighlightColor") ) {
846 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow(anAttr);
847 QColor aColor((int)(aTextHighlightColor->TextHighlightColor().R),
848 (int)(aTextHighlightColor->TextHighlightColor().G),
849 (int)(aTextHighlightColor->TextHighlightColor().B)) ;
850 Item->setTextHighlightColor(aColor);
854 if ( SC->FindAttribute(anAttr, "AttributePixMap") ) {
855 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
856 if ( aPixmap->HasPixMap() ) {
858 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
860 MESSAGE ( " Component " << aName->Value() )
861 MESSAGE ( " Icon " << aPixmap->GetPixMap() )
862 if(resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString(aName->Value())), msg )) {
863 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString(aName->Value())),
864 tr(aPixmap->GetPixMap()) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ));
865 Item->setPixmap( 0, icon );
871 if ( strcmp(dataType, TypeComponent) == 0 )
874 if ( caseIAPP && ShowIAPP.compare("true") == 0 )
881 myListView->setContentsPos(xc,yc);
883 myListView->viewport()->setUpdatesEnabled( true );
884 myListView->viewport()->repaint( false );
885 /* Updating UseCase Browser ============================================= */
886 if ( this->count() > 1 )
887 UpdateUseCaseBrowser();
891 Removes item with all childs from the map - used to optimize UseCase browser update
893 void removeFromMap( ItemMap& theMap, QAD_ObjectBrowserItem* item )
896 QAD_ObjectBrowserItem* subItem = ( QAD_ObjectBrowserItem* )( item->firstChild() );
898 removeFromMap( theMap, subItem );
899 subItem = ( QAD_ObjectBrowserItem* )( subItem->nextSibling() );
901 if ( theMap.contains( item->getEntry() ) ) {
902 theMap[ item->getEntry() ].removeRef( item );
903 if ( theMap[ item->getEntry() ].isEmpty() ) {
904 theMap.remove( item->getEntry() );
911 Updates only UseCase Browser
913 void QAD_ObjectBrowser::UpdateUseCaseBrowser() {
914 // myUseCaseView->clear(); myUseCaseMap.clear();
915 if ( myStudy->_is_nil() || this->count()<2 ) {
918 myUseCaseView->blockSignals( true );
919 // myUseCaseView->setUpdatesEnabled( false );
921 QAD_ObjectBrowserItem* root = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild();
922 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
923 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
924 QString UCName = QString( strdup( UCBuilder->GetName() ) );
925 if ( UCName.isEmpty() )
926 UCName = QString( tr( "Root" ) );
927 // creating root item if is not yet created
929 root = AddItem( myUseCaseView, UCName, "0:2", "", 1, "" );
930 myUseCaseMap[ "0:2" ].append( root );
933 root->setName( UCName );
934 // setting it current if necessary
935 root->setCurrent( SOCurrent->_is_nil() || !strcmp( SOCurrent->GetID(), "0:2" ) );
936 // updating list view...
937 QMap<QString,SALOMEDS::SObject_var> ucList;
938 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( SALOMEDS::SObject::_nil() );
939 if ( !UCIter->_is_nil() ) {
940 for ( ; UCIter->More(); UCIter->Next() ) {
941 SALOMEDS::SObject_var UCObject = UCIter->Value();
942 QString UCEntry = strdup( UCObject->GetID() );
943 ucList[ UCEntry ] = UCObject;
946 // ... 1) delete removed items
947 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )root->firstChild();
948 while ( childItem ) {
949 QAD_ObjectBrowserItem* prevItem = childItem;
950 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
951 if ( !ucList.contains( prevItem->getEntry() ) ) {
952 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
953 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
954 // myUseCaseMap.remove( prevItem->getEntry() );
955 removeFromMap( myUseCaseMap, prevItem );
959 // ... 2) create/update existing
960 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
961 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
962 UpdateUCItem( it.data(), root );
964 myUseCaseView->blockSignals( false );
965 // myUseCaseView->setUpdatesEnabled( true );
966 // myUseCaseView->update();
967 // UCItem->setOpen( true );
971 Updates UseCase Browser's item
973 void QAD_ObjectBrowser::UpdateUCItem( SALOMEDS::SObject_var UCObject, QAD_ObjectBrowserItem* UCItem )
975 if ( myStudy->_is_nil() || !UCItem )
978 /* Creating SObjects item */
979 SALOMEDS::SObject_var RefSO;
980 SALOMEDS::GenericAttribute_var anAttr;
981 SALOMEDS::AttributeName_var aName;
982 SALOMEDS::AttributeIOR_var anIOR;
983 SALOMEDS::AttributeSelectable_var aSelectable;
984 SALOMEDS::AttributeExpandable_var anExpandable;
985 SALOMEDS::AttributePixMap_var aPixmap;
986 SALOMEDS::AttributeTextColor_var aTextColor;
987 SALOMEDS::AttributeTextHighlightColor_var aTextHighlightColor;
990 QString UCEntry = strdup( UCObject->GetID() );
992 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
993 SALOMEDS::SObject_var SOCurrent = UCBuilder->GetCurrentObject();
996 QAD_ObjectBrowserItem* UCSubItem = 0;
997 if ( myUseCaseMap.contains( UCEntry ) && myUseCaseMap[ UCEntry ].count() > 0 )
998 UCSubItem = myUseCaseMap[ UCEntry ].first();
1001 if ( UCObject->ReferencedObject( RefSO ) && !RefSO->_is_nil() ) {
1002 QString RefSOEntry = strdup( RefSO->GetID() );
1003 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) || RefSO->FindAttribute( anAttr, "AttributeName" ) ) {
1004 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1005 if ( RefSO->FindAttribute( anAttr, "AttributeIOR" ) ) {
1006 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1007 ior = strdup( anIOR->Value() );
1009 valueString = getValueFromObject( RefSO );
1011 UCSubItem = AddItem( UCItem,
1012 QString( " * " ) + strdup( aName->Value() ),
1018 myUseCaseMap[ RefSOEntry ].append( UCSubItem );
1021 UCSubItem->setName( QString( " * " ) + strdup( aName->Value() ) );
1022 UCSubItem->setEntry( RefSOEntry );
1023 UCSubItem->setIOR( ior );
1024 UCSubItem->setReference( UCEntry );
1025 UCSubItem->setValue( valueString );
1027 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1032 valueString = getValueFromObject( UCObject );
1034 if ( UCObject->FindAttribute( anAttr, "AttributeIOR" ) ) {
1035 anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
1036 ior = strdup( anIOR->Value() );
1038 // getting Name and adding new Item
1039 if ( UCObject->FindAttribute( anAttr, "AttributeName" ) ) {
1040 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1042 UCSubItem = AddItem( UCItem, strdup( aName->Value() ), UCEntry, ior, 0, "", valueString );
1043 myUseCaseMap[ UCEntry ].append( UCSubItem );
1046 UCSubItem->setName( strdup( aName->Value() ) );
1047 UCSubItem->setEntry( UCEntry );
1048 UCSubItem->setIOR( ior );
1049 UCSubItem->setReference( "" );
1050 UCSubItem->setValue( valueString );
1053 // adding other attributes
1055 UCSubItem->setCurrent( !SOCurrent->_is_nil() && QString( SOCurrent->GetID() ) == QString( UCEntry ) );
1057 // if ( UCObject->FindAttribute( anAttr, "AttributeSelectable" ) ) {
1058 // aSelectable = SALOMEDS::AttributeSelectable::_narrow( anAttr );
1059 // UCSubItem->setSelectable( aSelectable->IsSelectable() );
1062 // if ( UCObject->FindAttribute( anAttr, "AttributeExpandable" ) ) {
1063 // anExpandable = SALOMEDS::AttributeExpandable::_narrow( anAttr );
1064 // UCSubItem->setExpandable( anExpandable->IsExpandable() );
1067 if ( UCObject->FindAttribute(anAttr, "AttributeTextColor" ) ) {
1068 aTextColor = SALOMEDS::AttributeTextColor::_narrow( anAttr );
1069 QColor aColor( (int)(aTextColor->TextColor().R),
1070 (int)(aTextColor->TextColor().G),
1071 (int)(aTextColor->TextColor().B) );
1072 UCSubItem->setTextColor( aColor );
1074 // TextHighlightColor
1075 if ( UCObject->FindAttribute( anAttr, "AttributeTextHighlightColor" ) ) {
1076 aTextHighlightColor = SALOMEDS::AttributeTextHighlightColor::_narrow( anAttr );
1077 QColor aColor( (int)(aTextHighlightColor->TextHighlightColor().R),
1078 (int)(aTextHighlightColor->TextHighlightColor().G),
1079 (int)(aTextHighlightColor->TextHighlightColor().B) );
1080 UCSubItem->setTextHighlightColor( aColor );
1083 if ( UCObject->FindAttribute( anAttr, "AttributePixMap" ) ) {
1084 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
1085 if ( aPixmap->HasPixMap() ) {
1086 SALOMEDS::SComponent_var father = UCObject->GetFatherComponent();
1087 if ( father->FindAttribute( anAttr, "AttributeName" ) ) {
1088 SALOMEDS::AttributeName_var aFatherName;
1089 aFatherName = SALOMEDS::AttributeName::_narrow( anAttr );
1090 QAD_ResourceMgr* resMgr = QAD_Desktop::getResourceManager();
1093 if( resMgr->loadResources( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )), msg ) ) {
1094 QPixmap icon ( resMgr->loadPixmap( QAD_Application::getDesktop()->getComponentName(QString( aFatherName->Value() )),
1095 tr( aPixmap->GetPixMap() ) /*tr( "ICON_OBJBROWSER_" + theComponent )*/ ) );
1096 UCSubItem->setPixmap( 0, icon );
1105 // updating children ...
1106 QMap<QString,SALOMEDS::SObject_var> ucList;
1107 SALOMEDS::UseCaseIterator_var UCIter = UCBuilder->GetUseCaseIterator( UCObject );
1108 if ( !UCIter->_is_nil() ) {
1109 for ( ; UCIter->More(); UCIter->Next() ) {
1110 SALOMEDS::SObject_var UCSubObject = UCIter->Value();
1111 QString UCSubEntry = strdup( UCSubObject->GetID() );
1112 ucList[ UCSubEntry ] = UCSubObject;
1115 // ... 1) delete removed items
1116 QAD_ObjectBrowserItem* childItem = ( QAD_ObjectBrowserItem* )UCSubItem->firstChild();
1117 while ( childItem ) {
1118 QAD_ObjectBrowserItem* prevItem = childItem;
1119 childItem = ( QAD_ObjectBrowserItem* )childItem->nextSibling();
1120 if ( !ucList.contains( prevItem->getEntry() ) ) {
1121 // myUseCaseMap[ prevItem->getEntry() ].removeRef( prevItem );
1122 // if ( myUseCaseMap[ prevItem->getEntry() ].isEmpty() )
1123 // myUseCaseMap.remove( prevItem->getEntry() );
1124 removeFromMap( myUseCaseMap, prevItem );
1128 // ... 2) create/update existing
1129 QMap<QString,SALOMEDS::SObject_var>::Iterator it;
1130 for ( it = ucList.begin(); it != ucList.end(); ++it ) {
1131 UpdateUCItem( it.data(), UCSubItem );
1137 Unhighlights all items
1139 void QAD_ObjectBrowser::unHighlightAll()
1141 myListView->clearSelection();
1142 myUseCaseView->clearSelection();
1146 Highlights items which refer to object
1148 void QAD_ObjectBrowser::highlight( const Handle(SALOME_InteractiveObject)& IObject, bool highlight )
1150 QList<QAD_ObjectBrowserItem> List;
1151 if (getItems(IObject, List)) {
1152 for (int i = 0; i < List.count(); i++) {
1153 List.at(i)->setSelected( highlight );
1154 List.at(i)->repaint();
1160 Gets items from Object Browser which refer to object
1162 bool QAD_ObjectBrowser::getItems( const Handle(SALOME_InteractiveObject)& IObject,
1163 QList<QAD_ObjectBrowserItem>& List)
1166 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1167 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1168 for ( int i = 0; i < ilist.count(); i++ )
1169 List.append( ilist.at(i) );
1171 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1172 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1173 for ( int i = 0; i < ilist.count(); i++ )
1174 List.append( ilist.at(i) );
1176 return (List.count() > 0);
1180 Gets items from Object Browser which refer to object
1182 bool QAD_ObjectBrowser::getItems( SALOMEDS::SObject_ptr SO,
1183 QList<QAD_ObjectBrowserItem>& List)
1186 if ( myListViewMap.contains( SO->GetID() ) ) {
1187 ItemList ilist = myListViewMap[ SO->GetID() ];
1188 for ( int i = 0; i < ilist.count(); i++ )
1189 List.append( ilist.at(i) );
1191 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1192 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1193 for ( int i = 0; i < ilist.count(); i++ )
1194 List.append( ilist.at(i) );
1196 return (List.count() > 0);
1200 Gets first item from Object Browser which refers to object (not reference)
1202 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( const Handle(SALOME_InteractiveObject)& IObject )
1204 if ( myListViewMap.contains( IObject->getEntry() ) ) {
1205 ItemList ilist = myListViewMap[ IObject->getEntry() ];
1206 for ( int i = 0; i < ilist.count(); i++ ) {
1207 QString aRef = ilist.at(i)->getReference();
1208 if ( ilist.at(i)->getReference().isEmpty() )
1216 Finds item from Object Browser corresponding to Object, returns 0 if fails
1218 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getItem( SALOMEDS::SObject_ptr SO )
1220 if ( myListViewMap.contains( SO->GetID() ) ) {
1221 ItemList ilist = myListViewMap[ SO->GetID() ];
1222 for ( int i = 0; i < ilist.count(); i++ ) {
1223 QString aRef = ilist.at(i)->getReference();
1224 if ( ilist.at(i)->getReference().isEmpty() )
1233 Gets first item from UseCase Browser which refers to object (not reference)
1235 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( const Handle(SALOME_InteractiveObject)& IObject )
1237 if ( myUseCaseMap.contains( IObject->getEntry() ) ) {
1238 ItemList ilist = myUseCaseMap[ IObject->getEntry() ];
1239 for ( int i = 0; i < ilist.count(); i++ ) {
1240 QString aRef = ilist.at(i)->getReference();
1241 if ( ilist.at(i)->getReference().isEmpty() )
1249 Finds item from UseCase Browser corresponding to Object, returns 0 if fails
1251 QAD_ObjectBrowserItem* QAD_ObjectBrowser::getUCItem( SALOMEDS::SObject_ptr SO )
1253 if ( myUseCaseMap.contains( SO->GetID() ) ) {
1254 ItemList ilist = myUseCaseMap[ SO->GetID() ];
1255 for ( int i = 0; i < ilist.count(); i++ ) {
1256 QString aRef = ilist.at(i)->getReference();
1257 if ( ilist.at(i)->getReference().isEmpty() )
1264 Finds item corresponding to interactive object, returns 0 if fails
1266 void QAD_ObjectBrowser::rename( const Handle(SALOME_InteractiveObject)& IObject, QString newName )
1268 QAD_ObjectBrowserItem* item = getItem( IObject );
1270 item->setName( newName );
1273 item = getUCItem( IObject );
1275 item->setName( newName );
1281 Creates and show specific Popup to this according to current selection (Object Browser)
1283 void QAD_ObjectBrowser::showPopupMenu(QListViewItem* theItem)
1285 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1286 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1287 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1289 if (theItem != NULL && ( Sel->IObjectCount()>0 || ActiveComp.isEmpty() ) ) {
1293 QAD_Tools::checkPopup( myPopup );
1294 if ( myPopup->count()>0 ) {
1295 myPopup->exec( QCursor::pos() );
1303 Creates and show specific Popup to this according to current selection (UseCase Browser)
1305 void QAD_ObjectBrowser::showUseCasePopupMenu(QListViewItem* theItem)
1309 QAD_Tools::checkPopup( myPopup );
1310 if ( myPopup->count() > 0 ) {
1311 myPopup->exec( QCursor::pos() );
1318 Called when current selection was changed (Object Browser)
1320 void QAD_ObjectBrowser::onSelectedItem()
1322 if (currentPage()==myListView)
1323 myUseCaseView->clearSelection();
1326 if ( sender()->inherits("QListView") )
1327 whoIs = (QListView*)sender();
1330 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1331 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1332 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1333 QAD_Application* myApp = QAD_Application::getDesktop()->getActiveApp();
1335 SALOME_ListIO DeltaPos;
1337 SALOME_ListIO DeltaNeg;
1340 QListViewItemIterator it( whoIs );
1341 for ( ; it.current(); ++it ) {
1342 QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)it.current();
1343 QString theEntry = item->getEntry();
1344 QString theName = item->getName();
1345 QString theRef = item->getReference();
1347 if ( !theEntry.isEmpty() ) {
1348 if ( item->isSelected() ) {
1349 bool itemAlreadySelected = false;
1351 SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
1352 for(;It.More();It.Next()) {
1353 Handle(SALOME_InteractiveObject) IO = It.Value();
1354 if ( strcmp ( IO->getEntry(), theEntry ) == 0 ) {
1355 itemAlreadySelected = true;
1360 if (!itemAlreadySelected) {
1361 Handle(SALOME_InteractiveObject) newIO;
1362 SALOMEDS::SObject_var obj = aStudy->FindObjectID( theEntry.latin1() );
1363 if ( !obj->_is_nil() ) {
1364 SALOMEDS::SComponent_var comp = obj->GetFatherComponent();
1365 if ( !comp->_is_nil() ) {
1366 Standard_CString datatype = comp->ComponentDataType();
1367 newIO = new SALOME_InteractiveObject( strdup(theEntry),
1370 newIO->setReference( strdup(theRef) );
1373 newIO = new SALOME_InteractiveObject( strdup(theEntry),
1376 newIO->setReference( strdup(theRef) );
1378 if (!newIO.IsNull()) {
1379 DeltaPos.Append( newIO );
1383 SALOME_ListIteratorOfListIO It1( Sel->StoredIObjects() );
1384 for(;It1.More();It1.Next()) {
1385 Handle(SALOME_InteractiveObject) IO = It1.Value();
1386 if ( strcmp( IO->getEntry(), item->getEntry() ) == 0 ) {
1387 DeltaNeg.Append( IO );
1395 SALOME_ListIteratorOfListIO ItNeg( DeltaNeg );
1396 for(;ItNeg.More();ItNeg.Next()) {
1397 Sel->RemoveIObject( ItNeg.Value() );
1400 SALOME_ListIteratorOfListIO ItPos( DeltaPos );
1401 for(;ItPos.More();ItPos.Next()) {
1402 Sel->AddIObject( ItPos.Value() );
1405 myApp->updateActions();
1409 Called when selection is changed (UseCase Browser)
1411 void QAD_ObjectBrowser::onUseCaseSelectedItem()
1416 Called when item is expanded
1418 void QAD_ObjectBrowser::onExpanded (QListViewItem* item)
1420 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1421 if (!myStudy->_is_nil() && aItem)
1423 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1424 if (!Object->_is_nil())
1426 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1427 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1428 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1429 anAttr->SetOpened(true);
1435 Called when item is collapsed
1437 void QAD_ObjectBrowser::onCollapsed(QListViewItem* item)
1439 QAD_ObjectBrowserItem* aItem = (QAD_ObjectBrowserItem*)item;
1440 if (!myStudy->_is_nil() && aItem)
1442 SALOMEDS::SObject_var Object = myStudy->FindObjectID(aItem->getEntry());
1443 if (!Object->_is_nil())
1445 SALOMEDS::StudyBuilder_var StudyBuilder = myStudy->NewBuilder();
1446 SALOMEDS::AttributeOpened_var anAttr = SALOMEDS::AttributeOpened::_narrow(
1447 StudyBuilder->FindOrCreateAttribute(Object, "AttributeOpened") );
1448 anAttr->SetOpened(false);
1454 Find and returns value for the object
1455 Warning: object can have several values attributes, search is done in the following order:
1456 [integer], [real], [table of integer], [table of real], [comment]
1458 QString QAD_ObjectBrowser::getValueFromObject( SALOMEDS::SObject_ptr SO )
1460 if ( SO->_is_nil() )
1461 return QString::null;
1462 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1463 if ( !isComponent->_is_nil() )
1464 return QString::null; // no values to show for components
1466 SALOMEDS::GenericAttribute_var anAttr;
1467 SALOMEDS::AttributeInteger_var anInt;
1468 SALOMEDS::AttributeReal_var aReal;
1469 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1470 SALOMEDS::AttributeTableOfReal_var aTableReal;
1471 SALOMEDS::AttributeComment_var aComment;
1474 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1475 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1476 QString val = QString::number( anInt->Value() );
1480 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1481 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1482 QString val = QString::number( aReal->Value() );
1486 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1487 aTableInt = SALOMEDS::AttributeTableOfInteger::_narrow( anAttr );
1488 QString tlt = QString( strdup( aTableInt->GetTitle() ) );
1489 if ( !tlt.isEmpty() )
1491 int nbRows = aTableInt->GetNbRows() ;
1492 int nbCols = aTableInt->GetNbColumns();
1493 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1497 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1498 aTableReal = SALOMEDS::AttributeTableOfReal::_narrow( anAttr );
1499 QString tlt = QString( strdup( aTableReal->GetTitle() ) );
1500 if ( !tlt.isEmpty() )
1502 int nbRows = aTableReal->GetNbRows() ;
1503 int nbCols = aTableReal->GetNbColumns();
1504 QString val = tlt + QString( "[" ) + QString::number( nbRows ) + QString( "," ) + QString::number( nbCols ) + QString( "]" );
1508 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1509 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1510 QString val = QString( strdup( aComment->Value() ) );
1513 return QString::null;
1517 Shows/hides IAPP sub-tree in ObjectBrowser
1518 Current implementation just udpates browser
1520 void QAD_ObjectBrowser::setShowIAPP( bool show )
1526 Shows/hides info columns: Entry, IOR, Reference
1528 void QAD_ObjectBrowser::setShowInfoColumns( bool show )
1530 bool shown = myListView->header()->isResizeEnabled( 2 );
1532 if ( show != shown ) {
1534 myListView->header()->setResizeEnabled( true, 2 );
1535 myListView->header()->setResizeEnabled( true, 3 );
1536 myListView->header()->setResizeEnabled( true, 4 );
1537 myListView->setColumnWidthMode( 2, QListView::Maximum );
1538 myListView->setColumnWidthMode( 3, QListView::Maximum );
1539 myListView->setColumnWidthMode( 4, QListView::Maximum );
1540 if ( myListView->columnWidth( 2 ) <= 0 )
1541 myListView->header()->resizeSection( 2, 50 );
1542 if ( myListView->columnWidth( 3 ) <= 0 )
1543 myListView->header()->resizeSection( 3, 50 );
1544 if ( myListView->columnWidth( 4 ) <= 0 )
1545 myListView->header()->resizeSection( 4, 50 );
1548 myListView->setColumnWidthMode( 2, QListView::Manual );
1549 myListView->setColumnWidthMode( 3, QListView::Manual );
1550 myListView->setColumnWidthMode( 4, QListView::Manual );
1551 myListView->header()->resizeSection( 2, 0 );
1552 myListView->header()->resizeSection( 3, 0 );
1553 myListView->header()->resizeSection( 4, 0 );
1554 myListView->header()->setResizeEnabled( false, 2 );
1555 myListView->header()->setResizeEnabled( false, 3 );
1556 myListView->header()->setResizeEnabled( false, 4 );
1562 Shows/hides Value column
1564 void QAD_ObjectBrowser::setShowValueColumn( bool show )
1566 bool shown = myListView->header()->isResizeEnabled( 1 );
1568 if ( show != shown ) {
1570 myListView->header()->setResizeEnabled( true, 1 );
1571 myListView->setColumnWidthMode( 1, QListView::Maximum );
1572 if ( myListView->columnWidth( 1 ) <= 0 )
1573 myListView->header()->resizeSection( 1, 50 );
1576 myListView->setColumnWidthMode( 1, QListView::Manual );
1577 myListView->header()->resizeSection( 1, 0 );
1578 myListView->header()->setResizeEnabled( false, 1 );
1584 Sets CHRONO sorting enabled/disabled
1585 Note: when CHRONO sorting is enabled items are sorted by Entry value and column headers
1586 become unclickable to prohibit another sort type;
1587 when CHRONO sorting is disabled column headers become clickable - this allows
1588 to sort data by any column
1590 void QAD_ObjectBrowser::setEnableChronoSort( bool enable )
1593 // if CHRONO sorting is enabled set clickable header disabled ...
1594 myListView->header()->setClickEnabled( false );
1595 // ... and then sort by column 2 - OCAF doc entry
1596 myListView->setSorting( 2, TRUE ) ;
1599 // if CHRONO sorting is enabled set clickable header enabled ...
1600 myListView->header()->setClickEnabled( true );
1601 // and clear sorting by column 2
1602 myListView->setSorting( 10, TRUE );
1604 // myListView->sort( ) ;
1608 Slot, called to edit value
1610 void QAD_ObjectBrowser::onEditAttribute()
1612 QAD_Study* myActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
1613 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1614 QString ActiveComp = QAD_Application::getDesktop()->getActiveComponent();
1615 if ( myStudy->_is_nil() )
1618 if ( Sel->IObjectCount() == 1 ) {
1619 SALOMEDS::SObject_var SO = myStudy->FindObjectID( Sel->firstIObject()->getEntry() );
1620 SALOMEDS::SComponent_var isComponent = SALOMEDS::SComponent::_narrow( SO );
1621 if ( !SO->_is_nil() && isComponent->_is_nil() ) { // no values to show for components
1622 SALOMEDS::GenericAttribute_var anAttr;
1623 SALOMEDS::AttributeInteger_var anInt;
1624 SALOMEDS::AttributeReal_var aReal;
1625 SALOMEDS::AttributeTableOfInteger_var aTableInt;
1626 SALOMEDS::AttributeTableOfReal_var aTableReal;
1627 SALOMEDS::AttributeComment_var aComment;
1631 if ( SO->FindAttribute( anAttr, "AttributeInteger" ) ) {
1632 anInt = SALOMEDS::AttributeInteger::_narrow( anAttr );
1633 int val = SALOMEGUI_SetValueDlg::getInteger( tr( "SET_VALUE_INT_TLT" ),
1634 tr( "SET_VALUE_INT_LBL" ),
1637 QAD_Application::getDesktop() );
1639 anInt->SetValue( val );
1644 if ( SO->FindAttribute( anAttr, "AttributeReal" ) ) {
1645 aReal = SALOMEDS::AttributeReal::_narrow( anAttr );
1646 double val = SALOMEGUI_SetValueDlg::getDouble( tr( "SET_VALUE_REAL_TLT" ),
1647 tr( "SET_VALUE_REAL_LBL" ),
1650 QAD_Application::getDesktop() );
1652 aReal->SetValue( val );
1655 // if Table of integer
1657 if ( SO->FindAttribute( anAttr, "AttributeTableOfInteger" ) ) {
1658 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1661 SALOMEGUI_TableDlg::ttInt );
1662 bOk = ( dlg->exec() == QDialog::Accepted );
1666 if ( SO->FindAttribute( anAttr, "AttributeTableOfReal" ) ) {
1667 SALOMEGUI_TableDlg* dlg = new SALOMEGUI_TableDlg( QAD_Application::getDesktop(),
1670 SALOMEGUI_TableDlg::ttReal );
1671 bOk = ( dlg->exec() == QDialog::Accepted );
1675 if ( SO->FindAttribute(anAttr, "AttributeComment") ) {
1676 aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
1677 QString val = SALOMEGUI_SetValueDlg::getString( tr( "SET_VALUE_COMMENT_TLT" ),
1678 tr( "SET_VALUE_COMMENT_LBL" ),
1681 QAD_Application::getDesktop() );
1683 aComment->SetValue( val );
1694 Returns true if object has editable attrubute :
1695 integer, real, table or comment
1697 bool QAD_ObjectBrowser::hasEditableAttribute( const Handle(SALOME_InteractiveObject)& object )
1699 if ( !myStudy->_is_nil() ) {
1700 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1701 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1702 if ( !comp->_is_nil() || obj->_is_nil() )
1704 QString val = getValueFromObject( obj );
1705 return ( !val.isNull() );
1711 Returns true if object has table attrubute ( integer and/or real )
1713 bool QAD_ObjectBrowser::hasTable( const Handle(SALOME_InteractiveObject)& object )
1715 SALOMEDS::GenericAttribute_var anAttr;
1716 if ( !myStudy->_is_nil() ) {
1717 SALOMEDS::SObject_var obj = myStudy->FindObjectID( object->getEntry() );
1718 SALOMEDS::SComponent_var comp = myStudy->FindComponentID( object->getEntry() );
1719 if ( !comp->_is_nil() || obj->_is_nil() )
1721 if ( obj->FindAttribute( anAttr, "AttributeTableOfInteger" ) )
1723 if ( obj->FindAttribute( anAttr, "AttributeTableOfReal" ) )
1730 Slot, called when one of the UseCase Browser menu command is called
1732 void QAD_ObjectBrowser::onUseCasePopupMenu( int action )
1734 if ( myStudy->_is_nil() )
1736 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1737 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1738 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1739 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1740 SALOMEDS::SObject_var Current = UCBuilder->GetCurrentObject();
1742 QList<QListViewItem> ucSelected;
1743 ucSelected.setAutoDelete( false );
1744 getSelectedParents( myUseCaseView, ucSelected );
1746 if ( action == UC_NEW_EMPTY_ID ) {
1747 if ( ucSelected.count() == 1 ) {
1748 if ( isRootItem( ucSelected.at(0) ) )
1749 UCBuilder->SetRootCurrent();
1751 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1752 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1753 myActiveStudy->updateUseCaseBrowser();
1757 if ( action == UC_SET_CURRENT_ID ) {
1758 if ( ucSelected.count() > 0 ) {
1759 if ( isRootItem( ucSelected.at(0) ) )
1760 UCBuilder->SetRootCurrent();
1762 UCBuilder->SetCurrentObject( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) );
1764 myActiveStudy->updateUseCaseBrowser( );
1767 if ( action == UC_RENAME_ID ) {
1768 if ( ucSelected.count() == 1 ) {
1769 QAD_ObjectBrowserItem* useCaseItem = ( QAD_ObjectBrowserItem* )( ucSelected.at( 0 ) );
1770 if ( isRootItem( useCaseItem ) ) {
1771 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), strdup( UCBuilder->GetName() ) );
1772 if ( !name.isEmpty() ) {
1773 bool ok = UCBuilder->SetName( strdup( name.latin1() ) );
1774 myActiveStudy->updateUseCaseBrowser( );
1777 else/* if ( UCBuilder->IsUseCase( myStudy->FindObjectID( (( QAD_ObjectBrowserItem* )( ucSelected.at(0) ))->getEntry() ) ) )*/ {
1778 QString name = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), strdup( useCaseItem->getName() ) );
1779 if ( !name.isEmpty() ) {
1780 myActiveStudy->renameIObject( Sel->firstIObject(), name );
1786 if ( action == UC_APPEND_ID ) {
1787 if ( Sel->IObjectCount() > 0 ) {
1788 SALOME_ListIO SelIO; SelIO = Sel->StoredIObjects();
1789 SALOME_ListIteratorOfListIO SelIt( SelIO );
1790 for( ; SelIt.More(); SelIt.Next() ) {
1791 SALOMEDS::SObject_var selSO = myStudy->FindObjectID( SelIt.Value()->getEntry() );
1792 if ( !selSO->_is_nil() && strcmp( SelIt.Value()->getEntry(), ( "0:2" ) ) != 0 ) {
1793 UCBuilder->Remove( selSO ); // first remove object for sure ...
1794 UCBuilder->Append( selSO ); // ... and now re-append it
1797 myActiveStudy->updateUseCaseBrowser( true );
1801 if ( action == UC_REMOVE_ID ) {
1803 getSelectedParents( myUseCaseView, ucSelected, true );
1804 for ( int i = 0; i < ucSelected.count(); i++ ) {
1805 QAD_ObjectBrowserItem* item = ( QAD_ObjectBrowserItem* )ucSelected.at( i );
1806 if ( !isRootItem( item ) ) {
1808 SALOMEDS::SObject_var SO = myStudy->FindObjectID( item->getEntry() );
1809 if ( !SO->_is_nil() ) {
1810 UCBuilder->Remove( SO );
1816 Sel->ClearIObjects();
1817 myActiveStudy->updateUseCaseBrowser( true );
1820 if ( action == UC_CLEAR_ID ) {
1821 if ( myUseCaseView->childCount() > 0 && myUseCaseView->firstChild()->childCount() > 0) {
1822 QAD_ObjectBrowserItem* child = ( QAD_ObjectBrowserItem* )myUseCaseView->firstChild()->firstChild();
1824 UCBuilder->Remove( myStudy->FindObjectID( child->getEntry().latin1() ) );
1825 child = ( QAD_ObjectBrowserItem* )( child->nextSibling() );
1827 Sel->ClearIObjects();
1828 myActiveStudy->updateUseCaseBrowser();
1833 Use Case browser buttons slot
1835 void QAD_ObjectBrowser::onUseCaseBtn()
1837 if ( sender() == myNewBtn ) {
1838 QAD_Desktop* Desktop = (QAD_Desktop*) QAD_Application::getDesktop();
1839 QAD_Study* myActiveStudy = Desktop->getActiveStudy();
1840 SALOMEDS::UseCaseBuilder_var UCBuilder = myStudy->GetUseCaseBuilder();
1841 UCBuilder->AddUseCase( tr( "NEW_OBJECT" ) );
1842 myActiveStudy->updateUseCaseBrowser();
1844 if ( sender() == myAddBtn )
1845 onUseCasePopupMenu( UC_APPEND_ID );
1846 if ( sender() == myDelBtn )
1847 onUseCasePopupMenu( UC_REMOVE_ID );
1848 if ( sender() == myClearBtn )
1849 onUseCasePopupMenu( UC_CLEAR_ID );
1850 if ( sender() == myCurrentBtn )
1851 onUseCasePopupMenu( UC_SET_CURRENT_ID );
1855 Show/remove UseCase Browser
1858 void QAD_ObjectBrowser::showUseCaseBrowser ( bool show )
1860 bool shown = (this->count() > 1);
1866 this->addTab( myVBox, tr( "TLT_USECASE_BROWSER" ) );
1867 UpdateUseCaseBrowser();
1871 this->removePage(myVBox);
1876 Switch between auto resizing of columns and manual mode
1878 void QAD_ObjectBrowser::autoSizeColumns( bool autosize )
1882 for (int i = 0; i < myListView->header()->count(); i++ )
1883 if (myListView->header()->isResizeEnabled(i))
1884 myListView->setColumnWidthMode(i, QListView::Maximum);
1889 for (int i = 0; i < myListView->header()->count(); i++ )
1890 myListView->setColumnWidthMode(i, QListView::Manual);