0030268: Inspectors - improvements in VInspector plugin
authornds <nds@opencascade.com>
Fri, 31 Jan 2020 10:12:45 +0000 (13:12 +0300)
committerbugmaster <bugmaster@opencascade.com>
Wed, 12 Feb 2020 15:00:36 +0000 (18:00 +0300)
- Convert package creation. It is used to prepare some auxiliary presentations/methods to prepare variables for inspector based on occt classes.
- ViewControl package improvement:
  Classes for property view, table, table model are implemented to visualize view of properties.
  This view is filled by selection in tree if the selected object has implemented DumpJson functionality.
- TreeModel package improvements:
  Method InitColumn is implemented in TreeModel_TreeModel to fill default columns in base model. The default columns are:
    Name, Visibility, Rows. Additional columns should be added in successors.
  Container of root items is moved into the base class
- View package imrovements:
  Store preferences: display mode, fit all checked state and type of external context
  View_DisplayPreview is added to process preview for selected in tree view objects
  hide actions Clear, Multi, Single by default (as selection in tree view or Visibility state of item define which presentations should be displayed or erased)
- ShapeView plugin improvements:
  Property View content based on DumpJson (columns in tree view for properties are removed),
  Properties for TopoDS_Shape are displayed
  Explode shape action in tree view to see content of shape by selected shape type. Type of displayed shapes is only preview, it is not used in export action.
  Export shape into BREP. The previous implementation about BREP files in some directory and default view is removed.
- VInspector plugin imrovements:
  Property View content based on DumpJson (columns in tree view for properties are removed),
  Properties for AIS_InteractiveContext and AIS_InteractiveObject are displayed
  obsolete classes to provide properties are removed.
- DFBrowser plugin improvements:
  Property View content based on DumpJson is not used yet. But there is the USE_DUMPJSON macro. It's switch off by default.
  If switch ON, it creates a Property View filled with DumpJson. It's a way of DFBrowser moving on this property view.
  Init uses static variable CDF_Session::CurrentSession()->CurrentApplication to fill plugin if application in plugin is not set but OCAF application exists

- OCC_VERSION_HEX variable used for previous OCCT versions support (before 6.9.0 or 7.2.0) is removed

204 files changed:
tools/Convert/Convert_Tools.cxx [new file with mode: 0644]
tools/Convert/Convert_Tools.hxx [new file with mode: 0644]
tools/Convert/Convert_TransientShape.hxx [new file with mode: 0644]
tools/Convert/FILES [new file with mode: 0644]
tools/DFBrowser/DFBrowser_AttributePaneStack.cxx
tools/DFBrowser/DFBrowser_Communicator.hxx
tools/DFBrowser/DFBrowser_DumpView.hxx
tools/DFBrowser/DFBrowser_HighlightDelegate.hxx
tools/DFBrowser/DFBrowser_Item.cxx
tools/DFBrowser/DFBrowser_Item.hxx
tools/DFBrowser/DFBrowser_ItemApplication.hxx
tools/DFBrowser/DFBrowser_ItemBase.cxx
tools/DFBrowser/DFBrowser_ItemBase.hxx
tools/DFBrowser/DFBrowser_ItemDocument.hxx
tools/DFBrowser/DFBrowser_Module.cxx
tools/DFBrowser/DFBrowser_Module.hxx
tools/DFBrowser/DFBrowser_OpenApplication.cxx
tools/DFBrowser/DFBrowser_OpenApplication.hxx
tools/DFBrowser/DFBrowser_PropertyPanel.hxx
tools/DFBrowser/DFBrowser_SearchLine.hxx
tools/DFBrowser/DFBrowser_SearchLineModel.hxx
tools/DFBrowser/DFBrowser_SearchView.hxx
tools/DFBrowser/DFBrowser_Thread.cxx
tools/DFBrowser/DFBrowser_ThreadItemSearch.hxx
tools/DFBrowser/DFBrowser_TreeLevelLine.hxx
tools/DFBrowser/DFBrowser_TreeLevelLineDelegate.hxx
tools/DFBrowser/DFBrowser_TreeLevelLineModel.cxx
tools/DFBrowser/DFBrowser_TreeLevelLineModel.hxx
tools/DFBrowser/DFBrowser_TreeLevelView.hxx
tools/DFBrowser/DFBrowser_TreeLevelViewModel.cxx
tools/DFBrowser/DFBrowser_TreeLevelViewModel.hxx
tools/DFBrowser/DFBrowser_TreeModel.cxx
tools/DFBrowser/DFBrowser_TreeModel.hxx
tools/DFBrowser/DFBrowser_Window.cxx
tools/DFBrowser/DFBrowser_Window.hxx
tools/DFBrowserPane/DFBrowserPane_AttributePane.cxx
tools/DFBrowserPane/DFBrowserPane_AttributePane.hxx
tools/DFBrowserPane/DFBrowserPane_AttributePaneCreator.cxx
tools/DFBrowserPane/DFBrowserPane_AttributePaneCreator.hxx
tools/DFBrowserPane/DFBrowserPane_AttributePaneCreatorAPI.hxx
tools/DFBrowserPane/DFBrowserPane_AttributePaneModel.hxx
tools/DFBrowserPane/DFBrowserPane_HelperExport.hxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNode.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNode.hxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNodeItem.hxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNodeModel.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNodeModel.hxx
tools/DFBrowserPane/DFBrowserPane_TDocStdOwner.cxx
tools/DFBrowserPane/DFBrowserPane_TNamingNamedShape.cxx
tools/DFBrowserPane/DFBrowserPane_TNamingNaming.cxx
tools/DFBrowserPane/DFBrowserPane_TNamingUsedShapes.cxx
tools/DFBrowserPane/DFBrowserPane_TPrsStdAISPresentation.cxx
tools/DFBrowserPane/DFBrowserPane_TPrsStdAISViewer.cxx
tools/DFBrowserPane/DFBrowserPane_Tools.cxx
tools/DFBrowserPane/DFBrowserPane_Tools.hxx
tools/DFBrowserPane/FILES
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_AttributeCommonPane.cxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_AttributeCommonPane.hxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_AttributePaneCreator.cxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_AttributePaneCreator.hxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_XCAFDocDatum.cxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_XCAFDocShapeMapTool.cxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_XDEDRAW.cxx
tools/ShapeView/FILES
tools/ShapeView/ShapeView_Communicator.hxx
tools/ShapeView/ShapeView_ItemBase.hxx [deleted file]
tools/ShapeView/ShapeView_ItemRoot.cxx
tools/ShapeView/ShapeView_ItemRoot.hxx
tools/ShapeView/ShapeView_ItemShape.cxx
tools/ShapeView/ShapeView_ItemShape.hxx
tools/ShapeView/ShapeView_OpenFileDialog.hxx
tools/ShapeView/ShapeView_OpenFileViewModel.hxx
tools/ShapeView/ShapeView_Tools.cxx
tools/ShapeView/ShapeView_Tools.hxx
tools/ShapeView/ShapeView_TreeModel.cxx
tools/ShapeView/ShapeView_TreeModel.hxx
tools/ShapeView/ShapeView_VisibilityState.cxx
tools/ShapeView/ShapeView_VisibilityState.hxx
tools/ShapeView/ShapeView_Window.cxx
tools/ShapeView/ShapeView_Window.hxx
tools/TInspector/FILES
tools/TInspector/TInspector.qrc
tools/TInspector/TInspector_Communicator.hxx
tools/TInspector/TInspector_OpenButton.cxx [new file with mode: 0644]
tools/TInspector/TInspector_OpenButton.hxx [new file with mode: 0644]
tools/TInspector/TInspector_OpenFileDialog.cxx [moved from tools/TInspectorEXE/TInspectorEXE_OpenFileDialog.cxx with 72% similarity]
tools/TInspector/TInspector_OpenFileDialog.hxx [moved from tools/TInspectorEXE/TInspectorEXE_OpenFileDialog.hxx with 70% similarity]
tools/TInspector/TInspector_OpenFileViewModel.cxx [moved from tools/TInspectorEXE/TInspectorEXE_OpenFileViewModel.cxx with 92% similarity]
tools/TInspector/TInspector_OpenFileViewModel.hxx [moved from tools/TInspectorEXE/TInspectorEXE_OpenFileViewModel.hxx with 91% similarity]
tools/TInspector/TInspector_PluginParameters.hxx
tools/TInspector/TInspector_Preferences.hxx
tools/TInspector/TInspector_Window.cxx
tools/TInspector/TInspector_Window.hxx
tools/TInspector/icons/folder_export.png [moved from tools/TInspectorEXE/icons/folder_export.png with 100% similarity]
tools/TInspector/icons/folder_import.png [moved from tools/TInspectorEXE/icons/folder_import.png with 100% similarity]
tools/TInspector/icons/folder_open.png [moved from tools/TInspectorEXE/icons/folder_open.png with 100% similarity]
tools/TInspector/icons/item_algo_folder.png [deleted file]
tools/TInspectorAPI/FILES
tools/TInspectorAPI/TInspectorAPI_Communicator.hxx
tools/TInspectorAPI/TInspectorAPI_PluginParameters.cxx
tools/TInspectorAPI/TInspectorAPI_PluginParameters.hxx
tools/TInspectorAPI/TInspectorAPI_Version.hxx [deleted file]
tools/TInspectorEXE/EXTERNLIB
tools/TInspectorEXE/FILES
tools/TInspectorEXE/PACKAGES [deleted file]
tools/TInspectorEXE/TInspectorEXE.cxx
tools/TInspectorEXE/TInspectorEXE.qrc [deleted file]
tools/TKShapeView/EXTERNLIB
tools/TKTInspectorAPI/EXTERNLIB
tools/TKTInspectorAPI/PACKAGES
tools/TKToolsDraw/EXTERNLIB
tools/TKTreeModel/EXTERNLIB
tools/TKView/EXTERNLIB
tools/ToolsDraw/ToolsDraw.cxx
tools/ToolsDraw/ToolsDraw.hxx
tools/TreeModel/FILES
tools/TreeModel/TreeModel.hxx [deleted file]
tools/TreeModel/TreeModel_ContextMenu.hxx
tools/TreeModel/TreeModel_HeaderSection.hxx
tools/TreeModel/TreeModel_ItemBase.cxx
tools/TreeModel/TreeModel_ItemBase.hxx
tools/TreeModel/TreeModel_ItemProperties.cxx [new file with mode: 0644]
tools/TreeModel/TreeModel_ItemProperties.hxx [new file with mode: 0644]
tools/TreeModel/TreeModel_ItemStream.cxx [moved from tools/VInspector/VInspector_ItemFolderObject.cxx with 51% similarity]
tools/TreeModel/TreeModel_ItemStream.hxx [new file with mode: 0644]
tools/TreeModel/TreeModel_ModelBase.cxx
tools/TreeModel/TreeModel_ModelBase.hxx
tools/TreeModel/TreeModel_Tools.cxx
tools/TreeModel/TreeModel_Tools.hxx
tools/TreeModel/TreeModel_VisibilityState.cxx
tools/TreeModel/TreeModel_VisibilityState.hxx
tools/VInspector/FILES
tools/VInspector/VInspectorAPI_CallBack.cxx
tools/VInspector/VInspectorAPI_CallBack.hxx
tools/VInspector/VInspector_CallBack.cxx
tools/VInspector/VInspector_CallBack.hxx
tools/VInspector/VInspector_Communicator.hxx
tools/VInspector/VInspector_ItemBase.cxx
tools/VInspector/VInspector_ItemBase.hxx
tools/VInspector/VInspector_ItemContext.cxx
tools/VInspector/VInspector_ItemContext.hxx
tools/VInspector/VInspector_ItemEntityOwner.cxx [deleted file]
tools/VInspector/VInspector_ItemEntityOwner.hxx [deleted file]
tools/VInspector/VInspector_ItemFolderObject.hxx [deleted file]
tools/VInspector/VInspector_ItemHistoryElement.cxx
tools/VInspector/VInspector_ItemHistoryElement.hxx
tools/VInspector/VInspector_ItemHistoryRoot.cxx
tools/VInspector/VInspector_ItemHistoryRoot.hxx
tools/VInspector/VInspector_ItemHistoryType.cxx
tools/VInspector/VInspector_ItemHistoryType.hxx
tools/VInspector/VInspector_ItemPresentableObject.cxx
tools/VInspector/VInspector_ItemPresentableObject.hxx
tools/VInspector/VInspector_ItemSelectMgrFilter.cxx [deleted file]
tools/VInspector/VInspector_ItemSelectMgrFilter.hxx [deleted file]
tools/VInspector/VInspector_ItemSelection.cxx [deleted file]
tools/VInspector/VInspector_ItemSelection.hxx [deleted file]
tools/VInspector/VInspector_ItemSensitiveEntity.cxx [deleted file]
tools/VInspector/VInspector_ItemSensitiveEntity.hxx [deleted file]
tools/VInspector/VInspector_ToolActionType.hxx
tools/VInspector/VInspector_ToolBar.cxx
tools/VInspector/VInspector_ToolBar.hxx
tools/VInspector/VInspector_Tools.cxx
tools/VInspector/VInspector_Tools.hxx
tools/VInspector/VInspector_ViewModel.cxx
tools/VInspector/VInspector_ViewModel.hxx
tools/VInspector/VInspector_ViewModelHistory.cxx
tools/VInspector/VInspector_ViewModelHistory.hxx
tools/VInspector/VInspector_Window.cxx
tools/VInspector/VInspector_Window.hxx
tools/View/FILES
tools/View/View.qrc
tools/View/View_DisplayActionType.hxx [moved from tools/DFBrowserPane/DFBrowserPane.hxx with 57% similarity]
tools/View/View_DisplayPreview.cxx [new file with mode: 0644]
tools/View/View_DisplayPreview.hxx [new file with mode: 0644]
tools/View/View_Displayer.cxx
tools/View/View_Displayer.hxx
tools/View/View_PreviewParameters.cxx [new file with mode: 0644]
tools/View/View_PreviewParameters.hxx [new file with mode: 0644]
tools/View/View_ToolActionType.hxx
tools/View/View_ToolBar.cxx
tools/View/View_ToolBar.hxx
tools/View/View_Tools.cxx [deleted file]
tools/View/View_Tools.hxx [deleted file]
tools/View/View_Viewer.cxx
tools/View/View_Viewer.hxx
tools/View/View_Widget.cxx
tools/View/View_Widget.hxx
tools/View/View_Window.cxx
tools/View/View_Window.hxx
tools/View/icons/trihedron.png [new file with mode: 0644]
tools/ViewControl/FILES
tools/ViewControl/ViewControl_EditType.hxx [moved from tools/VInspector/VInspector_SelectionType.hxx with 54% similarity]
tools/ViewControl/ViewControl_MessageDialog.hxx
tools/ViewControl/ViewControl_PropertyView.cxx [new file with mode: 0644]
tools/ViewControl/ViewControl_PropertyView.hxx [new file with mode: 0644]
tools/ViewControl/ViewControl_Table.cxx [new file with mode: 0644]
tools/ViewControl/ViewControl_Table.hxx [new file with mode: 0644]
tools/ViewControl/ViewControl_TableModel.cxx [new file with mode: 0644]
tools/ViewControl/ViewControl_TableModel.hxx [new file with mode: 0644]
tools/ViewControl/ViewControl_TableModelValues.cxx [new file with mode: 0644]
tools/ViewControl/ViewControl_TableModelValues.hxx [new file with mode: 0644]
tools/ViewControl/ViewControl_Tools.cxx
tools/ViewControl/ViewControl_Tools.hxx
tools/ViewControl/ViewControl_TreeView.hxx

