]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
improvements for OSCARGUI
authorasl <asl@opencascade.com>
Fri, 17 Oct 2008 13:42:25 +0000 (13:42 +0000)
committerasl <asl@opencascade.com>
Fri, 17 Oct 2008 13:42:25 +0000 (13:42 +0000)
41 files changed:
src/CAM/CAM_DataObject.cxx
src/CAM/CAM_DataObject.h
src/DDS/DDS_DicGroup.cxx
src/DDS/DDS_DicGroup.h
src/DDS/DDS_DicItem.cxx
src/DDS/DDS_Dictionary.cxx
src/DDS/DDS_Dictionary.h
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Application.h
src/LightApp/LightApp_DataModel.cxx
src/LightApp/LightApp_DataModel.h
src/LightApp/LightApp_DataObject.cxx
src/LightApp/LightApp_DataObject.h
src/LightApp/LightApp_Module.cxx
src/LightApp/LightApp_Module.h
src/OCCViewer/Makefile.am
src/OCCViewer/OCCViewer_ToolTip.cxx [new file with mode: 0644]
src/OCCViewer/OCCViewer_ToolTip.h [new file with mode: 0644]
src/OCCViewer/OCCViewer_ViewManager.cxx
src/QDS/QDS_ComboBox.cxx
src/QDS/QDS_Datum.cxx
src/QDS/QDS_Datum.h
src/QDS/QDS_SpinBox.cxx
src/Qtx/Makefile.am
src/Qtx/Qtx.h
src/Qtx/QtxRubberBand.h
src/Qtx/QtxTreeView.cxx
src/Qtx/QtxTreeView.h
src/STD/STD_Application.h
src/SUIT/SUIT_Application.cxx
src/SUIT/SUIT_DataBrowser.cxx
src/SUIT/SUIT_DataBrowser.h
src/SUIT/SUIT_DataObject.cxx
src/SUIT/SUIT_DataObject.h
src/SUIT/SUIT_TreeModel.cxx
src/SUIT/SUIT_TreeModel.h
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/SalomeApp_Application.h
src/SalomeApp/SalomeApp_DataObject.cxx
src/SalomeApp/SalomeApp_DataObject.h
src/SalomeApp/resources/SalomeApp.xml

index 26ce74555c7bd1ed63ec01b155c661496b27e08d..016ac84d220d41d9d177664eb62391f7f2e22876 100755 (executable)
@@ -128,17 +128,16 @@ QString CAM_ModuleObject::name() const
 /*!
   \brief Get data object icon for the specified column.
 
-  The parameter \a index specifies the column number
-  (to display, for example, in the tree view widget).
+  The parameter \a id specifies the column identificator
 
-  \param index column index
+  \param id column id
   \return object icon for the specified column
 */
-QPixmap CAM_ModuleObject::icon( const int index ) const
+QPixmap CAM_ModuleObject::icon( const int id ) const
 {
   QPixmap p;
   // show icon only for the "Name" column
-  if ( index == NameIdx && dataModel() && dataModel()->module() )
+  if ( id == NameId && dataModel() && dataModel()->module() )
     p = dataModel()->module()->moduleIcon();
   if ( !p.isNull() )
     p = Qtx::scaleIcon( p, 16 );
@@ -148,13 +147,12 @@ QPixmap CAM_ModuleObject::icon( const int index ) const
 /*!
   \brief Get data object tooltip for the specified column.
 
-  The parameter \a index specifies the column number
-  (to display, for example, in the tree view widget).
+  The parameter \a id specifies the column identificator
 
-  \param index column index
+  \param id column id
   \return object tooltip for the specified column
 */
-QString CAM_ModuleObject::toolTip( const int /*index*/ ) const
+QString CAM_ModuleObject::toolTip( const int /*id*/ ) const
 {
   // show the same tooltip for all columns
   QString tip;
index 11bac528e3d99e0c7695ecaa2bee901c6fed0115..b211cefeeef71b16ac4e11614fb8c8cd99b523f2 100755 (executable)
@@ -44,8 +44,8 @@ public:
   virtual ~CAM_ModuleObject();
 
   virtual QString        name() const;
-  QPixmap                icon( const int = NameIdx ) const;
-  QString                toolTip( const int = NameIdx ) const;
+  QPixmap                icon( const int = NameId ) const;
+  QString                toolTip( const int = NameId ) const;
 
   virtual CAM_DataModel* dataModel() const;
   virtual void           setDataModel( CAM_DataModel* );
index 3bb337ad38d1d878432305557be777ca10125edf..bc7dbc3ac9e447fe7e4031296e06ec933882560f 100644 (file)
@@ -25,8 +25,6 @@
 
 #include <UnitsAPI.hxx>
 
-#include <TColStd_SequenceOfAsciiString.hxx>
-
 #include <Standard_Failure.hxx>
 #include <Standard_ErrorHandler.hxx>
 
@@ -153,6 +151,8 @@ void DDS_DicGroup::FillDataMap( const LDOM_Element& theComponentData, const LDOM
 
       if ( !myUnitSystem.IsBound( aName ) )
         myUnitSystem.Bind( aName, aLabel );
+
+
     }
   }
 
@@ -183,6 +183,16 @@ void DDS_DicGroup::FillDataMap( const LDOM_Element& theComponentData, const LDOM
     aDicItem->myComponent = this;
     aDicItem->FillDataMap( anID, aQuantity, theComponentData, theDocElement, unitSystems );
     myDataMap.Add( anID, aDicItem );
+
+    bool exist = false;
+    for( int i=1, n=myKeys.Length(); i<=n && !exist; i++ )
+      if( myKeys.Value( i )==anID )
+      {
+        cout << "Doubled key:" << anID << endl;
+        exist = true;
+      }
+    if( !exist )
+      myKeys.Append( anID );
   }
 }
 
@@ -203,3 +213,12 @@ Handle_DDS_DicItem DDS_DicGroup::GetDicItem( const TCollection_AsciiString& theI
 
   return aDicItem;
 }
+
+/*!
+  \brief Return all keys of the group
+  \param seq - string container to be filled with keys
+*/
+void DDS_DicGroup::GetKeys( TColStd_SequenceOfAsciiString& seq ) const
+{
+  seq = myKeys;
+}
index a804776eaac6d1b3bb550ed0bcaeafea6e002241..a9bebf0f42b7eb429bc6c202c26226f6cf76b424 100644 (file)
 #include "DDS_DicItem.h"
 
 #include <MMgt_TShared.hxx>
-
-#include <TCollection_AsciiString.hxx>
-
+#include <TColStd_SequenceOfAsciiString.hxx>
 #include <NCollection_List.hxx>
 
 class LDOM_Element;
-class TColStd_SequenceOfAsciiString;
 
 DEFINE_STANDARD_HANDLE(DDS_DicGroup, MMgt_TShared)
 
@@ -40,6 +37,7 @@ public:
   DDS_DicGroup( const TCollection_AsciiString& );
 
   TCollection_AsciiString                    GetName() const;
+  Standard_EXPORT void                       GetKeys( TColStd_SequenceOfAsciiString& ) const;
 
   Standard_EXPORT Handle(DDS_DicItem)        GetDicItem( const TCollection_AsciiString& ) const;
 
@@ -65,6 +63,7 @@ private:
   DDS_IndexedDataMapOfDicItems               myDataMap;
   UnitSystemMap                              myUnitSystem;
   TCollection_AsciiString                    myActiveSystem;
+  TColStd_SequenceOfAsciiString              myKeys;
 
   friend class DDS_Dictionary;
 
