0029018: Documentation - Provide user guide for Qt browser STR_GMBH_720 V7_2_0
authornds <nds@opencascade.com>
Mon, 28 Aug 2017 09:29:29 +0000 (12:29 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 31 Aug 2017 12:47:56 +0000 (15:47 +0300)
Documentation is added in a new "Inspector" page of "User Guides".
Inspector plugins has some improvements by the documentation needs.
New DRAW scripts are implemented for 'tinspector' command.

117 files changed:
dox/FILES_HTML.txt
dox/FILES_PDF.txt
dox/dev_guides/building/cmake/cmake.md
dox/user_guides/draw_test_harness/draw_test_harness.md
dox/user_guides/inspector/images/3DView.png [new file with mode: 0644]
dox/user_guides/inspector/images/3DView_elements.svg [new file with mode: 0644]
dox/user_guides/inspector/images/TStandaloneEXE.png [new file with mode: 0644]
dox/user_guides/inspector/images/TStandaloneEXE_open.png [new file with mode: 0644]
dox/user_guides/inspector/images/VStudio_projects.png [new file with mode: 0644]
dox/user_guides/inspector/images/dfbrowser.png [new file with mode: 0644]
dox/user_guides/inspector/images/dfbrowser_elements.svg [new file with mode: 0644]
dox/user_guides/inspector/images/dfbrowser_selection_in_tree_view.svg [new file with mode: 0644]
dox/user_guides/inspector/images/display_additional_presentation.png [new file with mode: 0644]
dox/user_guides/inspector/images/display_main_presentation.png [new file with mode: 0644]
dox/user_guides/inspector/images/drawexe_tinspector.png [new file with mode: 0644]
dox/user_guides/inspector/images/dump_attribute.png [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_array.png [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_item_selection.svg [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_label.png [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_named_data.png [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_simple_type.png [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_tnaming_named_shape.png [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_tnaming_naming.png [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_tnaming_used_shapes.png [new file with mode: 0644]
dox/user_guides/inspector/images/property_panel_tree_node.png [new file with mode: 0644]
dox/user_guides/inspector/images/search.png [new file with mode: 0644]
dox/user_guides/inspector/images/shapeview.png [new file with mode: 0644]
dox/user_guides/inspector/images/shapeview_elements.svg [new file with mode: 0644]
dox/user_guides/inspector/images/tinspector_elements.svg [new file with mode: 0644]
dox/user_guides/inspector/images/vinspector.png [new file with mode: 0644]
dox/user_guides/inspector/images/vinspector_elements.svg [new file with mode: 0644]
dox/user_guides/inspector/inspector.md [new file with mode: 0644]
dox/user_guides/user_guides.md
samples/tools/TStandalone/CMakeLists.txt
tests/tools/dfbrowser/A2
tests/tools/dfbrowser/A3 [new file with mode: 0644]
tests/tools/dfbrowser/A4 [new file with mode: 0644]
tests/tools/dfbrowser/A5 [new file with mode: 0644]
tests/tools/dfbrowser/A6 [new file with mode: 0644]
tests/tools/grids.list
tests/tools/shapeview/A1 [new file with mode: 0644]
tests/tools/shapeview/A2 [new file with mode: 0644]
tests/tools/vinspector/A1 [new file with mode: 0644]
tests/tools/vinspector/A2 [new file with mode: 0644]
tools/DFBrowser/DFBrowser_HighlightDelegate.cxx
tools/DFBrowser/DFBrowser_ItemRole.hxx
tools/DFBrowser/DFBrowser_SearchLine.cxx
tools/DFBrowser/DFBrowser_SearchView.cxx
tools/DFBrowser/DFBrowser_TreeLevelLine.cxx
tools/DFBrowser/DFBrowser_TreeLevelLineDelegate.cxx
tools/DFBrowser/DFBrowser_TreeLevelView.cxx
tools/DFBrowser/DFBrowser_TreeLevelViewModel.cxx
tools/DFBrowser/DFBrowser_TreeModel.cxx
tools/DFBrowser/DFBrowser_Window.cxx
tools/DFBrowser/DFBrowser_Window.hxx
tools/DFBrowserPane/DFBrowserPane_AttributePane.cxx
tools/DFBrowserPane/DFBrowserPane_AttributePane.hxx
tools/DFBrowserPane/DFBrowserPane_AttributePaneModel.cxx
tools/DFBrowserPane/DFBrowserPane_AttributePaneModel.hxx
tools/DFBrowserPane/DFBrowserPane_HelperArray.cxx
tools/DFBrowserPane/DFBrowserPane_HelperArray.hxx
tools/DFBrowserPane/DFBrowserPane_HelperExport.cxx
tools/DFBrowserPane/DFBrowserPane_HelperGroupContent.cxx [deleted file]
tools/DFBrowserPane/DFBrowserPane_HelperGroupContent.hxx [deleted file]
tools/DFBrowserPane/DFBrowserPane_ItemRole.hxx
tools/DFBrowserPane/DFBrowserPane_OcctEnumType.hxx
tools/DFBrowserPane/DFBrowserPane_TDFReference.cxx
tools/DFBrowserPane/DFBrowserPane_TDFTagSource.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdAsciiString.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdBooleanArray.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdBooleanList.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdComment.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdCurrent.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdExpression.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdExtStringList.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdIntPackedMap.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdInteger.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdIntegerList.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdName.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdNamedData.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdNamedData.hxx
tools/DFBrowserPane/DFBrowserPane_TDataStdReal.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdRealList.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdReferenceArray.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdReferenceList.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNode.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNodeItem.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNodeItem.hxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNodeModel.cxx
tools/DFBrowserPane/DFBrowserPane_TDataStdTreeNodeModel.hxx
tools/DFBrowserPane/DFBrowserPane_TDataStdUAttribute.cxx
tools/DFBrowserPane/DFBrowserPane_TDocStdOwner.cxx
tools/DFBrowserPane/DFBrowserPane_TDocStdXLink.cxx
tools/DFBrowserPane/DFBrowserPane_TFunctionFunction.cxx
tools/DFBrowserPane/DFBrowserPane_TNamingNamedShape.cxx
tools/DFBrowserPane/DFBrowserPane_TNamingNaming.cxx
tools/DFBrowserPane/DFBrowserPane_TNamingUsedShapes.cxx
tools/DFBrowserPane/DFBrowserPane_TNamingUsedShapes.hxx
tools/DFBrowserPane/DFBrowserPane_TPrsStdAISPresentation.cxx
tools/DFBrowserPane/DFBrowserPane_TPrsStdAISViewer.cxx
tools/DFBrowserPane/DFBrowserPane_TableView.cxx
tools/DFBrowserPane/DFBrowserPane_TableView.hxx
tools/DFBrowserPane/DFBrowserPane_Tools.cxx
tools/DFBrowserPane/DFBrowserPane_Tools.hxx
tools/DFBrowserPane/FILES
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_XCAFDocArea.cxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_XCAFDocCentroid.cxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_XCAFDocColor.cxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_XCAFDocDatum.cxx
tools/DFBrowserPaneXDE/DFBrowserPaneXDE_XCAFDocShapeMapTool.cxx
tools/ShapeView/ShapeView_Window.cxx
tools/TInspector/TInspector_Window.cxx
tools/ToolsDraw/ToolsDraw.cxx
tools/TreeModel/TreeModel_ItemRole.hxx
tools/TreeModel/TreeModel_MessageDialog.cxx
tools/VInspector/VInspector_ToolBar.cxx
tools/VInspector/VInspector_Window.cxx

index 9afdcea..2c1be0e 100644 (file)
@@ -32,6 +32,7 @@ user_guides/xde/xde.md
 user_guides/ocaf/ocaf.md
 user_guides/tobj/tobj.md
 user_guides/draw_test_harness/draw_test_harness.md
+user_guides/inspector/inspector.md
 user_guides/brep_wp/brep_wp.md
 user_guides/vis/vis.md
 
index aad0722..f7cbb0e 100644 (file)
@@ -14,6 +14,7 @@ user_guides/shape_healing/shape_healing.md
 user_guides/ocaf/ocaf.md
 user_guides/step/step.md
 user_guides/draw_test_harness/draw_test_harness.md
+user_guides/inspector/inspector.md
 user_guides/tobj/tobj.md
 user_guides/visualization/visualization.md
 user_guides/xde/xde.md
index bdfa189..a1cfdac 100644 (file)
@@ -97,6 +97,7 @@ The following table gives the full list of environment variables used at the con
 | BUILD_ADDITIONAL_TOOLKITS | String | Semicolon-separated individual toolkits to include into build process. If you want to build some particular libraries (toolkits) only, then you may uncheck all modules in the corresponding *BUILD_MODUE_\<MODULE\>* options and provide the list of necessary libraries here. Of course, all dependencies will be resolved automatically |
 | BUILD_YACCLEX | Boolean flag | Enables Flex/Bison lexical analyzers. OCCT source files relating to STEP reader and ExprIntrp functionality are generated automatically with Flex/Bison. Checking this option leads to automatic search of Flex/Bison binaries and regeneration of the mentioned files |
 | BUILD_MODULE_MfcSamples | Boolean flag | Indicates whether MFC samples should be built together with OCCT. This option is only relevant to Windows platforms |
+| BUILD_Inspector | Boolean flag | Indicates whether Inspector should be built together with OCCT. |
 | BUILD_DOC_Overview | Boolean flag | Indicates whether OCCT overview documentation project should be created together with OCCT. It is not built together with OCCT. Checking this option leads to automatic search of Doxygen binaries. Its building calls Doxygen command to generate the documentation in HTML format |
 | BUILD_PATCH | Path | Points to the directory recognized as a "patch" for OCCT. If specified, the files from this directory take precedence over the corresponding native OCCT sources. This way you are able to introduce patches to Open CASCADE Technology not affecting the original source distribution |
 | BUILD_WITH_DEBUG | Boolean flag | Enables extended messages of many OCCT algorithms, usually printed to cout. These include messages on internal errors and special cases encountered, timing, etc. |
index 295afa8..a39b506 100644 (file)
@@ -10687,6 +10687,87 @@ Example:
 mdist
 ~~~~~
 
+@section occt_draw_13 Inspector commands
+
+
+This section describes commands that make possible to use Inspector.
+
+@subsection occt_draw_13_1 tinspector
+
+Syntax:                  
+~~~~~
+tinspector [-plugins {name1 ... [nameN] | all}]
+           [-activate name]
+           [-shape object [name1] ... [nameN]]
+           [-open file_name [name1] ... [nameN]]
+           [-update]
+           [-select {object | name1 ... [nameN]}]
+           [-show {0|1} = 1]
+~~~~~
+Starts tool of inspection.
+Options:
+* *plugins* enters plugins that should be added in the inspector.
+Available names are: dfbrowser, vinspector and shapeview.
+Plugins order will be the same as defined in arguments.
+'all' adds all available plugins in the order:
+DFBrowser, VInspector and ShapeView.
+If at the first call this option is not used, 'all' option is applyed;
+* *activate* activates the plugin in the tool view.
+If at the first call this option is not used, the first plugin is activated;
+* *shape* initializes plugin/s by the shape object. If 'name' is empty, initializes all plugins;
+* *open* gives the file to the plugin/s. If the plugin is active, after open, update content will be done;
+* *update* updates content of the active plugin;
+* *select* sets the parameter that should be selected in an active tool view.
+Depending on active tool the parameter is:
+ShapeView: 'object' is an instance of TopoDS_Shape TShape,
+DFBrowser: 'name' is an entry of TDF_Label and name2(optionaly) for TDF_Attribute type name,
+VInspector: 'object' is an instance of AIS_InteractiveObject;
+* *show* sets Inspector view visible or hidden. The first call of this command will show it.
+
+**Example:** 
+~~~~~
+pload DCAF INSPECTOR
+
+NewDocument Doc BinOcaf
+
+set aSetAttr1 100
+set aLabel 0:2
+SetInteger Doc ${aLabel} ${aSetAttr1}
+
+tinspector -plugins dfbrowser -select 0:2 TDataStd_Integer
+~~~~~ 
+
+**Example:** 
+~~~~~
+pload ALL INSPECTOR
+
+box b1 200 100 120
+box b2 100 200 220 100 120 100
+
+tinspector -plugins shapeview -shape b1 -shape b2 -select b1
+~~~~~ 
+
+**Example:** 
+~~~~~
+pload ALL INSPECTOR
+
+tinspector -plugins vinspector
+
+vinit
+box box_1 100 100 100
+vdisplay box_1
+
+box box_2 180 120 200 150 150 150
+vdisplay box_2
+
+vfit
+vselmode box_1 1 1
+vselmode box_1 3 1
+
+tinspector -update -select box_1
+~~~~~ 
+
+
 @section occt_draw_11 Extending Test Harness with custom commands
 
 
diff --git a/dox/user_guides/inspector/images/3DView.png b/dox/user_guides/inspector/images/3DView.png
new file mode 100644 (file)
index 0000000..0caf4ef
Binary files /dev/null and b/dox/user_guides/inspector/images/3DView.png differ
diff --git a/dox/user_guides/inspector/images/3DView_elements.svg b/dox/user_guides/inspector/images/3DView_elements.svg
new file mode 100644 (file)
index 0000000..71a18b1
--- /dev/null
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="165.36458mm"
+   height="99.483337mm"
+   viewBox="0 0 165.36458 99.483337"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="3DView_elements.svg"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
+  <defs
+     id="defs2" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.98994949"
+     inkscape:cx="237.05748"
+     inkscape:cy="217.01184"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1410"
+     inkscape:window-height="786"
+     inkscape:window-x="265"
+     inkscape:window-y="101"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     showborder="true"
+     inkscape:showpageshadow="false" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-208.35938,-140.66904)">
+    <rect
+       style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4147-9"
+       width="164.83542"
+       height="98.95417"
+       x="208.62396"
+       y="140.93362"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4157-5"
+       width="155.95102"
+       height="20.214758"
+       x="212.62312"
+       y="145.17099"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4159-1"
+       width="155.83388"
+       height="64.776878"
+       x="212.62471"
+       y="170.05089"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620295;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-1-1"
+       width="30.417513"
+       height="11.316654"
+       x="286.53876"
+       y="149.43106"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620295;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-1-5-9"
+       width="30.417513"
+       height="11.316654"
+       x="321.21384"
+       y="149.43106"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="295.72775"
+       y="156.1628"
+       id="text5675-5"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5677-3"
+         x="295.72775"
+         y="156.1628"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Single</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="331.03946"
+       y="156.53418"
+       id="text5679-5"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5681-0"
+         x="331.03946"
+         y="156.53418"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Clean</tspan></text>
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.45057005;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-8-33"
+       width="14.354354"
+       height="56.42762"
+       x="216.9996"
+       y="174.34537"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83517319;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-7-0"
+       width="67.939919"
+       height="26.352776"
+       x="265.93634"
+       y="189.26295"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.3866663px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="295.6308"
+       y="201.46571"
+       id="text5683-5-2"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3-7"
+         x="295.6308"
+         y="201.46571"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">3D view</tspan></text>
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620298;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-1-1-3"
+       width="30.417513"
+       height="11.316654"
+       x="217.1886"
+       y="149.43106"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="227.84984"
+       y="156.48491"
+       id="text5675-5-2"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5677-3-2"
+         x="227.84984"
+         y="156.48491"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">View</tspan></text>
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620298;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-1-1-9"
+       width="30.417513"
+       height="11.316654"
+       x="251.86369"
+       y="149.43106"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="262.35156"
+       y="156.53418"
+       id="text5675-5-9"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\3DView.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5677-3-0"
+         x="262.35156"
+         y="156.53418"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Multi</tspan></text>
+  </g>
+</svg>
diff --git a/dox/user_guides/inspector/images/TStandaloneEXE.png b/dox/user_guides/inspector/images/TStandaloneEXE.png
new file mode 100644 (file)
index 0000000..33df1cc
Binary files /dev/null and b/dox/user_guides/inspector/images/TStandaloneEXE.png differ
diff --git a/dox/user_guides/inspector/images/TStandaloneEXE_open.png b/dox/user_guides/inspector/images/TStandaloneEXE_open.png
new file mode 100644 (file)
index 0000000..8f08f8f
Binary files /dev/null and b/dox/user_guides/inspector/images/TStandaloneEXE_open.png differ
diff --git a/dox/user_guides/inspector/images/VStudio_projects.png b/dox/user_guides/inspector/images/VStudio_projects.png
new file mode 100644 (file)
index 0000000..f06963a
Binary files /dev/null and b/dox/user_guides/inspector/images/VStudio_projects.png differ
diff --git a/dox/user_guides/inspector/images/dfbrowser.png b/dox/user_guides/inspector/images/dfbrowser.png
new file mode 100644 (file)
index 0000000..0b5a96e
Binary files /dev/null and b/dox/user_guides/inspector/images/dfbrowser.png differ
diff --git a/dox/user_guides/inspector/images/dfbrowser_elements.svg b/dox/user_guides/inspector/images/dfbrowser_elements.svg
new file mode 100644 (file)
index 0000000..ffa7c0a
--- /dev/null
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="165.36443mm"
+   height="99.48317mm"
+   viewBox="0 0 165.36443 99.48317"
+   version="1.1"
+   id="svg1643"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="dfbrowser_elements.svg">
+  <defs
+     id="defs1637" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="290.24314"
+     inkscape:cy="320.3071"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1246"
+     inkscape:window-height="857"
+     inkscape:window-x="371"
+     inkscape:window-y="37"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata1640">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(356.33698,30.17611)">
+    <rect
+       style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4147"
+       width="164.83542"
+       height="98.95417"
+       x="-356.07248"
+       y="-29.91161"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4157"
+       width="155.951"
+       height="20.214758"
+       x="-352.0733"
+       y="-25.674246"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4159"
+       width="75.795822"
+       height="64.91011"
+       x="-352.07172"
+       y="-0.79434544"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4161-4"
+       width="75.811562"
+       height="30.252827"
+       x="-272.04941"
+       y="33.729694"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4161-4-8"
+       width="75.811562"
+       height="30.252827"
+       x="-272.04941"
+       y="-0.80220562"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195"
+       width="73.552574"
+       height="11.118413"
+       x="-347.50781"
+       y="-21.126072"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-1"
+       width="30.417513"
+       height="11.316654"
+       x="-267.92496"
+       y="-21.225193"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-1-5"
+       width="30.417513"
+       height="11.316654"
+       x="-231.57631"
+       y="-21.225193"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-259.7175"
+       y="-14.48304"
+       id="text5675"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5677"
+         x="-259.7175"
+         y="-14.48304"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Update</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-223.04579"
+       y="-14.12208"
+       id="text5679"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5681"
+         x="-223.04579"
+         y="-14.12208"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Search</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-325.95343"
+       y="-14.547463"
+       id="text5683"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685"
+         x="-325.95343"
+         y="-14.547463"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Tree Navigation</tspan></text>
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-8"
+       width="65.570122"
+       height="19.385952"
+       x="-347.50781"
+       y="11.248657"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-333.31332"
+       y="22.090868"
+       id="text5683-5"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3"
+         x="-333.31332"
+         y="22.090868"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">OCAF tree view</tspan></text>
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-8-0"
+       width="65.570122"
+       height="19.385952"
+       x="-267.68332"
+       y="3.9789243"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-8-3-5"
+       width="38.7719"
+       height="16.820164"
+       x="-267.11316"
+       y="37.191612"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#9bbb59;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-8-3"
+       width="38.7719"
+       height="16.820164"
+       x="-240.60002"
+       y="42.180641"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-252.8326"
+       y="13.779153"
+       id="text5683-5-9"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3-8"
+         x="-252.8326"
+         y="13.779153"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">Property Panel</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-231.82542"
+       y="51.393177"
+       id="text5683-5-0"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3-5"
+         x="-231.82542"
+         y="51.393177"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">3D View</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-267.25568"
+       y="46.086102"
+       id="text5683-5-1"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3-80"
+         x="-267.25568"
+         y="46.086102"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">Dump View</tspan></text>
+  </g>
+</svg>
diff --git a/dox/user_guides/inspector/images/dfbrowser_selection_in_tree_view.svg b/dox/user_guides/inspector/images/dfbrowser_selection_in_tree_view.svg
new file mode 100644 (file)
index 0000000..c935963
--- /dev/null
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="172.24374mm"
+   height="92.868752mm"
+   viewBox="0 0 172.24374 92.868752"
+   version="1.1"
+   id="svg3735"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="dfbrowser_selection_in_tree_view.svg">
+  <defs
+     id="defs3729">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-21-01"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3705-7-5"
+         style="fill:#78943d;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-2-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3705-3-0"
+         style="fill:#78943d;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-3"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3705-1"
+         style="fill:#78943d;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="128.94698"
+     inkscape:cy="215.23058"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:showpageshadow="false"
+     inkscape:snap-nodes="false"
+     inkscape:snap-global="false"
+     inkscape:window-width="1522"
+     inkscape:window-height="784"
+     inkscape:window-x="1725"
+     inkscape:window-y="5"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3732">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-2.324585,-55.529915)">
+    <image
+       y="55.529915"
+       x="2.324585"
+       id="image4288"
+       xlink:href="data:image/png;base64,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 Q/8f/KdIsRN9rswAAAAASUVORK5CYII= "
+       style="image-rendering:optimizeSpeed"
+       preserveAspectRatio="none"
+       height="92.868752"
+       width="172.24374" />
+    <rect
+       y="70.645706"
+       x="73.434807"
+       height="38.560051"
+       width="100.79762"
+       id="rect4159-3-7"
+       style="opacity:0.23600003;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.50258124;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="61.046356"
+       x="17.609051"
+       height="8.0621023"
+       width="107.38746"
+       id="rect4159-3-44-2"
+       style="opacity:0.21300001;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.23719928;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#78943d;stroke-width:0.55221736;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.31330393, 1.10443464;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Lend-3)"
+       d="M 52.594602,136.48855 90.93033,67.622602"
+       id="path3682-9"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#78943d;stroke-width:0.47015369;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.82092189, 0.94030729;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Lend-2-4)"
+       d="M 66.379796,136.99632 99.201717,94.430987"
+       id="path3682-3-6"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#78943d;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.17500011, 1.05833337;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Lend-21-01)"
+       d="m 70.56271,136.99195 44.37875,-7.99632"
+       id="path3682-2-8"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="60.876686"
+       x="18.080685"
+       height="8.3825922"
+       width="107.21016"
+       id="rect4159-3-4-8-3"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="69.93074"
+       x="72.507774"
+       height="39.628773"
+       width="101.44677"
+       id="rect4159-3-4-8-39"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="111.37624"
+       x="73.15773"
+       height="35.124645"
+       width="100.82154"
+       id="rect4159-3-7-8"
+       style="opacity:0.23600003;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.47972783;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="110.966"
+       x="72.49575"
+       height="36.098152"
+       width="101.47084"
+       id="rect4159-3-4-8-39-4"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+  </g>
+</svg>
diff --git a/dox/user_guides/inspector/images/display_additional_presentation.png b/dox/user_guides/inspector/images/display_additional_presentation.png
new file mode 100644 (file)
index 0000000..8b4eda8
Binary files /dev/null and b/dox/user_guides/inspector/images/display_additional_presentation.png differ
diff --git a/dox/user_guides/inspector/images/display_main_presentation.png b/dox/user_guides/inspector/images/display_main_presentation.png
new file mode 100644 (file)
index 0000000..63d3079
Binary files /dev/null and b/dox/user_guides/inspector/images/display_main_presentation.png differ
diff --git a/dox/user_guides/inspector/images/drawexe_tinspector.png b/dox/user_guides/inspector/images/drawexe_tinspector.png
new file mode 100644 (file)
index 0000000..a7a287c
Binary files /dev/null and b/dox/user_guides/inspector/images/drawexe_tinspector.png differ
diff --git a/dox/user_guides/inspector/images/dump_attribute.png b/dox/user_guides/inspector/images/dump_attribute.png
new file mode 100644 (file)
index 0000000..e86f096
Binary files /dev/null and b/dox/user_guides/inspector/images/dump_attribute.png differ
diff --git a/dox/user_guides/inspector/images/property_panel_array.png b/dox/user_guides/inspector/images/property_panel_array.png
new file mode 100644 (file)
index 0000000..426c515
Binary files /dev/null and b/dox/user_guides/inspector/images/property_panel_array.png differ
diff --git a/dox/user_guides/inspector/images/property_panel_item_selection.svg b/dox/user_guides/inspector/images/property_panel_item_selection.svg
new file mode 100644 (file)
index 0000000..4caaf97
--- /dev/null
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="172.24374mm"
+   height="92.868752mm"
+   viewBox="0 0 172.24374 92.868752"
+   version="1.1"
+   id="svg3936"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="property_panel_item_selection.svg">
+  <defs
+     id="defs3930">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-2-4-9"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3705-3-0-4"
+         style="fill:#78943d;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-3-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3705-1-8"
+         style="fill:#78943d;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="314.86686"
+     inkscape:cy="103.10687"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:showpageshadow="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1252"
+     inkscape:window-height="826"
+     inkscape:window-x="2069"
+     inkscape:window-y="98"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3933">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(103.1308,-102.39896)">
+    <image
+       y="102.39896"
+       x="-103.1308"
+       id="image1040"
+       xlink:href="data:image/png;base64,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 AElFTkSuQmCC "
+       style="image-rendering:optimizeSpeed"
+       preserveAspectRatio="none"
+       height="92.868752"
+       width="172.24374" />
+    <rect
+       y="157.29077"
+       x="-30.123583"
+       height="36.266384"
+       width="97.666809"
+       id="rect4159-3-7-2"
+       style="opacity:0.23600003;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.47977537;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="156.78819"
+       x="-30.438066"
+       height="37.271538"
+       width="98.295784"
+       id="rect4159-3-4-8-39-45"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="153.00125"
+       x="-73.346046"
+       height="7.0100822"
+       width="41.7659"
+       id="rect4159-3-7-2-8"
+       style="opacity:0.23600003;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.13793828;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="152.9041"
+       x="-73.480537"
+       height="7.2043724"
+       width="42.03487"
+       id="rect4159-3-4-8-39-45-4"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.5291667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#78943d;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.17500011, 1.05833337;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Lend-3-1)"
+       d="m -16.378334,132.08943 -28.478284,21.38872"
+       id="path3682-9-1"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#78943d;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.17500011, 1.05833337;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Lend-2-4-9)"
+       d="m -14.861679,132.26224 34.426698,34.12532"
+       id="path3682-3-6-9"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="D:\OCCT\master_CR29018\dox\user_guides\inspector\images\selection_in_tree_view.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+  </g>
+</svg>
diff --git a/dox/user_guides/inspector/images/property_panel_label.png b/dox/user_guides/inspector/images/property_panel_label.png
new file mode 100644 (file)
index 0000000..9b8abed
Binary files /dev/null and b/dox/user_guides/inspector/images/property_panel_label.png differ
diff --git a/dox/user_guides/inspector/images/property_panel_named_data.png b/dox/user_guides/inspector/images/property_panel_named_data.png
new file mode 100644 (file)
index 0000000..ac5ba1b
Binary files /dev/null and b/dox/user_guides/inspector/images/property_panel_named_data.png differ
diff --git a/dox/user_guides/inspector/images/property_panel_simple_type.png b/dox/user_guides/inspector/images/property_panel_simple_type.png
new file mode 100644 (file)
index 0000000..f9832d6
Binary files /dev/null and b/dox/user_guides/inspector/images/property_panel_simple_type.png differ
diff --git a/dox/user_guides/inspector/images/property_panel_tnaming_named_shape.png b/dox/user_guides/inspector/images/property_panel_tnaming_named_shape.png
new file mode 100644 (file)
index 0000000..af78a25
Binary files /dev/null and b/dox/user_guides/inspector/images/property_panel_tnaming_named_shape.png differ
diff --git a/dox/user_guides/inspector/images/property_panel_tnaming_naming.png b/dox/user_guides/inspector/images/property_panel_tnaming_naming.png
new file mode 100644 (file)
index 0000000..e3c9952
Binary files /dev/null and b/dox/user_guides/inspector/images/property_panel_tnaming_naming.png differ
diff --git a/dox/user_guides/inspector/images/property_panel_tnaming_used_shapes.png b/dox/user_guides/inspector/images/property_panel_tnaming_used_shapes.png
new file mode 100644 (file)
index 0000000..7bad625
Binary files /dev/null and b/dox/user_guides/inspector/images/property_panel_tnaming_used_shapes.png differ
diff --git a/dox/user_guides/inspector/images/property_panel_tree_node.png b/dox/user_guides/inspector/images/property_panel_tree_node.png
new file mode 100644 (file)
index 0000000..a0e6f61
Binary files /dev/null and b/dox/user_guides/inspector/images/property_panel_tree_node.png differ
diff --git a/dox/user_guides/inspector/images/search.png b/dox/user_guides/inspector/images/search.png
new file mode 100644 (file)
index 0000000..55dfd32
Binary files /dev/null and b/dox/user_guides/inspector/images/search.png differ
diff --git a/dox/user_guides/inspector/images/shapeview.png b/dox/user_guides/inspector/images/shapeview.png
new file mode 100644 (file)
index 0000000..842fd1b
Binary files /dev/null and b/dox/user_guides/inspector/images/shapeview.png differ
diff --git a/dox/user_guides/inspector/images/shapeview_elements.svg b/dox/user_guides/inspector/images/shapeview_elements.svg
new file mode 100644 (file)
index 0000000..4997a05
--- /dev/null
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="165.36458mm"
+   height="99.483337mm"
+   viewBox="0 0 165.36458 99.483337"
+   version="1.1"
+   id="svg2491"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="shapeview_elements.svg">
+  <defs
+     id="defs2485" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.98994949"
+     inkscape:cx="319.53221"
+     inkscape:cy="223.36826"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:showpageshadow="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1205"
+     inkscape:window-height="766"
+     inkscape:window-x="422"
+     inkscape:window-y="28"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata2488">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(293.59301,-77.169049)">
+    <rect
+       style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#ffa040;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4147-0-8"
+       width="164.83542"
+       height="98.95417"
+       x="-293.32843"
+       y="77.433632"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#fcd5b5;fill-opacity:1;fill-rule:evenodd;stroke:#ff9933;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4159-8"
+       width="70.094536"
+       height="85.011993"
+       x="-285.46909"
+       y="83.598381"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.62230003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-8-2"
+       width="54.993557"
+       height="25.389547"
+       x="-277.91861"
+       y="113.40961"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#fcd5b5;fill-opacity:1;fill-rule:evenodd;stroke:#ffa040;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4159-8-9"
+       width="70.094536"
+       height="85.011993"
+       x="-207.25319"
+       y="83.598389"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-8-2-4"
+       width="54.993557"
+       height="25.389547"
+       x="-199.70271"
+       y="113.40961"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.3866663px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-272.88153"
+       y="125.70056"
+       id="text5683-5-4-9"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3-59-2"
+         x="-272.88153"
+         y="125.70056"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">TopoDS_Shape View</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.3866663px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-182.24478"
+       y="126.02359"
+       id="text5683-5-0-0"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3-5-6"
+         x="-182.24478"
+         y="126.02359"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">3D View</tspan></text>
+  </g>
+</svg>
diff --git a/dox/user_guides/inspector/images/tinspector_elements.svg b/dox/user_guides/inspector/images/tinspector_elements.svg
new file mode 100644 (file)
index 0000000..b8602bb
--- /dev/null
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="164.48495mm"
+   height="98.635941mm"
+   viewBox="0 0 164.48495 98.635941"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="tinspector_elements.svg"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
+  <defs
+     id="defs2">
+    <pattern
+       y="0"
+       x="0"
+       height="6"
+       width="6"
+       patternUnits="userSpaceOnUse"
+       id="EMFhbasepattern" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="329.8397"
+     inkscape:cy="227.89271"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1575"
+     inkscape:window-height="895"
+     inkscape:window-x="46"
+     inkscape:window-y="75"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-23.06172,-25.84832)">
+    <path
+       id="path933"
+       d="M 23.326301,26.112901 H 187.28209 V 124.21968 H 23.326301 Z"
+       style="fill:none;stroke:#953735;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path935"
+       d="M 28.109932,31.192871 H 62.95001 v 12.97507 H 28.109932 Z"
+       style="fill:#9bbb59;fill-opacity:1;fill-rule:nonzero;stroke:#71893f;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path937"
+       d="m 66.54831,31.108201 h 34.84008 v 12.97507 H 66.54831 Z"
+       style="fill:none;stroke:#33cccc;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path939"
+       d="m 104.9867,31.023531 h 34.84007 v 12.97508 H 104.9867 Z"
+       style="fill:none;stroke:#ff9933;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path941"
+       d="m 37.550195,37.648651 c 0,0.254 -0.04233,0.48683 -0.169332,0.6985 -0.105832,0.21166 -0.253998,0.38099 -0.444497,0.48683 -0.126999,0.0847 -0.275164,0.14816 -0.42333,0.16933 -0.169332,0.0423 -0.35983,0.0635 -0.634995,0.0635 h -0.698495 v -2.83631 h 0.698495 c 0.275165,0 0.48683,0.0212 0.656162,0.0635 0.169332,0.0423 0.296331,0.10583 0.42333,0.16933 0.190498,0.127 0.338664,0.27516 0.444497,0.48683 0.105832,0.1905 0.148165,0.42333 0.148165,0.69849 z m -0.380997,0 c 0,-0.21166 -0.04233,-0.40216 -0.126999,-0.55033 -0.0635,-0.16933 -0.190498,-0.27516 -0.338664,-0.35983 -0.105833,-0.0635 -0.232832,-0.10583 -0.359831,-0.14816 -0.126999,-0.0212 -0.275164,-0.0212 -0.444497,-0.0212 h -0.35983 v 2.18015 h 0.35983 c 0.190499,0 0.338665,-0.0212 0.465664,-0.0423 0.148165,-0.0423 0.275164,-0.0847 0.380997,-0.14817 0.148165,-0.10583 0.253998,-0.21166 0.317498,-0.35983 0.0635,-0.14817 0.105832,-0.33866 0.105832,-0.55033 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path943"
+       d="m 39.963178,36.569161 h -1.418157 v 0.80433 h 1.227658 v 0.33866 h -1.227658 v 1.35466 h -0.380997 v -2.83631 h 1.799154 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path945"
+       d="m 42.524325,38.198981 c 0,0.127 -0.02117,0.254 -0.08467,0.35983 -0.04233,0.10583 -0.126999,0.21167 -0.211665,0.27517 -0.105833,0.0847 -0.211665,0.14816 -0.338664,0.16933 -0.126999,0.0423 -0.296331,0.0635 -0.48683,0.0635 h -1.015992 v -2.83631 h 0.84666 c 0.211665,0 0.359831,0.0212 0.465663,0.0423 0.105833,0 0.190499,0.0423 0.296331,0.0847 0.105833,0.0635 0.169332,0.12699 0.211666,0.21166 0.0635,0.0847 0.08467,0.1905 0.08467,0.29633 0,0.14817 -0.04233,0.254 -0.105832,0.35983 -0.0635,0.0847 -0.169332,0.16933 -0.275165,0.21167 v 0.0212 c 0.190499,0.0423 0.338665,0.127 0.444497,0.254 0.105833,0.12699 0.169332,0.27516 0.169332,0.48683 z m -0.634995,-1.26999 c 0,-0.0847 0,-0.127 -0.02117,-0.16933 -0.04233,-0.0635 -0.0635,-0.0847 -0.126999,-0.127 -0.04233,-0.0212 -0.126999,-0.0423 -0.211665,-0.0635 -0.08467,0 -0.190498,0 -0.317497,0 h -0.444497 v 0.80433 h 0.486829 c 0.127,0 0.211665,0 0.275165,-0.0212 0.08467,0 0.148166,-0.0423 0.190499,-0.0635 0.0635,-0.0423 0.105832,-0.0847 0.126999,-0.14817 0.04233,-0.0635 0.04233,-0.127 0.04233,-0.21166 z m 0.253998,1.26999 c 0,-0.10583 -0.02117,-0.1905 -0.0635,-0.254 -0.02117,-0.0847 -0.08467,-0.127 -0.190498,-0.16933 -0.0635,-0.0423 -0.126999,-0.0635 -0.211665,-0.0635 -0.08467,-0.0212 -0.190499,-0.0212 -0.317498,-0.0212 h -0.592662 v 1.05833 h 0.507996 c 0.148166,0 0.296331,-0.0212 0.402164,-0.0423 0.105832,0 0.190498,-0.0423 0.253998,-0.0847 0.0635,-0.0423 0.126999,-0.10584 0.148165,-0.16933 0.04233,-0.0635 0.0635,-0.14817 0.0635,-0.254 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path947"
+       d="m 44.344645,37.331151 h -0.02117 c -0.04233,-0.0212 -0.105832,-0.0212 -0.148165,-0.0212 -0.04233,0 -0.105833,-0.0212 -0.169332,-0.0212 -0.126999,0 -0.232832,0.0423 -0.317498,0.0847 -0.105832,0.0423 -0.211665,0.10584 -0.296331,0.1905 v 1.50283 h -0.359831 v -2.11663 h 0.359831 v 0.3175 c 0.126999,-0.127 0.253998,-0.21166 0.359831,-0.254 0.105832,-0.0423 0.232831,-0.0635 0.338664,-0.0635 0.0635,0 0.105832,0 0.126999,0 0.04233,0 0.08467,0 0.126999,0.0212 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path949"
+       d="m 46.482462,38.008481 c 0,0.33867 -0.08467,0.61383 -0.253998,0.80433 -0.169332,0.21167 -0.42333,0.3175 -0.719661,0.3175 -0.296331,0 -0.529163,-0.10583 -0.698495,-0.3175 -0.190498,-0.1905 -0.275164,-0.46566 -0.275164,-0.80433 0,-0.35983 0.08467,-0.61383 0.275164,-0.82549 0.169332,-0.1905 0.402164,-0.29633 0.698495,-0.29633 0.296331,0 0.550329,0.10583 0.719661,0.29633 0.169332,0.21166 0.253998,0.46566 0.253998,0.82549 z m -0.35983,0 c 0,-0.27516 -0.04233,-0.48683 -0.169332,-0.61383 -0.105833,-0.127 -0.253998,-0.21166 -0.444497,-0.21166 -0.190499,0 -0.338664,0.0847 -0.444497,0.21166 -0.105832,0.127 -0.169332,0.33867 -0.169332,0.61383 0,0.254 0.0635,0.46567 0.169332,0.59267 0.105833,0.14816 0.253998,0.21166 0.444497,0.21166 0.190499,0 0.338664,-0.0635 0.444497,-0.21166 0.105832,-0.127 0.169332,-0.33867 0.169332,-0.59267 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path951"
+       d="m 49.699771,36.950161 -0.550328,2.11665 h -0.317498 l -0.550329,-1.62982 -0.529163,1.62982 h -0.338664 l -0.550329,-2.11665 h 0.35983 l 0.402164,1.62982 0.529163,-1.62982 h 0.275164 l 0.55033,1.62982 0.35983,-1.62982 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path953"
+       d="m 51.731758,38.452981 c 0,0.1905 -0.08467,0.35983 -0.232834,0.46566 -0.16933,0.127 -0.380997,0.1905 -0.656161,0.1905 -0.169331,0 -0.296331,-0.0212 -0.444497,-0.0423 -0.126998,-0.0423 -0.232831,-0.0847 -0.317498,-0.127 v -0.40216 h 0.02117 c 0.105833,0.0847 0.232833,0.14816 0.380997,0.1905 0.127,0.0635 0.253998,0.0847 0.380998,0.0847 0.169333,0 0.275164,-0.0212 0.380997,-0.0847 0.08467,-0.0423 0.127,-0.127 0.127,-0.23283 0,-0.0847 -0.02117,-0.14817 -0.08467,-0.1905 -0.04233,-0.0423 -0.127,-0.0847 -0.275164,-0.10584 -0.04233,-0.0212 -0.105833,-0.0212 -0.1905,-0.0423 -0.08467,-0.0212 -0.148164,-0.0212 -0.211664,-0.0423 -0.1905,-0.0635 -0.338664,-0.12699 -0.402164,-0.23283 -0.08467,-0.0847 -0.127,-0.21166 -0.127,-0.33866 0,-0.0847 0.02117,-0.16933 0.0635,-0.254 0.04233,-0.0635 0.08467,-0.14817 0.169334,-0.21166 0.0635,-0.0423 0.148164,-0.10584 0.253997,-0.127 0.127,-0.0423 0.232831,-0.0635 0.380997,-0.0635 0.127,0 0.253998,0.0212 0.380998,0.0635 0.126997,0.0212 0.23283,0.0635 0.317497,0.10583 v 0.381 h -0.02117 c -0.08467,-0.0635 -0.190497,-0.127 -0.317497,-0.16934 -0.148167,-0.0423 -0.275164,-0.0635 -0.402164,-0.0635 -0.127,0 -0.232831,0.0212 -0.317497,0.0635 -0.08467,0.0423 -0.127,0.127 -0.127,0.23284 0,0.0847 0.02117,0.14816 0.0635,0.19049 0.0635,0.0423 0.148166,0.0847 0.275164,0.10584 0.0635,0.0212 0.127,0.0212 0.211666,0.0423 0.08466,0.0212 0.148164,0.0423 0.211664,0.0423 0.148167,0.0423 0.275164,0.10583 0.380998,0.1905 0.08467,0.10583 0.127,0.23283 0.127,0.38099 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path955"
+       d="m 54.017739,38.029651 h -1.56632 c 0,0.14816 0.02117,0.254 0.0635,0.35983 0.04233,0.0847 0.08466,0.16933 0.169331,0.23283 0.0635,0.0635 0.127,0.10583 0.23283,0.127 0.08467,0.0423 0.1905,0.0423 0.296334,0.0423 0.148164,0 0.275164,-0.0212 0.423328,-0.0847 0.148166,-0.0423 0.254,-0.10583 0.317497,-0.16933 h 0.02117 v 0.40216 c -0.126998,0.0423 -0.253998,0.0847 -0.359831,0.127 -0.126997,0.0212 -0.275164,0.0423 -0.402161,0.0423 -0.359831,0 -0.634998,-0.0847 -0.825495,-0.27516 -0.1905,-0.1905 -0.296331,-0.46567 -0.296331,-0.8255 0,-0.33866 0.105831,-0.61383 0.275164,-0.82549 0.190498,-0.1905 0.444498,-0.29633 0.761995,-0.29633 0.275164,0 0.507995,0.0847 0.656161,0.254 0.148167,0.16933 0.232831,0.40216 0.232831,0.69849 z m -0.338664,-0.254 c -0.02117,-0.1905 -0.0635,-0.33866 -0.148164,-0.4445 -0.105833,-0.10583 -0.232833,-0.14816 -0.423331,-0.14816 -0.1905,0 -0.338664,0.0423 -0.465664,0.16933 -0.105833,0.10583 -0.16933,0.254 -0.190497,0.42333 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path957"
+       d="m 55.88039,37.331151 h -0.0212 c -0.0635,-0.0212 -0.10583,-0.0212 -0.14816,-0.0212 -0.0635,0 -0.127,-0.0212 -0.1905,-0.0212 -0.10583,0 -0.21166,0.0423 -0.3175,0.0847 -0.10583,0.0423 -0.1905,0.10584 -0.29633,0.1905 v 1.50283 h -0.3598 v -2.11663 h 0.35983 v 0.3175 c 0.14817,-0.127 0.27517,-0.21166 0.381,-0.254 0.10583,-0.0423 0.21166,-0.0635 0.33866,-0.0635 0.0423,0 0.10584,0 0.127,0 0.0212,0 0.0635,0 0.127,0.0212 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path959"
+       d="m 76.00974,35.786001 -1.03715,2.81515 h -0.508 l -1.01599,-2.81515 h 0.40216 l 0.88899,2.47648 0.889,-2.47648 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path961"
+       d="m 77.4279,38.601151 h -1.12182 v -0.27517 h 0.38099 v -2.24365 h -0.38099 v -0.29633 h 1.12182 v 0.29633 h -0.381 v 2.24365 h 0.381 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path963"
+       d="m 79.79855,38.601151 h -0.33866 v -1.18533 c 0,-0.10583 -0.0212,-0.1905 -0.0212,-0.27516 -0.0212,-0.0847 -0.0423,-0.16934 -0.0635,-0.21167 -0.0423,-0.0423 -0.0847,-0.0847 -0.14817,-0.10583 -0.0423,-0.0423 -0.127,-0.0423 -0.21167,-0.0423 -0.10583,0 -0.21166,0.0212 -0.31749,0.0635 -0.10583,0.0423 -0.21167,0.10583 -0.29633,0.1905 v 1.56632 H 78.0417 v -2.11665 h 0.35983 v 0.254 c 0.10583,-0.10584 0.21166,-0.16934 0.33866,-0.23284 0.127,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.23283,0 0.40217,0.0635 0.52917,0.1905 0.12699,0.14817 0.16933,0.33867 0.16933,0.61383 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path965"
+       d="m 81.99987,38.008481 c 0,0.1905 -0.0635,0.33867 -0.23283,0.46567 -0.16934,0.127 -0.381,0.19049 -0.65617,0.19049 -0.14816,0 -0.29633,-0.0212 -0.42333,-0.0635 -0.14816,-0.0212 -0.254,-0.0635 -0.33866,-0.127 v -0.38099 h 0.0212 c 0.10583,0.0847 0.23283,0.14816 0.38099,0.1905 0.127,0.0423 0.27517,0.0847 0.381,0.0847 0.16933,0 0.29633,-0.0423 0.381,-0.0847 0.0847,-0.0423 0.127,-0.127 0.127,-0.23284 0,-0.0847 -0.0212,-0.14816 -0.0635,-0.19049 -0.0635,-0.0423 -0.14817,-0.0847 -0.27517,-0.10584 -0.0635,-0.0212 -0.127,-0.0423 -0.21166,-0.0423 -0.0847,-0.0212 -0.14817,-0.0423 -0.21167,-0.0635 -0.19049,-0.0423 -0.31749,-0.10583 -0.40216,-0.21166 -0.0847,-0.0847 -0.10583,-0.21167 -0.10583,-0.33867 0,-0.10583 0,-0.16933 0.0423,-0.25399 0.0423,-0.0847 0.0847,-0.14817 0.16933,-0.21167 0.0635,-0.0635 0.14817,-0.10583 0.27517,-0.127 0.10583,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.127,0 0.25399,0.0212 0.38099,0.0423 0.127,0.0423 0.23284,0.0635 0.3175,0.127 v 0.381 H 81.894 c -0.0847,-0.0847 -0.1905,-0.127 -0.3175,-0.16933 -0.12699,-0.0635 -0.25399,-0.0847 -0.38099,-0.0847 -0.127,0 -0.254,0.0212 -0.33867,0.0847 -0.0847,0.0423 -0.12699,0.127 -0.12699,0.21166 0,0.0847 0.0212,0.16933 0.0847,0.21167 0.0423,0.0423 0.127,0.0635 0.254,0.10583 0.0635,0 0.12699,0.0212 0.21166,0.0423 0.0847,0.0212 0.14817,0.0212 0.21166,0.0423 0.16934,0.0423 0.29634,0.10583 0.381,0.1905 0.0847,0.10583 0.127,0.21166 0.127,0.381 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path967"
+       d="m 84.37051,37.521651 c 0,0.16933 -0.0212,0.33867 -0.0635,0.48683 -0.0423,0.127 -0.127,0.254 -0.21166,0.35983 -0.0847,0.0847 -0.16933,0.14817 -0.29633,0.21167 -0.10584,0.0423 -0.23283,0.0635 -0.35983,0.0635 -0.10584,0 -0.21167,0 -0.29633,-0.0212 -0.0847,-0.0212 -0.16934,-0.0635 -0.27517,-0.127 v 0.88899 h -0.35983 v -2.89981 h 0.35983 v 0.23283 c 0.10583,-0.0847 0.21167,-0.14816 0.3175,-0.1905 0.127,-0.0635 0.254,-0.0847 0.381,-0.0847 0.25399,0 0.46566,0.0847 0.59266,0.27517 0.14816,0.1905 0.21166,0.46566 0.21166,0.80433 z m -0.35983,0.0212 c 0,-0.254 -0.0423,-0.44449 -0.12699,-0.57149 -0.0847,-0.127 -0.23284,-0.1905 -0.40217,-0.1905 -0.10583,0 -0.21166,0.0212 -0.31749,0.0635 -0.10584,0.0423 -0.1905,0.10583 -0.29634,0.16933 v 1.20649 c 0.10584,0.0423 0.1905,0.0635 0.27517,0.0847 0.0635,0.0212 0.14816,0.0212 0.23283,0.0212 0.21167,0 0.35983,-0.0635 0.46566,-0.1905 0.10584,-0.127 0.16933,-0.33866 0.16933,-0.59266 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path969"
+       d="m 86.69883,37.585151 h -1.54515 c 0,0.127 0.0212,0.254 0.0635,0.33867 0.0212,0.10583 0.0847,0.1905 0.14816,0.25399 0.0635,0.0423 0.14817,0.10584 0.23283,0.127 0.0847,0.0212 0.1905,0.0423 0.29633,0.0423 0.14817,0 0.29633,-0.0212 0.4445,-0.0847 0.14817,-0.0635 0.254,-0.10583 0.3175,-0.16933 v 0 0.381 c -0.10583,0.0635 -0.23283,0.10583 -0.35983,0.127 -0.127,0.0423 -0.254,0.0635 -0.40217,0.0635 -0.33866,0 -0.61382,-0.10583 -0.80432,-0.29633 -0.21167,-0.1905 -0.29633,-0.4445 -0.29633,-0.80433 0,-0.33866 0.0847,-0.61383 0.27516,-0.82549 0.1905,-0.1905 0.4445,-0.29634 0.74083,-0.29634 0.29633,0 0.50799,0.0847 0.65616,0.254 0.16933,0.14817 0.23283,0.40217 0.23283,0.6985 z m -0.33866,-0.27516 c 0,-0.16933 -0.0423,-0.3175 -0.14817,-0.42333 -0.0847,-0.10583 -0.23283,-0.14817 -0.42333,-0.14817 -0.1905,0 -0.33866,0.0423 -0.44449,0.16933 -0.127,0.10584 -0.1905,0.23284 -0.1905,0.40217 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path971"
+       d="m 88.81548,38.474151 c -0.127,0.0635 -0.23283,0.10583 -0.33866,0.127 -0.10583,0.0423 -0.23283,0.0635 -0.33867,0.0635 -0.14816,0 -0.29633,-0.0212 -0.42333,-0.0635 -0.127,-0.0635 -0.23283,-0.127 -0.33866,-0.21167 -0.0847,-0.0847 -0.14817,-0.21167 -0.21166,-0.33866 -0.0423,-0.14817 -0.0635,-0.3175 -0.0635,-0.48683 0,-0.35983 0.0847,-0.635 0.27516,-0.8255 0.1905,-0.1905 0.4445,-0.29633 0.76199,-0.29633 0.127,0 0.23284,0.0212 0.35984,0.0635 0.10583,0.0212 0.21166,0.0635 0.31749,0.10583 v 0.40217 h -0.0212 c -0.10583,-0.0847 -0.21166,-0.14817 -0.33866,-0.1905 -0.10584,-0.0423 -0.23283,-0.0635 -0.33867,-0.0635 -0.1905,0 -0.35983,0.0635 -0.48683,0.1905 -0.10583,0.14816 -0.16933,0.33866 -0.16933,0.61383 0,0.25399 0.0635,0.44449 0.16933,0.57149 0.127,0.14817 0.27517,0.21167 0.48683,0.21167 0.0635,0 0.14817,0 0.21167,-0.0212 0.0847,-0.0212 0.14816,-0.0423 0.21166,-0.0847 0.0423,-0.0212 0.10584,-0.0423 0.14817,-0.0847 0.0423,-0.0212 0.0847,-0.0423 0.10583,-0.0635 h 0.0212 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path973"
+       d="m 90.36064,38.601151 c -0.0635,0 -0.127,0.0212 -0.21167,0.0423 -0.0847,0 -0.14816,0 -0.21166,0 -0.21167,0 -0.381,-0.0423 -0.48683,-0.16934 -0.10584,-0.10583 -0.16933,-0.29633 -0.16933,-0.55033 v -1.12182 h -0.23284 v -0.3175 h 0.23284 v -0.59266 h 0.35983 v 0.59266 h 0.71966 v 0.3175 h -0.71966 v 0.95249 c 0,0.10584 0,0.21167 0,0.27517 0,0.0423 0.0212,0.10583 0.0635,0.16933 0.0212,0.0423 0.0635,0.0847 0.10583,0.10583 0.0423,0.0212 0.127,0.0423 0.23283,0.0423 0.0423,0 0.10583,-0.0212 0.16933,-0.0212 0.0635,-0.0212 0.10584,-0.0423 0.14817,-0.0635 v 0 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path975"
+       d="m 92.60429,37.563991 c 0,0.33866 -0.0847,0.61382 -0.254,0.80432 -0.1905,0.21167 -0.42333,0.29633 -0.71966,0.29633 -0.29633,0 -0.52917,-0.0847 -0.71966,-0.29633 -0.16934,-0.1905 -0.254,-0.46566 -0.254,-0.80432 0,-0.35983 0.0847,-0.635 0.254,-0.8255 0.19049,-0.21166 0.42333,-0.29633 0.71966,-0.29633 0.29633,0 0.52916,0.0847 0.71966,0.29633 0.16933,0.1905 0.254,0.46567 0.254,0.8255 z m -0.35983,0 c 0,-0.27517 -0.0635,-0.48683 -0.16933,-0.61383 -0.10584,-0.14817 -0.254,-0.21167 -0.4445,-0.21167 -0.1905,0 -0.33867,0.0635 -0.4445,0.21167 -0.10583,0.127 -0.16933,0.33866 -0.16933,0.61383 0,0.25399 0.0635,0.46566 0.16933,0.59266 0.10583,0.14816 0.254,0.21166 0.4445,0.21166 0.1905,0 0.33866,-0.0635 0.4445,-0.21166 0.10583,-0.127 0.16933,-0.33867 0.16933,-0.59266 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path977"
+       d="m 94.48811,36.886661 h -0.0212 c -0.0635,-0.0212 -0.10584,-0.0212 -0.16933,-0.0212 -0.0423,-0.0212 -0.10584,-0.0212 -0.16934,-0.0212 -0.10583,0 -0.21166,0.0212 -0.31749,0.0847 -0.10584,0.0423 -0.1905,0.10583 -0.29633,0.16933 v 1.50282 h -0.35984 v -2.11665 h 0.35984 v 0.3175 c 0.14816,-0.10583 0.27516,-0.1905 0.38099,-0.23283 0.10583,-0.0423 0.21167,-0.0847 0.3175,-0.0847 0.0635,0 0.10583,0.0212 0.14816,0.0212 0.0212,0 0.0635,0 0.127,0.0212 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path979"
+       d="m 114.0883,37.775651 c 0,0.10583 -0.0212,0.23283 -0.0635,0.33867 -0.0635,0.10583 -0.127,0.19049 -0.21167,0.27516 -0.10583,0.0635 -0.23283,0.127 -0.35983,0.16933 -0.14817,0.0635 -0.29633,0.0847 -0.48683,0.0847 -0.21166,0 -0.381,-0.0212 -0.55033,-0.0635 -0.16933,-0.0423 -0.3175,-0.0847 -0.48683,-0.16933 v -0.46566 h 0.0212 c 0.14817,0.10583 0.29633,0.21166 0.48683,0.27516 0.1905,0.0635 0.35983,0.0847 0.52916,0.0847 0.23284,0 0.42333,-0.0423 0.55033,-0.127 0.127,-0.0847 0.1905,-0.1905 0.1905,-0.33866 0,-0.127 -0.0423,-0.23283 -0.0847,-0.27517 -0.0635,-0.0635 -0.16933,-0.10583 -0.29633,-0.14816 -0.0847,-0.0212 -0.1905,-0.0423 -0.29633,-0.0635 -0.10583,-0.0212 -0.23283,-0.0423 -0.35983,-0.0635 -0.254,-0.0423 -0.42333,-0.14817 -0.55033,-0.27517 -0.127,-0.127 -0.1905,-0.29633 -0.1905,-0.48683 0,-0.23283 0.10583,-0.44449 0.3175,-0.59266 0.1905,-0.14816 0.4445,-0.21166 0.74083,-0.21166 0.21166,0 0.38099,0 0.55033,0.0423 0.16933,0.0423 0.31749,0.0847 0.44449,0.14816 v 0.4445 h -0.0212 c -0.10583,-0.0847 -0.254,-0.16933 -0.42333,-0.23283 -0.1905,-0.0635 -0.35983,-0.0847 -0.55033,-0.0847 -0.19049,0 -0.35983,0.0423 -0.48683,0.127 -0.10583,0.0847 -0.16933,0.1905 -0.16933,0.3175 0,0.12699 0.0212,0.21166 0.0847,0.27516 0.0635,0.0635 0.16933,0.127 0.3175,0.14817 0.0847,0.0212 0.1905,0.0423 0.35983,0.0635 0.14816,0.0423 0.27516,0.0635 0.35983,0.0847 0.21166,0.0635 0.381,0.14816 0.48683,0.25399 0.10583,0.10584 0.14817,0.27517 0.14817,0.46567 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path981"
+       d="m 116.43778,38.579981 h -0.35983 v -1.20649 c 0,-0.0847 0,-0.1905 -0.0212,-0.27517 0,-0.0847 -0.0212,-0.14816 -0.0635,-0.1905 -0.0212,-0.0635 -0.0635,-0.0847 -0.127,-0.12699 -0.0635,-0.0212 -0.127,-0.0212 -0.23283,-0.0212 -0.0847,0 -0.1905,0.0212 -0.29633,0.0635 -0.10584,0.0423 -0.21167,0.10583 -0.3175,0.19049 v 1.56633 h -0.35983 v -2.94215 h 0.35983 v 1.05833 c 0.127,-0.0847 0.23283,-0.14817 0.35983,-0.21167 0.10583,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.23284,0 0.40217,0.0635 0.52917,0.1905 0.10583,0.14817 0.16933,0.33867 0.16933,0.59266 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path983"
+       d="m 118.76609,38.579981 h -0.35983 v -0.21167 c -0.0212,0.0212 -0.0635,0.0423 -0.127,0.0847 -0.0423,0.0423 -0.10583,0.0635 -0.14816,0.0847 -0.0635,0.0423 -0.127,0.0635 -0.21167,0.0847 -0.0635,0.0212 -0.16933,0.0212 -0.25399,0.0212 -0.1905,0 -0.35984,-0.0635 -0.48684,-0.19049 -0.14816,-0.127 -0.21166,-0.27517 -0.21166,-0.48683 0,-0.14817 0.0423,-0.27517 0.10583,-0.381 0.0635,-0.10583 0.16933,-0.16933 0.29633,-0.23283 0.127,-0.0635 0.27517,-0.10584 0.46567,-0.127 0.16933,-0.0212 0.381,-0.0212 0.57149,-0.0423 v -0.0423 c 0,-0.0847 0,-0.14817 -0.0423,-0.21167 -0.0212,-0.0423 -0.0635,-0.0847 -0.10583,-0.127 -0.0635,-0.0212 -0.127,-0.0423 -0.1905,-0.0635 -0.0635,0 -0.14816,0 -0.21166,0 -0.10583,0 -0.21167,0 -0.3175,0.0423 -0.127,0.0212 -0.23283,0.0423 -0.35983,0.10584 h -0.0212 v -0.381 c 0.0635,0 0.16933,-0.0212 0.29633,-0.0635 0.14816,-0.0212 0.27516,-0.0212 0.40216,-0.0212 0.14817,0 0.27517,0 0.381,0.0423 0.10583,0.0212 0.21166,0.0635 0.29633,0.127 0.0635,0.0423 0.127,0.127 0.16933,0.21166 0.0423,0.10584 0.0635,0.21167 0.0635,0.33867 z m -0.35983,-0.508 v -0.59266 c -0.10583,0 -0.23283,0.0212 -0.38099,0.0212 -0.14817,0.0212 -0.254,0.0423 -0.33867,0.0635 -0.10583,0.0212 -0.1905,0.0635 -0.254,0.127 -0.0635,0.0635 -0.0847,0.14816 -0.0847,0.254 0,0.127 0.0212,0.21166 0.10584,0.27516 0.0635,0.0635 0.1905,0.0847 0.33866,0.0847 0.127,0 0.23283,-0.0212 0.33867,-0.0635 0.10583,-0.0423 0.19049,-0.10583 0.27516,-0.16933 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path985"
+       d="m 121.32724,37.500491 c 0,0.16933 -0.0212,0.33866 -0.0847,0.46566 -0.0423,0.14817 -0.10583,0.27516 -0.21166,0.35983 -0.0847,0.10583 -0.16933,0.16933 -0.29633,0.23283 -0.10584,0.0423 -0.21167,0.0635 -0.33867,0.0635 -0.127,0 -0.21166,0 -0.3175,-0.0212 -0.0847,-0.0423 -0.16933,-0.0635 -0.25399,-0.127 v 0.889 h -0.35983 v -2.89981 h 0.35983 v 0.23283 c 0.0847,-0.0847 0.1905,-0.14817 0.31749,-0.21167 0.10584,-0.0423 0.23284,-0.0635 0.381,-0.0635 0.254,0 0.4445,0.0847 0.59266,0.27517 0.127,0.1905 0.21167,0.46566 0.21167,0.80433 z m -0.381,0.0212 c 0,-0.27517 -0.0423,-0.46567 -0.127,-0.59267 -0.0847,-0.10583 -0.21166,-0.16933 -0.40216,-0.16933 -0.10583,0 -0.1905,0.0212 -0.29633,0.0635 -0.10583,0.0423 -0.21166,0.0847 -0.29633,0.16933 v 1.2065 c 0.0847,0.0423 0.16933,0.0635 0.254,0.0847 0.0635,0.0212 0.14816,0.0212 0.254,0.0212 0.19049,0 0.33866,-0.0635 0.46566,-0.1905 0.10583,-0.14817 0.14816,-0.33867 0.14816,-0.59267 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path987"
+       d="m 123.65556,37.563991 h -1.56632 c 0,0.12699 0.0212,0.25399 0.0635,0.33866 0.0423,0.10583 0.0847,0.16933 0.14816,0.23283 0.0847,0.0635 0.14817,0.10583 0.23283,0.14817 0.10583,0.0212 0.1905,0.0423 0.3175,0.0423 0.127,0 0.27517,-0.0212 0.42333,-0.0847 0.14817,-0.0635 0.254,-0.127 0.3175,-0.16933 h 0.0212 v 0.38099 c -0.127,0.0635 -0.254,0.10583 -0.381,0.127 -0.127,0.0423 -0.254,0.0635 -0.381,0.0635 -0.35983,0 -0.635,-0.10583 -0.82549,-0.29633 -0.1905,-0.1905 -0.29633,-0.46566 -0.29633,-0.80433 0,-0.33866 0.0847,-0.61383 0.27516,-0.82549 0.1905,-0.21167 0.4445,-0.29633 0.76199,-0.29633 0.27517,0 0.48684,0.0635 0.65617,0.23283 0.14817,0.16933 0.23283,0.40216 0.23283,0.71966 z m -0.35983,-0.27517 c 0,-0.1905 -0.0423,-0.33866 -0.127,-0.42333 -0.10583,-0.10583 -0.23283,-0.16933 -0.42333,-0.16933 -0.1905,0 -0.35983,0.0635 -0.46567,0.16933 -0.10583,0.127 -0.16933,0.254 -0.19049,0.42333 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path989"
+       d="m 126.44954,35.764831 -1.03716,2.81515 h -0.50799 l -1.016,-2.81515 h 0.40217 l 0.88899,2.47648 0.88899,-2.47648 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path991"
+       d="m 127.2327,36.124661 h -0.40216 v -0.38099 h 0.40216 z m -0.0212,2.45532 h -0.35983 v -2.11665 h 0.35983 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path993"
+       d="m 129.68802,37.563991 h -1.56632 c 0,0.12699 0.0212,0.25399 0.0635,0.33866 0.0423,0.10583 0.0847,0.16933 0.14816,0.23283 0.0847,0.0635 0.14817,0.10583 0.23283,0.14817 0.10583,0.0212 0.1905,0.0423 0.3175,0.0423 0.127,0 0.27516,-0.0212 0.42333,-0.0847 0.14816,-0.0635 0.254,-0.127 0.3175,-0.16933 h 0.0212 v 0.38099 c -0.127,0.0635 -0.254,0.10583 -0.38099,0.127 -0.127,0.0423 -0.254,0.0635 -0.381,0.0635 -0.35983,0 -0.635,-0.10583 -0.82549,-0.29633 -0.1905,-0.1905 -0.29634,-0.46566 -0.29634,-0.80433 0,-0.33866 0.0847,-0.61383 0.27517,-0.82549 0.1905,-0.21167 0.4445,-0.29633 0.76199,-0.29633 0.27517,0 0.48683,0.0635 0.65616,0.23283 0.14817,0.16933 0.23284,0.40216 0.23284,0.71966 z m -0.35984,-0.27517 c 0,-0.1905 -0.0423,-0.33866 -0.12699,-0.42333 -0.10584,-0.10583 -0.23284,-0.16933 -0.42333,-0.16933 -0.1905,0 -0.35983,0.0635 -0.46567,0.16933 -0.10583,0.127 -0.16933,0.254 -0.19049,0.42333 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path995"
+       d="m 132.88416,36.463331 -0.55033,2.11665 h -0.33866 l -0.52917,-1.62982 -0.55033,1.62982 h -0.31749 l -0.5715,-2.11665 h 0.381 l 0.38099,1.65099 0.52917,-1.65099 h 0.29633 l 0.55033,1.65099 0.35983,-1.65099 z"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path997"
+       d="M 42.608991,62.752131 H 181.82113 V 118.33539 H 42.608991 Z"
+       style="fill:none;stroke:#ff9933;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path999"
+       d="M 35.666376,55.280361 H 174.89968 V 110.86361 H 35.666376 Z"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#33cccc;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1001"
+       d="M 28.744927,47.808581 H 167.97823 V 103.39183 H 28.744927 Z"
+       style="fill:#9bbb59;fill-opacity:1;fill-rule:nonzero;stroke:#77933c;stroke-width:0.52916667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/dox/user_guides/inspector/images/vinspector.png b/dox/user_guides/inspector/images/vinspector.png
new file mode 100644 (file)
index 0000000..e3b7417
Binary files /dev/null and b/dox/user_guides/inspector/images/vinspector.png differ
diff --git a/dox/user_guides/inspector/images/vinspector_elements.svg b/dox/user_guides/inspector/images/vinspector_elements.svg
new file mode 100644 (file)
index 0000000..5f644e6
--- /dev/null
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="165.36458mm"
+   height="99.483337mm"
+   viewBox="0 0 165.36458 99.483337"
+   version="1.1"
+   id="svg3064"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="vinspector_elements.svg">
+  <defs
+     id="defs3058" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.98994949"
+     inkscape:cx="261.33464"
+     inkscape:cy="225.25011"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1277"
+     inkscape:window-height="875"
+     inkscape:window-x="314"
+     inkscape:window-y="16"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3061">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(201.36682,-127.81786)">
+    <rect
+       style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#33cccc;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4147-0"
+       width="164.83542"
+       height="98.95417"
+       x="-201.10223"
+       y="128.08244"
+       inkscape:export-filename="D:\OCCT\master_CR27398_doc\dox\user_guides\qt_browsers\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#93cddd;fill-opacity:1;fill-rule:evenodd;stroke:#33cccc;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4157-8"
+       width="155.951"
+       height="20.214758"
+       x="-197.10306"
+       y="132.31981"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#93cddd;fill-opacity:1;fill-rule:evenodd;stroke:#33cccc;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4159-9"
+       width="155.55411"
+       height="39.471096"
+       x="-197.06837"
+       y="157.2328"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-6"
+       width="109.47361"
+       height="11.118413"
+       x="-155.47618"
+       y="136.86798"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-1-6"
+       width="30.417513"
+       height="11.316654"
+       x="-192.77927"
+       y="136.76886"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-184.57181"
+       y="143.51102"
+       id="text5675-9"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5677-2"
+         x="-184.57181"
+         y="143.51102"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Update</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-118.07398"
+       y="143.87196"
+       id="text5683-7"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-7"
+         x="-118.07398"
+         y="143.87196"
+         style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Selection controls</tspan></text>
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-8-4"
+       width="79.254326"
+       height="23.947351"
+       x="-158.91849"
+       y="164.99469"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-143.42757"
+       y="176.27301"
+       id="text5683-5-4"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3-59"
+         x="-143.42757"
+         y="176.27301"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">Presentations tree view</tspan></text>
+    <rect
+       style="opacity:1;fill:#93cddd;fill-opacity:1;fill-rule:evenodd;stroke:#33cccc;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4157-8-7"
+       width="155.951"
+       height="20.214758"
+       x="-196.94507"
+       y="202.23282"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
+       id="rect4195-1-6-6"
+       width="147.01831"
+       height="11.316654"
+       x="-192.62131"
+       y="206.68187"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-132.50854"
+       y="210.87439"
+       id="text5683-5-4-1"
+       transform="scale(0.98830373,1.0118347)"
+       inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan5685-3-59-8"
+         x="-132.50854"
+         y="210.87439"
+         style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">History view</tspan></text>
+  </g>
+</svg>
diff --git a/dox/user_guides/inspector/inspector.md b/dox/user_guides/inspector/inspector.md
new file mode 100644 (file)
index 0000000..9b15cee
--- /dev/null
@@ -0,0 +1,578 @@
+Inspector  {#occt_user_guides__inspector}
+===============================
+
+@tableofcontents
+@section occt_inspector_1 Introduction
+
+This manual explains how to use Inspector.
+
+@subsection occt_inspector_1_1 Overview
+Inspector is a Qt-based library that provides functionality to interactively inspect low-level content of the OCAF data model, OCCT viewer and Modelisation Data.
+This component is aimed to assist the developers of OCCT-based applications to debug the problematic situations that occur in their applications.
+
+Inspector has a plugin-oriented architecture. The current release contains the following plugins:
+
+| Plugin | OCCT component | Root class of OCCT investigated component |
+| :----- | :----- | :----- |
+| @ref occt_inspector_2_2 "DFBrowser"| OCAF | TDocStd_Application |
+| @ref occt_inspector_2_3 "VInspector"| Visualization | AIS_InteractiveContext |
+| @ref occt_inspector_2_4 "ShapeView"| Modelisation Data | TopoDS_Shape |
+
+
+Each plugin implements logic of a corresponding OCCT component.
+
+Each of the listed plugins is embeded in the common framework.
+The user is able to manage which plugins should be loaded by Inspector.
+Also he can extend number of plugins by implementing a new plugin.
+
+
+@subsection occt_inspector_1_3 Getting started
+
+There are two launch modes:
+1. Launch **TInspectorEXE** executable sample. For more details see @ref occt_inspector_6 "TInspectorEXE" section;
+2. Launch DRAW, load plugin INSPECTOR, and use **tinspector** command.
+   For more details see @ref occt_inspector_7 "Launch in DRAW Test Harness" section.
+
+
+Note. If you have no Inspector library in your build directory, please make sure that OCCT is compiled with *BUILD_Inspector* 
+option ON. For more details see @ref occt_inspector_4 "Build procedure".
+
+
+@section occt_inspector_2 Inspector
+
+@subsection occt_inspector_2_1 Overview
+
+Inspector consists of the following components:
+  * <b>buttons</b> to activate the corresponding plugin;
+  * <b>view area</b> to visualize the plugin content.
+
+@figure{tinspector_elements.svg,"Plugins placement in Inspector",360}
+
+@subsection occt_inspector_2_2 DFBrowser Plugin
+
+@subsubsection occt_inspector_2_2_1 Overview
+
+@figure{dfbrowser.png, "DFBrowser"}
+
+This plugin visualizes content of TDocStd_Application in a tree view. It shows documents of the application,
+hierarchy of TDF_Labels, content of TDF_Attributes and interconnection between attributes (e.g. references).
+Additionally it has 3D view to visualize TopoDS_Shape elements stored in the document.
+
+@subsubsection occt_inspector_2_2_2 Elements
+
+@figure{dfbrowser_elements.svg, "DFBrowser Elements",360}
+
+<b>OCAF tree view</b>
+
+Each OCAF element has own tree view item:
+
+| Type | Tree item | Text | Description |
+| :----- | :----- | :----- | :----- |
+| TDocStd_Application | Application | TDocStd_Application | It is the root of tree view. Children are documents.|
+| TDocStd_Document | Document | entry : name | It is a child of Application item. Children are Labels and Attributes items.<br> Text view is an entry of the root label and the value of TDataStd_Name attribute for the label if it exists. |
+| TDF_Label | Label | entry : name | It is a child of a Document or another Label item. Children and text view are the same as for Document item. |
+| TDF_Attribute | Attribute | attribute type [additional information] | It is a child of a Label. It has no children. <br> Text view is the attribute type (DynamicType()->Name() of TDF_Attribute) and additional information (a combination of attribute values) |
+
+
+Additional information of TDF_Attributes:
+
+| Type | Text |
+| :----- | :----- |
+| TDocStd_Owner | [storage format] |
+| TDataStd_AsciiString,<br> TDataStd_Name,<br> TDataStd_Real,<br> @ref occt_attribute_simple_types "other Simple types" | [value] |
+| TDataStd_BooleanList,<br> TDataStd_ExtStringList,<br> @ref occt_attribute_list_types "other List types" | [value_1 ... value_n] |
+| TDataStd_BooleanArray,<br> TDataStd_ByteArray,<br> @ref occt_attribute_array_types "other Array types" | [value_1 ... value_n] |
+| TDataStd_TreeNode | [tree node ID  ==> Father()->Label()] (if it has father) or <br> [tree node ID <== First()->Label()] (if it has NO father)|
+| TDataStd_TreeNode(XDE) | [@ref occt_attribute_xde_tree_node_id "XDE tree node ID"  ==> Father()->Label()] (if it has father), <br> [@ref occt_attribute_xde_tree_node_id "XDE tree Node ID" <== label_1, ..., label_n] (if it has NO father)|
+| TNaming_NamedShape | [shape type : evolution] |
+| TNaming_UsedShapes | [map extent] |
+
+
+Custom color of items:
+
+| OCAF element Type | Color |
+| :----- | :----- |
+| TDF_Label | <b>dark green</b>, if the label has TDataStd_Name attribute, <br><b>light grey</b> if the label is empty (has no attributes on all levels of hierarchy),<br> <b>black</b> otherwise |
+| TNaming_NamedShape | <b>dark gray</b> for TopAbs_FORWARD orientation of TopoDS_Shape, <br> <b>gray</b> for TopAbs_REVERSED orientation of TopoDS_Shape, <br> <b>black</b> for other orientation |
+
+
+Context popup menu:
+| Action | Functionality |
+| :----- | :----- |
+| Expand | Expands the next two levels under the selected item |
+| Expand All | Expands the whole tree of the selected item |
+| Collapse All | Collapses the whole tree of the selected item |
+
+
+<b>Property Panel</b>
+
+Property panel is used to display content of Label or Attribute tree view items.
+This control is used for content of Label or Attribute tree view items or Search result view.
+Information is usually shown in one or several tables.
+
+TDF_Attribute has the following content in Property Panel:
+
+<table>
+<tr><th>Type</th><th>Description</th><th>Content</th></tr>
+<tr><td>TDF_Label</td>
+    <td> a table of [entry or attribute name, value]</td>
+    <td>@figure{property_panel_label.png, "",140}</td></tr>
+<tr><td>TDocStd_Owner,<br> @ref occt_attribute_simple_types "Simple types", <br> @ref occt_attribute_list_types "List types"</td>
+    <td>a table of [method name, value]</td>
+    <td>@figure{property_panel_simple_type.png, "",140}</td></tr>
+<tr><td>TDataStd_BooleanArray,<br> TDataStd_ByteArray,<br> @ref occt_attribute_array_types "other Array types"</td>
+    <td>2 controls: <br>  * a table of [array bound, value], <br>  * table of [method name, value]</td>
+    <td>@figure{property_panel_array.png, "",140}</td></tr>
+<tr><td>TDataStd_TreeNode</td>
+    <td>2 controls: <br>  * a table of [Tree ID, value] (visible only if Tree ID() != ID()), <br>  * a tree view of tree nodes starting from Root() of the tree node. The current tree node has <b>dark blue</b> text.</td>
+    <td>@figure{property_panel_tree_node.png, "",140} </td></tr>
+<tr><td>TDataStd_NamedData</td>
+    <td>tab bar of attribute elements, each tab has a table of [name, value]</td>
+    <td>@figure{property_panel_named_data.png, "",140}</td></tr>
+<tr><td>TNaming_UsedShapes</td>
+    <td>a table of all  the shapes handled by the framework</td>
+    <td>@figure{property_panel_tnaming_used_shapes.png, "",140}</td></tr>
+<tr><td>TNaming_NamedShape</td>
+    <td>2 controls: <br>  * a table of [method name, value] including CurrentShape/OriginalShape methods result of TNaming_Tools, <br>  * an evolution table. <br> Tables contain buttons for @ref occt_shape_export "TopoDS_Shape export".</td>
+    <td>@figure{property_panel_tnaming_named_shape.png, "",140}</td></tr>
+<tr><td>TNaming_Naming</td>
+    <td>2 controls: <br>  * a table of TNaming_Name vlaues,<br>  * a table of [method name, value]</td>
+    <td>@figure{property_panel_tnaming_naming.png, "",140}</td></tr>
+</table>
+
+
+<b>Dump view</b>
+
+@figure{dump_attribute.png, "Dump of TDF_Attribute"}
+
+Dump view shows result of <b>TDF_Attribute::Dump()</b> or <b>TDF_Label::Dump()</b> of selected tree view item.
+
+<b>3D view</b>
+
+3D View visualizes TopoDS_Shape elements of OCAF attribute via AIS facilities.
+
+DFBrowser creates two kinds presentations depending on the selection place:
+
+<table>
+<tr><th>Kind</th><th>Source object</th><th>Visualization propeties</th><th>View</th></tr>
+<tr><td>Main presentation</td>
+    <td>Tree view item:<br> TPrsStd_AISPresentation,<br> TNaming_NamedShape,<br> TNaming_Naming</td>
+    <td>Color: a default color for shape type of the current TopoDS_Shape</td>
+    <td>@figure{display_main_presentation.png, "",100}</td></tr>
+<tr><td>Additional presentation</td>
+    <td>References in Property panel</td>
+    <td>Color: white</td>
+    <td>@figure{display_additional_presentation.png, "",100}</td></tr>
+</table>
+
+
+
+<b>Tree Navigation</b>
+
+Tree Navigation shows a path to the item selected in the tree view.
+The path is a sequence of label entries and attribute type name.
+Each element in the path is selectable - the user can click on it to select the corresponding tree view item.
+
+Navigation control has buttons to go to the previous and the next selected tree view items.
+
+
+<b>Update Button</b>
+
+Update button synchronizes content of tree view to the current content of OCAF document that could be modified outside.
+
+<b>Search</b>
+
+The user can search OCAF element by typing:
+  * TDF_Label entry,
+  * TDF_Attribute name,
+  * TDataStd_Name and TDataStd_Comment attributes value.
+
+@figure{search.png,"Search"}
+
+As soon as the user confirms the typed criteria, the Property panel is filled by all satisfied values.
+The user can click a value to hightligt the corresponding tree view item. By double click the item will be selected.
+
+
+@subsubsection occt_inspector_2_2_3 Elements cooperation
+
+<b>Tree item selection</b>
+
+Selection of tree view item updates content of the following controls:
+  * Navigation line
+  * Property Panel
+  * 3D View (if it is possible to create an interactive presentation)
+  * Dump View
+
+@figure{dfbrowser_selection_in_tree_view.svg,"",360}
+
+<b>Property Panel item selection </b>
+
+If property panel shows content of TDF_Label:
+  * selection of the table row hightlights the corresponding item in tree view,
+  * double click on the table row selects this item in tree view.
+
+If property panel shows content of TDF_Attribute that has reference to another attribute, selection of this reference:
+  * highlights the referenced item in TreeView,
+  * displays additional presentation in 3D view if it can be created.
+
+@figure{property_panel_item_selection.svg,"",360}
+
+Attributes having references:
+
+| Type | Reference | Additional presentation
+| :----- | :----- | :----- |
+| TDF_Reference | TDF_Label | |
+| TDataStd_ReferenceArray, <br> TDataStd_ReferenceList, <br> TNaming_Naming | one or several TDF_Label in a container | |
+| TDataStd_TreeNode | TDF_Label | |
+| TNaming_NamedShape | TDF_Label in Evolution table | selected TopoDS_Shapes in property panel tables |
+| TNaming_UsedShapes | one or several TNaming_NamedShape | TopoDS_Shapes of selected TNaming_NamedShape |
+
+
+@subsubsection occt_shape_export TopoDS_Shape export
+
+Property panel of TNaming_NamedShape attribute has controls to export TopoDS_Shape to:
+  * BREP. The save file dialog is started to enter the result file name,
+  * @ref occt_inspector_2_4 "ShapeView" plugin. Dialog about exporting element to ShapeView is shown with a possibility to activate this plugin immediatelly.
+
+
+@subsection occt_inspector_2_3 VInspector Plugin
+
+@subsubsection occt_inspector_2_3_1 Overview
+
+@figure{vinspector.png, "VInspector"}
+
+It visualizes interactive objects displayed in AIS_InteractiveContext in a tree view with columputed selection
+components for each presentation. It shows the selected elements in the context and allows to select these elements.
+
+@subsubsection occt_inspector_2_3_2 Elements
+
+@figure{vinspector_elements.svg,"VInspector Elements",360}
+
+<b>Presentations tree view</b>
+
+It shows presentations and selection computed of them. Also, the view has columns with information about state of visualization elements.
+
+VInspector tree items.
+
+| Type | Description |
+| :----- | :----- |
+| AIS_InteractiveContext | It is the root of tree view. Children are interactive objects obtained by *DisplayedObjects* and *ErasedObjects* methods.|
+| AIS_InteractiveObject | It is a child of AIS_InteractiveContext item. Children are SelectMgr_Selection obtained by iteration on *CurrentSelection*  |
+| SelectMgr_Selection | It is a child of AIS_InteractiveObject. Children are SelectMgr_SensitiveEntity obtaining by iteration on *Sensitive* |
+| SelectMgr_SensitiveEntity | It is a child of SelectMgr_Selection. Children are SelectMgr_SensitiveEntity obtaining by iteration on *OwnerId* |
+| SelectBasics_EntityOwner | It is a child SelectMgr_SensitiveEntity. It has no children. |
+
+
+Custom color of tree view items:
+
+| OCAF element Type | Column | What | Color |
+| :----- | :----- | :----- | :----- |
+| AIS_InteractiveObject | 0 | Text | <b>dark gray</b>, it is in *ErasedObjects* list of AIS_InteractiveContext,<br> <b>black</b> otherwise |
+| AIS_InteractiveObject, <br> SelectMgr_SensitiveEntity, <br> SelectBasics_EntityOwner| 1 | Background | <b>dark blue</b>, if there is a selected owner under the item, <br> <b>black</b> otherwise |
+| SelectMgr_Selection,<br> SelectMgr_SensitiveEntity,<br> SelectBasics_EntityOwner| all | Text | <b>dark gray</b>, if *SelectionState* of SelectMgr_Selection is not *SelectMgr_SOS_Activated*,<br> <b>black</b> otherwise |
+
+
+Context popup menu in tree view:
+| Action | Item | Functionality |
+| :----- | :----- | :----- |
+| Export to ShapeView | AIS_InteractiveObject | Exports TopoDS_Shape of AIS_Interactive presentation to ShapeView plugin. <br> It should be AIS_Shape presentation and ShapeView plugin should be registered in Inspector<br> Dialog about exporting element to ShapeView is shown with a possibility to activate this plugin immediatelly. |
+| Show | AIS_InteractiveObject | *Display* presentation in AIS_InteractiveContext |
+| Hide | AIS_InteractiveObject | *Erase* presentation from AIS_InteractiveContext |
+
+<b>Update</b>
+
+It synchronizes content of the plugin to the current state of AIS_InteractiveContext.
+It updates the presence of items and the current selection for the items.
+
+<b>Selection controls</b>
+
+Selection controls switch on/off the posibility to set selection in the context from VInspector plugin.
+
+| Action | Tree view item | Functionality |
+| :----- | :----- | :----- |
+| Select Presentations | AIS_InteractiveObject | Calls *AddOrRemoveSelected* of interactive object for the selected item |
+| Select Owners | SelectMgr_EntityOwner or <br> SelectMgr_SensitiveEntity | Calls *AddOrRemoveSelected* of SelectMgr_EntityOwner for the selected item |
+
+Please note, that the initial selection in context will be cleared.
+If the button is toggled, the button selection is active. Only one button may be toggled at the moment.
+
+
+<b>History view</b>
+
+At present the History view is under implementation and may be used only in a custom application where Inspector is loaded.
+
+To fill this view, VInspectorAPI_CallBack should be redefined in the application and send signals about some actions applyed to context.
+After, the call back should be given as parameter in the plugin.
+If done, new items will be created in the history view for each action.
+
+@subsubsection occt_inspector_2_3_3 Elements cooperation
+
+Vinspector markes current selected presentations in AIS_InteractiveContext with blue background in tree items. Use "Update" button to synchronize VInspector selected items state to the context.
+
+It is also possible to perform selection in context using "Selection controls" VInspector. However, it should be performed carefully as
+it clears the current selection in AIS_InteractiveContext.
+
+Selection change:
+| From | To | Action | Result |
+| :----- | :----- | :----- | :----- |
+| AIS_InteractiveContext | VInspector | perform selection in AIS_InteractiveContext | Click "Update" button in VInspector and check "Selection" column: <br> AIS_InteractiveContext item has anount of selected objects,<br> some of AIS_InteractiveObject have filled value if it selection happens for this presentation or entity owner of it |
+| VInspector | AIS_InteractiveContext | activate one of Selection controls and select one or several elements in tree view | The objects become selected in AIS_InteractiveContext |
+
+@subsection occt_inspector_2_4 ShapeView Plugin
+
+@subsubsection occt_inspector_2_4_1 Overview
+
+@figure{shapeview.png, "ShapeView"}
+
+This plugin visualizes content of TopoDS_Shape in a tree view.
+
+@subsubsection occt_inspector_2_4_2 Elements
+
+@figure{shapeview_elements.svg,"ShapeView Elements",360}
+
+<b>TopoDS_Shape View</b>
+
+Elements of the view are TopoDS_Shape objects.
+This shape is exploded into sub-shapes using TopoDS_Iterator of the TopoDS_Shape.
+Child sub-shapes are presented in the view as children of the initial shape.
+Iterating recursively by all shapes we obtain a tree view of items shown in the ShapeView.
+
+
+Columns of the View show some information about TopoDS_Shape of the item.
+The most informative column is the last column of TopoDS_Vertex and TopoDS_Edge shape types.
+
+For TopoDS_Vertex it contains the point coordinates,
+
+for TopoDS_Edge it contains the first and the last point coordinates, the edge length and some other parameters.
+
+
+Context popup menu in tree view:
+| Action | Functionality |
+| :----- | :----- |
+| Load BREP file | Opens selected file and appends the result TopoDS_Shape into tree view |
+| Remove all shape items | Clears tree view |
+| BREP view | Shows text view with BREP content of the selected item. It creates BREP file in temporary directory of the plugin. |
+| Close All BREP views | Closes all opened text views |
+| BREP directory | Displays folder where temporary BREP files have been stored.  |
+
+@subsubsection occt_inspector_2_4_3 Elements cooperation
+
+Selection of one or several items in TopoDS_Shape View creates AIS_Shape presentation for it and displays it in the 3D View.
+
+
+
+@section occt_inspector_3 Common controls
+@subsection occt_inspector_3_1 3D View
+
+@subsubsection occt_inspector_3_1_1 Overview
+
+@figure{3DView.png, "3D View"}
+
+Control for OCCT 3D viewer. It creates visualization view components with possibilities to perform some
+user actions for the view.
+
+
+@subsubsection occt_inspector_3_1_2 Elements
+
+@figure{3DView_elements.svg,"3DView Elements"}
+
+3D View contains:
+| Element | Functionality |
+| :----- | :----- |
+| 3D view | V3d viewer with mouse events processing |
+| Context | choice of another context that should be used in the plugin. <br> It is possible to use the next contexts:<br> Own - context of this view, <br> External - context come in parameters which intializes plugin, <br> None - do not perform visualization at all |
+| Multi/Single | Buttons defined what to do with the previous displayed objects: <br> Multi displays new presentations in additional to already displayed, <br> Single removes all previuos displayed presentations |
+| Clean | Removes all displayed presentations |
+| Fit All,<br> Fit Area,<br> Zoom,<br> Pan,<br> Rotation | Scene manipulation actions |
+| Display Mode | Sets *AIS_Shading* or *AIS_WireFrame* display mode for all presentations |
+
+
+@section occt_inspector_6 TInspectorEXE sample
+
+Inspector functionality can be tried using this sample.
+
+Use *inspector.bat* script file placed in binary directory of OCCT to launch it.
+
+This script accepts the names of plugin's DLL that should be loaded. By default it loads all described above plugins.
+
+
+@figure{TStandaloneEXE.png, "TStandaloneEXE"}
+
+Click on the Open button shows the dialog to select a file. The user is able to select one of the sample files or load own one.
+@figure{TStandaloneEXE_open.png, ""}
+
+Depending on the active plugin, the following files should be selected in the dialog:
+OCAF document or STEP files for DFBRowser and BREP files for VInspector and ShapeView plugins.
+
+It is possible to click the file name in the proposed directory, enter it manually or using Browser button.
+The last Loading icon becomes enabled if file name is correct.
+
+
+By default TInspectorEXE opens the next files for plugins:
+| Plugin DLL library name | Files |
+| :----- | :----- |
+| TKDFBrowser | step/screw.step |
+| TKVInspector | occ/hammer.brep |
+| TKShapeView | occ/face1.brep, <br> occ/face2.brep |
+
+These files are found relatively *CSF_OCCTDataPath*.
+
+
+Source code of TIspectorEXE is a good sample for @ref occt_inspector_8 "Using Inspector in a custom application".
+
+
+@section occt_inspector_7 Launch in DRAW Test Harness
+
+TKToolsDraw plugin is created to provide DRAW commands for Qt tools. Use INSPECTOR parameter of @ref occt_draw_1_3_3 "pload" 
+command to download commands of this library. It contains tinspector command to start Inspector under DRAW.
+See more detailed description of the @ref occt_draw_13_1 "tinspector" command.
+
+The simple code to start Inspector with all plugins loaded:
+
+~~~~~
+pload INSPECTOR
+tinspector
+~~~~~
+
+@figure{drawexe_tinspector.png,"tinspector"}
+
+Result of this command is the next:
+- all available Plugins are presented in the Inspector. These are @ref occt_inspector_2_2 "DFBrowser", @ref occt_inspector_2_3 "VInspector" and  @ref occt_inspector_2_4 "ShapeView".
+- DFBrowser is an active plugin
+- tree of OCAF is empty.
+
+After, we should create objects in DRAW and update tinspector.
+
+@section occt_inspector_8 Using in a custom application
+
+To use Inspector in an application, the next steps should be done:
+* Set dependencies to OCCT and Qt in application (Header and Link)
+* Create an instance of TInspector_Communicator.
+* Register plugins of interest in the communicator by DLL library name
+* Initialize communicator with objects that will be investigated
+* Set visible true for commumicator
+
+
+C++ code is similar:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
+
+#include <inspector/TInspector_Communicator.hxx>
+
+static TInspector_Communicator* MyTCommunicator;
+
+void CreateInspector()
+{
+  NCollection_List<Handle(Standard_Transient)> aParameters;
+  //... append parameters in the list
+
+  if (!MyTCommunicator)
+  {
+    MyTCommunicator = new TInspector_Communicator();
+
+    MyTCommunicator->RegisterPlugin ("TKDFBrowser");
+    MyTCommunicator->RegisterPlugin ("TKVInspector");
+    MyTCommunicator->RegisterPlugin ("TKShapeView");
+
+    MyTCommunicator->Init (aParameters);
+    MyTCommunicator->Activate ("TKDFBrowser");
+  }
+  MyTCommunicator->SetVisible (true);
+}
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+| Plugin | to be initialized by |
+| :----- | :----- |
+| TKDFBrowser | TDocStd_Application |
+| TKVInspector | AIS_InteractiveContext |
+| TKShapeView | TopoDS_TShape |
+
+
+
+@section occt_inspector_4 Build procedure
+
+By default the Inspector compilation is off.
+To compile it, set the <b>BUILD_Inspector</b> flag to "ON". See @ref build_cmake_conf "Configuration process".
+
+When this option is switched On, MS Visual Studio project has an additional tree of folders:
+
+@figure{VStudio_projects.png,"Inspector packages in MS Visual Studio"}
+
+
+@section occt_inspector_5 Sources and packaging
+
+OCCT sources are extended by the /tools directory.
+
+Distribution of packages participated in plugins:
+| Sources packages| Plugin |
+| :----- | :----- |
+| DFBrowser, <br> DFBrowserPane, <br> DFBrowserPaneXDE, <br> TKDFBrowser | DFBrowser |
+| VInspector, <br> TKVInspector  | VInspector |
+| ShapeView, <br> TKShapeView | ShapeView |
+
+Other packages:
+| Sources packages| Used in |
+| :----- | :----- |
+| TInspectorAPI, <br> TKInspectorAPI | Iterface for connection to plugin. |
+| TreeModel, <br> TKTreeView | Items-oriented model to simplify work with GUI tree control. |
+| View, <br> TKView | 3D View component |
+| TInspector, <br> TKTInspector  | Inspector window where plugins are placed |
+| ToolsDraw, <br> TKToolsDraw | Plugin for DRAW to start Inspector |
+
+
+In MSVC studio the separate folder contains Inspector projects.
+
+@section occt_inspector_9 Glossary
+* **Component** -- OCCT part, e.g. OCAF, VISUALIZATION, MODELING and others. 
+* **Plugin** -- library that is loaded in some executable/library. Here, the plugins are:
+  * DFBrowser,
+  * ShapeView,
+  * VInspector.
+
+@subsection occt_attribute_simple_types TDF_Attribute Simple types
+Types where the content is a single value
+
+| Type | Kind of value |
+| :----- | :----- |
+| TDataStd_AsciiString | TDataStd_AsciiString |
+| TDataStd_Comment | TCollection_ExtendedString |
+| TDataStd_Integer | Standard_Integer |
+| TDataStd_Name | TCollection_ExtendedString |
+| TDataStd_Real | Standard_Real |
+| TDF_Reference | TDF_Label |
+| TDF_TagSource | Standard_Integer |
+
+
+@subsection occt_attribute_list_types TDF_Attribute List types
+
+| Type | Kind of value (container of) |
+| :----- | :----- |
+| TDataStd_BooleanList | Standard_Boolean |
+| TDataStd_ExtStringList | TCollection_ExtendedString |
+| TDataStd_IntegerList | Standard_Integer |
+| TDataStd_RealList | Standard_Real |
+| TDataStd_ReferenceList | TDF_Label |
+
+@subsection occt_attribute_array_types TDF_Attribute Array types
+
+| Type | Kind of value (container of) |
+| :----- | :----- |
+| TDataStd_BooleanArray | Standard_Boolean |
+| TDataStd_ByteArray | Standard_Byte |
+| TDataStd_ExtStringArray | TCollection_ExtendedString |
+| TDataStd_IntegerArray | Standard_Integer |
+| TDataStd_RealArray | Standard_Real |
+| TDataStd_ReferenceArray | TDF_Label |
+
+@subsection occt_attribute_xde_tree_node_id XDE tree node ID description
+| GUID | Text |
+| :----- | :----- |
+| XCAFDoc::ShapeRefGUID() | Shape Instance Link |
+| XCAFDoc::ColorRefGUID (XCAFDoc_ColorGen) | Generic Color Link |
+| XCAFDoc::ColorRefGUID (XCAFDoc_ColorSurf) | Surface Color Link |
+| XCAFDoc::ColorRefGUID (XCAFDoc_ColorCurv) | Curve Color Link |
+| XCAFDoc::DimTolRefGUID() | DGT Link |
+| XCAFDoc::DatumRefGUID() | Datum Link |
+| XCAFDoc::MaterialRefGUID() | Material Link |
+
index aa9ff98..3571044 100644 (file)
@@ -17,4 +17,5 @@ OCCT User Guides are organized by OCCT modules:
   * @subpage occt_user_guides__xde  "Extended Data Exchange (XDE)"
 * @subpage occt_user_guides__ocaf "Open CASCADE Application Framework (OCAF)"
   * @subpage occt_user_guides__tobj "TObj package"
-* @subpage occt_user_guides__test_harness "DRAW Test Harness"
\ No newline at end of file
+* @subpage occt_user_guides__test_harness "DRAW Test Harness"
+* @subpage occt_user_guides__inspector "Inspector"
\ No newline at end of file
index a48dfe8..8810073 100644 (file)
@@ -101,7 +101,7 @@ set (BUILD_TOOLKITS
 string(TIMESTAMP CURRENT_TIME "%H:%M:%S")
 message (STATUS "\nInfo: \(${CURRENT_TIME}\) Start collecting all header files into ${CMAKE_BINARY_DIR}/inc ...")
 # collect all the headers to <binary dir>/inc folder
-COLLECT_AND_INSTALL_OCCT_HEADER_FILES ("${CMAKE_BINARY_DIR}" "${BUILD_TOOLKITS}" "${CASROOT_SOURCE_FILES}/tools" "${INSTALL_DIR_INCLUDE}")
+COLLECT_AND_INSTALL_OCCT_HEADER_FILES ("${CMAKE_BINARY_DIR}" "${BUILD_TOOLKITS}" "${CASROOT_SOURCE_FILES}/tools" "${INSTALL_DIR_INCLUDE}/inspector")
 
 OCCT_INCLUDE_CMAKE_FILE_STANDALONE ("adm/cmake/standalone_macros")
 OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/qt_macro")
index 3d4fb13..e138425 100644 (file)
@@ -1,53 +1,23 @@
-pload DCAF
-pload VISUALIZATION
-pload INSPECTOR
+pload DCAF VISUALIZATION INSPECTOR
 
-chrono qat start
-# Create a new document and set UndoLimit
 NewDocument D BinOcaf
 tinspector -plugins dfbrowser
 
-#NewDocument D
 cpulimit 300
 UndoLimit D 100
 
-# Open a transaction
 NewCommand D
 
-#1 - create box using more flexible set of commands
 NewCommand D
-# add object
+
 set B2 [AddObject D]
-# add function
 set F2 [AddFunction D $B2 Box]
-# set argumets of this function
 BoxDX D $B2 190
 BoxDY D $B2 290
 BoxDZ D $B2 390
-# initialize (clean) internal maps of labels
+
 InitLogBook D
 AddDriver D Box Attach Cyl
-# compute the function
 ComputeFun D $F2
 
-# check result
-set IsDone [catch {GetShape D $F2:2 Box2} aResult]
-if { ${IsDone} != 0 } {
-    puts "Error: Get a value of TNaming_NamedShape attribute from restoring document"
-} else {
-    puts "OK: Value of TNaming_NamedShape attribute from restoring document was got"
-}
-if { [regexp "SOLID FORWARD" [whatis Box2] ] != 1 } {
-    puts "Error: Box2 is not a solid forward"
-} else {
-    puts "OK: Box2 is  a solid forward"
-}
-
-# referes to result NS
-GetReference D $B2;                    
-
 tinspector -update
-vinit
-vdisplay Box2
-vfit
-checkview -screenshot -3d -path ${imagedir}/${test_image}.png
\ No newline at end of file
diff --git a/tests/tools/dfbrowser/A3 b/tests/tools/dfbrowser/A3
new file mode 100644 (file)
index 0000000..8e83cd5
--- /dev/null
@@ -0,0 +1,2 @@
+pload INSPECTOR
+tinspector -plugins dfbrowser -open $env(CSF_OCCTDataPath)/step/screw.step -select 0:1:1:1
diff --git a/tests/tools/dfbrowser/A4 b/tests/tools/dfbrowser/A4
new file mode 100644 (file)
index 0000000..4733e94
--- /dev/null
@@ -0,0 +1,150 @@
+pload DCAF INSPECTOR TOPTEST
+
+# Create the first document and set UndoLimit
+NewDocument Doc1 BinOcaf
+UndoLimit Doc1 100
+
+# Add an attribute to a data framework
+set aSetAttr1 100
+set aLabel 0:2
+SetInteger Doc1 ${aLabel} ${aSetAttr1}
+
+
+# Create the second document
+set test_name "OCC26961"
+set test_int 123
+set test_real 123.456e-7
+set test_int_arr {10 20}
+set test_real_arr {1.1 3.14 5.4e18}
+set test_extstr_arr {"sample string 1" "string 2"}
+set test_bool_arr {0 1}
+set test_ref_arr {"0:1:2:3:2" "0:1:2:3:1"}
+set test_byte_arr {15 25}
+set test_map {1 5 2 10}
+set test_map_sorted {1 2 5 10}
+set test_named_ints {i1 1 i2 2}
+set test_named_reals {r1 1.1 r2 2.2}
+set test_named_strings {s1 string1 s2 string2 s3 string3_string_extended s4 string4_double_extended s5 string5}
+set test_named_bytes {b1 65 b2 66}
+set test_ref "0:1:1"
+set test_guid "00000000-0000-0000-2222-000000000000"
+set test_comment "Sample document containing various attributes"
+set test_string "Sample string"
+set test_expr "2*pi*r"
+set test_var1 "0:1:2:3:2"
+set test_var2 "0:1:2:3:1"
+set test_point "111 222 333"
+set test_axisPos "10 10 30"
+set test_axisDir "11 22 33"
+set test_plane "15 25 35"
+set test_boxXYZ "10 20 30"
+set test_boxDX 100
+set test_boxDY 200
+set test_boxDZ 300
+set test_geom_t "cir"
+set test_failure 1
+set test_driver "G"
+set test_driver_id "2a96b604-ec8b-11d0-bee7-080009dc3333"
+set test_transp 0.5
+set test_color 11
+set test_material 22
+set test_positionX 100
+set test_positionY 200
+set test_positionZ 300
+
+puts "Creating document"
+NewDocument D BinOcaf
+
+# Simple values
+SetInteger     D 0:1:1 $test_int
+SetReal        D 0:1:1 $test_real
+SetName        D 0:1:1 $test_name
+SetComment     D 0:1:1 $test_comment
+SetAsciiString D 0:1:1 $test_string
+
+# TagSource
+SetTagger D 0:1:2
+  
+# Reference
+SetReference D 0:1:3 $test_ref
+  
+# Directory
+#NewDirectory D 0:1:2:1
+
+# UAttribute
+#SetUAttribute D 0:1:2:2 $test_guid
+
+# Variable
+SetVariable D $test_var2 0 mm
+SetVariable D $test_var1 1 ""
+
+# Relation
+SetRelation D 0:1:2:3 "2*pi*r" $test_var1 $test_var2
+
+# TreeNode
+SetNode D 0:1:2:4
+
+# Arrays
+eval SetIntArray       D 0:1:1 1 1 2 $test_int_arr
+eval SetRealArray      D 0:1:1 1 1 3 $test_real_arr
+eval SetExtStringArray D 0:1:1 1 1 2 $test_extstr_arr
+eval SetRefArray       D 0:1:1   1 2 $test_ref_arr
+eval SetByteArray      D 0:1:1 1 1 2 $test_byte_arr
+
+# Lists
+eval SetIntegerList   D 0:1:1 $test_int_arr
+eval SetRealList      D 0:1:1 $test_real_arr
+eval SetExtStringList D 0:1:1 $test_extstr_arr
+eval SetBooleanList   D 0:1:1 $test_bool_arr
+eval SetReferenceList D 0:1:1 $test_ref_arr
+
+# IntPackedMap
+eval SetIntPackedMap  D 0:1:1 1 $test_map
+
+# NamedData
+eval SetNDataIntegers   D 0:1:4 2 $test_named_ints
+eval SetNDataReals      D 0:1:4 2 $test_named_reals
+eval SetNDataStrings    D 0:1:4 5 $test_named_strings
+eval SetNDataBytes      D 0:1:4 2 $test_named_bytes
+eval SetNDataIntArrays  D 0:1:4 ia 2 $test_int_arr
+eval SetNDataRealArrays D 0:1:4 ra 3 $test_real_arr
+
+# NamedShape  
+eval box Box $test_boxXYZ $test_boxDX $test_boxDY $test_boxDZ
+SetShape D 0:1:6 Box
+
+# Point
+eval point Point $test_point
+SetPoint D 0:1:5:1 Point
+
+# Axis
+eval line Axis $test_axisPos $test_axisDir
+SetAxis D 0:1:5:2 Axis
+
+# Plane
+eval plane Plane $test_plane
+SetPlane D 0:1:5:3 Plane
+
+# Geometry
+SetGeometry D 0:1:6 $test_geom_t
+
+# Constraint
+SetConstraint D 0:1:1 equal 0:1:6
+
+# PatternStd
+SetPattern D 0:1:1 5 0:1:6
+
+# Function
+SetFunction D 0:1:1 $test_guid $test_failure
+
+# AISPresentation
+AISInitViewer D
+AISSet          D 0:1:1 $test_driver
+AISTransparency D 0:1:1 $test_transp
+AISColor        D 0:1:1 $test_color
+AISMaterial     D 0:1:1 $test_material
+
+# Position
+SetPosition D 0:1:1 $test_positionX $test_positionY $test_positionZ
+
+tinspector -plugins dfbrowser
diff --git a/tests/tools/dfbrowser/A5 b/tests/tools/dfbrowser/A5
new file mode 100644 (file)
index 0000000..6fdadd1
--- /dev/null
@@ -0,0 +1,78 @@
+pload TOPTEST
+pload VISUALIZATION
+pload XDE
+pload QAcommands
+pload DCAF
+
+set Test "TNaming_Builder test"
+set IsDone 1
+set TestError ""
+
+puts "Creating document"
+NewDocument D MDTV-Standard
+set TestLab 0:1
+
+#################### PRIMITIVE EVOLUTION ####################
+box b 100 200 300
+
+explode b E
+if {[catch {BuildNamedShape D $TestLab:1 PRIMITIVE b}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build solid as primitive"
+}
+if {[catch {BuildNamedShape D [set TestLab]:1:1 PRIMITIVE b_1}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build edge as alone primitive"
+}
+if {[catch {BuildNamedShape D [set TestLab]:1:1 PRIMITIVE b_1 b_2 b_3}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build several edges as primitive over the old one"
+}
+if {[catch {BuildNamedShape D [set TestLab]:1:2 PRIMITIVE b_4 b_5 b_6}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build several edges as primitive"
+}
+
+
+#################### GENERATED EVOLUTION ####################
+box b2 200 300 400
+explode b2 F
+if {[catch {BuildNamedShape D $TestLab:2 GENERATED b b2}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build solid as generation"
+}
+if {[catch {BuildNamedShape D [set TestLab]:2:1 GENERATED b_1 b2_1}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build face as alone generation"
+}
+if {[catch {BuildNamedShape D [set TestLab]:2:2 GENERATED b_2 b2_2 b_2 b2_3 b_3 b2_4}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build face as generation n:m"
+}
+if {[catch {BuildNamedShape D [set TestLab]:2:1 GENERATED b_3 b2_1 b_3 b2_3 b_4 b2_4}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build face as generation n:m to the exists named shape"
+}
+
+#################### MODIFY EVOLUTION ####################
+box b3 300 400 500
+explode b3 F
+if {[catch {BuildNamedShape D $TestLab:3 MODIFY b2 b3}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build solid as modification"
+}
+if {[catch {BuildNamedShape D [set TestLab]:3:1 MODIFY b2_1 b3_1}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build face as alone modification"
+}
+if {[catch {BuildNamedShape D [set TestLab]:3:2 MODIFY b2_5 b3_2 b2_2 b3_3 b2_3 b3_4}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build face as modification n:m"
+}
+if {[catch {BuildNamedShape D [set TestLab]:3:1 MODIFY b2_3 b3_1 b_3 b3_3 b2_4 b3_4}] == 1} {
+       set IsDone 0
+       set TestError "$TestError # Can't build face as modification n:m to the exists named shape"
+}
+
+pload INSPECTOR
+tinspector -select 0:1:3:2 TNaming_NamedShape
diff --git a/tests/tools/dfbrowser/A6 b/tests/tools/dfbrowser/A6
new file mode 100644 (file)
index 0000000..7395f50
--- /dev/null
@@ -0,0 +1,76 @@
+pload DCAF
+
+chrono qat start
+# Create a new document and set UndoLimit
+NewDocument D BinOcaf
+
+#NewDocument D
+cpulimit 300
+UndoLimit D 100
+
+# Open a transaction
+NewCommand D
+
+puts "caf005-I3"
+set QA_DUP 0
+
+# Add an attribute to a data framework
+set aLabel_Root 0:2
+set aName_Root Label_1
+Label D ${aLabel_Root}
+SetName D ${aLabel_Root} ${aName_Root}
+
+set aName1 Label_1_1
+###set aChild1 [NewChild D ${aLabel_Root}]
+set aChild1 0:2:1
+Label D ${aChild1}
+SetName D ${aChild1} ${aName1}
+
+set aName2 Label_1_2
+###set aChild2 [NewChild D ${aLabel_Root}]
+set aChild2 0:2:2
+Label D ${aChild2}
+SetName D ${aChild2} ${aName2}
+
+set aName3 Label_1_1_1
+###set aChild3 [NewChild D ${aLabel_Root}]
+set aChild3 0:2:3
+Label D ${aChild3}
+SetName D ${aChild3} ${aName3}
+
+set aName4 Label_1_1_2
+###set aChild4 [NewChild D ${aLabel_Root}]
+set aChild4 0:2:4
+Label D ${aChild4}
+SetName D ${aChild4} ${aName4}
+
+set aName5 Label_1_1_3
+###set aChild5 [NewChild D ${aLabel_Root}]
+set aChild5 0:2:5
+Label D ${aChild5}
+SetName D ${aChild5} ${aName5}
+
+set aName6 Label_1_2_1
+###set aChild6 [NewChild D ${aLabel_Root}]
+set aChild6 0:2:6
+Label D ${aChild6}
+SetName D ${aChild6} ${aName6}
+
+set aName7 Label_1_2_2
+###set aChild7 [NewChild D ${aLabel_Root}]
+set aChild7 0:2:7
+Label D ${aChild7}
+SetName D ${aChild7} ${aName7}
+
+SetNode D ${aLabel_Root}
+AppendNode D ${aLabel_Root} ${aChild1}
+AppendNode D ${aLabel_Root} ${aChild2}
+AppendNode D ${aChild1} ${aChild3}
+AppendNode D ${aChild1} ${aChild4}
+AppendNode D ${aChild1} ${aChild5}
+AppendNode D ${aChild2} ${aChild6}
+AppendNode D ${aChild2} ${aChild7}
+
+pload INSPECTOR
+
+tinspector -plugins dfbrowser -select 0:2:6 TDataStd_TreeNode
index 80a8f96..c8ade14 100644 (file)
@@ -1 +1,3 @@
 001 dfbrowser
+001 shapeview
+001 vinspector
diff --git a/tests/tools/shapeview/A1 b/tests/tools/shapeview/A1
new file mode 100644 (file)
index 0000000..5093256
--- /dev/null
@@ -0,0 +1,11 @@
+pload ALL INSPECTOR
+
+tinspector -plugins shapeview
+
+box b1 200 100 120
+tinspector -shape b1
+
+box b2 100 200 220 100 120 100
+tinspector -shape b2
+
+tinspector -activate shapeview -select b1
diff --git a/tests/tools/shapeview/A2 b/tests/tools/shapeview/A2
new file mode 100644 (file)
index 0000000..0e78f44
--- /dev/null
@@ -0,0 +1,5 @@
+pload ALL INSPECTOR
+
+tinspector -plugins shapeview
+
+tinspector -open $env(CSF_OCCTDataPath)/occ/solid.brep shapeview
diff --git a/tests/tools/vinspector/A1 b/tests/tools/vinspector/A1
new file mode 100644 (file)
index 0000000..abc11f9
--- /dev/null
@@ -0,0 +1,18 @@
+pload ALL INSPECTOR
+
+tinspector -plugins vinspector
+
+vinit
+
+box box_1 0 0 200 100 100 100
+vdisplay box_1
+vselmode box_1 1 1
+vselmode box_1 3 1
+
+box box_2 180 120 200 150 150 150
+vdisplay box_2
+
+vfit
+
+tinspector -update -select box_1
+
diff --git a/tests/tools/vinspector/A2 b/tests/tools/vinspector/A2
new file mode 100644 (file)
index 0000000..54c6066
--- /dev/null
@@ -0,0 +1,9 @@
+pload ALL INSPECTOR
+
+tinspector -plugins vinspector
+
+vinit
+
+tinspector -open $env(CSF_OCCTDataPath)/occ/solid.brep
+vfit
+
index fd5a1a1..3d7b55e 100644 (file)
@@ -15,7 +15,7 @@
 
 #include <inspector/DFBrowser_HighlightDelegate.hxx>
 
-#include <inspector/DFBrowser_Window.hxx>
+#include <inspector/DFBrowserPane_Tools.hxx>
 #include <QPainter>
 
 // =======================================================================
@@ -28,7 +28,7 @@ void DFBrowser_HighlightDelegate::paint (QPainter* thePainter, const QStyleOptio
   // highlight cell
   if (theOption.state & QStyle::State_MouseOver)
   {
-    QColor aHighlightColor = DFBrowser_Window::LightHighlightColor();
+    QColor aHighlightColor = DFBrowserPane_Tools::LightHighlightColor();
     thePainter->fillRect (theOption.rect, aHighlightColor);
   }
   // default paint
index 96b09a4..d06f24d 100644 (file)
 #ifndef DFBrowser_ItemRole_H
 #define DFBrowser_ItemRole_H
 
+#include <inspector/DFBrowserPane_ItemRole.hxx>
+
 #include <Qt>
 
 //! Additional data item role for DFBrowser tree item
 enum DFBrowser_ItemRole
 {
-  DFBrowser_ItemRole_AdditionalInfo = Qt::UserRole + 1 //!< an attribute additional information 
+  DFBrowser_ItemRole_AdditionalInfo = DFBrowserPane_ItemRole_LastTreeRole + 1 //!< an attribute additional information 
 };
 
 #endif
index 101eb37..d098189 100644 (file)
@@ -65,8 +65,7 @@ public:
     QRect aLineRect = rect();
     Qt::Alignment anAlignment = QStyle::visualAlignment (layoutDirection(), Qt::AlignLeft);
 
-    QColor aColor = palette().text().color();
-    aColor.setAlpha (128);
+    QColor aColor = Qt::gray;
     QPen anOldpen = aPainter.pen();
     aPainter.setPen (aColor);
     aLineRect.adjust (4, 4, 0, 0);
index c0416aa..54d694d 100644 (file)
@@ -82,10 +82,11 @@ void DFBrowser_SearchView::InitModels()
 // function : onTableSelectionChanged
 // purpose :
 // =======================================================================
-void DFBrowser_SearchView::onTableSelectionChanged (const QItemSelection& theSelected,
+void DFBrowser_SearchView::onTableSelectionChanged (const QItemSelection&,
                                                    const QItemSelection&)
 {
-  QModelIndexList aSelectedIndices = theSelected.indexes();
+  QItemSelectionModel* aSelectionModel = myTableView->selectionModel();
+  QModelIndexList aSelectedIndices = aSelectionModel->selectedIndexes();
   QModelIndex aSelectedIndex = DFBrowser_Window::SingleSelected (aSelectedIndices, 2);
   if (!aSelectedIndex.isValid())
     return;
index 8714f4f..24ed7d2 100644 (file)
@@ -34,6 +34,7 @@
 #include <QWidget>
 
 const int HISTORY_SIZE = 10;
+const int MARGIN_SIZE = 2;
 
 // =======================================================================
 // function : Constructor
@@ -44,7 +45,7 @@ DFBrowser_TreeLevelLine::DFBrowser_TreeLevelLine (QWidget* theParent)
 {
   myMainWindow = new QWidget (theParent);
   QGridLayout* aLayout = new QGridLayout (myMainWindow);
-  aLayout->setContentsMargins (0, 0, 0, 0);
+  aLayout->setContentsMargins (MARGIN_SIZE, MARGIN_SIZE, MARGIN_SIZE, MARGIN_SIZE);
 
   myBackwardButton = new QToolButton (myMainWindow);
   myBackwardButton->setIcon (QIcon (":/icons/treeline_backward.png"));
@@ -64,13 +65,12 @@ DFBrowser_TreeLevelLine::DFBrowser_TreeLevelLine (QWidget* theParent)
   aVHeader->setVisible (false);
   int aDefCellSize = aVHeader->minimumSectionSize() + DFBrowserPane_Tools::HeaderSectionMargin();
   aVHeader->setDefaultSectionSize (aDefCellSize);
-  aLayout->addWidget (myTableView, 0, 2, 2, 1);
+  aLayout->addWidget (myTableView, 0, 2);
 
-  int aScrollHeight = myTableView->horizontalScrollBar()->sizeHint().height();
-  myTableView->setFixedHeight (aDefCellSize + aScrollHeight);
+  myTableView->setFixedHeight (aDefCellSize);
   myTableView->horizontalHeader()->setMinimumSectionSize (5); // it will be resized by context
   myTableView->setHorizontalScrollMode (QAbstractItemView::ScrollPerItem);
-  myTableView->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOn); //! TEMPORARY
+  myTableView->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff); //! TEMPORARY
   myTableView->setShowGrid (false);
 
   DFBrowser_TreeLevelLineModel* aHModel = new DFBrowser_TreeLevelLineModel (myTableView);
index 9eb9cc5..1b1be9f 100644 (file)
@@ -14,7 +14,7 @@
 // commercial license or contractual agreement. 
 
 #include <inspector/DFBrowser_TreeLevelLineDelegate.hxx>
-#include <inspector/DFBrowser_Window.hxx>
+#include <inspector/DFBrowserPane_Tools.hxx>
 
 #include <QPainter>
 
@@ -36,7 +36,7 @@ void DFBrowser_TreeLevelLineDelegate::paint (QPainter* thePainter, const QStyleO
 {
   // highlight cell
   if (theOption.state & QStyle::State_MouseOver)
-    thePainter->fillRect (theOption.rect, DFBrowser_Window::LightHighlightColor());
+    thePainter->fillRect (theOption.rect, DFBrowserPane_Tools::LightHighlightColor());
 
   // action icon for all indices before the last one
   if (theIndex.column() < theIndex.model()->columnCount()-1)
index 60e8998..855aacd 100644 (file)
@@ -28,7 +28,7 @@
 #include <QTableView>
 #include <QWidget>
 
-const int DEFAULT_COLUMN_WIDTH = 300;
+const int LABEL_OR_ATTRIBUTECOLUMN_WIDTH = 160;
 
 // =======================================================================
 // function : Constructor
@@ -43,11 +43,12 @@ DFBrowser_TreeLevelView::DFBrowser_TreeLevelView (QWidget* theParent)
 
   myTableView = new QTableView (myMainWindow);
   myTableView->setModel (new DFBrowser_TreeLevelViewModel (myTableView));
-  myTableView->setColumnWidth (0, DEFAULT_COLUMN_WIDTH);
+  myTableView->setColumnWidth (0, LABEL_OR_ATTRIBUTECOLUMN_WIDTH);
   myTableView->setEditTriggers (QAbstractItemView::DoubleClicked);
+  myTableView->horizontalHeader()->setVisible (false);
   QHeaderView* aVHeader = myTableView->verticalHeader();
   aVHeader->setVisible (false);
-  aVHeader->setDefaultSectionSize (aVHeader->minimumSectionSize() + DFBrowserPane_Tools::HeaderSectionMargin());
+  aVHeader->setDefaultSectionSize (aVHeader->minimumSectionSize());
   myTableView->horizontalHeader()->setStretchLastSection (true);
   aLayout->addWidget (myTableView);
 
index e618568..9f442d0 100644 (file)
@@ -26,6 +26,9 @@
 #include <TDF_Label.hxx>
 #include <inspector/TreeModel_ModelBase.hxx>
 
+#include <QApplication>
+#include <QColor>
+#include <QFont>
 #include <QIcon>
 
 // =======================================================================
@@ -84,7 +87,7 @@ QVariant DFBrowser_TreeLevelViewModel::data (const QModelIndex& theIndex, int th
 
   QVariant aValue;
   TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (anIndex);
-  if (anIndex.column() == 0)
+  if (theIndex.column() == 0)
   {
     DFBrowser_ItemBasePtr aDBrowserItem = itemDynamicCast<DFBrowser_ItemBase> (anItemBase);
     bool aPrevValue = aDBrowserItem->SetUseAdditionalInfo (false);
@@ -99,6 +102,15 @@ QVariant DFBrowser_TreeLevelViewModel::data (const QModelIndex& theIndex, int th
         aValue = anItem->GetAttributeInfo (DFBrowser_ItemRole_AdditionalInfo);
     }
   }
+  if (theIndex.column() == 0 && theRole == Qt::FontRole) // method name is in italic
+  {
+    QFont aFont = qApp->font();
+    aFont.setItalic (true);
+    return aFont;
+  }
+  if (theIndex.column() == 0 && theRole == Qt::ForegroundRole) // method name is light gray
+    return QColor (Qt::darkGray).darker(150);
+
   return aValue;
 }
 
index ce91e80..c23a43f 100644 (file)
@@ -252,6 +252,6 @@ void DFBrowser_TreeModel::ConvertToIndices (const NCollection_List<Handle(TDF_At
 QVariant DFBrowser_TreeModel::data (const QModelIndex& theIndex, int theRole) const
 {
   if (theRole == Qt::BackgroundRole && myHighlightedIndices.contains (theIndex))
-    return DFBrowser_Window::LightHighlightColor();
+    return DFBrowserPane_Tools::LightHighlightColor();
   return TreeModel_ModelBase::data (theIndex, theRole);
 }
index 640dfd1..452ef75 100644 (file)
@@ -68,9 +68,6 @@
 #include <QGridLayout>
 #include <QList>
 #include <QMainWindow>
-#if QT_VERSION < 0x050000
-#include <QMotifStyle>
-#endif
 #include <QItemSelectionModel>
 #include <QTabWidget>
 #include <QToolBar>
@@ -85,9 +82,9 @@
 #include <QStyleFactory>
 #endif
 
-const int DFBROWSER_DEFAULT_WIDTH = 1200;
-const int DFBROWSER_DEFAULT_HEIGHT = 850;
-const int DFBROWSER_DEFAULT_TREE_VIEW_WIDTH = 300;
+const int DFBROWSER_DEFAULT_WIDTH = 650;
+const int DFBROWSER_DEFAULT_HEIGHT = 350;
+const int DFBROWSER_DEFAULT_TREE_VIEW_WIDTH = 325;
 const int DFBROWSER_DEFAULT_TREE_VIEW_HEIGHT = 500;
 const int DFBROWSER_DEFAULT_VIEW_WIDTH = 400;
 const int DFBROWSER_DEFAULT_VIEW_HEIGHT = 300;
@@ -96,7 +93,7 @@ const int DFBROWSER_DEFAULT_POSITION_X = 200;
 const int DFBROWSER_DEFAULT_POSITION_Y = 60;
 
 const int OCAF_BROWSER_COLUMN_WIDTH_0 = 300;
-const int DEFAULT_PROPERTY_PANEL_HEIGHT = 100;
+const int DEFAULT_PROPERTY_PANEL_HEIGHT = 200;
 const int DEFAULT_BROWSER_HEIGHT = 800;
 
 // =======================================================================
@@ -119,6 +116,7 @@ DFBrowser_Window::DFBrowser_Window()
   myTreeView->setSortingEnabled (Standard_False);
 
   QDockWidget* aTreeViewWidget = new QDockWidget (tr ("TreeView"), myMainWindow);
+  aTreeViewWidget->setTitleBarWidget (new QWidget(myMainWindow));
   aTreeViewWidget->setFeatures (QDockWidget::NoDockWidgetFeatures);
   aTreeViewWidget->setWidget (myTreeView);
   myMainWindow->addDockWidget (Qt::LeftDockWidgetArea, aTreeViewWidget);
@@ -137,6 +135,7 @@ DFBrowser_Window::DFBrowser_Window()
   connect (myTreeLevelLine, SIGNAL (updateClicked()), this, SLOT (onUpdateClicked()));
 
   QDockWidget* aTreeLineDockWidget = new QDockWidget (tr ("Tree Level Line"), myMainWindow);
+  aTreeLineDockWidget->setTitleBarWidget (new QWidget(myMainWindow));
   aTreeLineDockWidget->setFeatures (QDockWidget::NoDockWidgetFeatures);
   aTreeLineDockWidget->setWidget (myTreeLevelLine->GetControl());
   myMainWindow->addDockWidget (Qt::TopDockWidgetArea, aTreeLineDockWidget);
@@ -148,6 +147,7 @@ DFBrowser_Window::DFBrowser_Window()
   myDumpView = new DFBrowser_DumpView (aDumpWidget);
   aDumpLay->addWidget (myDumpView->GetControl());
   QDockWidget* aDumpDockWidget = new QDockWidget (tr ("Dump"), myMainWindow);
+
   aDumpDockWidget->setWidget (aDumpWidget);
   myMainWindow->addDockWidget (Qt::BottomDockWidgetArea, aDumpDockWidget);
 
@@ -178,18 +178,16 @@ DFBrowser_Window::DFBrowser_Window()
   myViewWindow->GetView()->SetPredefinedSize (DFBROWSER_DEFAULT_VIEW_WIDTH, DFBROWSER_DEFAULT_VIEW_HEIGHT);
 
   QDockWidget* aViewDockWidget = new QDockWidget (tr ("View"), myMainWindow);
+  aViewDockWidget->setTitleBarWidget (myViewWindow->GetViewToolBar()->GetControl());
   aViewDockWidget->setWidget (myViewWindow);
   myMainWindow->addDockWidget (Qt::BottomDockWidgetArea, aViewDockWidget);
 
-  QColor aHColor = DFBrowser_Window::LightHighlightColor();
+  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);
   myMainWindow->tabifyDockWidget (aDumpDockWidget, aViewDockWidget);
 
-  myMainWindow->resize (DFBROWSER_DEFAULT_WIDTH, DFBROWSER_DEFAULT_HEIGHT);
-  myMainWindow->move (DFBROWSER_DEFAULT_POSITION_X, DFBROWSER_DEFAULT_POSITION_Y);
-
-  aTreeViewWidget->resize (DFBROWSER_DEFAULT_TREE_VIEW_WIDTH, DFBROWSER_DEFAULT_HEIGHT);
+  aTreeViewWidget->resize (DFBROWSER_DEFAULT_TREE_VIEW_WIDTH, DFBROWSER_DEFAULT_TREE_VIEW_HEIGHT);
 
   myThread = new DFBrowser_Thread (this);
 
@@ -792,6 +790,7 @@ void DFBrowser_Window::onPaneSelectionChanged (const QItemSelection&,
   if (!aPresentation.IsNull())
     aDisplayer->DisplayPresentation (aPresentation, View_PresentationType_Additional);
   else {
+    aDisplayer->ErasePresentations (View_PresentationType_Additional, false);
     AIS_ListOfInteractive aDisplayed;
     findPresentations (anIndices, aDisplayed);
     for (AIS_ListIteratorOfListOfInteractive aDisplayedIt (aDisplayed); aDisplayedIt.More(); aDisplayedIt.Next())
@@ -904,7 +903,7 @@ void DFBrowser_Window::highlightIndices (const QModelIndexList& theIndices)
   aTreeModel->SetHighlighted (theIndices);
 
   QModelIndex anIndexToScroll;
-  if (theIndices.size() > 0)
+  if (!theIndices.isEmpty())
     anIndexToScroll = theIndices.last(); // scroll to last selected index
   else
   {
@@ -917,6 +916,9 @@ void DFBrowser_Window::highlightIndices (const QModelIndexList& theIndices)
   if (anIndexToScroll.isValid())
     myTreeView->scrollTo (anIndexToScroll);
 
+  if (theIndices.isEmpty())
+    myTreeView->setFocus(); // to see the selected item in active palette color
+
   aTreeModel->EmitLayoutChanged();
 }
 
index 20dd55b..8eb8e60 100644 (file)
@@ -110,10 +110,6 @@ public:
   //! \return string value
   Standard_EXPORT static TCollection_AsciiString TmpDirectory();
 
-  //! Returns light highlight color
-  //! \returns Qt color
-  static QColor LightHighlightColor() { return QColor (229, 243, 255); }
-
   //! 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
index bdcc8a3..1b1326e 100644 (file)
 // purpose :
 // =======================================================================
 DFBrowserPane_AttributePane::DFBrowserPane_AttributePane()
-: DFBrowserPane_AttributePaneAPI(), myMainWidget (0), myTableView (0), myPaneModel (0)
+: DFBrowserPane_AttributePaneAPI(), myMainWidget (0), myTableView (0)
 {
   myPaneModel = new DFBrowserPane_AttributePaneModel();
 
-  QList<QVariant> aHeaderValues;
-  aHeaderValues << "Values";
-  getPaneModel()->SetHeaderValues (aHeaderValues, Qt::Horizontal);
+  getPaneModel()->SetColumnCount (getColumnCount());
+  getPaneModel()->SetHeaderValues (getHeaderValues(Qt::Horizontal), Qt::Horizontal);
 
   mySelectionModels.push_back (new QItemSelectionModel (myPaneModel));
 }
@@ -66,6 +65,14 @@ QWidget* DFBrowserPane_AttributePane::CreateWidget (QWidget* theParent)
   myTableView = new DFBrowserPane_TableView (aMainWidget, getTableColumnWidths());
   myTableView->SetModel (myPaneModel);
   QTableView* aTableView = myTableView->GetTableView();
+  DFBrowserPane_AttributePaneModel* aPaneModel = dynamic_cast<DFBrowserPane_AttributePaneModel*>(myPaneModel);
+  if (aPaneModel)
+  {
+    if (aPaneModel->GetOrientation() == Qt::Vertical)
+      aTableView->horizontalHeader()->setVisible (!aPaneModel->HeaderValues (Qt::Horizontal).isEmpty());
+    else
+      aTableView->verticalHeader()->setVisible (!aPaneModel->HeaderValues (Qt::Vertical).isEmpty());
+  }
   aTableView->setSelectionModel (mySelectionModels.front());
   aTableView->setSelectionBehavior (QAbstractItemView::SelectRows);
 
@@ -85,6 +92,9 @@ void DFBrowserPane_AttributePane::Init (const Handle(TDF_Attribute)& theAttribut
   QList<QVariant> aValues;
   GetValues (theAttribute, aValues);
   getPaneModel()->Init (aValues);
+
+  if (myTableView)
+    myTableView->GetTableView()->resizeColumnToContents (0);
 }
 
 // =======================================================================
@@ -112,6 +122,19 @@ QVariant DFBrowserPane_AttributePane::GetAttributeInfo (const Handle(TDF_Attribu
 }
 
 // =======================================================================
+// function : GetShortAttributeInfo
+// purpose :
+// =======================================================================
+void DFBrowserPane_AttributePane::GetShortAttributeInfo (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues)
+{
+  QList<QVariant> aValues;
+  GetValues(theAttribute, aValues);
+
+  for (int aValuesEvenId  = 1; aValuesEvenId < aValues.size(); aValuesEvenId = aValuesEvenId + 2)
+    theValues.append (aValues[aValuesEvenId]);
+}
+
+// =======================================================================
 // function : GetAttributeInfoByType
 // purpose :
 // =======================================================================
index 972ad80..8ad949d 100644 (file)
@@ -84,11 +84,10 @@ public:
   //! \return value, interpreted by tree model depending on the role
   Standard_EXPORT virtual QVariant GetAttributeInfo(const Handle(TDF_Attribute)& theAttribute, int theRole, int theColumnId);
 
-  //! Returns brief attribute information. In general case, it returns GetValues() result.
+  //! Returns brief attribute information. In general case, it returns even values of GetValues() result.
   //! \param theAttribute a current attribute
   //! \param theValues a result list of values
-  virtual void GetShortAttributeInfo (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues)
-  { GetValues(theAttribute, theValues); }
+  Standard_EXPORT virtual void GetShortAttributeInfo (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues);
 
   //! Returns list of selection models. In default implementation it contains a selection model for the table view
   //! \returns container of models
@@ -102,6 +101,16 @@ protected:
   //! Returns converted table view
   DFBrowserPane_TableView* getTableView() const { return myTableView; }
 
+  //! Returns header text values for 0...n table cells in parameter orientation
+  //! \param theOrientation defines horizontal or vertical values
+  //! \param theValues output container of values
+  virtual QList<QVariant> getHeaderValues (const Qt::Orientation theOrientation)
+    { (void)theOrientation; return QList<QVariant>(); }
+
+  //! Retuns number of columns in internal table. By default it returns 2 : method name for method value.
+  //! \return integer value
+  virtual int getColumnCount() const { return 2; }
+
   //! Defines widths of table columns
   //! \return container of widths
   Standard_EXPORT virtual QMap<int, int> getTableColumnWidths() const;
index ff6aac7..3b306b4 100644 (file)
 
 #include <inspector/DFBrowserPane_AttributePaneModel.hxx>
 
+#include <QApplication>
+#include <QFont>
+#include <QColor>
+
 // =======================================================================
 // function : Constructor
 // purpose :
@@ -22,6 +26,7 @@
 DFBrowserPane_AttributePaneModel::DFBrowserPane_AttributePaneModel (QObject* theParent)
 : QAbstractTableModel (theParent), myOrientation (Qt::Vertical), myColumnCount (1)
 {
+  myItalicColumns.append (0);
 }
 
 // =======================================================================
@@ -120,6 +125,15 @@ QVariant DFBrowserPane_AttributePaneModel::data (const QModelIndex& theIndex, in
       aValue = aColValues.at (theIndex.row());
     }
   }
+  if (myItalicColumns.contains (theIndex.column()) && theRole == Qt::FontRole)
+  {
+    QFont aFont = qApp->font();
+    aFont.setItalic (true);
+    return aFont;
+  }
+  if (myItalicColumns.contains (theIndex.column()) && theRole == Qt::ForegroundRole)
+    return QColor (Qt::darkGray).darker(150);
+
   return aValue;
 }
 
index 8177df3..047ea67 100644 (file)
@@ -46,35 +46,53 @@ public:
   //! \param theOrientation if horizontal, the values are applyed by rows, otherwise by columns
   void SetOrientation (const Qt::Orientation& theOrientation) { myOrientation = theOrientation; }
 
+  //! Returns table orientation for setting data values
+  //! \return thye current orientation
+  Qt::Orientation GetOrientation() const { return myOrientation; }
+
   //! Sets number of columns
   //! \param theColumnCount a column count
   void SetColumnCount (const int theColumnCount) { myColumnCount = theColumnCount; }
 
   //! Fills the model with the values. Store the values in a cache.
   //! \param theValues a container of values
-  Standard_EXPORT void Init(const QList<QVariant>& theValues);
+  Standard_EXPORT void Init (const QList<QVariant>& theValues);
 
   //! Fills the model header values for orientation.
   //! \param theValues a container of header text values
   //! \param theOrientation an orientation of header
-  Standard_EXPORT void SetHeaderValues(const QList<QVariant>& theValues, Qt::Orientation theOrientation);
+  Standard_EXPORT void SetHeaderValues (const QList<QVariant>& theValues, Qt::Orientation theOrientation);
+
+  //! Returns header values for orientation.
+  //! \param theValues a container of header text values
+  //! \param theOrientation an orientation of header
+  const QList<QVariant>& HeaderValues (Qt::Orientation theOrientation)
+    { return theOrientation == Qt::Horizontal ? myHorizontalHeaderValues : myVerticalHeaderValues; }
+
+  //! Returns indices of italic columns
+  //! \return indices of columns
+  const QList<int>& GetItalicColumns() const { return myItalicColumns; }
+
+  //! Sets indices of italic columns
+  //! \param theValues indices of columns
+  void SetItalicColumns (const QList<int>& theValues) { myItalicColumns = theValues; }
 
   //! Returns number of columns, depending on orientation: myColumnCount or size of values container
   //! \param theParent an index of the parent item
   //! \return an integer value
-  Standard_EXPORT virtual int columnCount(const QModelIndex& theParent = QModelIndex()) const Standard_OVERRIDE;
+  Standard_EXPORT virtual int columnCount (const QModelIndex& theParent = QModelIndex()) const Standard_OVERRIDE;
 
   //! Returns number of rows, depending on orientation: myColumnCount or size of values container
   //! \param theParent an index of the parent item
   //! \return an integer value
-  Standard_EXPORT virtual int rowCount(const QModelIndex& theParent = QModelIndex()) const Standard_OVERRIDE;
+  Standard_EXPORT virtual int rowCount (const QModelIndex& theParent = QModelIndex()) const Standard_OVERRIDE;
 
   //! Returns content of the model index for the given role, it is obtained from internal container of values
   //! It returns value only for DisplayRole.
   //! \param theIndex a model index
   //! \param theRole a view role
   //! \return value intepreted depending on the given role
-  Standard_EXPORT virtual QVariant data(const QModelIndex& theIndex, int theRole = Qt::DisplayRole) const Standard_OVERRIDE;
+  Standard_EXPORT virtual QVariant data (const QModelIndex& theIndex, int theRole = Qt::DisplayRole) const Standard_OVERRIDE;
 
   //! Returns content of the model index for the given role, it is obtainer from internal container of header values
   //! It returns value only for DisplayRole.
@@ -82,7 +100,7 @@ public:
   //! \param theIndex a model index
   //! \param theRole a view role
   //! \return value intepreted depending on the given role
-  Standard_EXPORT virtual QVariant headerData(int theSection, Qt::Orientation theOrientation, int theRole = Qt::DisplayRole) const Standard_OVERRIDE;
+  Standard_EXPORT virtual QVariant headerData (int theSection, Qt::Orientation theOrientation, int theRole = Qt::DisplayRole) const Standard_OVERRIDE;
 
   //! Returns flags for the item: ItemIsEnabled | Qt::ItemIsSelectable
   //! \param theIndex a model index
@@ -97,6 +115,8 @@ private:
   QMap< int, QList<QVariant> > myValuesMap; //!< container of values, filled in Init(), used in data()
   QList<QVariant> myHorizontalHeaderValues; //!< table horizontal header values
   QList<QVariant> myVerticalHeaderValues; //!< table vertical header values
+  QList<int> myItalicColumns; //!< indices of columns that should be visualized in gray and italic
+
 };
 
 #endif
index 7848c10..f52bbd4 100644 (file)
 
 #include <inspector/DFBrowserPane_AttributePaneModel.hxx>
 
+#include <qheaderview.h>
+#include <QGridLayout>
 #include <QList>
+#include <QTableView>
 #include <QVariant>
-#include <QGridLayout>
 #include <QWidget>
 
 // =======================================================================
 // purpose :
 // =======================================================================
 DFBrowserPane_HelperArray::DFBrowserPane_HelperArray (DFBrowserPane_AttributePaneModel* theValuesModel)
- : myValuesModel (theValuesModel)
+ : myValuesModel (theValuesModel), myArrayBounds (0), myValuesView (0)
 {
   myBoundsModel = new DFBrowserPane_AttributePaneModel();
-
-  QList<QVariant> aHeaderValues;
-  aHeaderValues << "Bounds";
-  myBoundsModel->SetHeaderValues (aHeaderValues, Qt::Horizontal);
+  myBoundsModel->SetColumnCount (2);
 }
 
 // =======================================================================
 // function : CreateWidget
 // purpose :
 // =======================================================================
-void DFBrowserPane_HelperArray::CreateWidget (QWidget* theParent, QWidget* theValuesView)
+void DFBrowserPane_HelperArray::CreateWidget (QWidget* theParent, DFBrowserPane_TableView* theValuesView)
 {
+  myValuesView = theValuesView;
   myArrayBounds = new DFBrowserPane_TableView (theParent);
   myArrayBounds->SetModel (myBoundsModel);
   DFBrowserPane_TableView::SetFixedRowCount (2, myArrayBounds->GetTableView());
 
   QGridLayout* aLay = new QGridLayout (theParent);
+  aLay->setContentsMargins (0, 0, 0, 0);
   aLay->addWidget (myArrayBounds);
   aLay->addWidget (theValuesView);
   aLay->setRowStretch (1, 1);
@@ -60,19 +61,19 @@ void DFBrowserPane_HelperArray::CreateWidget (QWidget* theParent, QWidget* theVa
 void DFBrowserPane_HelperArray::Init (const QList<QVariant>& theValues)
 {
   QList<QVariant> aTmpValues;
-  aTmpValues << theValues[0] << theValues[1];
+  aTmpValues << "Lower" << theValues[0] << "Upper" << theValues[1];
   myBoundsModel->Init (aTmpValues);
 
   aTmpValues.clear();
-  QList<QVariant> aHeaderValues;
   int aLower = theValues[0].toInt();
-  for (int aValuesIt = 2, aSize = theValues.size(); aValuesIt < aSize; aValuesIt++)
-  {
-    aTmpValues << theValues[aValuesIt];
-    aHeaderValues << aLower + (aValuesIt - 2);
-  }
-  myValuesModel->SetHeaderValues (aHeaderValues, Qt::Vertical);
+  for (int aValueIt = 2, aSize = theValues.size(); aValueIt < aSize; aValueIt++)
+    aTmpValues << QString ("Value (%1)").arg(aValueIt-2 + aLower) << theValues[aValueIt];
   myValuesModel->Init (aTmpValues);
+
+  if (myArrayBounds)
+    myArrayBounds->GetTableView()->resizeColumnToContents (0);
+  if (myValuesView)
+    myValuesView->GetTableView()->resizeColumnToContents (0);
 }
 
 // =======================================================================
@@ -83,5 +84,5 @@ void DFBrowserPane_HelperArray::GetShortAttributeInfo (const Handle(TDF_Attribut
                                                        QList<QVariant>& theValues)
 {
   for (int aRowId = 0, aRows = myValuesModel->rowCount(); aRowId < aRows; aRowId++)
-    theValues.append (myValuesModel->data (myValuesModel->index (aRowId, 0)));
+    theValues.append (myValuesModel->data (myValuesModel->index (aRowId, 1)));
 }
index 350d6bc..071a1bd 100644 (file)
@@ -47,7 +47,7 @@ public:
   //! Creates bounds table view and grid layout, where the bounds view and the values view are shown
   //! \param theParent a parent widget
   //! \param theValuesView a view of values(table view filled by myValuesModel)
-  Standard_EXPORT void CreateWidget(QWidget* theParent, QWidget* theValuesView);
+  Standard_EXPORT void CreateWidget(QWidget* theParent, DFBrowserPane_TableView* theValuesView);
 
   //! Fills bounds model by firsth and second values, fills values model by left values
   //! \param theValues values to fill views
@@ -63,5 +63,6 @@ private:
   DFBrowserPane_AttributePaneModel* myValuesModel; //!< model of table view
   DFBrowserPane_AttributePaneModel* myBoundsModel; //!< model of bounds view
   DFBrowserPane_TableView* myArrayBounds; //!< bounds view
+  DFBrowserPane_TableView* myValuesView; //!< values view
 };
 #endif
index 9cdf77f..aa00516 100644 (file)
@@ -47,7 +47,11 @@ void DFBrowserPane_HelperExport::OnButtonPressed (const QModelIndex& theIndex)
 
   QString aFileExtension = ".brep";
 
+#if QT_VERSION < 0x050000
   QString aFilter (tr ("BREP file (*%1*)").arg (aFileExtension));
+#else
+  QString aFilter;
+#endif
   QString aSelectedFilter;
   QString aFileName = QFileDialog::getSaveFileName (0, tr ("Export shape to BREP file"), QString(),
                                                     aFilter, &aSelectedFilter);
diff --git a/tools/DFBrowserPane/DFBrowserPane_HelperGroupContent.cxx b/tools/DFBrowserPane/DFBrowserPane_HelperGroupContent.cxx
deleted file mode 100644 (file)
index fff0ba1..0000000
+++ /dev/null
@@ -1,49 +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. 
-
-#include <inspector/DFBrowserPane_HelperGroupContent.hxx>
-
-#include <QHBoxLayout>
-#include <QWidget>
-
-// =======================================================================
-// function : Constructor
-// purpose :
-// =======================================================================
-DFBrowserPane_HelperGroupContent::DFBrowserPane_HelperGroupContent (const QString& theTitle, QWidget* theParent,
-                                                                    QWidget* theControl)
-: QGroupBox (theTitle, theParent), myControl (0)
-{
-  setCheckable (true);
-
-  myControl = theControl;
-  QHBoxLayout* aLayout = new QHBoxLayout (this);
-  aLayout->addWidget (myControl);
-
-  connect (this, SIGNAL (clicked (bool)), this, SLOT (onChecked(bool)));
-
-  setChecked (false);
-  onChecked (isChecked());
-}
-
-// =======================================================================
-// function : onChecked
-// purpose :
-// =======================================================================
-void DFBrowserPane_HelperGroupContent::onChecked (bool theState)
-{
-  if (myControl)
-    myControl->setVisible (theState);
-}
diff --git a/tools/DFBrowserPane/DFBrowserPane_HelperGroupContent.hxx b/tools/DFBrowserPane/DFBrowserPane_HelperGroupContent.hxx
deleted file mode 100644 (file)
index b472833..0000000
+++ /dev/null
@@ -1,53 +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 DFBrowserPane_HelperGroupContent_H
-#define DFBrowserPane_HelperGroupContent_H
-
-#include <Standard.hxx>
-#include <Standard_Macro.hxx>
-
-#ifdef _MSC_VER
-#pragma warning(disable : 4127) // conditional expression is constant
-#endif
-#include <QGroupBox>
-
-class QWidget;
-
-//! \class DFBrowserPane_HelperGroupContent
-//! \brief Creates a check group box for the given control. If checked, the control is enabled,
-//! otherwise it sets it as disabled
-class DFBrowserPane_HelperGroupContent : public QGroupBox
-{
-Q_OBJECT
-public:
-
-  //! Constructor
-  Standard_EXPORT DFBrowserPane_HelperGroupContent (const QString& theTitle, QWidget* theParent, QWidget* theControl);
-
-  //! Destructor
-  virtual ~DFBrowserPane_HelperGroupContent() Standard_OVERRIDE {}
-
-protected slots:
-  //! Set enable/disable current control depending on check box state
-  //! \param theState state of the check box
-  void onChecked (bool theState);
-
-private:
-
-  QWidget* myControl; //!< the source control, that will be enabled/disabled
-};
-
-#endif
index fc63a30..2cdd55b 100644 (file)
 #ifndef DFBrowserPane_ItemRole_H
 #define DFBrowserPane_ItemRole_H
 
+#include <inspector/TreeModel_ItemRole.hxx>
+
 //! Custom item role for attribute pane
 enum DFBrowserPane_ItemRole
 {
-  DFBrowserPane_ItemRole_ShortInfo = Qt::UserRole + 1, //!< not full information of an attribute
+  DFBrowserPane_ItemRole_ShortInfo = TreeModel_ItemRole_LastTreeRole + 1, //!< not full information of an attribute
   DFBrowserPane_ItemRole_Decoration_40x40, //!< icon with greater size
   DFBrowserPane_ItemRole_DisplayExtended, // extended item information (with additional information) for Qt::DisplayRole
-  DFBrowserPane_ItemRole_ToolTipExtended // exteneded tool tip information for Qt::ToolTipRole
+  DFBrowserPane_ItemRole_ToolTipExtended, // exteneded tool tip information for Qt::ToolTipRole
+  DFBrowserPane_ItemRole_LastTreeRole //! last enumeration value to use outside incremented
 };
 
 #endif
index ff861d0..e0b3543 100644 (file)
@@ -27,7 +27,8 @@ enum DFBrowserPane_OcctEnumType
   DB_DIMENSION_TYPE = 5,  //!< TDataStd_RealEnum values
   DB_MATERIAL_TYPE = 6,   //!< Graphic3d_NameOfMaterial values
   DB_DISPLAY_MODE = 7,    //!< AIS_DisplayMode values
-  DB_ORIENTATION_TYPE = 8 //!< TopAbs_Orientation values
+  DB_ORIENTATION_TYPE = 8, //!< TopAbs_Orientation values
+  DB_CDM_CAN_CLOSE_STATUS //!< CDM_CanCloseStatus values
 };
 
 #endif
index 12197a9..757b884 100644 (file)
 void DFBrowserPane_TDFReference::GetValues (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues)
 {
   Handle(TDF_Reference) anAttribute = Handle(TDF_Reference)::DownCast (theAttribute);
-  if (!anAttribute.IsNull())
-  {
-    TDF_Label aLabel = anAttribute->Get();
-    theValues.append (DFBrowserPane_Tools::GetEntry (aLabel).ToCString());
-  }
+  if (anAttribute.IsNull())
+    return;
+
+  TDF_Label aLabel = anAttribute->Get();
+  theValues.append ("Get");
+  theValues.append (DFBrowserPane_Tools::GetEntry (aLabel).ToCString());
 }
 
 // =======================================================================
index b9ccdc7..653c72c 100644 (file)
@@ -29,6 +29,7 @@ void DFBrowserPane_TDFTagSource::GetValues (const Handle(TDF_Attribute)& theAttr
   Handle(TDF_TagSource) anAttribute = Handle(TDF_TagSource)::DownCast (theAttribute);
   if (anAttribute.IsNull())
     return;
+  theValues.append ("Get");
   theValues.append (anAttribute->Get());
 }
 
index d4a357a..502c6c1 100644 (file)
@@ -28,6 +28,9 @@ void DFBrowserPane_TDataStdAsciiString::GetValues (const Handle(TDF_Attribute)&
                                                    QList<QVariant>& theValues)
 {
   Handle(TDataStd_AsciiString) anAttribute = Handle(TDataStd_AsciiString)::DownCast (theAttribute);
-  if (!anAttribute.IsNull())
-    theValues.append (anAttribute->Get().ToCString());
+  if (anAttribute.IsNull())
+    return;
+
+  theValues.append ("Get");
+  theValues.append (anAttribute->Get().ToCString());
 }
index e6f8749..64b30c6 100644 (file)
@@ -24,9 +24,9 @@
 #pragma warning(disable : 4127) // conditional expression is constant
 #endif
 
+#include <QGridLayout>
 #include <QVariant>
 #include <QWidget>
-#include <QGridLayout>
 
 // =======================================================================
 // function : CreateWidget
@@ -62,13 +62,13 @@ void DFBrowserPane_TDataStdBooleanArray::GetValues (const Handle(TDF_Attribute)&
                                                     QList<QVariant>& theValues)
 {
   Handle(TDataStd_BooleanArray) anAttribute = Handle(TDataStd_BooleanArray)::DownCast (theAttribute);
-  if (!anAttribute.IsNull())
-  {
-    theValues.append (anAttribute->Lower());
-    theValues.append (anAttribute->Upper());
-    for (int aValuesId = anAttribute->Lower(); aValuesId <= anAttribute->Upper(); aValuesId++)
-      theValues.append (anAttribute->Value (aValuesId));
-  }
+  if (anAttribute.IsNull())
+    return;
+
+  theValues.append (anAttribute->Lower());
+  theValues.append (anAttribute->Upper());
+  for (int aValueId = anAttribute->Lower(); aValueId <= anAttribute->Upper(); aValueId++)
+    theValues.append (anAttribute->Value (aValueId));
 }
 
 // =======================================================================
index f16c641..261131f 100644 (file)
@@ -35,5 +35,8 @@ void DFBrowserPane_TDataStdBooleanList::GetValues (const Handle(TDF_Attribute)&
     return;
 
   for (TDataStd_ListIteratorOfListOfByte aBoolListIt (anAttribute->List()); aBoolListIt.More(); aBoolListIt.Next())
+  {
+    theValues.append ("Value");
     theValues.append (aBoolListIt.Value());
+  }
 }
index 482aab2..a60a75c 100644 (file)
@@ -30,5 +30,6 @@ void DFBrowserPane_TDataStdComment::GetValues (const Handle(TDF_Attribute)& theA
   Handle(TDataStd_Comment) anAttribute = Handle(TDataStd_Comment)::DownCast (theAttribute);
   if (anAttribute.IsNull())
     return;
+  theValues.append ("Get");
   theValues.append (DFBrowserPane_Tools::ToString (anAttribute->Get()));
 }
index eade6ea..23d1ddf 100644 (file)
@@ -30,5 +30,6 @@ void DFBrowserPane_TDataStdCurrent::GetValues (const Handle(TDF_Attribute)& theA
   Handle(TDataStd_Current) anAttribute = Handle(TDataStd_Current)::DownCast (theAttribute);
   if (anAttribute.IsNull())
     return;
+  theValues.append ("GetLabel");
   theValues.append (DFBrowserPane_Tools::GetEntry (anAttribute->GetLabel()).ToCString());
 }
index bea934f..772742f 100644 (file)
@@ -29,6 +29,7 @@ void DFBrowserPane_TDataStdExpression::GetValues (const Handle(TDF_Attribute)& t
   if (anAttribute.IsNull())
     return;
 
+  theValues.append ("GetExpression");
   theValues.append (DFBrowserPane_Tools::ToString (anAttribute->GetExpression()));
 }
 
index 179dfc4..bbd47fa 100644 (file)
@@ -33,5 +33,8 @@ void DFBrowserPane_TDataStdExtStringList::GetValues (const Handle(TDF_Attribute)
     return;
 
   for (TDataStd_ListIteratorOfListOfExtendedString aValuesIt(anAttribute->List()); aValuesIt.More(); aValuesIt.Next())
+  {
+    theValues.append ("Value");
     theValues.append (DFBrowserPane_Tools::ToString (aValuesIt.Value()));
+  }
 }
index 7af9521..09fcbcf 100644 (file)
@@ -31,6 +31,10 @@ void DFBrowserPane_TDataStdIntPackedMap::GetValues (const Handle(TDF_Attribute)&
   if (anAttribute.IsNull())
     return;
 
-  for (TColStd_MapIteratorOfPackedMapOfInteger aValueIt(anAttribute->GetMap()); aValueIt.More(); aValueIt.Next())
+  int anIndexInMap = 0;
+  for (TColStd_MapIteratorOfPackedMapOfInteger aValueIt(anAttribute->GetMap()); aValueIt.More(); aValueIt.Next(), anIndexInMap++)
+  {
+    theValues.append (QString ("GetMap [%1]").arg(anIndexInMap));
     theValues.append (aValueIt.Key());
+  }
 }
index b2ca9af..2164e48 100644 (file)
@@ -29,5 +29,6 @@ void DFBrowserPane_TDataStdInteger::GetValues (const Handle(TDF_Attribute)& theA
   if (anAttribute.IsNull())
     return;
 
+  theValues.append ("Get");
   theValues.append (anAttribute->Get());
 }
index 969960f..26c1c0c 100644 (file)
@@ -32,5 +32,8 @@ void DFBrowserPane_TDataStdIntegerList::GetValues (const Handle(TDF_Attribute)&
     return;
 
   for (TColStd_ListIteratorOfListOfInteger aValuesIt (anAttribute->List()); aValuesIt.More(); aValuesIt.Next())
+  {
+    theValues.append ("Value");
     theValues.append (aValuesIt.Value());
+  }
 }
index cc386a2..43f77f1 100644 (file)
@@ -30,6 +30,7 @@ void DFBrowserPane_TDataStdName::GetValues (const Handle(TDF_Attribute)& theAttr
   if (anAttribute.IsNull())
     return;
 
+  theValues.append ("Get");
   theValues.append (DFBrowserPane_Tools::ToString (anAttribute->Get()));
 }
 
index 0ceaa43..958652d 100644 (file)
@@ -16,7 +16,6 @@
 #include <inspector/DFBrowserPane_TDataStdNamedData.hxx>
 
 #include <inspector/DFBrowserPane_AttributePaneModel.hxx>
-#include <inspector/DFBrowserPane_HelperGroupContent.hxx>
 #include <inspector/DFBrowserPane_TableView.hxx>
 #include <inspector/DFBrowserPane_Tools.hxx>
 
@@ -37,6 +36,8 @@
 #include <TDataStd_HDataMapOfStringHArray1OfInteger.hxx>
 #include <TDataStd_NamedData.hxx>
 
+#include <QTableView>
+#include <QTabWidget>
 #include <QVariant>
 #include <QVBoxLayout>
 #include <QWidget>
@@ -53,7 +54,8 @@ static const QString VALUES_REAL_ARRAY = "values_real_array";
 // purpose :
 // =======================================================================
 DFBrowserPane_TDataStdNamedData::DFBrowserPane_TDataStdNamedData()
- : DFBrowserPane_AttributePane()
+ : DFBrowserPane_AttributePane(), myRealValues (0), myStringValues(0), myByteValues(0), myIntArrayValues(0),
+ myRealArrayValues(0)
 {
   myPaneModel = createPaneModel();
   myRealValuesModel = createPaneModel();
@@ -70,14 +72,8 @@ DFBrowserPane_TDataStdNamedData::DFBrowserPane_TDataStdNamedData()
 DFBrowserPane_AttributePaneModel* DFBrowserPane_TDataStdNamedData::createPaneModel()
 {
   DFBrowserPane_AttributePaneModel* aTableModel = new DFBrowserPane_AttributePaneModel();
-
-  aTableModel->SetOrientation (Qt::Horizontal);
-
-  QList<QVariant> aHeaderValues;
-  aHeaderValues << "Name" << "Value";
-  aTableModel->SetHeaderValues (aHeaderValues, Qt::Vertical);
-  aTableModel->SetColumnCount (2); // indeed these are rows as table orientation is Horizontal
-
+  aTableModel->SetColumnCount (2);
+  aTableModel->SetItalicColumns (QList<int>());
   return aTableModel;
 }
 
@@ -87,40 +83,35 @@ DFBrowserPane_AttributePaneModel* DFBrowserPane_TDataStdNamedData::createPaneMod
 // =======================================================================
 QWidget* DFBrowserPane_TDataStdNamedData::CreateWidget (QWidget* theParent)
 {
-  QWidget* aMainWidget = new QWidget (theParent);
-  QVBoxLayout* aLay = new QVBoxLayout (aMainWidget);
+  QTabWidget* aMainWidget = new QTabWidget (theParent);
+  // gray text is visualized by default, better the black one (Qt4)
+  QPalette aPalette = aMainWidget->palette();
+  aPalette.setColor(QPalette::Foreground, Qt::black);
+  aMainWidget->setPalette (aPalette);
 
   myTableView = new DFBrowserPane_TableView (aMainWidget);
   myTableView->SetModel (getPaneModel());
-  myIntValuesContent = new DFBrowserPane_HelperGroupContent ("Named integers", aMainWidget, myTableView);
-  aLay->addWidget (myIntValuesContent);
+  aMainWidget->addTab (myTableView, "Integers");
 
   myRealValues = new DFBrowserPane_TableView (aMainWidget);
   myRealValues->SetModel (myRealValuesModel);
-  myRealValuesContent = new DFBrowserPane_HelperGroupContent ("Named reals", aMainWidget, myRealValues);
-  aLay->addWidget (myRealValuesContent);
+  aMainWidget->addTab (myRealValues, "Reals");
 
   myStringValues = new DFBrowserPane_TableView (aMainWidget);
   myStringValues->SetModel (myStringValuesModel);
-  myStringValuesContent = new DFBrowserPane_HelperGroupContent ("Named strings", aMainWidget, myStringValues);
-  aLay->addWidget (myStringValuesContent);
+  aMainWidget->addTab (myStringValues, "Strings");
 
   myByteValues = new DFBrowserPane_TableView (aMainWidget);
   myByteValues->SetModel (myByteValuesModel);
-  myByteValuesContent = new DFBrowserPane_HelperGroupContent ("Named bytes", aMainWidget, myByteValues);
-  aLay->addWidget (myByteValuesContent);
+  aMainWidget->addTab (myByteValues, "Bytes");
 
   myIntArrayValues = new DFBrowserPane_TableView (aMainWidget);
   myIntArrayValues->SetModel (myIntArrayValuesModel);
-  myIntArrayValuesContent = new DFBrowserPane_HelperGroupContent ("Named integer arrays", aMainWidget, myIntArrayValues);
-  aLay->addWidget (myIntArrayValuesContent);
+  aMainWidget->addTab (myIntArrayValues, "ArraysOfIntegers");
 
   myRealArrayValues = new DFBrowserPane_TableView (aMainWidget);
   myRealArrayValues->SetModel (myRealArrayModel);
-  myRealArrayValuesContent = new DFBrowserPane_HelperGroupContent ("Named real arrays", aMainWidget, myRealArrayValues);
-  aLay->addWidget (myRealArrayValuesContent);
-
-  aLay->addStretch (1);
+  aMainWidget->addTab (myRealArrayValues, "ArraysOfReals");
 
   return aMainWidget;
 }
@@ -135,11 +126,23 @@ void DFBrowserPane_TDataStdNamedData::Init (const Handle(TDF_Attribute)& theAttr
   GetValues (theAttribute, aValues);
 
   getPaneModel()->Init (getPartOfValues (VALUES_INTEGER, VALUES_REAL, aValues));
+  if (myTableView)
+    myTableView->GetTableView()->resizeColumnToContents (0);
   myRealValuesModel->Init (getPartOfValues (VALUES_REAL, VALUES_STRING, aValues));
+  if (myRealValues)
+    myRealValues->GetTableView()->resizeColumnToContents (0);
   myStringValuesModel->Init (getPartOfValues (VALUES_STRING, VALUES_BYTE, aValues));
+  if (myStringValues)
+    myStringValues->GetTableView()->resizeColumnToContents (0);
   myByteValuesModel->Init (getPartOfValues (VALUES_BYTE, VALUES_INT_ARRAY, aValues));
+  if (myByteValues)
+    myByteValues->GetTableView()->resizeColumnToContents (0);
   myIntArrayValuesModel->Init (getPartOfValues (VALUES_INT_ARRAY, VALUES_REAL_ARRAY, aValues));
+  if (myIntArrayValues)
+    myIntArrayValues->GetTableView()->resizeColumnToContents (0);
   myRealArrayModel->Init (getPartOfValues (VALUES_REAL_ARRAY, "", aValues));
+  if (myRealArrayValues)
+    myRealArrayValues->GetTableView()->resizeColumnToContents (0);
 }
 
 // =======================================================================
index e8bf511..1e8516a 100644 (file)
@@ -21,7 +21,6 @@
 #include <Standard.hxx>
 
 class DFBrowserPane_AttributePaneModel;
-class DFBrowserPane_HelperGroupContent;
 class DFBrowserPane_TableView;
 
 //! \class DFBrowserPane_TDataStdNamedData
@@ -68,29 +67,22 @@ private:
   DFBrowserPane_AttributePaneModel* createPaneModel();
 
 private:
-
   //! myPaneMode and myTableView are used for int values
-  DFBrowserPane_HelperGroupContent* myIntValuesContent; //!< check box of values using
 
   DFBrowserPane_AttributePaneModel* myRealValuesModel; //!< real values model
   DFBrowserPane_TableView* myRealValues; //!< values table view
-  DFBrowserPane_HelperGroupContent* myRealValuesContent; //!< check box of values using
 
   DFBrowserPane_AttributePaneModel* myStringValuesModel; //!< string values model
   DFBrowserPane_TableView* myStringValues; //!< values table view
-  DFBrowserPane_HelperGroupContent* myStringValuesContent; //!< check box of values using
 
   DFBrowserPane_AttributePaneModel* myByteValuesModel; //!< byte values model
   DFBrowserPane_TableView* myByteValues; //!< values table view
-  DFBrowserPane_HelperGroupContent* myByteValuesContent; //!< check box of values using
 
   DFBrowserPane_AttributePaneModel* myIntArrayValuesModel; //!< int array values model
   DFBrowserPane_TableView* myIntArrayValues; //!< values table view
-  DFBrowserPane_HelperGroupContent* myIntArrayValuesContent; //!< check box of values using
 
   DFBrowserPane_AttributePaneModel* myRealArrayModel; //!< real array values model
   DFBrowserPane_TableView* myRealArrayValues; //!< values table view
-  DFBrowserPane_HelperGroupContent* myRealArrayValuesContent; //!< check box of values using
 };
 
 #endif
index a85e2e0..cfe8da6 100644 (file)
@@ -29,6 +29,7 @@ void DFBrowserPane_TDataStdReal::GetValues (const Handle(TDF_Attribute)& theAttr
   if (anAttribute.IsNull())
     return;
 
+  theValues.append ("Get");
   theValues.append (anAttribute->Get());
 }
 
index debc605..0fb9e84 100644 (file)
@@ -32,5 +32,8 @@ void DFBrowserPane_TDataStdRealList::GetValues (const Handle(TDF_Attribute)& the
     return;
 
   for (TColStd_ListIteratorOfListOfReal aRealListIt(anAttribute->List()); aRealListIt.More(); aRealListIt.Next())
+  {
+    theValues.append ("Value");
     theValues.append (aRealListIt.Value());
+  }
 }
index efcbf82..268e479 100644 (file)
@@ -94,7 +94,7 @@ void DFBrowserPane_TDataStdReferenceArray::GetReferences (const Handle(TDF_Attri
 {
   if (!getTableView())
     return;
-  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (getTableView()->GetTableView(), 0);
+  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (getTableView()->GetTableView(), 1);
 
   Handle(TDataStd_ReferenceArray) anAttribute = Handle(TDataStd_ReferenceArray)::DownCast (theAttribute);
   if (anAttribute.IsNull())
index 49ece11..c3ed2af 100644 (file)
@@ -35,7 +35,10 @@ void DFBrowserPane_TDataStdReferenceList::GetValues (const Handle(TDF_Attribute)
     return;
 
   for (TDF_ListIteratorOfLabelList aLabelIt(anAttribute->List()); aLabelIt.More(); aLabelIt.Next())
+  {
+    theValues.append ("Value");
     theValues.append (DFBrowserPane_Tools::GetEntry (aLabelIt.Value()).ToCString());
+  }
 }
 
 // =======================================================================
@@ -46,7 +49,7 @@ void DFBrowserPane_TDataStdReferenceList::GetReferences (const Handle(TDF_Attrib
                                                          NCollection_List<TDF_Label>& theRefLabels,
                                                          Handle(Standard_Transient)& /*theRefPresentation*/)
 {
-  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (getTableView()->GetTableView(), 0);
+  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (getTableView()->GetTableView(), 1);
   Handle(TDataStd_ReferenceList) anAttribute = Handle(TDataStd_ReferenceList)::DownCast (theAttribute);
   if (anAttribute.IsNull())
     return;
index b1cd494..ba31c01 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <TDataStd_TreeNode.hxx>
 
+#include <QHeaderView>
 #include <QVariant>
 #include <QTableView>
 #include <QTreeView>
@@ -35,7 +36,7 @@
 // purpose :
 // =======================================================================
 DFBrowserPane_TDataStdTreeNode::DFBrowserPane_TDataStdTreeNode()
-: DFBrowserPane_AttributePane()
+: DFBrowserPane_AttributePane(), myTreeNodeView (0)
 {
   myModel = new DFBrowserPane_TDataStdTreeNodeModel (0);
   mySelectionModels.clear(); // do not use selection model of parent pane
@@ -52,6 +53,7 @@ QWidget* DFBrowserPane_TDataStdTreeNode::CreateWidget (QWidget* theParent)
   aMainWidget->setVisible (false);
 
   myTableView = new DFBrowserPane_TableView (aMainWidget, getTableColumnWidths());
+  myTableView->SetVisibleHorizontalHeader (false);
   DFBrowserPane_TableView::SetFixedRowCount (1, myTableView->GetTableView());
   myTableView->SetModel (myPaneModel);
 
@@ -60,11 +62,13 @@ QWidget* DFBrowserPane_TDataStdTreeNode::CreateWidget (QWidget* theParent)
   aLay->addWidget (myTableView);
 
   myTreeNodeView = new QTreeView (theParent);
+  myTreeNodeView->header()->setVisible (false);
   myTreeNodeView->setModel (myModel);
   myTreeNodeView->setSelectionModel (mySelectionModels.front());
   myTreeNodeView->setSelectionBehavior (QAbstractItemView::SelectRows);
 
   aLay->addWidget (myTreeNodeView);
+  aLay->setStretch (1, 1);
   return aMainWidget;
 }
 
@@ -77,14 +81,19 @@ void DFBrowserPane_TDataStdTreeNode::Init (const Handle(TDF_Attribute)& theAttri
   Handle(TDataStd_TreeNode) aTreeNode = Handle(TDataStd_TreeNode)::DownCast (theAttribute);
 
   bool aDefaultGUID = aTreeNode->ID() != aTreeNode->GetDefaultTreeID();
-  myTableView->setVisible (!aDefaultGUID);
-  if (!aDefaultGUID) {
+  if (myTableView)
+    myTableView->setVisible (!aDefaultGUID);
+
+  if (!aDefaultGUID)
+  {
     QList<QVariant> aValues;
     char aStr[256];
     aTreeNode->ID().ToCString (aStr);
     TCollection_AsciiString aString(aStr);
-    aValues.append (DFBrowserPane_Tools::ToString(aString));
+    aValues << "GetDefaultTreeID" << DFBrowserPane_Tools::ToString (aString);
     getPaneModel()->Init (aValues);
+    if (myTableView)
+      myTableView->GetTableView()->resizeColumnToContents (0);
   }
 
 
@@ -96,8 +105,8 @@ void DFBrowserPane_TDataStdTreeNode::Init (const Handle(TDF_Attribute)& theAttri
     Handle(TDataStd_TreeNode) aRootItem = aTreeNode->Root();
     aModel->SetAttribute (aRootItem);
 
-    QModelIndex anIndex = aModel->FindIndex (theAttribute);
-    if (anIndex.isValid())
+    QModelIndex anIndex = aModel->FindIndex (theAttribute, QModelIndex());
+    if (myTreeNodeView && anIndex.isValid())
     {
       myTreeNodeView->setExpanded (anIndex.parent(), true);
       myTreeNodeView->scrollTo (anIndex);
@@ -160,5 +169,19 @@ void DFBrowserPane_TDataStdTreeNode::GetReferences (const Handle(TDF_Attribute)&
   if (anAttribute.IsNull())
     return;
 
-  theRefLabels.Append (anAttribute->Label());
+  QModelIndexList aSelectedIndices = myTreeNodeView->selectionModel()->selectedIndexes();
+  for (int aSelectedId = 0, aSize = aSelectedIndices.size(); aSelectedId < aSize; aSelectedId++)
+  {
+    QModelIndex anIndex = aSelectedIndices[aSelectedId];
+
+    TreeModel_ItemBasePtr anAttributeItem = TreeModel_ModelBase::GetItemByIndex (anIndex);
+    DFBrowserPane_TDataStdTreeNodeItemPtr anAttributeNodeItem =
+              itemDynamicCast<DFBrowserPane_TDataStdTreeNodeItem>(anAttributeItem);
+
+    Handle(TDF_Attribute) aNodeAttribute = anAttributeNodeItem->GetAttribute();
+    if (aNodeAttribute.IsNull())
+      continue;
+
+    theRefLabels.Append (aNodeAttribute->Label());
+  }
 }
index 99f1ec9..024386d 100644 (file)
@@ -14,6 +14,7 @@
 // commercial license or contractual agreement. 
 
 #include <inspector/DFBrowserPane_TDataStdTreeNodeItem.hxx>
+#include <inspector/DFBrowserPane_Tools.hxx>
 
 #include <inspector/DFBrowser_Module.hxx>
 #include <inspector/DFBrowser_Tools.hxx>
@@ -82,6 +83,7 @@ QVariant DFBrowserPane_TDataStdTreeNodeItem::initValue (const int theRole) const
     case Qt::DisplayRole:
     case Qt::ToolTipRole:    return getName();
     case Qt::ForegroundRole: return myIsCurrentItem ? QColor (Qt::darkBlue) : QColor (Qt::black);
+    case Qt::BackgroundRole: return myIsCurrentItem ? DFBrowserPane_Tools::LightHighlightColor() : QVariant();
     default: break;
   }
   return QVariant();
index 43dea90..29dcd9c 100644 (file)
@@ -51,9 +51,13 @@ public:
   //! \param theAttribute an attribute
   void SetAttribute (const Handle(TDF_Attribute)& theAttribute) { myAttribute = theAttribute; }
 
+  //! Returns the current attribute
+  //! \return an attribute
+  Handle(TDF_Attribute) GetAttribute () const { initItem(); return myAttribute; }
+
   //! Set state if the attribute is current(corresponds to the selected attribute in tree)
   //! \param theCurrent boolean state
-  void setCurrentAttribute (const bool theCurrent) { myIsCurrentItem = theCurrent; }
+  void setCurrentAttribute (const bool theCurrent) { Reset(); myIsCurrentItem = theCurrent; }
 
   //! Returns child attribute of the current attribute
   //! \param theChildRow an index of a child attribute
index 78f1f94..8dba19d 100644 (file)
@@ -41,3 +41,37 @@ void DFBrowserPane_TDataStdTreeNodeModel::SetAttribute (const Handle(TDF_Attribu
   aRootItem->SetAttribute (theAttribute);
   EmitLayoutChanged();
 }
+
+// =======================================================================
+// function : FindIndex
+// purpose :
+// =======================================================================
+QModelIndex DFBrowserPane_TDataStdTreeNodeModel::FindIndex (const Handle(TDF_Attribute)& theAttribute,
+                                                            const QModelIndex theParentIndex)
+{
+  QModelIndex aParentIndex = theParentIndex;
+  
+  if (!aParentIndex.isValid())
+    aParentIndex = index (0, 0);
+
+  DFBrowserPane_TDataStdTreeNodeItemPtr aParentItem = itemDynamicCast<DFBrowserPane_TDataStdTreeNodeItem>
+    (TreeModel_ModelBase::GetItemByIndex (aParentIndex));
+
+  if (aParentItem->GetAttribute() == theAttribute)
+    return aParentIndex;
+
+  for (int aChildId = 0, aCount = aParentItem->rowCount(); aChildId < aCount; aChildId++)
+  {
+    QModelIndex anIndex = index (aChildId, 0, aParentIndex);
+    TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (anIndex);
+    DFBrowserPane_TDataStdTreeNodeItemPtr anItem = itemDynamicCast<DFBrowserPane_TDataStdTreeNodeItem>(anItemBase);
+
+    if (anItem->GetAttribute() == theAttribute)
+      return anIndex;
+
+    QModelIndex aSubIndex = FindIndex (theAttribute, anIndex);
+    if (aSubIndex.isValid())
+      return aSubIndex;
+  }
+  return QModelIndex();
+}
index 22bc9da..9f6fdc0 100644 (file)
@@ -42,8 +42,11 @@ public:
   //! \param theAttribute a current attribute
   Standard_EXPORT void SetAttribute (const Handle(TDF_Attribute)& theAttribute);
 
-  //! Returns model index by the attribute.
-  QModelIndex FindIndex (const Handle(TDF_Attribute)& theAttribute) { (void)theAttribute; return QModelIndex(); }
+  //! Returns model index by the attribute. The method is recursive.
+  //! \param theAttribute an attribute that is searched
+  //! \param theParentIndex an index of the parent item
+  //! \return the model index
+  QModelIndex FindIndex (const Handle(TDF_Attribute)& theAttribute, const QModelIndex theParentIndex);
 
   //! Returns count of columns in the model.
   //! \param theParent an index of the parent item
index d8a1529..6cd7819 100644 (file)
@@ -33,6 +33,7 @@ void DFBrowserPane_TDataStdUAttribute::GetValues (const Handle(TDF_Attribute)& t
   theAttribute->ID().ToCString(aStr);
   TCollection_AsciiString aString(aStr);
 
+  theValues.append ("ID");
   theValues.append (DFBrowserPane_Tools::ToString (aString));
 }
 
index 7c1b217..6c78343 100644 (file)
@@ -23,6 +23,7 @@
 #include <TDocStd_Owner.hxx>
 #include <TDF_Delta.hxx>
 #include <TDF_ListIteratorOfDeltaList.hxx>
+#include <Standard_Version.hxx>
 
 #include <QVariant>
 #include <QWidget>
 DFBrowserPane_TDocStdOwner::DFBrowserPane_TDocStdOwner()
  : DFBrowserPane_AttributePane()
 {
-  getPaneModel()->SetColumnCount (2);
-
-  QList<QVariant> theValues;
-  theValues << "Method" << "Value";
-  getPaneModel()->SetHeaderValues (theValues, Qt::Horizontal);
 }
 
 // =======================================================================
@@ -59,42 +55,29 @@ void DFBrowserPane_TDocStdOwner::GetValues (const Handle(TDF_Attribute)& theAttr
   if (aDocument.IsNull())
     return;
 
-  theValues << STANDARD_TYPE (TDocStd_Document)->Name() << ""
-            << "IsSaved" << DFBrowserPane_Tools::BoolToStr (aDocument->IsSaved())
-            << "IsChanged" << DFBrowserPane_Tools::BoolToStr (aDocument->IsChanged())
-            << "GetSavedTime" << DFBrowserPane_Tools::BoolToStr (aDocument->GetSavedTime())
-            << "GetName" << (aDocument->IsSaved() ? DFBrowserPane_Tools::ToString (aDocument->GetName()) : "")
-            << "GetPath" << (aDocument->IsSaved() ? DFBrowserPane_Tools::ToString (aDocument->GetPath()) : "")
-            << "Main" << DFBrowserPane_Tools::GetEntry (aDocument->Main()).ToCString()
-            << "IsEmpty" << DFBrowserPane_Tools::BoolToStr (aDocument->IsEmpty())
-            << "IsValid" << DFBrowserPane_Tools::BoolToStr (aDocument->IsValid())
-            << "HasOpenCommand" << DFBrowserPane_Tools::BoolToStr (aDocument->HasOpenCommand())
-            << "GetUndoLimit" << QString::number (aDocument->GetUndoLimit())
-            << "GetAvailableUndos" << QString::number (aDocument->GetAvailableUndos())
-            << "GetUndos" << convertToString (aDocument->GetUndos())
-            << "GetAvailableRedos" << QString::number (aDocument->GetAvailableRedos())
-            << "GetRedos" << convertToString (aDocument->GetRedos())
-            << "StorageFormat" << DFBrowserPane_Tools::ToString (aDocument->StorageFormat())
-            << "IsNestedTransactionMode" << DFBrowserPane_Tools::BoolToStr (aDocument->IsNestedTransactionMode())
-            << "ModificationMode" << DFBrowserPane_Tools::BoolToStr (aDocument->ModificationMode())
-            << STANDARD_TYPE (CDM_Document)->Name() << "";
-
+  TCollection_AsciiString aDocumentInfo = DFBrowserPane_Tools::GetPointerInfo (aDocument).ToCString();
   TColStd_SequenceOfExtendedString anExtensions;
   aDocument->Extensions(anExtensions);
-  theValues << "Extensions" << convertToString (anExtensions)
+  TCollection_AsciiString aSeparationStr = "---------------------------";
+  theValues << aSeparationStr.ToCString() << aSeparationStr.ToCString()
+            << STANDARD_TYPE (CDM_Document)->Name() << aDocumentInfo.ToCString()
+            << aSeparationStr.ToCString() << aSeparationStr.ToCString()
+            << "StorageFormat" << DFBrowserPane_Tools::ToString (aDocument->StorageFormat())
+            << "Extensions" << convertToString (anExtensions)
             << "FromReferencesNumber" << QString::number (aDocument->FromReferencesNumber())
             << "ToReferencesNumber" << QString::number (aDocument->ToReferencesNumber())
             << "IsReadOnly" << DFBrowserPane_Tools::BoolToStr (aDocument->IsReadOnly())
             << "Modifications" << QString::number (aDocument->Modifications());
+
   TColStd_SequenceOfExtendedString aComments;
   aDocument->Extensions(aComments);
+  // if the document application is empty, Application() sents an exception, it is called in LoadResources() of:
+  // FindFileExtension, FindDescription and others, so we need the check for it
+  bool isDocumentOpened = aDocument->IsOpened();
 
-  if (!aDocument->IsOpened())
-    return; // application is empty, an exception is sent in Application(),
-            // an exception is sent in FindDescription if the application is not defined
-
+  // CDM_Document methods
   theValues << "Comments" << convertToString (aComments)
-            << "Presentation" << ""
+            << "Presentation" << DFBrowserPane_Tools::ToString (aDocument->Presentation())
             << "IsStored" << DFBrowserPane_Tools::BoolToStr (aDocument->IsStored())
             << "StorageVersion" << QString::number (aDocument->StorageVersion())
             << "Folder" << (aDocument->IsStored() ? DFBrowserPane_Tools::ToString (aDocument->Folder()) : "")
@@ -105,25 +88,41 @@ void DFBrowserPane_TDocStdOwner::GetValues (const Handle(TDF_Attribute)& theAttr
             << "RequestedPreviousVersion" << (aDocument->HasRequestedPreviousVersion() ?
                                               DFBrowserPane_Tools::ToString (aDocument->RequestedPreviousVersion()) : "")
             << "RequestedComment" << DFBrowserPane_Tools::ToString (aDocument->RequestedComment())
-            << "FindFileExtension" << DFBrowserPane_Tools::BoolToStr (aDocument->FindFileExtension())
-            << "FileExtension" << DFBrowserPane_Tools::ToString (aDocument->FileExtension())
-            << "FindDataType" << "" // DFBrowserPane_Tools::BoolToStr (aDocument->FindDataType())
-            << "DataType" << ""// DFBrowserPane_Tools::ToString (aDocument->DataType())
-            << "FindVersionDataType" << ""// DFBrowserPane_Tools::BoolToStr (aDocument->FindVersionDataType())
-
-            << "VersionDataType" << ""// DFBrowserPane_Tools::ToString (aDocument->VersionDataType())
-            << "FindDescription" << DFBrowserPane_Tools::BoolToStr (aDocument->FindDescription())
-            << "Description" << DFBrowserPane_Tools::ToString (aDocument->Description())
-            << "FindDomain" << ""// DFBrowserPane_Tools::BoolToStr (aDocument->FindDomain())
-            << "Domain" << ""// DFBrowserPane_Tools::ToString (aDocument->Domain())
-            << "FindStoragePlugin" << ""//  DFBrowserPane_Tools::BoolToStr (aDocument->FindStoragePlugin())
-            << "StoragePlugin" << ""//  DFBrowserPane_Tools::ToString (aDocument->StoragePlugin())
+            << "FindFileExtension" << (isDocumentOpened ? DFBrowserPane_Tools::BoolToStr (aDocument->FindFileExtension()) : "")
+            << "FileExtension" << (isDocumentOpened ? DFBrowserPane_Tools::ToString (aDocument->FileExtension()) : "")
+            << "FindDescription" << (isDocumentOpened ? DFBrowserPane_Tools::BoolToStr (aDocument->FindDescription()) : "")
+            << "Description" << (isDocumentOpened ? DFBrowserPane_Tools::ToString (aDocument->Description()) : "")
             << "IsModified" << DFBrowserPane_Tools::BoolToStr (aDocument->IsModified())
             << "IsOpened" << DFBrowserPane_Tools::BoolToStr (aDocument->IsOpened())
-            << "CanClose" << DFBrowserPane_Tools::BoolToStr (aDocument->CanClose())
+            << "CanClose" << DFBrowserPane_Tools::ToName(DB_CDM_CAN_CLOSE_STATUS, aDocument->CanClose()).ToCString()
             << "ReferenceCounter" << QString::number (aDocument->ReferenceCounter());
 
-  // TODO IsInSession, IsStored, Name, IsReadOnly, IsUpToDate, CanCloseReference, IsOpened
+  // TDocStd_Document methods
+  TCollection_AsciiString aDocumentDataInfo = !aDocument->GetData().IsNull()
+    ? DFBrowserPane_Tools::GetPointerInfo (aDocument->GetData()).ToCString() : "";
+  theValues << aSeparationStr.ToCString() << aSeparationStr.ToCString()
+            << STANDARD_TYPE (TDocStd_Document)->Name() << ""
+            << aSeparationStr.ToCString() << aSeparationStr.ToCString()
+            << "IsSaved" << DFBrowserPane_Tools::BoolToStr (aDocument->IsSaved())
+            << "IsChanged" << DFBrowserPane_Tools::BoolToStr (aDocument->IsChanged())
+            << "GetSavedTime" << DFBrowserPane_Tools::BoolToStr (aDocument->GetSavedTime())
+            << "GetName" << (aDocument->IsSaved() ? DFBrowserPane_Tools::ToString (aDocument->GetName()) : "")
+            << "GetPath" << (aDocument->IsSaved() ? DFBrowserPane_Tools::ToString (aDocument->GetPath()) : "")
+            << "GetData" << aDocumentDataInfo.ToCString()
+            << "Main" << DFBrowserPane_Tools::GetEntry (aDocument->Main()).ToCString()
+            << "IsEmpty" << DFBrowserPane_Tools::BoolToStr (aDocument->IsEmpty())
+            << "IsValid" << DFBrowserPane_Tools::BoolToStr (aDocument->IsValid())
+            << "HasOpenCommand" << DFBrowserPane_Tools::BoolToStr (aDocument->HasOpenCommand())
+            << "GetUndoLimit" << QString::number (aDocument->GetUndoLimit())
+            << "GetAvailableUndos" << QString::number (aDocument->GetAvailableUndos())
+            << "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 13b802b..c7fb4fd 100644 (file)
@@ -27,7 +27,9 @@ void DFBrowserPane_TDocStdXLink::GetValues (const Handle(TDF_Attribute)& theAttr
   Handle(TDocStd_XLink) anAttribute = Handle(TDocStd_XLink)::DownCast (theAttribute);
   if (anAttribute.IsNull())
     return;
+  theValues.append ("LabelEntry");
   theValues.append (anAttribute->LabelEntry().ToCString());
+  theValues.append ("DocumentEntry");
   theValues.append (anAttribute->DocumentEntry().ToCString());
 }
 
index 9622a86..4539e2a 100644 (file)
@@ -32,6 +32,7 @@ void DFBrowserPane_TFunctionFunction::GetValues (const Handle(TDF_Attribute)& th
   anAttribute->GetDriverGUID().ToCString (aStr);
   TCollection_AsciiString aString(aStr);
 
+  theValues.append ("GetDriverGUID");
   theValues.append (DFBrowserPane_Tools::ToString(aString));
 }
 
index 8257fe8..31e46a2 100644 (file)
@@ -59,20 +59,13 @@ const int COLUMN_EVOLUTION_WIDTH = 90;
 DFBrowserPane_TNamingNamedShape::DFBrowserPane_TNamingNamedShape()
 : DFBrowserPane_AttributePane(), myEvolutionTableView (0), myHelperExport (0)
 {
-  QList<QVariant> aHeaderValues;
-  aHeaderValues << "Value" << "Type" << "BREP" << "SV";
-  getPaneModel()->SetHeaderValues (aHeaderValues, Qt::Horizontal);
-  getPaneModel()->SetColumnCount (aHeaderValues.count());
+  getPaneModel()->SetColumnCount (5);
 
-  aHeaderValues.clear();
-  aHeaderValues << "Version" << "Evolution" << "Shape" << "Current Shape" << "Original Shape";
-  getPaneModel()->SetHeaderValues (aHeaderValues, Qt::Vertical);
-
-  aHeaderValues.clear();
-  aHeaderValues << "New Shape" << "Type" << "" << "Old Shape" << "Type" << "Label" << "" << "Evolution" << "isModified";
   myEvolutionPaneModel = new DFBrowserPane_AttributePaneModel();
-  myEvolutionPaneModel->SetHeaderValues (aHeaderValues, Qt::Horizontal);
-  myEvolutionPaneModel->SetColumnCount (aHeaderValues.count());
+  myEvolutionPaneModel->SetColumnCount (11);
+  QList<int> anItalicColumns;
+  anItalicColumns << 2 << 6;
+  myEvolutionPaneModel->SetItalicColumns (anItalicColumns);
   QItemSelectionModel* aSelectionModel = new QItemSelectionModel (myEvolutionPaneModel);
   mySelectionModels.push_back (aSelectionModel);
 }
@@ -87,6 +80,7 @@ QWidget* DFBrowserPane_TNamingNamedShape::CreateWidget (QWidget* theParent)
   aMainWidget->setVisible (false);
 
   myTableView = new DFBrowserPane_TableView (aMainWidget);
+  myTableView->GetTableView()->verticalHeader()->setVisible (false);
   myTableView->SetModel (myPaneModel);
   QTableView* aTableView = myTableView->GetTableView();
   aTableView->setSelectionBehavior (QAbstractItemView::SelectItems);
@@ -95,11 +89,8 @@ QWidget* DFBrowserPane_TNamingNamedShape::CreateWidget (QWidget* theParent)
   aSelectionModelsIt++;
 
   aTableView->horizontalHeader()->setStretchLastSection (false);
-  aTableView->setColumnWidth (0, COLUMN_POINTER_WIDTH);
-  aTableView->setColumnWidth (1, COLUMN_TYPE_WIDTH);
-  aTableView->setColumnWidth (2, COLUMN_EXPORT_WIDTH);
   aTableView->setColumnWidth (3, COLUMN_EXPORT_WIDTH);
-  aTableView->verticalHeader()->setVisible (true);
+  aTableView->setColumnWidth (4, COLUMN_EXPORT_WIDTH);
   DFBrowserPane_ItemDelegateButton* anItemDelegate = new DFBrowserPane_ItemDelegateButton (aTableView,
                                                                                           ":/icons/export_shape.png");
   QList<int> aRows;
@@ -107,12 +98,12 @@ QWidget* DFBrowserPane_TNamingNamedShape::CreateWidget (QWidget* theParent)
   anItemDelegate->SetFreeRows (aRows);
   QObject::connect (anItemDelegate, SIGNAL (buttonPressed (const QModelIndex&)),
                     &myHelperExport, SLOT (OnButtonPressed (const QModelIndex&)));
-  aTableView->setItemDelegateForColumn (2, anItemDelegate);
+  aTableView->setItemDelegateForColumn (3, anItemDelegate);
 
   DFBrowserPane_ItemDelegateButton* anItemDelegate2 = new DFBrowserPane_ItemDelegateButton (aTableView,
                                                                                             ":/icons/folder_export.png");
   anItemDelegate2->SetFreeRows (aRows);
-  aTableView->setItemDelegateForColumn (3, anItemDelegate2);
+  aTableView->setItemDelegateForColumn (4, anItemDelegate2);
 
   myEvolutionTableView = new DFBrowserPane_TableView (aMainWidget);
   myEvolutionTableView->SetModel (myEvolutionPaneModel);
@@ -120,21 +111,19 @@ QWidget* DFBrowserPane_TNamingNamedShape::CreateWidget (QWidget* theParent)
 
   aTableView->setSelectionModel (*aSelectionModelsIt);
 
-  QList<int> aColumnWidths;
-  aColumnWidths << COLUMN_POINTER_WIDTH << COLUMN_TYPE_WIDTH << COLUMN_EXPORT_WIDTH << COLUMN_POINTER_WIDTH
-                << COLUMN_TYPE_WIDTH << COLUMN_REFERENCE_WIDTH << COLUMN_EXPORT_WIDTH << COLUMN_EVOLUTION_WIDTH;
-  for (int aColumnId = 0, aCount = aColumnWidths.size(); aColumnId < aCount; aColumnId++)
-    aTableView->setColumnWidth (aColumnId, aColumnWidths[aColumnId]);
+  aTableView->horizontalHeader()->setStretchLastSection (false);
+  aTableView->setColumnWidth (5, COLUMN_EXPORT_WIDTH);
+  aTableView->setColumnWidth (10, COLUMN_EXPORT_WIDTH);
 
   anItemDelegate = new DFBrowserPane_ItemDelegateButton (myEvolutionTableView->GetTableView(), ":/icons/export_shape.png");
   QObject::connect (anItemDelegate, SIGNAL (buttonPressed (const QModelIndex&)),
                     &myHelperExport, SLOT (OnButtonPressed (const QModelIndex&)));
-  myEvolutionTableView->GetTableView()->setItemDelegateForColumn (2, anItemDelegate);
+  myEvolutionTableView->GetTableView()->setItemDelegateForColumn (5, anItemDelegate);
 
   anItemDelegate = new DFBrowserPane_ItemDelegateButton (myEvolutionTableView->GetTableView(), ":/icons/export_shape.png");
   QObject::connect (anItemDelegate, SIGNAL (buttonPressed (const QModelIndex&)),
                     &myHelperExport, SLOT (OnButtonPressed (const QModelIndex&)));
-  myEvolutionTableView->GetTableView()->setItemDelegateForColumn (6, anItemDelegate);
+  myEvolutionTableView->GetTableView()->setItemDelegateForColumn (10, anItemDelegate);
 
   QGridLayout* aLay = new QGridLayout (aMainWidget);
   aLay->setContentsMargins (0, 0, 0, 0);
@@ -153,56 +142,81 @@ void DFBrowserPane_TNamingNamedShape::Init (const Handle(TDF_Attribute)& theAttr
   Handle(TNaming_NamedShape) aShapeAttr = Handle(TNaming_NamedShape)::DownCast (theAttribute);
   myHelperExport.Clear();
 
-  // table view filling
   QList<QVariant> aValues;
-  aValues << QString::number (aShapeAttr->Version()) << "" << "" << "";
-  aValues << DFBrowserPane_Tools::ToName (DB_NS_TYPE, aShapeAttr->Evolution()).ToCString() << "" << "" << "";
+  aValues << "Version" << QString::number (aShapeAttr->Version()) << "" << "" << "";
+  aValues << "Evolution" << DFBrowserPane_Tools::ToName (DB_NS_TYPE, aShapeAttr->Evolution()).ToCString() << "" << "" << "";
 
   NCollection_List<TopoDS_Shape> aShapes;
-  {
-    TopoDS_Shape aShape = aShapeAttr->Get();
-    TCollection_AsciiString aShapeInfo = !aShape.IsNull() ? DFBrowserPane_Tools::GetPointerInfo (aShape.TShape()) : "";
-    aValues << aShapeInfo.ToCString() << DFBrowserPane_Tools::ShapeTypeInfo (aShape) << "" << "";
-    aShapes.Append (aShape);
-
-    TopoDS_Shape aCurrentShape = TNaming_Tool::CurrentShape (aShapeAttr);
-    TCollection_AsciiString aCurrentShapeInfo = !aCurrentShape.IsNull() ?
-                                    DFBrowserPane_Tools::GetPointerInfo (aCurrentShape.TShape()) : "";
-    aValues << aCurrentShapeInfo.ToCString() << DFBrowserPane_Tools::ShapeTypeInfo (aCurrentShape) << "" << "";
-    aShapes.Append (aCurrentShape);
-
-    TopoDS_Shape anOriginalShape = TNaming_Tool::OriginalShape (aShapeAttr);
-    TCollection_AsciiString anOriginalShapeInfo = !anOriginalShape.IsNull() ?
-              DFBrowserPane_Tools::GetPointerInfo (aShape.TShape()) : "";
-    aValues << anOriginalShapeInfo.ToCString() << DFBrowserPane_Tools::ShapeTypeInfo (anOriginalShape) << "" << "";
-    aShapes.Append (anOriginalShape);
-  }
+  QList<int> aFreeRows;
+  aFreeRows << 0 << 1;
+
+  TopoDS_Shape aShape = aShapeAttr->Get();
+  TCollection_AsciiString aShapeInfo = !aShape.IsNull() ? DFBrowserPane_Tools::GetPointerInfo (aShape.TShape()) : "";
+  aValues << "Shape" << aShapeInfo.ToCString() << DFBrowserPane_Tools::ShapeTypeInfo (aShape) << "" << "";
+  aShapes.Append (aShape);
+  if (aShape.IsNull())
+    aFreeRows << 2;
+
+  TopoDS_Shape aCurrentShape = TNaming_Tool::CurrentShape (aShapeAttr);
+  TCollection_AsciiString aCurrentShapeInfo = !aCurrentShape.IsNull() ?
+                                  DFBrowserPane_Tools::GetPointerInfo (aCurrentShape.TShape()) : "";
+  aValues << "CurrentShape" << aCurrentShapeInfo.ToCString()
+          << DFBrowserPane_Tools::ShapeTypeInfo (aCurrentShape) << "" << "";
+  aShapes.Append (aCurrentShape);
+  if (aCurrentShape.IsNull())
+    aFreeRows << 3;
+
+  TopoDS_Shape anOriginalShape = TNaming_Tool::OriginalShape (aShapeAttr);
+  TCollection_AsciiString anOriginalShapeInfo = !anOriginalShape.IsNull() ?
+            DFBrowserPane_Tools::GetPointerInfo (anOriginalShape.TShape()) : "";
+  aValues << "OriginalShape" << anOriginalShapeInfo.ToCString()
+          << DFBrowserPane_Tools::ShapeTypeInfo (anOriginalShape) << "" << "";
+  aShapes.Append (anOriginalShape);
+  if (anOriginalShape.IsNull())
+    aFreeRows << 4;
+
 
   DFBrowserPane_AttributePaneModel* aModel = getPaneModel();
   aModel->Init (aValues);
-
+  if (myTableView)
+  {
+    QTableView* aTableView = myTableView->GetTableView();
+    for (int i = 0; i < aModel->columnCount(); i++)
+    {
+      if (i == 3 || i == 4)
+        dynamic_cast<DFBrowserPane_ItemDelegateButton*>(aTableView->itemDelegateForColumn(3))->SetFreeRows (aFreeRows);
+      else
+        aTableView->resizeColumnToContents (i);
+    }
+  }
   QModelIndexList anIndices;
   int aRowId = 2;
   for (NCollection_List<TopoDS_Shape>::Iterator aShapeIt (aShapes); aShapeIt.More(); aShapeIt.Next(), aRowId++)
   {
-    const TopoDS_Shape& aShape = aShapeIt.Value();
-    if (aShape.IsNull())
+    if (aShapeIt.Value().IsNull())
       continue;
-
     anIndices.clear();
-    anIndices << aModel->index (aRowId, 2) << aModel->index (aRowId, 3);
-    myHelperExport.AddShape (aShape, anIndices);
+    anIndices << aModel->index (aRowId, 1) << aModel->index (aRowId, 2) <<
+                 aModel->index (aRowId, 3) << aModel->index (aRowId, 4);
+    myHelperExport.AddShape (aShapeIt.Value(), anIndices);
   }
 
   // evolution table view filling
   aValues.clear();
   aRowId = 0;
+  bool aHasModified = false;
   for (TNaming_Iterator aShapeAttrIt (aShapeAttr); aShapeAttrIt.More(); aShapeAttrIt.Next(), aRowId++)
   {
     const TopoDS_Shape& anOldShape = aShapeAttrIt.OldShape();
     const TopoDS_Shape& aNewShape = aShapeAttrIt.NewShape();
 
     Handle(TNaming_NamedShape) anOldAttr = TNaming_Tool::NamedShape (anOldShape, aShapeAttr->Label());
+    aValues << DFBrowserPane_Tools::ToName (DB_NS_TYPE, aShapeAttrIt.Evolution()).ToCString()
+            << (aShapeAttrIt.IsModification() ? "modified" : "-");
+    aHasModified = aHasModified | aShapeAttrIt.IsModification();
+
+    aValues << "New:";
+
     QString aLabelInfo;
     if (!anOldAttr.IsNull())
     {
@@ -215,21 +229,21 @@ void DFBrowserPane_TNamingNamedShape::Init (const Handle(TDF_Attribute)& theAttr
               << DFBrowserPane_Tools::ShapeTypeInfo (aNewShape)
               << "";
     else
-      aValues << "" << "" << "";
+      aValues << "-" << "-" << "";
+    aValues << "Old:";
     if (!anOldShape.IsNull())
       aValues << DFBrowserPane_Tools::GetPointerInfo (anOldShape.TShape()->This()).ToCString()
               << DFBrowserPane_Tools::ShapeTypeInfo (anOldShape)
               << aLabelInfo
               << "";
     else
-      aValues << "" << "" << "" << "";
-    aValues << DFBrowserPane_Tools::ToName (DB_NS_TYPE, aShapeAttrIt.Evolution()).ToCString()
-            << (aShapeAttrIt.IsModification() ? "true" : "false");
+      aValues << "-" << "-" << "-" << "";
   }
 
   if (myEvolutionTableView)
   {
     myEvolutionTableView->setVisible (aValues.size() > 0);
+    myEvolutionTableView->GetTableView()->setColumnHidden (1, !aHasModified);
     myEvolutionPaneModel->Init (aValues);
 
     aRowId = 0;
@@ -241,18 +255,23 @@ void DFBrowserPane_TNamingNamedShape::Init (const Handle(TDF_Attribute)& theAttr
       if (!aNewShape.IsNull())
       {
         anIndices.clear();
-        anIndices << myEvolutionPaneModel->index (aRowId, 0) << myEvolutionPaneModel->index (aRowId, 1)
-                  << myEvolutionPaneModel->index (aRowId, 2);
+        anIndices << myEvolutionPaneModel->index (aRowId, 3) << myEvolutionPaneModel->index (aRowId, 4)
+                  << myEvolutionPaneModel->index (aRowId, 5);
         myHelperExport.AddShape (aNewShape, anIndices);
       }
       if (!anOldShape.IsNull())
       {
         anIndices.clear();
-        anIndices << myEvolutionPaneModel->index (aRowId, 3) << myEvolutionPaneModel->index (aRowId, 4)
-                  << myEvolutionPaneModel->index (aRowId, 5) << myEvolutionPaneModel->index (aRowId, 6);
+        anIndices << myEvolutionPaneModel->index (aRowId, 7) << myEvolutionPaneModel->index (aRowId, 8)
+                  << myEvolutionPaneModel->index (aRowId, 10);
         myHelperExport.AddShape (anOldShape, anIndices);
       }
     }
+    for (int i = 0; i < myEvolutionPaneModel->columnCount(); i++)
+    {
+      if (i == 5 || i == 10) continue;
+      myEvolutionTableView->GetTableView()->resizeColumnToContents (i);
+    }
   }
 }
 
@@ -335,7 +354,7 @@ int DFBrowserPane_TNamingNamedShape::GetSelectionKind (QItemSelectionModel* theM
   if (aRow == 0 || aRow == 1)
     return aKind;
 
-  if (aSelectedIndex.column() == 3)
+  if (aSelectedIndex.column() == 4)
     aKind = DFBrowserPane_SelectionKind_ExportToShapeViewer;
 
   return aKind;
@@ -357,7 +376,7 @@ void DFBrowserPane_TNamingNamedShape::GetSelectionParameters (QItemSelectionMode
     return;
 
   QModelIndex aSelectedIndex = aSelectedIndices.first();
-  if (aSelectedIndex.column() != 3)
+  if (aSelectedIndex.column() != 4)
     return;
 
   const TopoDS_Shape& aShape = myHelperExport.GetShape (aSelectedIndex);
@@ -377,7 +396,7 @@ void DFBrowserPane_TNamingNamedShape::GetReferences (const Handle(TDF_Attribute)
   if (!myEvolutionTableView)
     return;
   QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (
-                                                          myEvolutionTableView->GetTableView(), 5);
+                                                          myEvolutionTableView->GetTableView(), 9);
 
   Handle(TNaming_NamedShape) aShapeAttr = Handle(TNaming_NamedShape)::DownCast (theAttribute);
   for (TNaming_Iterator aShapeAttrIt (aShapeAttr); aShapeAttrIt.More(); aShapeAttrIt.Next())
index a4d52e8..2a8e64b 100644 (file)
@@ -44,15 +44,7 @@ DFBrowserPane_TNamingNaming::DFBrowserPane_TNamingNaming()
 : DFBrowserPane_AttributePane(), myNamingView (0)
 {
   myNamingModel = new DFBrowserPane_AttributePaneModel();
-
-  QList<QVariant> aHeaderValues;
-  aHeaderValues << "Type" << "Shape Type" << "Stop Named Shape" << "Index";
-  aHeaderValues << "Key_TShape" << "Context Label" << "Orientation";
-  myNamingModel->SetHeaderValues (aHeaderValues, Qt::Vertical);
-
-  aHeaderValues.clear();
-  aHeaderValues << "Arguments";
-  getPaneModel()->SetHeaderValues (aHeaderValues, Qt::Horizontal);
+  myNamingModel->SetColumnCount (2);
 }
 
 // =======================================================================
@@ -64,7 +56,7 @@ QWidget* DFBrowserPane_TNamingNaming::CreateWidget (QWidget* theParent)
   QWidget* aMainWidget = new QWidget (theParent);
 
   myNamingView = new DFBrowserPane_TableView (aMainWidget);
-  myNamingView->GetTableView()->verticalHeader()->setVisible (true);
+  myNamingView->GetTableView()->verticalHeader()->setVisible (false);
   myNamingView->GetTableView()->horizontalHeader()->setVisible (false);
   myNamingView->SetModel (myNamingModel);
 
@@ -73,6 +65,7 @@ QWidget* DFBrowserPane_TNamingNaming::CreateWidget (QWidget* theParent)
   myTableView->GetTableView()->setSelectionModel (mySelectionModels.front());
 
   QGridLayout* aLay = new QGridLayout (aMainWidget);
+  aLay->setContentsMargins (0, 0, 0, 0);
   aLay->addWidget (myNamingView);
   aLay->addWidget (myTableView);
   aLay->setRowStretch (1, 1);
@@ -90,15 +83,19 @@ void DFBrowserPane_TNamingNaming::Init (const Handle(TDF_Attribute)& theAttribut
   GetValues (theAttribute, aValues);
 
   QList<QVariant> aNamingValues;
-  for (int anValueId = 0; anValueId < 7; anValueId++)
+  for (int anValueId = 0; anValueId < 14; anValueId++)
     aNamingValues.append (aValues[anValueId]);
   myNamingModel->Init (aNamingValues);
+  if (myNamingView)
+    myNamingView->GetTableView()->resizeColumnToContents (0);
 
   QList<QVariant> aNamedShapesValues;
-  for (int anValueId = 7, aCount = aValues.size(); anValueId < aCount; anValueId++)
+  for (int anValueId = 14, aCount = aValues.size(); anValueId < aCount; anValueId++)
     aNamedShapesValues.append (aValues[anValueId]);
 
   getPaneModel()->Init (aNamedShapesValues);
+  if (myTableView)
+    myTableView->GetTableView()->resizeColumnToContents (0);
 }
 
 // =======================================================================
@@ -113,21 +110,32 @@ void DFBrowserPane_TNamingNaming::GetValues (const Handle(TDF_Attribute)& theAtt
 
   TNaming_Name aNamingName = anAttribute->GetName();
 
-  // values from 0-6
+  // values from 0-13
+  theValues.append ("Type");
   theValues.append (DFBrowserPane_Tools::ToName (DB_NAMING_TYPE, aNamingName.Type()).ToCString());
+  theValues.append ("ShapeType");
   theValues.append (DFBrowserPane_Tools::ToName (DB_SHAPE_TYPE, aNamingName.ShapeType()).ToCString());
   Handle(TNaming_NamedShape) aStopShape = aNamingName.StopNamedShape();
+  theValues.append ("StopNamedShape");
   theValues.append (!aStopShape.IsNull() ? DFBrowserPane_Tools::GetEntry (aStopShape->Label()).ToCString() : "");
+  theValues.append ("Index");
   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() : "");
   TDF_Label aContextLabel = aNamingName.ContextLabel();
+  theValues.append ("ContextLabel");
   theValues.append (!aContextLabel.IsNull() ? DFBrowserPane_Tools::GetEntry (aContextLabel).ToCString() : "");
+  theValues.append ("Orientation");
   theValues.append (DFBrowserPane_Tools::ToName (DB_ORIENTATION_TYPE, aNamingName.Orientation()).ToCString());
 
-  // values from 7 till count of arguments
-  for (TNaming_ListIteratorOfListOfNamedShape anArgIt(aNamingName.Arguments()); anArgIt.More(); anArgIt.Next())
+  // values from 14 till count of arguments
+  int anArgIndex = 1;
+  for (TNaming_ListIteratorOfListOfNamedShape anArgIt(aNamingName.Arguments()); anArgIt.More(); anArgIt.Next(), anArgIndex++)
+  {
+    theValues << "Argument";
     theValues.append (DFBrowserPane_Tools::GetEntry (anArgIt.Value()->Label()).ToCString());
+  }
 }
 
 // =======================================================================
@@ -145,7 +153,7 @@ Handle(Standard_Transient) DFBrowserPane_TNamingNaming::GetPresentation (const H
   if (!aTableView) // the pane is not visualized yet
     return aPresentation;
 
-  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (aTableView->GetTableView(), 0);
+  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (aTableView->GetTableView(), 1);
   TNaming_Name aNamingName = anAttribute->GetName();
 
   BRep_Builder aBuilder;
@@ -182,7 +190,7 @@ void DFBrowserPane_TNamingNaming::GetReferences (const Handle(TDF_Attribute)& th
   if (anAttribute.IsNull())
     return;
 
-  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (getTableView()->GetTableView(), 0);
+  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (getTableView()->GetTableView(), 1);
   for (TNaming_ListIteratorOfListOfNamedShape aNamingIt(anAttribute->GetName().Arguments()); aNamingIt.More(); aNamingIt.Next())
   {
     Handle(TNaming_NamedShape) aShapeAttr = aNamingIt.Value();
index 9f4d68d..2cf6d60 100644 (file)
 #include <QVariant>
 #include <QWidget>
 
+const int COLUMN_TYPE_WIDTH = 70;
+const int COLUMN_POINTER_WIDTH = 90;
+const int COLUMN_REFERENCE_WIDTH = 90;
+
 // =======================================================================
 // function : Constructor
 // purpose :
@@ -47,10 +51,11 @@ DFBrowserPane_TNamingUsedShapes::DFBrowserPane_TNamingUsedShapes()
 : DFBrowserPane_AttributePane()
 {
   getPaneModel()->SetColumnCount (4);
+  getPaneModel()->SetItalicColumns (QList<int>());
 
-  QList<QVariant> theValues;
-  theValues << "ShapeType" << "Label Entry" << "Key_TShape" << "Value_TShape";
-  getPaneModel()->SetHeaderValues (theValues, Qt::Horizontal);
+  QList<QVariant> aValues;
+  aValues << "ShapeType" << "TShape" << "Label" << "RefShape";
+  getPaneModel()->SetHeaderValues (aValues, Qt::Horizontal);
 }
 
 // =======================================================================
@@ -86,7 +91,7 @@ void DFBrowserPane_TNamingUsedShapes::GetValues (const Handle(TDF_Attribute)& th
     for (std::list<TCollection_AsciiString>::const_iterator aRefIt = aReferences.begin(); aRefIt != aReferences.end(); aRefIt++)
     {
       aValues = anEntryValues[*aRefIt];
-      theValues << aValues[0] << QString ((*aRefIt).ToCString()) << aValues[1] << aValues[2];
+      theValues << aValues[0] << aValues[1] << QString ((*aRefIt).ToCString()) << aValues[2];
     }
   }
   else
@@ -97,8 +102,8 @@ void DFBrowserPane_TNamingUsedShapes::GetValues (const Handle(TDF_Attribute)& th
       TopoDS_Shape aShape = aRefIt.Key();
       theValues.append (!aShape.IsNull() ? DFBrowserPane_Tools::ToName (DB_SHAPE_TYPE, aShape.ShapeType()).ToCString()
                                          : "EMPTY SHAPE");
-      theValues.append (DFBrowserPane_Tools::GetEntry (aRefIt.Value()->Label()).ToCString());
       theValues.append (!aShape.IsNull() ? DFBrowserPane_Tools::GetPointerInfo (aShape.TShape()->This()).ToCString() : "");
+      theValues.append (DFBrowserPane_Tools::GetEntry (aRefIt.Value()->Label()).ToCString());
       const TopoDS_Shape aValueShape = aRefIt.Value()->Shape();
       theValues.append (!aValueShape.IsNull() ? DFBrowserPane_Tools::GetPointerInfo (aValueShape.TShape()->This()).ToCString() : "");
     }
@@ -152,10 +157,26 @@ void DFBrowserPane_TNamingUsedShapes::GetAttributeReferences (const Handle(TDF_A
   if (anAttribute.IsNull())
     return;
 
-  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (getTableView()->GetTableView(), 1);
+  QStringList aSelectedEntries = DFBrowserPane_TableView::GetSelectedColumnValues (getTableView()->GetTableView(), 2);
+  if (aSelectedEntries.isEmpty())
+    return;
+
   for (TNaming_DataMapIteratorOfDataMapOfShapePtrRefShape aRefIt (anAttribute->Map()); aRefIt.More(); aRefIt.Next())
   {
     if (aSelectedEntries.contains (DFBrowserPane_Tools::GetEntry (aRefIt.Value()->Label()).ToCString()))
       theRefAttributes.Append (aRefIt.Value()->NamedShape());
   }
 }
+
+// =======================================================================
+// function : getTableColumnWidths
+// purpose :
+// =======================================================================
+QMap<int, int> DFBrowserPane_TNamingUsedShapes::getTableColumnWidths() const
+{
+  QMap<int, int> aValues;
+  aValues[0] = COLUMN_TYPE_WIDTH; // "ShapeType"
+  aValues[1] = COLUMN_POINTER_WIDTH; // "Key_TShape"
+  aValues[2] = COLUMN_REFERENCE_WIDTH; // "Label Entry"
+  return aValues;
+}
index 9ed95c9..48b0deb 100644 (file)
@@ -72,6 +72,11 @@ public:
                                       NCollection_List<Handle(TDF_Attribute)>& theRefAttributes,
                                       Handle(Standard_Transient)& theRefPresentation) Standard_OVERRIDE;
 
+protected:
+  //! Defines widths of table columns
+  //! \return container of widths
+  Standard_EXPORT virtual QMap<int, int> getTableColumnWidths() const;
+
 private:
 
   NCollection_DataMap<Handle(TDF_Attribute), std::list<TCollection_AsciiString> > myAttributeRefs;
index 42b1e0a..abe0b3d 100644 (file)
 DFBrowserPane_TPrsStdAISPresentation::DFBrowserPane_TPrsStdAISPresentation()
  : DFBrowserPane_AttributePane()
 {
-  getPaneModel()->SetColumnCount (2);
-
-  QList<QVariant> theValues;
-  theValues << "Method" << "Value";
-  getPaneModel()->SetHeaderValues (theValues, Qt::Horizontal);
 }
 
 // =======================================================================
@@ -57,10 +52,15 @@ void DFBrowserPane_TPrsStdAISPresentation::GetValues (const Handle(TDF_Attribute
   if (anAttribute.IsNull())
     return;
   Handle(AIS_InteractiveObject) anIO = anAttribute->GetAIS();
-  theValues << "GetDriverGUID" << ""//DFBrowserPane_Tools::ToString (anAttribute->GetDriverGUID())
+
+  char aStr[256];
+  anAttribute->GetDriverGUID().ToCString(aStr);
+  TCollection_AsciiString aString(aStr);
+
+  theValues << "GetDriverGUID" << DFBrowserPane_Tools::ToString (aString)
             << "GetAIS" << (anIO.IsNull() ? "Null" : anAttribute->DynamicType()->Name())
             << "IsDisplayed" << DFBrowserPane_Tools::BoolToStr (anAttribute->IsDisplayed())
-            << "GetContext()" << (!anIO->GetContext().IsNull() ?
+            << "GetContext()" << ((!anIO.IsNull() && !anIO->GetContext().IsNull()) ?
                                  DFBrowserPane_Tools::GetPointerInfo (anIO->GetContext()).ToCString() : "")
             << "HasOwnMaterial" << DFBrowserPane_Tools::BoolToStr (anAttribute->HasOwnMaterial())
             << "Material" << (anAttribute->HasOwnMaterial() ?
index c005550..7ebbc7c 100644 (file)
@@ -14,7 +14,9 @@
 // commercial license or contractual agreement. 
 
 #include <inspector/DFBrowserPane_TPrsStdAISViewer.hxx>
+#include <inspector/DFBrowserPane_Tools.hxx>
 
+#include <AIS_InteractiveContext.hxx>
 #include <TPrsStd_AISViewer.hxx>
 
 #include <QVariant>
 // function : 
 // purpose :
 // =======================================================================
-void DFBrowserPane_TPrsStdAISViewer::GetValues (const Handle(TDF_Attribute)&, QList<QVariant>&)
+void DFBrowserPane_TPrsStdAISViewer::GetValues (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues)
 {
+  Handle(TPrsStd_AISViewer) aViewerAttribute = Handle(TPrsStd_AISViewer)::DownCast (theAttribute);
+  if (!aViewerAttribute)
+    return;
+
+  Handle(AIS_InteractiveContext) aContext = aViewerAttribute->GetInteractiveContext();
+  TCollection_AsciiString aPointerInfo = !aContext.IsNull()
+    ? DFBrowserPane_Tools::GetPointerInfo (aContext).ToCString() : "";
+
+  theValues << "GetInteractiveContext" << aPointerInfo.ToCString();
+
 }
index 97706d1..346d546 100644 (file)
 #include <inspector/DFBrowserPane_TableView.hxx>
 #include <inspector/DFBrowserPane_Tools.hxx>
 
-#include <QWidget>
-#include <QTableView>
 #include <QAbstractTableModel>
 #include <QHeaderView>
 #include <QHBoxLayout>
+#include <QScrollBar>
+#include <QTableView>
+#include <QWidget>
 
 static const int DEFAULT_ROW_HEIGHT = 30;
 
@@ -40,9 +41,10 @@ DFBrowserPane_TableView::DFBrowserPane_TableView (QWidget* theParent,
 
   QHeaderView* aVHeader = myTableView->verticalHeader();
   aVHeader->setVisible (false);
-  aVHeader->setDefaultSectionSize (aVHeader->minimumSectionSize() + DFBrowserPane_Tools::HeaderSectionMargin());
+  aVHeader->setDefaultSectionSize (aVHeader->minimumSectionSize());
 
   myTableView->horizontalHeader()->setStretchLastSection (true);
+  myTableView->horizontalHeader()->setVisible (false);
   aLay->addWidget (myTableView);
   myDefaultColumnWidths = theDefaultColumnWidths;
 }
@@ -64,9 +66,22 @@ void DFBrowserPane_TableView::SetModel (QAbstractTableModel* theModel)
 // function : SetFixedRowCount
 // purpose :
 // =======================================================================
-void DFBrowserPane_TableView::SetFixedRowCount (const int theCount, QTableView* theView)
+void DFBrowserPane_TableView::SetFixedRowCount (const int theCount, QTableView* theView, const bool theScroll)
+{
+  double aHeight = theView->verticalHeader()->defaultSectionSize()*theCount + DFBrowserPane_Tools::HeaderSectionMargin();
+  if (theScroll)
+    aHeight += theView->horizontalScrollBar()->sizeHint().height();
+
+  theView->setMaximumHeight (aHeight);
+}
+
+// =======================================================================
+// function : SetVisibleHorizontalHeader
+// purpose :
+// =======================================================================
+void DFBrowserPane_TableView::SetVisibleHorizontalHeader (const bool& theVisible)
 {
-  theView->setMaximumHeight (DEFAULT_ROW_HEIGHT*(theCount + 1/*header row*/));
+  myTableView->horizontalHeader()->setVisible (theVisible);
 }
 
 // =======================================================================
@@ -83,7 +98,9 @@ QStringList DFBrowserPane_TableView::GetSelectedColumnValues (QTableView* theTab
        aSelectedIt != aSelectedIndices.end(); aSelectedIt++)
   {
     QModelIndex anIndex = *aSelectedIt;
-    aSelectedEntries.append (aModel->data (aModel->index (anIndex.row(), theColumnId, anIndex.parent()), Qt::DisplayRole).toString());
+    if (theColumnId == anIndex.column())
+      aSelectedEntries.append (aModel->data (aModel->index (anIndex.row(), theColumnId, anIndex.parent()),
+                               Qt::DisplayRole).toString());
   }
   return aSelectedEntries;
 }
index 5d478f4..edcd673 100644 (file)
@@ -49,10 +49,15 @@ public:
   //! Returns the current table view
   QTableView* GetTableView() const { return myTableView; }
 
+  //! Set horizontal header shown or hidden
+  //! \param theVisible visibility flag
+  Standard_EXPORT void SetVisibleHorizontalHeader (const bool& theVisible);
+
   //! Updates table view height to contain the given number of rows only
   //! \param theCount a row count
   //! \param theView a table view, which size will be changed
-  Standard_EXPORT static void SetFixedRowCount (const int theCount, QTableView* theView);
+  //! \param theScroll flag whether add scroll height to size
+  Standard_EXPORT static void SetFixedRowCount (const int theCount, QTableView* theView, const bool theScroll = false);
 
   //! Returns names of selected items in the view
   //! \param theView a table view
index b95d968..4568b46 100644 (file)
@@ -16,6 +16,7 @@
 #include <inspector/DFBrowserPane_Tools.hxx>
 
 #include <AIS_DisplayMode.hxx>
+#include <CDM_CanCloseStatus.hxx>
 #include <Graphic3d_MaterialAspect.hxx>
 #include <Graphic3d_NameOfMaterial.hxx>
 #include <Standard_Version.hxx>
 #include <TopAbs_Orientation.hxx>
 
 #include <QApplication>
+#include <QPalette>
 #include <QStringList>
 #include <QStyle>
+#include <QWidget>
 
 #include <sstream>
 
@@ -100,6 +103,17 @@ QVariant DFBrowserPane_Tools::ShapeTypeInfo (const TopoDS_Shape& theShape)
 }
 
 // =======================================================================
+// function : LightHighlightColor
+// purpose :
+// =======================================================================
+QColor DFBrowserPane_Tools::LightHighlightColor()
+{
+  QWidget aWidget;
+  QPalette aPalette = aWidget.palette();
+  return aPalette.highlight().color().lighter();
+}
+
+// =======================================================================
 // function : ToName
 // purpose :
 // =======================================================================
@@ -127,6 +141,18 @@ TCollection_AsciiString DFBrowserPane_Tools::ToName (const DFBrowserPane_OcctEnu
       break;
     }
     case DB_ORIENTATION_TYPE: { TopAbs::Print((TopAbs_Orientation)theEnumId, aSStream); break; }
+    case DB_CDM_CAN_CLOSE_STATUS:
+    {
+      switch (theEnumId)
+      {
+        case CDM_CCS_OK: return "OK";
+        case CDM_CCS_NotOpen: return "NotOpen";
+        case CDM_CCS_UnstoredReferenced: return "UnstoredReferenced";
+        case CDM_CCS_ReferenceRejection: return "ReferenceRejection";
+        default: return "UNKNOWN CDM_CanCloseStatus";
+      }
+      break;
+    }
     default: return "UNKNOWN PARAMETER";
   }
   return aSStream.str().c_str();
index 5508708..4e10825 100644 (file)
@@ -80,6 +80,10 @@ public:
     return QString::fromUtf16((uint16_t*)theValue.ToExtString());
   }
 
+  //! Returns light highlight color
+  //! \returns Qt color
+  static Standard_EXPORT QColor LightHighlightColor();
+
   //! Converts enumeration value into string text
   //! \param theType an enumeration kind
   //! \param theEnumId an enumeration value
index b7aed2f..1ea8358 100644 (file)
@@ -14,8 +14,6 @@ DFBrowserPane_HelperArray.cxx
 DFBrowserPane_HelperArray.hxx
 DFBrowserPane_HelperExport.cxx
 DFBrowserPane_HelperExport.hxx
-DFBrowserPane_HelperGroupContent.cxx
-DFBrowserPane_HelperGroupContent.hxx
 DFBrowserPane_ItemDelegateButton.cxx
 DFBrowserPane_ItemDelegateButton.hxx
 DFBrowserPane_ItemRole.hxx
index dd0017e..1bcab62 100644 (file)
@@ -24,6 +24,7 @@
 void DFBrowserPaneXDE_XCAFDocArea::GetValues (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues)
 {
   Handle(XCAFDoc_Area) anAttr = Handle(XCAFDoc_Area)::DownCast (theAttribute);
+  theValues.append ("Get");
   theValues.append (anAttr->Get());
 }
 
index e5e17c0..f87e5be 100644 (file)
@@ -25,7 +25,6 @@
 DFBrowserPaneXDE_XCAFDocCentroid::DFBrowserPaneXDE_XCAFDocCentroid()
 : DFBrowserPane_AttributePane()
 {
-  getPaneModel()->SetColumnCount (2);
 }
 
 // =======================================================================
@@ -36,9 +35,9 @@ void DFBrowserPaneXDE_XCAFDocCentroid::GetValues (const Handle(TDF_Attribute)& t
 {
   Handle(XCAFDoc_Centroid) anAttr = Handle(XCAFDoc_Centroid)::DownCast (theAttribute);
   gp_Pnt aPoint = anAttr->Get();
-  theValues << "X" << aPoint.X()
-            << "Y" << aPoint.Y()
-            << "Z" << aPoint.Z();
+  theValues << "Get: X" << aPoint.X()
+            << "Get: Y" << aPoint.Y()
+            << "Get: Z" << aPoint.Z();
 }
 
 // =======================================================================
index d0f2596..f3fc0b7 100644 (file)
@@ -28,7 +28,6 @@
 DFBrowserPaneXDE_XCAFDocColor::DFBrowserPaneXDE_XCAFDocColor()
 : DFBrowserPane_AttributePane()
 {
-  getPaneModel()->SetColumnCount (2);
 }
 
 // =======================================================================
@@ -40,11 +39,11 @@ void DFBrowserPaneXDE_XCAFDocColor::GetValues (const Handle(TDF_Attribute)& theA
   Handle(XCAFDoc_Color) anAttr = Handle(XCAFDoc_Color)::DownCast (theAttribute);
   const Quantity_Color& aColor = anAttr->GetColor();
 
-  theValues << "Red" << aColor.Red();
-  theValues << "Green" << aColor.Green();
-  theValues << "Blue" << aColor.Blue();
+  theValues << "GetColor: Red" << aColor.Red();
+  theValues << "GetColor: Green" << aColor.Green();
+  theValues << "GetColor: Blue" << aColor.Blue();
 
-  theValues << "Quantity_NameOfColor (nearest)" << aColor.Name();
+  theValues << "GetColor: Name" << aColor.Name();
 }
 
 // =======================================================================
index d7bbc92..f9e64d7 100644 (file)
@@ -32,7 +32,6 @@
 DFBrowserPaneXDE_XCAFDocDatum::DFBrowserPaneXDE_XCAFDocDatum()
 : DFBrowserPane_AttributePane()
 {
-  getPaneModel()->SetColumnCount (2);
 }
 
 // =======================================================================
index b4a98f2..e7fa7ab 100644 (file)
@@ -56,6 +56,7 @@ DFBrowserPaneXDE_XCAFDocShapeMapTool::DFBrowserPaneXDE_XCAFDocShapeMapTool()
 
   getPaneModel()->SetHeaderValues (aHeaderValues, Qt::Horizontal);
   getPaneModel()->SetColumnCount (aHeaderValues.count());
+  getPaneModel()->SetItalicColumns (QList<int>());
 }
 
 // =======================================================================
index 11fe070..f4291c5 100644 (file)
@@ -52,9 +52,9 @@
 #include <QWidget>
 #include <QVBoxLayout>
 
-const int FIRST_COLUMN_WIDTH = 200;
+const int FIRST_COLUMN_WIDTH = 190;
 const int SIZE_COLUMN_WIDTH = 30;
-const int POINTER_COLUMN_WIDTH = 110;
+const int POINTER_COLUMN_WIDTH = 70;
 const int ORIENTATION_COLUMN_WIDTH = 70;
 const int LOCATION_COLUMN_WIDTH = 120;
 const int FLAGS_COLUMN_WIDTH = 70;
@@ -73,7 +73,7 @@ const int DEFAULT_SHAPE_VIEW_POSITION_Y = 60;
 const int SHAPEVIEW_DEFAULT_TREE_VIEW_WIDTH = 600;
 const int SHAPEVIEW_DEFAULT_TREE_VIEW_HEIGHT = 500;
 
-const int SHAPEVIEW_DEFAULT_VIEW_WIDTH = 400;
+const int SHAPEVIEW_DEFAULT_VIEW_WIDTH = 200;//400;
 const int SHAPEVIEW_DEFAULT_VIEW_HEIGHT = 1000;
 
 //! \class ShapeView_TreeView
@@ -163,6 +163,7 @@ ShapeView_Window::ShapeView_Window (QWidget* theParent, const TCollection_AsciiS
 
   QDockWidget* aViewDockWidget = new QDockWidget (tr ("View"), myMainWindow);
   aViewDockWidget->setWidget (myViewWindow);
+  aViewDockWidget->setTitleBarWidget (myViewWindow->GetViewToolBar()->GetControl());
   myMainWindow->addDockWidget (Qt::RightDockWidgetArea, aViewDockWidget);
 
   myMainWindow->resize (DEFAULT_SHAPE_VIEW_WIDTH, DEFAULT_SHAPE_VIEW_HEIGHT);
index 08813a7..9f49e6d 100644 (file)
@@ -27,8 +27,8 @@
 #include <QStackedWidget>
 #include <QVBoxLayout>
 
-const int TINSPECTOR_DEFAULT_WIDTH = 900;
-const int TINSPECTOR_DEFAULT_HEIGHT = 700;
+const int TINSPECTOR_DEFAULT_WIDTH = 650;
+const int TINSPECTOR_DEFAULT_HEIGHT = 500;//350;
 const int TINSPECTOR_DEFAULT_POSITION_X = 200;
 const int TINSPECTOR_DEFAULT_POSITION_Y = 60;
 
index 0cd3a7b..3e267e7 100644 (file)
@@ -213,7 +213,7 @@ static int tinspector (Draw_Interpretor&/* di*/, Standard_Integer theArgsNb, con
         anObjectsToSelect.Append(anIO);
       }
       // give parameters as a container of names
-      TCollection_AsciiString aParam (theArgs[anIt]);
+      aParam = TCollection_AsciiString (theArgs[anIt]);
       while (!aParam.StartsWith ("-"))
       {
         anItemNamesToSelect.Append (aParam);
@@ -350,17 +350,17 @@ void ToolsDraw::Commands(Draw_Interpretor& theCommands)
     "\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:  -activate active the plugin in the tool view."
+    "\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 initialize plugin/s by the shape object. If 'name' is empty, initializes all plugins;"
+    "\n\t\t:  -shape initializes plugin/s by the shape object. If 'name' is empty, initializes all plugins;"
     "\n\t\t:  -open gives the file to the plugin/s. If the plugin is active, after open, update content will be done;"
     "\n\t\t:  -update updates content of the active plugin;"
-    "\n\t\t:  -select set the parameter that should be selected in an active tool view."
+    "\n\t\t:  -select sets the parameter that should be selected in an active tool view."
     "\n\t\t:          Depending on active tool the parameter is:"
     "\n\t\t:          ShapeView: 'object' is an instance of TopoDS_Shape TShape,"
     "\n\t\t:          DFBrowser: 'name' is an entry of TDF_Label and name2(optionaly) for TDF_Attribute type name,"
     "\n\t\t:          VInspector: 'object' is an instance of AIS_InteractiveObject;"
-    "\n\t\t:  -show set tool view visible or hidden. The first call of this command will show it.",
+    "\n\t\t:  -show sets Inspector view visible or hidden. The first call of this command will show it.",
       __FILE__, tinspector, group);
 }
 
index 881aeab..169dff7 100644 (file)
@@ -21,7 +21,8 @@
 //! Sets custom item role of Tree view wmodel
 enum TreeModel_ItemRole
 {
-  TreeModel_ItemRole_RowCountRole = Qt::UserRole + 1 //! additional column with row count for item (cached value)
+  TreeModel_ItemRole_RowCountRole = Qt::UserRole + 1, //! additional column with row count for item (cached value)
+  TreeModel_ItemRole_LastTreeRole //! last enumeration value to use outside incremented
 };
 
 #endif
index be2fbd9..8eda466 100644 (file)
@@ -54,6 +54,8 @@ TreeModel_MessageDialog::TreeModel_MessageDialog (QWidget* theParent, const QStr
 
   aLayout->setColumnStretch (0, 1);
 
+  myCancelButton->setDefault (true);
+
   SetInformation (theInformation);
 }
 
index e84d719..adcdeb6 100644 (file)
@@ -37,12 +37,10 @@ VInspector_ToolBar::VInspector_ToolBar (QWidget* theParent)
   myActionsMap[VInspector_ToolActionType_SelectPresentationsId] = new QPushButton (theParent);
   myActionsMap[VInspector_ToolActionType_SelectPresentationsId]->setText ("Select Presentations");
   myActionsMap[VInspector_ToolActionType_SelectPresentationsId]->setCheckable (true);
-  myActionsMap[VInspector_ToolActionType_SelectPresentationsId]->setFixedHeight(20);
 
   myActionsMap[VInspector_ToolActionType_SelectOwnersId] = new QPushButton (theParent);
   myActionsMap[VInspector_ToolActionType_SelectOwnersId]->setText ("Select Owners");
   myActionsMap[VInspector_ToolActionType_SelectOwnersId]->setCheckable (true);
-  myActionsMap[VInspector_ToolActionType_SelectPresentationsId]->setFixedHeight(25);
 
   myMainWindow = new QWidget (theParent);
 
index 0d2d970..778748e 100644 (file)
 #include <QTreeView>
 #include <QWidget>
 
-const int FIRST_COLUMN_WIDTH = 250;
+const int FIRST_COLUMN_WIDTH = 230;
 
 const int COLUMN_1_WIDTH = 30;
 const int COLUMN_2_WIDTH = 70;
-const int COLUMN_3_WIDTH = 130;
-const int COLUMN_4_WIDTH = 90;
-const int COLUMN_5_WIDTH = 180;
-const int COLUMN_6_WIDTH = 70;
+const int COLUMN_3_WIDTH = 70;
+const int COLUMN_4_WIDTH = 75;
+const int COLUMN_5_WIDTH = 120;
+const int COLUMN_6_WIDTH = 65;
 const int COLUMN_7_WIDTH = 70;
 
 const int HISTORY_AIS_NAME_COLUMN_WIDTH = 140;
@@ -69,9 +69,58 @@ const int VINSPECTOR_DEFAULT_POSITION_Y = 60;
 const int VINSPECTOR_DEFAULT_VIEW_WIDTH = 400;
 const int VINSPECTOR_DEFAULT_VIEW_HEIGHT = 1000;
 
+const int VINSPECTOR_DEFAULT_HISTORY_VIEW_WIDTH = 400;
+const int VINSPECTOR_DEFAULT_HISTORY_VIEW_HEIGHT = 50;
+
 const int VINSPECTOR_DEFAULT_VIEW_POSITION_X = 200 + 900 + 100; // TINSPECTOR_DEFAULT_POSITION_X + TINSPECTOR_DEFAULT_WIDTH + 100
 const int VINSPECTOR_DEFAULT_VIEW_POSITION_Y = 60; // TINSPECTOR_DEFAULT_POSITION_Y + 50
 
+//! \class Vinspector_TreeView
+//! Extended tree view control with possibility to set predefined size.
+class Vinspector_TreeView : public QTreeView
+{
+public:
+  //! Constructor
+  Vinspector_TreeView (QWidget* theParent) : QTreeView (theParent), myDefaultWidth (-1), myDefaultHeight (-1) {}
+
+  //! Destructor
+  virtual ~Vinspector_TreeView() {}
+
+  //! Sets default size of control, that is used by the first control show
+  //! \param theDefaultWidth the width value
+  //! \param theDefaultHeight the height value
+  void SetPredefinedSize (int theDefaultWidth, int theDefaultHeight);
+
+  //! Returns predefined size if both values are positive, otherwise parent size hint
+  virtual QSize sizeHint() const Standard_OVERRIDE;
+
+private:
+
+  int myDefaultWidth; //!< default width, -1 if it should not be used
+  int myDefaultHeight; //!< default height, -1 if it should not be used
+};
+
+// =======================================================================
+// function : SetPredefinedSize
+// purpose :
+// =======================================================================
+void Vinspector_TreeView::SetPredefinedSize (int theDefaultWidth, int theDefaultHeight)
+{
+  myDefaultWidth = theDefaultWidth;
+  myDefaultHeight = theDefaultHeight;
+}
+
+// =======================================================================
+// function : sizeHint
+// purpose :
+// =======================================================================
+QSize Vinspector_TreeView::sizeHint() const
+{
+  if (myDefaultWidth > 0 && myDefaultHeight > 0)
+    return QSize (myDefaultWidth, myDefaultHeight);
+  return QTreeView::sizeHint();
+}
+
 // =======================================================================
 // function : Constructor
 // purpose :
@@ -84,6 +133,7 @@ VInspector_Window::VInspector_Window()
   QWidget* aCentralWidget = new QWidget (myMainWindow);
   QGridLayout* aParentLay = new QGridLayout (aCentralWidget);
   aParentLay->setContentsMargins (0, 0, 0, 0);
+  aParentLay->setSpacing(0);
 
   // tool bar: on the bottom of the window
   myToolBar = new VInspector_ToolBar(aCentralWidget);
@@ -103,8 +153,11 @@ VInspector_Window::VInspector_Window()
   myMainWindow->setCentralWidget (aCentralWidget);
 
   // history view in bottom dock widget
-  myHistoryView = new QTreeView (aCentralWidget);
+  myHistoryView = new Vinspector_TreeView (aCentralWidget);
   myHistoryView->setSelectionBehavior (QAbstractItemView::SelectRows);
+  ((Vinspector_TreeView*)myHistoryView)->SetPredefinedSize (VINSPECTOR_DEFAULT_HISTORY_VIEW_WIDTH,
+                                                            VINSPECTOR_DEFAULT_HISTORY_VIEW_HEIGHT);
+
   myHistoryView->setSelectionMode (QAbstractItemView::ExtendedSelection);
   VInspector_ViewModelHistory* aHistoryModel = new VInspector_ViewModelHistory (myHistoryView);
   myHistoryView->setModel (aHistoryModel);
@@ -121,6 +174,7 @@ VInspector_Window::VInspector_Window()
   myHistoryView->setColumnWidth (4, HISTORY_AIS_NAME_COLUMN_WIDTH);
 
   QDockWidget* aHistoryDockWidget = new QDockWidget (tr ("HistoryView"), myMainWindow);
+  aHistoryDockWidget->setTitleBarWidget (new QWidget(myMainWindow));
   aHistoryDockWidget->setWidget (myHistoryView);
   myMainWindow->addDockWidget (Qt::BottomDockWidgetArea, aHistoryDockWidget);
 
@@ -168,9 +222,9 @@ void VInspector_Window::UpdateContent()
 
   // make AIS_InteractiveObject selected selected if exist in select parameters
   NCollection_List<Handle(Standard_Transient)> anObjects;
-  if (myParameters->GetSelectedObjects(aName, anObjects))
+  VInspector_ViewModel* aViewModel = dynamic_cast<VInspector_ViewModel*>(myTreeView->model());
+  if (aViewModel && myParameters->GetSelectedObjects(aName, anObjects))
   {
-    VInspector_ViewModel* aViewModel = dynamic_cast<VInspector_ViewModel*>(myTreeView->model());
     QItemSelectionModel* aSelectionModel = myTreeView->selectionModel();
     aSelectionModel->clear();
     for (NCollection_List<Handle(Standard_Transient)>::Iterator aParamsIt (anObjects);
@@ -305,33 +359,35 @@ void VInspector_Window::onTreeViewContextMenuRequested(const QPoint& thePosition
 // =======================================================================
 void VInspector_Window::onToolBarActionClicked (const int theActionId)
 {
+  VInspector_ViewModel* aViewModel = dynamic_cast<VInspector_ViewModel*> (myTreeView->model());
+  if (!aViewModel)
+    return;
+
   switch (theActionId)
   {
     case VInspector_ToolActionType_UpdateId:
     {
-      VInspector_ViewModel* aViewModel = dynamic_cast<VInspector_ViewModel*> (myTreeView->model());
-      if (aViewModel)
-        UpdateTreeModel();
+      UpdateTreeModel();
       break;
     }
     case VInspector_ToolActionType_SelectPresentationsId:
     {
-       bool isChecked = myToolBar->GetToolButton((VInspector_ToolActionType)theActionId)->isChecked();
-       NCollection_List<Handle(AIS_InteractiveObject)> aPresentationsForViewer;
-       if (isChecked)
-         aPresentationsForViewer = VInspector_ItemPresentableObject::GetSelectedPresentations(myTreeView->selectionModel());
-       VInspector_ViewModel* aViewModel = dynamic_cast<VInspector_ViewModel*> (myTreeView->model());
-       Handle(AIS_InteractiveContext) aContext = aViewModel->GetContext();
-       VInspector_Tools::AddOrRemovePresentations(aContext, aPresentationsForViewer);
+      bool isChecked = myToolBar->GetToolButton((VInspector_ToolActionType)theActionId)->isChecked();
+      NCollection_List<Handle(AIS_InteractiveObject)> aPresentationsForViewer;
+      if (isChecked)
+        aPresentationsForViewer = VInspector_ItemPresentableObject::GetSelectedPresentations(myTreeView->selectionModel());
+      Handle(AIS_InteractiveContext) aContext = aViewModel->GetContext();
+      VInspector_Tools::AddOrRemovePresentations(aContext, aPresentationsForViewer);
+      UpdateTreeModel();
       break;
     }
     case VInspector_ToolActionType_SelectOwnersId:
     {
-       NCollection_List<Handle(SelectBasics_EntityOwner)> anOwnersForViewer;
-       if (myToolBar->GetToolButton((VInspector_ToolActionType)theActionId)->isChecked())
-         VInspector_ViewModel::GetSelectedOwners(myTreeView->selectionModel(), anOwnersForViewer);
-       VInspector_ViewModel* aViewModel = dynamic_cast<VInspector_ViewModel*> (myTreeView->model());
-       VInspector_Tools::AddOrRemoveSelectedShapes(aViewModel->GetContext(), anOwnersForViewer);
+      NCollection_List<Handle(SelectBasics_EntityOwner)> anOwnersForViewer;
+      if (myToolBar->GetToolButton((VInspector_ToolActionType)theActionId)->isChecked())
+        VInspector_ViewModel::GetSelectedOwners(myTreeView->selectionModel(), anOwnersForViewer);
+      VInspector_Tools::AddOrRemoveSelectedShapes(aViewModel->GetContext(), anOwnersForViewer);
+      UpdateTreeModel();
       break;
     }
     default:
@@ -374,6 +430,8 @@ void VInspector_Window::onHistoryViewSelectionChanged (const QItemSelection& the
   QStringList aPointers = aHistoryModel->GetSelectedPointers(aSelectedIndices.first());
 
   VInspector_ViewModel* aTreeModel = dynamic_cast<VInspector_ViewModel*> (myTreeView->model());
+  if (!aTreeModel)
+    return;
 
   QModelIndexList anIndices = aTreeModel->FindPointers (aPointers);
   QItemSelectionModel* aSelectionModel = myTreeView->selectionModel();
@@ -430,7 +488,7 @@ void VInspector_Window::onExportToShapeView()
     myExportToShapeViewDialog->SetInformation (aMessage);
   myExportToShapeViewDialog->Start();
 
-  myParameters->SetParameters (aPluginName, aParameters);
+  myParameters->SetParameters (aPluginName, aParameters, myExportToShapeViewDialog->IsAccepted());
 }
 
 // =======================================================================
@@ -507,6 +565,13 @@ void VInspector_Window::displaySelectedPresentations(const bool theToDisplay)
       aContext->Erase(aPresentation, false);
   }
   aContext->UpdateCurrentViewer();
+
+  // the order of objects returned by AIS_InteractiveContext is changed because the processed object is moved from
+  // Erased to Displayed container or back
+  QItemSelectionModel* aSelectionModel = myTreeView->selectionModel();
+  aSelectionModel->clear();
+
+  UpdateTreeModel();
 }
 
 // =======================================================================