diff --git a/tools/Convert/Convert_Tools.cxx b/tools/Convert/Convert_Tools.cxx
new file mode 100644 (file)
index 0000000..47b6407
--- /dev/null
@@ -0,0 +1,54 @@
+// Created on: 2020-01-25
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#include <inspector/Convert_Tools.hxx>
+#include <inspector/Convert_TransientShape.hxx>
+
+#include <BRep_Builder.hxx>
+#include <BRepTools.hxx>
+
+// =======================================================================
+// function : ReadShape
+// purpose :
+// =======================================================================
+TopoDS_Shape Convert_Tools::ReadShape (const TCollection_AsciiString& theFileName)
+{
+  TopoDS_Shape aShape;
+
+  BRep_Builder aBuilder;
+  BRepTools::Read (aShape, theFileName.ToCString(), aBuilder);
+  return aShape;
+}
+
+//=======================================================================
+//function : ConvertStreamToPresentations
+//purpose  :
+//=======================================================================
+void Convert_Tools::ConvertStreamToPresentations (const Standard_SStream&,
+                                                  const Standard_Integer,
+                                                  const Standard_Integer,
+                                                  NCollection_List<Handle(Standard_Transient)>&)
+{
+}
+
+//=======================================================================
+//function : ConvertStreamToColor
+//purpose  :
+//=======================================================================
+Standard_Boolean Convert_Tools::ConvertStreamToColor (const Standard_SStream&,
+                                                      Quantity_Color&)
+{
+  return Standard_False;
+}
diff --git a/tools/Convert/Convert_Tools.hxx b/tools/Convert/Convert_Tools.hxx
new file mode 100644 (file)
index 0000000..3145c77
--- /dev/null
@@ -0,0 +1,54 @@
+// Created on: 2020-01-25
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#ifndef Convert_Tools_H
+#define Convert_Tools_H
+
+#include <NCollection_List.hxx>
+#include <Quantity_Color.hxx>
+#include <Standard.hxx>
+#include <Standard_Macro.hxx>
+#include <Standard_SStream.hxx>
+#include <TCollection_AsciiString.hxx>
+#include <TopoDS_Shape.hxx> 
+
+//! \class Convert_Tools
+//! \brief The tool that gives auxiliary methods converting.
+class Convert_Tools
+{
+public:
+  //! Reads Shape using BREP reader
+  //! \param theFileName a file name
+  //! \return shape or NULL
+  Standard_EXPORT static TopoDS_Shape ReadShape (const TCollection_AsciiString& theFileName);
+
+
+  //! Creates shape presentations on the stream if possible. Tries to init some OCCT base for a new presentation
+  //! \param theStream source of presentation
+  //! \param thePresentations container to collect new presentations
+  Standard_EXPORT static void ConvertStreamToPresentations (const Standard_SStream& theSStream,
+                                                            const Standard_Integer theStartPos,
+                                                            const Standard_Integer theLastPos,
+                                                            NCollection_List<Handle(Standard_Transient)>& thePresentations);
+
+  //! Converts stream to color if possible. It processes Quantity_Color, Quantity_ColorRGBA
+  //! \param theStream source of presentation
+  //! \param theColor [out] converted color
+  //! \returns true if done
+  Standard_EXPORT static Standard_Boolean ConvertStreamToColor (const Standard_SStream& theSStream,
+                                                                Quantity_Color& theColor);
+};
+
+#endif
diff --git a/tools/Convert/Convert_TransientShape.hxx b/tools/Convert/Convert_TransientShape.hxx
new file mode 100644 (file)
index 0000000..b3e20b4
--- /dev/null
@@ -0,0 +1,51 @@
+// Created on: 2020-01-25
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#ifndef Convert_TransientShape_H
+#define Convert_TransientShape_H
+
+#include <Standard.hxx>
+#include <Standard_Handle.hxx>
+#include <Standard_Macro.hxx>
+#include <Standard_Type.hxx>
+#include <Standard_Transient.hxx>
+
+#include <TopoDS_Shape.hxx>
+
+//! \class Convert_TransientShape
+//! \brief An interface to covert a shape into a transient object to use it in arguments
+class Convert_TransientShape : public Standard_Transient
+{
+public:
+
+  //! Constructor
+  Convert_TransientShape (const TopoDS_Shape& theShape) { SetShape (theShape); }
+
+  //! Destructor
+  virtual ~Convert_TransientShape() {}
+
+  //! Returns current shape
+  const TopoDS_Shape Shape() const { return myShape; }
+
+  //! Fills current shape
+  void SetShape (const TopoDS_Shape& theShape) { myShape = theShape; }
+
+  DEFINE_STANDARD_RTTI_INLINE (Convert_TransientShape, Standard_Transient)
+
+private:
+  TopoDS_Shape myShape; //!< the shape
+};
+
+#endif 
diff --git a/tools/Convert/FILES b/tools/Convert/FILES
new file mode 100644 (file)
index 0000000..77362ef
--- /dev/null
@@ -0,0 +1,3 @@
+Convert_Tools.cxx
+Convert_Tools.hxx
+Convert_TransientShape.hxx
index e602209..10bd0fd 100644 (file)
@@ -80,7 +80,7 @@ void DFBrowser_AttributePaneStack::SetPaneMode (const DFBrowser_AttributePaneTyp
   myPaneMode = theMode;
   if (myPaneMode == DFBrowser_AttributePaneType_SearchView)
   {
-    //! clear highlight in tree model
+    // clear highlight in tree model
     DFBrowser_TreeModel* aModel = dynamic_cast<DFBrowser_TreeModel*> (myModule->GetOCAFViewModel());
     if (aModel && aModel->HasHighlighted())
       aModel->SetHighlighted (QModelIndexList());
@@ -103,7 +103,7 @@ void DFBrowser_AttributePaneStack::SetCurrentItem (const QModelIndex& theIndex)
   if (myPaneMode != DFBrowser_AttributePaneType_ItemView)
     return;
 
-  //! clear highlight in tree model
+  // clear highlight in tree model
   DFBrowser_TreeModel* aModel = dynamic_cast<DFBrowser_TreeModel*> (myModule->GetOCAFViewModel());
   if (aModel && aModel->HasHighlighted())
     aModel->SetHighlighted (QModelIndexList());
index a1c0b6c..8281348 100644 (file)
@@ -38,7 +38,7 @@ public:
   Standard_EXPORT DFBrowser_Communicator();
 
   //! Destructor
-  virtual ~DFBrowser_Communicator() Standard_OVERRIDE {}
+  virtual ~DFBrowser_Communicator() {}
 
   //! Provides the container with a parent where this container should be inserted.
   //! If Qt implementation, it should be QWidget with QLayout set inside
@@ -49,7 +49,7 @@ public:
   //! \param theParameters a parameters container
   Standard_EXPORT virtual void SetParameters (const Handle(TInspectorAPI_PluginParameters)& theParameters) Standard_OVERRIDE;
 
-  //! Provide container for actions available in inspector on general level
+  //! Provides container for actions available in inspector on general level
   //! \param theMenu if Qt implementation, it is QMenu object
   Standard_EXPORT virtual void FillActionsMenu (void* theMenu) Standard_OVERRIDE { myWindow->FillActionsMenu (theMenu); }
 
index 95c35f8..a174c83 100644 (file)
@@ -38,14 +38,14 @@ public:
   DFBrowser_DumpView (QWidget* theParent) : QObject(theParent), myTextEdit( new QPlainTextEdit(theParent) ) {}
 
   //! Destructor
-  virtual ~DFBrowser_DumpView() Standard_OVERRIDE {}
+  virtual ~DFBrowser_DumpView() {}
 
   //! \return the text edit control
   QWidget* GetControl() const { return myTextEdit; }
 
 public slots:
 
-  //! Slots listen selection change and update the current control content by selection
+  //! Listens selection change and update the current control content by selection
   //! \param theSelected container of selected items
   //! \param theDeselected container of items that become deselected
   Standard_EXPORT void OnTreeViewSelectionChanged (const QItemSelection& theSelected, const QItemSelection& theDeselected);
index 5106821..351154a 100644 (file)
@@ -33,9 +33,9 @@ public:
   DFBrowser_HighlightDelegate (QObject* theParent = 0) : QItemDelegate (theParent) {}
 
   //! Destructor
-  virtual ~DFBrowser_HighlightDelegate() Standard_OVERRIDE {}
+  virtual ~DFBrowser_HighlightDelegate() {}
 
-  //! Redefine of the parent virtual method to color the cell rectangle in highlight style
+  //! Redefines of the parent virtual method to color the cell rectangle in highlight style
   //! \param thePainter a painter
   //! \param theOption a paint options
   //! \param theIndex a view index
index 1f0ea22..28f482a 100644 (file)
@@ -31,6 +31,8 @@
 #include <QObject>
 #include <Standard_WarningsRestore.hxx>
 
+//#define USE_DUMPJSON
+
 // =======================================================================
 // function : hasAttribute
 // purpose :
@@ -148,6 +150,24 @@ QVariant DFBrowser_Item::initValue (const int theItemRole) const
 }
 
 // =======================================================================
+// function : initStream
+// purpose :
+// =======================================================================
+void DFBrowser_Item::initStream (Standard_OStream& theOStream) const
+{
+  if (!HasAttribute())
+    return;
+
+#ifdef USE_DUMPJSON
+  Handle(TDF_Attribute) anAttribute = GetAttribute();
+  if (!anAttribute.IsNull())
+    anAttribute->DumpJson (theOStream);
+#else
+  (void)theOStream;
+#endif
+}
+
+// =======================================================================
 // function : GetAttributeInfo
 // purpose :
 // =======================================================================
index 5b9220c..c2d4b55 100644 (file)
@@ -38,14 +38,14 @@ class DFBrowser_Item : public DFBrowser_ItemBase
 public:
 
   //! Creates an item wrapped by a shared pointer
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
   //! \return the pointer to the created item
   static DFBrowser_ItemPtr CreateItem (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
   { return DFBrowser_ItemPtr (new DFBrowser_Item (theParent, theRow, theColumn)); }
 
   //! Destructor
-  virtual ~DFBrowser_Item() Standard_OVERRIDE {};
+  virtual ~DFBrowser_Item() {}
 
   //! \return true if the attribute is set in the item, otherwise it is initialized by a label
   Standard_EXPORT bool HasAttribute() const;
@@ -59,7 +59,7 @@ public:
   //! Resets the cached item values, set null attribute and calls reset of the parent class
   Standard_EXPORT virtual void Reset() Standard_OVERRIDE;
 
-  //! Init item and calls cachedValue() for the role
+  //! Inits item and calls cachedValue() for the role
   //! \param theItemRole a value role
   //! \return the value
   Standard_EXPORT QVariant GetAttributeInfo(int theRole) const;
@@ -69,21 +69,25 @@ protected:
   //! \return number of children.
   virtual int initRowCount() const Standard_OVERRIDE;
 
-  //! Return data value for the role:
+  //! Returns data value for the role:
   //! - if content is label, calls DFBrowser_ItemBase;
   //! - if content is attribute, if the fole is extended display, asks additional info text or ask module about info
   //! \param theItemRole a value role
   //! \return the value
   virtual QVariant initValue (const int theItemRole) const Standard_OVERRIDE;
 
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  Standard_EXPORT virtual void initStream (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
   //! Constructor
-  //! param theParent a parent item
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
+  //! \param theParent a parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
   DFBrowser_Item (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
     : DFBrowser_ItemBase (theParent, theRow, theColumn) {}
 
-  //! Initialize the current item. It creates a backup of the specific item information
+  //! Initializes the current item. It creates a backup of the specific item information
   void initItem() const;
 
   //! Sets the item attribute
index dbc675f..a50d503 100644 (file)
@@ -35,7 +35,7 @@ public:
   { return DFBrowser_ItemApplicationPtr (new DFBrowser_ItemApplication (theParent)); }
 
   //! Destructor
-  virtual ~DFBrowser_ItemApplication() Standard_OVERRIDE {};
+  virtual ~DFBrowser_ItemApplication() {}
 
   //! Sets the item label
   //! \param theLabel an object where the child items structure is found
@@ -67,7 +67,7 @@ protected:
 private:
 
   //! Constructor
-  //! param theParent a parent item
+  //! \param theParent a parent item
   DFBrowser_ItemApplication(TreeModel_ItemBasePtr theParent) : DFBrowser_ItemBase(theParent, 0, 0) {}
 
 private:
index 89d58b9..e1d696b 100644 (file)
@@ -113,7 +113,7 @@ QVariant DFBrowser_ItemBase::initValue (const int theItemRole) const
       if (DFBrowser_Tools::IsEmptyLabel(GetLabel()))
         aValue = QColor (Qt::lightGray);
       else
-      { //! TEMPORARY HERE : should be moved in the pane of TDataStd_Name kind of attribute
+      { // TEMPORARY HERE : should be moved in the pane of TDataStd_Name kind of attribute
         Handle(TDataStd_Name) aName;
         if (useAdditionalInfo() && myLabel.FindAttribute (TDataStd_Name::GetID(), aName))
           aValue = QColor (Qt::darkGreen);
index c1ef3b6..c87ca1d 100644 (file)
@@ -48,7 +48,7 @@ public:
   //! \return the current module
   DFBrowser_Module* GetModule() const { return myModule; }
 
-  //! Change using of additional information in item. It it does not use additional info,
+  //! Changes using of additional information in item. If it does not use additional info,
   //! it will not return extended text in initValue().
   //! \param theValue a new value
   //! \return the previous value
@@ -84,15 +84,15 @@ protected:
   //! \return the created item
   virtual TreeModel_ItemBasePtr createChild (int theRow, int theColumn) Standard_OVERRIDE;
 
-  //! Initialize the current item. It creates a backup of the specific item information
-  virtual void initItem() const {};
+  //! Initializes the current item. It creates a backup of the specific item information
+  virtual void initItem() const {}
 
 protected:
 
   //! Constructor
-  //! param theParent a parent item
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
+  //! \param theParent a parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
   DFBrowser_ItemBase (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn);
 
 private:
index 52b516a..3f5984d 100644 (file)
@@ -32,14 +32,14 @@ class DFBrowser_ItemDocument : public DFBrowser_ItemBase
 public:
 
   //! Creates an item wrapped by a shared pointer
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
   //! \return the pointer to the created item
   static DFBrowser_ItemDocumentPtr CreateItem (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
   { return DFBrowser_ItemDocumentPtr (new DFBrowser_ItemDocument (theParent, theRow, theColumn)); }
 
   //! Destructor
-  virtual ~DFBrowser_ItemDocument() Standard_OVERRIDE {};
+  virtual ~DFBrowser_ItemDocument() {}
 
   //! Returns the current label
   //! \return a label
@@ -65,10 +65,10 @@ public:
 
 protected:
 
-  //! Initialize the current item. It is empty because Reset() is also empty.
+  //! Initializes the current item. It is empty because Reset() is also empty.
   virtual void initItem() const Standard_OVERRIDE;
 
-  //!
+  //! Initializes the current item. It creates a backup of the specific item information
   virtual QVariant initValue (const int theItemRole) const Standard_OVERRIDE;
 
 protected:
@@ -82,7 +82,7 @@ protected:
 private:
 
   //! Constructor
-  //! param theParent a parent item
+  //! \param theParent a parent item
   DFBrowser_ItemDocument(TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
     : DFBrowser_ItemBase (theParent, theRow, theColumn) {}
 
index 2aff65e..ec353e7 100644 (file)
@@ -53,7 +53,9 @@ DFBrowser_Module::DFBrowser_Module()
 // =======================================================================
 void DFBrowser_Module::CreateViewModel (void* theParent)
 {
-  myOCAFViewModel = new DFBrowser_TreeModel ((QWidget*)theParent, this);
+  myOCAFViewModel = new DFBrowser_TreeModel ((QWidget*)theParent);
+  myOCAFViewModel->InitColumns();
+  myOCAFViewModel->SetModule (this);
 }
 
 // =======================================================================
@@ -152,7 +154,7 @@ DFBrowserPane_AttributePaneAPI* DFBrowser_Module::GetAttributePane (Handle(TDF_A
 // function : GetAttributePane
 // purpose :
 // =======================================================================
-DFBrowserPane_AttributePaneAPI* DFBrowser_Module::GetAttributePane (const Standard_CString& theAttributeName)
+DFBrowserPane_AttributePaneAPI* DFBrowser_Module::GetAttributePane (Standard_CString theAttributeName)
 {
   DFBrowserPane_AttributePaneAPI* aPane = 0;
 
@@ -197,7 +199,7 @@ QVariant DFBrowser_Module::GetAttributeInfo (Handle(TDF_Attribute) theAttribute,
 // function : GetAttributeInfo
 // purpose :
 // =======================================================================
-QVariant DFBrowser_Module::GetAttributeInfo (const Standard_CString& theAttributeName, DFBrowser_Module* theModule,
+QVariant DFBrowser_Module::GetAttributeInfo (Standard_CString theAttributeName, DFBrowser_Module* theModule,
                                              int theRole, int theColumnId)
 {
   DFBrowserPane_AttributePane* anAttributePane = 0;
@@ -222,7 +224,7 @@ QVariant DFBrowser_Module::GetAttributeInfo (const Standard_CString& theAttribut
 // function : CreateAttributePane
 // purpose :
 // =======================================================================
-DFBrowserPane_AttributePaneAPI* DFBrowser_Module::CreateAttributePane (const Standard_CString& theAttributeName)
+DFBrowserPane_AttributePaneAPI* DFBrowser_Module::CreateAttributePane (Standard_CString theAttributeName)
 {
   DFBrowserPane_AttributePaneAPI* aPane = 0;
   // iteration should be performed from the tail of the list, as latest added creator has
index e75fbb0..b8f2a48 100644 (file)
@@ -55,7 +55,7 @@ public:
   Standard_EXPORT DFBrowser_Module();
 
   //! Destructor
-  virtual ~DFBrowser_Module() Standard_OVERRIDE {};
+  virtual ~DFBrowser_Module() {}
 
   //! Creates tree model for OCAF application
   Standard_EXPORT void CreateViewModel (void* theParent);
@@ -85,7 +85,7 @@ public:
   //! \return an application instance
   Standard_EXPORT Handle(TDocStd_Application) GetTDocStdApplication() const;
 
-  //! Rebuild an OCAF tree view model
+  //! Rebuilds an OCAF tree view model
   Standard_EXPORT void UpdateTreeModel();
 
   //! Sets initial selection in OCAF tree view, it is an application(root) item
@@ -96,7 +96,7 @@ public:
   //! \return an attribute
   Standard_EXPORT Handle(TDF_Attribute) FindAttribute (const QModelIndex& theIndex);
 
-  //! Append creator of a pane by attribute type
+  //! Appends creator of a pane by attribute type
   //! \param thePaneCreator
   void RegisterPaneCreator (DFBrowserPane_AttributePaneCreatorAPI* thePaneCreator)
   { myPaneCreators.append (thePaneCreator); }
@@ -111,7 +111,7 @@ public:
   //! internal map and the module processes this kind of attribute
   //! \param theAttributeGUID an attribute key
   //! \return attribute pane
-  Standard_EXPORT DFBrowserPane_AttributePaneAPI* GetAttributePane (const Standard_CString& theAttributeName);
+  Standard_EXPORT DFBrowserPane_AttributePaneAPI* GetAttributePane (Standard_CString theAttributeName);
 
   //! Finds the attribute pane according to the give attribute and returns its information
   //! \param theAttribute a source attribute
@@ -127,7 +127,7 @@ public:
   //! \param theRole a role of information, used by tree model (e.g. DisplayRole, icon, background and so on)
   //! \param theColumnId a tree model column
   //! \return value, interpreted by tree model depending on the role
-  Standard_EXPORT static QVariant GetAttributeInfo (const Standard_CString& theAttributeName, DFBrowser_Module* theModule,
+  Standard_EXPORT static QVariant GetAttributeInfo (Standard_CString theAttributeName, DFBrowser_Module* theModule,
                                                     int theRole, int theColumnId);
 signals:
 
@@ -139,7 +139,7 @@ protected:
   //! Tries to create attribute pane for the attribute name using registered attribute pane creators
   //! \param theAttributeName a source attribute
   //! \return attribute pane or NULL
-  DFBrowserPane_AttributePaneAPI* CreateAttributePane (const Standard_CString& theAttributeName);
+  DFBrowserPane_AttributePaneAPI* CreateAttributePane (Standard_CString theAttributeName);
 
 private:
 
index 65785a7..f915f91 100644 (file)
@@ -19,7 +19,6 @@
 #include <BinLDrivers.hxx>
 #include <BinXCAFDrivers.hxx>
 #include <PCDM_ReadWriter.hxx>
-#include <Standard_Version.hxx>
 #include <StdDrivers.hxx>
 #include <StdLDrivers.hxx>
 #include <STEPCAFControl_Reader.hxx>
@@ -48,7 +47,6 @@ namespace DFBrowser_OpenApplication
       return anApplication;
     }
 
-#if OCC_VERSION_HEX > 0x060901
     // Load static variables for STEPCAF (ssv; 16.08.2012)
     STEPCAFControl_Controller::Init();
 
@@ -74,7 +72,6 @@ namespace DFBrowser_OpenApplication
     PCDM_ReaderStatus aStatus = anApplication->Open (theFileName, aDocument);
     if (aStatus != PCDM_RS_OK)
       return Handle(TDocStd_Application)();
-#endif
     return anApplication;
   }
 
index ccff708..4e13117 100644 (file)
@@ -24,7 +24,7 @@
 namespace DFBrowser_OpenApplication
 {
 
-  //! Open the application by the name.
+  //! Opens the application by the name.
   //! \param theFileName a name of the file initialized the application
   //! \param isSTEPFile an output parameter, true if the file name is a STEP file
   //! \return an opened application
index 1a55af7..acc8312 100644 (file)
@@ -41,7 +41,7 @@ public:
   Standard_EXPORT DFBrowser_PropertyPanel (QWidget* theParent);
 
   //! Destructor
-  virtual ~DFBrowser_PropertyPanel() Standard_OVERRIDE {}
+  virtual ~DFBrowser_PropertyPanel() {}
 
   //! Returns main control
   QWidget* GetControl() const { return myMainWindow; }
@@ -57,7 +57,7 @@ public:
                                                  const QItemSelection& theDeselected);
 private:
 
-  QWidget* myMainWindow; //! < parent of attribute stack control
-  DFBrowser_AttributePaneStack* myAttributesStack; //! < panes stack
+  QWidget* myMainWindow; //!< parent of attribute stack control
+  DFBrowser_AttributePaneStack* myAttributesStack; //!< panes stack
 };
 #endif
index 54c3ae1..91fc567 100644 (file)
@@ -47,7 +47,7 @@ public:
   Standard_EXPORT DFBrowser_SearchLine (QWidget* theParent);
 
   //! Destructor
-  virtual ~DFBrowser_SearchLine() Standard_OVERRIDE {}
+  virtual ~DFBrowser_SearchLine() {}
 
   //! Creates search line model filled by the module. It is necessary for auto completion of line edit
   //! \param theModule a current module
@@ -66,10 +66,10 @@ public:
   Standard_EXPORT void ClearValues();
 
   //! Returns completer model
-  Standard_EXPORT QAbstractItemModel* GetModel() { return myLineControl->completer()->model(); }
+  QAbstractItemModel* GetModel() { return myLineControl->completer()->model(); }
 
   //! Returns completion completer model
-  Standard_EXPORT QAbstractItemModel* GetCompletionModel() { return myLineControl->completer()->completionModel(); }
+  QAbstractItemModel* GetCompletionModel() { return myLineControl->completer()->completionModel(); }
 
   //! Returns the current line edit text
   QString Text() const { return myLineControl->text(); }
@@ -87,15 +87,17 @@ private slots:
 
   //! Updates icon of search button depending on text is empty and emits searchActivated signal
   void onTextChanged (const QString& theText);
-  //! Set completion prefix in completer model
+
+  //! Sets completion prefix in completer model
   void onReturnPressed() { myLineControl->completer()->setCompletionPrefix (myLineControl->text()); }
-  //! Set empty text if the current text is not empty: new search is started
+
+  //! Sets empty text if the current text is not empty: new search is started
   void onSearchButtonClicked();
 
 private:
 
   QLineEdit* myLineControl; //!< line editor control
-  QToolButton* mySearchButton; //! < search button
+  QToolButton* mySearchButton; //!< search button
 };
 
 #endif
index 3aeb9ea..b7e7363 100644 (file)
@@ -49,7 +49,7 @@ public:
   Standard_EXPORT DFBrowser_SearchLineModel (QObject* theParent, DFBrowser_Module* theModule);
 
   //! Destructor
-  virtual ~DFBrowser_SearchLineModel() Standard_OVERRIDE {}
+  virtual ~DFBrowser_SearchLineModel() {}
 
   //! Separator as attribute name is divided from the label entry in information text
   static QString SplitSeparator() { return ": "; }
@@ -87,7 +87,6 @@ public:
   //! Returns the data stored under the given role for the item referred to by the index.
   //! \param theIndex a model index
   //! \param theRole an enumeration value of role for data obtaining
-
   Standard_EXPORT virtual QVariant data (const QModelIndex& theIndex,
                                          int theRole = Qt::DisplayRole) const Standard_OVERRIDE;
   //! Returns the number of rows under the given parent.
@@ -96,10 +95,10 @@ public:
 
   virtual int rowCount (const QModelIndex& theParent = QModelIndex()) const Standard_OVERRIDE
   { (void)theParent; return myRowCount; }
+
   //! Returns the number of columns for the children of the given parent.
   //! \param theParent a parent model index
   //! \return the number of columns
-
   virtual int columnCount (const QModelIndex& theParent = QModelIndex()) const Standard_OVERRIDE
   { (void)theParent; return 3; }
 
index dd5b482..8e4abdf 100644 (file)
@@ -41,7 +41,7 @@ public:
   Standard_EXPORT DFBrowser_SearchView (QWidget* theParent);
 
   //! Destructor
-  virtual ~DFBrowser_SearchView() Standard_OVERRIDE {}
+  virtual ~DFBrowser_SearchView() {}
 
   //! Returns search parent control
   QWidget* GetControl() const { return myMainWindow; }
index 00e6649..75996be 100644 (file)
@@ -34,7 +34,7 @@ public:
   DFBrowser_QThread (QObject* theParent) : QThread (theParent), myItem (0) {}
 
   //! Destructor
-  virtual ~DFBrowser_QThread() Standard_OVERRIDE {}
+  virtual ~DFBrowser_QThread() {}
 
   //! Sets thread item to be processed
   //! \param theItem a thread item
index 5b73d2b..674eedb 100644 (file)
@@ -48,10 +48,10 @@ public:
   //! internal containers for search functionality
   Standard_EXPORT virtual void Run() Standard_OVERRIDE;
 
-  //! Set filled containers into search line
+  //! Sets filled containers into search line
   Standard_EXPORT virtual void ApplyValues() Standard_OVERRIDE;
 
-  //! Clear search line values
+  //! Clears search line values
   Standard_EXPORT static void ClearValues (DFBrowser_SearchLine* theSearchLine);
 
 private:
@@ -73,7 +73,7 @@ private:
   void addLabel (const TDF_Label& theLabel, const QStringList& theCurrentPath,
                  QMap<QString, DFBrowser_SearchItemInfo>& theValues, QStringList& theInfoValues);
 
-  //! Add attribute information, it is either attribute kind or attribure value for TDataStd_Name or TDataStd_Comment
+  //! Adds attribute information, it is either attribute kind or attribure value for TDataStd_Name or TDataStd_Comment
   //! \parm theAttribute a current attribute
   //! \param theCurrentPath it contains the current path to the label (stores in container)
   //! \param theValues container of document item values
index 2de8bfe..7b305d5 100644 (file)
@@ -54,7 +54,7 @@ public:
   Standard_EXPORT DFBrowser_TreeLevelLine (QWidget* theParent);
 
   //! Destructor
-  virtual ~DFBrowser_TreeLevelLine() Standard_OVERRIDE {}
+  virtual ~DFBrowser_TreeLevelLine() {}
 
   //! Clears history of selected items
   Standard_EXPORT void ClearHistory();
index c97c078..65d6b74 100644 (file)
@@ -38,7 +38,7 @@ public:
   //! Destructor
   virtual ~DFBrowser_TreeLevelLineDelegate() {}
 
-  //! Draw an icon in the cell and highlight cell if mouse is over the cell
+  //! Draws an icon in the cell and highlight cell if mouse is over the cell
   //! \param thePainter a painter
   //! \param theOption a paint options
   //! \param theIndex a view index
index 16e2964..9bb3069 100644 (file)
@@ -59,14 +59,17 @@ QVariant DFBrowser_TreeLevelLineModel::data (const QModelIndex& theIndex, int th
     if (theRole == Qt::DecorationRole) //! do not show icons presented in tree view
       return aValue;
     TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (aTreeIndex);
-    if (anItemBase)
-    {
-      DFBrowser_ItemBasePtr aDBrowserItem = itemDynamicCast<DFBrowser_ItemBase> (anItemBase);
-      bool aPrevValue = aDBrowserItem->SetUseAdditionalInfo (false);
-      aValue = aDBrowserItem->data (aTreeIndex, theRole);
-      aDBrowserItem->SetUseAdditionalInfo (aPrevValue);
+    if (!anItemBase)
+      return aValue;
+
+    DFBrowser_ItemBasePtr aDBrowserItem = itemDynamicCast<DFBrowser_ItemBase> (anItemBase);
+    if (!aDBrowserItem)
+      return aValue;
+
+    bool aPrevValue = aDBrowserItem->SetUseAdditionalInfo (false);
+    aValue = aDBrowserItem->data (aTreeIndex, theRole);
+    aDBrowserItem->SetUseAdditionalInfo (aPrevValue);
 
-    }
     if (theRole == Qt::DisplayRole)
       aValue = aValue.toString() + "  "; //! TEMPORARY to leave place for the action icon
   }
index 667f208..e8f4e51 100644 (file)
@@ -40,7 +40,7 @@ public:
   //! Destructor
   virtual ~DFBrowser_TreeLevelLineModel() {}
 
-  //!
+  //! Resets the cached values
   void Reset() { myLevelItems.clear(); }
 
   //! Inits the model by the index
@@ -50,7 +50,7 @@ public:
   //! Returns true if the tree model index is filled
   bool IsInitialized() const { return myTreeIndex.isValid(); }
 
-  //! Return OCAF tree view model index on level defined by column of the parameter index
+  //! Returns OCAF tree view model index on level defined by column of the parameter index
   //! \param theIndex a tree level view model index
   //! \return model index
   const QModelIndex& GetTreeViewIndex (const QModelIndex& theIndex) const
@@ -82,7 +82,7 @@ public:
 private:
 
   QModelIndex myTreeIndex; //!< the current OCAF tree view model index
-  QList<QModelIndex> myLevelItems; //! cached parent indices of myTreeIndex for quick access to item information
+  QList<QModelIndex> myLevelItems; //!< cached parent indices of myTreeIndex for quick access to item information
 };
 
 #endif
index ae961a9..5878545 100644 (file)
@@ -42,12 +42,12 @@ public:
   Standard_EXPORT DFBrowser_TreeLevelView (QWidget* theParent);
 
   //! Destructor
-  virtual ~DFBrowser_TreeLevelView() Standard_OVERRIDE {}
+  virtual ~DFBrowser_TreeLevelView() {}
 
   //! Returns parent control
   QWidget* GetControl() const { return myMainWindow; }
 
-  //! Clear selection of the table view selection model
+  //! Clears selection of the table view selection model
   Standard_EXPORT void ClearSelection();
 
   //! Returns true if this control may be filled by the index
@@ -56,7 +56,7 @@ public:
   //! \return boolean result
   Standard_EXPORT static bool ProcessItem (const QModelIndex& theIndex);
 
-  //! Init view by the first selected item in OCAF tree view
+  //! Inits view by the first selected item in OCAF tree view
   //! \param theSelected selected items
   //! \param theDeselected deselected items
   Standard_EXPORT void UpdateByTreeSelectionChanged (const QItemSelection& theSelected,
index 63802ba..59c6a7f 100644 (file)
@@ -92,6 +92,9 @@ QVariant DFBrowser_TreeLevelViewModel::data (const QModelIndex& theIndex, int th
   if (theIndex.column() == 0)
   {
     DFBrowser_ItemBasePtr aDBrowserItem = itemDynamicCast<DFBrowser_ItemBase> (anItemBase);
+    if (!aDBrowserItem)
+      return QVariant();
+
     bool aPrevValue = aDBrowserItem->SetUseAdditionalInfo (false);
     aValue = anItemBase->data (anIndex, theRole);
     aDBrowserItem->SetUseAdditionalInfo (aPrevValue);
index 5c564f3..a2c0613 100644 (file)
@@ -37,9 +37,9 @@ public:
   DFBrowser_TreeLevelViewModel (QObject* theParent) : QAbstractTableModel (theParent), myRowCount (0) {}
 
   //! Destructor
-  virtual ~DFBrowser_TreeLevelViewModel() Standard_OVERRIDE {}
+  virtual ~DFBrowser_TreeLevelViewModel() {}
 
-  //! Reset OCAF tree model index
+  //! Resets OCAF tree model index
   void Reset() { myIndex = QModelIndex(); }
 
   //! Fills OCAF tree model index
@@ -49,7 +49,7 @@ public:
   //! Returns true if the index is filled
   bool IsInitialized() const { return myIndex.isValid(); }
 
-  //! Return OCAF tree view model index on level defined by column of the parameter index
+  //! Returns OCAF tree view model index on level defined by column of the parameter index
   //! \param theIndex a tree level view model index
   //! \return model index
   Standard_EXPORT QModelIndex GetTreeViewIndex (const QModelIndex& theIndex) const;
@@ -57,7 +57,7 @@ public:
   //! Emits the layoutChanged signal from outside of this class
   void EmitLayoutChanged() { emit layoutChanged(); }
 
-  //! It returns value only for DisplayRole for column = 1
+  //! Returns value only for DisplayRole for column = 1
   //! \param theSection an index of value in the container 
   //! \param theIndex a model index
   //! \param theRole a view role
index 16fe104..23ab2c2 100644 (file)
@@ -38,12 +38,27 @@ const int COLUMN_NAME_WIDTH = 300;
 // function : Constructor
 // purpose :
 // =======================================================================
-DFBrowser_TreeModel::DFBrowser_TreeModel (QObject* theParent, DFBrowser_Module* theModule)
+DFBrowser_TreeModel::DFBrowser_TreeModel (QObject* theParent)
 : TreeModel_ModelBase (theParent)
 {
-  SetHeaderItem (0, TreeModel_HeaderSection ("Name", COLUMN_NAME_WIDTH));
+}
 
-  DFBrowser_ItemApplicationPtr aRootItem = itemDynamicCast<DFBrowser_ItemApplication> (m_pRootItem);
+// =======================================================================
+// function : InitColumns
+// purpose :
+// =======================================================================
+void DFBrowser_TreeModel::InitColumns()
+{
+  SetHeaderItem (0, TreeModel_HeaderSection ("Name"));
+}
+
+// =======================================================================
+// function : SetModule
+// purpose :
+// =======================================================================
+void DFBrowser_TreeModel::SetModule (DFBrowser_Module* theModule)
+{
+  DFBrowser_ItemApplicationPtr aRootItem = itemDynamicCast<DFBrowser_ItemApplication> (RootItem (0));
   aRootItem->SetModule (theModule);
 }
 
@@ -51,9 +66,9 @@ DFBrowser_TreeModel::DFBrowser_TreeModel (QObject* theParent, DFBrowser_Module*
 // function : createRootItem
 // purpose :
 // =======================================================================
-void DFBrowser_TreeModel::createRootItem (const int)
+TreeModel_ItemBasePtr DFBrowser_TreeModel::createRootItem (const int)
 {
-  m_pRootItem = DFBrowser_ItemApplication::CreateItem (TreeModel_ItemBasePtr());
+  return DFBrowser_ItemApplication::CreateItem (TreeModel_ItemBasePtr());
 }
 
 // =======================================================================
@@ -62,7 +77,7 @@ void DFBrowser_TreeModel::createRootItem (const int)
 // =======================================================================
 void DFBrowser_TreeModel::Init (const Handle(TDocStd_Application)& theApplication)
 {
-  DFBrowser_ItemApplicationPtr aRootItem = itemDynamicCast<DFBrowser_ItemApplication> (m_pRootItem);
+  DFBrowser_ItemApplicationPtr aRootItem = itemDynamicCast<DFBrowser_ItemApplication> (RootItem (0));
   Reset();
   aRootItem->SetApplication (theApplication);
   EmitLayoutChanged();
@@ -74,7 +89,7 @@ void DFBrowser_TreeModel::Init (const Handle(TDocStd_Application)& theApplicatio
 // =======================================================================
 Handle(TDocStd_Application) DFBrowser_TreeModel::GetTDocStdApplication() const
 {
-  DFBrowser_ItemApplicationPtr aRootItem = itemDynamicCast<DFBrowser_ItemApplication> (m_pRootItem);
+  DFBrowser_ItemApplicationPtr aRootItem = itemDynamicCast<DFBrowser_ItemApplication> (RootItem (0));
   return aRootItem->GetApplication();
 }
 
@@ -179,7 +194,7 @@ QModelIndex DFBrowser_TreeModel::FindIndexByPath (const QStringList& theLabelEnt
         if (aPathId == aPathCount && anItem->HasAttribute())
         {
           // processing attribute in theValue
-          DFBrowser_ItemApplicationPtr aRootAppItem = itemDynamicCast<DFBrowser_ItemApplication>(m_pRootItem);
+          DFBrowser_ItemApplicationPtr aRootAppItem = itemDynamicCast<DFBrowser_ItemApplication>(RootItem (0));
           QString anAttributeInfo = DFBrowser_Module::GetAttributeInfo (anItem->GetAttribute(), aRootAppItem->GetModule(),
                                                                         Qt::DisplayRole, 0).toString();
           if (anAttributeInfo == anEntry)
index 6182c25..c1e1f05 100644 (file)
@@ -45,14 +45,20 @@ class DFBrowser_TreeModel : public TreeModel_ModelBase
 public:
 
   //! Constructor
-  Standard_EXPORT DFBrowser_TreeModel (QObject* theParent, DFBrowser_Module* theModule);
+  Standard_EXPORT DFBrowser_TreeModel (QObject* theParent);
 
   //! Destructor
-  virtual ~DFBrowser_TreeModel() Standard_OVERRIDE {};
+  virtual ~DFBrowser_TreeModel() {}
+
+  //! Creates model columns and root items.
+  Standard_EXPORT virtual void InitColumns() Standard_OVERRIDE;
 
   //! Fills the root item by the application
   Standard_EXPORT void Init (const Handle(TDocStd_Application)& theApplication);
 
+  //! Fills root item by the module
+  Standard_EXPORT void SetModule (DFBrowser_Module* theModule);
+
   //! Returns an OCAF application or NULL
   //! \return an application instance
   Standard_EXPORT Handle(TDocStd_Application) GetTDocStdApplication() const;
@@ -98,7 +104,7 @@ public:
 protected:
   //! Creates root item
   //! \param theColumnId index of a column
-  virtual void createRootItem (const int theColumnId);
+  Standard_EXPORT virtual TreeModel_ItemBasePtr createRootItem (const int theColumnId) Standard_OVERRIDE;
 
 private:
 
index 5801326..01b100b 100644 (file)
 #include <inspector/TreeModel_ContextMenu.hxx>
 #include <inspector/TreeModel_Tools.hxx>
 
+#include <inspector/ViewControl_PropertyView.hxx>
 #include <inspector/ViewControl_TreeView.hxx>
 
-#include <inspector/View_Tools.hxx>
-
 #include <OSD_Directory.hxx>
 #include <OSD_Environment.hxx>
 #include <OSD_Protection.hxx>
@@ -102,6 +101,8 @@ const int DFBROWSER_DEFAULT_POSITION_Y = 60;
 const int DEFAULT_PROPERTY_PANEL_HEIGHT = 200;
 const int DEFAULT_BROWSER_HEIGHT = 800;
 
+//#define USE_DUMPJSON
+
 // =======================================================================
 // function : Constructor
 // purpose :
@@ -161,12 +162,24 @@ DFBrowser_Window::DFBrowser_Window()
   connect (aLevelView, SIGNAL (indexDoubleClicked (const QModelIndex&)),
            this, SLOT (onLevelDoubleClicked (const QModelIndex&)));
 
+  // property widget
   QDockWidget* aPropertyPanelWidget = new QDockWidget (tr ("PropertyPanel"), myMainWindow);
   aPropertyPanelWidget->setObjectName (aPropertyPanelWidget->windowTitle());
   aPropertyPanelWidget->setTitleBarWidget (new QWidget(myMainWindow));
   aPropertyPanelWidget->setWidget (myPropertyPanel->GetControl());
   myMainWindow->addDockWidget (Qt::RightDockWidgetArea, aPropertyPanelWidget);
 
+  // property view
+#ifdef USE_DUMPJSON
+  myPropertyPanelWidget = new QDockWidget (tr ("PropertyPanel (DumpJson)"), myMainWindow);
+  myPropertyView = new ViewControl_PropertyView (myMainWindow,
+    QSize(DFBROWSER_DEFAULT_VIEW_WIDTH, DFBROWSER_DEFAULT_VIEW_HEIGHT));
+  myPropertyPanelWidget->setObjectName (myPropertyPanelWidget->windowTitle());
+  myPropertyPanelWidget->setTitleBarWidget (new QWidget(myMainWindow));
+  myPropertyPanelWidget->setWidget (myPropertyView->GetControl());
+  myMainWindow->addDockWidget (Qt::RightDockWidgetArea, myPropertyPanelWidget);
+#endif
+
   // dump view window
   QWidget* aDumpWidget = new QWidget(myMainWindow);
   QVBoxLayout* aDumpLay = new QVBoxLayout(aDumpWidget);
@@ -181,20 +194,26 @@ DFBrowser_Window::DFBrowser_Window()
 
   // view
   myViewWindow = new View_Window (myMainWindow);
-  myViewWindow->GetView()->SetPredefinedSize (DFBROWSER_DEFAULT_VIEW_WIDTH, DFBROWSER_DEFAULT_VIEW_HEIGHT);
+  myViewWindow->ViewWidget()->SetPredefinedSize (DFBROWSER_DEFAULT_VIEW_WIDTH, DFBROWSER_DEFAULT_VIEW_HEIGHT);
 
   QDockWidget* aViewDockWidget = new QDockWidget (tr ("View"), myMainWindow);
   aViewDockWidget->setObjectName (aViewDockWidget->windowTitle());
-  aViewDockWidget->setTitleBarWidget (myViewWindow->GetViewToolBar()->GetControl());
+  aViewDockWidget->setTitleBarWidget (myViewWindow->ViewToolBar()->GetControl());
   aViewDockWidget->setWidget (myViewWindow);
   myMainWindow->addDockWidget (Qt::RightDockWidgetArea, aViewDockWidget);
 
   QColor aHColor (229, 243, 255);
-  myViewWindow->GetDisplayer()->SetAttributeColor (Quantity_Color(aHColor.red() / 255., aHColor.green() / 255.,
-                                                   aHColor.blue() / 255., Quantity_TOC_RGB), View_PresentationType_Additional);
+  myViewWindow->Displayer()->SetAttributeColor (Quantity_Color(aHColor.red() / 255., aHColor.green() / 255.,
+                                                aHColor.blue() / 255., Quantity_TOC_sRGB), View_PresentationType_Additional);
 
-  myMainWindow->splitDockWidget(aPropertyPanelWidget, aViewDockWidget, Qt::Vertical);
+  myMainWindow->splitDockWidget (aPropertyPanelWidget, aViewDockWidget, Qt::Vertical);
+
+#ifdef USE_DUMPJSON
+  myMainWindow->tabifyDockWidget (aDumpDockWidget, myPropertyPanelWidget);
+  myMainWindow->tabifyDockWidget (myPropertyPanelWidget, aViewDockWidget);
+#else
   myMainWindow->tabifyDockWidget (aDumpDockWidget, aViewDockWidget);
+#endif
 
   myTreeView->resize (DFBROWSER_DEFAULT_TREE_VIEW_WIDTH, DFBROWSER_DEFAULT_TREE_VIEW_HEIGHT);
 
@@ -254,7 +273,7 @@ void DFBrowser_Window::GetPreferences (TInspectorAPI_PreferencesDataMap& theItem
 
   QMap<QString, QString> anItems;
   TreeModel_Tools::SaveState (myTreeView, anItems);
-  View_Tools::SaveState(myViewWindow, anItems);
+  View_Window::SaveState(myViewWindow, anItems);
 
   for (QMap<QString, QString>::const_iterator anItemsIt = anItems.begin(); anItemsIt != anItems.end(); anItemsIt++)
     theItem.Bind (anItemsIt.key().toStdString().c_str(), anItemsIt.value().toStdString().c_str());
@@ -278,7 +297,7 @@ void DFBrowser_Window::SetPreferences (const TInspectorAPI_PreferencesDataMap& t
       myMainWindow->restoreState (TreeModel_Tools::ToByteArray (anItemIt.Value().ToCString()));
     else if (TreeModel_Tools::RestoreState (myTreeView, anItemIt.Key().ToCString(), anItemIt.Value().ToCString()))
       continue;
-    else if (View_Tools::RestoreState(myViewWindow, anItemIt.Key().ToCString(), anItemIt.Value().ToCString()))
+    else if (View_Window::RestoreState(myViewWindow, anItemIt.Key().ToCString(), anItemIt.Value().ToCString()))
       continue;
   }
 }
@@ -420,6 +439,11 @@ void DFBrowser_Window::Init (const NCollection_List<Handle(Standard_Transient)>&
     }
     return;
   }
+  else
+  {
+    if (anApplication.IsNull() && CDF_Session::Exists())
+      anApplication = Handle(TDocStd_Application)::DownCast (CDF_Session::CurrentSession()->CurrentApplication());
+  }
 
   myModule = new DFBrowser_Module();
   myModule->CreateViewModel (myMainWindow);
@@ -659,7 +683,7 @@ void DFBrowser_Window::onExpand()
   for (int aSelectedId = 0, aSize = aSelectedIndices.size(); aSelectedId < aSize; aSelectedId++)
   {
     int aLevels = 2;
-    setExpanded (myTreeView, aSelectedIndices[aSelectedId], true, aLevels);
+    TreeModel_Tools::SetExpanded (myTreeView, aSelectedIndices[aSelectedId], true, aLevels);
   }
   QApplication::restoreOverrideCursor();
 }
@@ -677,7 +701,7 @@ void DFBrowser_Window::onExpandAll()
   for (int  aSelectedId = 0, aSize = aSelectedIndices.size(); aSelectedId < aSize; aSelectedId++)
   {
     int aLevels = -1;
-    setExpanded (myTreeView, aSelectedIndices[aSelectedId], true, aLevels);
+    TreeModel_Tools::SetExpanded (myTreeView, aSelectedIndices[aSelectedId], true, aLevels);
   }
   QApplication::restoreOverrideCursor();
 }
@@ -692,7 +716,7 @@ void DFBrowser_Window::onCollapseAll()
   QModelIndexList aSelectedIndices = aSelectionModel->selectedIndexes();
   for (int aSelectedId = 0, aSize = aSelectedIndices.size(); aSelectedId < aSize; aSelectedId++) {
     int aLevels = -1;
-    setExpanded (myTreeView, aSelectedIndices[aSelectedId], false, aLevels);
+    TreeModel_Tools::SetExpanded (myTreeView, aSelectedIndices[aSelectedId], false, aLevels);
   }
 }
 
@@ -705,6 +729,12 @@ void DFBrowser_Window::onTreeViewSelectionChanged (const QItemSelection& theSele
 {
   if (!myModule)
     return;
+
+#ifdef USE_DUMPJSON
+  if (myPropertyPanelWidget->toggleViewAction()->isChecked())
+    myPropertyView->Init (ViewControl_Tools::CreateTableModelValues (myTreeView->selectionModel()));
+#endif
+
   // previuos selection should be cleared in the panel selectors
   DFBrowser_AttributePaneStack* anAttributePaneStack = myPropertyPanel->GetAttributesStack();
   anAttributePaneStack->GetPaneSelector()->ClearSelected();
@@ -716,7 +746,7 @@ void DFBrowser_Window::onTreeViewSelectionChanged (const QItemSelection& theSele
   QModelIndex aSelectedIndex = TreeModel_ModelBase::SingleSelected (aSelectedIndices, 0);
 
   myTreeView->scrollTo (aSelectedIndex);
-  View_Displayer* aDisplayer = myViewWindow->GetDisplayer();
+  View_Displayer* aDisplayer = myViewWindow->Displayer();
   
   aDisplayer->ErasePresentations (View_PresentationType_Additional, false);
   aDisplayer->DisplayPresentation (findPresentation (aSelectedIndex), View_PresentationType_Main);
@@ -765,7 +795,7 @@ void DFBrowser_Window::onPaneSelectionChanged (const QItemSelection&,
       {
         TCollection_AsciiString aPluginShortName = aPluginName.SubString (3, aPluginName.Length());
         QString aMessage = QString ("TShape %1 is sent to %2.")
-          .arg (DFBrowserPane_Tools::GetPointerInfo (aParameters.Last()).ToCString())
+          .arg (Standard_Dump::GetPointerInfo (aParameters.Last()).ToCString())
           .arg (aPluginShortName.ToCString());
         QString aQuestion = QString ("Would you like to activate %1 immediately?\n")
           .arg (aPluginShortName.ToCString()).toStdString().c_str();
@@ -793,7 +823,7 @@ void DFBrowser_Window::onPaneSelectionChanged (const QItemSelection&,
 
   // make the shape visualized
   QModelIndex aSelectedIndex = aSelectedIndices.first();
-  View_Displayer* aDisplayer = myViewWindow->GetDisplayer();
+  View_Displayer* aDisplayer = myViewWindow->Displayer();
   aDisplayer->DisplayPresentation (findPresentation (aSelectedIndex), View_PresentationType_Main);
 
   // highlight and scroll to the referenced item if it exists
@@ -894,7 +924,7 @@ void DFBrowser_Window::onLevelSelected (const QModelIndex& theIndex)
   QModelIndexList anIndices;
   anIndices.append (theIndex);
   highlightIndices (anIndices);
-  View_Displayer* aDisplayer = myViewWindow->GetDisplayer();
+  View_Displayer* aDisplayer = myViewWindow->Displayer();
   aDisplayer->ErasePresentations (View_PresentationType_Additional, false);
   aDisplayer->DisplayPresentation (findPresentation (theIndex), View_PresentationType_Main);
 }
@@ -988,26 +1018,3 @@ void DFBrowser_Window::findPresentations (const QModelIndexList& theIndices, AIS
     thePresentations.Append (aPresentation);
   }
 }
-
-// =======================================================================
-// function : setExpanded
-// purpose :
-// =======================================================================
-void DFBrowser_Window::setExpanded (QTreeView* theTreeView, const QModelIndex& theIndex, const bool isExpanded,
-                                    int& theLevels)
-{
-  bool isToExpand = theLevels == -1 || theLevels > 0;
-  if (!isToExpand)
-    return;
-
-  theTreeView->setExpanded (theIndex, isExpanded);
-  if (theLevels != -1)
-    theLevels--;
-
-  QAbstractItemModel* aModel = theTreeView->model();
-  for (int aRowId = 0, aRows = aModel->rowCount (theIndex); aRowId < aRows; aRowId++)
-  {
-    int aLevels = theLevels;
-    setExpanded (theTreeView, aModel->index (aRowId, 0, theIndex), isExpanded, aLevels);
-  }
-}
index 93fb3d7..17b2f21 100644 (file)
@@ -39,12 +39,14 @@ class DFBrowser_Thread;
 class DFBrowser_TreeLevelLine;
 
 class ViewControl_MessageDialog;
+class ViewControl_PropertyView;
 
 class View_ToolBar;
 class View_Window;
 
 class QAbstractItemModel;
 class QAction;
+class QDockWidget;
 class QTreeView;
 class QWidget;
 
@@ -62,7 +64,7 @@ public:
   Standard_EXPORT DFBrowser_Window();
 
   //! Destructor
-  Standard_EXPORT virtual ~DFBrowser_Window() Standard_OVERRIDE;
+  Standard_EXPORT virtual ~DFBrowser_Window();
 
   //! Appends main window into layout of the parent if the parent is child of QWidget
   //! \param theParent a parent class
@@ -72,7 +74,7 @@ public:
   //! \param theParameters a parameters container
   void SetParameters (const Handle(TInspectorAPI_PluginParameters)& theParameters) { myParameters = theParameters; }
 
-  //! Provide container for actions available in inspector on general level
+  //! Provides container for actions available in inspector on general level
   //! \param theMenu if Qt implementation, it is QMenu object
   Standard_EXPORT virtual void FillActionsMenu (void* theMenu);
 
@@ -125,13 +127,13 @@ private slots:
   //! \param thePosition a clicked point
   void onTreeViewContextMenuRequested (const QPoint& thePosition);
 
-  //! Expand two next levels for all selected item
+  //! Expands two next levels for all selected item
   void onExpand();
 
-  //! Expand all levels for all selected items
+  //! Expands all levels for all selected items
   void onExpandAll();
 
-  //! Collapse all levels for all selected items
+  //! Collapses all levels for all selected items
   void onCollapseAll();
 
   //! Udpates all controls by changed selection in OCAF tree view
@@ -206,13 +208,6 @@ protected:
   //! \return container of presentations or NULL
   void findPresentations (const QModelIndexList& theIndices, AIS_ListOfInteractive& thePresentations);
 
-  //! Recursive items expanding in tree view staring from the index
-  //! \param theTreeView an OCAF tree view
-  //! \param theParentIndex an index which children should be expanded
-  //! \param isExpanded a boolean state if the item should be expanded or collapsed
-  //! \param theLevels a number of levels to be expanded, or -1 for all levels
-  static void setExpanded (QTreeView* theTreeView, const QModelIndex& theParentIndex, const bool isExpanded, int& theLevels);
-
 private:
 
   DFBrowser_Module* myModule; //!< current module
@@ -220,7 +215,9 @@ private:
   QMainWindow* myMainWindow; //!< main control for all components
   DFBrowser_TreeLevelLine* myTreeLevelLine; //!< navigate line of tree levels to the selected item
   QTreeView* myTreeView; //!< OCAF tree view
+  QDockWidget* myPropertyPanelWidget; //!< property pane dockable widget
   DFBrowser_PropertyPanel* myPropertyPanel; //!< property panel shows full information about attribute or search view
+  ViewControl_PropertyView* myPropertyView; //!< property control to display model item values if exist
   View_Window* myViewWindow; //!< V3d view to visualize presentations/references if it can be build for a selected item
   DFBrowser_DumpView* myDumpView; //!< Text editor where "Dump" method output is shown
   DFBrowser_Thread* myThread; //!< Threads manipulator, starting thread items, listens finalizing
index 9468629..2bf6f29 100644 (file)
@@ -140,7 +140,7 @@ void DFBrowserPane_AttributePane::GetShortAttributeInfo (const Handle(TDF_Attrib
 // function : GetAttributeInfoByType
 // purpose :
 // =======================================================================
-QVariant DFBrowserPane_AttributePane::GetAttributeInfoByType (const Standard_CString& theAttributeName,
+QVariant DFBrowserPane_AttributePane::GetAttributeInfoByType (Standard_CString theAttributeName,
                                                               int theRole, int theColumnId)
 {
   if (theColumnId != 0)
index c312d15..2a3d1a9 100644 (file)
@@ -74,7 +74,7 @@ public:
   //! \param theRole a role of information, used by tree model (e.g. DisplayRole, icon, background and so on)
   //! \param theColumnId a tree model column
   //! \return value, interpreted by tree model depending on the role
-  Standard_EXPORT static QVariant GetAttributeInfoByType(const Standard_CString& theAttributeName, int theRole, int theColumnId);
+  Standard_EXPORT static QVariant GetAttributeInfoByType(Standard_CString theAttributeName, int theRole, int theColumnId);
 
   //! Returns information for the given attribute
   //! \param theAttribute a current attribute
index 9869790..872a590 100644 (file)
 // function : Constructor
 // purpose :
 // =======================================================================
-DFBrowserPane_AttributePaneAPI* DFBrowserPane_AttributePaneCreator::CreateAttributePane (
-                                                                        const Standard_CString& theAttributeName)
+DFBrowserPane_AttributePaneAPI* DFBrowserPane_AttributePaneCreator::CreateAttributePane (Standard_CString theAttributeName)
 {
   DFBrowserPane_AttributePaneAPI* aPane = 0;
   if (theAttributeName == STANDARD_TYPE (TDF_Reference)->Name())
index 5e4fdb8..0b6a64e 100644 (file)
@@ -38,7 +38,7 @@ public:
   //! Creates attribute pane for TDF, TDataStd, TDocStd, TPrsStd, TNaming and TFunction attribute types
   //! \param theAttributeName a standard type of attribute
   //! \return an attribute pane if it can be created for this type
-  Standard_EXPORT virtual DFBrowserPane_AttributePaneAPI* CreateAttributePane(const Standard_CString& theAttributeName) Standard_OVERRIDE;
+  Standard_EXPORT virtual DFBrowserPane_AttributePaneAPI* CreateAttributePane(Standard_CString theAttributeName) Standard_OVERRIDE;
 };
 
 #endif
index e818c4d..1537b69 100644 (file)
@@ -36,7 +36,7 @@ public:
   //! Creates attribute pane for attribute types
   //! \param theAttributeName a standard type of attribute
   //! \return an attribute pane if it can be created for this type
-  virtual DFBrowserPane_AttributePaneAPI* CreateAttributePane (const Standard_CString& theAttributeName) = 0;
+  virtual DFBrowserPane_AttributePaneAPI* CreateAttributePane (Standard_CString theAttributeName) = 0;
 };
 
 #endif 
index a578052..69c64f4 100644 (file)
@@ -42,7 +42,7 @@ public:
   virtual ~DFBrowserPane_AttributePaneModel() {}
 
   //! Sets direction of the values applying, whether it should be placed by rows or by columns
-  //! \param theOrientation if horizontal, the values are applyed by rows, otherwise by columns
+  //! \param theOrientation if horizontal, the values are applied by rows, otherwise by columns
   void SetOrientation (const Qt::Orientation& theOrientation) { myOrientation = theOrientation; }
 
   //! Returns table orientation for setting data values
index dac0302..0715326 100644 (file)
@@ -16,7 +16,6 @@
 #ifndef DFBrowserPane_HelperExport_H
 #define DFBrowserPane_HelperExport_H
 
-#include <inspector/DFBrowserPane.hxx>
 #include <TopoDS_Shape.hxx>
 
 #include <Standard_WarningsDisable.hxx>
@@ -29,7 +28,7 @@
 //! It contains a conainer of shapes for model indices. If button is pressed for index where the 
 //! shape exists, this shape is exported to BREP file.
 //! It contains a container of shapes, it is important to clear this helper after using.
-class DFBROWSERPANE_EXPORT DFBrowserPane_HelperExport : public QObject
+class DFBrowserPane_HelperExport : public QObject
 {
   Q_OBJECT
 public:
@@ -55,7 +54,7 @@ public:
   //! Returns shape for the index
   //! \param theIndex a model view index
   //! \return a cached shape
-  const TopoDS_Shape& GetShape (const QModelIndex& theIndex) { return myShapes[theIndex]; }
+  const TopoDS_Shape& Shape (const QModelIndex& theIndex) { return myShapes[theIndex]; }
 
 public slots:
 
index 0e79829..a903cf3 100644 (file)
@@ -41,6 +41,7 @@ DFBrowserPane_TDataStdTreeNode::DFBrowserPane_TDataStdTreeNode()
 : DFBrowserPane_AttributePane(), myTreeNodeView (0)
 {
   myModel = new DFBrowserPane_TDataStdTreeNodeModel (0);
+  myModel->InitColumns();
   mySelectionModels.clear(); // do not use selection model of parent pane
   mySelectionModels.push_back (new QItemSelectionModel (myModel));
 }
@@ -99,15 +100,14 @@ void DFBrowserPane_TDataStdTreeNode::Init (const Handle(TDF_Attribute)& theAttri
   }
 
 
-  DFBrowserPane_TDataStdTreeNodeModel* aModel = dynamic_cast<DFBrowserPane_TDataStdTreeNodeModel*> (myModel);
-  aModel->Reset();
+  myModel->Reset();
 
   if (!aTreeNode.IsNull())
   {
     Handle(TDataStd_TreeNode) aRootItem = aTreeNode->Root();
-    aModel->SetAttribute (aRootItem);
+    myModel->SetAttribute (aRootItem);
 
-    QModelIndex anIndex = aModel->FindIndex (theAttribute, QModelIndex());
+    QModelIndex anIndex = myModel->FindIndex (theAttribute, QModelIndex());
     if (myTreeNodeView && anIndex.isValid())
     {
       myTreeNodeView->setExpanded (anIndex.parent(), true);
@@ -119,7 +119,7 @@ void DFBrowserPane_TDataStdTreeNode::Init (const Handle(TDF_Attribute)& theAttri
       anAttributeNodeItem->setCurrentAttribute (true);
     }
   }
-  aModel->EmitLayoutChanged();
+  myModel->EmitLayoutChanged();
 }
 
 // =======================================================================
index 9057060..50d676a 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <Standard.hxx>
 
-class QAbstractItemModel;
+class DFBrowserPane_TDataStdTreeNodeModel;
 class QTreeView;
 
 //! \class DFBrowserPane_TDataStdTreeNode
@@ -66,7 +66,7 @@ public:
 
 private:
 
-  QAbstractItemModel* myModel;
+  DFBrowserPane_TDataStdTreeNodeModel* myModel;
   QTreeView* myTreeNodeView;
 };
 
index 2c3818f..9570aea 100644 (file)
@@ -39,15 +39,15 @@ class DFBrowserPane_TDataStdTreeNodeItem : public TreeModel_ItemBase
 public:
 
   //! Creates an item wrapped by a shared pointer
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
   //! \return the pointer to the created item
   static DFBrowserPane_TDataStdTreeNodeItemPtr CreateItem (TreeModel_ItemBasePtr theParent,
                                                            const int theRow, const int theColumn)
   { return DFBrowserPane_TDataStdTreeNodeItemPtr (new DFBrowserPane_TDataStdTreeNodeItem (theParent, theRow, theColumn)); }
 
   //!Destructor
-  virtual ~DFBrowserPane_TDataStdTreeNodeItem() Standard_OVERRIDE {};
+  virtual ~DFBrowserPane_TDataStdTreeNodeItem() Standard_OVERRIDE {}
 
   //! Store a current attribute
   //! \param theAttribute an attribute
@@ -90,13 +90,13 @@ protected:
 protected:
 
   //! Constructor
-  //! param theParent a parent item
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
+  //! \param theParent a parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
   DFBrowserPane_TDataStdTreeNodeItem(TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
     : TreeModel_ItemBase (theParent, theRow, theColumn), myIsCurrentItem (false) {}
 
-  //! Initialize the current item. It creates a backup of the specific item information
+  //! Initializes the current item. It creates a backup of the specific item information
   void initItem() const;
 
   //! Returns number of children attributes, initializes item is necessary
index aaa62b2..4f8a484 100644 (file)
 DFBrowserPane_TDataStdTreeNodeModel::DFBrowserPane_TDataStdTreeNodeModel (QObject* theParent)
 : TreeModel_ModelBase (theParent)
 {
-  createRootItem(0);
+}
+
+// =======================================================================
+// function : InitColumns
+// purpose :
+// =======================================================================
+void DFBrowserPane_TDataStdTreeNodeModel::InitColumns()
+{
+  SetHeaderItem (0, TreeModel_HeaderSection ("Name"));
 }
 
 // =======================================================================
 // function : createRootItem
 // purpose :
 // =======================================================================
-void DFBrowserPane_TDataStdTreeNodeModel::createRootItem (const int theColumnId)
+TreeModel_ItemBasePtr DFBrowserPane_TDataStdTreeNodeModel::createRootItem (const int theColumnId)
 {
-  m_pRootItem = DFBrowserPane_TDataStdTreeNodeItem::CreateItem (TreeModel_ItemBasePtr(), 0, theColumnId);
+  return DFBrowserPane_TDataStdTreeNodeItem::CreateItem (TreeModel_ItemBasePtr(), 0, theColumnId);
 }
 
 // =======================================================================
@@ -47,7 +55,7 @@ void DFBrowserPane_TDataStdTreeNodeModel::createRootItem (const int theColumnId)
 // =======================================================================
 void DFBrowserPane_TDataStdTreeNodeModel::SetAttribute (const Handle(TDF_Attribute)& theAttribute)
 {
-  DFBrowserPane_TDataStdTreeNodeItemPtr aRootItem = itemDynamicCast<DFBrowserPane_TDataStdTreeNodeItem>(m_pRootItem);
+  DFBrowserPane_TDataStdTreeNodeItemPtr aRootItem = itemDynamicCast<DFBrowserPane_TDataStdTreeNodeItem>(RootItem (0));
   Reset();
   aRootItem->SetAttribute (theAttribute);
   EmitLayoutChanged();
index 9223cfa..b5acae2 100644 (file)
@@ -38,7 +38,10 @@ public:
   Standard_EXPORT DFBrowserPane_TDataStdTreeNodeModel (QObject* theParent);
 
   //! Destructor
-  virtual ~DFBrowserPane_TDataStdTreeNodeModel() Standard_OVERRIDE {};
+  virtual ~DFBrowserPane_TDataStdTreeNodeModel() Standard_OVERRIDE {}
+
+  //! Creates model columns and root items.
+  Standard_EXPORT virtual void InitColumns() Standard_OVERRIDE;
 
   //! Initializes the tree model by the attribute
   //! \param theAttribute a current attribute
@@ -59,7 +62,7 @@ public:
 protected:
   //! Creates root item
   //! \param theColumnId index of a column
-  virtual void createRootItem (const int theColumnId) Standard_OVERRIDE;
+  Standard_EXPORT virtual TreeModel_ItemBasePtr createRootItem (const int theColumnId) Standard_OVERRIDE;
 
 private:
 
index 590af0b..61f48d3 100644 (file)
@@ -23,7 +23,6 @@
 #include <TDocStd_Owner.hxx>
 #include <TDF_Delta.hxx>
 #include <TDF_ListIteratorOfDeltaList.hxx>
-#include <Standard_Version.hxx>
 
 #include <Standard_WarningsDisable.hxx>
 #include <QGridLayout>
@@ -56,7 +55,7 @@ void DFBrowserPane_TDocStdOwner::GetValues (const Handle(TDF_Attribute)& theAttr
   if (aDocument.IsNull())
     return;
 
-  TCollection_AsciiString aDocumentInfo = DFBrowserPane_Tools::GetPointerInfo (aDocument).ToCString();
+  TCollection_AsciiString aDocumentInfo = Standard_Dump::GetPointerInfo (aDocument).ToCString();
   TColStd_SequenceOfExtendedString anExtensions;
   aDocument->Extensions(anExtensions);
   TCollection_AsciiString aSeparationStr = "---------------------------";
@@ -100,7 +99,7 @@ void DFBrowserPane_TDocStdOwner::GetValues (const Handle(TDF_Attribute)& theAttr
 
   // TDocStd_Document methods
   TCollection_AsciiString aDocumentDataInfo = !aDocument->GetData().IsNull()
-    ? DFBrowserPane_Tools::GetPointerInfo (aDocument->GetData()).ToCString() : "";
+    ? Standard_Dump::GetPointerInfo (aDocument->GetData()).ToCString() : "";
   theValues << aSeparationStr.ToCString() << aSeparationStr.ToCString()
             << STANDARD_TYPE (TDocStd_Document)->Name() << ""
             << aSeparationStr.ToCString() << aSeparationStr.ToCString()
@@ -119,9 +118,7 @@ void DFBrowserPane_TDocStdOwner::GetValues (const Handle(TDF_Attribute)& theAttr
             << "GetUndos" << convertToString (aDocument->GetUndos())
             << "GetAvailableRedos" << QString::number (aDocument->GetAvailableRedos())
             << "GetRedos" << convertToString (aDocument->GetRedos())
-#if OCC_VERSION_HEX > 0x070100
             << "EmptyLabelsSavingMode" << DFBrowserPane_Tools::BoolToStr (aDocument->EmptyLabelsSavingMode())
-#endif
             << "IsNestedTransactionMode" << DFBrowserPane_Tools::BoolToStr (aDocument->IsNestedTransactionMode())
             << "ModificationMode" << DFBrowserPane_Tools::BoolToStr (aDocument->ModificationMode());
 }
index bd40910..e9220e5 100644 (file)
@@ -154,7 +154,7 @@ void DFBrowserPane_TNamingNamedShape::Init (const Handle(TDF_Attribute)& theAttr
   aFreeRows << 0 << 1;
 
   TopoDS_Shape aShape = aShapeAttr->Get();
-  TCollection_AsciiString aShapeInfo = !aShape.IsNull() ? DFBrowserPane_Tools::GetPointerInfo (aShape.TShape()) : "";
+  TCollection_AsciiString aShapeInfo = !aShape.IsNull() ? Standard_Dump::GetPointerInfo (aShape.TShape()) : "";
   aValues << "Shape" << aShapeInfo.ToCString() << DFBrowserPane_Tools::ShapeTypeInfo (aShape) << "" << "";
   aShapes.Append (aShape);
   if (aShape.IsNull())
@@ -162,7 +162,7 @@ void DFBrowserPane_TNamingNamedShape::Init (const Handle(TDF_Attribute)& theAttr
 
   TopoDS_Shape aCurrentShape = TNaming_Tool::CurrentShape (aShapeAttr);
   TCollection_AsciiString aCurrentShapeInfo = !aCurrentShape.IsNull() ?
-                                  DFBrowserPane_Tools::GetPointerInfo (aCurrentShape.TShape()) : "";
+    Standard_Dump::GetPointerInfo (aCurrentShape.TShape()) : "";
   aValues << "CurrentShape" << aCurrentShapeInfo.ToCString()
           << DFBrowserPane_Tools::ShapeTypeInfo (aCurrentShape) << "" << "";
   aShapes.Append (aCurrentShape);
@@ -171,7 +171,7 @@ void DFBrowserPane_TNamingNamedShape::Init (const Handle(TDF_Attribute)& theAttr
 
   TopoDS_Shape anOriginalShape = TNaming_Tool::OriginalShape (aShapeAttr);
   TCollection_AsciiString anOriginalShapeInfo = !anOriginalShape.IsNull() ?
-            DFBrowserPane_Tools::GetPointerInfo (anOriginalShape.TShape()) : "";
+    Standard_Dump::GetPointerInfo (anOriginalShape.TShape()) : "";
   aValues << "OriginalShape" << anOriginalShapeInfo.ToCString()
           << DFBrowserPane_Tools::ShapeTypeInfo (anOriginalShape) << "" << "";
   aShapes.Append (anOriginalShape);
@@ -227,14 +227,14 @@ void DFBrowserPane_TNamingNamedShape::Init (const Handle(TDF_Attribute)& theAttr
         aLabelInfo = QString (DFBrowserPane_Tools::GetEntry (anOldLabel).ToCString());
     }
     if (!aNewShape.IsNull())
-      aValues << DFBrowserPane_Tools::GetPointerInfo (aNewShape.TShape()->This()).ToCString()
+      aValues << Standard_Dump::GetPointerInfo (aNewShape.TShape()->This()).ToCString()
               << DFBrowserPane_Tools::ShapeTypeInfo (aNewShape)
               << "";
     else
       aValues << "-" << "-" << "";
     aValues << "Old:";
     if (!anOldShape.IsNull())
-      aValues << DFBrowserPane_Tools::GetPointerInfo (anOldShape.TShape()->This()).ToCString()
+      aValues << Standard_Dump::GetPointerInfo (anOldShape.TShape()->This()).ToCString()
               << DFBrowserPane_Tools::ShapeTypeInfo (anOldShape)
               << aLabelInfo
               << "";
@@ -382,7 +382,7 @@ void DFBrowserPane_TNamingNamedShape::GetSelectionParameters (QItemSelectionMode
   if (aSelectedIndex.column() != 4)
     return;
 
-  const TopoDS_Shape& aShape = myHelperExport.GetShape (aSelectedIndex);
+  const TopoDS_Shape& aShape = myHelperExport.Shape (aSelectedIndex);
   if (aShape.IsNull())
     return;
   theParameters.Append (aShape.TShape());
@@ -467,7 +467,7 @@ TopoDS_Shape DFBrowserPane_TNamingNamedShape::getSelectedShapes()
     QModelIndex anIndex = *anIt;
     if (!myHelperExport.HasShape (anIndex))
       continue;
-    aBuilder.Add (aComp, myHelperExport.GetShape (anIndex));
+    aBuilder.Add (aComp, myHelperExport.Shape (anIndex));
     aHasShapes = true;
   }
 
@@ -480,7 +480,7 @@ TopoDS_Shape DFBrowserPane_TNamingNamedShape::getSelectedShapes()
     QModelIndex anIndex = *anIt;
     if (!myHelperExport.HasShape (anIndex))
       continue;
-    aBuilder.Add (aComp, myHelperExport.GetShape (anIndex));
+    aBuilder.Add (aComp, myHelperExport.Shape (anIndex));
     aHasShapes = true;
   }
   if (aHasShapes)
index a70d5f2..afd1cbe 100644 (file)
@@ -124,7 +124,7 @@ void DFBrowserPane_TNamingNaming::GetValues (const Handle(TDF_Attribute)& theAtt
   theValues.append (QString::number (aNamingName.Index()));
   TopoDS_Shape aShape = aNamingName.Shape();
   theValues.append ("Shape(TShape)");
-  theValues.append (!aShape.IsNull() ? DFBrowserPane_Tools::GetPointerInfo (aShape.TShape()->This()).ToCString() : "");
+  theValues.append (!aShape.IsNull() ? Standard_Dump::GetPointerInfo (aShape.TShape()->This()).ToCString() : "");
   TDF_Label aContextLabel = aNamingName.ContextLabel();
   theValues.append ("ContextLabel");
   theValues.append (!aContextLabel.IsNull() ? DFBrowserPane_Tools::GetEntry (aContextLabel).ToCString() : "");
index 19d54ad..6f5f6c1 100644 (file)
@@ -80,7 +80,7 @@ void DFBrowserPane_TNamingUsedShapes::GetValues (const Handle(TDF_Attribute)& th
     if (!aShape.IsNull())
     {
       theValues.append(DFBrowserPane_Tools::ToName(DB_SHAPE_TYPE, aShape.ShapeType()).ToCString());
-      theValues.append(DFBrowserPane_Tools::GetPointerInfo(aShape.TShape()->This()).ToCString());
+      theValues.append(Standard_Dump::GetPointerInfo(aShape.TShape()->This()).ToCString());
     }
     else
       theValues << "EMPTY SHAPE" << "";
@@ -89,7 +89,7 @@ void DFBrowserPane_TNamingUsedShapes::GetValues (const Handle(TDF_Attribute)& th
     {
       theValues.append(DFBrowserPane_Tools::GetEntry(aPtrRefShape->Label()).ToCString());
       const TopoDS_Shape& aValueShape = aPtrRefShape->Shape();
-      theValues.append(!aValueShape.IsNull() ? DFBrowserPane_Tools::GetPointerInfo(aValueShape.TShape()->This()).ToCString() : "");
+      theValues.append(!aValueShape.IsNull() ? Standard_Dump::GetPointerInfo(aValueShape.TShape()->This()).ToCString() : "");
     }
     else
       theValues << "" << "";
index 3b21044..4a3e759 100644 (file)
@@ -63,7 +63,7 @@ void DFBrowserPane_TPrsStdAISPresentation::GetValues (const Handle(TDF_Attribute
             << "GetAIS" << (anIO.IsNull() ? "Null" : anAttribute->DynamicType()->Name())
             << "IsDisplayed" << DFBrowserPane_Tools::BoolToStr (anAttribute->IsDisplayed())
             << "GetContext()" << ((!anIO.IsNull() && !anIO->GetContext().IsNull()) ?
-                                 DFBrowserPane_Tools::GetPointerInfo (anIO->GetContext()).ToCString() : "")
+                                 Standard_Dump::GetPointerInfo (anIO->GetContext()).ToCString() : "")
             << "HasOwnMaterial" << DFBrowserPane_Tools::BoolToStr (anAttribute->HasOwnMaterial())
             << "Material" << (anAttribute->HasOwnMaterial() ?
                              DFBrowserPane_Tools::ToName (DB_MATERIAL_TYPE, anAttribute->Material()) : "").ToCString()
index 6037bb2..eecf1ee 100644 (file)
@@ -35,7 +35,7 @@ void DFBrowserPane_TPrsStdAISViewer::GetValues (const Handle(TDF_Attribute)& the
 
   Handle(AIS_InteractiveContext) aContext = aViewerAttribute->GetInteractiveContext();
   TCollection_AsciiString aPointerInfo = !aContext.IsNull()
-    ? DFBrowserPane_Tools::GetPointerInfo (aContext).ToCString() : "";
+    ? Standard_Dump::GetPointerInfo (aContext).ToCString() : "";
 
   theValues << "GetInteractiveContext" << aPointerInfo.ToCString();
 
index 3deb0ba..8abacd8 100644 (file)
@@ -19,7 +19,6 @@
 #include <CDM_CanCloseStatus.hxx>
 #include <Graphic3d_MaterialAspect.hxx>
 #include <Graphic3d_NameOfMaterial.hxx>
-#include <Standard_Version.hxx>
 #include <TCollection_AsciiString.hxx>
 #include <TDataStd.hxx>
 #include <TDataStd_RealEnum.hxx>
@@ -71,30 +70,6 @@ TCollection_AsciiString DFBrowserPane_Tools::GetEntry (const TDF_Label& theLabel
 }
 
 // =======================================================================
-// function : GetPointerInfo
-// purpose :
-// =======================================================================
-TCollection_AsciiString DFBrowserPane_Tools::GetPointerInfo (const Handle(Standard_Transient)& thePointer, const bool isShortInfo)
-{
-  std::ostringstream aPtrStr;
-  aPtrStr << thePointer.operator->();
-  if (!isShortInfo)
-    return aPtrStr.str().c_str();
-
-  TCollection_AsciiString anInfoPtr (aPtrStr.str().c_str());
-  for (int aSymbolId = 1; aSymbolId < anInfoPtr.Length(); aSymbolId++)
-  {
-    if (anInfoPtr.Value(aSymbolId) != '0')
-    {
-      anInfoPtr = anInfoPtr.SubString(aSymbolId, anInfoPtr.Length());
-      anInfoPtr.Prepend("0x");
-      return anInfoPtr;
-    }
-  }
-  return aPtrStr.str().c_str();
-}
-
-// =======================================================================
 // function : ShapeTypeInfo
 // purpose :
 // =======================================================================
index cb19477..892bc7e 100644 (file)
@@ -48,13 +48,6 @@ public:
   //! \return the string value
   Standard_EXPORT static TCollection_AsciiString GetEntry (const TDF_Label& theLabel);
 
-  //! Convert pointer to string value
-  //! \param thePointer a pointer
-  //! \param isShortInfo if true, all '0' symbols in the beginning of the pointer are skipped
-  //! \return the string value
-  Standard_EXPORT static TCollection_AsciiString GetPointerInfo (const Handle(Standard_Transient)& thePointer,
-                                                                 const bool isShortInfo = true);
-
   //! Returns string value corresponded to the shape type if it is not null.
   //! \param theShape a checked shape
   //! \return string value or empty string value
index 1ea8358..de80d10 100644 (file)
@@ -1,4 +1,3 @@
-DFBrowserPane.hxx
 DFBrowserPane.qrc
 DFBrowserPane_AttributePane.cxx
 DFBrowserPane_AttributePane.hxx
index b531305..35e15ae 100644 (file)
@@ -52,7 +52,7 @@ DFBrowserPaneXDE_AttributeCommonPane::DFBrowserPaneXDE_AttributeCommonPane (DFBr
 // function : ProcessAttribute
 // purpose :
 // =======================================================================
-bool DFBrowserPaneXDE_AttributeCommonPane::ProcessAttribute (const Standard_CString& theAttributeType)
+bool DFBrowserPaneXDE_AttributeCommonPane::ProcessAttribute (Standard_CString theAttributeType)
 {
   if (AttributeTypes.empty())
   {
index dd34d91..c15e30c 100644 (file)
@@ -46,7 +46,7 @@ public:
   //! have difference in presentation (TDataStd_TreeNode, TDF_Reference, TNaming_NamedShape and TDataStd_UAttribute).
   //! Also it contains XCAFDoc attributes (should be implemented in this package or pane will be empty)
   //! \param theAttributeType an attribute type
-  Standard_EXPORT static bool ProcessAttribute (const Standard_CString& theAttributeType);
+  Standard_EXPORT static bool ProcessAttribute (Standard_CString theAttributeType);
 
   //! Creates table view and call create widget of array table helper
   //! \param theParent a parent widget
index 8c0641f..7ace10a 100644 (file)
 #include <inspector/DFBrowserPaneXDE_XCAFDocShapeMapTool.hxx>
 #include <inspector/DFBrowserPaneXDE_XCAFDocShapeTool.hxx>
 
-#include <Standard_Version.hxx>
-
 #include <XCAFDoc_Area.hxx>
 #include <XCAFDoc_Centroid.hxx>
 #include <XCAFDoc_Color.hxx>
 #include <XCAFDoc_ColorTool.hxx>
 #include <XCAFDoc_Datum.hxx>
-#if OCC_VERSION_HEX > 0x060901
 #include <XCAFDoc_Dimension.hxx>
 #include <XCAFDoc_GeomTolerance.hxx>
-#endif
 #include <XCAFDoc_DimTol.hxx>
 #include <XCAFDoc_DimTolTool.hxx>
 #include <XCAFDoc_DocumentTool.hxx>
@@ -71,7 +67,7 @@ DFBrowserPaneXDE_AttributePaneCreator::DFBrowserPaneXDE_AttributePaneCreator(
 // function : CreateAttributePane
 // purpose :
 // =======================================================================
-DFBrowserPane_AttributePaneAPI* DFBrowserPaneXDE_AttributePaneCreator::CreateAttributePane (const Standard_CString& theAttributeName)
+DFBrowserPane_AttributePaneAPI* DFBrowserPaneXDE_AttributePaneCreator::CreateAttributePane (Standard_CString theAttributeName)
 {
   DFBrowserPane_AttributePaneAPI* aPane = 0;
   if (DFBrowserPaneXDE_AttributeCommonPane::ProcessAttribute (theAttributeName))
@@ -91,7 +87,7 @@ DFBrowserPane_AttributePaneAPI* DFBrowserPaneXDE_AttributePaneCreator::CreateAtt
 // function : createXDEPane
 // purpose :
 // =======================================================================
-DFBrowserPane_AttributePaneAPI* DFBrowserPaneXDE_AttributePaneCreator::createXDEPane (const Standard_CString& theAttributeName)
+DFBrowserPane_AttributePaneAPI* DFBrowserPaneXDE_AttributePaneCreator::createXDEPane (Standard_CString theAttributeName)
 {
   DFBrowserPane_AttributePaneAPI* aPane = 0;
   if (theAttributeName == STANDARD_TYPE (XCAFDoc_ShapeMapTool)->Name())
@@ -106,20 +102,16 @@ DFBrowserPane_AttributePaneAPI* DFBrowserPaneXDE_AttributePaneCreator::createXDE
     aPane = new DFBrowserPaneXDE_XCAFDocColorTool();
   else if (theAttributeName == STANDARD_TYPE (XCAFDoc_Datum)->Name())
     aPane = new DFBrowserPaneXDE_XCAFDocDatum();
-#if OCC_VERSION_HEX > 0x060901
   else if (theAttributeName == STANDARD_TYPE (XCAFDoc_Dimension)->Name())
     aPane = new DFBrowserPaneXDE_XCAFDocDimension();
-#endif
   else if (theAttributeName == STANDARD_TYPE (XCAFDoc_DimTol)->Name())
     aPane = new DFBrowserPaneXDE_XCAFDocDimTol();
   else if (theAttributeName == STANDARD_TYPE (XCAFDoc_DimTolTool)->Name())
     aPane = new DFBrowserPaneXDE_XCAFDocDimTolTool();
   else if (theAttributeName == STANDARD_TYPE (XCAFDoc_DocumentTool)->Name())
     aPane = new DFBrowserPaneXDE_XCAFDocDocumentTool();
-#if OCC_VERSION_HEX > 0x060901
   else if (theAttributeName == STANDARD_TYPE (XCAFDoc_GeomTolerance)->Name())
     aPane = new DFBrowserPaneXDE_XCAFDocGeomTolerance();
-#endif
   else if (theAttributeName == STANDARD_TYPE (XCAFDoc_GraphNode)->Name())
     aPane = new DFBrowserPaneXDE_XCAFDocGraphNode();
   else if (theAttributeName == STANDARD_TYPE (XCAFDoc_LayerTool)->Name())
index 2520a02..00e3a86 100644 (file)
@@ -43,14 +43,14 @@ public:
   //! \param theAttributeName a type of attribute
   //! \return an attribute pane if it can be created for this type
   Standard_EXPORT virtual DFBrowserPane_AttributePaneAPI* CreateAttributePane
-    (const Standard_CString& theAttributeName) Standard_OVERRIDE;
+    (Standard_CString theAttributeName) Standard_OVERRIDE;
 
 protected:
 
   //! Cretates pane for XCAFDoc attribute name
   //! \param theAttributeName a type of attribute
   //! \return an attribute pane if it can be created for this type
-  DFBrowserPane_AttributePaneAPI* createXDEPane (const Standard_CString& theAttributeName);
+  DFBrowserPane_AttributePaneAPI* createXDEPane (Standard_CString theAttributeName);
 
 private:
 
index f9e64d7..437a9b4 100644 (file)
 
 #include <inspector/DFBrowserPane_AttributePaneModel.hxx>
 
-#include <Standard_Version.hxx>
 #include <TCollection_HAsciiString.hxx>
 
 #include <XCAFDoc_Datum.hxx>
-#if OCC_VERSION_HEX > 0x060901
 #include <XCAFDimTolObjects_DatumObject.hxx>
-#endif
 
 // =======================================================================
 // function : Constructor
@@ -50,13 +47,11 @@ void DFBrowserPaneXDE_XCAFDocDatum::GetValues (const Handle(TDF_Attribute)& theA
             << "Description" << (!aDescription.IsNull() ? aDescription->ToCString() : QString (""))
             << "Indentification" << (!anIndentification.IsNull() ? anIndentification->ToCString() : QString (""));
 
-#if OCC_VERSION_HEX > 0x060901
   Handle(XCAFDimTolObjects_DatumObject) anObject = anAttr->GetObject();
   Handle(TCollection_HAsciiString) anObjectName;
   if (!anObject.IsNull())
     anObjectName = anObject->GetName();
   theValues << "Object" << (!anObjectName.IsNull() ? anObjectName->ToCString() : "Empty Name");
-#endif
 }
 
 // =======================================================================
index 7fc6cef..7cec914 100644 (file)
@@ -116,7 +116,7 @@ void DFBrowserPaneXDE_XCAFDocShapeMapTool::GetValues (const Handle(TDF_Attribute
     const TopoDS_Shape& aShape = aShapeMap(aShapeValueId);
 
     if (!aShape.IsNull())
-      theValues << DFBrowserPane_Tools::GetPointerInfo (aShape.TShape()->This()).ToCString()
+      theValues << Standard_Dump::GetPointerInfo (aShape.TShape()->This()).ToCString()
                 << DFBrowserPane_Tools::ShapeTypeInfo (aShape)
                 << "";
     else
index 1728015..a3b7632 100644 (file)
 #include <XCAFDoc_Color.hxx>
 #include <XCAFDoc_ColorTool.hxx>
 #include <XCAFDoc_DimTol.hxx>
-#include <Standard_Version.hxx>
-#if OCC_VERSION_HEX > 0x060901
 #include <XCAFDoc_Dimension.hxx>
 #include <XCAFDoc_GeomTolerance.hxx>
-#endif
 #include <XCAFDoc_Datum.hxx>
 #include <XCAFDoc_DocumentTool.hxx>
 #include <XCAFDoc_GraphNode.hxx>
@@ -247,7 +244,6 @@ TCollection_AsciiString DFBrowserPaneXDE_XDEDRAW::GetAttributeInfo (Handle(TDF_A
     else if ( att->ID() == XCAFDoc::DatumTolRefGUID() ) {
       type = "DatumToler Link";
     }
-#if OCC_VERSION_HEX > 0x060901
     else if ( att->ID() == XCAFDoc::DimensionRefFirstGUID() ) {
       type = "Dimension Link First";
     }
@@ -257,7 +253,6 @@ TCollection_AsciiString DFBrowserPaneXDE_XDEDRAW::GetAttributeInfo (Handle(TDF_A
     else if ( att->ID() == XCAFDoc::GeomToleranceRefGUID() ){
       type = "GeomTolerance Link";
     }
-#endif
     else
       return TCollection_AsciiString();
 
index 895416e..09979b4 100644 (file)
@@ -1,7 +1,6 @@
 ShapeView.qrc
 ShapeView_Communicator.cxx
 ShapeView_Communicator.hxx
-ShapeView_ItemBase.hxx
 ShapeView_ItemRoot.cxx
 ShapeView_ItemRoot.hxx
 ShapeView_ItemShape.cxx
index babb61b..1850cff 100644 (file)
@@ -29,7 +29,7 @@ public:
   ShapeView_Communicator() : TInspectorAPI_Communicator(), myWindow (new ShapeView_Window (0)) {}
 
   //! Destructor
-  virtual ~ShapeView_Communicator() Standard_OVERRIDE { myWindow->RemoveAllShapes(); }
+  virtual ~ShapeView_Communicator() { myWindow->RemoveAllShapes(); }
 
   //! Provides the container with a parent where this container should be inserted.
   //! If Qt implementation, it should be QWidget with QLayout set inside
@@ -41,9 +41,9 @@ public:
   virtual void SetParameters (const Handle(TInspectorAPI_PluginParameters)& theParameters) Standard_OVERRIDE
   { myWindow->SetParameters (theParameters); }
 
-  //! Provide container for actions available in inspector on general level
+  //! Provides container for actions available in inspector on general level
   //! \param theMenu if Qt implementation, it is QMenu object
-  Standard_EXPORT virtual void FillActionsMenu(void* theMenu) Standard_OVERRIDE { myWindow->FillActionsMenu (theMenu); }
+  virtual void FillActionsMenu(void* theMenu) Standard_OVERRIDE { myWindow->FillActionsMenu (theMenu); }
 
   //! Returns plugin preferences, empty implementation by default
   //! \param theItem container of preference elements
diff --git a/tools/ShapeView/ShapeView_ItemBase.hxx b/tools/ShapeView/ShapeView_ItemBase.hxx
deleted file mode 100644 (file)
index 3e0559c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// Created on: 2017-06-16
-// Created by: Natalia ERMOLAEVA
-// Copyright (c) 2017 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement. 
-
-#ifndef ShapeView_ItemBase_H
-#define ShapeView_ItemBase_H
-
-#include <Standard.hxx>
-#include <TopoDS_Shape.hxx>
-#include <inspector/TreeModel_ItemBase.hxx>
-
-class ShapeView_ItemBase;
-typedef QExplicitlySharedDataPointer<ShapeView_ItemBase> ShapeView_ItemBasePtr;
-
-//! \class ShapeView_ItemBase
-// \brief Declaration of the tree model base item.
-class ShapeView_ItemBase : public TreeModel_ItemBase
-{
-public:
-
-  //! Resets cached values
-  virtual void Reset() Standard_OVERRIDE { TreeModel_ItemBase::Reset(); }
-
-protected:
-
-  //! Initialize the current item. It creates a backup of the specific item information
-  virtual void initItem() const {};
-
-  //! Constructor
-  //! param theParent a parent item
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
-  ShapeView_ItemBase(TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
-  : TreeModel_ItemBase (theParent, theRow, theColumn) {}
-};
-
-#endif
\ No newline at end of file
index 64d1dbe..d9f5cb2 100644 (file)
 #include <inspector/ShapeView_ItemShape.hxx>
 
 // =======================================================================
-// function : GetShape
+// function : Shape
 // purpose :
 // =======================================================================
-const TopoDS_Shape& ShapeView_ItemRoot::GetShape (const int theRowId)
+const TopoDS_Shape& ShapeView_ItemRoot::Shape (const int theRowId)
 {
   NCollection_List<TopoDS_Shape>::Iterator aShapesIt (myShapes);
   for (int aRowId = 0; aShapesIt.More(); aShapesIt.Next(), aRowId++)
index 370ab5b..c05495d 100644 (file)
@@ -17,7 +17,7 @@
 #define ShapeView_ItemRoot_H
 
 #include <NCollection_List.hxx>
-#include <inspector/ShapeView_ItemBase.hxx>
+#include <inspector/TreeModel_ItemBase.hxx>
 #include <Standard.hxx>
 #include <TopoDS_Shape.hxx>
 
@@ -28,7 +28,7 @@ typedef QExplicitlySharedDataPointer<ShapeView_ItemRoot> ShapeView_ItemRootPtr;
 //! Collects shapes that should be visualized in tree view. Shapes are cached and if shapes are not needed,
 //! cache should be cleared using RemoveAllShapes.
 //! Parent is NULL, children are ShapeView_ItemShape items.
-class ShapeView_ItemRoot : public ShapeView_ItemBase
+class ShapeView_ItemRoot : public TreeModel_ItemBase
 {
 public:
 
@@ -37,7 +37,7 @@ public:
     { return ShapeView_ItemRootPtr (new ShapeView_ItemRoot (theParent, theRow, theColumn)); }
 
   //! Destructor
-  virtual ~ShapeView_ItemRoot() Standard_OVERRIDE {};
+  virtual ~ShapeView_ItemRoot() {}
 
   //! Appends new shape
   //! \param theShape a shape instance
@@ -48,11 +48,11 @@ public:
 
   //! Returns shape by the number
   //! \param theRowId an index of the shape in the internal container.
-  Standard_EXPORT const TopoDS_Shape& GetShape (const int theRowId);
+  Standard_EXPORT const TopoDS_Shape& Shape (const int theRowId);
 
 protected:
 
-  //! Return data value for the role.
+  //! Returns data value for the role.
   //! \param theItemRole a value role
   //! \return the value
   virtual QVariant initValue(const int theItemRole) const;
@@ -69,9 +69,9 @@ protected:
 private:
 
   //! Constructor
-  //! param theParent a parent item
+  //! \param theParent a parent item
   ShapeView_ItemRoot(TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
-  : ShapeView_ItemBase (theParent, theRow, theColumn) {}
+  : TreeModel_ItemBase (theParent, theRow, theColumn) {}
 
 private:
 
index 952534b..7a69f45 100644 (file)
 
 #include <inspector/ShapeView_ItemShape.hxx>
 
-#include <Adaptor3d_Curve.hxx>
-#include <BRep_Tool.hxx>
-#include <BRepAdaptor_Curve.hxx>
-
-#include <GCPnts_AbscissaPoint.hxx>
-#include <Geom_Curve.hxx>
-#include <GeomAdaptor_Curve.hxx>
-
 #include <inspector/ShapeView_ItemRoot.hxx>
 #include <inspector/ShapeView_ItemShape.hxx>
+
+#include <inspector/ViewControl_Tools.hxx>
+
+#include <TopAbs.hxx>
 #include <TCollection_AsciiString.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
 #include <TopoDS_Iterator.hxx>
-#include <TopoDS_Vertex.hxx>
+
+#include <TopExp.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
 
 #include <Standard_WarningsDisable.hxx>
 #include <QObject>
 #include <Standard_WarningsRestore.hxx>
 
 // =======================================================================
-// function : ToString
-// purpose :
-// =======================================================================
-QString ToString (const Standard_Boolean& theValue)
-{
-  return theValue ? "1" : "0";
-}
-
-// =======================================================================
-// function : ToString
-// purpose :
-// =======================================================================
-QString ToString (const gp_Pnt& thePoint)
-{
-  return QString ("(%1, %2, %3)").arg (thePoint.X()).arg (thePoint.Y()).arg (thePoint.Z());
-}
-
-// =======================================================================
-// function : ToName
-// purpose :
-// =======================================================================
-QString ToName (const TopAbs_ShapeEnum& theShapeType)
-{
-  Standard_SStream aSStream;
-  TopAbs::Print (theShapeType, aSStream);
-  return QString (aSStream.str().c_str());
-}
-
-// =======================================================================
-// function : ToName
-// purpose :
-// =======================================================================
-QString ToName (const TopAbs_Orientation& theOrientation)
-{
-  Standard_SStream aSStream;
-  TopAbs::Print(theOrientation, aSStream);
-  return QString (aSStream.str().c_str());
-}
-
-// =======================================================================
-// function : ToName
+// function : Shape
 // purpose :
 // =======================================================================
-QString ToName (const GeomAbs_Shape& theType)
+TopoDS_Shape ShapeView_ItemShape::Shape (const int theRowId) const
 {
-  switch (theType)
+  if (myChildShapes.IsEmpty())
   {
-    case GeomAbs_C0: return "GeomAbs_C0";
-    case GeomAbs_G1: return "GeomAbs_G1";
-    case GeomAbs_C1: return "GeomAbs_C1";
-    case GeomAbs_G2: return "GeomAbs_G2";
-    case GeomAbs_C2: return "GeomAbs_C2";
-    case GeomAbs_C3: return "GeomAbs_C3";
-    case GeomAbs_CN: return "GeomAbs_CN";
-    default: break;
-  }
-  return QString();
-}
+    ShapeView_ItemShape* aThis = (ShapeView_ItemShape*)this;
 
-// =======================================================================
-// function : ToOtherInfo
-// purpose :
-// =======================================================================
-void ToOtherInfo (const TopoDS_Shape& theShape, QVariant& theValue, QVariant& theInfo)
-{
-  switch (theShape.ShapeType())
-  {
-    case TopAbs_COMPOUND:
-    case TopAbs_COMPSOLID:
-    case TopAbs_SOLID:
-    case TopAbs_SHELL:
-    case TopAbs_FACE:
-    case TopAbs_WIRE:
-      break;
-    case TopAbs_EDGE:
+    if (myExplodeType != TopAbs_SHAPE)
     {
-      TopoDS_Edge anEdge = TopoDS::Edge(theShape);
-      double aFirst, aLast;
-      Handle(Geom_Curve) aCurve = BRep_Tool::Curve(anEdge, aFirst, aLast);
-
-      GeomAdaptor_Curve aAdaptor(aCurve, aFirst, aLast);
-      gp_Pnt aFirstPnt = aAdaptor.Value(aFirst);
-      gp_Pnt aLastPnt = aAdaptor.Value(aLast);
-
-      BRepAdaptor_Curve aBRepAdaptor = BRepAdaptor_Curve(anEdge);
-      Adaptor3d_Curve* anAdaptor3d = &aBRepAdaptor;
-
-      QStringList aValues, anInfo;
-      aValues.append (QString::number (GCPnts_AbscissaPoint::Length(*anAdaptor3d)));
-      anInfo.append ("Length");
-
-      aValues.append (aCurve->DynamicType()->Name());
-      anInfo.append ("DynamicType");
-
-      aValues.append (ToString (aFirstPnt));
-      anInfo.append (QString ("First" + QString::number (aFirst)));
-
-      aValues.append (ToString (aLastPnt));
-      anInfo.append (QString ("Last" + QString::number (aLast)));
-
-      aValues.append (ToName (aCurve->Continuity()));
-      anInfo.append ("Continuity");
-
-      aValues.append (ToString (aCurve->IsClosed()));
-      anInfo.append ("IsClosed");
-
-      if (aCurve->IsPeriodic()) {
-        aValues.append (QString::number (aCurve->Period()));
-        anInfo.append ("IsPeriodic");
-      }
-      else
+      TopExp::MapShapes(myShape, myExplodeType, aThis->myChildShapes);
+    }
+    else
+    {
+      TopoDS_Iterator aSubShapeIt (myShape);
+      for (int aCurrentIndex = 0; aSubShapeIt.More(); aSubShapeIt.Next(), aCurrentIndex++)
       {
-        aValues.append (ToString (aCurve->IsPeriodic()));
-        anInfo.append ("IsPeriodic");
+        aThis->myChildShapes.Add (aSubShapeIt.Value());
       }
-      theValue = aValues.join (" / ");
-      theInfo = QString ("%1:\n%2").arg (anInfo.join (" / ")).arg (aValues.join ("\n"));
-      break;
     }
-    case TopAbs_SHAPE:
-    default:
-      break;
   }
-}
+  if (myChildShapes.Extent() >= theRowId + 1)
+    return myChildShapes(theRowId + 1);
 
-// =======================================================================
-// function : locationInfo
-// purpose :
-// =======================================================================
-QString locationInfo (const TopLoc_Location& theLocation)
-{
-  QString anInfo;
-
-  gp_Trsf aTrsf = theLocation.Transformation();
-  QStringList aValues, aRowValues;
-  for (int aRowId = 1; aRowId <= 3; aRowId++)
-  {
-    aRowValues.clear();
-    for (int aColumnId = 1; aColumnId <= 4; aColumnId++)
-      aRowValues.append (QString::number (aTrsf.Value(aRowId, aColumnId)));
-    aValues.append (aRowValues.join (","));
-  }
-  anInfo.append (aValues.join ("  "));
-  return anInfo;
-}
-
-// =======================================================================
-// function : GetShape
-// purpose :
-// =======================================================================
-TopoDS_Shape ShapeView_ItemShape::GetShape (const int theRowId) const
-{
-  TopoDS_Iterator aSubShapeIt (myShape);
-  for (int aCurrentIndex = 0; aSubShapeIt.More(); aSubShapeIt.Next(), aCurrentIndex++)
-  {
-    if (aCurrentIndex != theRowId)
-      continue;
-    break;
-  }
-  return aSubShapeIt.Value();
+  return TopoDS_Shape();
 }
 
 // =======================================================================
@@ -205,6 +67,10 @@ TopoDS_Shape ShapeView_ItemShape::GetShape (const int theRowId) const
 // =======================================================================
 QVariant ShapeView_ItemShape::initValue(const int theRole) const
 {
+  QVariant aParentValue = TreeModel_ItemBase::initValue (theRole);
+  if (aParentValue.isValid())
+    return aParentValue;
+
   TopoDS_Shape aShape = getShape();
   if (aShape.IsNull())
     return QVariant();
@@ -214,58 +80,7 @@ QVariant ShapeView_ItemShape::initValue(const int theRole) const
 
   switch (Column())
   {
-    case 0: return ToName (aShape.ShapeType());
-    case 2: return rowCount() > 0 ? QVariant (rowCount()) : QVariant();
-    case 3: return TShapePointer().ToCString();
-    case 4: return ToName(aShape.Orientation());
-    case 5: return locationInfo(aShape.Location());
-    case 6: return ToString (aShape.Checked());
-    case 7: return ToString (aShape.Closed());
-    case 8: return ToString (aShape.Infinite());
-    case 9: return ToString (aShape.Locked());
-    case 10: return ToString (aShape.Modified());
-    case 11: return ToString (aShape.Orientable());
-    case 12:
-    {
-      if (aShape.ShapeType() != TopAbs_VERTEX)
-        return QVariant();
-      TopoDS_Vertex aVertex = TopoDS::Vertex (aShape);
-      gp_Pnt aPoint = BRep_Tool::Pnt (aVertex);
-      return ToString (aPoint);
-    }
-    case 13:
-    case 14:
-    case 15:
-    case 16:
-    case 17:
-    case 18:
-    case 19:
-    {
-      if (aShape.ShapeType() != TopAbs_EDGE)
-        return QVariant();
-
-      TopoDS_Edge anEdge = TopoDS::Edge(aShape);
-      double aFirst, aLast;
-      Handle(Geom_Curve) aCurve = BRep_Tool::Curve(anEdge, aFirst, aLast);
-
-      GeomAdaptor_Curve aAdaptor(aCurve, aFirst, aLast);
-      gp_Pnt aFirstPnt = aAdaptor.Value(aFirst);
-      gp_Pnt aLastPnt = aAdaptor.Value(aLast);
-
-      BRepAdaptor_Curve aBRepAdaptor = BRepAdaptor_Curve(anEdge);
-      Adaptor3d_Curve* anAdaptor3d = &aBRepAdaptor;
-
-      switch (Column())
-      {
-        case 13: return QString::number (GCPnts_AbscissaPoint::Length(*anAdaptor3d));
-        case 14: return aCurve->DynamicType()->Name();
-        case 15: return ToString (aFirstPnt);
-        case 16: return ToString (aLastPnt);
-        case 17: return ToName (aCurve->Continuity());
-        case 18: return ToString (aCurve->IsClosed());
-        case 19: return aCurve->IsPeriodic() ? QString::number (aCurve->Period()) : ToString (aCurve->IsPeriodic());
-      }
-    }
+    case 0: return TopAbs::ShapeTypeToString (aShape.ShapeType());
     default: break;
   }
   return QVariant();
@@ -282,12 +97,34 @@ int ShapeView_ItemShape::initRowCount() const
     return 0;
 
   int aRowsCount = 0;
-  for (TopoDS_Iterator aSubShapeIt(aShape); aSubShapeIt.More(); aSubShapeIt.Next())
-    aRowsCount++;
+  if (myExplodeType != TopAbs_SHAPE)
+  {
+    TopTools_IndexedMapOfShape aSubShapes;
+    TopExp::MapShapes(aShape, myExplodeType, aSubShapes);
+    aRowsCount = aSubShapes.Extent();
+  }
+  else
+  {
+    for (TopoDS_Iterator aSubShapeIt(aShape); aSubShapeIt.More(); aSubShapeIt.Next())
+      aRowsCount++;
+  }
   return aRowsCount;
 }
 
 // =======================================================================
+// function : initStream
+// purpose :
+// =======================================================================
+void ShapeView_ItemShape::initStream (Standard_OStream& theOStream) const
+{
+  TopoDS_Shape aShape = getShape();
+  if (aShape.IsNull())
+    return;
+
+  aShape.DumpJson (theOStream);
+}
+
+// =======================================================================
 // function : createChild
 // purpose :
 // =======================================================================
@@ -304,7 +141,9 @@ void ShapeView_ItemShape::Init()
 {
   ShapeView_ItemRootPtr aRootItem = itemDynamicCast<ShapeView_ItemRoot> (Parent());
   ShapeView_ItemShapePtr aShapeItem = itemDynamicCast<ShapeView_ItemShape> (Parent());
-  myShape = aRootItem ? aRootItem->GetShape (Row()) : aShapeItem->GetShape (Row());
+  myShape = aRootItem ? aRootItem->Shape (Row()) : aShapeItem->Shape (Row());
+
+  TreeModel_ItemBase::Init();
 }
 
 // =======================================================================
@@ -318,38 +157,16 @@ TopoDS_Shape ShapeView_ItemShape::getShape() const
 }
 
 // =======================================================================
-// function : getPointerInfo
-// purpose :
-// =======================================================================
-TCollection_AsciiString ShapeView_ItemShape::getPointerInfo (const Handle(Standard_Transient)& thePointer, const bool isShortInfo)
-{
-  std::ostringstream aPtrStr;
-  aPtrStr << thePointer.operator->();
-  if (!isShortInfo)
-    return aPtrStr.str().c_str();
-
-  TCollection_AsciiString anInfoPtr (aPtrStr.str().c_str());
-  for (int aSymbolId = 1; aSymbolId < anInfoPtr.Length(); aSymbolId++)
-  {
-    if (anInfoPtr.Value(aSymbolId) != '0')
-    {
-      anInfoPtr = anInfoPtr.SubString(aSymbolId, anInfoPtr.Length());
-      anInfoPtr.Prepend("0x");
-      return anInfoPtr;
-    }
-  }
-  return aPtrStr.str().c_str();
-}
-
-// =======================================================================
 // function : Reset
 // purpose :
 // =======================================================================
 void ShapeView_ItemShape::Reset()
 {
   myFileName = QString();
+  myChildShapes.Clear();
+  myShape = TopoDS_Shape();
 
-  ShapeView_ItemBase::Reset();
+  TreeModel_ItemBase::Reset();
 }
 
 // =======================================================================
@@ -362,4 +179,3 @@ void ShapeView_ItemShape::initItem() const
     return;
   const_cast<ShapeView_ItemShape*>(this)->Init();
 }
-
index b040769..b6706d9 100644 (file)
 #ifndef ShapeView_ItemShape_H
 #define ShapeView_ItemShape_H
 
-#include <inspector/ShapeView_ItemBase.hxx>
+#include <inspector/TreeModel_ItemBase.hxx>
+
+#include <TopTools_IndexedMapOfShape.hxx>
+
 #include <Standard.hxx>
 #include <TCollection_AsciiString.hxx>
+#include <TopAbs_ShapeEnum.hxx>
 #include <TopoDS_Shape.hxx>
 
 #include <Standard_WarningsDisable.hxx>
@@ -32,19 +36,26 @@ typedef QExplicitlySharedDataPointer<ShapeView_ItemShape> ShapeView_ItemShapePtr
 //! \class ShapeView_ItemShape
 //! This item is connected to TopoDS_Shape.
 //! Parent is either ShapeView_ItemRoot or ShapeView_ItemShape, children are ShapeView_ItemShape or no children
-class ShapeView_ItemShape : public ShapeView_ItemBase
+class ShapeView_ItemShape : public TreeModel_ItemBase
 {
 public:
 
   //! Creates an item wrapped by a shared pointer
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
   //! \return the pointer to the created item
   static ShapeView_ItemShapePtr CreateItem (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
   { return ShapeView_ItemShapePtr (new ShapeView_ItemShape (theParent, theRow, theColumn)); }
 
   //! Destructor
-  virtual ~ShapeView_ItemShape() Standard_OVERRIDE {};
+  virtual ~ShapeView_ItemShape() {}
+
+  //! Returns explode type of the item
+  TopAbs_ShapeEnum ExplodeType() const { return myExplodeType; }
+
+  //! Sets explore type
+  //! \param theType type of item explode. If TopAbs_SHAPE, no explode, only iteration by shape
+  void SetExplodeType (const TopAbs_ShapeEnum theType) { myExplodeType  = theType; }
 
   //! Returns the current shape
   const TopoDS_Shape& GetItemShape() const { initItem(); return myShape; }
@@ -52,7 +63,7 @@ public:
   //! Returns child(extracted) shape for the current shape by the index
   //! \param theRowId an index of child shape
   //! \returns shape instance or NULL
-  Standard_EXPORT TopoDS_Shape GetShape (const int theRowId) const;
+  Standard_EXPORT TopoDS_Shape Shape (const int theRowId) const;
 
   //! Returns name of BREP file for the shape if exists
   //! \return string valuie
@@ -62,17 +73,13 @@ public:
   //! \return string valuie
   void SetFileName (const QString& theFileName) { myFileName = theFileName; }
 
-  //! Returns TShape pointer info of the current TopoDS Shape
-  //! \return string value
-  TCollection_AsciiString TShapePointer() const { return getPointerInfo (myShape.TShape()); }
-
   //! Inits the item, fills internal containers
   Standard_EXPORT virtual void Init() Standard_OVERRIDE;
 
   //! Resets cached values
   Standard_EXPORT virtual void Reset() Standard_OVERRIDE;
 
-  //! Return data value for the role.
+  //! Returns data value for the role.
   //! \param theRole a value role
   //! \return the value
   Standard_EXPORT virtual QVariant initValue(const int theRole) const;
@@ -80,9 +87,13 @@ public:
   //! \return number of children.
   Standard_EXPORT virtual int initRowCount() const Standard_OVERRIDE;
 
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  Standard_EXPORT virtual void initStream (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
-  //! Initialize the current item. It is empty because Reset() is also empty.
+  //! Initializes the current item. It is empty because Reset() is also empty.
   virtual void initItem() const Standard_OVERRIDE;
 
   //! Creates a child item in the given position.
@@ -99,22 +110,19 @@ protected:
   //! \return shape value
   TopoDS_Shape getShape() const;
 
-  //! Convert pointer to string value
-  //! \param thePointer a pointer
-  //! \param isShortInfo if true, all '0' symbols in the beginning of the pointer are skipped
-  //! \return the string value
-  static TCollection_AsciiString getPointerInfo (const Handle(Standard_Transient)& thePointer, const bool isShortInfo = true);
-
 private:
 
   //! Constructor
-  ShapeView_ItemShape(TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
-  : ShapeView_ItemBase(theParent, theRow, theColumn) {}
+  ShapeView_ItemShape (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+    : TreeModel_ItemBase (theParent, theRow, theColumn), myExplodeType (TopAbs_SHAPE) {}
 
 private:
+  TopAbs_ShapeEnum myExplodeType; //!< type of explore own shape and get children
 
   TopoDS_Shape myShape; //!< current shape
   QString myFileName; //!< BREP file name
+
+  TopTools_IndexedMapOfShape myChildShapes; //!< cached container of child shapes
 };
 
 #endif
index 306326b..2950789 100644 (file)
@@ -135,9 +135,9 @@ private:
 
   QString myDataDir; //!< samples directory
   QString myFileName; //!< result file name
-  QTableView* mySamplesView; //! <view of sample file names
+  QTableView* mySamplesView; //!< view of sample file names
   QLineEdit* mySelectedName; //!< alternative control to open file
-  QToolButton* myFolderApplyOpen; //! button to open file
+  QToolButton* myFolderApplyOpen; //!< button to open file
 };
 
 #endif
index 5a2847d..779fef5 100644 (file)
@@ -28,7 +28,7 @@
 class QObject;
 class QPainter;
 
-//! \class TInspectorEXE_OpenFileItemDelegate
+//! \class ShapeView_OpenFileItemDelegate
 //! Draws large(40x40) icons in cell. The icon background in colored in highlight when mouse is over button
 class ShapeView_OpenFileItemDelegate : public QItemDelegate
 {
@@ -41,7 +41,7 @@ public:
   //! Destructor
   virtual ~ShapeView_OpenFileItemDelegate() {}
 
-  //! Draw an icon in the cell
+  //! Draws an icon in the cell
   //! \param thePainter a painter
   //! \param theOption a paint options
   //! \param theIndex a view index
@@ -53,7 +53,7 @@ private:
   QColor myColor; //!< highlight color
 };
 
-//! \class TInspectorEXE_OpenFileViewModel
+//! \class ShapeView_OpenFileViewModel
 //! Table model that visualizes container of string values (file names)
 //! Table orientation is horizontal, it has 1 row, number of columns equals to number of values
 class ShapeView_OpenFileViewModel : public QAbstractTableModel
@@ -66,7 +66,7 @@ public:
   //! Destructor
   virtual ~ShapeView_OpenFileViewModel() {}
 
-  //! Store values
+  //! Stores values
   //! \param theValues a container of values to fill model
   void Init (const QStringList& theValues);
 
index afa6de4..daea444 100644 (file)
 // commercial license or contractual agreement. 
 
 #include <inspector/ShapeView_Tools.hxx>
+#include <inspector/ShapeView_ItemShape.hxx>
 
-#include <BRep_Builder.hxx>
-#include <BRepTools.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Iterator.hxx>
+
+#include <TopExp.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
 
-#include <AIS_Shape.hxx>
 // =======================================================================
-// function : ReadShape
+// function : IsPossibleToExplode
 // purpose :
 // =======================================================================
-TopoDS_Shape ShapeView_Tools::ReadShape (const TCollection_AsciiString& theFileName)
+Standard_Boolean ShapeView_Tools::IsPossibleToExplode (const TopoDS_Shape& theShape,
+  NCollection_List<TopAbs_ShapeEnum>& theExplodeTypes)
 {
-  TopoDS_Shape aShape;
+  TopAbs_ShapeEnum aShapeType = theShape.ShapeType();
+
+  if (!theExplodeTypes.Contains (aShapeType))
+    theExplodeTypes.Append(aShapeType);
+
+  if (theExplodeTypes.Extent() == TopAbs_SHAPE + 1) // all types are collected, stop
+    return Standard_True;
 
-  BRep_Builder aBuilder;
-  BRepTools::Read (aShape, theFileName.ToCString(), aBuilder);
-  return aShape;
+  TopoDS_Iterator aSubShapeIt (theShape);
+  for (int aCurrentIndex = 0; aSubShapeIt.More(); aSubShapeIt.Next(), aCurrentIndex++)
+  {
+    if (IsPossibleToExplode (aSubShapeIt.Value(), theExplodeTypes))
+      return Standard_True;
+  }
+  return Standard_False;
 }
index a922e42..fd8b4d4 100644 (file)
 
 #include <Standard.hxx>
 
+#include <inspector/TreeModel_ItemBase.hxx>
+
+#include <NCollection_List.hxx>
 #include <TCollection_AsciiString.hxx>
 #include <Standard_Transient.hxx>
 #include <TopoDS_Shape.hxx>
 
+#include <inspector/ViewControl_TableModelValues.hxx>
+
+#include <GeomAbs_Shape.hxx>
+#include <Standard_WarningsDisable.hxx>
+#include <QList>
+#include <QVariant>
+#include <Standard_WarningsRestore.hxx>
+
 //! \class ShapeView_Tools
 //! It gives auxiliary methods for TopoDS_Shape manipulation
 class ShapeView_Tools
 {
 public:
 
-  //! Read Shape using BREP reader
-  //! \param theFileName a file name
-  //! \return shape or NULL
-  Standard_EXPORT static TopoDS_Shape ReadShape (const TCollection_AsciiString& theFileName);
+  //! Checks whether it is possible to explode the shape. The search is recursive until all types are collected.
+  //! \param theShape [in] source shape object
+  //! \param theExplodeTypes [out] container of possible shape types to be exploded
+  //! \return true if explode is finished, all types are collected.
+  Standard_EXPORT static Standard_Boolean IsPossibleToExplode(const TopoDS_Shape& theShape,
+    NCollection_List<TopAbs_ShapeEnum>& theExplodeTypes);
+
 };
 
 #endif
index bc29c11..288b20c 100644 (file)
 #include <inspector/ShapeView_ItemRoot.hxx>
 #include <inspector/ShapeView_ItemShape.hxx>
 
-const int COLUMN_NAME_WIDTH = 190;
-const int COLUMN_SIZE_WIDTH = 30;
-const int COLUMN_POINTER_WIDTH = 70;
-const int COLUMN_SHAPE_TYPE_WIDTH = 75;
-
-const int COLUMN_ORIENTATION_WIDTH = 70;
-const int COLUMN_LOCATION_WIDTH = 120;
-
 // =======================================================================
 // function : Constructor
 // purpose :
@@ -34,40 +26,15 @@ const int COLUMN_LOCATION_WIDTH = 120;
 ShapeView_TreeModel::ShapeView_TreeModel (QObject* theParent)
 : TreeModel_ModelBase (theParent)
 {
-  SetHeaderItem (0, TreeModel_HeaderSection ("Name", COLUMN_NAME_WIDTH));
-  // column 1 is reserved for visiblity state
-  SetHeaderItem (2, TreeModel_HeaderSection ("Size", COLUMN_SIZE_WIDTH));
-  SetHeaderItem (3, TreeModel_HeaderSection ("Pointer", COLUMN_POINTER_WIDTH));
-  SetHeaderItem (4, TreeModel_HeaderSection ("Orientation", COLUMN_ORIENTATION_WIDTH));
-  SetHeaderItem (5, TreeModel_HeaderSection ("Location", COLUMN_LOCATION_WIDTH));
-
-  SetHeaderItem (6, TreeModel_HeaderSection ("Checked", -1, true));
-  SetHeaderItem (7, TreeModel_HeaderSection ("Closed", -1, true));
-  SetHeaderItem (8, TreeModel_HeaderSection ("Infinite", -1, true));
-  SetHeaderItem (9, TreeModel_HeaderSection ("Locked", -1, true));
-  SetHeaderItem (10, TreeModel_HeaderSection ("Modified", -1, true));
-  SetHeaderItem (11, TreeModel_HeaderSection ("Orientable", -1, true));
-
-  SetHeaderItem (12, TreeModel_HeaderSection ("VERTEX: (X, Y, Z)", -1, true));
-
-  SetHeaderItem (13, TreeModel_HeaderSection ("EDGE: Length", -1, true));
-  SetHeaderItem (14, TreeModel_HeaderSection ("DynamicType", -1, true));
-  SetHeaderItem (15, TreeModel_HeaderSection ("First", -1, true));
-  SetHeaderItem (16, TreeModel_HeaderSection ("Last", -1, true));
-  SetHeaderItem (17, TreeModel_HeaderSection ("Continuity", -1, true));
-  SetHeaderItem (18, TreeModel_HeaderSection ("IsClosed", -1, true));
-  SetHeaderItem (19, TreeModel_HeaderSection ("IsPeriodic", -1, true));
 }
 
 // =======================================================================
 // function : createRootItem
 // purpose :
 // =======================================================================
-void ShapeView_TreeModel::createRootItem (const int theColumnId)
+TreeModel_ItemBasePtr ShapeView_TreeModel::createRootItem (const int theColumnId)
 {
-  myRootItems.insert (theColumnId, ShapeView_ItemRoot::CreateItem (TreeModel_ItemBasePtr(), 0, theColumnId));
-  if (theColumnId == 0)
-      m_pRootItem = myRootItems[0];
+  return ShapeView_ItemRoot::CreateItem (TreeModel_ItemBasePtr(), 0, theColumnId);
 }
 
 // =======================================================================
index 7778ad5..81b925b 100644 (file)
@@ -16,7 +16,7 @@
 #ifndef ShapeView_TreeModel_H
 #define ShapeView_TreeModel_H
 
-#include <inspector/ShapeView_ItemBase.hxx>
+#include <inspector/TreeModel_ItemBase.hxx>
 #include <Standard.hxx>
 #include <TopoDS_Shape.hxx>
 #include <inspector/TreeModel_ModelBase.hxx>
@@ -38,21 +38,15 @@ public:
   Standard_EXPORT ShapeView_TreeModel (QObject* theParent);
 
   //! Destructor
-  virtual ~ShapeView_TreeModel() Standard_OVERRIDE {};
+  virtual ~ShapeView_TreeModel() {}
 
-  //! Add shape, append it to the model root item
+  //! Adds shape, append it to the model root item
   //! \param theShape a shape instance
   Standard_EXPORT void AddShape (const TopoDS_Shape& theShape);
 
-  //! Remove all shapes in the model root item
+  //! Removes all shapes in the model root item
   Standard_EXPORT void RemoveAllShapes();
 
-  //! Returns root item by column
-  //! \param theColumn an index of the column
-  //! \return root item instance
-  virtual TreeModel_ItemBasePtr RootItem(const int theColumn) const Standard_OVERRIDE
-  { return myRootItems[theColumn]; }
-
   //! Returns model index of the shape.
   //! \param theShape a shape object
   //! \return the model index
@@ -61,10 +55,8 @@ public:
 protected:
   //! Creates root item
   //! \param theColumnId index of a column
-  virtual void createRootItem (const int theColumnId) Standard_OVERRIDE;
+  Standard_EXPORT virtual TreeModel_ItemBasePtr createRootItem (const int theColumnId) Standard_OVERRIDE;
 
-private:
-  QMap<int, TreeModel_ItemBasePtr> myRootItems; //!< container of root items, for each column own root item
 };
 
 #endif
index 7e7e02f..3b330f7 100644 (file)
 #include <inspector/ShapeView_ItemShape.hxx>
 
 // =======================================================================
+// function : OnClicked
+// purpose :
+// =======================================================================
+void ShapeView_VisibilityState::OnClicked (const QModelIndex& theIndex)
+{
+  processClicked (theIndex);
+  emit itemClicked (theIndex);
+}
+
+// =======================================================================
 // function : SetVisible
 // purpose :
 // =======================================================================
 bool ShapeView_VisibilityState::SetVisible (const QModelIndex& theIndex, const bool theState, const bool toEmitDataChanged)
 {
-  TopoDS_Shape aShape = GetShape (theIndex);
+  TopoDS_Shape aShape = Shape (theIndex);
   if (aShape.IsNull())
     return false;
 
@@ -35,10 +45,10 @@ bool ShapeView_VisibilityState::SetVisible (const QModelIndex& theIndex, const b
 }
 
 // =======================================================================
-// function : GetShape
+// function : Shape
 // purpose :
 // =======================================================================
-TopoDS_Shape ShapeView_VisibilityState::GetShape (const QModelIndex& theIndex) const
+TopoDS_Shape ShapeView_VisibilityState::Shape (const QModelIndex& theIndex) const
 {
   TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (theIndex);
   if (!anItemBase)
index 4d384d6..f38229d 100644 (file)
@@ -28,8 +28,9 @@ class TreeModel_ModelBase;
 
 //! \class ShapeView_VisibilityState
 //! \brief Class provides connection between model and visualization control
-class ShapeView_VisibilityState : public TreeModel_VisibilityState
+class ShapeView_VisibilityState : public QObject, public TreeModel_VisibilityState
 {
+  Q_OBJECT
 public:
   //! Constructor
   ShapeView_VisibilityState (TreeModel_ModelBase* theModel) : TreeModel_VisibilityState (theModel),
@@ -49,7 +50,7 @@ public:
   //! Returns true if visibility of the item can be changed
   //! \param theIndex tree model index
   //! \return boolean value
-  virtual bool CanBeVisible (const QModelIndex& theIndex) const Standard_OVERRIDE { return !GetShape (theIndex).IsNull(); }
+  virtual bool CanBeVisible (const QModelIndex& theIndex) const Standard_OVERRIDE { return !Shape (theIndex).IsNull(); }
 
   //! Sets visibility state
   //! \theIndex tree model index
@@ -60,17 +61,28 @@ public:
 
   //! Returns visibility state value
   virtual bool IsVisible (const QModelIndex& theIndex) const Standard_OVERRIDE
-  { return myDisplayer->IsVisible (GetShape (theIndex), myPresentationType); }
+  { return myDisplayer->IsVisible (Shape (theIndex), myPresentationType); }
+
+public slots:
+  //! Processes the mouse clicked on the index.
+  //! It changes the item visibility if model allows to change it.
+  //! \theIndex tree model index
+  void OnClicked (const QModelIndex& theIndex);
+
+signals:
+  //! Signal after OnClicked is performed
+  //! \theIndex tree model index
+  void itemClicked (const QModelIndex& theIndex);
 
 protected:
   //! Gets shape of the view model by the parameter index if it has a shape
   //! \param theIndex tree model index
   //! \return shape instance
-  TopoDS_Shape GetShape (const QModelIndex& theIndex) const;
+  TopoDS_Shape Shape (const QModelIndex& theIndex) const;
 
 private:
-  View_Displayer* myDisplayer; //! view displayer
-  View_PresentationType myPresentationType; //! presentation type
+  View_Displayer* myDisplayer; //!< view displayer
+  View_PresentationType myPresentationType; //!< presentation type
 };
 
 #endif
index 76eaefa..bfe8d34 100644 (file)
 #include <inspector/ShapeView_TreeModel.hxx>
 #include <inspector/ShapeView_VisibilityState.hxx>
 
+#include <inspector/Convert_Tools.hxx>
+
 #include <inspector/TreeModel_Tools.hxx>
 #include <inspector/TreeModel_ContextMenu.hxx>
 
+#include <inspector/ViewControl_PropertyView.hxx>
 #include <inspector/ViewControl_Tools.hxx>
 #include <inspector/ViewControl_TreeView.hxx>
 
 #include <inspector/View_Displayer.hxx>
 #include <inspector/View_PresentationType.hxx>
-#include <inspector/View_Tools.hxx>
 #include <inspector/View_ToolBar.hxx>
 #include <inspector/View_Widget.hxx>
 #include <inspector/View_Window.hxx>
@@ -83,7 +85,7 @@ const int SHAPEVIEW_DEFAULT_VIEW_HEIGHT = 1000;
 // purpose :
 // =======================================================================
 ShapeView_Window::ShapeView_Window (QWidget* theParent)
-: QObject (theParent), myNextPosition (0)
+: QObject (theParent)
 {
   myMainWindow = new QMainWindow (theParent);
 
@@ -95,28 +97,48 @@ ShapeView_Window::ShapeView_Window (QWidget* theParent)
           this, SLOT (onTreeViewContextMenuRequested (const QPoint&)));
   new TreeModel_ContextMenu (myTreeView);
   ShapeView_TreeModel* aModel = new ShapeView_TreeModel (myTreeView);
+  aModel->InitColumns();
+
   myTreeView->setModel (aModel);
   ShapeView_VisibilityState* aVisibilityState = new ShapeView_VisibilityState (aModel);
   aModel->SetVisibilityState (aVisibilityState);
   TreeModel_Tools::UseVisibilityColumn (myTreeView);
+  QObject::connect (myTreeView, SIGNAL (clicked (const QModelIndex&)), 
+                    aVisibilityState, SLOT (OnClicked(const QModelIndex&)));
+
+  QItemSelectionModel* aSelModel = new QItemSelectionModel (myTreeView->model(), myTreeView);
+  myTreeView->setSelectionModel (aSelModel);
+  connect (aSelModel, SIGNAL (selectionChanged (const QItemSelection&, const QItemSelection&)),
+           this, SLOT (onTreeViewSelectionChanged (const QItemSelection&, const QItemSelection&)));
 
   QModelIndex aParentIndex = myTreeView->model()->index (0, 0);
   myTreeView->setExpanded (aParentIndex, true);
   myMainWindow->setCentralWidget (myTreeView);
 
+  // property view
+  myPropertyView = new ViewControl_PropertyView (myMainWindow,
+    QSize(SHAPEVIEW_DEFAULT_VIEW_WIDTH, SHAPEVIEW_DEFAULT_VIEW_HEIGHT));
+  myPropertyPanelWidget = new QDockWidget (tr ("PropertyPanel"), myMainWindow);
+  myPropertyPanelWidget->setObjectName (myPropertyPanelWidget->windowTitle());
+  myPropertyPanelWidget->setTitleBarWidget (new QWidget(myMainWindow));
+  myPropertyPanelWidget->setWidget (myPropertyView->GetControl());
+  myMainWindow->addDockWidget (Qt::RightDockWidgetArea, myPropertyPanelWidget);
+
   // view
-  myViewWindow = new View_Window (myMainWindow, false);
+  myViewWindow = new View_Window (myMainWindow, NULL, false);
   connect (myViewWindow, SIGNAL(eraseAllPerformed()), this, SLOT(onEraseAllPerformed()));
-  aVisibilityState->SetDisplayer (myViewWindow->GetDisplayer());
+  aVisibilityState->SetDisplayer (myViewWindow->Displayer());
   aVisibilityState->SetPresentationType (View_PresentationType_Main);
-  myViewWindow->GetView()->SetPredefinedSize (SHAPEVIEW_DEFAULT_VIEW_WIDTH, SHAPEVIEW_DEFAULT_VIEW_HEIGHT);
+  myViewWindow->ViewWidget()->SetPredefinedSize (SHAPEVIEW_DEFAULT_VIEW_WIDTH, SHAPEVIEW_DEFAULT_VIEW_HEIGHT);
 
   QDockWidget* aViewDockWidget = new QDockWidget (tr ("View"), myMainWindow);
   aViewDockWidget->setObjectName (aViewDockWidget->windowTitle());
   aViewDockWidget->setWidget (myViewWindow);
-  aViewDockWidget->setTitleBarWidget (myViewWindow->GetViewToolBar()->GetControl());
+  aViewDockWidget->setTitleBarWidget (myViewWindow->ViewToolBar()->GetControl());
   myMainWindow->addDockWidget (Qt::RightDockWidgetArea, aViewDockWidget);
 
+  myMainWindow->splitDockWidget(myPropertyPanelWidget, aViewDockWidget, Qt::Vertical);
+
   myMainWindow->resize (DEFAULT_SHAPE_VIEW_WIDTH, DEFAULT_SHAPE_VIEW_HEIGHT);
   myMainWindow->move (DEFAULT_SHAPE_VIEW_POSITION_X, DEFAULT_SHAPE_VIEW_POSITION_Y);
 }
@@ -127,7 +149,6 @@ ShapeView_Window::ShapeView_Window (QWidget* theParent)
 // =======================================================================
 ShapeView_Window::~ShapeView_Window()
 {
-  onCloseAllBREPViews();
 }
 
 // =======================================================================
@@ -171,7 +192,7 @@ void ShapeView_Window::GetPreferences (TInspectorAPI_PreferencesDataMap& theItem
 
   QMap<QString, QString> anItems;
   TreeModel_Tools::SaveState (myTreeView, anItems);
-  View_Tools::SaveState(myViewWindow, anItems);
+  View_Window::SaveState(myViewWindow, anItems);
   for (QMap<QString, QString>::const_iterator anItemsIt = anItems.begin(); anItemsIt != anItems.end(); anItemsIt++)
     theItem.Bind (anItemsIt.key().toStdString().c_str(), anItemsIt.value().toStdString().c_str());
 }
@@ -194,7 +215,7 @@ void ShapeView_Window::SetPreferences (const TInspectorAPI_PreferencesDataMap& t
       myMainWindow->restoreState (TreeModel_Tools::ToByteArray (anItemIt.Value().ToCString()));
     else if (TreeModel_Tools::RestoreState (myTreeView, anItemIt.Key().ToCString(), anItemIt.Value().ToCString()))
       continue;
-    else if (View_Tools::RestoreState(myViewWindow, anItemIt.Key().ToCString(), anItemIt.Value().ToCString()))
+    else if (View_Window::RestoreState(myViewWindow, anItemIt.Key().ToCString(), anItemIt.Value().ToCString()))
       continue;
   }
 }
@@ -302,7 +323,7 @@ void ShapeView_Window::Init (NCollection_List<Handle(Standard_Transient)>& thePa
 // =======================================================================
 void ShapeView_Window::OpenFile(const TCollection_AsciiString& theFileName)
 {
-  TopoDS_Shape aShape = ShapeView_Tools::ReadShape (theFileName);
+  TopoDS_Shape aShape = Convert_Tools::ReadShape (theFileName);
   if (!aShape.IsNull())
     addShape(aShape);
 }
@@ -315,8 +336,6 @@ void ShapeView_Window::RemoveAllShapes()
 {
   ShapeView_TreeModel* aModel = dynamic_cast<ShapeView_TreeModel*> (myTreeView->model());
   aModel->RemoveAllShapes();
-
-  onCloseAllBREPViews();
 }
 
 // =======================================================================
@@ -351,10 +370,31 @@ void ShapeView_Window::onTreeViewContextMenuRequested (const QPoint& thePosition
     aMenu->addAction (ViewControl_Tools::CreateAction ("Remove all shape items", SLOT (onClearView()), myMainWindow, this));
   }
   else {
-    if (!GetTemporaryDirectory().IsEmpty())
-      aMenu->addAction (ViewControl_Tools::CreateAction ("BREP view", SLOT (onBREPView()), myMainWindow, this));
-    aMenu->addAction (ViewControl_Tools::CreateAction ("Close All BREP views", SLOT (onCloseAllBREPViews()), myMainWindow, this));
-    aMenu->addAction (ViewControl_Tools::CreateAction ("BREP directory", SLOT (onBREPDirectory()), myMainWindow, this));
+    aMenu->addAction (ViewControl_Tools::CreateAction ("Export to BREP", SLOT (onExportToBREP()), myMainWindow, this));
+    ShapeView_ItemShapePtr aShapeItem = itemDynamicCast<ShapeView_ItemShape>(anItemBase);
+    const TopoDS_Shape& aShape = aShapeItem->GetItemShape();
+    TopAbs_ShapeEnum anExplodeType = aShapeItem->ExplodeType();
+    NCollection_List<TopAbs_ShapeEnum> anExplodeTypes;
+    ShapeView_Tools::IsPossibleToExplode (aShape, anExplodeTypes);
+    if (anExplodeTypes.Size() > 0)
+    {
+      QMenu* anExplodeMenu = aMenu->addMenu ("Explode");
+      for (NCollection_List<TopAbs_ShapeEnum>::Iterator anExpIterator (anExplodeTypes); anExpIterator.More();
+        anExpIterator.Next())
+      {
+        TopAbs_ShapeEnum aType = anExpIterator.Value();
+        QAction* anAction = ViewControl_Tools::CreateAction (TopAbs::ShapeTypeToString (aType), SLOT (onExplode()), myMainWindow, this);
+        anExplodeMenu->addAction (anAction);
+        if (anExplodeType == aType)
+        {
+          anAction->setCheckable (true);
+          anAction->setChecked (true);
+        }
+      }
+      QAction* anAction = ViewControl_Tools::CreateAction ("NONE", SLOT (onExplode()), myMainWindow, this);
+      anExplodeMenu->addSeparator();
+      anExplodeMenu->addAction (anAction);
+    }
   }
 
   QPoint aPoint = myTreeView->mapToGlobal (thePosition);
@@ -362,6 +402,21 @@ void ShapeView_Window::onTreeViewContextMenuRequested (const QPoint& thePosition
 }
 
 // =======================================================================
+// function : onTreeViewSelectionChanged
+// purpose :
+// =======================================================================
+void ShapeView_Window::onTreeViewSelectionChanged (const QItemSelection&,
+                                                   const QItemSelection&)
+{
+  QApplication::setOverrideCursor (Qt::WaitCursor);
+
+  if (myPropertyPanelWidget->toggleViewAction()->isChecked())
+    myPropertyView->Init (ViewControl_Tools::CreateTableModelValues (myTreeView->selectionModel()));
+
+  QApplication::restoreOverrideCursor();
+}
+
+// =======================================================================
 // function : onEraseAllPerformed
 // purpose :
 // =======================================================================
@@ -376,17 +431,43 @@ void ShapeView_Window::onEraseAllPerformed()
 }
 
 // =======================================================================
-// function : onBREPDirectory
+// function : onExplode
 // purpose :
 // =======================================================================
-void ShapeView_Window::onBREPDirectory()
+void ShapeView_Window::onExplode()
 {
-  QString aFilter (tr ("BREP file (*.brep*)"));
-  QString aSelectedFilter;
-  QString aFileName = QFileDialog::getOpenFileName (0, tr ("Export shape to BREP file"),
-                                                    GetTemporaryDirectory().ToCString(), aSelectedFilter);
-  if (!aFileName.isEmpty())
-    viewFile (aFileName);
+  QItemSelectionModel* aModel = myTreeView->selectionModel();
+  if (!aModel)
+    return;
+
+  QModelIndex anIndex = TreeModel_ModelBase::SingleSelected(aModel->selectedIndexes(), 0);
+  TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex(anIndex);
+  if (!anItemBase)
+    return;
+
+  ShapeView_ItemShapePtr aShapeItem = itemDynamicCast<ShapeView_ItemShape>(anItemBase);
+  if (!aShapeItem)
+    return;
+
+  QAction* anAction = (QAction*)sender();
+  if (!anAction)
+    return;
+
+  QApplication::setOverrideCursor (Qt::WaitCursor);
+  TopAbs_ShapeEnum aShapeType;
+  if (anAction->text() == "NONE")
+    aShapeType = TopAbs_SHAPE;
+  else
+    aShapeType = TopAbs::ShapeTypeFromString(anAction->text().toStdString().c_str());
+
+  myViewWindow->Displayer()->EraseAllPresentations();
+  aShapeItem->SetExplodeType(aShapeType);
+
+  //anItemBase->Parent()->Reset(); - TODO (update only modified sub-tree)
+  ShapeView_TreeModel* aTreeModel = dynamic_cast<ShapeView_TreeModel*> (myTreeView->model());
+  aTreeModel->Reset();
+  aTreeModel->EmitLayoutChanged();
+  QApplication::restoreOverrideCursor();
 }
 
 // =======================================================================
@@ -399,18 +480,23 @@ void ShapeView_Window::onLoadFile()
 
   QString aFileName = ShapeView_OpenFileDialog::OpenFile(0, aDataDirName);
   aFileName = QDir().toNativeSeparators (aFileName);
-  if (!aFileName.isEmpty())
-    onOpenFile(aFileName);
+  if (aFileName.isEmpty())
+    return;
+
+  QApplication::setOverrideCursor (Qt::WaitCursor);
+  onOpenFile(aFileName);
+  QApplication::restoreOverrideCursor();
 }
 
 // =======================================================================
-// function : onBREPView
+// function : onExportToBREP
 // purpose :
 // =======================================================================
-void ShapeView_Window::onBREPView()
+void ShapeView_Window::onExportToBREP()
 {
-  if (GetTemporaryDirectory().IsEmpty())
-    return;
+  QString aFilter (tr ("Boundary representation file (*.brep *)"));
+  QString aSelectedFilter;
+  QString aFileName = QFileDialog::getSaveFileName (0, tr ("Export shape to file"), QString(), aFilter, &aSelectedFilter);
 
   QItemSelectionModel* aModel = myTreeView->selectionModel();
   if (!aModel)
@@ -429,107 +515,9 @@ void ShapeView_Window::onBREPView()
   if (!anItem)
     return;
 
-  QString aFileName = anItem->GetFileName();
-  QDir aDir;
-  if (aFileName.isEmpty() || !aDir.exists (aFileName))
-  {
-    TCollection_AsciiString aFileNameIndiced = GetTemporaryDirectory() + TCollection_AsciiString ("\\") +
-                                               getNextTmpName (anItem->TShapePointer());
-    const TopoDS_Shape& aShape = anItem->GetItemShape();
-    BRepTools::Write (aShape, aFileNameIndiced.ToCString());
-    anItem->SetFileName (aFileNameIndiced.ToCString());
-    aFileName = aFileNameIndiced.ToCString();
-  }
-  viewFile (aFileName);
-}
-
-// =======================================================================
-// function : onCloseAllBREPViews
-// purpose :
-// =======================================================================
-void ShapeView_Window::onCloseAllBREPViews()
-{
-  removeBREPFiles();
-
-  for (int aViewId = myBREPViews.size()-1; aViewId >= 0; aViewId--)
-    delete myBREPViews[aViewId];
-
-  myBREPViews.clear();
-}
-
-// =======================================================================
-// function : onEditorDestroyed
-// purpose :
-// =======================================================================
-void ShapeView_Window::onEditorDestroyed(QObject* theObject)
-{
-  QWidget* aWidget = dynamic_cast<QWidget*> (theObject);
-
-  for (int aViewId = myBREPViews.size()-1; aViewId >= 0; aViewId--)
-  {
-    if (myBREPViews[aViewId] == aWidget)
-      myBREPViews.removeAll(aWidget);
-  }
-}
-
-// =======================================================================
-// function : viewFile
-// purpose :
-// =======================================================================
-void ShapeView_Window::viewFile (const QString& theFileName)
-{
-  QApplication::setOverrideCursor (Qt::WaitCursor);
-  QString aFileText;
-  QFile aFile (theFileName);
-  if (aFile.open (QIODevice::ReadOnly | QIODevice::Text))
-  {
-    QTextStream aStream(&aFile);
-    QString aLine = aStream.readLine();
-    while (!aLine.isNull())
-    {
-      aLine = aStream.readLine();
-      aFileText.append (aLine + QString ("\n"));
-    }
-    if (!aFileText.isEmpty())
-    {
-      QPlainTextEdit* anEditor = new QPlainTextEdit (0);
-      anEditor->setAttribute (Qt::WA_DeleteOnClose, true);
-      connect (anEditor, SIGNAL (destroyed(QObject*)), this, SLOT (onEditorDestroyed(QObject*)));
-      anEditor->setPlainText (aFileText);
-      anEditor->resize (DEFAULT_TEXT_VIEW_WIDTH, DEFAULT_TEXT_VIEW_HEIGHT);
-      anEditor->move (DEFAULT_TEXT_VIEW_POSITION_X + myNextPosition, DEFAULT_TEXT_VIEW_POSITION_Y);
-      myNextPosition += DEFAULT_TEXT_VIEW_DELTA;
-      anEditor->show();
-      myBREPViews.append (anEditor);
-    }
-  }
-  QApplication::restoreOverrideCursor();
-}
-
-// =======================================================================
-// function : removeBREPFiles
-// purpose :
-// =======================================================================
-void ShapeView_Window::removeBREPFiles()
-{
-  QDir aDir (GetTemporaryDirectory().ToCString());
-
-  QStringList anEntries = aDir.entryList();
-  QString aPrefix(viewBREPPrefix().ToCString());
-  for (int anEntryId = 0, aSize = anEntries.size(); anEntryId < aSize; anEntryId++)
-  {
-    if (anEntries[anEntryId].contains (aPrefix))
-      aDir.remove (anEntries[anEntryId]);
-  }
-}
-
-// =======================================================================
-// function : getNextTmpName
-// purpose :
-// =======================================================================
-TCollection_AsciiString ShapeView_Window::getNextTmpName (const TCollection_AsciiString& thePointerInfo)
-{
-  TCollection_AsciiString aTmpName(viewBREPPrefix());
-  aTmpName += thePointerInfo;
-  return aTmpName;
+  TCollection_AsciiString aFileNameIndiced = aFileName.toStdString().c_str();
+  const TopoDS_Shape& aShape = anItem->GetItemShape();
+  BRepTools::Write (aShape, aFileNameIndiced.ToCString());
+  anItem->SetFileName (aFileNameIndiced.ToCString());
+  aFileName = aFileNameIndiced.ToCString();
 }
index 39274f8..9501193 100644 (file)
 
 class View_Window;
 
+class ViewControl_PropertyView;
+
 class QAction;
+class QDockWidget;
 class QMainWindow;
 class QWidget;
 
@@ -59,7 +62,7 @@ public:
   //! \param theParameters a parameters container
   void SetParameters (const Handle(TInspectorAPI_PluginParameters)& theParameters) { myParameters = theParameters; }
 
-  //! Provide container for actions available in inspector on general level
+  //! Provides container for actions available in inspector on general level
   //! \param theMenu if Qt implementation, it is QMenu object
   Standard_EXPORT virtual void FillActionsMenu (void* theMenu);
 
@@ -80,9 +83,6 @@ public:
   //! Returns current tree view
   QTreeView* GetTreeView() const { return myTreeView; }
 
-  //! Returns path to temporary directory
-  TCollection_AsciiString GetTemporaryDirectory() const { return myParameters->GetTemporaryDirectory(); }
-
   //! Removes all shapes in tree view model, remove all stored BREP files
   Standard_EXPORT void RemoveAllShapes();
 
@@ -98,7 +98,7 @@ private:
   //! \param theParameters a parameters container
   void Init (NCollection_List<Handle(Standard_Transient)>& theParameters);
 
-  //! Read Shape from the file name, add Shape into tree view
+  //! Reads Shape from the file name, add Shape into tree view
   //! \param theFileName BREP file name
   void OpenFile (const TCollection_AsciiString& theFileName);
 
@@ -108,64 +108,47 @@ protected slots:
   //! \param thePosition a clicked point
   void onTreeViewContextMenuRequested (const QPoint& thePosition);
 
+  //! Processes selection in tree view: make presentation or owner selected in the context if corresponding
+  //! check box is checked
+  //! \param theSelected a selected items
+  //! \param theDeselected a deselected items
+  void onTreeViewSelectionChanged (const QItemSelection& theSelected, const QItemSelection& theDeselected);
+
   //! Updates visibility states by erase all in context
   void onEraseAllPerformed();
 
-  //! Exports shape to BREP file and view result file
-  void onBREPDirectory();
+  //! Sets the shape item exploded
+  void onExplode();
 
   //! Removes all shapes in tree view
   void onClearView() { RemoveAllShapes(); }
 
-  //! Load BREP file and updates tree model to have shape of the file
+  //! Loads BREP file and updates tree model to have shape of the file
   void onLoadFile();
 
-  //! View BREP files of selected items if exist
-  void onBREPView();
-
-  //! Remove BREP views, close views
-  void onCloseAllBREPViews();
-
-  //! Remove all BREP Viewse excepting active
-  void onEditorDestroyed (QObject* theObject);
+  //! Views BREP files of selected items if exist
+  void onExportToBREP();
 
   //! Convers file name to Ascii String and perform opeging file
   //! \param theFileName a file name to be opened
   void onOpenFile(const QString& theFileName) { OpenFile (TCollection_AsciiString (theFileName.toUtf8().data())); }
 
 protected:
-
-  //! Views file name content in a text editor. It creates new Qt free control with content.
-  //! \param theFileName a file name
-  void viewFile (const QString& theFileName);
-
-  //! Removes all BREP files in tmp directory
-  void removeBREPFiles();
-
   //! Creates new action and connect it to the given slot
   //! \param theText an action text
   //! \param theSlot a listener method
   QAction* createAction (const QString& theText, const char* theSlot);
 
-  //! Key that uses to generate BREP file name
-  //! \return string value
-  static TCollection_AsciiString viewBREPPrefix() { return "ShapeView_Window"; }
-
-  //! Returns newxt temporary name using BREPPrefix and pointer information
-  //! \param thePointerInfo a pointer value
-  //! \return string value
-  TCollection_AsciiString getNextTmpName (const TCollection_AsciiString& thePointerInfo);
-
 private:
 
   QMainWindow* myMainWindow; //!< main control, parent for all ShapeView controls
 
+  QDockWidget* myPropertyPanelWidget; //!< property pane dockable widget
+  ViewControl_PropertyView* myPropertyView; //!< property control to display model item values if exist
+
   View_Window* myViewWindow; //!< OCC 3d view to visualize presentations
   QTreeView* myTreeView; //!< tree view visualized shapes
 
-  int myNextPosition; //!< delta of moving control of view BREP file
-
-  QList<QWidget*> myBREPViews; //!< list of view BREP file controls
   Handle(TInspectorAPI_PluginParameters) myParameters; //!< plugins parameters container
 };
 
index 21dba46..471fd38 100644 (file)
@@ -1,6 +1,12 @@
 TInspector.qrc
 TInspector_Communicator.cxx
 TInspector_Communicator.hxx
+TInspector_OpenButton.cxx
+TInspector_OpenButton.hxx
+TInspector_OpenFileDialog.cxx
+TInspector_OpenFileDialog.hxx
+TInspector_OpenFileViewModel.cxx
+TInspector_OpenFileViewModel.hxx
 TInspector_PluginParameters.cxx
 TInspector_PluginParameters.hxx
 TInspector_Preferences.cxx
index 8fbf4bb..439185f 100644 (file)
@@ -1,6 +1,7 @@
 <!DOCTYPE RCC><RCC version="1.0">
     <qresource>
-        <file>icons/item_algo_folder.png</file>
-        <file>icons/plugin_actions.png</file>
+        <file alias="folder_open.png">icons/folder_open.png</file>
+        <file alias="folder_import.png">icons/folder_import.png</file>
+        <file alias="plugin_actions.png">icons/plugin_actions.png</file>
     </qresource>
 </RCC>
index bd5fbc7..f2d8633 100644 (file)
@@ -64,13 +64,13 @@ public:
              const Standard_Boolean theAppend = Standard_False)
   { myWindow->Init (thePluginName, theParameters, theAppend); }
 
-  //! UpdateContent for the TInspector window
+  //! Updates content for the TInspector window
   void UpdateContent() { myWindow->UpdateContent(); }
 
-  //! SetOpenButton for the TInspector window
+  //! Sets open button for the TInspector window
   void SetOpenButton (QPushButton* theButton) { myWindow->SetOpenButton (theButton); }
 
-  //! OpenFile in TInspector window
+  //! Opens file in TInspector window
   void OpenFile (const TCollection_AsciiString& thePluginName, const TCollection_AsciiString& theFileName)
   { myWindow->OpenFile (thePluginName, theFileName); }
 
@@ -78,14 +78,13 @@ public:
   //! \param thePluginName a name of the plugin
   void Activate (const TCollection_AsciiString& thePluginName) { myWindow->ActivateTool (thePluginName); }
 
-  //! Set item selected in the active plugin
+  //! Sets item selected in the active plugin
   //! \param theItemName a containerr of name of items in plugin that should become selected
   void SetSelected (const NCollection_List<TCollection_AsciiString>& theItemNames) { myWindow->SetSelected (theItemNames); }
 
   //! Sets objects to be selected in the plugin
   //! \param theObjects an objects
-  Standard_EXPORT void SetSelected (const NCollection_List<Handle(Standard_Transient)>& theObjects)
-    { myWindow->SetSelected (theObjects); }
+  void SetSelected (const NCollection_List<Handle(Standard_Transient)>& theObjects) { myWindow->SetSelected (theObjects); }
 
   //! Sets path to a directory for temporary plugin files
   //! \param thePath a path
@@ -95,11 +94,11 @@ public:
   //! \return path
   TCollection_AsciiString GetTemporaryDirectory() const { return myWindow->GetTemporaryDirectory(); }
 
-  //! Change window visibility
+  //! Changes window visibility
   //! \param theVisible boolean state
   Standard_EXPORT virtual void SetVisible (const bool theVisible);
 
-  //! Change window position
+  //! Changes window position
   //! \param theX X pixel position of top left corner of the window
   //! \param theY Y pixel position
   Standard_EXPORT virtual void Move (const int theXPosition, const int theYPosition);
diff --git a/tools/TInspector/TInspector_OpenButton.cxx b/tools/TInspector/TInspector_OpenButton.cxx
new file mode 100644 (file)
index 0000000..6898f2a
--- /dev/null
@@ -0,0 +1,96 @@
+// Created on: 2017-06-16
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2017 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#include <inspector/TInspector_OpenButton.hxx>
+
+#include <inspector/TInspector_Communicator.hxx>
+#include <inspector/TInspector_OpenFileDialog.hxx>
+
+#include <Standard_WarningsDisable.hxx>
+#include <QApplication>
+#include <QDir>
+#include <QPushButton>
+#include <Standard_WarningsRestore.hxx>
+
+const int RECENT_FILES_CACHE_SIZE = 10;
+
+// =======================================================================
+// function : Constructor
+// purpose :
+// =======================================================================
+TInspector_OpenButton::TInspector_OpenButton (QObject* theParent)
+ : QObject (theParent), myStartButton (0)
+{
+}
+
+// =======================================================================
+// function : StartButton
+// purpose :
+// =======================================================================
+QPushButton* TInspector_OpenButton::StartButton()
+{
+  if (!myStartButton)
+  {
+    myStartButton = new QPushButton();
+    myStartButton->setIcon (QIcon (":folder_open.png"));
+    connect (myStartButton, SIGNAL (clicked()), this, SLOT (onStartButtonClicked()));
+  }
+  return myStartButton;
+}
+
+// =======================================================================
+// function : onStartButtonClicked
+// purpose :
+// =======================================================================
+void TInspector_OpenButton::onStartButtonClicked()
+{
+  QPushButton* aButton = (QPushButton*)sender();
+  TCollection_AsciiString aPluginName (aButton->objectName().toStdString().c_str());
+  if (aPluginName.IsEmpty())
+    return;
+  
+  QStringList aPluginRecentlyOpenedFiles;
+  if (myRecentlyOpenedFiles.contains(aPluginName))
+  {
+    QStringList aFileNames = myRecentlyOpenedFiles[aPluginName];
+    for (int i = 0; i < aFileNames.size(); i++)
+    {
+      QFileInfo aFileInfo (aFileNames[i]);
+      if (aFileInfo.exists() && aFileInfo.isFile())
+        aPluginRecentlyOpenedFiles.append(aFileInfo.absoluteFilePath());
+    }
+  }
+
+  QString aFileName = TInspector_OpenFileDialog::OpenFile (0, aPluginRecentlyOpenedFiles);
+  aFileName = QDir().toNativeSeparators (aFileName);
+  if (!aFileName.isEmpty()) {
+    QApplication::setOverrideCursor (Qt::WaitCursor);
+    TInspector_OpenFileDialog::Communicator()->OpenFile (aPluginName, TCollection_AsciiString (aFileName.toUtf8().data()));
+
+    QFileInfo aFileInfo (aFileName);
+    if (!aPluginRecentlyOpenedFiles.contains (aFileInfo.absoluteFilePath()))
+    {
+      myRecentlyOpenedFiles[aPluginName].append (aFileInfo.absoluteFilePath());
+      for (int i = 0; i < myRecentlyOpenedFiles[aPluginName].size() - RECENT_FILES_CACHE_SIZE; i++)
+        myRecentlyOpenedFiles[aPluginName].removeFirst();
+      TInspector_OpenFileDialog::SetPluginRecentlyOpenedFiles (aPluginName,
+        TInspector_OpenFileDialog::Communicator(), myRecentlyOpenedFiles[aPluginName]);
+
+      TInspector_OpenFileDialog::Communicator()->GetPluginParameters()->StorePreferences();
+    }
+
+    QApplication::restoreOverrideCursor();
+  }
+}
diff --git a/tools/TInspector/TInspector_OpenButton.hxx b/tools/TInspector/TInspector_OpenButton.hxx
new file mode 100644 (file)
index 0000000..d7caaec
--- /dev/null
@@ -0,0 +1,65 @@
+// Created on: 2017-06-16
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2017 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#ifndef TInspectorEXE_OpenButton_H
+#define TInspectorEXE_OpenButton_H
+
+#include <TCollection_AsciiString.hxx>
+
+#include <Standard_WarningsDisable.hxx>
+#include <QObject>
+#include <QMap>
+#include <QStringList>
+#include <Standard_WarningsRestore.hxx>
+
+class QPushButton;
+
+//! \class TInspector_OpenButton
+//! Class that contains push button and the button processing. It obtains a file name from the default or current
+//! directory and gives the name into TInspector communicator
+//! Object name of the button is the name of the plugin to get the default directory, or the current directory is used.
+class TInspector_OpenButton : public QObject
+{
+  Q_OBJECT
+
+public:
+
+  //! Constructor
+  Standard_EXPORT TInspector_OpenButton (QObject* theParent);
+
+  //! Destructor
+  virtual ~TInspector_OpenButton() {}
+
+  //! Returns the start button, if this is the first call, it creates the button and connect it to the slot
+  Standard_EXPORT QPushButton* StartButton();
+
+  //! Sets the default directory of plugin.
+  void SetPluginRecentlyOpenedFiles (const TCollection_AsciiString& thePluginName,
+                                     const QStringList& theRecentlyOpenedFiles)
+  { myRecentlyOpenedFiles[thePluginName] = theRecentlyOpenedFiles; }
+
+private slots:
+
+  //! Processes the button click, open default/current directory to select open file, calls OpenFile of communicator
+  void onStartButtonClicked();
+
+private:
+
+  QPushButton* myStartButton; //!< processed button
+  //!< plugins recently opened files
+  QMap<TCollection_AsciiString, QStringList> myRecentlyOpenedFiles;
+};
+
+#endif
 // Alternatively, this file may be used under the terms of Open CASCADE
 // commercial license or contractual agreement. 
 
-#include <inspector/TInspectorEXE_OpenFileDialog.hxx>
-#include <inspector/TInspectorEXE_OpenFileViewModel.hxx>
+#include <inspector/TInspector_OpenFileDialog.hxx>
+
+#include <inspector/TInspector_OpenButton.hxx>
+#include <inspector/TInspector_OpenFileViewModel.hxx>
 
 #include <inspector/TInspector_Communicator.hxx>
 
@@ -52,66 +54,6 @@ const int RECENT_FILES_CACHE_SIZE = 10;
 TInspector_Communicator* MyCommunicator;
 
 // =======================================================================
-// function : StartButton
-// purpose :
-// =======================================================================
-QPushButton* TInspectorEXE_OpenButton::StartButton()
-{
-  if (!myStartButton)
-  {
-    myStartButton = new QPushButton();
-    myStartButton->setIcon (QIcon (":folder_open.png"));
-    connect (myStartButton, SIGNAL (clicked()), this, SLOT (onStartButtonClicked()));
-  }
-  return myStartButton;
-}
-
-// =======================================================================
-// function : onStartButtonClicked
-// purpose :
-// =======================================================================
-void TInspectorEXE_OpenButton::onStartButtonClicked()
-{
-  QPushButton* aButton = (QPushButton*)sender();
-  TCollection_AsciiString aPluginName (aButton->objectName().toStdString().c_str());
-  if (aPluginName.IsEmpty())
-    return;
-  
-  QStringList aPluginRecentlyOpenedFiles;
-  if (myRecentlyOpenedFiles.contains(aPluginName))
-  {
-    QStringList aFileNames = myRecentlyOpenedFiles[aPluginName];
-    for (int i = 0; i < aFileNames.size(); i++)
-    {
-      QFileInfo aFileInfo (aFileNames[i]);
-      if (aFileInfo.exists() && aFileInfo.isFile())
-        aPluginRecentlyOpenedFiles.append(aFileInfo.absoluteFilePath());
-    }
-  }
-
-  QString aFileName = TInspectorEXE_OpenFileDialog::OpenFile (0, aPluginRecentlyOpenedFiles);
-  aFileName = QDir().toNativeSeparators (aFileName);
-  if (!aFileName.isEmpty()) {
-    QApplication::setOverrideCursor (Qt::WaitCursor);
-    TInspectorEXE_OpenFileDialog::Communicator()->OpenFile (aPluginName, TCollection_AsciiString (aFileName.toUtf8().data()));
-
-    QFileInfo aFileInfo (aFileName);
-    if (!aPluginRecentlyOpenedFiles.contains (aFileInfo.absoluteFilePath()))
-    {
-      myRecentlyOpenedFiles[aPluginName].append (aFileInfo.absoluteFilePath());
-      for (int i = 0; i < myRecentlyOpenedFiles[aPluginName].size() - RECENT_FILES_CACHE_SIZE; i++)
-        myRecentlyOpenedFiles[aPluginName].removeFirst();
-      TInspectorEXE_OpenFileDialog::SetPluginRecentlyOpenedFiles (aPluginName,
-        TInspectorEXE_OpenFileDialog::Communicator(), myRecentlyOpenedFiles[aPluginName]);
-
-      TInspectorEXE_OpenFileDialog::Communicator()->GetPluginParameters()->StorePreferences();
-    }
-
-    QApplication::restoreOverrideCursor();
-  }
-}
-
-// =======================================================================
 // function : changeMargins
 // purpose :
 // =======================================================================
@@ -125,7 +67,7 @@ void changeMargins (QBoxLayout* theLayout)
 // function : Constructor
 // purpose :
 // =======================================================================
-TInspectorEXE_OpenFileDialog::TInspectorEXE_OpenFileDialog (QWidget* theParent, const QStringList& theRecentlyOpenedFiles)
+TInspector_OpenFileDialog::TInspector_OpenFileDialog (QWidget* theParent, const QStringList& theRecentlyOpenedFiles)
 : QDialog (theParent), myRecentlyOpenedFiles (theRecentlyOpenedFiles)
 {
   setWindowTitle (tr ("Open File"));
@@ -171,10 +113,10 @@ TInspectorEXE_OpenFileDialog::TInspectorEXE_OpenFileDialog (QWidget* theParent,
 // function : OpenFile
 // purpose :
 // =======================================================================
-QString TInspectorEXE_OpenFileDialog::OpenFile (QWidget* theParent, const QStringList& theRecentlyOpenedFiles)
+QString TInspector_OpenFileDialog::OpenFile (QWidget* theParent, const QStringList& theRecentlyOpenedFiles)
 {
   QString aFileName;
-  TInspectorEXE_OpenFileDialog* aDialog = new TInspectorEXE_OpenFileDialog (theParent, theRecentlyOpenedFiles);
+  TInspector_OpenFileDialog* aDialog = new TInspector_OpenFileDialog (theParent, theRecentlyOpenedFiles);
   if (aDialog->exec() == QDialog::Accepted)
     aFileName = aDialog->GetFileName();
 
@@ -185,7 +127,7 @@ QString TInspectorEXE_OpenFileDialog::OpenFile (QWidget* theParent, const QStrin
 // function : Communicator
 // purpose :
 // =======================================================================
-TInspector_Communicator* TInspectorEXE_OpenFileDialog::Communicator()
+TInspector_Communicator* TInspector_OpenFileDialog::Communicator()
 {
   if (!MyCommunicator)
     MyCommunicator = new TInspector_Communicator();
@@ -196,7 +138,7 @@ TInspector_Communicator* TInspectorEXE_OpenFileDialog::Communicator()
 // function : GetPluginRecentlyOpenedFiles
 // purpose :
 // =======================================================================
-void TInspectorEXE_OpenFileDialog::GetPluginRecentlyOpenedFiles (const TCollection_AsciiString& thePluginName,
+void TInspector_OpenFileDialog::GetPluginRecentlyOpenedFiles (const TCollection_AsciiString& thePluginName,
                                                                  TInspector_Communicator* theCommunicator,
                                                                  QStringList& theFileNames)
 {
@@ -220,7 +162,7 @@ void TInspectorEXE_OpenFileDialog::GetPluginRecentlyOpenedFiles (const TCollecti
 // function : SetPluginRecentlyOpenedFiles
 // purpose :
 // =======================================================================
-void TInspectorEXE_OpenFileDialog::SetPluginRecentlyOpenedFiles (const TCollection_AsciiString& thePluginName,
+void TInspector_OpenFileDialog::SetPluginRecentlyOpenedFiles (const TCollection_AsciiString& thePluginName,
                                                                  TInspector_Communicator* theCommunicator,
                                                                  QStringList& theFileNames)
 {
@@ -237,7 +179,7 @@ void TInspectorEXE_OpenFileDialog::SetPluginRecentlyOpenedFiles (const TCollecti
 // function : onSampleSelectionChanged
 // purpose :
 // =======================================================================
-void TInspectorEXE_OpenFileDialog::onSampleSelectionChanged (const QItemSelection& theSelected,
+void TInspector_OpenFileDialog::onSampleSelectionChanged (const QItemSelection& theSelected,
                                                              const QItemSelection&)
 {
   QItemSelectionModel* aSelectionModel = (QItemSelectionModel*)sender();
@@ -258,7 +200,7 @@ void TInspectorEXE_OpenFileDialog::onSampleSelectionChanged (const QItemSelectio
 // function : onSelectClicked
 // purpose :
 // =======================================================================
-void TInspectorEXE_OpenFileDialog::onSelectClicked()
+void TInspector_OpenFileDialog::onSelectClicked()
 {
   QString anEnteredPath;
   QString aDirName = mySelectedName->text();
@@ -283,7 +225,7 @@ void TInspectorEXE_OpenFileDialog::onSelectClicked()
 // function : onApplySelectClicked
 // purpose :
 // =======================================================================
-void TInspectorEXE_OpenFileDialog::onApplySelectClicked()
+void TInspector_OpenFileDialog::onApplySelectClicked()
 {
   QString aFileName = mySelectedName->text();
 
@@ -299,7 +241,7 @@ void TInspectorEXE_OpenFileDialog::onApplySelectClicked()
 // function : createTableView
 // purpose :
 // =======================================================================
-QTableView* TInspectorEXE_OpenFileDialog::createTableView (const QStringList& theFileNames)
+QTableView* TInspector_OpenFileDialog::createTableView (const QStringList& theFileNames)
 {
   QTableView* aTableView = new QTableView (this);
   aTableView->setFrameStyle (QFrame::NoFrame);
@@ -331,9 +273,9 @@ QTableView* TInspectorEXE_OpenFileDialog::createTableView (const QStringList& th
 // function : createModel
 // purpose :
 // =======================================================================
-QAbstractItemModel* TInspectorEXE_OpenFileDialog::createModel (const QStringList& theFileNames)
+QAbstractItemModel* TInspector_OpenFileDialog::createModel (const QStringList& theFileNames)
 {
-  TInspectorEXE_OpenFileViewModel* aModel = new TInspectorEXE_OpenFileViewModel (this);
+  TInspector_OpenFileViewModel* aModel = new TInspector_OpenFileViewModel (this);
   aModel->Init (theFileNames);
   return aModel;
 }
@@ -28,8 +28,6 @@
 #include <QStringList>
 #include <Standard_WarningsRestore.hxx>
 
-#include <map>
-
 class TInspector_Communicator;
 
 class QAbstractItemModel;
@@ -39,58 +37,22 @@ class QTableView;
 class QToolButton;
 class QWidget;
 
-//! \class TInspectorEXE_OpenButton
-//! Class that contains push button and the button processing. It obtains a file name from the default or current
-//! directory and gives the name into TInspector communicator
-//! Object name of the button is the name of the plugin to get the default directory, or the current directory is used.
-class TInspectorEXE_OpenButton : public QObject
-{
-  Q_OBJECT
-
-public:
-
-  //! Constructor
-  TInspectorEXE_OpenButton (QObject* theParent) : QObject (theParent), myStartButton (0) {}
-
-  //! Destructor
-  virtual ~TInspectorEXE_OpenButton() {}
-
-  //! Returns the start button, if this is the first call, it creates the button and connect it to the slot
-  QPushButton* StartButton();
-
-  //! Sets the default directory of plugin.
-  void SetPluginRecentlyOpenedFiles (const TCollection_AsciiString& thePluginName,
-                                     const QStringList& theRecentlyOpenedFiles)
-  { myRecentlyOpenedFiles[thePluginName] = theRecentlyOpenedFiles; }
-
-private slots:
-
-  //! Processes the button click, open default/current directory to select open file, calls OpenFile of communicator
-  void onStartButtonClicked();
-
-private:
-
-  QPushButton* myStartButton; //!< processed button
-  //!< plugins recently opened files
-  QMap<TCollection_AsciiString, QStringList> myRecentlyOpenedFiles;
-};
-
-//! \class TInspectorEXE_OpenFileDialog
+//! \class TInspector_OpenFileDialog
 //! Control that contains table view of samples and line to select a file name from other directory.
 //! Click on element of samples table view calls this sample opening else after entering(or opening) file name
 //! the import becomes active. Click on the button will open selected file if it is possible
-class TInspectorEXE_OpenFileDialog : public QDialog
+class TInspector_OpenFileDialog : public QDialog
 {
   Q_OBJECT
 private:
 
   //! Constructor
-  Standard_EXPORT TInspectorEXE_OpenFileDialog (QWidget* theParent, const QStringList& theRecentlyOpenedFiles);
+  Standard_EXPORT TInspector_OpenFileDialog (QWidget* theParent, const QStringList& theRecentlyOpenedFiles);
 
 public:
 
   //! Destructor
-  virtual ~TInspectorEXE_OpenFileDialog() Standard_OVERRIDE {}
+  virtual ~TInspector_OpenFileDialog() Standard_OVERRIDE {}
 
   //! Opens this file dialog using for samples view the given directory and try to open new file
   //! \param theParent a parent for the new dialog
@@ -125,7 +87,7 @@ private slots:
   //! Stores name of selected sample file
   void onSampleSelectionChanged (const QItemSelection& theSelected, const QItemSelection& theDeselected);
 
-  //! Open file dialog to select a file name. Fills file name line, enable import button
+  //! Opens file dialog to select a file name. Fills file name line, enable import button
   void onSelectClicked();
 
   //! Accepts open file dialog
@@ -147,7 +109,7 @@ private:
 
   QStringList myRecentlyOpenedFiles; //!< recently opened files
   QString myFileName; //!< result file name
-  QTableView* mySamplesView; //! <view of sample file names
+  QTableView* mySamplesView; //!< view of sample file names
   QLineEdit* mySelectedName; //!< alternative control to open file
 };
 
@@ -13,7 +13,7 @@
 // Alternatively, this file may be used under the terms of Open CASCADE
 // commercial license or contractual agreement. 
 
-#include <inspector/TInspectorEXE_OpenFileViewModel.hxx>
+#include <inspector/TInspector_OpenFileViewModel.hxx>
 
 #include <Standard_WarningsDisable.hxx>
 #include <QApplication>
@@ -53,7 +53,7 @@ void TInspectorEXE_OpenFileItemDelegate::paint (QPainter* thePainter, const QSty
 // function : Init
 // purpose :
 // =======================================================================
-void TInspectorEXE_OpenFileViewModel::Init (const QStringList& theValues)
+void TInspector_OpenFileViewModel::Init (const QStringList& theValues)
 {
   myValues = theValues;
 }
@@ -62,7 +62,7 @@ void TInspectorEXE_OpenFileViewModel::Init (const QStringList& theValues)
 // function : data
 // purpose :
 // =======================================================================
-QVariant TInspectorEXE_OpenFileViewModel::data (const QModelIndex& theIndex, int theRole) const
+QVariant TInspector_OpenFileViewModel::data (const QModelIndex& theIndex, int theRole) const
 {
   switch (theRole)
   {
@@ -41,7 +41,7 @@ public:
   //! Destructor
   virtual ~TInspectorEXE_OpenFileItemDelegate() {}
 
-  //! Draw an icon in the cell
+  //! Draws an icon in the cell
   //! \param thePainter a painter
   //! \param theOption a paint options
   //! \param theIndex a view index
@@ -53,19 +53,19 @@ private:
   QColor myColor; //!< highlight color
 };
 
-//! \class TInspectorEXE_OpenFileViewModel
+//! \class TInspector_OpenFileViewModel
 //! Table model that visualizes container of string values (file names)
 //! Table orientation is horizontal, it has 1 row, number of columns equals to number of values
-class TInspectorEXE_OpenFileViewModel : public QAbstractTableModel
+class TInspector_OpenFileViewModel : public QAbstractTableModel
 {
 
 public:
 
   //! Constructor
-  TInspectorEXE_OpenFileViewModel (QObject* theParent = 0) : QAbstractTableModel (theParent) {}
+  TInspector_OpenFileViewModel (QObject* theParent = 0) : QAbstractTableModel (theParent) {}
 
   //! Destructor
-  virtual ~TInspectorEXE_OpenFileViewModel() {}
+  virtual ~TInspector_OpenFileViewModel() {}
 
   //! Store values
   //! \param theValues a container of values to fill model
index 0f1810e..a46da81 100644 (file)
@@ -35,7 +35,7 @@ public:
   Standard_EXPORT TInspector_PluginParameters (TInspector_Window* theWindow);
 
   //! Destructor
-  virtual ~TInspector_PluginParameters() Standard_OVERRIDE {}
+  virtual ~TInspector_PluginParameters() {}
 
   //! Stores the parameters for plugin
   //! \param thePluginName a plugin name
@@ -62,10 +62,10 @@ public:
                                const TInspectorAPI_PreferencesDataMap& theItem) Standard_OVERRIDE
    { myPreferences->SetPreferences (thePluginName, theItem); }
 
-  //! Store plugin preferences into a preferences file
+  //! Stores plugin preferences into a preferences file
   virtual void StorePreferences() Standard_OVERRIDE { myPreferences->StorePreferences(); }
 
-  //! Remove plugin preferences file
+  //! Removes plugin preferences file
   void RemovePreferences() { myPreferences->RemovePreferences(); }
 
 private:
index 141cf2d..d0ebefc 100644 (file)
@@ -57,17 +57,17 @@ public:
   void SetPreferences (const TCollection_AsciiString& thePluginName, const TInspectorAPI_PreferencesDataMap& theItem)
   { myLoadedPreferences.Bind(thePluginName, theItem); }
 
-  //! Store plugin preferences into a preferences file
+  //! Stores plugin preferences into a preferences file
   Standard_EXPORT void StorePreferences();
 
-  //! Remove plugin preferences file
+  //! Removes plugin preferences file
   Standard_EXPORT void RemovePreferences();
 
 private:
   //! Loads the directory preference file with filling internal container
   void loadPreferences();
 
-  //! clears all internal containers with information of already loaded file
+  //! Clears all internal containers with information of already loaded file
   void reset() { myLoadedPreferences.Clear(); myIsLoadedPreferences = Standard_False; }
 
   //! Reads plugin preferences and fill container
index 8bb89ab..af22ab7 100644 (file)
@@ -83,7 +83,7 @@ TInspector_Window::TInspector_Window()
 
   myActionsWidget = new QToolButton(aCentralWidget);
   myActionsWidget->setPopupMode(QToolButton::InstantPopup);
-  myActionsWidget->setIcon (QIcon (":/icons/plugin_actions.png"));
+  myActionsWidget->setIcon (QIcon (":plugin_actions.png"));
   myActionsWidget->setIconSize (QSize (20, 20));
   QMenu* anActionsMenu = new QMenu(myActionsWidget);
   myActionsWidget->setMenu(anActionsMenu);
index 4e7e50b..c0c802d 100644 (file)
@@ -68,7 +68,7 @@ public:
   Standard_EXPORT TInspector_Window();
 
   //! Destructor
-  virtual ~TInspector_Window() Standard_OVERRIDE {}
+  virtual ~TInspector_Window() {}
 
   //! Appends the plugin names into internal conainer
   //! \param thePluginName a name of the plugin
@@ -102,7 +102,7 @@ public:
   //! \param thePluginName a name of the plugin
   Standard_EXPORT void ActivateTool (const TCollection_AsciiString& thePluginName);
 
-  //! Set item selected in the active plugin
+  //! Sets item selected in the active plugin
   //! \param theItemNames a container of name of items in plugin that should become selected
   Standard_EXPORT void SetSelected (const NCollection_List<TCollection_AsciiString>& theItemNames);
 
@@ -149,7 +149,7 @@ public slots:
   //! Stores preferences (current state) of all plugins into a preferences file
   Standard_EXPORT void OnStorePreferences();
 
-  //! Remove preferences file
+  //! Removes preferences file
   Standard_EXPORT void OnRemovePreferences();
 
 protected slots:
@@ -180,7 +180,7 @@ protected:
   //! Applies desktop preferences to window
   void applyPreferences();
 
-  //! Generate default temp directory by 'TEMP' or 'TMP' environment variables
+  //! Generates default temp directory by 'TEMP' or 'TMP' environment variables
   //! \return generated path
   TCollection_AsciiString defaultTemporaryDirectory() const;
 
diff --git a/tools/TInspector/icons/item_algo_folder.png b/tools/TInspector/icons/item_algo_folder.png
deleted file mode 100644 (file)
index 078dd34..0000000
Binary files a/tools/TInspector/icons/item_algo_folder.png and /dev/null differ
index dcb881a..63cf600 100644 (file)
@@ -3,4 +3,3 @@ TInspectorAPI_Communicator.hxx
 TInspectorAPI_PluginParameters.cxx
 TInspectorAPI_PluginParameters.hxx
 TInspectorAPI_PreferencesDataMap.hxx
-TInspectorAPI_Version.hxx
index b25f4db..9c9cf8d 100644 (file)
 
 #include <NCollection_List.hxx>
 #include <Standard_Transient.hxx>
-#include <Standard_Version.hxx>
-#if OCC_VERSION_HEX > 0x060901
-  #include <Standard_Handle.hxx>
-#endif
+#include <Standard_Handle.hxx>
 #include <inspector/TInspectorAPI_PluginParameters.hxx>
 
 //! The Communicator is an interface that should be implemented for a separate plugin
 //! It will be placed in layout of the given parent. After the plugin is created, it is possible to
 //! set container of parameters into plugin to provide the plugin's initialization by some external
 //! objects(e.g. Interactive Context or OCAF Application). If the parameters are changed, it may be
-//! applyed in UpdateContent function. The communicator can change parameters in the following cases:
+//! applied in UpdateContent function. The communicator can change parameters in the following cases:
 //! - the plugin removes own processed parameters (e.g. file names, that was opened by the plugin)
 //! - the plugin sends some parameters to another plugin(by name) (e.g. shape to be analized)
 //!   (at the same time we should be careful here to do not change essential parameters of other plugins)
@@ -50,9 +47,9 @@ public:
   //! \param theParent a parent class
   Standard_EXPORT virtual void SetParent (void* theParent) = 0;
 
-  //! Provide container for actions available in inspector on general level
+  //! Provides container for actions available in inspector on general level
   //! \param theMenu if Qt implementation, it is QMenu object
-  Standard_EXPORT virtual void FillActionsMenu (void* theMenu) { (void)theMenu; }
+  virtual void FillActionsMenu (void* theMenu) { (void)theMenu; }
 
   //! Returns plugin preferences, empty implementation by default
   virtual void GetPreferences (TInspectorAPI_PreferencesDataMap&) {}
index 9393949..53132b4 100644 (file)
 // commercial license or contractual agreement. 
 
 #include <inspector/TInspectorAPI_PluginParameters.hxx>
-#include <inspector/TInspectorAPI_Version.hxx>
 
-#if OCC_VERSION_HEX <= 0x060901
-IMPLEMENT_STANDARD_HANDLE (TInspectorAPI_PluginParameters, Standard_Transient)
 IMPLEMENT_STANDARD_RTTIEXT (TInspectorAPI_PluginParameters, Standard_Transient)
-#else
-IMPLEMENT_STANDARD_RTTIEXT (TInspectorAPI_PluginParameters, Standard_Transient)
-#endif
 
 // =======================================================================
 // function : SetParameters
@@ -275,7 +269,6 @@ void TInspectorAPI_PluginParameters::ParametersToShape (const TCollection_AsciiS
     return;
   anOrientationStr.Split (anOrientationStr.Length() - 1);
 
-#if TINSPECTORAPI_VERSION_HEX > 0x070200
   TopAbs_Orientation anOrientation;
   if (!TopAbs::ShapeOrientationFromString (anOrientationStr.ToCString(), anOrientation))
     return;
@@ -284,7 +277,4 @@ void TInspectorAPI_PluginParameters::ParametersToShape (const TCollection_AsciiS
 
   theShape.Location (aLocation);
   theShape.Orientation (anOrientation);
-#else
-  (void)theValue; (void)theShape;
-#endif
 }
index c92b518..c7975cd 100644 (file)
 
 #include <NCollection_DataMap.hxx>
 #include <NCollection_List.hxx>
-#include <Standard_Version.hxx>
 #include <Standard_Transient.hxx>
 #include <TCollection_AsciiString.hxx>
 #include <TopoDS_Shape.hxx>
 
 #include <inspector/TInspectorAPI_PreferencesDataMap.hxx>
 
-class TInspectorAPI_PluginParameters;
-DEFINE_STANDARD_HANDLE (TInspectorAPI_PluginParameters, Standard_Transient)
-
 //! The container of parameters for all possible plugins. It stores list of parameters for each plugin, even
 //! it was not be loaded yet. There is a map of plugin name into plugin parameters.
 //! The parameters may be:
@@ -41,7 +37,7 @@ public:
   Standard_EXPORT TInspectorAPI_PluginParameters() {}
 
   //! Destructor
-  Standard_EXPORT virtual ~TInspectorAPI_PluginParameters() Standard_OVERRIDE {}
+  Standard_EXPORT virtual ~TInspectorAPI_PluginParameters() {}
 
   //! Stores the parameters for plugin
   //! \param thePluginName a plugin name
@@ -131,7 +127,7 @@ public:
   Standard_EXPORT virtual void SetPreferences (const TCollection_AsciiString& thePluginName,
                                                const TInspectorAPI_PreferencesDataMap& theItem) = 0;
 
-  //! Store plugin preferences into a preferences file
+  //! Stores plugin preferences into a preferences file
   Standard_EXPORT virtual void StorePreferences() = 0;
 
   //! Converts a Shape parameters excepting TShape into a string value
@@ -145,11 +141,7 @@ public:
   Standard_EXPORT static void ParametersToShape (const TCollection_AsciiString& theValue, TopoDS_Shape& theShape);
 
 
-#if OCC_VERSION_HEX <= 0x060901
-  DEFINE_STANDARD_RTTI (TInspectorAPI_PluginParameters)
-#else
   DEFINE_STANDARD_RTTIEXT (TInspectorAPI_PluginParameters, Standard_Transient)
-#endif
 private:
   //! container of parameters
   NCollection_DataMap<TCollection_AsciiString, NCollection_List<Handle(Standard_Transient)> > myParameters;
diff --git a/tools/TInspectorAPI/TInspectorAPI_Version.hxx b/tools/TInspectorAPI/TInspectorAPI_Version.hxx
deleted file mode 100644 (file)
index 88bcc11..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2018 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-/*======================================================================
-// 
-// Purpose:   Defines macros identifying current version of Inspector
-// The version is equal to current OCCT version and used to support compile compatibility
-// to previous OCCT versions interface.
-// To compile Inspector with earlier version of OCCT, change version variable here to needed OCCT version.
-//
-//            TINSPECTORAPI_VERSION_MAJOR       : (integer) number identifying major version 
-//            TINSPECTORAPI_VERSION_MINOR       : (integer) number identifying minor version 
-//            TINSPECTORAPI_VERSION_MAINTENANCE : (integer) number identifying maintenance version 
-//            TINSPECTORAPI_VERSION_HEX         : (hex)     complete number as hex, two positions per each of major, minor, and patch number 
-//            
-//======================================================================*/
-
-#ifndef _TInspectorAPI_Version_HeaderFile
-#define _TInspectorAPI_Version_HeaderFile
-
-#include <Standard_Version.hxx>
-
-// Primary definitions
-#define TINSPECTORAPI_VERSION_MAJOR         OCC_VERSION_MAJOR
-#define TINSPECTORAPI_VERSION_MINOR         OCC_VERSION_MINOR
-#define TINSPECTORAPI_VERSION_MAINTENANCE   0//OCC_VERSION_MAINTENANCE
-
-// Derived: complete version as hex (0x0'major'0'minor'0'maintenance')
-#define TINSPECTORAPI_VERSION_HEX    (TINSPECTORAPI_VERSION_MAJOR << 16 | TINSPECTORAPI_VERSION_MINOR << 8 | TINSPECTORAPI_VERSION_MAINTENANCE)
-
-#endif  /* _TInspectorAPI_Version_HeaderFile */
index 8f800f2..83dde91 100644 (file)
@@ -1 +1,4 @@
-TKTInspector
\ No newline at end of file
+TKTInspector
+TKTInspectorAPI
+TKernel
+CSF_QT
\ No newline at end of file
index 68b0c79..44a1d28 100644 (file)
@@ -1,7 +1,2 @@
 TInspectorEXE.cxx
-TInspectorEXE_OpenFileDialog.cxx
-TInspectorEXE_OpenFileDialog.hxx
-TInspectorEXE_OpenFileViewModel.cxx
-TInspectorEXE_OpenFileViewModel.hxx
-TInspectorEXE.qrc
 EXTERNLIB
diff --git a/tools/TInspectorEXE/PACKAGES b/tools/TInspectorEXE/PACKAGES
deleted file mode 100644 (file)
index 1736c7d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-TInspectorEXE
index 10dcf4b..73ab696 100644 (file)
@@ -14,7 +14,8 @@
 // commercial license or contractual agreement. 
 
 
-#include <inspector/TInspectorEXE_OpenFileDialog.hxx>
+#include <inspector/TInspector_OpenFileDialog.hxx>
+#include <inspector/TInspector_OpenButton.hxx>
 
 #include <inspector/TInspector_Communicator.hxx>
 
@@ -50,10 +51,10 @@ TCollection_AsciiString fileNameInDataDir (const TCollection_AsciiString& theEnv
 // purpose :
 // =======================================================================
 void setPluginSampleDirectory (const TCollection_AsciiString& theName, TInspector_Communicator* theCommunicator,
-                               TInspectorEXE_OpenButton* theButtonControl)
+                               TInspector_OpenButton* theButtonControl)
 {
   QStringList aRecentlyOpenedFiles;
-  TInspectorEXE_OpenFileDialog::GetPluginRecentlyOpenedFiles (theName, theCommunicator, aRecentlyOpenedFiles);
+  TInspector_OpenFileDialog::GetPluginRecentlyOpenedFiles (theName, theCommunicator, aRecentlyOpenedFiles);
   TCollection_AsciiString aFileName, anAdditionalFileName;
   if (!aRecentlyOpenedFiles.isEmpty())
     aFileName = TCollection_AsciiString (aRecentlyOpenedFiles.last().toUtf8().data());
@@ -107,14 +108,14 @@ int main (int argc, char** argv)
   NCollection_List<Handle(Standard_Transient)> aParameters;
 
   // Create tool communicator
-  TInspector_Communicator* aCommunicator = TInspectorEXE_OpenFileDialog::Communicator();
+  TInspector_Communicator* aCommunicator = TInspector_OpenFileDialog::Communicator();
   if (!aCommunicator)
   {
     std::cout << "Communicator can not be created" << std::endl;
     return 0;
   }
 
-  TInspectorEXE_OpenButton* aButtonControl = new TInspectorEXE_OpenButton (0);
+  TInspector_OpenButton* aButtonControl = new TInspector_OpenButton (0);
   TCollection_AsciiString anActivatedPluginName;
   if (aPlugins.empty())
   {
diff --git a/tools/TInspectorEXE/TInspectorEXE.qrc b/tools/TInspectorEXE/TInspectorEXE.qrc
deleted file mode 100644 (file)
index 5b8eac8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-    <qresource prefix="/">
-        <file alias="folder_open.png">icons/folder_open.png</file>
-        <file alias="folder_import.png">icons/folder_import.png</file>
-    </qresource>
-</RCC>
index a028066..b9f1451 100644 (file)
@@ -1,9 +1,11 @@
 TKTInspectorAPI
+TKernel
 TKMath
 TKBRep
 TKGeomBase
 TKG3d
 TKService
 TKTreeModel
+TKV3d
 TKView
 CSF_QT
index df0002f..0e517c2 100644 (file)
@@ -1,4 +1,8 @@
 TKG3d
 TKernel
 TKLCAF
-TKMath
\ No newline at end of file
+TKMath
+TKBRep
+TKTopAlgo
+TKPrim
+TKV3d
index 62a89ec..95df12d 100644 (file)
@@ -2,6 +2,7 @@ TKDraw
 TKDCAF
 TKTInspector
 TKTInspectorAPI
+TKernel
 TKService
 TKV3d
 TKViewerTest
index 893b52c..74b7426 100644 (file)
@@ -1 +1,6 @@
+TKernel
+TKMath
+TKPrim
+TKTopAlgo
+TKTInspectorAPI
 CSF_QT
\ No newline at end of file
index b5f6441..72cf333 100644 (file)
@@ -4,4 +4,5 @@ TKMath
 TKService
 TKOpenGl
 TKV3d
+TKTInspectorAPI
 CSF_QT
\ No newline at end of file
index e03dd5b..c0abd77 100644 (file)
@@ -41,6 +41,15 @@ Standard_EXPORT ViewerTest_DoubleMapOfInteractiveAndName& GetMapOfAIS();
 static TInspector_Communicator* MyCommunicator;
 
 // =======================================================================
+// function : Communicator
+// purpose  : defines plugin library name by the command argument
+// =======================================================================
+TInspector_Communicator* ToolsDraw::Communicator()
+{
+  return MyCommunicator;
+}
+
+// =======================================================================
 // function : convertToPluginName
 // purpose  : defines plugin library name by the command argument
 // =======================================================================
@@ -386,7 +395,7 @@ void ToolsDraw::Commands(Draw_Interpretor& theCommands)
     "\n\t\t:           Plugins order will be the same as defined in arguments."
     "\n\t\t:           'all' adds all available plugins in the order:"
     "\n\t\t:                 DFBrowser, VInspector and ShapeView."
-    "\n\t\t:           If at the first call this option is not used, 'all' option is applyed;"
+    "\n\t\t:           If at the first call this option is not used, 'all' option is applied;"
     "\n\t\t:  -activate activates the plugin in the tool view."
     "\n\t\t:           If at the first call this option is not used, the first plugin is activated;"
     "\n\t\t:  -shape initializes plugin/s by the shape object. If 'name' is empty, initializes all plugins;"
index b004ad5..9b5dcf5 100644 (file)
@@ -20,6 +20,8 @@
 #include <Draw_Interpretor.hxx>
 #include <Standard.hxx>
 
+class TInspector_Communicator;
+
 //! \class ToolsDraw
 //! \brief Registers DRAW commands to connect to TInspector tools
 class ToolsDraw
@@ -32,10 +34,13 @@ public:
   //! \param theDI Draw interpretor
   Standard_EXPORT static void Factory (Draw_Interpretor& theDI);
 
-  //! Add all tools command in the Draw_Interpretor
+  //! Adds all tools command in the Draw_Interpretor
   //! \param theCommands
   Standard_EXPORT static void Commands (Draw_Interpretor& theCommands);
 
+  //! Returns default communicator used in DRAW commands
+  Standard_EXPORT static TInspector_Communicator* Communicator();
+
 private:
 };
 
index 2eeab8f..45b20c9 100644 (file)
@@ -1,4 +1,3 @@
-TreeModel.hxx
 TreeModel.qrc
 TreeModel_ColumnType.hxx
 TreeModel_ContextMenu.cxx
@@ -6,7 +5,11 @@ TreeModel_ContextMenu.hxx
 TreeModel_HeaderSection.hxx
 TreeModel_ItemBase.cxx
 TreeModel_ItemBase.hxx
+TreeModel_ItemProperties.cxx
+TreeModel_ItemProperties.hxx
 TreeModel_ItemRole.hxx
+TreeModel_ItemStream.cxx
+TreeModel_ItemStream.hxx
 TreeModel_ModelBase.cxx
 TreeModel_ModelBase.hxx
 TreeModel_Tools.cxx
diff --git a/tools/TreeModel/TreeModel.hxx b/tools/TreeModel/TreeModel.hxx
deleted file mode 100644 (file)
index 30ba380..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// Created on: 2017-06-16
-// Created by: Natalia ERMOLAEVA
-// Copyright (c) 2017 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement. 
-
-#ifndef TREEMODEL_H
-#define TREEMODEL_H
-
-#ifdef __TreeModel_DLL
-  #ifdef _WIN32
-    #define TREEMODEL_EXPORT __declspec(dllexport)
-  #else
-    #define TREEMODEL_EXPORT
-  #endif
-#else
-  #ifdef _WIN32
-    #define TREEMODEL_EXPORT __declspec(dllimport)
-  #else
-    #define TREEMODEL_EXPORT
-  #endif
-#endif
-
-#endif
index 925185a..c6df423 100644 (file)
@@ -47,7 +47,7 @@ protected slots:
   void onColumnVisibilityChanged();
 
 private:
-  QTreeView* myTreeView;
+  QTreeView* myTreeView; //!< current tree view
 };
 
 #endif
index 5ea9ca1..6e84d7e 100644 (file)
@@ -41,6 +41,11 @@ public:
   //! Destructor
   ~TreeModel_HeaderSection() {}
 
+  //! Returns whether the header section is not initialized with values.
+  //! The check is empty value of the name text
+  //! \return boolean value
+  bool IsEmpty() const { return myName.isEmpty(); }
+
   //! Sets text value
   //! \theName text value
   void SetName (const QString& theName) { myName = theName; }
@@ -69,10 +74,10 @@ public:
   bool IsItalic() const { return myIsItalic; }
 
 private:
-  QString myName;  //! text value
-  int myWidth; //! section width
-  bool myIsHidden; //! visibility
-  bool myIsItalic; //! italic
+  QString myName;  //!< text value
+  int myWidth; //!< section width
+  bool myIsHidden; //!< visibility
+  bool myIsItalic; //!< italic
 };
 
 #endif
index 464a788..38ef9b2 100644 (file)
 // commercial license or contractual agreement. 
 
 #include <inspector/TreeModel_ItemBase.hxx>
-
+#include <inspector/TreeModel_ItemProperties.hxx>
 #include <inspector/TreeModel_ItemRole.hxx>
+#include <inspector/TreeModel_ItemStream.hxx>
 
+#include <Standard_Dump.hxx>
 #include <Standard_WarningsDisable.hxx>
 #include <QStringList>
 #include <Standard_WarningsRestore.hxx>
@@ -26,7 +28,7 @@
 // purpose :
 // =======================================================================
 TreeModel_ItemBase::TreeModel_ItemBase (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
- : m_bInitialized (false)
+ : m_iStreamChildren (0), m_bInitialized (false)
 {
   m_pParent = theParent;
   m_iRow = theRow;
@@ -34,7 +36,7 @@ TreeModel_ItemBase::TreeModel_ItemBase (TreeModel_ItemBasePtr theParent, const i
 }
 
 // =======================================================================
-// function :  reset
+// function :  Reset
 // purpose :
 // =======================================================================
 void TreeModel_ItemBase::Reset()
@@ -46,7 +48,12 @@ void TreeModel_ItemBase::Reset()
       anItem->Reset();
   }
   m_bInitialized = false;
+  if (!myProperties.IsNull())
+  {
+    myProperties->Reset();
+  }
   myCachedValues.clear();
+  myStream.str ("");
 }
 
 // =======================================================================
@@ -55,7 +62,7 @@ void TreeModel_ItemBase::Reset()
 // =======================================================================
 void TreeModel_ItemBase::Reset (int theRole)
 {
-  if (!myCachedValues.contains (theRole))  
+  if (!myCachedValues.contains (theRole))
     return;
 
   myCachedValues.remove (theRole);
@@ -74,7 +81,11 @@ TreeModel_ItemBasePtr TreeModel_ItemBase::Child (int theRow, int theColumn, cons
 
   TreeModel_ItemBasePtr anItem;
   if (isToCreate) {
-    anItem = createChild (theRow, theColumn);
+    if (theRow < m_iStreamChildren)
+      anItem = TreeModel_ItemStream::CreateItem (currentItem(), theRow, theColumn);
+    else
+      anItem = createChild (theRow - m_iStreamChildren, theColumn);
+
     if (anItem)
       m_ChildItems[aPos] = anItem;
   }
@@ -99,8 +110,77 @@ QVariant TreeModel_ItemBase::cachedValue (const int theItemRole) const
   if (myCachedValues.contains (theItemRole))
     return myCachedValues[theItemRole];
 
-  const_cast<TreeModel_ItemBase*>(this)->myCachedValues.insert (theItemRole,
-    theItemRole == TreeModel_ItemRole_RowCountRole ? QVariant (initRowCount()) : initValue (theItemRole));
+  QVariant aValueToCache;
+  if (theItemRole == TreeModel_ItemRole_RowCountRole)
+    aValueToCache = initRowCount() + const_cast<TreeModel_ItemBase*>(this)->initStreamRowCount();
+  else
+    aValueToCache = initValue (theItemRole);
 
+  myCachedValues.insert (theItemRole, aValueToCache);
   return myCachedValues.contains (theItemRole) ? myCachedValues[theItemRole] : QVariant();
 }
+
+// =======================================================================
+// function : Init
+// purpose :
+// =======================================================================
+void TreeModel_ItemBase::Init()
+{
+  m_bInitialized = true;
+
+  initStream(myStream);
+  initStreamRowCount();
+}
+
+// =======================================================================
+// function : Object
+// purpose :
+// =======================================================================
+const Handle(Standard_Transient)& TreeModel_ItemBase::Object() const
+{
+  static Handle(Standard_Transient) aNullObject;
+  return aNullObject;
+}
+
+// =======================================================================
+// function : initStreamRowCount
+// purpose :
+// =======================================================================
+int TreeModel_ItemBase::initStreamRowCount()
+{
+  int aStreamChildrenCount = 0;
+  if (Column() == 0)
+  {
+    Standard_SStream aStream;
+    initStream (aStream);
+    if (!Standard_Dump::Text (aStream).IsEmpty())
+    {
+      if (!myProperties)
+      {
+        myProperties = new TreeModel_ItemProperties();
+        myProperties->SetItem (currentItem());
+      }
+      myProperties->Init();
+      aStreamChildrenCount = myProperties->Children().Extent();
+    }
+  }
+  m_iStreamChildren = aStreamChildrenCount;
+  return m_iStreamChildren;
+}
+
+// =======================================================================
+// function : initValue
+// purpose :
+// =======================================================================
+QVariant TreeModel_ItemBase::initValue (const int theItemRole) const
+{
+  if (theItemRole != Qt::DisplayRole && theItemRole != Qt::ToolTipRole)
+    return QVariant();
+
+  switch (Column())
+  {
+    case 1: { return Row(); }
+  }
+
+  return QVariant();
+}
index 82ba6dc..99f7d21 100644 (file)
 
 #include <Standard.hxx>
 #include <Standard_Macro.hxx>
+#include <Standard_Handle.hxx>
+#include <Standard_OStream.hxx>
+#include <Standard_SStream.hxx>
+
 #include <inspector/TreeModel_ItemRole.hxx>
 
 #include <Standard_WarningsDisable.hxx>
@@ -32,6 +36,7 @@
 #include <Standard_WarningsRestore.hxx>
 
 class TreeModel_ItemBase;
+class TreeModel_ItemProperties;
 
 typedef QExplicitlySharedDataPointer<TreeModel_ItemBase> TreeModel_ItemBasePtr;
 
@@ -81,7 +86,11 @@ public:
 
   //! Sets the item internal initialized state to the true. If the item has internal values,
   //! there should be initialized here.
-  virtual void Init() { m_bInitialized = true; }
+  Standard_EXPORT virtual void Init();
+
+  //! Returns data object of the item.
+  //! \return object
+  Standard_EXPORT virtual const Handle(Standard_Transient)& Object() const;
 
   //! Resets the item and the child items content. Sets the initialized state to false.
   //! If the item has internal values, there should be reseted here.
@@ -91,6 +100,16 @@ public:
   //! \param theRole an item role
   Standard_EXPORT virtual void Reset(int theRole);
 
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  const Standard_SStream& Stream() const { return myStream; }
+
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  virtual bool SetStream (const Standard_SStream& theSStream, Standard_Integer& theStartPos,
+                          Standard_Integer& theLastPos) const
+  { (void)theSStream; (void)theStartPos; (void)theLastPos; return false; }
+
   //! Gets the parent of the item, or TreeModel_ItemBasePtr() if it has no parent.
   //! \return pointer to the item
   TreeModel_ItemBasePtr Parent() const { return m_pParent; };
@@ -115,7 +134,7 @@ public:
   //! Sets a custom value for the role in an internal cache
   //! \param theValue a value
   //! \param theRole a value role
-  void SetCustomData(const QVariant theValue, int theRole) { myCachedValues.insert (theRole, theValue); }
+  void SetCustomData(const QVariant& theValue, int theRole) { myCachedValues.insert (theRole, theValue); }
 
   //! Returns the data stored under the given role for the current item
   //! \param theIndex the item model index
@@ -127,18 +146,25 @@ public:
   //! \return the row count
   int rowCount() const { return cachedValue(TreeModel_ItemRole_RowCountRole).toInt(); }
 
+  //! Returns the item properties
+  const Handle(TreeModel_ItemProperties)& Properties() const { return myProperties; }
+
 protected:
 
   //! \param theParent the parent item
-  //! \param theRow the item row positition in the parent item
-  //! \param theColumn the item column positition in the parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
   Standard_EXPORT TreeModel_ItemBase (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn);
 
+  //! Initializes the current item. It creates a backup of the specific item information
+  virtual void initItem() const {}
+
   //! Creates a child item in the given position.
   //! \param theRow the child row position
   //! \param theColumn the child column position
   //! \return the created item
-  virtual TreeModel_ItemBasePtr createChild (int theRow, int theColumn) = 0;
+  virtual TreeModel_ItemBasePtr createChild (int theRow, int theColumn)
+  { (void)theRow; (void)theColumn; return TreeModel_ItemBasePtr(); }
 
   //! Wraps the currrent item by shared pointer
   //! \return the shared pointer to the current item
@@ -153,17 +179,29 @@ protected:
   //! \return number of children. It should be reimplemented in child
   virtual int initRowCount() const = 0;
 
-  //! Return data value for the role. It should be reimplemented in child
+  //! \return number of children. It should be reimplemented in child
+  Standard_EXPORT int initStreamRowCount();
+
+  //! Returns data value for the role. It should be reimplemented in child
   //! \param theItemRole a value role
   //! \return the value
-  virtual QVariant initValue (const int theItemRole) const = 0;
+  Standard_EXPORT virtual QVariant initValue (const int theItemRole) const;
+
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  virtual void initStream (Standard_OStream& theOStream) const { (void)theOStream; }
+
+protected:
+  Handle(TreeModel_ItemProperties) myProperties; //!< the properties
+  int m_iStreamChildren; //!< the count of stream items
+  Standard_SStream myStream; //!< stream value
 
 private:
 
   typedef QHash< QPair<int, int>, TreeModel_ItemBasePtr > PositionToItemHash;
   PositionToItemHash m_ChildItems; //!< the hash of item children
 
-  QMap<int, QVariant> myCachedValues; //!< cached values, should be cleared by reset
+  mutable QMap<int, QVariant> myCachedValues; //!< cached values, should be cleared by reset
   TreeModel_ItemBasePtr m_pParent; //!< the parent item
   int m_iRow;          //!< the item row position in the parent item
   int m_iColumn;       //!< the item column position in the parent item
diff --git a/tools/TreeModel/TreeModel_ItemProperties.cxx b/tools/TreeModel/TreeModel_ItemProperties.cxx
new file mode 100644 (file)
index 0000000..631d2f2
--- /dev/null
@@ -0,0 +1,232 @@
+// Created on: 2020-01-25
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#include <inspector/TreeModel_ItemProperties.hxx>
+#include <inspector/TreeModel_ItemStream.hxx>
+#include <inspector/Convert_Tools.hxx>
+#include <inspector/Convert_TransientShape.hxx>
+
+#include <BRepBuilderAPI_MakeVertex.hxx>
+#include <gp_XYZ.hxx>
+#include <Standard_Dump.hxx>
+
+#include <Standard_WarningsDisable.hxx>
+#include <QApplication>
+#include <QFont>
+#include <Standard_WarningsRestore.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(TreeModel_ItemProperties, Standard_Transient)
+
+// =======================================================================
+// function : Init
+// purpose :
+// =======================================================================
+void TreeModel_ItemProperties::Init ()
+{
+  myRowValues.Clear();
+
+  const Standard_SStream& aStream = Item()->Stream();
+
+  NCollection_IndexedDataMap<TCollection_AsciiString, Standard_DumpValue> aValues;
+  TCollection_AsciiString aStreamText = Standard_Dump::Text (aStream);
+  Standard_Dump::SplitJson (aStreamText, aValues);
+
+  TreeModel_ItemStreamPtr aStreamParent = itemDynamicCast<TreeModel_ItemStream>(Item());
+  TCollection_AsciiString aKey;
+  Standard_DumpValue aKeyValue;
+  if (!aStreamParent)
+  {
+    const Handle(Standard_Transient)& anItemObject = Item()->Object();
+    aKey = anItemObject.IsNull() ? "Dump" : anItemObject->DynamicType()->Name();
+    aKeyValue = Standard_DumpValue (aStreamText, 1);
+
+    myKey = aKey;
+    myStreamValue = aKeyValue;
+  }
+  else
+  {
+    TCollection_AsciiString aValue;
+    if (Item()->Parent())
+    {
+      const Handle(TreeModel_ItemProperties)& aParentProperties = Item()->Parent()->Properties();
+      if (aParentProperties)
+        aParentProperties->ChildStream (Item()->Row(), aKey, aKeyValue);
+    }
+    myKey = aKey;
+    myStreamValue = aKeyValue;
+
+    aValues.Clear();
+    Standard_Dump::SplitJson (myStreamValue.myValue, aValues);
+  }
+
+  for (Standard_Integer anIndex = 1; anIndex <= aValues.Size(); anIndex++)
+  {
+    Standard_DumpValue aValue = aValues.FindFromIndex (anIndex);
+    if (Standard_Dump::HasChildKey (aValue.myValue))
+      myChildren.Add (aValues.FindKey (anIndex), aValue);
+    else
+    {
+      TreeModel_RowValue aRowValue (aValue.myStartPosition, aValues.FindKey (anIndex).ToCString(), aValue.myValue.ToCString());
+      myRowValues.Add (myRowValues.Size() + 1, aRowValue);
+    }
+  }
+  if (myRowValues.Size() == 1)
+  {
+    Quantity_Color aColor;
+    if (Convert_Tools::ConvertStreamToColor (aStream, aColor))
+    {
+      Standard_Real aRed, aGreen, aBlue;
+      aColor.Values (aRed, aGreen, aBlue, Quantity_TOC_sRGB);
+
+      int aDelta = 255;
+      myRowValues.ChangeFromIndex (1).CustomValues.insert ((int)Qt::BackgroundRole, QColor((int)(aRed * aDelta),
+        (int)(aGreen * aDelta), (int)(aBlue * aDelta)));
+    }
+  }
+}
+
+// =======================================================================
+// function :  Reset
+// purpose :
+// =======================================================================
+void TreeModel_ItemProperties::Reset()
+{
+  myKey = "";
+  myStreamValue = Standard_DumpValue();
+
+  myChildren.Clear();
+  myRowValues.Clear();
+}
+
+// =======================================================================
+// function : RowCount
+// purpose :
+// =======================================================================
+int TreeModel_ItemProperties::RowCount() const
+{
+  return RowValues().Size();
+}
+
+// =======================================================================
+// function : Data
+// purpose :
+// =======================================================================
+QVariant TreeModel_ItemProperties::Data (const int theRow, const int theColumn, int theRole) const
+{
+  if (theColumn == 1 && theRole == Qt::BackgroundRole)
+  {
+    const QMap<int, QVariant>& aCachedValues = RowValues().FindFromIndex (theRow + 1).CustomValues;
+    if (aCachedValues.contains ((int)theRole))
+      return aCachedValues[(int)theRole];
+  }
+
+  if (theRole == Qt::FontRole) // method name is in italic
+  {
+    if (Data(theRow, 0, Qt::DisplayRole).toString().contains("className"))
+    {
+      QFont aFont = qApp->font();
+      aFont.setItalic (true);
+      return aFont;
+    }
+  }
+  if (theRole == Qt::ForegroundRole)
+  {
+    if (Data(theRow, 0, Qt::DisplayRole).toString().contains("className"))
+      return QColor (Qt::darkGray).darker(150);
+  }
+
+  if (theRole == Qt::DisplayRole || theRole == Qt::ToolTipRole)
+  {
+    if (theColumn == 0) return RowValues().FindFromIndex (theRow + 1).Key;
+    else if (theColumn == 1) return RowValues().FindFromIndex (theRow + 1).Value;
+  }
+
+  return QVariant();
+}
+
+// =======================================================================
+// function : EditType
+// purpose :
+// =======================================================================
+ViewControl_EditType TreeModel_ItemProperties::EditType (const int, const int theColumn) const
+{
+  if (theColumn == 0)
+    return ViewControl_EditType_None;
+
+  return ViewControl_EditType_Line;
+}
+
+// =======================================================================
+// function : SetData
+// purpose :
+// =======================================================================
+bool TreeModel_ItemProperties::SetData (const int /*theRow*/, const int theColumn, const QVariant& /*theValue*/, int)
+{
+  if (theColumn == 0)
+    return false;
+  return false;
+}
+
+// =======================================================================
+// function : Presentations
+// purpose :
+// =======================================================================
+void TreeModel_ItemProperties::Presentations (NCollection_List<Handle(Standard_Transient)>& thePresentations)
+{
+  const Standard_SStream& aStream = Item()->Stream();
+  Convert_Tools::ConvertStreamToPresentations (aStream, 1, -1, thePresentations);
+}
+
+// =======================================================================
+// function : TableFlags
+// purpose :
+// =======================================================================
+Qt::ItemFlags TreeModel_ItemProperties::TableFlags (const int, const int theColumn) const
+{
+  Qt::ItemFlags aFlags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
+
+  if (theColumn == 1)
+    aFlags = aFlags | Qt::ItemIsEditable;
+
+  return aFlags;
+}
+
+// =======================================================================
+// function : ChildStream
+// purpose :
+// =======================================================================
+void TreeModel_ItemProperties::ChildStream (const int theRowId,
+                                            TCollection_AsciiString& theKey,
+                                            Standard_DumpValue& theValue) const
+{
+  if (myChildren.Size() <= theRowId)
+    return;
+
+  theKey = myChildren.FindKey (theRowId + 1);
+  theValue = myChildren.FindFromIndex (theRowId + 1);
+}
+
+// =======================================================================
+// function : initItem
+// purpose :
+// =======================================================================
+void TreeModel_ItemProperties::initItem() const
+{
+  if (!Item())
+    return;
+  if (Item()->IsInitialized())
+    return;
+  Item()->Init();
+}
diff --git a/tools/TreeModel/TreeModel_ItemProperties.hxx b/tools/TreeModel/TreeModel_ItemProperties.hxx
new file mode 100644 (file)
index 0000000..7f498d7
--- /dev/null
@@ -0,0 +1,162 @@
+// Created on: 2020-01-25
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#ifndef TreeModel_ItemProperties_H
+#define TreeModel_ItemProperties_H
+
+#include <Standard.hxx>
+#include <Standard_Dump.hxx>
+#include <Standard_Handle.hxx>
+#include <Standard_Macro.hxx>
+#include <Standard_Type.hxx>
+#include <Standard_Transient.hxx>
+
+#include <NCollection_IndexedDataMap.hxx>
+#include <NCollection_IndexedMap.hxx>
+#include <NCollection_List.hxx>
+
+#include <TCollection_AsciiString.hxx>
+
+#include <inspector/TreeModel_ItemBase.hxx>
+#include <inspector/ViewControl_EditType.hxx>
+
+#include <Standard_WarningsDisable.hxx>
+#include <QAbstractTableModel>
+#include <QColor>
+#include <QList>
+#include <QModelIndexList>
+#include <QVariant>
+#include <Standard_WarningsRestore.hxx>
+
+//! \class TreeModel_ItemProperties
+//! Class to manipulate properties of tree item. The properties are organized in table structure
+class TreeModel_ItemProperties : public Standard_Transient
+{
+  //! enum defined the dimension type
+  enum TreeModel_DimType
+  {
+    TreeModel_DimType_Rows,   //!< defines number of rows
+    TreeModel_DimType_Columns //!< defines number of columns
+  };
+
+  //! container of values in a row of property table
+  struct TreeModel_RowValue
+  {
+    TreeModel_RowValue (const Standard_Integer theValueStartPosition, const QVariant& theKey, QVariant theValue)
+    : ValueStartPosition (theValueStartPosition), Key (theKey), Value (theValue) {}
+
+    Standard_Integer ValueStartPosition; //!< start position of the key
+    QVariant Key; //!< value in the first column
+    QVariant Value; //!< value in the second column
+    QMap<int, QVariant> CustomValues; //!< custom values, e.g. key is Background, value is a defined color
+  };
+
+public:
+  //! Constructor
+  TreeModel_ItemProperties() {}
+
+  //! Destructor
+  ~TreeModel_ItemProperties() {}
+
+  //! Sets the current item
+  void SetItem (const TreeModel_ItemBasePtr& theItem) { myItem = theItem; }
+
+  //! Returns the current item
+  TreeModel_ItemBasePtr Item() const { return myItem; }
+
+  //! Fills internal containers by item stream values
+  Standard_EXPORT void Init();
+
+  //! If the item has internal values, there should be reseted here.
+  Standard_EXPORT virtual void Reset();
+
+  //! Returns number of table rows
+  //! \return an integer value
+  Standard_EXPORT int RowCount() const;
+
+  //! Returns number of table columns
+  //! \return an integer value
+  int ColumnCount() const { return 2; }
+
+  //! Returns content of the model index for the given role, it is obtained from internal container of values
+  //! \param theRow a model index row
+  //! \param theColumn a model index column
+  //! \param theRole a view role
+  //! \return value interpreted depending on the given role
+  Standard_EXPORT QVariant Data (const int theRow, const int theColumn, int theRole = Qt::DisplayRole) const;
+
+  //! Returns type of edit control for the model index. By default, it is an empty control
+  //! \param theRow a model index row
+  //! \param theColumn a model index column
+  //! \return edit type
+  Standard_EXPORT ViewControl_EditType EditType (const int theRow, const int theColumn) const;
+
+  //! Sets content of the model index for the given role, it is applied to internal container of values
+  //! \param theRow a model index row
+  //! \param theColumn a model index column
+  //! \param theRole a view role
+  //! \return true if the value is changed
+  Standard_EXPORT virtual bool SetData (const int theRow, const int theColumn, const QVariant& theValue,
+                                        int theRole = Qt::DisplayRole);
+
+  //! Returns presentation of the attribute to be visualized in the view
+  //! \thePresentations [out] container of presentation handles to be visualized
+  Standard_EXPORT virtual void Presentations (NCollection_List<Handle(Standard_Transient)>& thePresentations);
+
+  //! Returns flags for the item: ItemIsEnabled | Qt::ItemIsSelectable.
+  //! Additional flag for the column 1 is Qt::ItemIsEditable.
+  //! \param theIndex a model index
+  //! \return flags
+  Standard_EXPORT virtual Qt::ItemFlags TableFlags (const int theRow, const int theColumn) const;
+
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  Standard_EXPORT void ChildStream (const int theRowId,
+                                    TCollection_AsciiString& theKey,
+                                    Standard_DumpValue& theValue) const;
+
+  //! Returns data object of the item.
+  //! \return object key
+  const TCollection_AsciiString& Key() const { return myKey; }
+
+  //! Returns stream value of the item.
+  //! \return value
+  const TCollection_AsciiString& StreamValue() const { return myStreamValue.myValue; }
+
+  //! Returns children stream values
+  //const NCollection_IndexedDataMap<TCollection_AsciiString, Standard_DumpValue>& Values() const { initItem(); return myValues; }
+
+  //! Returns children stream values
+  const NCollection_IndexedDataMap<Standard_Integer, TreeModel_RowValue>& RowValues() const { initItem(); return myRowValues; }
+
+  //! Returns children stream values
+  const NCollection_IndexedDataMap<TCollection_AsciiString, Standard_DumpValue>& Children() const { initItem(); return myChildren; }
+
+  DEFINE_STANDARD_RTTIEXT (TreeModel_ItemProperties, Standard_Transient)
+
+protected:
+  //! Initializes the current item. It creates a backup of the specific item information
+  Standard_EXPORT void initItem() const;
+
+private:
+  TreeModel_ItemBasePtr myItem; //!< current item
+
+  TCollection_AsciiString myKey; //!< the item key
+  Standard_DumpValue myStreamValue; //!< the stream value
+  NCollection_IndexedDataMap<TCollection_AsciiString, Standard_DumpValue> myChildren; //!< the children
+  NCollection_IndexedDataMap<Standard_Integer, TreeModel_RowValue> myRowValues; //!< the values
+};
+
+#endif
\ No newline at end of file
similarity index 51%
rename from tools/VInspector/VInspector_ItemFolderObject.cxx
rename to tools/TreeModel/TreeModel_ItemStream.cxx
index cbd413b..efa8b36 100644 (file)
@@ -1,6 +1,6 @@
-// Created on: 2017-06-16
+// Created on: 2020-01-25
 // Created by: Natalia ERMOLAEVA
-// Copyright (c) 2017 OPEN CASCADE SAS
+// Copyright (c) 2020 OPEN CASCADE SAS
 //
 // This file is part of Open CASCADE Technology software library.
 //
 // Alternatively, this file may be used under the terms of Open CASCADE
 // commercial license or contractual agreement. 
 
-#include <inspector/VInspector_ItemFolderObject.hxx>
+#include <inspector/TreeModel_ItemStream.hxx>
 
-#include <inspector/VInspector_ItemContext.hxx>
-#include <inspector/VInspector_ItemSelectMgrFilter.hxx>
+#include <inspector/TreeModel_ItemProperties.hxx>
+
+#include <Standard_Dump.hxx>
 
 // =======================================================================
-// function : initValue
+// function : Constructor
 // purpose :
 // =======================================================================
-QVariant VInspector_ItemFolderObject::initValue (int theItemRole) const
+TreeModel_ItemStream::TreeModel_ItemStream (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+ : TreeModel_ItemBase (theParent, theRow, theColumn)
 {
-  if (Column() == 0 && (theItemRole == Qt::DisplayRole || theItemRole == Qt::ToolTipRole))
-  {
-    if (parentItemIsContext()) return "Properties";
-    else if (Row() == 0) return "Filters";
-    else return QVariant();
-  }
-  return QVariant();
 }
 
 // =======================================================================
-// function : initRowCount
+// function : Init
 // purpose :
 // =======================================================================
-int VInspector_ItemFolderObject::initRowCount() const
+void TreeModel_ItemStream::Init()
 {
-  return parentItemIsContext() ? 1 : (GetContext().IsNull() ? 0 : GetContext()->Filters().Extent());
+  TreeModel_ItemBase::Init();
+
+  int aStreamChildrenCount = 0;
+  if (Column() == 0)
+  {
+    if (!myProperties)
+    {
+      myProperties = new TreeModel_ItemProperties();
+      myProperties->SetItem (currentItem());
+    }
+    myProperties->Init();
+    aStreamChildrenCount = myProperties->Children().Extent();
+  }
+  m_iStreamChildren = aStreamChildrenCount;
+  initStream (myStream);
 }
 
 // =======================================================================
-// function : createChild
+// function : Rest
 // purpose :
 // =======================================================================
-TreeModel_ItemBasePtr VInspector_ItemFolderObject::createChild (int theRow, int theColumn)
+void TreeModel_ItemStream::Reset()
 {
-  if (parentItemIsContext())
-    return VInspector_ItemFolderObject::CreateItem (currentItem(), theRow, theColumn);
-  else
-    return VInspector_ItemSelectMgrFilter::CreateItem (currentItem(), theRow, theColumn);
+  myStream.str ("");
+  TreeModel_ItemBase::Reset();
 }
 
 // =======================================================================
-// function : Init
+// function : initValue
 // purpose :
 // =======================================================================
-void VInspector_ItemFolderObject::Init()
+QVariant TreeModel_ItemStream::initValue (const int theItemRole) const
 {
-  TreeModel_ItemBase::Init(); // to use getIO() without circling initialization
+  QVariant aParentValue = TreeModel_ItemBase::initValue (theItemRole);
+  if (aParentValue.isValid())
+    return aParentValue;
+
+  if (Column() != 0)
+    return QVariant();
+
+  if (theItemRole == Qt::ForegroundRole)
+    return QColor (Qt::darkBlue);
+
+  if (theItemRole != Qt::DisplayRole && theItemRole != Qt::EditRole && theItemRole != Qt::ToolTipRole)
+    return QVariant();
+
+  switch (Column())
+  {
+    case 0: return Properties() ? Properties()->Key().ToCString() : "";
+  }
+  return QVariant();
 }
 
 // =======================================================================
-// function : Reset
+// function : initStream
 // purpose :
 // =======================================================================
-void VInspector_ItemFolderObject::Reset()
+void TreeModel_ItemStream::initStream (Standard_OStream& theOStream) const
 {
-  VInspector_ItemBase::Reset();
+  if (!Properties())
+    return;
+
+  theOStream << Properties()->StreamValue();
 }
 
 // =======================================================================
 // function : initItem
 // purpose :
 // =======================================================================
-void VInspector_ItemFolderObject::initItem() const
+void TreeModel_ItemStream::initItem() const
 {
   if (IsInitialized())
     return;
-  const_cast<VInspector_ItemFolderObject*> (this)->Init();
+  const_cast<TreeModel_ItemStream*>(this)->Init();
 }
 
 // =======================================================================
-// function : parentItemIsContext
+// function : createChild
 // purpose :
 // =======================================================================
-bool VInspector_ItemFolderObject::parentItemIsContext() const
+TreeModel_ItemBasePtr TreeModel_ItemStream::createChild (int theRow, int theColumn)
 {
-  return itemDynamicCast<VInspector_ItemContext> (Parent());
+  return TreeModel_ItemStream::CreateItem (currentItem(), theRow, theColumn);
 }
diff --git a/tools/TreeModel/TreeModel_ItemStream.hxx b/tools/TreeModel/TreeModel_ItemStream.hxx
new file mode 100644 (file)
index 0000000..3d3f13e
--- /dev/null
@@ -0,0 +1,89 @@
+// Created on: 2020-01-25
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#ifndef TreeModel_ItemStream_H
+#define TreeModel_ItemStream_H
+
+#include <Standard.hxx>
+#include <NCollection_IndexedDataMap.hxx>
+#include <TCollection_AsciiString.hxx>
+
+#include <inspector/TreeModel_ItemBase.hxx>
+
+class TreeModel_ItemProperties;
+class TreeModel_ItemStream;
+
+typedef QExplicitlySharedDataPointer<TreeModel_ItemStream> TreeModel_ItemStreamPtr;
+
+//! \class TreeModel_ItemStream
+//! Parent item, that corresponds to AIS_InteractiveContext
+//! Children of the item are:
+//! - "Property" item to show context attributes such as selection filters and drawer properties
+//! - presentation items to show all interactive elements displayed/erased in the context
+class TreeModel_ItemStream : public TreeModel_ItemBase
+{
+public:
+
+  //! Creates an item wrapped by a shared pointer
+  static TreeModel_ItemStreamPtr CreateItem (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+  { return TreeModel_ItemStreamPtr (new TreeModel_ItemStream (theParent, theRow, theColumn)); }
+
+  //! Destructor
+  virtual ~TreeModel_ItemStream() {}
+
+  //! Sets the item internal initialized state to the true. If the item has internal values,
+  //! there should be initialized here.
+  Standard_EXPORT virtual void Init() Standard_OVERRIDE;
+
+  //! Resets the item and the child items content. Sets the initialized state to false.
+  //! If the item has internal values, there should be reseted here.
+  Standard_EXPORT virtual void Reset() Standard_OVERRIDE;
+
+  //! Returns number of displayed presentations
+  //! \return rows count
+  virtual int initRowCount() const Standard_OVERRIDE { initItem(); return 0; }
+
+  //! Returns item information for the given role. Fills internal container if it was not filled yet
+  //! \param theItemRole a value role
+  //! \return the value
+  Standard_EXPORT virtual QVariant initValue (const int theItemRole) const Standard_OVERRIDE;
+
+protected:
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  Standard_EXPORT virtual void initStream (Standard_OStream& theOStream) const;
+
+  //! Initializes the current item. It creates a backup of the specific item information
+  //! Does nothing as context has been already set into item
+  Standard_EXPORT virtual void initItem() const Standard_OVERRIDE;
+
+protected:
+
+  //! Creates a child item in the given position.
+  //! \param theRow the child row position
+  //! \param theColumn the child column position
+  //! \return the created item
+  Standard_EXPORT virtual TreeModel_ItemBasePtr createChild (int theRow, int theColumn) Standard_OVERRIDE;
+
+private:
+
+  //! Constructor
+  //! \param theParent a parent item
+  //! \param theRow the item row position in the parent item
+  //! \param theColumn the item column position in the parent item
+  Standard_EXPORT TreeModel_ItemStream(TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn);
+};
+
+#endif
index 72acad8..a87cbe6 100644 (file)
 #include <inspector/TreeModel_Tools.hxx>
 #include <inspector/TreeModel_VisibilityState.hxx>
 
+#include <Standard_Transient.hxx>
+
 #include <Standard_WarningsDisable.hxx>
 #include <QIcon>
 #include <Standard_WarningsRestore.hxx>
 
+const int COLUMN_NAME_WIDTH = 260;
+const int COLUMN_SIZE_WIDTH = 30;
+
 // =======================================================================
 // function : Constructor
 // purpose :
 // =======================================================================
 TreeModel_ModelBase::TreeModel_ModelBase (QObject* theParent)
-: QAbstractItemModel (theParent), m_pRootItem (0), m_pUseVisibilityColumn (false),
+: QAbstractItemModel (theParent), m_pUseVisibilityColumn (false),
   myVisibilityState (0)
 {
+  myVisibleIcon = QIcon (":/icons/item_visible.png");
+  myInvisibleIcon = QIcon (":/icons/item_invisible.png");
+}
+
+// =======================================================================
+// function :  InitColumns
+// purpose :
+// =======================================================================
+void TreeModel_ModelBase::InitColumns()
+{
+  SetHeaderItem (0, TreeModel_HeaderSection ("Name", COLUMN_NAME_WIDTH));
+  SetHeaderItem (1, TreeModel_HeaderSection ("Visibility", TreeModel_ModelBase::ColumnVisibilityWidth()));
+  SetHeaderItem (2, TreeModel_HeaderSection ("Row", COLUMN_SIZE_WIDTH));
 }
 
 // =======================================================================
@@ -104,14 +122,18 @@ QVariant TreeModel_ModelBase::data (const QModelIndex& theIndex, int theRole) co
     if (!myVisibilityState || !myVisibilityState->CanBeVisible (theIndex))
       return QVariant();
 
-    QVariant aValue = QIcon (myVisibilityState->IsVisible (theIndex) ? ":/icons/item_visible.png"
-                                                                     : ":/icons/item_invisible.png");
+    QVariant aValue = myVisibilityState->IsVisible (theIndex) ? myVisibleIcon : myInvisibleIcon;
     anItem->SetCustomData (aValue, theRole);
     return aValue;
   }
 
   TreeModel_ItemBasePtr anItem = GetItemByIndex (theIndex);
-  return anItem->data (theIndex, theRole);
+  QVariant anItemData = anItem->data (theIndex, theRole);
+
+  if (anItemData.isNull() && theRole == Qt::BackgroundRole && myHighlightedIndices.contains (theIndex))
+    anItemData = TreeModel_Tools::LightHighlightColor();
+
+  return anItemData;
 }
 
 // =======================================================================
@@ -174,6 +196,9 @@ int TreeModel_ModelBase::rowCount (const QModelIndex& theParent) const
   else
     aParentItem = GetItemByIndex (theParent);
 
+  if (!aParentItem)
+    return 0;
+
   return aParentItem ? aParentItem->rowCount() : 0;
 }
 
@@ -207,21 +232,76 @@ void TreeModel_ModelBase::EmitDataChanged (const QModelIndex& theTopLeft, const
 }
 
 // =======================================================================
-// function : SingleSelected
+// function : SetHeaderItem
 // purpose :
 // =======================================================================
-QModelIndex TreeModel_ModelBase::SingleSelected (const QModelIndexList& theIndices, const int theCellId,
-                                                 const Qt::Orientation theOrientation)
+void TreeModel_ModelBase::SetHeaderItem (const int theColumnId, const TreeModel_HeaderSection& theSection)
+{
+  if (theSection.IsEmpty())
+  {
+    // remove section
+    myHeaderValues.remove (theColumnId);
+    myRootItems.remove (theColumnId);
+  }
+
+  myHeaderValues[theColumnId] = theSection;
+  createRoot (theColumnId);
+}
+
+// =======================================================================
+// function : Selected
+// purpose :
+// =======================================================================
+QModelIndexList TreeModel_ModelBase::Selected (const QModelIndexList& theIndices, const int theCellId,
+                                               const Qt::Orientation theOrientation)
 {
-  QModelIndexList aFirstColumnSelectedIndices;
+  QModelIndexList aSelected;
   for (QModelIndexList::const_iterator anIndicesIt = theIndices.begin(); anIndicesIt != theIndices.end(); anIndicesIt++)
   {
     QModelIndex anIndex = *anIndicesIt;
     if ((theOrientation == Qt::Horizontal && anIndex.column() == theCellId) ||
         (theOrientation == Qt::Vertical && anIndex.row() == theCellId))
-      aFirstColumnSelectedIndices.append (anIndex);
+      aSelected.append (anIndex);
   }
-  return aFirstColumnSelectedIndices.size() == 1 ? aFirstColumnSelectedIndices.first() : QModelIndex();
+  return aSelected;
+}
+
+// =======================================================================
+// function : SingleSelected
+// purpose :
+// =======================================================================
+QModelIndex TreeModel_ModelBase::SingleSelected (const QModelIndexList& theIndices, const int theCellId,
+                                                 const Qt::Orientation theOrientation)
+{
+  QModelIndexList aSelected = Selected (theIndices, theCellId, theOrientation);
+  return aSelected.size() == 1 ? aSelected.first() : QModelIndex();
+}
+
+// =======================================================================
+// function :  SelectedItems
+// purpose :
+// =======================================================================
+QList<TreeModel_ItemBasePtr> TreeModel_ModelBase::SelectedItems (const QModelIndexList& theIndices)
+{
+  QList<TreeModel_ItemBasePtr> anItems;
+
+  for (QModelIndexList::const_iterator anIndicesIt = theIndices.begin(); anIndicesIt != theIndices.end(); anIndicesIt++)
+  {
+    TreeModel_ItemBasePtr anItem = TreeModel_ModelBase::GetItemByIndex (*anIndicesIt);
+    if (!anItem || anItems.contains (anItem))
+      continue;
+    anItems.append (anItem);
+  }
+  return anItems;
+}
+
+// =======================================================================
+// function : createRoot
+// purpose :
+// =======================================================================
+void TreeModel_ModelBase::createRoot (const int theColumnId)
+{
+  myRootItems.insert (theColumnId, createRootItem (theColumnId));
 }
 
 // =======================================================================
index d304c16..b8a31e9 100644 (file)
@@ -20,6 +20,8 @@
 #include <inspector/TreeModel_ItemBase.hxx>
 #include <inspector/TreeModel_HeaderSection.hxx>
 
+#include <NCollection_List.hxx>
+
 #include <Standard_WarningsDisable.hxx>
 #include <QAbstractItemModel>
 #include <QExplicitlySharedDataPointer>
@@ -48,6 +50,10 @@ public:
   //! Destructor
   virtual ~TreeModel_ModelBase() {}
 
+  //! Creates model columns and root items.
+  //! Default columns are: [0] - Name, [1] - Visibility, [2] - Row
+  Standard_EXPORT virtual void InitColumns();
+
   //! Returns the item shared pointer by the model index
   //! if it is in the index internal pointer
   //! @param theIndex a model index
@@ -59,7 +65,7 @@ public:
 
   //! Returns the model root item.
   //! It is realized for OCAFBrowser
-  virtual TreeModel_ItemBasePtr RootItem (const int theColumn) const { (void)theColumn; return m_pRootItem; }
+  TreeModel_ItemBasePtr RootItem (const int theColumn) const { return myRootItems[theColumn]; }
 
   //! Emits the layoutChanged signal from outside of this class
   Standard_EXPORT void EmitLayoutChanged();
@@ -76,14 +82,21 @@ public:
   //! \param theState state
   bool IsUseVisibilityColumn() const { return m_pUseVisibilityColumn; }
 
-  //!< Fills visibility state checker
-  //!< \param theController the checker interface
+  //! Fills visibility state checker
+  //! \param theController the checker interface
   void SetVisibilityState (TreeModel_VisibilityState* theController) { myVisibilityState = theController; }
 
-  //!< Returns visibility state checker
-  //!< \return the checker interface
+  //! Returns visibility state checker
+  //! \return the checker interface
   TreeModel_VisibilityState* GetVisibilityState () const { return myVisibilityState; }
 
+  //! Returns true if the tree view model contains highlighted items. This highlight is set manually.
+  bool HasHighlighted() { return !myHighlightedIndices.isEmpty(); }
+
+  //! Sets items of the indices highlighted in the model.
+  //! \param theIndices a list of tree model indices
+  void SetHighlighted (const QModelIndexList& theIndices = QModelIndexList()) { myHighlightedIndices = theIndices; }
+
   //! Returns the index of the item in the model specified by the given row, column and parent index.
   //! Saves an internal pointer at the createIndex. This pointer is a shared pointer to the class,
   //! that realizes a base item interface. If the parent is invalid, a root item is used, otherwise a new item
@@ -130,11 +143,10 @@ public:
   //! \return header section values container
   TreeModel_HeaderSection GetHeaderItem (const int theColumnId) const { return myHeaderValues[theColumnId]; }
 
-  //! Set header properties item.
+  //! Sets header properties item.
   //! \param theColumnId a column index
   //! \param theSection a section value
-  void SetHeaderItem (const int theColumnId, const TreeModel_HeaderSection& theSection)
-  { myHeaderValues[theColumnId] = theSection; createRootItem (theColumnId); }
+  Standard_EXPORT void SetHeaderItem (const int theColumnId, const TreeModel_HeaderSection& theSection);
 
   //! Returns count of columns in the model
   //! \param theParent an index of the parent item
@@ -146,6 +158,14 @@ public:
   //! \return integer value
   static int ColumnVisibilityWidth() { return 20; }
 
+  //! Returns selected items in the cell of given orientation.
+  //! \param theIndices a container of selected indices
+  //! \param theCellId column index if orientation is horizontal, row index otherwise
+  //! \param theOrientation an orientation to apply the cell index
+  //! \return model indices from the list
+  Standard_EXPORT static QModelIndexList Selected (const QModelIndexList& theIndices, const int theCellId,
+                                                   const Qt::Orientation theOrientation = Qt::Horizontal);
+
   //! Returns single selected item in the cell of given orientation. If the orientation is Horizontal,
   //! in the cell id colum, one row should be selected.
   //! \param theIndices a container of selected indices
@@ -155,24 +175,38 @@ public:
   Standard_EXPORT static QModelIndex SingleSelected (const QModelIndexList& theIndices, const int theCellId,
                                                      const Qt::Orientation theOrientation = Qt::Horizontal);
 
+  //! Returns selected tree model items for indices.
+  //! \param theIndices a container of selected indices
+  //! \return model items from the list
+  Standard_EXPORT static QList<TreeModel_ItemBasePtr> SelectedItems (const QModelIndexList& theIndices);
+
 protected:
   //! Creates root item
   //! \param theColumnId index of a column
-  virtual void createRootItem (const int theColumnId) = 0;
+  virtual TreeModel_ItemBasePtr createRootItem (const int theColumnId) = 0;
 
   //! Converts the item shared pointer to void* type
   //! \param theItem
   //!  \return an item pointer
   Standard_EXPORT static void* getIndexValue (const TreeModel_ItemBasePtr& theItem);
 
+private:
+  //! Creates root item
+  //! \param theColumnId index of a column
+  Standard_EXPORT void createRoot (const int theColumnId);
+
 protected:
 
-  TreeModel_ItemBasePtr m_pRootItem; //!< the model root item. It should be created in the
+  QMap<int, TreeModel_ItemBasePtr> myRootItems; //!< container of root items, for each column own root item
   QMap<int, TreeModel_HeaderSection> myHeaderValues; //!< header values
   //!< model subclass. The model is fulfilled by this item content
 
   bool m_pUseVisibilityColumn; //!< the state whether column=0 is reserved for Visibility state
   TreeModel_VisibilityState* myVisibilityState; //!< the interface of item visibility
+  QIcon myVisibleIcon; //!< icon of visible state
+  QIcon myInvisibleIcon; //!< icon of invisible state
+
+  QModelIndexList myHighlightedIndices; //!< tree model indices that should be visualized as highlighted
 };
 
 #endif
index c1b217b..e3d8b2a 100644 (file)
@@ -172,13 +172,7 @@ void TreeModel_Tools::UseVisibilityColumn (QTreeView* theTreeView, const bool th
   TreeModel_ModelBase* aModel = dynamic_cast<TreeModel_ModelBase*> (theTreeView->model());
   aModel->SetHeaderItem (TreeModel_ColumnType_Visibility,
     TreeModel_HeaderSection ("Visibility", TreeModel_ModelBase::ColumnVisibilityWidth()));
-
-  TreeModel_VisibilityState* aVisibilityState = aModel->GetVisibilityState ();
-
-  aModel->SetUseVisibilityColumn (true);
-  if (theActive && aVisibilityState)
-    QObject::connect (theTreeView, SIGNAL (clicked (const QModelIndex&)), 
-                      aVisibilityState, SLOT (OnClicked(const QModelIndex&)));
+  aModel->SetUseVisibilityColumn (theActive);
 }
 
 // =======================================================================
@@ -211,3 +205,53 @@ QString TreeModel_Tools::CutString (const QString& theText, const int theWidth,
 
   return aLength < theText.length() ? theText.mid (0, aLength) + theTail : theText;
 }
+
+// =======================================================================
+// function : LightHighlightColor
+// purpose :
+// =======================================================================
+QColor TreeModel_Tools::LightHighlightColor()
+{
+  QWidget aWidget;
+  QPalette aPalette = aWidget.palette();
+  return aPalette.highlight().color().lighter();
+}
+
+// =======================================================================
+// function : SetExpandedTo
+// purpose :
+// =======================================================================
+void TreeModel_Tools::SetExpandedTo (QTreeView* theTreeView, const QModelIndex& theIndex)
+{
+  QAbstractItemModel* aModel = theTreeView->model();
+
+  QModelIndex aParent = aModel->parent (theIndex);
+  while (aParent.isValid())
+  {
+    theTreeView->setExpanded (aParent, true);
+    aParent = aModel->parent (aParent);
+  }
+}
+
+// =======================================================================
+// function : setExpanded
+// purpose :
+// =======================================================================
+void TreeModel_Tools::SetExpanded (QTreeView* theTreeView, const QModelIndex& theIndex, const bool isExpanded,
+                                   int& theLevels)
+{
+  bool isToExpand = theLevels == -1 || theLevels > 0;
+  if (!isToExpand)
+    return;
+
+  theTreeView->setExpanded (theIndex, isExpanded);
+  if (theLevels != -1)
+    theLevels--;
+
+  QAbstractItemModel* aModel = theTreeView->model();
+  for (int aRowId = 0, aRows = aModel->rowCount (theIndex); aRowId < aRows; aRowId++)
+  {
+    int aLevels = theLevels;
+    SetExpanded (theTreeView, aModel->index (aRowId, 0, theIndex), isExpanded, aLevels);
+  }
+}
index 39047a2..a2c260c 100644 (file)
@@ -22,7 +22,9 @@
 #include <Standard_WarningsDisable.hxx>
 #include <QApplication>
 #include <QByteArray>
+#include <QColor>
 #include <QMap>
+#include <QModelIndex>
 #include <QString>
 #include <QStyle>
 #include <Standard_WarningsRestore.hxx>
@@ -49,22 +51,23 @@ public:
 
   //! Returns header margin, defined in style settings of application
   //! \return integer value
-  Standard_EXPORT static int HeaderSectionMargin() { return qApp->style()->pixelMetric (QStyle::PM_HeaderMargin); }
+  static int HeaderSectionMargin() { return qApp->style()->pixelMetric (QStyle::PM_HeaderMargin); }
 
-  //! Save state of three view in a container in form: key, value. It saves:
-  //! - visibiblity of columns,
+  //! Saves state of tree view in a container in form: key, value. It saves:
+  //! - visibility of columns,
   //! - columns width
   //! \param theTreeView a view instance
   //! \param theItems [out] properties
   //! \param thePrefix peference item prefix
   Standard_EXPORT static void SaveState (QTreeView* theTreeView, QMap<QString, QString>& theItems,
                                          const QString& thePrefix = QString());
-  //! Restore state of three view by a container
+
+  //! Restores state of tree view by a container
   //! \param theTreeView a view instance
   //! \param theKey property key
   //! \param theValue property value
   //! \param thePrefix peference item prefix
-  //! \return boolean value whether the property is applyed to the tree view
+  //! \return boolean value whether the property is applied to the tree view
   Standard_EXPORT static bool RestoreState (QTreeView* theTreeView, const QString& theKey, const QString& theValue,
                                             const QString& thePrefix = QString());
 
@@ -90,6 +93,24 @@ public:
   //! \param theWidth width value, if -1, default value is used
   //! \param theTail symbols added to the end of the cut string
   Standard_EXPORT static QString CutString (const QString& theText, const int theWidth = -1, const QString& theTail = "...");
+
+  //! Returns light highlight color
+  //! \returns Qt color
+  Standard_EXPORT static QColor LightHighlightColor();
+
+  //! Makes the view expanded from the root till the index
+  Standard_EXPORT static void SetExpandedTo (QTreeView* theTreeView, const QModelIndex& theIndex);
+
+  //! Expands items in tree view staring from the index recursive in given number of levels
+  //! \param theTreeView an OCAF tree view
+  //! \param theParentIndex an index which children should be expanded
+  //! \param isExpanded a boolean state if the item should be expanded or collapsed
+  //! \param theLevels a number of levels to be expanded, or -1 for all levels
+  Standard_EXPORT static void SetExpanded (QTreeView* theTreeView,
+                                           const QModelIndex& theIndex,
+                                           const bool isExpanded,
+                                           int& theLevels);
+
 };
 
 #endif
index 599e635..0639291 100644 (file)
 // function : OnClicked
 // purpose :
 // =======================================================================
-void TreeModel_VisibilityState::OnClicked (const QModelIndex& theIndex)
+bool TreeModel_VisibilityState::processClicked (const QModelIndex& theIndex)
 {
   if (theIndex.column() != TreeModel_ColumnType_Visibility)
-    return;
+    return false;
 
   if (!CanBeVisible (theIndex))
-    return;
+    return false;
 
   SetVisible (theIndex, !IsVisible (theIndex), true);
-  emit itemClicked (theIndex);
+  return true;
 }
index 9718b59..962e242 100644 (file)
 #ifndef TreeModel_VisibilityState_H
 #define TreeModel_VisibilityState_H
 
-#include <inspector/TreeModel.hxx>
 #include <inspector/TreeModel_ModelBase.hxx>
 #include <inspector/TreeModel_ColumnType.hxx>
 
 #include <Standard.hxx>
 #include <Standard_Macro.hxx>
 
-#include <Standard_WarningsDisable.hxx>
-#include <QObject>
-#include <QString>
-#include <Standard_WarningsRestore.hxx>
-
 //! \class TreeModel_VisibilityState
 //! \brief Interface that provides connection between model and visualization control to:
 //! - know whether the model item is visible
 //! - change visibility of the model item
-class TREEMODEL_EXPORT TreeModel_VisibilityState : public QObject
+class TreeModel_VisibilityState
 {
-  Q_OBJECT
 public:
   //! Constructor
   TreeModel_VisibilityState (TreeModel_ModelBase* theModel) : myModel (theModel) {}
@@ -59,23 +52,19 @@ public:
   //! \return boolean value
   virtual bool IsVisible (const QModelIndex& theIndex) const = 0;
 
-public slots:
+protected:
   //! Processes the mouse clicked on the index.
   //! It changes the item visibility if model allows to change it.
   //! \theIndex tree model index
-  void OnClicked (const QModelIndex& theIndex);
-
-signals:
-  //! Signal after OnClicked is performed
-  //! \theIndex tree model index
-  void itemClicked (const QModelIndex& theIndex);
+  //! \return true if click is processed
+  Standard_EXPORT bool processClicked (const QModelIndex& theIndex);
 
 protected:
   //! tree view model
   TreeModel_ModelBase* getModel() const { return myModel; }
 
 private:
-  TreeModel_ModelBase* myModel; //! tree view model
+  TreeModel_ModelBase* myModel; //!< tree view model
 };
 
 #endif
index 68312f8..0394262 100644 (file)
@@ -1,4 +1,6 @@
 VInspector.qrc
+VInspectorAPI_CallBack.cxx
+VInspectorAPI_CallBack.hxx
 VInspector_CallBack.cxx
 VInspector_CallBack.hxx
 VInspector_CallBackMode.hxx
@@ -8,10 +10,6 @@ VInspector_ItemBase.cxx
 VInspector_ItemBase.hxx
 VInspector_ItemContext.cxx
 VInspector_ItemContext.hxx
-VInspector_ItemFolderObject.cxx
-VInspector_ItemFolderObject.hxx
-VInspector_ItemEntityOwner.cxx
-VInspector_ItemEntityOwner.hxx
 VInspector_ItemHistoryElement.cxx
 VInspector_ItemHistoryElement.hxx
 VInspector_ItemHistoryRoot.cxx
@@ -21,13 +19,6 @@ VInspector_ItemHistoryType.hxx
 VInspector_ItemHistoryTypeInfo.hxx
 VInspector_ItemPresentableObject.cxx
 VInspector_ItemPresentableObject.hxx
-VInspector_ItemSelection.cxx
-VInspector_ItemSelection.hxx
-VInspector_ItemSelectMgrFilter.cxx
-VInspector_ItemSelectMgrFilter.hxx
-VInspector_ItemSensitiveEntity.cxx
-VInspector_ItemSensitiveEntity.hxx
-VInspector_SelectionType.hxx
 VInspector_ToolActionType.hxx
 VInspector_ToolBar.cxx
 VInspector_ToolBar.hxx
@@ -39,5 +30,3 @@ VInspector_ViewModelHistory.cxx
 VInspector_ViewModelHistory.hxx
 VInspector_Window.cxx
 VInspector_Window.hxx
-VInspectorAPI_CallBack.cxx
-VInspectorAPI_CallBack.hxx
index bdb5fb3..accb7a3 100644 (file)
 
 #include <inspector/VInspectorAPI_CallBack.hxx>
 
-#if OCC_VERSION_HEX <= 0x060901
-IMPLEMENT_STANDARD_HANDLE(VInspectorAPI_CallBack, Standard_Transient)
 IMPLEMENT_STANDARD_RTTIEXT(VInspectorAPI_CallBack, Standard_Transient)
-#else
-IMPLEMENT_STANDARD_RTTIEXT(VInspectorAPI_CallBack, Standard_Transient)
-#endif
 
 // =======================================================================
 // function : Constructor
index fb63800..0b8e812 100644 (file)
 
 #include <Standard.hxx>
 #include <Standard_Integer.hxx>
-#include <Standard_Version.hxx>
 #include <Standard_Transient.hxx>
 #include <TColStd_ListOfInteger.hxx>
 #include <TopoDS_Shape.hxx>
 
-#if OCC_VERSION_HEX > 0x060901
 class AIS_InteractiveObject;
-#else
-#include <AIS_InteractiveObject.hxx>
-#endif
 class SelectMgr_EntityOwner;
 
-DEFINE_STANDARD_HANDLE(VInspectorAPI_CallBack, Standard_Transient)
-
 //! \class VInspectorAPI_CallBack
 //! API of AIS_InteractiveContext methods to provide information about the actions
 class VInspectorAPI_CallBack : public Standard_Transient
@@ -96,11 +89,7 @@ public:
   //! Processing method of context
   virtual void ShiftSelect() = 0;
 
-#if OCC_VERSION_HEX <= 0x060901
-  DEFINE_STANDARD_RTTI(VInspectorAPI_CallBack)
-#else
   DEFINE_STANDARD_RTTIEXT(VInspectorAPI_CallBack, Standard_Transient)
-#endif
 };
 
 #endif
index 481ec6f..a910141 100644 (file)
 #include <AIS_InteractiveObject.hxx>
 
 #include <SelectMgr_EntityOwner.hxx>
-#include <Standard_Version.hxx>
 
 #include <inspector/VInspector_CallBackMode.hxx>
 #include <inspector/VInspector_Tools.hxx>
 #include <inspector/VInspector_ViewModelHistory.hxx>
 
-#if OCC_VERSION_HEX <= 0x060901
-IMPLEMENT_STANDARD_HANDLE(VInspector_CallBack, Standard_Transient)
 IMPLEMENT_STANDARD_RTTIEXT(VInspector_CallBack, VInspectorAPI_CallBack)
-#else
-IMPLEMENT_STANDARD_RTTIEXT(VInspector_CallBack, VInspectorAPI_CallBack)
-#endif
 
 // =======================================================================
 // function : Activate
@@ -38,7 +32,18 @@ IMPLEMENT_STANDARD_RTTIEXT(VInspector_CallBack, VInspectorAPI_CallBack)
 // =======================================================================
 void VInspector_CallBack::Activate (Handle(AIS_InteractiveObject) thePrs, const Standard_Integer theMode)
 {
-  QList<QVariant> anInfo = VInspector_Tools::GetInfo (thePrs);
+  if (!myHistoryModel)
+    return;
+
+  QList<QVariant> anInfo;
+  if (!thePrs.IsNull())
+    anInfo = VInspector_Tools::GetInfo (thePrs);
+  else
+  {
+    anInfo.append ("Activate");
+    anInfo.append ("");
+    anInfo.append ("");
+  }
   anInfo[0] = QString ("%1: %2").arg (anInfo[0].toString()).arg (theMode);
   myHistoryModel->AddElement (VInspector_CallBackMode_Activate, anInfo);
 }
@@ -49,6 +54,8 @@ void VInspector_CallBack::Activate (Handle(AIS_InteractiveObject) thePrs, const
 // =======================================================================
 void VInspector_CallBack::AddOrRemoveSelected (const TopoDS_Shape& theShape)
 {
+  if (!myHistoryModel)
+    return;
   QList<QVariant> aValues;
   aValues.append (""); // Name
   aValues.append (""); // Pointer
@@ -63,6 +70,8 @@ void VInspector_CallBack::AddOrRemoveSelected (const TopoDS_Shape& theShape)
 // =======================================================================
 void VInspector_CallBack::AddOrRemoveSelected (Handle(AIS_InteractiveObject) thePrs)
 {
+  if (!myHistoryModel)
+    return;
   QList<QVariant> aValues = VInspector_Tools::GetInfo (thePrs);
   aValues.append (VInspector_Tools::GetSelectedInfoPointers (myContext)); // SelectionInfo
   myHistoryModel->AddElement (VInspector_CallBackMode_AddOrRemoveSelected, aValues);
@@ -74,9 +83,11 @@ void VInspector_CallBack::AddOrRemoveSelected (Handle(AIS_InteractiveObject) the
 // =======================================================================
 void VInspector_CallBack::AddOrRemoveSelected (Handle(SelectMgr_EntityOwner) theOwner)
 {
+  if (!myHistoryModel)
+    return;
   QList<QVariant> aValues;
   aValues.append (""); // Name
-  aValues.append (VInspector_Tools::GetPointerInfo (theOwner, true).ToCString()); // Pointer
+  aValues.append (Standard_Dump::GetPointerInfo (theOwner, true).ToCString()); // Pointer
   aValues.append (""); // Shape type
   aValues.append (VInspector_Tools::GetSelectedInfoPointers (myContext)); // SelectionInfo
 
@@ -89,6 +100,8 @@ void VInspector_CallBack::AddOrRemoveSelected (Handle(SelectMgr_EntityOwner) the
 // =======================================================================
 void VInspector_CallBack::ClearSelected()
 {
+  if (!myHistoryModel)
+    return;
   QList<QVariant> aValues;
   myHistoryModel->AddElement (VInspector_CallBackMode_ClearSelected, aValues);
 }
@@ -99,6 +112,8 @@ void VInspector_CallBack::ClearSelected()
 // =======================================================================
 void VInspector_CallBack::MoveTo (const Standard_Integer/* theXPix*/, const Standard_Integer/* theYPix*/)
 {
+  if (!myHistoryModel)
+    return;
   QList<QVariant> aValues;
   aValues = VInspector_Tools::GetHighlightInfo (myContext);
   myHistoryModel->AddElement (VInspector_CallBackMode_MoveTo, aValues);
@@ -110,6 +125,8 @@ void VInspector_CallBack::MoveTo (const Standard_Integer/* theXPix*/, const Stan
 // =======================================================================
 void VInspector_CallBack::Select()
 {
+  if (!myHistoryModel)
+    return;
   QList<QVariant> aValues;
   aValues = VInspector_Tools::GetSelectedInfo (myContext);
   myHistoryModel->AddElement (VInspector_CallBackMode_Select, aValues);
@@ -121,6 +138,8 @@ void VInspector_CallBack::Select()
 // =======================================================================
 void VInspector_CallBack::ShiftSelect()
 {
+  if (!myHistoryModel)
+    return;
   QList<QVariant> aValues;
   aValues = VInspector_Tools::GetSelectedInfo (myContext);
   myHistoryModel->AddElement (VInspector_CallBackMode_ShiftSelect, aValues);
index 57bdeae..668e1a8 100644 (file)
@@ -26,8 +26,6 @@
 class AIS_InteractiveObject;
 class SelectMgr_EntityOwner;
 
-DEFINE_STANDARD_HANDLE(VInspector_CallBack, VInspectorAPI_CallBack)
-
 //! \class VInspector_CallBack
 //! Updates inspector state on actions in context
 class VInspector_CallBack : public VInspectorAPI_CallBack
@@ -38,27 +36,27 @@ public:
   VInspector_CallBack() : VInspectorAPI_CallBack() {}
 
   //! Destructor
-  virtual ~VInspector_CallBack() Standard_OVERRIDE {}
+  virtual ~VInspector_CallBack() {}
 
   //! Appends displayed presentation into history model
   //! \param thePrs the presentation
   virtual void Display (Handle(AIS_InteractiveObject) thePrs) Standard_OVERRIDE
-  { myHistoryModel->AddElement (VInspector_CallBackMode_Display, VInspector_Tools::GetInfo (thePrs)); }
+  { if (myHistoryModel != 0) myHistoryModel->AddElement (VInspector_CallBackMode_Display, VInspector_Tools::GetInfo (thePrs)); }
 
   //! Appends redisplayed presentation into history model
   //! \param thePrs the presentation
   virtual void Redisplay (Handle(AIS_InteractiveObject) thePrs) Standard_OVERRIDE
-  { myHistoryModel->AddElement (VInspector_CallBackMode_Redisplay, VInspector_Tools::GetInfo (thePrs)); }
+  { if (myHistoryModel != 0) myHistoryModel->AddElement (VInspector_CallBackMode_Redisplay, VInspector_Tools::GetInfo (thePrs)); }
 
   //! Appends removed presentation into history model
   //! \param thePrs the presentation
   virtual void Remove (Handle(AIS_InteractiveObject) thePrs) Standard_OVERRIDE
-  { myHistoryModel->AddElement (VInspector_CallBackMode_Remove, VInspector_Tools::GetInfo (thePrs)); }
+  { if (myHistoryModel != 0) myHistoryModel->AddElement (VInspector_CallBackMode_Remove, VInspector_Tools::GetInfo (thePrs)); }
 
   //! Appends loaded presentation into history model
   //! \param thePrs the presentation
   virtual void Load (Handle(AIS_InteractiveObject) thePrs) Standard_OVERRIDE
-  { myHistoryModel->AddElement (VInspector_CallBackMode_Load, VInspector_Tools::GetInfo (thePrs)); }
+  { if (myHistoryModel != 0) myHistoryModel->AddElement (VInspector_CallBackMode_Load, VInspector_Tools::GetInfo (thePrs)); }
 
   //! Appends information about modes activation
   //! \param thePrs the presentation
@@ -75,13 +73,14 @@ public:
   //! Appends information about modes deactivation
   //! \param thePrs the presentation
   virtual void Deactivate (Handle(AIS_InteractiveObject) thePrs) Standard_OVERRIDE
-  { myHistoryModel->AddElement (VInspector_CallBackMode_Deactivate, VInspector_Tools::GetInfo (thePrs)); }
+  { if (myHistoryModel != 0) myHistoryModel->AddElement (VInspector_CallBackMode_Deactivate, VInspector_Tools::GetInfo (thePrs)); }
 
   //! Appends information about modes deactivation
   //! \param thePrs the presentation
   //! \param theMode the selection mode
   virtual void Deactivate (Handle(AIS_InteractiveObject) thePrs, const Standard_Integer theMode) Standard_OVERRIDE
-  { (void)theMode; myHistoryModel->AddElement (VInspector_CallBackMode_Deactivate, VInspector_Tools::GetInfo (thePrs)); }
+  { (void)theMode;
+    if (myHistoryModel != 0) myHistoryModel->AddElement (VInspector_CallBackMode_Deactivate, VInspector_Tools::GetInfo (thePrs)); }
 
   //! Appends information about selection change
   //! \param theShape the selected shape
@@ -101,7 +100,7 @@ public:
   //! Appends information about selection clear
   //! \param thePrs the selected presentation
   virtual void ClearSelected (Handle(AIS_InteractiveObject) thePrs) Standard_OVERRIDE
-  { myHistoryModel->AddElement (VInspector_CallBackMode_ClearSelected, VInspector_Tools::GetInfo (thePrs)); }
+  { if (myHistoryModel != 0) myHistoryModel->AddElement (VInspector_CallBackMode_ClearSelected, VInspector_Tools::GetInfo (thePrs)); }
 
   //! Appends information about moving to point
   //! \param theXPix a pixels on horizontal
@@ -111,7 +110,7 @@ public:
   //! Appends information about setting selection
   //! \param thePrs the selected presentation
   virtual void SetSelected (Handle(AIS_InteractiveObject) thePrs) Standard_OVERRIDE
-  { myHistoryModel->AddElement (VInspector_CallBackMode_SetSelected, VInspector_Tools::GetInfo (thePrs)); }
+  { if (myHistoryModel != 0) myHistoryModel->AddElement (VInspector_CallBackMode_SetSelected, VInspector_Tools::GetInfo (thePrs)); }
 
   //! Appends information about select
   Standard_EXPORT virtual void Select() Standard_OVERRIDE;