index 12a9427050a7e35a32fdb1fc6a07334604d40dee..4199463295194fc6703f5339a8bfa5634b3edce1 100644 (file)
@@ -826,21 +826,41 @@ void DDS_DicItem::FillDataMap( TCollection_AsciiString theID, const LDOM_Element
   LDOM_Element anOpt = theDatum.GetChildByTagName( DDS_Dictionary::KeyWord( "OPTIONS" ) );
   if ( !anOpt.isNull() )
   {
-    LDOM_NodeList anOptions = anOpt.getElementsByTagName( DDS_Dictionary::KeyWord( "OPTION" ) );
+    LDOM_NodeList anOptions = anOpt.GetAttributesList();//anOpt.getElementsByTagName( DDS_Dictionary::KeyWord( "OPTION" ) );
     for ( Standard_Integer oi = 0; oi < anOptions.getLength(); oi++ )
     {
       LDOM_Node node = anOptions.item( oi );
-      if ( node.getNodeType() != LDOM_Node::ELEMENT_NODE )
-        continue;
-
-      LDOM_Element& elem = (LDOM_Element&)node;
-      TCollection_AsciiString name = elem.getAttribute( DDS_Dictionary::KeyWord( "OPTION_NAME" ) );
+      LDOM_Node::NodeType t = node.getNodeType();
 
+      TCollection_AsciiString name;
       TCollection_ExtendedString value;
-      const LDOM_Node aNode = elem.getFirstChild();
-      LDOM_Text anOptTxt( (const LDOM_Text&)(aNode) );
-      if ( !anOptTxt.isNull() )
-        value = anOptTxt.getData();
+
+      if( t==LDOM_Node::ELEMENT_NODE )
+      {
+        const LDOM_Element& elem = ( const LDOM_Element& )node;
+        name = elem.getAttribute( DDS_Dictionary::KeyWord( "OPTION_NAME" ) );
+        
+        const LDOM_Node aNode = elem.getFirstChild();
+        LDOM_Text anOptTxt( (const LDOM_Text&)(aNode) );
+        if ( !anOptTxt.isNull() )
+          value = anOptTxt.getData();
+      }
+      else if( t==LDOM_Node::ATTRIBUTE_NODE )
+      {
+        const LDOM_Attr& attr = ( const LDOM_Attr& )node;
+        name = ( Standard_CString )attr.getName().GetString();
+        LDOMString v = attr.getValue();
+        if( v.Type()==LDOMBasicString::LDOM_Integer )
+        {
+               Standard_Integer ival;
+               v.GetInteger( ival );
+               value = TCollection_ExtendedString( ival );
+        }
+        else
+               value = ( Standard_CString )v.GetString();
+      }
+      else
+        continue;
 
       if ( !name.IsEmpty() && value.Length() && !myOptions.IsBound( name ) )
         myOptions.Bind( name, value );
index 25e6cdcb8a16691dd112af83df35e1aec83b007e..9baae9c7d4b55024886af54b9607d5c98a00c9fc 100644 (file)
@@ -587,3 +587,18 @@ Standard_Real DDS_Dictionary::FromSI( const Standard_Real theValue, const Standa
 
   return aRetValue;
 }
+
+/*!
+  \brief Fill given string container \a seq with keys belonging to group with name \a theComponent
+  \param theComponent name of group whose keys should be stored in the container
+  \param seq returned string container with keys belonging to group; it is not cleared before filling
+*/
+void DDS_Dictionary::GetKeys( const TCollection_AsciiString& theComponent, TColStd_SequenceOfAsciiString& seq ) const
+{
+  Handle( DDS_DicGroup ) aDicGroup;
+  if( myGroupMap.Contains( theComponent ) )
+    aDicGroup = myGroupMap.FindFromKey( theComponent );
+
+  if( !aDicGroup.IsNull() )
+    aDicGroup->GetKeys( seq );
+}
index 9a5d5a886620a378ac109de2ecb56f415ea4c658..2a264b48217fc91dd425eeb78301fefd220c81bc 100644 (file)
@@ -37,6 +37,8 @@ public:
 
   // Return instance of data dictionary. Create instance if it is NULL.
 
+  Standard_EXPORT void                           GetKeys( const TCollection_AsciiString&, TColStd_SequenceOfAsciiString& ) const;
+
   Standard_EXPORT Handle(DDS_DicItem)            GetDicItem( const TCollection_AsciiString& ) const;
   Standard_EXPORT Handle(DDS_DicItem)            GetDicItem( const TCollection_AsciiString&,
                                                              const TCollection_AsciiString& ) const;
index e69128175d0f6566ea6abfc65bd5a7c78850a0cb..4818feb39c5034d9e3c1ab5aeb9f2f9433861b44 100644 (file)
@@ -1282,10 +1282,11 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType
   {
     viewMgr = new OCCViewer_ViewManager( activeStudy(), desktop() );
     OCCViewer_Viewer* vm;
+       bool staticTrihedron = resMgr->booleanValue( "OCCViewer", "static_trihedron", true );
 #ifndef DISABLE_SALOMEOBJECT
     vm = new SOCC_Viewer();
 #else
-    vm = new OCCViewer_Viewer();
+    vm = new OCCViewer_Viewer( true, staticTrihedron );
 #endif
     vm->setBackgroundColor( resMgr->colorValue( "OCCViewer", "background", vm->backgroundColor() ) );
     vm->setTrihedronSize( resMgr->doubleValue( "OCCViewer", "trihedron_size", vm->trihedronSize() ) );
index 2f929ae94e4154512cf28323d28cd6b946063472..305246b4034287db8b87c5ae929b3a8d1ab7c6aa 100644 (file)
@@ -141,6 +141,8 @@ public:
 
   virtual bool                        checkDataObject( LightApp_DataObject* theObj );
 
+  virtual void                        updateDesktopTitle();
+
 signals:
   void                                studyOpened();
   void                                studySaved();
@@ -182,8 +184,6 @@ protected:
   virtual void                        loadPreferences();
   virtual void                        savePreferences();
 
-  virtual void                        updateDesktopTitle();
-
   virtual QMap<int, QString>          activateModuleActions() const;
   virtual void                        moduleActionSelected( const int );
 
index d78f3b3c1bbcb5780847a212b6f81f11d24d9c4e..5074d475fc054a8495ee7a40217ddfadef506dac 100644 (file)
@@ -27,6 +27,7 @@
 #include "LightApp_Module.h"
 #include "LightApp_Application.h"
 
+#include <SUIT_TreeModel.h>
 #include <SUIT_DataBrowser.h>
 #include <SUIT_DataObject.h>
 
@@ -36,6 +37,9 @@
 LightApp_DataModel::LightApp_DataModel( CAM_Module* theModule )
 : CAM_DataModel( theModule )
 {
+  myGroupId = 0;
+  if( module() )
+       myGroupId = qHash( module()->name() );
 }
 
 /*!
@@ -169,3 +173,36 @@ bool LightApp_DataModel::isSaved() const
 {
   return true;
 }
+
+/*!
+  \return data model group id used for custom columns creation
+*/
+int LightApp_DataModel::groupId() const
+{
+  return myGroupId;
+}
+
+/*!
+  Register custom column in the object browser
+  \param browser - object browser where new column should be created
+  \param name - translated column name
+  \param custom_id - custom column identificator passed into data object's methods text(), icon() etc
+*/
+void LightApp_DataModel::registerColumn( SUIT_DataBrowser* browser, const QString& name, const int custom_id )
+{
+  SUIT_AbstractModel* m = dynamic_cast<SUIT_AbstractModel*>( browser ? browser->model() : 0 );
+  if( m )
+    m->registerColumn( groupId(), name, custom_id );
+}
+
+/*!
+  Remove registered custom column from the object browser
+  \param browser - object browser where new column should be created
+  \param name - translated column name
+*/
+void LightApp_DataModel::unregisterColumn( SUIT_DataBrowser* browser, const QString& name )
+{
+  SUIT_AbstractModel* m = dynamic_cast<SUIT_AbstractModel*>( browser ? browser->model() : 0 );
+  if( m )
+       m->unregisterColumn( groupId(), name );
+}
index c2eb2d6e703e414b7950bf37efa5e1b007548007..8382700106e5c19cdb9f318ba04ad959a0f8558e 100644 (file)
@@ -34,6 +34,7 @@
 class LightApp_Module;
 class LightApp_Study;
 class LightApp_DataObject;
+class SUIT_DataBrowser;
 
 /*!
   Description : Base class of data model
@@ -58,6 +59,10 @@ public:
 
   LightApp_Module*                    getModule() const;
 
+  int  groupId() const;
+  void registerColumn( SUIT_DataBrowser*, const QString&, const int );
+  void unregisterColumn( SUIT_DataBrowser*, const QString& );
+
 signals:
   void                                opened();
   void                                saved();
@@ -67,6 +72,9 @@ protected:
   LightApp_Study*                     getStudy() const;
   virtual void                        build();
   virtual void                        updateWidgets();
+
+private:
+  int myGroupId;
 };
 
 #endif 
index 1f746533d827172736b5710bac93b53ec2fba492..b0d8588966a1e73b8dfb6fb5d14c8f5f790ce40c 100644 (file)
@@ -22,8 +22,8 @@
 
 #include "LightApp_DataObject.h"
 #include "LightApp_Study.h"
+#include "LightApp_DataModel.h"
 
-#include <CAM_DataModel.h>
 #include <CAM_Module.h>
 #include <SUIT_DataObjectKey.h>
 
@@ -115,38 +115,10 @@ LightApp_DataObject::~LightApp_DataObject()
 {
 }
 
-/*!
-  \brief Get the number of the columns provided by the data tree.
-  \return number of the columns
-*/
-int LightApp_DataObject::columnCount() const
-{
-  // add "Entry" column
-  return CAM_DataObject::columnCount() + 1;
-}
-
-/*!
-  \brief Get column title.
-  \param index column index
-  \return title of the specified column
-*/
-QString LightApp_DataObject::columnTitle( const int index ) const
-{
-  // add "Entry" column
-  return index == EntryIdx ? QObject::tr( "ENTRY_COLUMN" ) 
-                           : CAM_DataObject::columnTitle( index );
-}
-
-/*!
-  \brief Check if the column should appear in the tree view header popup menu
-  (to show/hide the column).
-  \param index column index
-  \return \c true if the column can be shown/hidden
-*/
-bool LightApp_DataObject::appropriate( const int index ) const
+int LightApp_DataObject::groupId() const
 {
-  // add "Entry" column
-  return index == EntryIdx ? true : CAM_DataObject::appropriate( index );
+  LightApp_DataModel* m = dynamic_cast<LightApp_DataModel*>( dataModel() );
+  return m ? m->groupId() : CAM_DataObject::groupId();
 }
 
 /*!
@@ -175,18 +147,17 @@ SUIT_DataObjectKey* LightApp_DataObject::key() const
 /*!
   \brief Get object text data for the specified column.
 
-  Column with \a index = 0 (NameIdx) is supposed to be used
+  Column with \a id = 0 (NameId) is supposed to be used
   to get the object name.
-  Column with \a index = 1 (EntryIdx) is supposed to be used
+  Column with \a id = 1 (EntryId) is supposed to be used
   to get the object entry.
 
-  \param index column index
+  \param id column id
   \return object text data
 */
-QString LightApp_DataObject::text( const int index ) const
+QString LightApp_DataObject::text( const int id ) const
 {
-  // add "Entry" column
-  return index == EntryIdx ? entry() : CAM_DataObject::text( index );
+  return id == EntryId ? entry() : CAM_DataObject::text( id );
 }
 
 /*!
@@ -229,15 +200,14 @@ QString LightApp_DataObject::componentDataType() const
 
 /*!
   \brief Check if the specified column supports custom sorting.
-  \param index column index
+  \param id column id
   \return \c true if column sorting should be customized
   \sa compare()
 */
-bool LightApp_DataObject::customSorting( const int index ) const
+bool LightApp_DataObject::customSorting( const int id ) const
 {
   // perform custom sorting for the "Entry" column
-  return index == EntryIdx ? true 
-    : CAM_DataObject::customSorting( index );
+  return id == EntryId ? true : CAM_DataObject::customSorting( id );
 }
 
 /*!
@@ -248,14 +218,14 @@ bool LightApp_DataObject::customSorting( const int index ) const
 
   \param left first data to compare
   \param right second data to compare
-  \param index column index
+  \param id column id
   \return result of the comparison
   \sa customSorting()
 */
-bool LightApp_DataObject::compare( const QVariant& left, const QVariant& right, 
-                                  const int index ) const
+bool LightApp_DataObject::compare( const QVariant& left, const QVariant& right, const int id ) const
 {
-  if ( index == EntryIdx ) {
+  if ( id == EntryId )
+  {
     // perform custom sorting for the "Entry" column
     QString leftStr  = left.toString();
     QString rightStr = right.toString();
@@ -293,7 +263,7 @@ bool LightApp_DataObject::compare( const QVariant& left, const QVariant& right,
     }
     return QString::localeAwareCompare( leftStr, rightStr ) < 0;
   }
-  return CAM_DataObject::compare( left, right, index );
+  return CAM_DataObject::compare( left, right, id );
 }
 
 /*!
@@ -343,22 +313,22 @@ QString LightApp_ModuleObject::name() const
 
 /*!
   \brief Get data object icon for the specified column.
-  \param index column index
+  \param id column id
   \return object icon for the specified column
 */
-QPixmap LightApp_ModuleObject::icon( const int index ) const
+QPixmap LightApp_ModuleObject::icon( const int id ) const
 {
-  return CAM_ModuleObject::icon( index );
+  return CAM_ModuleObject::icon( id );
 }
 
 /*!
   \brief Get data object tooltip for the specified column.
-  \param index column index
+  \param id column id
   \return object tooltip for the specified column
 */
-QString LightApp_ModuleObject::toolTip( const int index ) const
+QString LightApp_ModuleObject::toolTip( const int id ) const
 {
-  return CAM_ModuleObject::toolTip( index );
+  return CAM_ModuleObject::toolTip( id );
 }
 
 /*!
index 77f3b7861956a6bdbffc3268e052ab0f35f3ce20..fe4f7cb40fb5154fe9715258c6f0cd265f008920 100644 (file)
@@ -34,30 +34,26 @@ class LIGHTAPP_EXPORT LightApp_DataObject : public virtual CAM_DataObject
   class Key;
 
 public:
-  //! Column index
+  //! Column id
   enum { 
-    EntryIdx = NameIdx + 1    //!< entry column
+    EntryId = NameId + 1    //!< entry column
   };
 
 public:
   LightApp_DataObject( SUIT_DataObject* = 0 );
   virtual ~LightApp_DataObject();
 
-  virtual int                     columnCount() const;
-  virtual QString                 columnTitle( const int = NameIdx ) const;
-  virtual bool                    appropriate( const int = NameIdx ) const;
-
   virtual SUIT_DataObjectKey*     key() const;
   virtual QString                 entry() const;
 
-  virtual QString                 text( const int = NameIdx ) const;
+  virtual QString                 text( const int = NameId ) const;
 
   virtual SUIT_DataObject*        componentObject() const;
   virtual QString                 componentDataType() const;
 
-  virtual bool                    customSorting( const int = NameIdx ) const;
-  virtual bool                    compare( const QVariant&, const QVariant&,
-                                          const int = NameIdx ) const;
+  virtual bool                    customSorting( const int = NameId ) const;
+  virtual bool                    compare( const QVariant&, const QVariant&, const int = NameId ) const;
+  virtual int                     groupId() const;
 
 protected:
   QString                         myCompDataType;
@@ -74,8 +70,8 @@ public:
   virtual ~LightApp_ModuleObject();
 
   virtual QString        name() const;
-  QPixmap                icon( const int = NameIdx ) const;
-  QString                toolTip( const int = NameIdx ) const;
+  QPixmap                icon( const int = NameId ) const;
+  QString                toolTip( const int = NameId ) const;
 
   virtual void           insertChild( SUIT_DataObject*, int );
 };
index f2e42984d53309d2563e631ae1d8cfbcb03aec19..12a94b34a9f06114afd2277f7d4305f990c6d8f2 100644 (file)
 #include "LightApp_ShowHideOp.h"
 #include "LightApp_SelectionMgr.h"
 
-#include <SUIT_DataBrowser.h>
 #include <SUIT_Study.h>
 #include <SUIT_DataObject.h>
+#include <SUIT_DataBrowser.h>
 #include <SUIT_Operation.h>
 #include <SUIT_ViewManager.h>
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_Desktop.h>
+#include <SUIT_TreeModel.h>
 
+#ifndef DISABLE_SALOMEOBJECT
 #include <SALOME_ListIO.hxx>
 #include <SALOME_ListIteratorOfListIO.hxx>
+#endif
 
 #ifndef DISABLE_VTKVIEWER
 #ifndef DISABLE_SALOMEOBJECT
@@ -86,6 +89,7 @@
 #include <QString>
 #include <QStringList>
 
+
 /*!Constructor.*/
 LightApp_Module::LightApp_Module( const QString& name )
 : CAM_Module( name ),
@@ -173,6 +177,7 @@ bool LightApp_Module::isSelectionCompatible()
 {
   // return true if selected objects belong to this module
   bool isCompatible = true;
+#ifndef DISABLE_SALOMEOBJECT
   SALOME_ListIO selected;
   if ( LightApp_SelectionMgr *Sel = getApp()->selectionMgr() )
     Sel->selectedObjects( selected );
@@ -189,6 +194,7 @@ bool LightApp_Module::isSelectionCompatible()
       isCompatible = ( aStudy->componentDataType( io->getEntry() ) == moduleDataType );
     }
   }
+#endif
   return isCompatible;
 }
 
@@ -211,6 +217,14 @@ bool LightApp_Module::activateModule( SUIT_Study* study )
   if ( mySwitchOp == 0 )
     mySwitchOp = new LightApp_SwitchOp( this );
 
+  QString EntryCol = QObject::tr( "ENTRY_COLUMN" );
+  LightApp_DataModel* m = dynamic_cast<LightApp_DataModel*>( dataModel() );
+  if( m )
+  {
+    SUIT_AbstractModel* treeModel = dynamic_cast<SUIT_AbstractModel*>( getApp()->objectBrowser()->model() );
+    m->registerColumn( getApp()->objectBrowser(), EntryCol, LightApp_DataObject::EntryId );
+    treeModel->setAppropriate( EntryCol, Qtx::Toggled );
+  }
   return res;
 }
 
@@ -231,7 +245,16 @@ bool LightApp_Module::deactivateModule( SUIT_Study* study )
     anIt.value()->abort();
   }
 
-  return CAM_Module::activateModule( study );
+  QString EntryCol = QObject::tr( "ENTRY_COLUMN" );
+  LightApp_DataModel* m = dynamic_cast<LightApp_DataModel*>( dataModel() );
+  if( m )
+  {
+    SUIT_AbstractModel* treeModel = dynamic_cast<SUIT_AbstractModel*>( getApp()->objectBrowser()->model() );
+
+    treeModel->setAppropriate( EntryCol, Qtx::Shown );
+    m->unregisterColumn( getApp()->objectBrowser(), EntryCol );
+  }
+  return CAM_Module::deactivateModule( study );
 }
 
 /*!NOT IMPLEMENTED*/
@@ -319,7 +342,7 @@ void LightApp_Module::updateControls()
 /*!Create new instance of data model and return it.*/
 CAM_DataModel* LightApp_Module::createDataModel()
 {
-  return new LightApp_DataModel(this);
+  return new LightApp_DataModel( this );
 }
 
 /*!Create and return instance of LightApp_Selection.*/
@@ -600,3 +623,14 @@ void LightApp_Module::onViewManagerAdded( SUIT_ViewManager* )
 void LightApp_Module::onViewManagerRemoved( SUIT_ViewManager* )
 {
 }
+
+/*!
+  \brief Returns instance of operation by its id; if there is no operation
+  corresponding to this id, null pointer is returned
+  \param id - operation id 
+  \return operation instance
+*/
+LightApp_Operation* LightApp_Module::operation( const int id ) const
+{
+  return myOperations.contains( id ) ? myOperations[id] : 0;
+}
index 08c8eb7d3458abaca0319132830e20c7093fd105..d32fb1eb8e6c355cbb102c610fde1d3c9b9713c1 100644 (file)
@@ -134,6 +134,8 @@ protected:
 
   virtual bool                        isSelectionCompatible();
 
+  LightApp_Operation*                 operation( const int ) const;
+
 private:
   typedef QMap<int,LightApp_Operation*> MapOfOperation;
 
index 0f0e24c018ce504556f32182bda1fbbfde09a2fb..06946364396956bd881ff9e33da96cc96f071c91 100755 (executable)
@@ -55,7 +55,8 @@ dist_libOCCViewer_la_SOURCES =                        \
        OCCViewer_SetRotationPointDlg.cxx       \
        OCCViewer_ClippingDlg.cxx               \
        OCCViewer_AxialScaleDlg.cxx             \
-       OCCViewer_Trihedron.cxx
+       OCCViewer_Trihedron.cxx                 \
+       OCCViewer_ToolTip.cxx
 
 MOC_FILES =                                    \
        OCCViewer_AISSelector_moc.cxx           \
@@ -68,7 +69,9 @@ MOC_FILES =                                   \
        OCCViewer_CreateRestoreViewDlg_moc.cxx  \
        OCCViewer_SetRotationPointDlg_moc.cxx   \
        OCCViewer_ClippingDlg_moc.cxx           \
-       OCCViewer_AxialScaleDlg_moc.cxx
+       OCCViewer_AxialScaleDlg_moc.cxx         \
+       OCCViewer_ToolTip_moc.cxx
+       
 nodist_libOCCViewer_la_SOURCES = $(MOC_FILES)
 
 dist_salomeres_DATA =                          \
diff --git a/src/OCCViewer/OCCViewer_ToolTip.cxx b/src/OCCViewer/OCCViewer_ToolTip.cxx
new file mode 100644 (file)
index 0000000..536acdc
--- /dev/null
@@ -0,0 +1,103 @@
+// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either 
+// version 2.1 of the License.
+// 
+// This library is distributed in the hope that it will be useful 
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File:      OCCViewer_ToolTip.cxx
+// Author:    Alexandre SOLOVYOV
+
+#include <OCCViewer_ToolTip.h>
+#include <OCCViewer_ViewWindow.h>
+#include <OCCViewer_ViewPort3d.h>
+#include <OCCViewer_ViewModel.h>
+
+#include <SUIT_ViewManager.h>
+
+#include <SelectMgr_EntityOwner.hxx>
+
+/*!
+  Constructor
+
+  \param wnd - window where the tooltip should be assigned
+*/
+OCCViewer_ToolTip::OCCViewer_ToolTip( OCCViewer_ViewWindow* wnd )
+: QtxToolTip( wnd->getViewPort() ),
+  myWnd( wnd )
+{
+  connect( this, SIGNAL( maybeTip( QPoint, QString&, QFont&, QRect&, QRect& ) ),
+          this, SLOT( onToolTip( QPoint, QString&, QFont&, QRect&, QRect& ) ) );
+}
+
+/*!
+  Destructor
+ */
+OCCViewer_ToolTip::~OCCViewer_ToolTip()
+{
+}
+
+/*!
+  \return font of the tooltip
+ */
+QFont OCCViewer_ToolTip::font() const
+{
+  return myFont;
+}
+
+/*!
+  Change font of the tooltip
+
+  \param f - new font
+ */
+void OCCViewer_ToolTip::setFont( const QFont& f )
+{
+  myFont = f;
+}
+
+/*!
+  Tooltip handler
+
+  \param p - current point
+  \param str - returned tooltip text
+  \param f - returned tooltip font
+  \param txtRect - returned tooltip text rectangle
+  \param rect - returned tooltip rectangle
+ */
+void OCCViewer_ToolTip::onToolTip( QPoint p, QString& str, QFont& f, QRect& txtRect, QRect& rect )
+{
+  OCCViewer_Viewer* v = dynamic_cast<OCCViewer_Viewer*>( myWnd->getViewManager()->getViewModel() );
+  Handle( AIS_InteractiveContext ) aCont = v->getAISContext();
+  if( aCont.IsNull() )
+    return;
+
+  QString txt;
+  Handle( SelectMgr_EntityOwner ) owner = aCont->DetectedOwner();
+  if( !owner.IsNull() )
+    emit toolTipFor( owner, txt );
+
+  Handle_AIS_InteractiveObject obj = aCont->DetectedInteractive();
+  if( txt.isEmpty() && !obj.IsNull() )
+    emit toolTipFor( obj, txt );
+
+  if( txt.isEmpty() )
+    return;
+
+  str = txt;
+  QFontMetrics m( myFont );
+  int w = m.width( str ), h = m.height();
+
+  txtRect = QRect( p.x()+4, p.y()-h, w, h );
+  rect = txtRect;
+}
diff --git a/src/OCCViewer/OCCViewer_ToolTip.h b/src/OCCViewer/OCCViewer_ToolTip.h
new file mode 100644 (file)
index 0000000..42ff7fe
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either 
+// version 2.1 of the License.
+// 
+// This library is distributed in the hope that it will be useful 
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#ifndef OCCVIEWER_TOOLTIP_H
+#define OCCVIEWER_TOOLTIP_H
+
+#include <OCCViewer.h>
+#include <QtxToolTip.h>
+#include <QFont>
+
+class OCCViewer_ViewWindow;
+class Handle_SelectMgr_EntityOwner;
+class Handle_AIS_InteractiveObject;
+
+/*!
+  \class OCCViewer_ToolTip
+  \brief Custom tooltip for AIS_InteractiveObjects and SelectMgr_EntityOwners in the OCC Viewer
+*/
+class OCCVIEWER_EXPORT OCCViewer_ToolTip : public QtxToolTip
+{
+  Q_OBJECT
+
+public:
+  OCCViewer_ToolTip( OCCViewer_ViewWindow* );
+  virtual ~OCCViewer_ToolTip();
+
+  QFont font() const;
+  void  setFont( const QFont& );
+
+signals:
+  /*!
+    Called when owner is detected; allows to redefine tooltip text for owner
+   */
+  void toolTipFor( const Handle_SelectMgr_EntityOwner&, QString& );
+  /*!
+    Called when object is detected; allows to redefine tooltip text for object
+   */
+  void toolTipFor( const Handle_AIS_InteractiveObject&, QString& );
+
+public slots:
+  void onToolTip( QPoint, QString&, QFont&, QRect&, QRect& );
+
+private:
+  OCCViewer_ViewWindow*  myWnd;
+  QFont                  myFont;
+};
+
+#endif
index 39c740c5d4c5c61f7fe14810d843cfc669d734ff..8bb6aad76f0b77056bf202e91b4f7f470e2aa2e9 100755 (executable)
@@ -24,7 +24,7 @@
   Constructor
 */
 OCCViewer_ViewManager::OCCViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop, bool DisplayTrihedron )
-: SUIT_ViewManager( study, theDesktop, new OCCViewer_Viewer( DisplayTrihedron ) )
+: SUIT_ViewManager( study, theDesktop, new OCCViewer_Viewer( DisplayTrihedron, false ) )
 {
   setTitle( tr( "OCC_VIEW_TITLE" ) );
 }
index f7131aada4d3ecde549feed5bc8c58f40342861b..2d5fd05eb93e08230c549a3f125347fc5166f914 100644 (file)
@@ -335,12 +335,9 @@ void QDS_ComboBox::reset()
   int id = -1;
   QString aDefValue = defaultValue();
   if ( !aDefValue.isEmpty() )
-    id = aDefValue.toInt();
-
-  if ( id == -1 )
-    id = getId( 0 );
-
-  setIntegerValue( id );
+    setString( aDefValue );
+  else
+    setIntegerValue( getId( 0 ) );
 }
 
 /*!
@@ -599,9 +596,9 @@ void QDS_ComboBox::updateComboBox()
     if ( cb )
     {
       if ( myIcons.contains( id ) )
-        cb->insertItem( -1, QIcon(myIcons[id]), myValue[id] );
+        cb->addItem( QIcon(myIcons[id]), myValue[id] );
       else
-        cb->insertItem( -1, myValue[id] );
+        cb->addItem( myValue[id] );
     }
   }
 
index 81e944e919b0bb1dd298000a9b68c30910642611..b3780f699ee5ce24a5cbeda20a078dce723d0f1b 100644 (file)
 //
 #include "QDS_Datum.h"
 
-#include "QDS_Validator.h"
-
-#include <DDS_Dictionary.h>
-
+#include <QLayout>
+#include <QVariant>
 #include <QTimer>
-#include <QLabel>
-#include <QWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QGridLayout>
-#include <QMessageBox>
 #include <QEvent>
+#include <QMessageBox>
+#include <QApplication>
 
-#include <TColStd_SequenceOfAsciiString.hxx>
+#include <QDS_Validator.h>
+#include <DDS_Dictionary.h>
 
 /*!
   \class QDS_Datum::Wrapper
@@ -45,15 +40,14 @@ public:
   Wrapper( QWidget* = 0 );
   virtual ~Wrapper();
 
-  QWidget*      widget() const;
-  void          setWidget( QWidget* );
+  QWidget* widget() const;
+  void     setWidget( QWidget* );
 
   virtual void  setGeometry( int x, int y, int w, int h );
   virtual void  setSizePolicy( QSizePolicy );
 
 private:
-  QWidget*      myWid;
-  QHBoxLayout*  myBase;
+  QWidget* myWid;
 };
 
 /*!
@@ -64,9 +58,9 @@ QDS_Datum::Wrapper::Wrapper( QWidget* parent )
 : QWidget( parent ),
   myWid( 0 )
 {
-  //QHBoxLayout* base = new QHBoxLayout( this );
-  //base->setAutoAdd( true );
-  myBase = new QHBoxLayout( this );
+  setLayout( new QHBoxLayout() );
+  layout()->setSpacing( 0 );
+  layout()->setMargin( 0 );
   setFocusPolicy( Qt::StrongFocus );
 }
 
@@ -92,21 +86,16 @@ QWidget* QDS_Datum::Wrapper::widget() const
 */
 void QDS_Datum::Wrapper::setWidget( QWidget* wid )
 {
-  if ( myWid == wid )
+  if ( myWid == wid || !wid )
     return;
 
+  wid->setParent( this );
+  QHBoxLayout* hl = qobject_cast<QHBoxLayout*>( layout() );
+  if( myWid )
+    hl->removeWidget( myWid );
+  hl->addWidget( wid );
   myWid = wid;
 
-  if ( !myWid )
-    return;
-
-  if ( myWid->parent() != this ) {
-    myWid->setParent( this );
-    myWid->move( QPoint( 0, 0 ) );
-    myWid->hide();
-    myBase->addWidget( myWid );
-  }
-
   setTabOrder( this, myWid );
   setFocusProxy( myWid );
 
@@ -211,7 +200,8 @@ QDS_Datum::QDS_Datum( const QString& id, QWidget* parent, const int flags, const
   myUnits( 0 ),
   myControl( 0 ),
   myFlags( flags ),
-  myInitialised( false )
+  myInitialised( false ),
+  myTr( false )
 {
   if ( myFlags & Label )
     myWrapper.insert( Label, new Wrapper( parent ) );
@@ -296,6 +286,44 @@ int QDS_Datum::type() const
   return res;
 }
 
+/*!
+  \brief Return state of custom translation.
+  \return true if custom translation is enabled
+*/
+bool QDS_Datum::isCustomTr() const
+{
+  return myTr;
+}
+
+/*!
+  \brief Change state of custom translation.
+
+  Custom translation means that text labels of datums are translated
+  with help of standard Qt mechanism of internationalization. In this
+  case special records should be placed into *.ts files under context "QDS".
+  For example, if label has name "myLabel", the corresponding translation
+  should be written:
+  <context>
+    <name>QDS</name>
+    <message>
+        <source>myLabel</source>
+        <translation>myLabel translation</translation>
+    </message>
+    ...
+
+  If custom translation mechanism is deactivated, then labels will be shown
+  with text got from xml data dictionary file
+
+  By default, the custom translation is deactivated
+
+  \param on - if it is true, custom translation is activated, otherwise, deactivated 
+*/
+void QDS_Datum::enableCustomTr( const bool on )
+{
+  myTr = on;
+  labelWidget()->setText( label() );
+}
+
 /*!
   \brief Get the datum label text.
   \return label text
@@ -306,11 +334,19 @@ QString QDS_Datum::label() const
 
   QString labStr;
   if ( !myDicItem.IsNull() )
+  {
     labStr = toQString( myDicItem->GetLabel() );
-
+    if( labStr.isNull() )
+      labStr = toQString( myDicItem->GetId() );
+  }
+  if( myTr )
+  {
+    QString dest = QApplication::translate( "QDS", labStr.toLatin1().constData() );
+    if( labStr != dest )
+      labStr = dest;
+  }
   if ( flags() & NotAccel )
     labStr = removeAccel( labStr );
-
   return labStr;
 }
 
@@ -942,7 +978,7 @@ bool QDS_Datum::isValid( const bool msgBox, const QString& extMsg, const QString
       info += QString( "\n" ) + extMsg;
 
     QString msg;
-    for ( uint i = 0; i < info.length(); i++ )
+    for ( int i = 0; i < info.length(); i++ )
       if ( info.at( i ) == '\n' )
         msg += QString( "<br>" );
       else
index c42e92241e9ff38c2b39cade302859fda4603b46..920371d5651b25f4a203f9030b24fe5b117b610d 100644 (file)
 #define QDS_DATUM_H
 
 #include "QDS.h"
-
-#include <QString>
-#include <QVariant>
 #include <QPointer>
+#include <QMap>
+#include <QLabel>
+
+class QHBoxLayout;
+class QVBoxLayout;
+class QGridLayout;
+class QValidator;
 
 #include <DDS_DicItem.h>
 
-class QLabel;
 class QWidget;
-class QValidator;
-class QVBoxLayout;
-class QHBoxLayout;
-class QGridLayout;
 
 class QDS_EXPORT QDS_Datum : public QObject, public QDS
 {
@@ -115,6 +114,9 @@ public:
 
   operator QWidget*() const;
 
+  bool isCustomTr() const;
+  void enableCustomTr( const bool );
+
 signals:
   void                      paramChanged();
   void                      paramChanged( QString& );
@@ -196,7 +198,7 @@ private:
   QString                   mySourceValue;
   QString                   myTargetValue;
 
-  bool                      myInitialised;
+  bool                      myInitialised, myTr;
 
   friend class QDS;
 };
index e3966a1c52b2459546b01819d76f47cc3a2b4b93..82ebbbb0d399656909d8ec9237fca8786f9c0b6f 100644 (file)
@@ -170,7 +170,8 @@ void QDS_SpinBox::unitSystemChanged( const QString& system )
 
     sb->setSuffix( suffix() );
     sb->setPrefix( prefix() );
-    sb->setMinimum( minValue().toInt() );
-    sb->setMaximum( maxValue().toInt() );
+    sb->setMinimum( minValue().isEmpty() ? -INT_MAX : minValue().toInt() );
+    sb->setMaximum( maxValue().isEmpty() ? INT_MAX : maxValue().toInt() );
+
   }
 }
index 99d868f2acb272abe89d162d4034b5b48d246d2b..1c8b6eac997131a1b0a4ef3a0b9fcef6d7725fe3 100755 (executable)
@@ -165,6 +165,7 @@ MOC_FILES =                         \
        QtxPathEdit_moc.cxx             \
        QtxPathListEdit_moc.cxx         \
        QtxPopupMgr_moc.cxx             \
+       QtxRubberBand_moc.cxx           \
        QtxSearchTool_moc.cxx           \
        QtxSplash_moc.cxx               \
        QtxToolBar_moc.cxx              \
index 49ab74cae69df465d581514502c95fc4f088c62f..466127033ff342de95ac50b72484ec076e2ac7de 100755 (executable)
@@ -96,6 +96,12 @@ public:
     AppropriateRole = Qt::UserRole + 100   //!< can be used to return \c true if data is appropriate
   };
 
+  typedef enum {
+       Shown,   //!< column should be always visible
+       Hidden,  //!< column should be always hidden
+       Toggled  //!< it should be possible to show/hide the column with help of popup menu
+  } Appropriate;  //!< appropriate status
+
   static QString     toQString( const char*, const int = -1 );
   static QString     toQString( const short*, const int = -1 );
   static QString     toQString( const unsigned char*, const int = -1 );
index e164261679756d12864c1f8adca5706e18cf2b69..7e88d64453808fdde7de03b7b6e47891b783a0aa 100755 (executable)
 
 #include <QWidget>
 
-class QTX_EXPORT QtxAbstractRubberBand: public QWidget
+class QTX_EXPORT QtxAbstractRubberBand : public QWidget
 {
+  Q_OBJECT
+
 protected:
   QtxAbstractRubberBand( QWidget* );
 
@@ -57,8 +59,9 @@ protected:
 
 class QTX_EXPORT QtxRectRubberBand: public QtxAbstractRubberBand
 {
-public:
+  Q_OBJECT
 
+public:
   QtxRectRubberBand( QWidget* );
   virtual ~QtxRectRubberBand();
 
@@ -71,8 +74,9 @@ public:
 
 class QTX_EXPORT QtxPolyRubberBand: public QtxAbstractRubberBand
 {
-public:
+  Q_OBJECT
 
+public:
   QtxPolyRubberBand( QWidget* );
   virtual ~QtxPolyRubberBand();
 
index 6cf3ca533b7f264e36b3bb30c8f6127b639c3ab2..ea2e520d2cd408b28588eb89f9ebcd00e492924f 100644 (file)
@@ -112,8 +112,9 @@ void QtxTreeView::Header::contextMenuEvent( QContextMenuEvent* e )
       else if ( qVariantCanConvert<QPixmap>( iconData ) )
        icon = qVariantValue<QPixmap>( iconData );
     }
-    if ( ( !lab.isEmpty() || !icon.isNull() ) && 
-        appropriate.isValid() ? appropriate.toBool() : true ) {
+    if( ( !lab.isEmpty() || !icon.isNull() ) && 
+           appropriate.isValid() ? appropriate.toInt()==Qtx::Toggled : true )
+       {
       QAction* a = menu.addAction( icon, lab );
       a->setCheckable( true );
       a->setChecked( !isSectionHidden( i ) );
@@ -153,6 +154,7 @@ void QtxTreeView::Header::contextMenuEvent( QContextMenuEvent* e )
   e->accept();
 }
 
+
 /*!
   \class QtxTreeView
   \brief Tree view class with possibility to display columns popup menu.
@@ -371,3 +373,23 @@ void QtxTreeView::emitSortingEnabled( bool enabled )
 {
   emit( sortingEnabled( enabled ) );
 }
+
+void QtxTreeView::setModel( QAbstractItemModel* m )
+{
+  if( model() )
+       disconnect( model(), SIGNAL( headerDataChanged( Qt::Orientation, int, int ) ),
+                this, SLOT( onAppropriate( Qt::Orientation, int, int ) ) );
+  QTreeView::setModel( m );
+  connect( model(), SIGNAL( headerDataChanged( Qt::Orientation, int, int ) ),
+           this, SLOT( onAppropriate( Qt::Orientation, int, int ) ) );
+}
+
+void QtxTreeView::onAppropriate( Qt::Orientation orient, int first, int last )
+{
+  if( orient==Qt::Horizontal )
+    for( int i=first; i<=last; i++ )
+       {
+         int appr = model()->headerData( i, orient, Qtx::AppropriateRole ).toInt();
+         header()->setSectionHidden( i, appr==Qtx::Hidden );
+       }
+}
index f02eaf65c607c9291e5e9af35e214bde74121c3d..e8e7b090cdb2b554ff71c9d25affba137e38f40e 100644 (file)
@@ -53,10 +53,13 @@ public:
 
   void     resizeColumnToEncloseContents( int );
 
+  virtual void setModel( QAbstractItemModel* );
+
 protected slots:
   void     onHeaderClicked( int );
   void     rowsAboutToBeRemoved( const QModelIndex&, int, int );
   void     selectionChanged( const QItemSelection&, const QItemSelection& );
+  void     onAppropriate( Qt::Orientation, int, int );
   
 protected:
   void     setOpened( const QModelIndex&, const int, bool );
index 77f2ed6465e90223f83442700948e58fa31ca35e..96e2952404a3ca53a1e98268d1ad668583a2025d 100755 (executable)
@@ -49,9 +49,12 @@ class STD_EXPORT STD_Application : public SUIT_Application
   Q_OBJECT
 
 public:
-  enum { FileNewId, FileOpenId, FileCloseId, FileSaveId, FileSaveAsId, FileExitId,
-        ViewWindowsId, ViewToolBarsId, ViewStatusBarId, NewWindowId,
-         EditCutId, EditCopyId, EditPasteId, HelpAboutId, UserID };
+  enum { MenuFileId, FileNewId, FileOpenId, FileCloseId, FileSaveId, FileSaveAsId, FileExitId,
+         MenuViewId, ViewWindowsId, ViewToolBarsId, ViewStatusBarId, NewWindowId,
+         MenuEditId, EditCutId, EditCopyId, EditPasteId,
+         MenuHelpId, HelpAboutId,
+         UserID
+  };
 
  public:
   STD_Application();
@@ -94,6 +97,8 @@ public:
   bool                  exitConfirmation() const;
   void                  setExitConfirmation( const bool );
 
+  virtual void          updateDesktopTitle();
+
 signals:
   /*!emit that view manager added*/
   void                  viewManagerAdded( SUIT_ViewManager* );
@@ -129,18 +134,11 @@ private slots:
   virtual void          onViewManagerActivated( SUIT_ViewManager* );
 
 protected:
-  enum {  MenuFileId = 1,
-          MenuViewId = 2,
-          MenuEditId = 3,
-          MenuHelpId = 7
-       };
-
   enum { OpenCancel, OpenNew, OpenExist };
   enum { CloseCancel, CloseSave, CloseDiscard };
 
 protected:
   virtual void          createActions();
-  virtual void          updateDesktopTitle();
   virtual void          updateCommandsStatus();
 
   virtual void          setDesktop( SUIT_Desktop* );
index ead59e4c4205280b7d1aacc51b1b6ac3be421fab..35c44b80e2a49ea93823450548965aee0a2a6b6a 100755 (executable)
@@ -639,10 +639,10 @@ int SUIT_Application::registerAction( const int id, QAction* a )
   myActionMap.insert( ident, a );
 
   if ( desktop() && desktop()->menuMgr() )
-    desktop()->menuMgr()->registerAction( a );
+    desktop()->menuMgr()->registerAction( a, id );
 
   if ( desktop() && desktop()->toolMgr() )
-    desktop()->toolMgr()->registerAction( a );
+    desktop()->toolMgr()->registerAction( a, id );
 
   return ident;
 }
index 1444ab3577d5088b32a87ca2d7440ed876ed4959..e9ee490877961e47f3505e12c89a9f12c3433c1e 100644 (file)
@@ -308,6 +308,8 @@ void SUIT_DataBrowser::init( SUIT_DataObject* root )
   setItemDelegate( qobject_cast<SUIT_ProxyModel*>( model() )->delegate() );
   connect( treeView(), SIGNAL( sortingEnabled( bool ) ), 
           model(),    SLOT( setSortingEnabled( bool ) ) );
+  connect( treeView(), SIGNAL( clicked( const QModelIndex& ) ), 
+          this,       SLOT( onClicked( const QModelIndex& ) ) );
   connect( treeView(), SIGNAL( doubleClicked( const QModelIndex& ) ), 
           this,       SLOT( onDblClicked( const QModelIndex& ) ) );
   connect( treeView(), SIGNAL( expanded( const QModelIndex& ) ), 
@@ -330,6 +332,16 @@ void SUIT_DataBrowser::init( SUIT_DataObject* root )
   \sa updateKey(), setUpdateKey()
 */
 
+/*!
+  \fn void SUIT_DataBrowser::clicked( SUIT_DataObject* o );
+  \brief This signal is emitted when a mouse button is clicked.
+
+  The data object the mouse was clicked on is specified by \a o.
+  The signal is only emitted when the object is valid.
+
+  \param o data object which is clicked
+*/
+
 /*!
   \fn void SUIT_DataBrowser::doubleClicked( SUIT_DataObject* o );
   \brief This signal is emitted when a mouse button is double-clicked.
@@ -348,6 +360,22 @@ void SUIT_DataBrowser::onModelUpdated()
   setModified();
 }
 
+/*!
+  \brief Called when item is clicked in the tree view
+  \internal
+  
+  Emits signal clicked( SUIT_DataObject* );
+*/
+void SUIT_DataBrowser::onClicked( const QModelIndex& index )
+{
+  SUIT_ProxyModel* m = qobject_cast<SUIT_ProxyModel*>( model() );
+
+  if ( m ) {
+    SUIT_DataObject* obj = m->object( index );
+    if ( obj ) emit( clicked( obj ) );
+  }
+}
+
 /*!
   \brief Called when item is double-clicked in the tree view
   \internal
index 9ab076bb323636acae36fbc02adb58012ca25176..77d423f1d25c376fdacb0929f29c5225eed0f9c8 100644 (file)
@@ -72,10 +72,12 @@ private:
 
 signals:
   void             requestUpdate();
+  void             clicked( SUIT_DataObject* );
   void             doubleClicked( SUIT_DataObject* );
 
 private slots:
   void             onModelUpdated();
+  void             onClicked( const QModelIndex& );
   void             onDblClicked( const QModelIndex& );
   void             onExpanded( const QModelIndex& );
 
index 26c27a42931cd584d31fb0a5173311283687d0f6..98b323b3a74cf179bd8fa7a6e4afd548b0653050 100755 (executable)
@@ -112,64 +112,6 @@ SUIT_DataObject* SUIT_DataObject::lastChild() const
   return child;
 }
 
-/*!
-  \brief Get the number of the columns provided by the data tree.
-
-  This method can be re-implemented in the subclasses.
-  Default implementation returns 1 ("Name" column) only.
-
-  \return number of the columns
-*/
-int SUIT_DataObject::columnCount() const
-{
-  return 1;  // one column ("Name") is provided by default
-}
-
-/*!
-  \brief Get column title.
-
-  This method can be re-implemented in the subclasses.
-  Default implementation returns the title for the first column ("Name") only.
-
-  \param index column index
-  \return title of the specified column
-*/
-QString SUIT_DataObject::columnTitle( const int index ) const
-{
-  if ( index == NameIdx )
-    return QObject::tr( "NAME_COLUMN" );  // one column ("Name") is provided by default
-  return QString();
-}
-
-/*!
-  \brief Get column icon.
-
-  This method can be re-implemented in the subclasses.
-  Default implementation returns null pixmap.
-
-  \param index column index
-  \return icon of the specified column
-*/
-QPixmap SUIT_DataObject::columnIcon( const int /*index*/ ) const
-{
-  return QPixmap();
-}
-
-/*!
-  \brief Check if the column should appear in the tree view header popup menu
-  (to show/hide the column).
-
-  Default implementation returns \c false because 'Name' column should be
-  always visible.
-
-  \param index column index
-  \return \c true if the column can be shown/hidden
-*/
-bool SUIT_DataObject::appropriate( const int /*index*/ ) const
-{
-  return false;
-}
-
 /*!
   \brief Get the number of the child objects.
   \return number of the children
@@ -448,15 +390,15 @@ QString SUIT_DataObject::name() const
   This method can be re-implemented in the subclasses.
   Default implementation returns null string.
 
-  Column with \a index = 0 (NameIdx) is supposed to be used
+  Column with \a id = 0 (NameId) is supposed to be used
   to get the object name (as it does the default implementation).
 
-  \param index column index
+  \param id column id
   \return object text data
 */
-QString SUIT_DataObject::text( const int index ) const
+QString SUIT_DataObject::text( const int id ) const
 {
-  return index == NameIdx ? name() : QString();
+  return id == NameId ? name() : QString();
 }
 
 /*!
@@ -465,13 +407,12 @@ QString SUIT_DataObject::text( const int index ) const
   This method can be re-implemented in the subclasses.
   Default implementation returns null pixmap.
 
-  The parameter \a index specifies the column number
-  (to display, for example, in the tree view widget).
+  The parameter \a id specifies the column identificator
 
-  \param index column index
+  \param id column id
   \return object icon for the specified column
 */
-QPixmap SUIT_DataObject::icon( const int /*index*/ ) const
+QPixmap SUIT_DataObject::icon( const int /*id*/ ) const
 {
   return QPixmap();
 }
@@ -482,14 +423,13 @@ QPixmap SUIT_DataObject::icon( const int /*index*/ ) const
   This method can be re-implemented in the subclasses.
   Default implementation returns null color.
 
-  The parameter \a index specifies the column number
-  (to display, for example, in the tree view widget).
+  The parameter \a id specifies the column identificator
 
   \param role color role
-  \param index column index
+  \param id column id
   \return object color for the specified column
 */
-QColor SUIT_DataObject::color( const ColorRole /*role*/, const int /*index*/ ) const
+QColor SUIT_DataObject::color( const ColorRole /*role*/, const int /*id*/ ) const
 {
   return QColor();
 }
@@ -500,13 +440,13 @@ QColor SUIT_DataObject::color( const ColorRole /*role*/, const int /*index*/ ) c
   This method can be re-implemented in the subclasses.
   Default implementation returns null string.
 
-  The parameter \a index specifies the column number
+  The parameter \a id specifies the column identificator
   (to display, for example, in the tree view widget).
 
-  \param index column index
+  \param id column id
   \return object tooltip for the specified column
 */
-QString SUIT_DataObject::toolTip( const int /*index*/ ) const
+QString SUIT_DataObject::toolTip( const int /*id*/ ) const
 {
   return QString();
 }
@@ -517,13 +457,12 @@ QString SUIT_DataObject::toolTip( const int /*index*/ ) const
   This method can be re-implemented in the subclasses.
   Default implementation returns null string.
 
-  The parameter \a index specifies the column number
-  (to display, for example, in the tree view widget).
+  The parameter \a id specifies the column identificator
 
-  \param index column index
+  \param id column id
   \return object status tip for the specified column
 */
-QString SUIT_DataObject::statusTip( const int /*index*/ ) const
+QString SUIT_DataObject::statusTip( const int /*id*/ ) const
 {
   return QString();
 }
@@ -535,13 +474,12 @@ QString SUIT_DataObject::statusTip( const int /*index*/ ) const
   This method can be re-implemented in the subclasses.
   Default implementation returns null string.
 
-  The parameter \a index specifies the column number
-  (to display, for example, in the tree view widget).
+  The parameter \a id specifies the column identificator
 
-  \param index column index
+  \param id column id
   \return object "what's this" information for the specified column
 */
-QString SUIT_DataObject::whatsThis( const int /*index*/ ) const
+QString SUIT_DataObject::whatsThis( const int /*id*/ ) const
 {
   return QString();
 }
@@ -552,13 +490,12 @@ QString SUIT_DataObject::whatsThis( const int /*index*/ ) const
   This method can be re-implemented in the subclasses.
   Default implementation returns application default font.
 
-  The parameter \a index specifies the column number
-  (to display, for example, in the tree view widget).
+  The parameter \a id specifies the column identificator
 
-  \param index column index
+  \param id column id
   \return object font for the specified column
 */
-QFont SUIT_DataObject::font( const int /*index*/ ) const
+QFont SUIT_DataObject::font( const int /*id*/ ) const
 {
   return QFont();
 }
@@ -570,13 +507,13 @@ QFont SUIT_DataObject::font( const int /*index*/ ) const
   Default implementation returns default alignment which
   is Qt:AlignLeft.
 
-  The parameter \a index specifies the column number
+  The parameter \a id specifies the column identificator
   (to display, for example, in the tree view widget).
 
-  \param index column index
+  \param id column id
   \return object text alignment flags for the specified column
 */
-int SUIT_DataObject::alignment( const int /*index*/ ) const
+int SUIT_DataObject::alignment( const int /*id*/ ) const
 {
   return Qt::AlignLeft;
 }
@@ -642,11 +579,11 @@ bool SUIT_DataObject::isSelectable() const
   This method can be re-implemented in the subclasses.
   Default implementation returns \c false (all objects are not checkable).
 
-  \param index column index
+  \param id column id
   \return \c true if the item can be checked or unchecked by the user
   \sa isOn(), setOn()
 */
-bool SUIT_DataObject::isCheckable( const int /*index*/ ) const
+bool SUIT_DataObject::isCheckable( const int /*id*/ ) const
 {
   return false;
 }
@@ -658,13 +595,13 @@ bool SUIT_DataObject::isCheckable( const int /*index*/ ) const
   Default implementation supports the checked state for the first
   ("Name") column only.
 
-  \param index column index
+  \param id column id
   \return checked state of the object for the specified column
   \sa setOn(), isCheckable()
 */
-bool SUIT_DataObject::isOn( const int index ) const
+bool SUIT_DataObject::isOn( const int id ) const
 {
-  return index == NameIdx && myCheck;
+  return id == NameId && myCheck;
 }
 
 /*!
@@ -675,12 +612,12 @@ bool SUIT_DataObject::isOn( const int index ) const
   ("Name") column only.
 
   \param on new checked state of the object for the specified column
-  \param index column index
+  \param id column id
   \sa isOn(), isCheckable()
 */
-void SUIT_DataObject::setOn( const bool on, const int index )
+void SUIT_DataObject::setOn( const bool on, const int id )
 {
-  if ( index == NameIdx )
+  if( id == NameId )
     myCheck = on;
 }
 
@@ -711,11 +648,11 @@ void SUIT_DataObject::setOpen( const bool on )
   Default implementation returns false ("Name" column does not require
   custom sorting).
 
-  \param index column index
+  \param id column id
   \return \c true if column sorting should be customized
   \sa compare()
 */
-bool SUIT_DataObject::customSorting( const int /*index*/ ) const
+bool SUIT_DataObject::customSorting( const int /*id*/ ) const
 {
   return false;
 }
@@ -732,12 +669,12 @@ bool SUIT_DataObject::customSorting( const int /*index*/ ) const
 
   \param left first data to compare
   \param right second data to compare
-  \param index column index
+  \param id column id
   \return result of the comparison
   \sa customSorting()
 */
 bool SUIT_DataObject::compare( const QVariant& /*left*/, const QVariant& /*right*/,
-                              const int /*index*/ ) const
+                              const int /*id*/ ) const
 {
   return false;
 }
@@ -941,6 +878,21 @@ void SUIT_DataObject::update()
 {
 }
 
+/*!
+  \brief return unique group identificator
+
+  Groups of data objects are used for column information search.
+  Each column of data model has one or several registered group id
+  If object has the same group id as one of registered, the information
+  will be shown; the custom id of column will be passed into data() method
+  in order to identify column from point of view of data object
+
+ */
+int SUIT_DataObject::groupId() const
+{
+  return 0;
+}
+
 /*!
   \fn void SUIT_DataObject::Signal::created( SUIT_DataObject* object );
   \brief Emitted when data object is created.
index 40916cf038b37b7536388966102a17538e7f5615..03798ea8ec1b4d50769e5373ba7ebeebc1012636 100755 (executable)
@@ -55,9 +55,10 @@ public:
     HighlightedText    //!< highlighted foreground (text) color
   } ColorRole;
 
-  //! Column index
-  enum { 
-    NameIdx            //!< name column
+  //! Column id
+  enum
+  { 
+    NameId            //!< name column
   };
 
   SUIT_DataObject( SUIT_DataObject* = 0 );
@@ -67,11 +68,6 @@ public:
   SUIT_DataObject*            lastChild() const;
   SUIT_DataObject*            firstChild() const;
 
-  virtual int                 columnCount() const;
-  virtual QString             columnTitle( const int = NameIdx ) const;
-  virtual QPixmap             columnIcon( const int = NameIdx ) const;
-  virtual bool                appropriate( const int = NameIdx ) const;
-
   int                         childCount() const;
   int                         childPos( const SUIT_DataObject* ) const;
   SUIT_DataObject*            childObject( const int ) const;
@@ -98,34 +94,34 @@ public:
   virtual void                setParent( SUIT_DataObject* );
 
   virtual QString             name() const;
-  virtual QString             text( const int = NameIdx ) const;
-  virtual QPixmap             icon( const int = NameIdx ) const;
-  virtual QColor              color( const ColorRole, const int = NameIdx ) const;
-  virtual QString             toolTip( const int = NameIdx ) const;
-  virtual QString             statusTip( const int = NameIdx ) const;
-  virtual QString             whatsThis( const int = NameIdx ) const;
-  virtual QFont               font( const int = NameIdx ) const;
-  virtual int                 alignment( const int = NameIdx ) const;
+  virtual QString             text( const int = NameId ) const;
+  virtual QPixmap             icon( const int = NameId ) const;
+  virtual QColor              color( const ColorRole, const int = NameId ) const;
+  virtual QString             toolTip( const int = NameId ) const;
+  virtual QString             statusTip( const int = NameId ) const;
+  virtual QString             whatsThis( const int = NameId ) const;
+  virtual QFont               font( const int = NameId ) const;
+  virtual int                 alignment( const int = NameId ) const;
 
   virtual bool                isDragable() const;
   virtual bool                isDropAccepted( SUIT_DataObject* obj );
 
   virtual bool                isEnabled() const;
   virtual bool                isSelectable() const;
-  virtual bool                isCheckable( const int = NameIdx ) const;
+  virtual bool                isCheckable( const int = NameId ) const;
 
-  virtual bool                isOn( const int = NameIdx ) const;
-  virtual void                setOn( const bool, const int = NameIdx );
+  virtual bool                isOn( const int = NameId ) const;
+  virtual void                setOn( const bool, const int = NameId );
 
   virtual bool                isOpen() const;
   virtual void                setOpen( const bool );
 
   virtual void                update();
-  virtual bool                customSorting( const int = NameIdx ) const;
-  virtual bool                compare( const QVariant&, const QVariant&, 
-                                      const int = NameIdx ) const;
+  virtual bool                customSorting( const int = NameId ) const;
+  virtual bool                compare( const QVariant&, const QVariant&, const int = NameId ) const;
 
   virtual SUIT_DataObjectKey* key() const;
+  virtual int groupId() const;
 
   static Signal*              signal();
   static bool                 connect( const char*, QObject*, const char* );
index b58523931a40264b05f909df867cb359683c7f53..09230462ba325060d128985eeb22cb4a42d6ed4f 100755 (executable)
 #include "SUIT_DataObject.h"
 
 #include <QApplication>
+#include <QHash>
+
+SUIT_AbstractModel::SUIT_AbstractModel()
+{
+}
+
+SUIT_AbstractModel::operator const QAbstractItemModel*() const
+{
+  return dynamic_cast<const QAbstractItemModel*>( this );
+}
+
+SUIT_AbstractModel::operator QAbstractItemModel*()
+{
+  return dynamic_cast<QAbstractItemModel*>( this );
+}
+
+SUIT_AbstractModel::operator const QObject*() const
+{
+  return dynamic_cast<const QObject*>( this );
+}
+
+
+
+
+
 
 /*!
   \class SUIT_TreeModel::TreeItem
@@ -450,6 +475,140 @@ SUIT_TreeModel::~SUIT_TreeModel()
   delete myRootItem;
 }
 
+/*!
+  \brief Register new column in the model
+  \param group_id - unique data object group identificator
+  \param name - translated column name
+  \param custom_id - custom column id that should be passed into method SUIT_DataObject::data()
+ */
+void SUIT_TreeModel::registerColumn( const int group_id, const QString& name, const int custom_id )
+{
+  bool found = false;
+  for( int i=0, n=myColumns.size(); i<n && !found; i++ )
+    if( name==myColumns[i].myName )
+       {
+         myColumns[i].myIds.insert( group_id, custom_id );
+         found = true;
+       }
+  if( !found )
+  {
+       ColumnInfo inf;
+       inf.myName = name;
+       inf.myIds.insert( group_id, custom_id );
+       inf.myAppropriate = Qtx::Shown;
+       int n = myColumns.size();
+       myColumns.resize( n+1 );
+       myColumns[n] = inf;
+       reset();
+  }
+}
+
+/*!
+  \brief Remove column from the model
+
+  Please take into account that column is removed only for given group_id, it means
+  that information of data objects with such group_id won't be shown.
+  If there is not any registered group_id for this column after removing, the column will be hidden
+  otherwise it continue to be shown
+
+  \param group_id - unique data object identificator allowing the classification of objects 
+  \param name - translated column name
+ */
+void SUIT_TreeModel::unregisterColumn( const int group_id, const QString& name )
+{
+  for( int i=0, n=myColumns.size(); i<n; i++ )
+    if( myColumns[i].myName==name )
+       {
+         myColumns[i].myIds.remove( group_id );
+         if( myColumns[i].myIds.isEmpty() )
+         {
+           myColumns.remove( i );
+               reset();
+         }
+         break;
+    }
+}
+
+/*!
+  \brief Change column icon.
+
+  \param name - column name
+  \param icon - new icon of the specified column
+*/
+void SUIT_TreeModel::setColumnIcon( const QString& name, const QPixmap& icon )
+{
+  for( int i=0, n=myColumns.size(); i<n; i++ )
+    if( myColumns[i].myName==name )
+       {
+         myColumns[i].myIcon = icon;
+         break;
+       }
+}
+
+/*!
+  \brief Get column icon.
+
+  \param name - column name
+  \return icon of the specified column
+*/
+QPixmap SUIT_TreeModel::columnIcon( const QString& name ) const
+{
+  QPixmap res;
+  for( int i=0, n=myColumns.size(); i<n; i++ )
+    if( myColumns[i].myName==name )
+       {
+         res = myColumns[i].myIcon;
+         break;
+       }
+  return res;
+}
+
+/*!
+  \brief Change appropriate status
+  
+  Appropriate status determines if the column should appear in the tree view header popup menu
+  (to show/hide the column).
+
+  If appropriate status is not specified yet, the \c Shown value is taken,
+  it means that column should be always visible.
+
+  \param name - column name
+  \param appr - new appropriate status
+*/
+void SUIT_TreeModel::setAppropriate( const QString& name, const Qtx::Appropriate appr )
+{
+  for( int i=0, n=myColumns.size(); i<n; i++ )
+    if( myColumns[i].myName==name )
+       {
+         myColumns[i].myAppropriate = appr;
+         emit headerDataChanged( Qt::Horizontal, i, i );
+         break;
+       }
+}
+
+/*!
+  \brief Check if the column should appear in the tree view header popup menu
+  (to show/hide the column).
+
+  Default implementation (if appropriate status is not specified yet)
+  returns \c Shown, it means that column should be always visible.
+
+  \param name - column name
+  \return appropriate status
+*/
+Qtx::Appropriate SUIT_TreeModel::appropriate( const QString& name ) const
+{
+  Qtx::Appropriate appr = Qtx::Shown;
+  for( int i=0, n=myColumns.size(); i<n; i++ )
+    if( myColumns[i].myName==name )
+       {
+         appr = myColumns[i].myAppropriate;
+         break;
+       }
+  return appr;
+}
+
+
 /*!
   \brief Get data tree root object.
   \return data tree root
@@ -502,84 +661,98 @@ QVariant SUIT_TreeModel::data( const QModelIndex& index, int role ) const
   QColor c;
   QVariant val;
 
-  if ( obj ) {
-    switch ( role ) {
+  int obj_group_id = obj->groupId();
+  const ColumnInfo& inf = myColumns[index.column()];
+
+  int id = -1;
+  if( inf.myIds.contains( 0 ) )
+    id = inf.myIds[0];
+  if( inf.myIds.contains( obj_group_id ) )
+    id = inf.myIds[obj_group_id];
+
+  if( id<0 )
+    return QVariant();
+
+  if ( obj )
+  {
+    switch ( role )
+       {
     case DisplayRole:
       // data object text for the specified column
-      val = obj->text( index.column() ); 
+      val = obj->text( id ); 
       break;
     case DecorationRole:
       // data object icon for the specified column
-      val = obj->icon( index.column() ); 
+      val = obj->icon( id ); 
       break;
     case ToolTipRole:
       // data object tooltip for the specified column
-      val = obj->toolTip( index.column() ); 
+      val = obj->toolTip( id ); 
       break;
     case StatusTipRole:
       // data object status tip for the specified column
-      val = obj->statusTip( index.column() ); 
+      val = obj->statusTip( id ); 
       break;
     case WhatsThisRole:
       // data object what's this info for the specified column
-      val = obj->whatsThis( index.column() ); 
+      val = obj->whatsThis( id ); 
       break;
     case FontRole:
       // data object font for the specified column
-      val = obj->font( index.column() ); 
+      val = obj->font( id ); 
       break;
     case TextAlignmentRole:
       // data object text alignment for the specified column
-      val = obj->alignment( index.column() ); 
+      val = obj->alignment( id ); 
       break;
     case BackgroundRole:
       // data background color for the specified column
-      c = obj->color( SUIT_DataObject::Background, index.column() );
-      if ( !c.isValid() ) // default value
-       c = QApplication::palette().color( QPalette::Base );
+      c = obj->color( SUIT_DataObject::Background, id );
+      if( !c.isValid() ) // default value
+           c = QApplication::palette().color( QPalette::Base );
       c.setAlpha( 0 );
       val = c; 
       break;
     case ForegroundRole:
       // data foreground (text) color for the specified column
-      c = obj->color( SUIT_DataObject::Foreground, index.column() );
-      if ( !c.isValid() ) // default value
-       c = QApplication::palette().color( QPalette::Foreground );
+      c = obj->color( SUIT_DataObject::Foreground, id );
+      if( !c.isValid() ) // default value
+           c = QApplication::palette().color( QPalette::Foreground );
       val = c; 
       break;
     case BaseColorRole:
       // editor background color for the specified column
-      c = obj->color( SUIT_DataObject::Base, index.column() );
-      if ( !c.isValid() ) // default value
-       c = QApplication::palette().color( QPalette::Base );
+      c = obj->color( SUIT_DataObject::Base, id );
+      if( !c.isValid() ) // default value
+           c = QApplication::palette().color( QPalette::Base );
       val = c; 
       break;
     case TextColorRole:
       // editor foreground (text) color for the specified column
-      c = obj->color( SUIT_DataObject::Text, index.column() );
-      if ( !c.isValid() ) // default value
-       c = QApplication::palette().color( QPalette::Text );
+      c = obj->color( SUIT_DataObject::Text, id );
+      if( !c.isValid() ) // default value
+           c = QApplication::palette().color( QPalette::Text );
       val = c; 
       break;
     case HighlightRole:
       // adta object highlighted background color for the specified column
-      c = obj->color( SUIT_DataObject::Highlight, index.column() );
-      if ( !c.isValid() ) // default value
-       c = QApplication::palette().color( QPalette::Highlight );
+      c = obj->color( SUIT_DataObject::Highlight, id );
+      if( !c.isValid() ) // default value
+           c = QApplication::palette().color( QPalette::Highlight );
       val = c; 
       break;
     case HighlightedTextRole:
       // data object highlighted foreground (text) color for the specified column
-      c = obj->color( SUIT_DataObject::HighlightedText, index.column() );
-      if ( !c.isValid() ) // default value
-       c = QApplication::palette().color( QPalette::HighlightedText );
+      c = obj->color( SUIT_DataObject::HighlightedText, id );
+      if( !c.isValid() ) // default value
+           c = QApplication::palette().color( QPalette::HighlightedText );
       val = c; 
       break;
     case CheckStateRole:
       // data object checked state for the specified column
       // NOTE! three-state check is not supported currently
-      if ( obj->isCheckable( index.column() ) )
-       val = obj->isOn( index.column() ) ? Qt::Checked : Qt::Unchecked; 
+      if( obj->isCheckable( id ) )
+           val = obj->isOn( id ) ? Qt::Checked : Qt::Unchecked; 
       break;
     case SizeHintRole:
       // data size hint
@@ -660,24 +833,25 @@ Qt::ItemFlags SUIT_TreeModel::flags( const QModelIndex& index ) const
   \param role data role
   \return header data
 */
-QVariant SUIT_TreeModel::headerData( int column, Qt::Orientation orientation,
-                                    int role ) const
+QVariant SUIT_TreeModel::headerData( int column, Qt::Orientation orientation, int role ) const
 {
   QVariant d;
   // NOTE! only horizontal header is supported
-  if ( root() && orientation == Qt::Horizontal ) {
-    switch ( role ) {
+  if ( root() && orientation == Qt::Horizontal )
+  {
+    switch ( role )
+       {
     case DisplayRole:
       // column title
-      d = root()->columnTitle( column );
+      d = myColumns[column].myName;
       break;
     case DecorationRole:
       // column icon
-      d = root()->columnIcon( column );
+      d = myColumns[column].myIcon;
       break;
     case AppropriateRole:
       // appropriate flag (can column be hidden via context popup menu)
-      d = root()->appropriate( column );
+      d = myColumns[column].myAppropriate;
       break;
     default:
       break;
@@ -696,14 +870,22 @@ QVariant SUIT_TreeModel::headerData( int column, Qt::Orientation orientation,
 QModelIndex SUIT_TreeModel::index( int row, int column, 
                                   const QModelIndex& parent ) const
 {
-  if ( hasIndex( row, column, parent ) ) {
+  if( hasIndex( row, column, parent ) )
+  {
     TreeItem* parentItem = treeItem( parent );
-    if ( parentItem ) {
+    QString pname;
+    if( parentItem && parentItem->dataObject() )
+      pname = parentItem->dataObject()->name();
+    if( parentItem )
+    {
       TreeItem* childItem = parentItem->child( row );
-      if ( childItem )
+      if( childItem )
+      {
+        QString cname = childItem->dataObject()->name();
        return createIndex( row, column, childItem );
     }
   }
+  }
   return QModelIndex();
 }
 
@@ -734,7 +916,7 @@ QModelIndex SUIT_TreeModel::parent( const QModelIndex& index ) const
 */
 int SUIT_TreeModel::columnCount( const QModelIndex& /*parent*/ ) const
 {
-  return root() ? root()->columnCount() : 0;
+  return myColumns.size();
 }
 
 /*!
@@ -942,6 +1124,7 @@ void SUIT_TreeModel::initialize()
   if ( !myRootItem )
     myRootItem = new TreeItem( 0 );
 
+  registerColumn( 0, QObject::tr( "NAME_COLUMN" ), SUIT_DataObject::NameId );
   updateTree();
 }
 
@@ -1039,7 +1222,7 @@ void SUIT_TreeModel::updateItem( SUIT_TreeModel::TreeItem* item )
   
   // update all columns corresponding to the given data object
   QModelIndex firstIdx = index( obj, 0 );
-  QModelIndex lastIdx  = index( obj, obj->columnCount() - 1 );
+  QModelIndex lastIdx  = index( obj, columnCount() - 1 );
   emit dataChanged( firstIdx, lastIdx );
 }
 
@@ -1143,12 +1326,12 @@ SUIT_ProxyModel::SUIT_ProxyModel( SUIT_DataObject* root, QObject* parent )
   \param model tree model
   \param parent parent object
 */
-SUIT_ProxyModel::SUIT_ProxyModel( SUIT_TreeModel* model, QObject* parent )
+SUIT_ProxyModel::SUIT_ProxyModel( SUIT_AbstractModel* model, QObject* parent )
 : QSortFilterProxyModel( parent ),
   mySortingEnabled( true )
 {
-  connect( model, SIGNAL( modelUpdated() ), this, SIGNAL( modelUpdated() ) );
-  setSourceModel( model );
+  connect( *model, SIGNAL( modelUpdated() ), this, SIGNAL( modelUpdated() ) );
+  setSourceModel( *model );
 }
 
 /*!
@@ -1318,6 +1501,17 @@ bool SUIT_ProxyModel::lessThan( const QModelIndex& left, const QModelIndex& righ
   return QSortFilterProxyModel::lessThan( left, right );
 }
 
+/*!
+  \brief Check if the specified column supports custom sorting.
+  \param column column index on which data is being sorted
+  \return \c true if column requires custom sorting
+  \sa lessThan()
+*/
+bool SUIT_ProxyModel::customSorting( const int column ) const
+{
+  return treeModel() ? treeModel()->customSorting( column ) : false;
+}
+
 /*!
   \brief Enable/disable sorting.
   \param enabled new flag state
@@ -1333,11 +1527,101 @@ void SUIT_ProxyModel::setSortingEnabled( bool enabled )
   \brief Get tree model.
   \return tree model
 */
-SUIT_TreeModel* SUIT_ProxyModel::treeModel() const
+SUIT_AbstractModel* SUIT_ProxyModel::treeModel() const
+{
+  return dynamic_cast<SUIT_AbstractModel*>( sourceModel() );
+}
+
+/*!
+  \brief Register new column in the model
+  \param group_id - unique data object identificator allowing the classification of objects 
+  \param name - translated column name
+  \param custom_id - custom column id that should be passed into method SUIT_DataObject::data()
+ */
+void SUIT_ProxyModel::registerColumn( const int group_id, const QString& name, const int custom_id )
 {
-  return dynamic_cast<SUIT_TreeModel*>( sourceModel() );
+  if( treeModel() )
+    treeModel()->registerColumn( group_id, name, custom_id );
 }
 
+/*!
+  \brief Remove column from the model
+
+  Please take into account that column is removed only for given group_id, it means
+  that information of data objects with such group_id won't be shown.
+  If there is not any registered group_id for this column after removing, the column will be hidden
+  otherwise it continue to be shown
+
+  \param group_id - unique data object identificator allowing the classification of objects 
+  \param name - translated column name
+ */
+void SUIT_ProxyModel::unregisterColumn( const int group_id, const QString& name )
+{
+  if( treeModel() )
+    treeModel()->unregisterColumn( group_id, name );
+}
+
+/*!
+  \brief Change column icon.
+
+  \param name - column name
+  \param icon - new icon of the specified column
+*/
+void SUIT_ProxyModel::setColumnIcon( const QString& name, const QPixmap& icon )
+{
+  if( treeModel() )
+    treeModel()->setColumnIcon( name, icon );
+}
+
+/*!
+  \brief Get column icon.
+
+  \param name - column name
+  \return icon of the specified column
+*/
+QPixmap SUIT_ProxyModel::columnIcon( const QString& name ) const
+{
+  return treeModel() ? treeModel()->columnIcon( name ) : QPixmap();
+}
+
+/*!
+  \brief Change appropriate status
+  
+  Appropriate status determines if the column should appear in the tree view header popup menu
+  (to show/hide the column).
+
+  If appropriate status is not specified yet, the \c Shown value is taken,
+  it means that column should be always visible.
+
+  \param name - column name
+  \param appr - new appropriate status
+*/
+void SUIT_ProxyModel::setAppropriate( const QString& name, const Qtx::Appropriate appr )
+{
+  if( treeModel() )
+    treeModel()->setAppropriate( name, appr );
+}
+
+/*!
+  \brief Check if the column should appear in the tree view header popup menu
+  (to show/hide the column).
+
+  Default implementation (if appropriate status is not specified yet)
+  returns \c Shown, it means that column should be always visible.
+
+  \param name - column name
+  \return appropriate status
+*/
+Qtx::Appropriate SUIT_ProxyModel::appropriate( const QString& name ) const
+{
+  return treeModel() ? treeModel()->appropriate( name ) : Qtx::Shown;
+}
+
+
+
+
+
+
 /*!
   \class SUIT_ItemDelegate
   \brief An SUIT_DataObject-based item delegate class.
index 74e593dfbbd080e3b14700b96177b73b58c75ce4..ecad0d41369cc425257cc149499f615f72b51df2 100755 (executable)
 class SUIT_DataObject;
 class SUIT_TreeModel;
 
-class SUIT_EXPORT SUIT_TreeModel : public QAbstractItemModel
+class SUIT_EXPORT SUIT_AbstractModel
+{
+public:
+  SUIT_AbstractModel();
+
+  operator const QAbstractItemModel*() const;
+  operator QAbstractItemModel*();
+  operator const QObject*() const;
+
+  virtual SUIT_DataObject* root() const = 0;
+  virtual void             setRoot( SUIT_DataObject* ) = 0;
+  virtual SUIT_DataObject* object( const QModelIndex& = QModelIndex() ) const = 0;
+  virtual QModelIndex      index( const SUIT_DataObject*, int = 0 ) const = 0;
+  virtual bool             autoDeleteTree() const = 0;
+  virtual void             setAutoDeleteTree( const bool ) = 0;
+  virtual bool             autoUpdate() const = 0;
+  virtual void             setAutoUpdate( const bool ) = 0;
+  virtual QAbstractItemDelegate* delegate() const = 0;
+  virtual bool             customSorting( const int ) const = 0;
+  virtual bool             lessThan( const QModelIndex& left, const QModelIndex& right ) const = 0;
+
+  virtual void             updateTree( const QModelIndex& ) = 0;
+  virtual void             updateTree( SUIT_DataObject* = 0 ) = 0;
+
+  virtual void             registerColumn( const int group_id, const QString& name, const int custom_id ) = 0;
+  virtual void             unregisterColumn( const int group_id, const QString& name ) = 0;
+  virtual void             setColumnIcon( const QString& name, const QPixmap& icon ) = 0;
+  virtual QPixmap          columnIcon( const QString& name ) const = 0;
+  virtual void             setAppropriate( const QString& name, const Qtx::Appropriate appr ) = 0;
+  virtual Qtx::Appropriate appropriate( const QString& name ) const = 0;
+};
+
+
+class SUIT_EXPORT SUIT_TreeModel : public QAbstractItemModel, public SUIT_AbstractModel
 {
   Q_OBJECT
 
@@ -87,8 +120,14 @@ public:
   virtual QModelIndex    index( int, int, const QModelIndex& = QModelIndex() ) const;
   virtual QModelIndex    parent( const QModelIndex& ) const;
 
-  virtual int            columnCount( const QModelIndex& = QModelIndex() ) const;
-  virtual int            rowCount( const QModelIndex& = QModelIndex() ) const;
+  virtual int              columnCount( const QModelIndex& = QModelIndex() ) const;
+  virtual int              rowCount( const QModelIndex& = QModelIndex() ) const;
+  virtual void             registerColumn( const int group_id, const QString& name, const int custom_id );
+  virtual void             unregisterColumn( const int group_id, const QString& name );
+  virtual void             setColumnIcon( const QString& name, const QPixmap& icon );
+  virtual QPixmap          columnIcon( const QString& name ) const;
+  virtual void             setAppropriate( const QString& name, const Qtx::Appropriate appr );
+  virtual Qtx::Appropriate appropriate( const QString& name ) const;
 
   SUIT_DataObject*       object( const QModelIndex& = QModelIndex() ) const;
   QModelIndex            index( const SUIT_DataObject*, int = 0 ) const;
@@ -119,9 +158,7 @@ private:
   TreeItem*              treeItem( const SUIT_DataObject* ) const;
   SUIT_DataObject*       object( const TreeItem* ) const;
 
-  TreeItem*              createItem( SUIT_DataObject*,
-                                    TreeItem* = 0, 
-                                    TreeItem* = 0 );
+  TreeItem*              createItem( SUIT_DataObject*, TreeItem* = 0, TreeItem* = 0 );
   void                   updateItem( TreeItem* );
   void                   removeItem( TreeItem* );
 
@@ -131,24 +168,33 @@ private slots:
 
 private:
   typedef QMap<SUIT_DataObject*, TreeItem*> ItemMap;
+  typedef struct
+  {
+    QString myName;
+       QMap<int,int> myIds;
+       QPixmap myIcon;
+       Qtx::Appropriate myAppropriate;
+
+  } ColumnInfo;
   
-  SUIT_DataObject*       myRoot;
-  TreeItem*              myRootItem;
-  ItemMap                myItems;
-  bool                   myAutoDeleteTree;
-  bool                   myAutoUpdate;
+  SUIT_DataObject*    myRoot;
+  TreeItem*           myRootItem;
+  ItemMap             myItems;
+  bool                myAutoDeleteTree;
+  bool                myAutoUpdate;
+  QVector<ColumnInfo> myColumns;
 
   friend class SUIT_TreeModel::TreeSync;
 };
 
-class SUIT_EXPORT SUIT_ProxyModel : public QSortFilterProxyModel
+class SUIT_EXPORT SUIT_ProxyModel : public QSortFilterProxyModel, public SUIT_AbstractModel
 {
   Q_OBJECT
 
 public:
   SUIT_ProxyModel( QObject* = 0 );
   SUIT_ProxyModel( SUIT_DataObject*, QObject* = 0 );
-  SUIT_ProxyModel( SUIT_TreeModel*, QObject* = 0 );
+  SUIT_ProxyModel( SUIT_AbstractModel*, QObject* = 0 );
   ~SUIT_ProxyModel();
 
   SUIT_DataObject*       root() const;
@@ -164,6 +210,15 @@ public:
   void                   setAutoUpdate( const bool );
  
   bool                   isSortingEnabled() const;
+  bool                   customSorting( const int ) const;
+
+  virtual bool             lessThan( const QModelIndex&, const QModelIndex& ) const;
+  virtual void             registerColumn( const int group_id, const QString& name, const int custom_id );
+  virtual void             unregisterColumn( const int group_id, const QString& name );
+  virtual void             setColumnIcon( const QString& name, const QPixmap& icon );
+  virtual QPixmap          columnIcon( const QString& name ) const;
+  virtual void             setAppropriate( const QString& name, const Qtx::Appropriate appr );
+  virtual Qtx::Appropriate appropriate( const QString& name ) const;
 
   QAbstractItemDelegate* delegate() const;
 
@@ -176,10 +231,7 @@ signals:
   void modelUpdated();
 
 protected:
-  virtual bool           lessThan( const QModelIndex&, const QModelIndex& ) const;
-
-private:
-  SUIT_TreeModel*        treeModel() const;
+  SUIT_AbstractModel*    treeModel() const;
 
 private:
   bool                   mySortingEnabled;
index 3dc0710f08220030ab6735e9bdce66d662870e3d..3ad682944b8b4bb91a5456dd255628d8344eeb72 100644 (file)
@@ -774,6 +774,22 @@ QWidget* SalomeApp_Application::createWindow( const int flag )
 
       connect( ob, SIGNAL( doubleClicked( SUIT_DataObject* ) ), this, SLOT( onDblClick( SUIT_DataObject* ) ) );
 
+      QString
+        ValueCol = QObject::tr( "VALUE_COLUMN" ),
+        IORCol = QObject::tr( "IOR_COLUMN" ),
+        RefCol = QObject::tr( "REFENTRY_COLUMN" ),
+        EntryCol = QObject::tr( "ENTRY_COLUMN" );
+
+      SUIT_AbstractModel* treeModel = dynamic_cast<SUIT_AbstractModel*>( ob->model() );
+      treeModel->registerColumn( 0, EntryCol, SalomeApp_DataObject::EntryId );
+      treeModel->registerColumn( 0, ValueCol, SalomeApp_DataObject::ValueId );
+      treeModel->registerColumn( 0, IORCol, SalomeApp_DataObject::IORId );
+      treeModel->registerColumn( 0, RefCol, SalomeApp_DataObject::RefEntryId );
+      treeModel->setAppropriate( EntryCol, Qtx::Toggled );
+      treeModel->setAppropriate( ValueCol, Qtx::Toggled );
+      treeModel->setAppropriate( IORCol, Qtx::Toggled );
+      treeModel->setAppropriate( RefCol, Qtx::Toggled );
+
       bool autoSize      = resMgr->booleanValue( "ObjectBrowser", "auto_size", false );
       bool autoSizeFirst = resMgr->booleanValue( "ObjectBrowser", "auto_size_first", true );
       bool resizeOnExpandItem = resMgr->booleanValue( "ObjectBrowser", "resize_on_expand_item", true );
@@ -822,10 +838,10 @@ void SalomeApp_Application::createPreferences( LightApp_Preferences* pref )
   int salomeCat = pref->addPreference( tr( "PREF_CATEGORY_SALOME" ) );
   int obTab = pref->addPreference( tr( "PREF_TAB_OBJBROWSER" ), salomeCat );
   int defCols = pref->addPreference( tr( "PREF_GROUP_DEF_COLUMNS" ), obTab );
-  for ( int i = SalomeApp_DataObject::EntryIdx; i <= SalomeApp_DataObject::RefEntryIdx; i++ )
+  for ( int i = SalomeApp_DataObject::EntryId; i <= SalomeApp_DataObject::RefEntryId; i++ )
   {
     pref->addPreference( tr( QString().sprintf( "OBJ_BROWSER_COLUMN_%d", i-1 ).toLatin1() ), defCols,
-                         LightApp_Preferences::Bool, "ObjectBrowser", QString().sprintf( "visibility_column_%d", i-1 ) );
+                         LightApp_Preferences::Bool, "ObjectBrowser", QString().sprintf( "visibility_column_id_%d", i ) );
   }
   pref->setItemProperty( "orientation", Qt::Vertical, defCols );
 
@@ -1418,9 +1434,9 @@ bool SalomeApp_Application::useStudy( const QString& theName )
 void SalomeApp_Application::objectBrowserColumnsVisibility()
 {
   if ( objectBrowser() )
-    for ( int i = SalomeApp_DataObject::EntryIdx; i <= SalomeApp_DataObject::RefEntryIdx; i++ )
-      objectBrowser()->treeView()->setColumnHidden( i, 
-                                                   !(resourceMgr()->booleanValue( "ObjectBrowser",
-                                                                                  QString().sprintf( "visibility_column_%d", i-1 ), 
-                                                                                  true )) );
+    for ( int i = SalomeApp_DataObject::EntryId; i <= SalomeApp_DataObject::RefEntryId; i++ )
+    {
+      bool shown = resourceMgr()->booleanValue( "ObjectBrowser", QString( "visibility_column_id_%1" ).arg( i ), true );
+      objectBrowser()->treeView()->setColumnHidden( i, !shown );
+    }
 }
index c7c01846ebe38ba9c6aea58743d1e9b87da96fcf..80af046c5522c324ed20fa0711445632d86e895f 100644 (file)
@@ -95,6 +95,7 @@ public:
   virtual bool                        isPossibleToClose( bool& );
 
   virtual bool                        useStudy( const QString& );
+  virtual void                        updateDesktopTitle();
 
 public slots:
   virtual void                        onLoadDoc();
@@ -121,7 +122,6 @@ protected:
   virtual void                        onSelectionChanged();
 
   virtual void                        createPreferences( LightApp_Preferences* );
-  virtual void                        updateDesktopTitle();
 
   virtual bool                        closeAction( const int, bool& );
   virtual int                         closeChoice( const QString& );
index 4ba451631d1f37aa5e18c4c1af4a877d97336436..8a2af3bda1d280b2f26156e89d0fe6cc42e0eb18 100644 (file)
@@ -68,50 +68,6 @@ SalomeApp_DataObject::~SalomeApp_DataObject()
 {
 }
 
-/*!
-  \brief Get the number of the columns provided by the data tree.
-  \return number of the columns
-*/
-int SalomeApp_DataObject::columnCount() const
-{
-  // add "Value", "IOR", and "Reference Entry" columns
-  return LightApp_DataObject::columnCount() + 3;
-}
-
-/*!
-  \brief Get column title.
-  \param index column index
-  \return title of the specified column
-*/
-QString SalomeApp_DataObject::columnTitle( const int index ) const
-{
-  // add "Value", "IOR", and "Reference Entry" columns
-  switch ( index ) {
-  case ValueIdx:
-    return QObject::tr( "VALUE_COLUMN" ) ;
-  case IORIdx:
-    return QObject::tr( "IOR_COLUMN" ) ;
-  case RefEntryIdx:
-    return QObject::tr( "REFENTRY_COLUMN" ) ;
-  default:
-    break;
-  }
-  return LightApp_DataObject::columnTitle( index );
-}
-
-/*!
-  \brief Check if the column should appear in the tree view header popup menu
-  (to show/hide the column).
-  \param index column index
-  \return \c true if the column can be shown/hidden
-*/
-bool SalomeApp_DataObject::appropriate( const int index ) const
-{
-  // add "Value", "IOR", and "Reference Entry" columns
-  return index > EntryIdx && index <= RefEntryIdx ? true : 
-    LightApp_DataObject::appropriate( index );
-}
-
 /*!
   \brief Get data object name.
   \return object name
@@ -149,24 +105,24 @@ QString SalomeApp_DataObject::entry() const
 /*!
   \brief Get object text data for the specified column.
 
-  This method returns the data according to the specufied column \a index:
-  - NameIdx     : object name (by calling name() method)
-  - EntryIdx    : object entry (by calling entry() method)
-  - ValueIdx    : object value
-  - IORIdx      : object IOR
-  - RefEntryIdx : object reference entry
+  This method returns the data according to the specufied column \a id:
+  - NameId     : object name (by calling name() method)
+  - EntryId    : object entry (by calling entry() method)
+  - ValueId    : object value
+  - IORId      : object IOR
+  - RefEntryId : object reference entry
 
-  \param index column index
+  \param id column id
   \return object text data
 */
-QString SalomeApp_DataObject::text( const int index ) const
+QString SalomeApp_DataObject::text( const int id ) const
 {
   QString txt;
 
   // add "Value", "IOR", and "Reference Entry" columns
-  switch ( index )
+  switch ( id )
   {
-  case ValueIdx:
+  case ValueId:
 #ifndef WIN32
     if ( componentObject() != this )
 #else
@@ -176,15 +132,15 @@ QString SalomeApp_DataObject::text( const int index ) const
       if ( txt.isEmpty() )
        txt = value( referencedObject() );
     break;
-  case IORIdx:
+  case IORId:
     txt = ior( referencedObject() );
     break;
-  case RefEntryIdx:
+  case RefEntryId :
     if ( isReference() )
       txt = entry( referencedObject() );
     break;
   default:
-    txt = LightApp_DataObject::text( index );
+    txt = LightApp_DataObject::text( id );
     break;
   }
   return txt;
@@ -192,13 +148,13 @@ QString SalomeApp_DataObject::text( const int index ) const
 
 /*!
   \brief Get data object icon for the specified column.
-  \param index column index
+  \param id column id
   \return object icon for the specified column
 */
-QPixmap SalomeApp_DataObject::icon( const int index ) const
+QPixmap SalomeApp_DataObject::icon( const int id ) const
 {
-  // we display icon only for the first (NameIdx) column
-  if ( index == NameIdx ) {
+  // we display icon only for the first (NameId ) column
+  if ( id == NameId ) {
     _PTR(GenericAttribute) anAttr;
     if ( myObject && myObject->FindAttribute( anAttr, "AttributePixMap" ) ){
       _PTR(AttributePixMap) aPixAttr ( anAttr );
@@ -220,18 +176,18 @@ QPixmap SalomeApp_DataObject::icon( const int index ) const
       }
     }
   }
-  return LightApp_DataObject::icon( index );
+  return LightApp_DataObject::icon( id );
 }
 
 /*!
   \brief Get data object color for the specified column.
   \param role color role
-  \param index column index (not used)
+  \param id column id (not used)
   \return object color for the specified column
 */
-QColor SalomeApp_DataObject::color( const ColorRole role, const int index ) const
+QColor SalomeApp_DataObject::color( const ColorRole role, const int id ) const
 {
-  // we ignore parameter <index> in order to use the same colors for 
+  // we ignore parameter <id> in order to use the same colors for 
   // all columns
   QColor c;
   switch ( role )
@@ -280,18 +236,18 @@ QColor SalomeApp_DataObject::color( const ColorRole role, const int index ) cons
     break;
   }
   if ( !c.isValid() )
-    c = LightApp_DataObject::color( role, index );
+    c = LightApp_DataObject::color( role, id );
   return c;
 }
 
 /*!
   \brief Get data object tooltip for the specified column.
-  \param index column index (not used)
+  \param id column id (not used)
   \return object tooltip for the specified column
 */
-QString SalomeApp_DataObject::toolTip( const int /*index*/ ) const
+QString SalomeApp_DataObject::toolTip( const int /*id*/ ) const
 {
-  // we ignore parameter <index> in order to use the same tooltip for 
+  // we ignore parameter <id> in order to use the same tooltip for 
   // all columns
   return QString( "Object \'%1\', module \'%2\', ID=%3" ).arg( name() ).arg( componentDataType() ).arg( entry() );
 }
@@ -356,15 +312,15 @@ _PTR(SObject) SalomeApp_DataObject::referencedObject() const
 
 /*!
   \brief Check if the specified column supports custom sorting.
-  \param index column index
+  \param id column id
   \return \c true if column sorting should be customized
   \sa compare()
 */
-bool SalomeApp_DataObject::customSorting( const int index ) const
+bool SalomeApp_DataObject::customSorting( const int id ) const
 {
   // perform custom sorting for the "Entry" and "Reference Entry" columns
-  return index == EntryIdx || index == RefEntryIdx ? true 
-    : LightApp_DataObject::customSorting( index );
+  return id == EntryId  || id == RefEntryId  ? true 
+    : LightApp_DataObject::customSorting( id );
 }
 
 /*!
@@ -375,16 +331,15 @@ bool SalomeApp_DataObject::customSorting( const int index ) const
 
   \param left first data to compare
   \param right second data to compare
-  \param index column index
+  \param id column id
   \return result of the comparison
   \sa customSorting()
 */
-bool SalomeApp_DataObject::compare( const QVariant& left, const QVariant& right, 
-                                   const int index ) const
+bool SalomeApp_DataObject::compare( const QVariant& left, const QVariant& right, const int id ) const
 {
   // use the same custom sorting for the "Reference Entry" column as for the
   // "Entry" column (call base implementation)
-  return LightApp_DataObject::compare( left, right, index == RefEntryIdx ? EntryIdx : index );
+  return LightApp_DataObject::compare( left, right, id == RefEntryId ? EntryId : id );
 }
 
 /*!
@@ -548,22 +503,22 @@ QString SalomeApp_ModuleObject::name() const
 
 /*!
   \brief Get data object icon for the specified column.
-  \param index column index
+  \param id column id
   \return object icon for the specified column
 */
-QPixmap SalomeApp_ModuleObject::icon( const int index ) const
+QPixmap SalomeApp_ModuleObject::icon( const int id ) const
 {
-  return SalomeApp_DataObject::icon( index );
+  return SalomeApp_DataObject::icon( id );
 }
 
 /*!
   \brief Get data object tooltip for the specified column.
-  \param index column index
+  \param id column id
   \return object tooltip for the specified column
 */
-QString SalomeApp_ModuleObject::toolTip( const int index ) const
+QString SalomeApp_ModuleObject::toolTip( const int id ) const
 {
-  return SalomeApp_DataObject::toolTip( index );
+  return SalomeApp_DataObject::toolTip( id );
 }
 
 /*!
@@ -615,43 +570,43 @@ QString SalomeApp_RootObject::entry() const
 
 /*!
   \brief Get object text data for the specified column.
-  \param index column index
+  \param id column id
   \return object text data
 */
-QString SalomeApp_RootObject::text( const int index ) const
+QString SalomeApp_RootObject::text( const int id ) const
 {
-  return LightApp_RootObject::text( index );
+  return LightApp_RootObject::text( id );
 }
 
 /*!
   \brief Get data object icon for the specified column.
-  \param index column index
+  \param id column id
   \return object icon for the specified column
 */
-QPixmap SalomeApp_RootObject::icon( const int index ) const
+QPixmap SalomeApp_RootObject::icon( const int id ) const
 {
-  return LightApp_RootObject::icon( index );
+  return LightApp_RootObject::icon( id );
 }
 
 /*!
   \brief Get data object color for the specified column.
   \param role color role
-  \param index column index (not used)
+  \param id column id (not used)
   \return object color for the specified column
 */
-QColor SalomeApp_RootObject::color( const ColorRole role, const int index ) const
+QColor SalomeApp_RootObject::color( const ColorRole role, const int id ) const
 {
-  return LightApp_RootObject::color( role, index );
+  return LightApp_RootObject::color( role, id );
 }
 
 /*!
   \brief Get data object tooltip for the specified column.
-  \param index column index (not used)
+  \param id column id (not used)
   \return object tooltip for the specified column
 */
-QString SalomeApp_RootObject::toolTip( const int index ) const
+QString SalomeApp_RootObject::toolTip( const int id ) const
 {
-  return LightApp_RootObject::toolTip( index );
+  return LightApp_RootObject::toolTip( id );
 }
 
 /*!
@@ -714,20 +669,20 @@ QString SalomeApp_SavePointObject::name() const
 
 /*!
   \brief Get data object icon for the specified column.
-  \param index column index
+  \param id column id
   \return object icon for the specified column
 */
-QPixmap SalomeApp_SavePointObject::icon( const int /*index*/ ) const
+QPixmap SalomeApp_SavePointObject::icon( const int /*id*/ ) const
 {
   return QPixmap();
 }
 
 /*!
   \brief Get data object tooltip for the specified column.
-  \param index column index (not used)
+  \param id column id (not used)
   \return object tooltip for the specified column
 */
-QString SalomeApp_SavePointObject::toolTip( const int /*index*/ ) const
+QString SalomeApp_SavePointObject::toolTip( const int /*id*/ ) const
 {
   return QObject::tr( "SAVE_POINT_OBJECT_TOOLTIP" ).arg( name() );
 }
@@ -757,10 +712,10 @@ QString SalomeApp_SavePointRootObject::name() const
 
 /*!
   \brief Get data object tooltip for the specified column.
-  \param index column index (not used)
+  \param id column id (not used)
   \return object tooltip for the specified column
 */
-QString SalomeApp_SavePointRootObject::toolTip( const int /*index*/ ) const
+QString SalomeApp_SavePointRootObject::toolTip( const int /*id*/ ) const
 {
   return QObject::tr( "SAVE_POINT_ROOT_TOOLTIP" ); 
 }
index dbf8267e7956abfed86f850f41b26a1d3e380fe4..c50799edb3835f1f1a699d61210edc4f3f40849e 100644 (file)
@@ -33,11 +33,11 @@ class SALOMEAPP_EXPORT SalomeApp_DataObject : public virtual LightApp_DataObject
 {
 
 public:
-  //! Column index
+  //! Column id
   enum {
-    ValueIdx = EntryIdx + 1,    //!< value column
-    IORIdx,                     //!< IOR column
-    RefEntryId                //!< reference entry column
+    ValueId = EntryId + 1,    //!< value column
+    IORId,                    //!< IOR column
+    RefEntryId                //!< reference entry column
   };
 
 public:
@@ -45,17 +45,13 @@ public:
   SalomeApp_DataObject( const _PTR(SObject)&, SUIT_DataObject* = 0 );
   virtual ~SalomeApp_DataObject();
 
-  virtual int            columnCount() const;
-  virtual QString        columnTitle( const int = NameIdx ) const;
-  virtual bool           appropriate( const int = NameIdx ) const;
-
   virtual QString        name() const;
   virtual QString        entry() const;
 
-  virtual QString        text( const int = NameIdx ) const;
-  virtual QPixmap        icon( const int = NameIdx ) const;
-  virtual QColor         color( const ColorRole, const int = NameIdx ) const;
-  virtual QString        toolTip( const int = NameIdx ) const;
+  virtual QString        text( const int = NameId ) const;
+  virtual QPixmap        icon( const int = NameId ) const;
+  virtual QColor         color( const ColorRole, const int = NameId ) const;
+  virtual QString        toolTip( const int = NameId ) const;
 
   virtual _PTR(SObject)  object() const;
 
@@ -64,9 +60,9 @@ public:
 
   virtual QString        componentDataType() const;
 
-  virtual bool           customSorting( const int = NameIdx ) const;
-  virtual bool           compare( const QVariant&, const QVariant&,
-                                 const int = NameIdx ) const;
+  virtual bool           customSorting( const int = NameId ) const;
+  virtual bool           compare( const QVariant&, const QVariant&, const int = NameId ) const;
+
 private:
   QString                ior( const _PTR(SObject)& ) const;
   QString                entry( const _PTR(SObject)& ) const;
@@ -86,8 +82,8 @@ public:
   virtual ~SalomeApp_ModuleObject();
 
   virtual QString        name() const;
-  QPixmap                icon( const int = NameIdx ) const;
-  QString                toolTip( const int = NameIdx ) const;
+  QPixmap                icon( const int = NameId ) const;
+  QString                toolTip( const int = NameId ) const;
 };
 
 class SALOMEAPP_EXPORT SalomeApp_RootObject : public SalomeApp_DataObject,
@@ -99,10 +95,10 @@ public:
 
   QString                name() const;
   QString                entry() const;
-  QString                text( const int = NameIdx ) const;
-  QPixmap                icon( const int = NameIdx ) const;
-  QColor                 color( const ColorRole, const int = NameIdx ) const;
-  QString                toolTip( const int = NameIdx ) const;
+  QString                text( const int = NameId ) const;
+  QPixmap                icon( const int = NameId ) const;
+  QColor                 color( const ColorRole, const int = NameId ) const;
+  QString                toolTip( const int = NameId ) const;
 };
 
 class SALOMEAPP_EXPORT SalomeApp_SavePointObject : public virtual LightApp_DataObject
@@ -114,8 +110,8 @@ public:
   virtual QString        name() const;
   virtual QString        entry() const;
 
-  virtual QPixmap        icon( const int = NameIdx ) const;
-  virtual QString        toolTip( const int = NameIdx ) const;
+  virtual QPixmap        icon( const int = NameId ) const;
+  virtual QString        toolTip( const int = NameId ) const;
 
   int                    getId() const;
 
@@ -130,7 +126,7 @@ public:
   SalomeApp_SavePointRootObject( SUIT_DataObject* );
 
   virtual QString        name() const;
-  virtual QString        toolTip( const int = NameIdx ) const;
+  virtual QString        toolTip( const int = NameId ) const;
 };
 
 #endif
index 3c428dbc7a9ae3e224234982b95a90d66a4f6792..818ab0796320b2cc235abb8bbdb8b935b8c5f236 100644 (file)
     <parameter name="auto_size"             value="false" />
     <parameter name="auto_size_first"       value="true"  />
     <parameter name="resize_on_expand_item" value="false"  />
-    <parameter name="visibility_column_0"   value="false"  />
-    <parameter name="visibility_column_1"   value="true" />
-    <parameter name="visibility_column_2"   value="false" />
-    <parameter name="visibility_column_3"   value="false" />
+    <parameter name="visibility_column_id_1" value="true"  />
+    <parameter name="visibility_column_id_2" value="true" />
+    <parameter name="visibility_column_id_3" value="true" />
+    <parameter name="visibility_column_id_4" value="true" />
   </section>
   <section name="PyConsole">
     <!-- Python console preferences -->