]> O.S.I.I.S - jp/crowedit.git/commitdiff
Crow widget tree, wip
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Tue, 4 Mar 2025 18:59:40 +0000 (19:59 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Tue, 4 Mar 2025 18:59:40 +0000 (19:59 +0100)
34 files changed:
CrowEditBase/CrowEditBase.csproj
CrowEditBase/icons/bug-1.svg [deleted file]
CrowEditBase/icons/bug.svg [new file with mode: 0644]
CrowEditBase/icons/categories/Appearance.svg [new file with mode: 0644]
CrowEditBase/icons/categories/Behaviour.svg [new file with mode: 0644]
CrowEditBase/icons/categories/Data.svg [new file with mode: 0644]
CrowEditBase/icons/categories/Divers.svg [new file with mode: 0644]
CrowEditBase/icons/categories/Layout.svg [new file with mode: 0644]
CrowEditBase/icons/crow.svg [new file with mode: 0644]
CrowEditBase/icons/exclamation.svg [new file with mode: 0644]
CrowEditBase/icons/presentation.svg [new file with mode: 0644]
CrowEditBase/src/Service.cs
CrowEditBase/src/SourceEditor.cs
CrowEditBase/src/Suggestions.cs
CrowEditBase/src/TextBuffer.cs [deleted file]
CrowEditBase/ui/MenuButton.template
CrowEditBase/ui/MenuItem.itmp
plugins/CECrowPlugin/default.conf
plugins/CECrowPlugin/src/CrowService.cs
plugins/CECrowPlugin/src/CrowSuggestions.cs [new file with mode: 0644]
plugins/CECrowPlugin/src/DebugInterface.cs
plugins/CECrowPlugin/src/DebugInterfaceWidget.cs
plugins/CECrowPlugin/src/ForeignWidgetContainer.cs [new file with mode: 0644]
plugins/CECrowPlugin/src/Parsing/IML/ImlDocument.cs
plugins/CECrowPlugin/src/PropertyContainer.cs [new file with mode: 0644]
plugins/CECrowPlugin/ui/winCrowPreview.crow
plugins/CECrowPlugin/ui/winGraphicTree.crow [new file with mode: 0644]
plugins/CECrowPlugin/ui/winProperties.crow [new file with mode: 0644]
plugins/CENetcoreDbgPlugin/src/NetcoreDbgService.cs
plugins/CENugetPlugin/src/NugetService.cs
plugins/CERoslynPlugin/src/MSBuildProject.cs
plugins/CERoslynPlugin/src/RoslynService.cs
src/CrowEdit.cs
ui/windows/winProperties.crow [deleted file]

index 569c244f9a9d685013d33d5b1f90132267882262..f2eadaddc07c04d9da39396297b8d8b520aeffa0 100644 (file)
@@ -17,7 +17,7 @@
        <ItemGroup>
                <ProjectReference Include="/mnt/sdata/devel/crow/Crow/Crow.csproj"/>
                <!--<PackageReference Include="Crow" Version="1.3.2-beta" />-->
-               <PackageReference Include="Crow.CairoBackend" Version="1.2.1-beta" />
+               <PackageReference Include="Crow.CairoBackend" Version="1.2.3-beta" />
        </ItemGroup>
        <ItemGroup>
                <AssemblyAttribute Include="Crow.CrowAssemblyPriority">
diff --git a/CrowEditBase/icons/bug-1.svg b/CrowEditBase/icons/bug-1.svg
deleted file mode 100644 (file)
index 8c73946..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#dddddd" d="M8 6h3c0.6 0 1-0.1 1-0.1 1.3-0.4 2-1.9 2-3.4 0-0.3-0.2-0.5-0.5-0.5s-0.5 0.2-0.5 0.5c0 1-0.5 2.5-1.8 2.5h-0.2c0 0 0.2-2.1-2-2.8v-1.7c0-0.3-0.2-0.5-0.5-0.5s-0.5 0.2-0.5 0.5v1.5c-0.2 0-0.3 0-0.5 0s-0.3 0-0.5 0v-1.5c0-0.3-0.2-0.5-0.5-0.5s-0.5 0.2-0.5 0.5v1.7c-2.2 0.7-2 2.8-2 2.8h-0.2c-1.3 0-1.8-1.5-1.8-2.5 0-0.3-0.2-0.5-0.5-0.5s-0.5 0.2-0.5 0.5c0 1.4 0.7 2.9 2 3.4 0 0 0.3 0.1 1 0.1h4zM8 3h1v1h-1v-1zM6 3h1v1h-1v-1z"></path>
-<path fill="#dddddd" d="M3 7v1c-2.8 0.1-3 1.4-3 3.5 0 0.2 0.2 0.5 0.5 0.5s0.5-0.3 0.5-0.5c0-1.8 0-2.4 2-2.5 0 0 0 1.6 0.6 3.1-0.4 0.1-0.7 0.2-0.9 0.5-0.7 0.6-0.7 1.7-0.7 2.7v0.1c0 0.3 0.2 0.6 0.5 0.6s0.5-0.3 0.5-0.5v-0.1c0-0.8 0-1.7 0.4-2.1 0.1-0.2 0.4-0.3 0.7-0.3 0.5 1 1.5 1.8 2.9 2v-8h-4z"></path>
-<path fill="#dddddd" d="M12 8v-1h-4v8c1.4-0.2 2.4-1 2.9-1.9 0.3 0 0.5 0.1 0.7 0.2 0.4 0.4 0.4 1.2 0.4 2.1v0.1c0 0.3 0.2 0.5 0.5 0.5s0.5-0.2 0.5-0.5v-0.1c0-1 0-2.1-0.7-2.8-0.2-0.2-0.6-0.4-0.9-0.5 0.6-1.5 0.6-3 0.6-3.1 2 0 2 0.7 2 2.5 0 0.3 0.2 0.5 0.5 0.5s0.5-0.2 0.5-0.5c0-2.1-0.2-3.4-3-3.5z"></path>
-</svg>
diff --git a/CrowEditBase/icons/bug.svg b/CrowEditBase/icons/bug.svg
new file mode 100644 (file)
index 0000000..8c73946
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#dddddd" d="M8 6h3c0.6 0 1-0.1 1-0.1 1.3-0.4 2-1.9 2-3.4 0-0.3-0.2-0.5-0.5-0.5s-0.5 0.2-0.5 0.5c0 1-0.5 2.5-1.8 2.5h-0.2c0 0 0.2-2.1-2-2.8v-1.7c0-0.3-0.2-0.5-0.5-0.5s-0.5 0.2-0.5 0.5v1.5c-0.2 0-0.3 0-0.5 0s-0.3 0-0.5 0v-1.5c0-0.3-0.2-0.5-0.5-0.5s-0.5 0.2-0.5 0.5v1.7c-2.2 0.7-2 2.8-2 2.8h-0.2c-1.3 0-1.8-1.5-1.8-2.5 0-0.3-0.2-0.5-0.5-0.5s-0.5 0.2-0.5 0.5c0 1.4 0.7 2.9 2 3.4 0 0 0.3 0.1 1 0.1h4zM8 3h1v1h-1v-1zM6 3h1v1h-1v-1z"></path>
+<path fill="#dddddd" d="M3 7v1c-2.8 0.1-3 1.4-3 3.5 0 0.2 0.2 0.5 0.5 0.5s0.5-0.3 0.5-0.5c0-1.8 0-2.4 2-2.5 0 0 0 1.6 0.6 3.1-0.4 0.1-0.7 0.2-0.9 0.5-0.7 0.6-0.7 1.7-0.7 2.7v0.1c0 0.3 0.2 0.6 0.5 0.6s0.5-0.3 0.5-0.5v-0.1c0-0.8 0-1.7 0.4-2.1 0.1-0.2 0.4-0.3 0.7-0.3 0.5 1 1.5 1.8 2.9 2v-8h-4z"></path>
+<path fill="#dddddd" d="M12 8v-1h-4v8c1.4-0.2 2.4-1 2.9-1.9 0.3 0 0.5 0.1 0.7 0.2 0.4 0.4 0.4 1.2 0.4 2.1v0.1c0 0.3 0.2 0.5 0.5 0.5s0.5-0.2 0.5-0.5v-0.1c0-1 0-2.1-0.7-2.8-0.2-0.2-0.6-0.4-0.9-0.5 0.6-1.5 0.6-3 0.6-3.1 2 0 2 0.7 2 2.5 0 0.3 0.2 0.5 0.5 0.5s0.5-0.2 0.5-0.5c0-2.1-0.2-3.4-3-3.5z"></path>
+</svg>
diff --git a/CrowEditBase/icons/categories/Appearance.svg b/CrowEditBase/icons/categories/Appearance.svg
new file mode 100644 (file)
index 0000000..8e425f7
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#dddddd" d="M16 7.1c0-2.7-1.3-7.1-7.3-7.1s-8.5 7.4-7.5 9.9c0.8 1.9 2.5 0.1 3.1 1 1.8 2.5-2 3.8 0.1 4.7 2.5 1.1 11.6 0.4 11.6-8.5zM4.5 9c-0.9 0-1.5-0.7-1.5-1.5s0.6-1.5 1.5-1.5 1.5 0.7 1.5 1.5-0.7 1.5-1.5 1.5zM6 3.5c0-0.8 0.6-1.5 1.5-1.5s1.5 0.7 1.5 1.5-0.7 1.5-1.5 1.5-1.5-0.7-1.5-1.5zM8.5 14c-0.9 0-1.5-0.7-1.5-1.5s0.6-1.5 1.5-1.5 1.5 0.7 1.5 1.5-0.7 1.5-1.5 1.5zM11 4.5c0-0.8 0.6-1.5 1.5-1.5s1.5 0.7 1.5 1.5-0.7 1.5-1.5 1.5-1.5-0.7-1.5-1.5zM12.5 11c-0.8 0-1.5-0.7-1.5-1.5s0.6-1.5 1.5-1.5 1.5 0.7 1.5 1.5-0.7 1.5-1.5 1.5z"></path>
+</svg>
diff --git a/CrowEditBase/icons/categories/Behaviour.svg b/CrowEditBase/icons/categories/Behaviour.svg
new file mode 100644 (file)
index 0000000..1f4c3ca
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#dddddd" d="M14 12c0 1.105-0.895 2-2 2s-2-0.895-2-2c0-1.105 0.895-2 2-2s2 0.895 2 2z"></path>
+<path fill="#dddddd" d="M11.7 16v0c-0.8 0-1.6-0.2-2.3-0.7l-6.2-3.3c-0.5-0.4-0.9-0.6-1.3-1-1.2-1.2-1.9-2.9-1.9-4.6s0.7-3.3 1.9-4.5c1.2-1.2 2.8-1.9 4.5-1.9s3.3 0.7 4.6 1.9c0.4 0.4 0.6 0.7 1 1.2l3.5 6.4c1 1.7 0.7 3.8-0.7 5.2-0.9 0.9-1.9 1.3-3.1 1.3zM6.4 1c-1.4 0-2.8 0.6-3.8 1.6s-1.6 2.4-1.6 3.8c0 1.5 0.6 2.8 1.6 3.8 0.3 0.3 0.6 0.5 1.1 0.8l6.3 3.4c0.6 0.4 1.2 0.5 1.8 0.5v0c0.9 0 1.7-0.3 2.3-1 1.1-1.1 1.3-2.7 0.5-4l-3.5-6.4c-0.3-0.4-0.5-0.7-0.8-1-1.1-0.9-2.4-1.5-3.9-1.5z"></path>
+<path fill="#dddddd" d="M11 7v-1l-1.4-0.5c-0.1-0.2-0.1-0.3-0.2-0.5l0.6-1.3-0.7-0.7-1.3 0.6c-0.2-0.1-0.3-0.1-0.5-0.2l-0.5-1.4h-1l-0.5 1.4c-0.2 0.1-0.3 0.1-0.5 0.2l-1.3-0.6-0.7 0.7 0.6 1.3c-0.1 0.2-0.1 0.3-0.2 0.5l-1.4 0.5v1l1.4 0.5c0.1 0.2 0.1 0.3 0.2 0.5l-0.6 1.3 0.7 0.7 1.3-0.6c0.2 0.1 0.3 0.2 0.5 0.2l0.5 1.4h1l0.5-1.4c0.2-0.1 0.3-0.1 0.5-0.2l1.3 0.6 0.7-0.7-0.6-1.3c0.1-0.2 0.2-0.3 0.2-0.5l1.4-0.5zM6.5 8c-0.8 0-1.5-0.7-1.5-1.5s0.7-1.5 1.5-1.5 1.5 0.7 1.5 1.5-0.7 1.5-1.5 1.5z"></path>
+</svg>
diff --git a/CrowEditBase/icons/categories/Data.svg b/CrowEditBase/icons/categories/Data.svg
new file mode 100644 (file)
index 0000000..65a8f06
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#dddddd" d="M14 2.5c0 0.828-2.686 1.5-6 1.5s-6-0.672-6-1.5c0-0.828 2.686-1.5 6-1.5s6 0.672 6 1.5z"></path>
+<path fill="#dddddd" d="M8 5c-3.3 0-6-0.7-6-1.5v3c0 0.8 2.7 1.5 6 1.5s6-0.7 6-1.5v-3c0 0.8-2.7 1.5-6 1.5z"></path>
+<path fill="#dddddd" d="M8 9c-3.3 0-6-0.7-6-1.5v3c0 0.8 2.7 1.5 6 1.5s6-0.7 6-1.5v-3c0 0.8-2.7 1.5-6 1.5z"></path>
+<path fill="#dddddd" d="M8 13c-3.3 0-6-0.7-6-1.5v3c0 0.8 2.7 1.5 6 1.5s6-0.7 6-1.5v-3c0 0.8-2.7 1.5-6 1.5z"></path>
+</svg>
diff --git a/CrowEditBase/icons/categories/Divers.svg b/CrowEditBase/icons/categories/Divers.svg
new file mode 100644 (file)
index 0000000..de5dd37
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#dddddd" d="M8 0l-8 8 8 8 8-8-8-8zM2 8l6-6 6 6-6 6-6-6z"></path>
+</svg>
diff --git a/CrowEditBase/icons/categories/Layout.svg b/CrowEditBase/icons/categories/Layout.svg
new file mode 100644 (file)
index 0000000..bbc9719
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#dddddd" d="M0 0v16h16v-16h-16zM15 15h-14v-6h3v1l3-2-3-2v1h-3v-6h6v3h-1l2 3 2-3h-1v-3h6v14z"></path>
+</svg>
diff --git a/CrowEditBase/icons/crow.svg b/CrowEditBase/icons/crow.svg
new file mode 100644 (file)
index 0000000..94f5cfc
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="35.987217"
+   width="51.116982"
+   version="1.1"
+   id="svg2">
+  <path
+     id="path2818"
+     d="m 36.232985,35.977162 c -0.02345,-0.0094 -0.04263,-0.04436 -0.04263,-0.07772 0,-0.03337 -0.04543,-0.117846 -0.100965,-0.187724 -0.05553,-0.06987 -0.10986,-0.152552 -0.120738,-0.183728 -0.04888,-0.140096 -0.547064,-0.441575 -0.740404,-0.448061 -0.01333,-6.73e-4 -0.0417,0.06441 -0.06301,0.144127 -0.0213,0.07971 -0.05448,0.164118 -0.0737,0.187567 -0.06807,0.08303 -0.2351,0.04596 -0.448164,-0.09947 -0.114492,-0.07815 -0.231452,-0.140793 -0.259915,-0.139198 -0.103032,0.0057 -0.22753,-0.0647 -0.284401,-0.160973 -0.105659,-0.178872 -0.451937,-0.41031 -0.613884,-0.41031 -0.11287,0 -0.378547,-0.121442 -0.488394,-0.223239 -0.06283,-0.05824 -0.129597,-0.08369 -0.219515,-0.08369 -0.191898,0 -0.291236,-0.05025 -0.332315,-0.168082 -0.02007,-0.05761 -0.05795,-0.104746 -0.08415,-0.104746 -0.02621,0 -0.07371,-0.02879 -0.105549,-0.06398 -0.03185,-0.03519 -0.108169,-0.07213 -0.169604,-0.08211 -0.219849,-0.03568 -0.937873,-0.414299 -0.993727,-0.524009 -0.01875,-0.03685 -0.103161,-0.143806 -0.187567,-0.237705 -0.189643,-0.210956 -0.537045,-0.371869 -0.741262,-0.343338 -0.710425,0.09925 -0.737631,0.100685 -1.030367,0.05449 -0.337983,-0.05334 -0.630446,-0.05889 -1.115893,-0.02117 -0.331487,0.02576 -0.347801,0.02387 -0.368967,-0.04283 -0.01219,-0.03838 0.0026,-0.154623 0.03266,-0.258318 0.03015,-0.103694 0.04455,-0.205124 0.03202,-0.225402 -0.04471,-0.07234 -0.314032,-0.0065 -0.532991,0.130268 -0.165667,0.103489 -0.230973,0.169125 -0.288563,0.290041 -0.07126,0.149603 -0.19268,0.232754 -0.339892,0.232754 -0.09327,0 -0.01149,-0.448641 0.108895,-0.597398 0.0301,-0.03719 0.045,-0.04843 0.03312,-0.02499 -0.01262,0.02492 3.4e-5,0.04263 0.03051,0.04263 0.03229,0 0.04463,-0.01945 0.03247,-0.05115 -0.0108,-0.02813 -0.0027,-0.05115 0.01813,-0.05115 0.02077,0 0.03776,-0.02034 0.03776,-0.04521 0,-0.05853 0.151433,-0.201223 0.181571,-0.171088 0.01268,0.01268 0.02305,0.003 0.02305,-0.02158 0,-0.05501 0.190827,-0.241992 0.218611,-0.214209 0.01107,0.01107 0.02012,0.0013 0.02012,-0.02169 0,-0.02299 0.01358,-0.03341 0.03018,-0.02314 0.0166,0.01026 0.07415,0.0046 0.127887,-0.01261 0.05374,-0.01721 0.185946,-0.03746 0.293797,-0.04502 0.154262,-0.01082 0.196092,-0.0032 0.196092,0.03533 0,0.03062 0.02017,0.04134 0.05362,0.02851 0.02949,-0.01132 0.08321,-0.0048 0.119365,0.01461 0.04469,0.02391 0.06573,0.02399 0.06573,0 0,-0.0546 0.166343,-0.02716 0.19016,0.03136 0.01696,0.04168 0.02726,0.03685 0.05065,-0.02383 0.03017,-0.0782 0.05209,-0.07969 0.33327,-0.02256 0.04625,0.0094 0.07104,0.0023 0.05918,-0.01685 -0.01918,-0.03103 0.105189,-0.09308 0.158609,-0.07913 0.01351,0.0035 0.0409,-0.02412 0.06088,-0.06145 0.01998,-0.03733 0.06279,-0.06787 0.09513,-0.06787 0.03235,0 0.07872,-0.0319 0.103074,-0.07089 0.03874,-0.06204 0.03597,-0.07306 -0.02225,-0.08828 -0.04068,-0.01065 -0.07465,-0.05808 -0.08746,-0.122132 -0.01151,-0.0576 -0.03098,-0.0947 -0.04325,-0.08243 -0.02243,0.02243 -0.09396,-0.07925 -0.134223,-0.190818 -0.01192,-0.03303 -0.05709,-0.06895 -0.100386,-0.07981 -0.0433,-0.01087 -0.08702,-0.04139 -0.09717,-0.06783 -0.01015,-0.02644 -0.03811,-0.04866 -0.06215,-0.04937 -0.02403,-6.72e-4 -0.09734,-0.06977 -0.162897,-0.153463 -0.06556,-0.08369 -0.141017,-0.152171 -0.167679,-0.152171 -0.02665,0 -0.03909,-0.0094 -0.02762,-0.02084 0.02949,-0.02949 -0.161533,-0.183774 -0.227545,-0.183774 -0.03567,0 -0.05475,-0.02971 -0.05475,-0.08526 0,-0.04689 -0.01667,-0.08526 -0.03705,-0.08526 -0.02039,0 -0.132932,-0.09206 -0.250118,-0.204591 -0.117184,-0.112527 -0.225744,-0.193097 -0.241239,-0.179042 -0.0155,0.01404 -0.01813,0.008 -0.0059,-0.01351 0.02148,-0.0376 -0.06692,-0.09775 -0.12476,-0.08487 -0.01546,0.0034 -0.01943,-0.0078 -0.0088,-0.02496 0.01062,-0.01717 -0.02277,-0.05853 -0.0742,-0.09191 -0.05142,-0.03337 -0.113546,-0.08877 -0.138053,-0.123093 -0.02451,-0.03432 -0.06672,-0.0624 -0.09378,-0.0624 -0.02707,0 -0.04922,-0.01355 -0.04922,-0.03012 0,-0.0438 -0.778285,-0.624964 -0.930964,-0.695162 -0.0729,-0.03352 -0.164401,-0.05081 -0.209278,-0.03955 -0.05655,0.01418 -0.102151,-0.0031 -0.15683,-0.05944 -0.0424,-0.0437 -0.06447,-0.05739 -0.04905,-0.03043 0.01542,0.02698 -0.03574,-0.0023 -0.113694,-0.06486 -0.140423,-0.112848 -0.199258,-0.210672 -0.162485,-0.270173 0.01048,-0.01696 -0.0034,-0.03946 -0.03092,-0.05001 -0.03157,-0.0121 -0.04839,-0.06147 -0.04566,-0.133995 0.0046,-0.123415 -0.115972,-0.333547 -0.242202,-0.421962 -0.03969,-0.0278 -0.06324,-0.06494 -0.05237,-0.08255 0.01089,-0.01761 -0.0042,-0.04121 -0.03354,-0.05247 -0.02932,-0.01125 -0.05331,-0.04833 -0.05331,-0.0824 0,-0.03407 -0.03837,-0.107533 -0.08526,-0.163263 -0.07704,-0.09156 -0.08519,-0.130424 -0.08459,-0.403332 0.0011,-0.467434 0.102818,-0.951299 0.346875,-1.649081 0.133708,-0.382291 0.234679,-0.776483 0.280602,-1.095504 0.01999,-0.138863 0.01188,-0.170521 -0.06808,-0.265547 -0.09126,-0.108463 -0.277674,-0.207699 -0.390138,-0.207699 -0.03326,0 -0.167911,-0.04572 -0.299229,-0.101598 -0.334854,-0.142493 -0.698295,-0.199641 -1.524701,-0.239741 -0.393891,-0.01911 -0.856189,-0.05756 -1.027322,-0.08543 -0.171134,-0.02796 -0.404168,-0.05076 -0.517855,-0.05076 -0.113686,0 -0.249901,-0.01718 -0.302703,-0.03821 -0.0528,-0.02101 -0.22913,-0.0397 -0.391836,-0.04152 -0.16271,-0.0018 -0.288412,-0.01532 -0.27934,-0.03 0.0091,-0.01468 -0.01127,-0.02647 -0.0452,-0.02621 -0.03393,2.24e-4 -0.315468,-0.0481 -0.625641,-0.107494 l -0.563945,-0.107977 -0.33979,0.10758 c -0.186882,0.05917 -0.349511,0.107539 -0.361388,0.107494 -0.04086,-1.36e-4 -0.05638,-0.13324 -0.01741,-0.149221 0.02145,-0.0088 -0.0023,-0.01721 -0.05276,-0.01869 -0.05047,-0.0015 -0.100161,0.01089 -0.110412,0.02747 -0.03208,0.05191 -0.458126,0.118498 -0.505769,0.07904 -0.02811,-0.02328 -0.09385,-0.0242 -0.195783,-0.0028 -0.08441,0.01777 -0.280073,0.0495 -0.434816,0.07054 -0.154743,0.02104 -0.281352,0.05283 -0.281352,0.07068 0,0.01786 -0.02302,0.02362 -0.05115,0.01281 -0.02814,-0.0108 -0.05123,-0.0086 -0.05131,0.0049 0,0.01348 -0.05615,0.02741 -0.124603,0.03097 -0.06845,0.0036 -0.1336,0.01891 -0.144786,0.0341 -0.02606,0.03542 -0.139983,0.04146 -0.796184,0.04221 -0.297591,4.49e-4 -0.537126,0.01439 -0.537126,0.0315 0,0.01698 -0.134282,0.03143 -0.298403,0.0321 -0.369505,0.0015 -0.539084,0.01992 -0.844055,0.09164 -0.131298,0.03088 -0.373004,0.06513 -0.537126,0.0761 -0.164122,0.01097 -0.298404,0.03207 -0.298404,0.04687 0,0.01481 -0.05371,0.0182 -0.119361,0.0076 -0.08039,-0.01304 -0.119361,-0.0061 -0.119361,0.02122 0,0.02232 -0.01443,0.03166 -0.03208,0.02075 -0.03408,-0.02106 -0.587009,0.111706 -0.615884,0.147893 -0.0094,0.01176 -0.04775,0.02527 -0.08526,0.03003 -0.319552,0.04061 -0.388045,0.05571 -0.371812,0.08197 0.01026,0.01661 -0.02466,0.02725 -0.07759,0.02367 -0.107275,-0.0073 -0.331986,0.114563 -0.292219,0.15843 0.014,0.01544 0.0067,0.01729 -0.01626,0.0041 -0.03986,-0.0229 -0.410541,0.170723 -0.776766,0.405746 -0.09378,0.06018 -0.400713,0.229852 -0.682064,0.377042 -0.8431486,0.441091 -1.5106691,0.786933 -1.9438848,1.00712 -0.331279,0.168378 -0.7656083,0.411685 -1.2106655,0.678201 -0.1208071,0.07234 -0.7235464,0.348753 -1.0060453,0.461358 -0.1688108,0.06729 -0.3529682,0.143067 -0.4092389,0.168389 -0.3782305,0.170213 -0.4488005,0.204855 -0.4944967,0.24276 -0.1118065,0.09275 -0.7795227,0.48269 -0.974639,0.569184 -0.1140235,0.05055 -0.3212008,0.108223 -0.4603938,0.12817 -0.2794774,0.04005 -0.6793677,0.03386 -0.6793677,-0.01051 0,-0.01562 -0.014897,-0.01916 -0.033103,-0.0079 -0.018206,0.01125 -0.04289,-0.01852 -0.054852,-0.0662 -0.011962,-0.04766 -0.028767,-0.08665 -0.037344,-0.08665 -0.027842,0 -0.1640932,0.0777 -0.1816285,0.103583 -0.024028,0.03546 -0.2704515,0.135139 -0.3340901,0.135139 -0.040327,0 -0.033244,-0.02142 0.029742,-0.08996 l 0.082677,-0.08996 -0.1534646,0.02493 c -0.084405,0.01371 -0.2762361,0.02752 -0.4262904,0.0307 -0.1617809,0.0034 -0.3133657,0.02625 -0.3724277,0.0561 -0.076685,0.03876 -0.1028397,0.04063 -0.113677,0.0081 -0.00774,-0.02322 -0.050258,-0.04223 -0.09448,-0.04223 -0.044221,0 -0.090781,-0.0168 -0.1034652,-0.03732 -0.012684,-0.02052 -0.05963,-0.03032 -0.1043224,-0.02178 -0.044694,0.0085 -0.0812605,0.0028 -0.0812605,-0.01277 0,-0.01557 -0.0226251,-0.01963 -0.0502787,-0.009 -0.0276536,0.01062 -0.0747891,-0.0052 -0.10474605,-0.03517 -0.0299569,-0.02996 -0.0836695,-0.05446 -0.11936206,-0.05446 -0.0755134,0 -0.16300798,-0.155442 -0.14396948,-0.255775 0.0216458,-0.114071 0.0858903,-0.269677 0.13551736,-0.328235 0.0258287,-0.03048 0.0424846,-0.07582 0.0370134,-0.100762 -0.005471,-0.02494 0.0126179,-0.04604 0.0401989,-0.04689 0.0275816,-8.75e-4 0.0695576,-0.03992 0.0932812,-0.08681 0.0237239,-0.04689 0.0433594,-0.07187 0.0436366,-0.05551 2.7333e-4,0.01638 0.0233532,0.0108 0.0512819,-0.01239 0.0279281,-0.02318 0.0409047,-0.05812 0.0288344,-0.07765 -0.0120695,-0.01954 -0.00597,-0.02563 0.013563,-0.01355 0.03826,0.02364 0.1334119,-0.06902 0.102556,-0.09987 -0.010234,-0.01023 -0.081291,0.01337 -0.15790503,0.05246 -0.19132318,0.0976 -0.53029094,0.131726 -0.60948002,0.06135 -0.040574,-0.03605 -0.10602968,-0.04828 -0.20760549,-0.03876 L 0,26.723956 0.13129745,26.603285 c 0.20194096,-0.185598 1.15569925,-0.834706 1.22646285,-0.834706 0.017944,0 1.0011722,-0.593762 1.1596288,-0.700289 l 0.1062908,-0.07146 -0.097498,-0.04316 c -0.075194,-0.03329 -0.09082,-0.05618 -0.068306,-0.100101 0.016056,-0.03132 0.038207,-0.148677 0.049225,-0.2608 0.013936,-0.141813 0.038705,-0.216631 0.081377,-0.245814 0.1348325,-0.09221 0.317117,-0.268214 0.317117,-0.306188 0,-0.04333 -0.2144179,0.01817 -0.8473768,0.243035 -0.1940842,0.06895 -0.3609084,0.117337 -0.3707213,0.107524 -0.030038,-0.03004 0.1889381,-0.28351 0.3932649,-0.455219 0.1064018,-0.08942 0.2148835,-0.182797 0.2410706,-0.207519 0.134978,-0.127412 0.6824316,-0.46318 1.0116807,-0.620491 0.2054297,-0.09815 0.4118743,-0.205241 0.4587663,-0.237974 0.046892,-0.03274 0.2270451,-0.133333 0.40034,-0.223546 0.1732947,-0.09022 0.3093674,-0.169742 0.3023838,-0.176726 -0.00698,-0.007 -0.1087422,0.01965 -0.226129,0.0592 -0.1501313,0.05057 -0.2241353,0.06119 -0.249524,0.0358 -0.025388,-0.02539 -0.024637,-0.03609 0.00253,-0.03609 0.021244,0 0.048451,-0.03096 0.060459,-0.06879 0.019185,-0.06045 0.1680893,-0.221549 0.4635947,-0.501568 0.048755,-0.0462 0.1428871,-0.117089 0.2091823,-0.157532 0.2161395,-0.131856 0.3951126,-0.257621 0.4169899,-0.29302 0.022754,-0.03682 1.0610754,-0.562441 1.1881729,-0.601483 0.04125,-0.01267 0.1911105,-0.08059 0.3330257,-0.150923 0.1419153,-0.07034 0.2933966,-0.139111 0.3366242,-0.152832 0.043226,-0.01372 0.1463559,-0.07271 0.2291753,-0.131083 0.1199707,-0.08456 0.1625792,-0.09864 0.2096072,-0.06927 0.047284,0.02953 0.1538875,-0.0087 0.5358933,-0.192258 0.2622766,-0.126017 0.5689448,-0.264972 0.6814862,-0.308789 0.1125401,-0.04382 0.2249981,-0.09985 0.2499076,-0.124513 0.081951,-0.08115 0.1773194,-0.116582 0.3449729,-0.128175 0.1131113,-0.0078 0.1886589,-0.03475 0.2391522,-0.08524 0.040595,-0.0406 0.1438461,-0.118225 0.2294472,-0.172512 0.1733184,-0.109916 0.2284002,-0.176259 0.2623733,-0.316014 0.01334,-0.05486 0.06939,-0.123095 0.132975,-0.161862 0.06158,-0.03755 0.08742,-0.0685 0.05876,-0.07038 -0.08661,-0.0057 0.555593,-0.16351 0.673539,-0.16552 0.06836,-0.0011 0.110835,-0.01922 0.110835,-0.0471 0,-0.02486 0.03789,-0.08081 0.08421,-0.124319 0.09656,-0.09071 0.08465,-0.1374 -0.03506,-0.1374 -0.139172,0 -0.09502,-0.04884 0.164003,-0.181411 0.306614,-0.156928 0.449342,-0.161093 0.841624,-0.02456 0.28366,0.09873 0.288206,0.09917 0.345032,0.03364 0.03167,-0.03652 0.06838,-0.06639 0.08158,-0.06639 0.02544,0 0.444123,-0.288445 0.530711,-0.36562 0.02814,-0.02508 0.1816,-0.14031 0.341033,-0.256071 0.159432,-0.115763 0.427996,-0.311618 0.596806,-0.435234 0.324997,-0.237988 0.519973,-0.363211 0.852581,-0.547569 0.112541,-0.06238 0.272663,-0.181743 0.355823,-0.265252 l 0.151204,-0.151834 -0.279091,0.01616 c -0.295876,0.01713 -0.322422,0.0016 -0.24494,-0.143172 0.05332,-0.09963 0.736112,-0.634181 1.100461,-0.86154 0.05926,-0.03698 0.08714,-0.07645 0.07227,-0.102311 -0.01332,-0.02315 -0.01159,-0.03067 0.0038,-0.01669 0.01542,0.01398 0.07543,-0.01065 0.133354,-0.05471 0.219267,-0.166827 1.171023,-0.727058 1.367134,-0.804733 0.258942,-0.102562 0.861798,-0.404573 0.886111,-0.443911 0.0101,-0.01634 0.121786,-0.06366 0.248193,-0.105146 0.287589,-0.09439 0.30873,-0.106826 0.229061,-0.134772 -0.06732,-0.02362 -0.07326,-0.02127 0.880461,-0.347551 0.239998,-0.08211 0.429331,-0.156371 0.420748,-0.165033 -0.0086,-0.0087 0.03161,-0.01751 0.08933,-0.01966 0.05771,-0.0022 0.121598,-0.02517 0.141958,-0.05115 0.02171,-0.0277 0.120634,-0.05234 0.239187,-0.05957 0.210669,-0.01285 0.602989,-0.173276 0.928324,-0.379597 0.08567,-0.05433 0.264945,-0.123611 0.398397,-0.153965 0.133453,-0.03035 0.2584,-0.06637 0.277662,-0.08004 0.01927,-0.01367 0.09641,-0.04558 0.171433,-0.07092 0.07503,-0.02534 0.173013,-0.07458 0.217746,-0.109424 0.04473,-0.03484 0.09298,-0.06335 0.107228,-0.06335 0.01425,0 0.07348,-0.04445 0.131636,-0.09877 0.113963,-0.106457 0.351444,-0.240935 0.463279,-0.26234 0.038,-0.0073 0.08445,-0.03321 0.10321,-0.05764 0.01875,-0.02443 0.09498,-0.08983 0.169391,-0.145337 0.194156,-0.144837 0.214536,-0.162058 0.478569,-0.404414 0.251516,-0.230862 0.606848,-0.516232 1.227718,-0.98599 0.344093,-0.2603468 0.589539,-0.4332454 1.258562,-0.886573 0.133088,-0.09018 0.449157,-0.2640469 0.702374,-0.3863728 0.253216,-0.1223245 0.529451,-0.2557186 0.613857,-0.2964302 0.08441,-0.04071 0.158614,-0.085626 0.16491,-0.099811 0.0063,-0.014184 0.02548,-0.017112 0.04263,-0.00653 0.01716,0.010605 0.0312,0.00558 0.0312,-0.011156 0,-0.016741 0.02005,-0.030435 0.04455,-0.030435 0.0245,0 0.158784,-0.058252 0.298402,-0.129445 0.139619,-0.071195 0.430335,-0.1978034 0.646038,-0.2813523 0.215704,-0.083549 0.491939,-0.1954213 0.613858,-0.2486049 0.121921,-0.053185 0.306077,-0.1321049 0.40924,-0.1753788 0.103162,-0.043273 0.29828,-0.1359289 0.433601,-0.2058975 0.135324,-0.069969 0.361685,-0.1753594 0.503025,-0.2342005 0.141344,-0.058844 0.256987,-0.118339 0.256987,-0.1322199 0,-0.013882 0.01945,-0.02524 0.04319,-0.02524 0.02377,0 0.303834,-0.1227275 0.622385,-0.2727296 0.318551,-0.1500017 0.675102,-0.3078947 0.792333,-0.3508747 0.117228,-0.042978 0.213145,-0.092292 0.213145,-0.1095837 0,-0.017291 0.01918,-0.027759 0.04263,-0.02326 0.06969,0.013374 0.594379,-0.1884232 0.639435,-0.2459351 0.0094,-0.011971 0.04007,-0.021527 0.06821,-0.021238 0.121558,0.00127 0.660662,-0.1945862 0.918837,-0.3337747 0.241294,-0.1300895 0.587545,-0.3830342 0.701059,-0.5121391 0.01875,-0.021333 0.06131,-0.048999 0.09456,-0.061479 0.03325,-0.012481 0.07001,-0.047591 0.08169,-0.078024 0.02692,-0.070138 0.174568,-0.219039 0.217202,-0.219039 0.01774,0 0.05143,-0.030691 0.07486,-0.068207 0.02342,-0.037513 0.06448,-0.068206 0.09123,-0.068206 0.02675,0 0.03887,-0.00976 0.02696,-0.021682 -0.01192,-0.011924 0.05783,-0.09633 0.155007,-0.1875678 0.09718,-0.091238 0.161929,-0.1668596 0.143886,-0.168049 -0.01803,-0.00118 0.0028,-0.016405 0.04612,-0.033815 0.04747,-0.019039 0.06915,-0.047456 0.05441,-0.071314 -0.01348,-0.021822 -0.0098,-0.030553 0.0083,-0.019409 0.01801,0.011138 0.09144,-0.040204 0.163151,-0.1140923 0.0717,-0.073888 0.117738,-0.1343421 0.10229,-0.1343421 -0.01546,0 0.02072,-0.036015 0.08038,-0.080032 0.05967,-0.044017 0.09718,-0.091336 0.08336,-0.105152 -0.01383,-0.013815 -0.0095,-0.020006 0.0097,-0.013752 0.04939,0.01615 0.223702,-0.1274928 0.194271,-0.1600887 -0.01342,-0.014875 -0.0072,-0.017247 0.01376,-0.00527 0.06096,0.034779 0.607999,-0.4589859 0.563584,-0.5087016 -0.0121,-0.013544 -0.0039,-0.014234 0.01831,-0.00155 0.02248,0.012885 0.06394,-0.010665 0.09378,-0.053276 0.02942,-0.042001 0.05349,-0.064232 0.05349,-0.049403 0,0.035425 0.155483,-0.078134 0.314002,-0.2293306 0.06954,-0.066327 0.191209,-0.1634486 0.270384,-0.2158258 l 0.143933,-0.095226 -0.09461,-0.017052 c -0.09208,-0.016595 -0.08962,-0.020213 0.09234,-0.1351948 0.102836,-0.064979 0.180276,-0.1355869 0.172099,-0.1569075 -0.0082,-0.021322 0.03576,-0.063723 0.09766,-0.094226 l 0.112534,-0.055461 -0.110835,-7.738e-4 c -0.121681,-8.545e-4 -0.148951,-0.052289 -0.04518,-0.085223 0.03611,-0.011461 0.177308,-0.1287936 0.313783,-0.260741 0.136473,-0.1319475 0.294923,-0.2638643 0.352116,-0.2931487 0.05718,-0.029285 0.112307,-0.066044 0.122484,-0.081687 0.01017,-0.015643 0.08691,-0.0653452 0.170517,-0.1104495 0.08361,-0.0451035 0.148684,-0.0976873 0.144617,-0.11685267 -0.0041,-0.0191645 0.0331,-0.0450046 0.08257,-0.0574227 0.04948,-0.0124174 0.127764,-0.0523182 0.173974,-0.0886698 0.04622,-0.0363507 0.110775,-0.0660921 0.143466,-0.0660921 0.08441,0 0.311151,-0.09789 0.391757,-0.16912543 0.07224,-0.0638419 0.511584,-0.24011339 0.598463,-0.24011339 0.02826,0 0.08528,-0.0237481 0.126716,-0.0527741 0.137291,-0.09616158 0.661132,-0.14352007 1.525634,-0.1379271367 0.792642,0.005129127 0.827085,0.008206607 1.091305,0.0975625367 0.150053,0.050747 0.291903,0.09246343 0.315215,0.09270283 0.09396,9.6895e-4 0.976611,0.42511458 1.100071,0.52862744 0.02811,0.02359 0.159498,0.0947176 0.291932,0.15806233 0.235834,0.11281152 0.25372,0.12719829 0.25372,0.20412699 0,0.023291 0.03271,0.029587 0.08526,0.016402 0.05003,-0.012556 0.08526,-0.00673 0.08526,0.014086 0,0.019516 0.04219,0.054229 0.09378,0.077137 0.05158,0.022909 0.123537,0.06862 0.159895,0.1015785 0.03637,0.032959 0.08624,0.059926 0.110835,0.059926 0.02459,0 0.04471,0.012883 0.04471,0.028629 0,0.037801 0.156041,0.1077839 0.240323,0.1077839 0.03664,0 0.0666,0.015347 0.0666,0.034103 0,0.050098 0.102113,0.041678 0.103394,-0.00853 4.52e-4,-0.025512 0.01972,-0.01804 0.04753,0.018611 0.03352,0.044207 0.07116,0.055035 0.135327,0.038932 0.05776,-0.014496 0.08889,-0.00837 0.08889,0.017504 0,0.021897 0.01498,0.030556 0.0333,0.019242 0.0461,-0.028494 0.444224,0.057046 0.423279,0.090944 -0.0093,0.015101 0.01841,0.027008 0.06163,0.02646 0.09589,-0.00121 0.512136,0.096881 0.42817,0.100902 -0.03285,0.00157 -0.05968,0.016565 -0.05968,0.033318 0,0.03259 0.410853,0.1157062 0.437957,0.0886 0.0089,-0.00889 0.03294,-0.00257 0.0534,0.014024 0.06789,0.055028 0.736829,0.2457834 0.776319,0.2213777 0.02148,-0.013281 0.02951,-0.00894 0.01796,0.00974 -0.01146,0.018537 0.130919,0.1054296 0.316393,0.1930939 0.185473,0.087664 0.472547,0.2615323 0.637942,0.3863739 0.1654,0.1248417 0.319902,0.2270363 0.343352,0.2270984 0.02346,6.81e-5 0.03547,0.00725 0.02675,0.015975 -0.0087,0.00872 0.03686,0.077444 0.101278,0.1527108 0.06442,0.075267 0.110018,0.148369 0.101315,0.162449 -0.0087,0.014079 0.0071,0.034399 0.03515,0.045154 0.02802,0.010755 0.0512,8.546e-4 0.05148,-0.022004 4.51e-4,-0.032265 0.0064,-0.032371 0.02662,-4.693e-4 0.01435,0.022595 0.02243,0.1068802 0.01796,0.1872996 -0.0057,0.1024476 0.0013,0.1309839 0.024,0.09533 0.02653,-0.041988 0.03272,-0.038959 0.03537,0.017319 0.0018,0.037513 0.01096,0.049024 0.0204,0.025578 0.0094,-0.023446 0.02802,-0.042629 0.04119,-0.042629 0.03781,0 0.03799,0.1327189 0,0.1560674 -0.02003,0.012395 -0.01119,0.037667 0.0217,0.061689 0.03979,0.029097 0.04904,0.067036 0.03244,0.1331389 -0.01277,0.050846 -0.03781,0.092447 -0.05563,0.092447 -0.01783,0 -0.02058,-0.019183 -0.0061,-0.042629 0.01444,-0.023446 -0.01394,-0.016324 -0.06312,0.015829 -0.08648,0.056549 -0.219373,0.09752 -0.342779,0.1056776 -0.0328,0.00217 -0.05968,0.015832 -0.05968,0.030358 0,0.014528 -0.03452,0.026195 -0.07673,0.025926 -0.04219,-2.688e-4 -0.12277,0.00591 -0.17904,0.013737 -0.971882,0.1351175 -1.779858,0.2316536 -2.0803,0.2485518 -0.206324,0.011606 -0.393648,0.035672 -0.416267,0.053482 -0.02261,0.017814 -0.05578,0.023341 -0.07366,0.012286 -0.05845,-0.036117 -0.137867,0.016695 -0.115393,0.076729 0.01854,0.049502 0.01385,0.050803 -0.03628,0.010053 -0.03979,-0.032383 -0.05754,-0.034549 -0.05754,-0.00703 0,0.021875 -0.01918,0.037283 -0.04264,0.034238 -0.113695,-0.014764 -0.168405,0.00487 -0.149657,0.0537 0.02179,0.056803 -0.03027,0.070789 -0.06349,0.017051 -0.01159,-0.018757 -0.0547,-0.032889 -0.0958,-0.031409 -0.04111,0.00149 -0.0564,0.010143 -0.03402,0.019253 0.02238,0.00911 0.03199,0.039256 0.02134,0.066986 -0.01674,0.043659 -0.02757,0.043 -0.0805,-0.00493 -0.04614,-0.041755 -0.07725,-0.046733 -0.126687,-0.020273 -0.03605,0.019289 -0.100448,0.02594 -0.143132,0.014777 -0.06857,-0.017931 -0.07496,-0.010784 -0.05491,0.061432 0.02026,0.072941 0.01773,0.075587 -0.02355,0.024614 -0.043,-0.053101 -0.05392,-0.052267 -0.155229,0.011876 -0.05993,0.037942 -0.108954,0.096734 -0.108954,0.1306499 0,0.044877 -0.01859,0.056808 -0.0682,0.04383 -0.0459,-0.012002 -0.06821,-0.00104 -0.06821,0.033502 0,0.031463 -0.04526,0.059826 -0.11689,0.073265 -0.0945,0.017728 -0.121158,0.041367 -0.139184,0.1234405 -0.02175,0.099065 -0.131379,0.1912377 -0.208964,0.1757021 -0.0213,-0.00429 -0.04769,0.015535 -0.05861,0.044002 -0.01092,0.028466 -0.0342,0.051758 -0.05175,0.051758 -0.03502,0 -0.139325,0.089285 -0.496709,0.4251098 -0.130107,0.1222664 -0.264395,0.2311337 -0.298403,0.241927 -0.03401,0.010793 -0.0623,0.045447 -0.06289,0.077007 -6.73e-4,0.031562 -0.0658,0.1065697 -0.144939,0.1666874 -0.270923,0.2058155 -0.531097,0.4853767 -0.510157,0.5481845 0.0076,0.022891 -0.0026,0.041625 -0.02258,0.041625 -0.02005,0 -0.05384,0.069059 -0.0751,0.1534642 -0.02126,0.084405 -0.05168,0.153465 -0.06763,0.153465 -0.01593,0 -0.02014,0.023019 -0.0093,0.051153 0.0108,0.028133 0.0056,0.051153 -0.01149,0.051153 -0.01712,0 -0.03115,0.034533 -0.03119,0.076733 0,0.1328989 -0.05393,0.4006339 -0.07758,0.3860182 -0.02005,-0.012388 -0.02725,0.1344432 -0.04256,0.8672752 -0.002,0.1031621 -0.01694,0.1959073 -0.03288,0.2061001 -0.03087,0.019749 -0.0581,0.1355871 -0.06226,0.2648322 -0.0013,0.043314 -0.0177,0.069369 -0.03625,0.057909 -0.01933,-0.011951 -0.02505,0.00175 -0.0134,0.03209 0.01118,0.029109 0.0038,0.052929 -0.01638,0.052929 -0.02017,0 -0.02725,0.024567 -0.01573,0.054598 0.01151,0.030024 0.004,0.065088 -0.01676,0.077907 -0.02074,0.012818 -0.04479,0.099111 -0.05345,0.1917602 -0.0087,0.092648 -0.03066,0.1734248 -0.0489,0.1795037 -0.01824,0.00606 -0.02536,0.040824 -0.01584,0.077209 0.01077,0.041208 -0.0034,0.074092 -0.03753,0.087197 -0.03015,0.01157 -0.04634,0.03478 -0.03596,0.05157 0.01038,0.0168 0.005,0.03053 -0.01205,0.03053 -0.017,0 -0.03228,0.04742 -0.03393,0.105393 -0.0051,0.179718 -0.117438,0.644115 -0.15081,0.623489 -0.01741,-0.01076 -0.02813,0.0011 -0.02381,0.02649 0.0043,0.02533 -0.0024,0.08442 -0.01478,0.131309 -0.01244,0.04689 -0.02923,0.154317 -0.03733,0.238722 -0.03648,0.380211 -0.166541,0.813049 -0.262056,0.87208 -0.01658,0.01025 -0.03014,0.06376 -0.03014,0.118927 0,0.05516 -0.01494,0.100297 -0.03323,0.100297 -0.04322,0 -0.145532,0.197792 -0.122006,0.23586 0.01,0.01608 -0.0048,0.04821 -0.0327,0.07138 -0.02793,0.02318 -0.05078,0.06201 -0.05078,0.08628 0,0.02428 -0.01521,0.04926 -0.03381,0.05551 -0.01859,0.0063 -0.03965,0.06171 -0.0468,0.123232 -0.0071,0.06153 -0.03801,0.139504 -0.06858,0.173284 -0.03057,0.03378 -0.04532,0.07168 -0.03278,0.08423 0.01255,0.01254 0.0024,0.02281 -0.02266,0.02281 -0.02501,0 -0.03585,0.0096 -0.0241,0.02137 0.0306,0.0306 -0.07344,0.220798 -0.170284,0.311282 -0.04526,0.04228 -0.07383,0.09055 -0.06351,0.107262 0.01033,0.01671 -0.0042,0.03918 -0.03219,0.04993 -0.02803,0.01075 -0.05096,0.05164 -0.05096,0.09084 0,0.03921 -0.01459,0.06228 -0.03239,0.05127 -0.03561,-0.022 -0.113081,0.09788 -0.08282,0.128147 0.01035,0.01034 -0.02074,0.04474 -0.06911,0.07642 -0.04835,0.03169 -0.08004,0.07036 -0.0704,0.08595 0.01898,0.03069 -0.114371,0.168819 -0.162961,0.168819 -0.01633,0 -0.02025,0.01524 -0.0088,0.03387 0.01151,0.01863 -0.03329,0.0897 -0.09956,0.157928 -0.06627,0.06823 -0.110938,0.139503 -0.09927,0.158378 0.01168,0.01887 -0.01552,0.06424 -0.06042,0.100806 -0.0449,0.03656 -0.05862,0.05631 -0.03048,0.04387 0.02814,-0.01243 0.01662,0.0079 -0.02558,0.04514 -0.0422,0.03726 -0.07673,0.08078 -0.07673,0.09671 0,0.01593 -0.03129,0.0485 -0.06953,0.07238 -0.03825,0.02388 -0.06135,0.05666 -0.05135,0.07284 0.01,0.01618 -0.0057,0.03859 -0.03494,0.0498 -0.02921,0.01121 -0.04333,0.03622 -0.03137,0.05557 0.01196,0.01935 0.0028,0.03097 -0.02039,0.02582 -0.02317,-0.0052 -0.05348,0.02899 -0.06734,0.07589 -0.01387,0.04689 -0.02673,0.07265 -0.0286,0.05724 -0.0047,-0.0388 -0.105707,0.06596 -0.105707,0.109636 0,0.01944 -0.03113,0.05199 -0.06916,0.07235 -0.03805,0.02035 -0.06111,0.05004 -0.05127,0.06597 0.0099,0.01593 -0.03193,0.07271 -0.09283,0.126176 -0.0609,0.05347 -0.118399,0.112566 -0.127777,0.131323 -0.0094,0.01876 -0.0255,0.03129 -0.03584,0.02784 -0.01033,-0.0034 -0.03831,0.02502 -0.0622,0.06325 -0.03566,0.0571 -0.03535,0.06485 0.0018,0.0434 0.05754,-0.03329 -0.100394,0.1488 -0.202424,0.233387 -0.04238,0.03514 -0.06834,0.078 -0.05767,0.09525 0.01067,0.01725 -0.0028,0.03137 -0.02973,0.03137 -0.05121,0 -0.198718,0.175689 -0.238939,0.28459 -0.01279,0.0346 -0.05386,0.07092 -0.09128,0.08071 -0.03742,0.0098 -0.06803,0.03258 -0.06803,0.05064 0,0.01807 -0.09548,0.127541 -0.212171,0.243271 -0.116693,0.115729 -0.208771,0.221926 -0.204617,0.235994 0.0042,0.01407 -0.0136,0.02558 -0.03946,0.02558 -0.0419,0 -0.36223,0.342153 -0.36223,0.386912 0,0.01812 -0.168333,0.207786 -0.434598,0.489667 -0.0797,0.08438 -0.134927,0.169585 -0.122716,0.189342 0.01221,0.01976 0.0063,0.02606 -0.01324,0.01401 -0.01949,-0.01205 -0.148957,0.09803 -0.287676,0.244627 -0.138717,0.146595 -0.276317,0.280693 -0.305775,0.297993 -0.113761,0.06682 -0.575254,0.510672 -0.575254,0.553274 0,0.0247 -0.01457,0.0359 -0.03239,0.0249 -0.01781,-0.01102 -0.04944,0.01184 -0.07028,0.05078 -0.02084,0.03893 -0.07624,0.08538 -0.123127,0.103201 -0.04688,0.01782 -0.07681,0.04604 -0.06651,0.06271 0.01031,0.01667 0,0.04609 -0.02352,0.06537 -0.04179,0.03468 -0.06108,0.04086 -0.127513,0.04086 -0.01875,0 -0.03027,0.01782 -0.02558,0.03961 0.0047,0.02178 -0.02216,0.04864 -0.05968,0.05968 -0.09596,0.02823 -0.460392,0.278998 -0.460392,0.316789 0,0.01721 -0.01255,0.02353 -0.02789,0.01405 -0.01535,-0.0095 -0.06906,0.02093 -0.119362,0.06757 -0.05031,0.04665 -0.09193,0.07268 -0.09251,0.05785 -6.72e-4,-0.01482 -0.01667,-6.8e-5 -0.0358,0.03272 -0.01911,0.03282 -0.06469,0.05968 -0.101275,0.05968 -0.03659,0 -0.09465,0.02686 -0.129032,0.05968 -0.03439,0.03282 -0.08427,0.06436 -0.110835,0.07008 -0.02657,0.0057 -0.06461,0.03156 -0.08453,0.05742 -0.01992,0.02586 -0.07746,0.05738 -0.127885,0.07003 -0.05042,0.01265 -0.09168,0.03925 -0.09168,0.0591 0,0.01985 -0.0097,0.02636 -0.02162,0.01447 -0.04327,-0.04327 -0.532043,0.244878 -0.72163,0.425432 -0.107024,0.101924 -0.294339,0.269485 -0.416257,0.372357 -0.351072,0.296226 -0.477445,0.419441 -0.477445,0.465526 0,0.02358 -0.01248,0.03903 -0.02774,0.03434 -0.03696,-0.01136 -0.401163,0.357536 -0.389174,0.394188 0.0052,0.01575 -0.0044,0.02012 -0.0213,0.0097 -0.01687,-0.01042 -0.120842,0.08723 -0.231043,0.217028 -0.110194,0.129794 -0.21571,0.237324 -0.234468,0.238955 -0.01875,0.0015 -0.139775,0.102333 -0.268924,0.223779 -0.129156,0.121446 -0.242179,0.220809 -0.251161,0.220809 -0.02537,0 -0.405851,0.275683 -0.572008,0.414454 -0.08205,0.06852 -0.314931,0.239897 -0.51753,0.380842 -0.387603,0.269655 -0.569368,0.44102 -0.766137,0.7223 -0.153643,0.219636 -0.36955,0.618807 -0.36955,0.683236 0,0.02749 -0.01176,0.04998 -0.02616,0.04998 -0.03167,0 -0.156417,0.321733 -0.224782,0.579755 -0.02733,0.103161 -0.05974,0.38707 -0.07201,0.63091 -0.01228,0.243838 -0.0367,0.457921 -0.0543,0.47574 -0.01759,0.01781 -0.03199,0.148686 -0.03199,0.290814 0,0.176685 -0.01649,0.281962 -0.05214,0.332861 -0.06265,0.08945 -0.03628,0.229636 0.05526,0.293757 0.03494,0.02447 0.273134,0.242804 0.529317,0.485172 0.256175,0.242373 0.479046,0.445791 0.495268,0.452042 0.01622,0.0063 0.02949,0.03311 0.02949,0.05968 0,0.02657 0.01297,0.04831 0.02881,0.04831 0.01584,0 0.103231,0.07579 0.194197,0.168432 0.09096,0.09264 0.17544,0.16222 0.187725,0.154627 0.01228,-0.0076 0.05524,0.02404 0.09546,0.07029 0.04022,0.04625 0.08856,0.0841 0.107445,0.0841 0.01889,0 0.03433,0.02302 0.03433,0.05115 0,0.02814 0.02393,0.05115 0.05316,0.05115 0.02924,0 0.04403,0.01481 0.03285,0.03288 -0.01118,0.01808 0.0378,0.07056 0.108823,0.116611 0.146636,0.09507 0.410528,0.327953 0.371622,0.327953 -0.01411,0 -0.0027,0.02302 0.02548,0.05115 0.02813,0.02814 0.07527,0.05115 0.104743,0.05115 0.02948,0 0.04976,0.01918 0.04506,0.04263 -0.0047,0.02344 0.01067,0.03879 0.0341,0.0341 0.02345,-0.0047 0.03879,0.01066 0.0341,0.0341 -0.0047,0.02344 0.01067,0.03879 0.03411,0.0341 0.02345,-0.0047 0.04263,0.0068 0.04263,0.02558 0,0.01875 0.01151,0.03167 0.02558,0.02869 0.01407,-0.003 0.05372,0.0068 0.08812,0.0218 0.04921,0.02142 0.05285,0.03336 0.01705,0.05605 -0.03107,0.0197 -0.01515,0.029 0.05031,0.02936 0.05269,4.48e-4 0.08814,0.01291 0.07878,0.02806 -0.0094,0.01515 0.01658,0.05262 0.05767,0.08326 0.211981,0.158129 0.321478,0.232868 0.398667,0.272128 0.115603,0.05878 0.204537,0.136366 0.205017,0.178823 6.73e-4,0.01926 0.06544,0.06496 0.144938,0.101519 0.141447,0.06505 0.340091,0.238163 0.308982,0.269278 -0.02718,0.02718 0.06833,0.153699 0.127777,0.169241 0.06948,0.01817 0.188265,0.276674 0.320871,0.69827 0.08404,0.267179 0.118475,0.330863 0.220688,0.408197 0.06662,0.0504 0.147197,0.124217 0.17907,0.164057 0.09286,0.116054 0.407185,0.314295 0.561941,0.354407 0.212211,0.05501 0.317944,0.197997 0.317944,0.42998 0,0.177064 0.0046,0.186422 0.114315,0.232258 0.06286,0.02626 0.181802,0.05857 0.2643,0.07179 0.08249,0.01322 0.264143,0.05332 0.403658,0.08911 0.139516,0.0358 0.327111,0.06508 0.416878,0.06508 0.191088,0 0.623427,0.160645 0.804959,0.299105 0.06647,0.0507 0.148841,0.153773 0.183033,0.229045 0.08345,0.183693 0.08156,0.232392 -0.0079,0.203999 -0.0628,-0.01994 -0.06843,-0.01289 -0.04589,0.05738 0.06069,0.189278 0.08178,0.333911 0.08254,0.566071 l 8.75e-4,0.247251 -0.10231,0 c -0.141004,0 -0.224605,-0.0965 -0.270173,-0.311862 -0.02207,-0.104268 -0.09225,-0.260923 -0.163567,-0.365089 -0.119313,-0.174261 -0.130354,-0.181565 -0.24619,-0.162767 -0.149842,0.02432 -0.206755,0.09784 -0.206755,0.267096 l 0,0.130514 -0.144938,-0.0091 c -0.128781,-0.0081 -0.143506,-0.0015 -0.132061,0.05907 0.02757,0.146015 0.01951,0.403542 -0.01289,0.41185 -0.01875,0.0048 -0.05329,0.0011 -0.07673,-0.0083 z m -4.19369,-3.988246 c 0.03255,-0.03255 -0.11857,-0.219098 -0.220265,-0.271924 -0.05026,-0.0261 -0.100619,-0.07448 -0.111934,-0.107508 -0.01132,-0.03303 -0.08846,-0.113161 -0.171444,-0.178065 -0.08298,-0.06491 -0.144604,-0.124279 -0.136937,-0.131946 0.01826,-0.01826 -0.252842,-0.244541 -0.292968,-0.244541 -0.01698,0 -0.03088,-0.02302 -0.03088,-0.05116 0,-0.02813 -0.01918,-0.04732 -0.04263,-0.04263 -0.02345,0.0047 -0.03879,-0.01067 -0.03411,-0.0341 0.0047,-0.02344 -0.0145,-0.04263 -0.04263,-0.04263 -0.02814,0 -0.05115,-0.02165 -0.05115,-0.04811 0,-0.02646 -0.09552,-0.13005 -0.212251,-0.230198 -0.116736,-0.100146 -0.253339,-0.224289 -0.30356,-0.27587 -0.05022,-0.05158 -0.09883,-0.09379 -0.108026,-0.09379 -0.0092,0 -0.09926,-0.08057 -0.200152,-0.17904 -0.186476,-0.182007 -0.359788,-0.332507 -0.382912,-0.332507 -0.007,0 -0.08682,-0.06799 -0.177335,-0.151102 -0.09051,-0.08311 -0.17673,-0.143589 -0.191592,-0.1344 -0.01486,0.0092 -0.02702,0.0024 -0.02702,-0.01528 0,-0.04201 -0.511787,-0.42675 -0.567681,-0.42675 -0.02375,0 -0.03553,-0.01237 -0.02619,-0.02747 0.02194,-0.03549 -0.281469,-0.225376 -0.403641,-0.252609 -0.05158,-0.01149 -0.09378,-0.03557 -0.09378,-0.05349 0,-0.019 -0.02956,-0.01678 -0.07091,0.0054 -0.06793,0.03636 -0.064,0.04498 0.09378,0.205769 0.09058,0.0923 0.183871,0.167842 0.207322,0.167869 0.02344,2.7e-5 0.04263,0.01302 0.04263,0.02885 0,0.01584 0.117144,0.14245 0.26033,0.281352 0.143178,0.138902 0.292804,0.289504 0.332507,0.334665 0.125042,0.142265 0.487691,0.495555 0.560957,0.546484 0.03864,0.02686 0.06096,0.06523 0.04957,0.08526 -0.01138,0.02003 -0.0087,0.02557 0.0061,0.0123 0.0147,-0.01326 0.07471,0.01169 0.133356,0.05543 0.05864,0.04375 0.165259,0.106726 0.236917,0.139967 0.0936,0.04341 0.117608,0.06848 0.08526,0.08899 -0.03381,0.02144 -0.02966,0.02869 0.01667,0.02908 0.03393,4.48e-4 0.05331,0.01409 0.04306,0.03066 -0.01667,0.02698 0.14951,0.115529 0.236282,0.125904 0.01875,0.0023 0.05419,0.0064 0.07875,0.0093 0.02455,0.0029 0.03515,0.02054 0.02356,0.0393 -0.01161,0.01875 0.0036,0.0341 0.0339,0.0341 0.03023,0 0.111436,0.03837 0.180445,0.08526 0.06901,0.04689 0.10272,0.08549 0.07492,0.08578 -0.04424,6.72e-4 -0.04417,0.0046 6.73e-4,0.03333 0.02814,0.01803 0.0764,0.02496 0.107242,0.01537 0.05882,-0.01828 0.141637,0.04693 0.20138,0.15856 0.01945,0.03632 0.09688,0.104889 0.17209,0.152367 0.10982,0.06933 0.132322,0.100292 0.114247,0.157236 -0.01432,0.04508 -0.0096,0.06294 0.01288,0.04903 0.01947,-0.01203 0.04436,-0.0074 0.05532,0.01035 0.01095,0.01772 -0.01483,0.0389 -0.05733,0.04706 -0.06684,0.01286 -0.06461,0.01548 0.01656,0.01949 0.07775,0.0038 0.09378,0.02023 0.09378,0.09574 0,0.149781 0.08859,0.215831 0.289483,0.215831 0.09713,0 0.186006,-0.0094 0.197504,-0.02091 z m -3.916702,-3.351519 c 0.01031,-0.01667 -0.03866,-0.07277 -0.108823,-0.124668 -0.162544,-0.12024 -0.245198,-0.220673 -0.246159,-0.299097 -0.0011,-0.08664 -0.139045,-0.398508 -0.176318,-0.398508 -0.01692,0 -0.04534,-0.03837 -0.06316,-0.08526 -0.01784,-0.04689 -0.04766,-0.08526 -0.06629,-0.08526 -0.01864,0 -0.02504,-0.02302 -0.01425,-0.05115 0.0108,-0.02813 0.0057,-0.05115 -0.01129,-0.05115 -0.04968,0 -0.120395,0.399496 -0.08306,0.469258 0.01779,0.03321 0.143661,0.159902 0.279747,0.281536 0.13608,0.121632 0.279425,0.254059 0.318537,0.294281 0.07702,0.0792 0.141411,0.09803 0.17108,0.05003 z m -0.771004,-2.50443 c -0.0043,-0.02202 0.0183,-0.08917 0.05025,-0.149197 0.03194,-0.06003 0.05808,-0.149179 0.05808,-0.198109 0,-0.05436 0.01416,-0.08021 0.0364,-0.06647 0.03025,0.01869 0.09496,-0.116002 0.0709,-0.147575 -0.004,-0.0054 0.01613,-0.03331 0.04495,-0.06211 0.02881,-0.02881 0.05237,-0.08874 0.05237,-0.133183 0,-0.04445 0.01414,-0.08955 0.03142,-0.100225 0.01728,-0.01069 0.05839,-0.09215 0.09136,-0.181054 0.03297,-0.08891 0.08744,-0.201739 0.12104,-0.250748 0.0336,-0.04901 0.05132,-0.09889 0.03937,-0.110837 -0.01194,-0.01194 -0.0038,-0.02173 0.01806,-0.02173 0.02189,0 0.03955,-0.02686 0.03927,-0.05968 -6.73e-4,-0.05155 -0.0055,-0.05271 -0.03706,-0.0085 -0.03005,0.04207 -0.03367,0.03904 -0.02039,-0.01705 0.0089,-0.03751 0.02822,-0.09773 0.04298,-0.13381 0.02151,-0.05253 0.01548,-0.06124 -0.03023,-0.0437 -0.07092,0.02721 -0.07416,-0.02222 -0.0059,-0.09045 0.02814,-0.02813 0.05065,-0.07911 0.05002,-0.113272 -8.75e-4,-0.05383 -0.01019,-0.05124 -0.06906,0.01945 -0.03736,0.04486 -0.07781,0.07168 -0.08988,0.0596 -0.01208,-0.01207 -0.05363,0.0049 -0.09234,0.0378 -0.06688,0.05679 -0.06809,0.05679 -0.02417,0 0.02827,-0.0365 0.03201,-0.05968 0.0096,-0.05968 -0.02012,0 -0.04886,0.01918 -0.06386,0.04263 -0.01501,0.02344 -0.057,0.06565 -0.09334,0.09379 -0.06006,0.0465 -0.06403,0.04573 -0.0437,-0.0085 0.0123,-0.03282 0.0081,-0.05969 -0.0093,-0.05969 -0.01746,0 -0.04841,0.06522 -0.06882,0.144939 -0.02042,0.07972 -0.04562,0.167959 -0.05602,0.196096 -0.04849,0.131129 -0.111834,0.499144 -0.09503,0.552109 0.01033,0.03255 0.0018,0.09092 -0.01898,0.129723 -0.04485,0.08379 -0.0079,0.827525 0.03967,0.798134 0.01662,-0.01026 0.02669,-0.0367 0.02239,-0.05873 z m 0.415265,-1.487433 c 0,-0.01986 0.01535,-0.03611 0.0341,-0.03611 0.01875,0 0.03411,0.0068 0.03411,0.01503 0,0.0083 -0.01535,0.02453 -0.03411,0.03611 -0.01875,0.01158 -0.0341,0.0048 -0.0341,-0.01503 z m 0.06821,-0.102309 c 0,-0.01985 0.01535,-0.03611 0.0341,-0.03611 0.01875,0 0.0341,0.0068 0.0341,0.01503 0,0.0083 -0.01535,0.02452 -0.0341,0.03611 -0.01875,0.01158 -0.0341,0.0048 -0.0341,-0.01503 z M 50.350048,2.911456 c -0.04024,-0.04024 -0.0851,-0.060404 -0.09969,-0.044811 -0.01458,0.015594 -0.0073,0.035235 0.01633,0.043647 0.02355,0.00841 0.03614,0.026146 0.02793,0.039407 -0.0082,0.013261 0.01737,0.026543 0.05685,0.029515 l 0.07175,0.0054 -0.07316,-0.073163 z M 28.551232,31.653751 c 0,-0.0083 0.01534,-0.02453 0.0341,-0.03611 0.01875,-0.01158 0.0341,-0.0048 0.0341,0.01503 0,0.01987 -0.01534,0.03611 -0.0341,0.03611 -0.01875,0 -0.0341,-0.0067 -0.0341,-0.01503 z M 47.469354,1.6014697 c 0.0231,-0.00934 0.06912,-0.00991 0.102307,-0.00127 0.03317,0.00865 0.01431,0.016289 -0.04196,0.016985 -0.05627,6.93e-4 -0.08342,-0.00638 -0.06032,-0.015721 z"
+     style="fill:#dddddd" />
+</svg>
diff --git a/CrowEditBase/icons/exclamation.svg b/CrowEditBase/icons/exclamation.svg
new file mode 100644 (file)
index 0000000..cc1b268
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#dddddd" d="M8 1c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7zM8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8v0z"></path>
+<path fill="#dddddd" d="M7 3h2v7h-2v-7z"></path>
+<path fill="#dddddd" d="M7 11h2v2h-2v-2z"></path>
+</svg>
diff --git a/CrowEditBase/icons/presentation.svg b/CrowEditBase/icons/presentation.svg
new file mode 100644 (file)
index 0000000..c79f5a4
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#dddddd" d="M16 1h-7v-1h-2v1h-7v11h5l-2 4h2.2l2-4h1.5l2 4h2.3l-2-4h5v-11zM15 11h-14v-9h14v9z"></path>
+<path fill="#dddddd" d="M6 4v5l4-2.5z"></path>
+</svg>
index 7d8f1cc8d6974edf6405dcf8bf84217ec29248b6..3f042a7d31e3e7e9baaffc3be03a7234b0cb738b 100644 (file)
@@ -23,17 +23,20 @@ namespace CrowEditBase
                protected Service () {
                        Name = this.GetType().Name;
                        log = CrowEditBase.App.MainLog;
+                       initCommands();
+                       //ensureConfigWinDataSource();
+                       Log(LogType.Low, $"[{Name}] Service Instanciated");
+               }
+               public Command CMDStart, CMDStop, CMDPause, CMDOpenConfig;
+               public CommandGroup Commands;
+               void initCommands() {
                        CMDStart = new ActionCommand ("Start", Start, "#icons.play-button.svg", true);
                        CMDStop = new ActionCommand ("Stop", Stop, "#icons.stop.svg", false);
                        CMDPause = new ActionCommand ("Pause", Pause, "#icons.pause-symbol.svg", false);
                        CMDOpenConfig = new ActionCommand ("Service configuration",
-                               () => CrowEditBase.App.LoadWindow (ConfigurationWindowPath, this), "#icons.cogwheel.svg", true);
+                               () => CrowEditBase.App.LoadWindow (ServiceWindowsPath[0], this), "#icons.cogwheel.svg", true);
                        Commands = new CommandGroup (CMDStart, CMDPause, CMDStop, CMDOpenConfig);
-                       ensureConfigWinDataSource();
-                       Log(LogType.Low, $"[{Name}] Service Instanciated");
                }
-               public Command CMDStart, CMDStop, CMDPause, CMDOpenConfig;
-               public CommandGroup Commands;
                Status currentState;
                public Status CurrentState {
                        get => currentState;
@@ -55,15 +58,16 @@ namespace CrowEditBase
                        CMDStop.CanExecute = IsRunning || CurrentState == Status.Paused;
                        Log(LogType.High, $"[{Name}] Status: {previousState} -> {newState}");
                }
-               protected void ensureConfigWinDataSource() {
-                       if (CrowEditBase.App.TryGetWindow (ConfigurationWindowPath, out Window win))
+               /*protected void ensureConfigWinDataSource() {
+                       if (CrowEditBase.App.TryGetWindow (ServiceWindowsPath[0], out Window win))
                                win.DataSource = this;
-               }
+               }*/
                public readonly string Name;
                public abstract void Start ();
                public abstract void Stop ();
                public abstract void Pause ();
-               public virtual string ConfigurationWindowPath => "#ui.winServiceConfig.crow";
+               //windows having this service as datasource
+               public virtual string[] ServiceWindowsPath => ["#ui.winServiceConfig.crow"];
 
                public virtual Document OpenDocument (string fullPath) => null;
        }
index ed51e457e3c3fda5decd69b859ee674f6bf1c0dc..8775135375cdbcf2dddd376e6c6236d2fb32b87e 100644 (file)
@@ -4,13 +4,13 @@
 
 using System;
 using Glfw;
+using Crow;
 using Crow.Text;
 using Drawing2D;
 using System.Collections;
 using static CrowEditBase.CrowEditBase;
 using System.Collections.Generic;
 using System.Linq;
-using Crow;
 using System.Text.Unicode;
 using System.Text;
 
@@ -97,7 +97,7 @@ namespace CrowEditBase
                                                                        <ListItem Height='Fit' Margin='2' Focusable='false' HorizontalAlignment='Left' Width='Stretched'
                                                                                                                                        Selected = '{Background=${ControlHighlight}}'
                                                                                                                                        Unselected = '{Background=Transparent}'>
-                                                                               <HorizontalStack Width='Stretched' >
+                                                                               <HorizontalStack Width='Stretched' Spacing='6'>
                                                                                        <Image Path='{Icon}' Width='12' Height='12'/>
                                                                                        <Label Text='{Caption}' HorizontalAlignment='Left' Width='Stretched'/>
                                                                                </HorizontalStack>
index 645c1dcd7a31790eb93e075699e8e4f97ecccdb4..de6309251c48864555a61a2307efcf03155c2259 100644 (file)
@@ -28,20 +28,4 @@ namespace CrowEditBase
                        MemberInfo = memberInfo;
                }
        }
-       public class WidgetSuggestion : Suggestion {
-               public Type Type;
-        public override string Icon => $"#icons.{Type.FullName}.svg";
-        public WidgetSuggestion(Type type, TextChange change = default, int finalPositionOffset = 0)
-                       : base(type.Name, change, finalPositionOffset) {
-                       Type = type;
-               }
-       }
-       public class ColorSuggestion : Suggestion {
-               public Fill Fill;
-        public override string Icon => $"#icons.fill.svg";
-        public ColorSuggestion(Fill fill, TextChange change = default, int finalPositionOffset = 0)
-                       : base(fill.ToString(), change, finalPositionOffset) {
-                       Fill = fill;
-               }
-       }
 }
\ No newline at end of file
diff --git a/CrowEditBase/src/TextBuffer.cs b/CrowEditBase/src/TextBuffer.cs
deleted file mode 100644 (file)
index 4d6981e..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2021-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
-
-using System;
-using System.Linq;
-using System.Collections.Generic;
-using Crow.Text;
-
-namespace CrowEditBase
-{
-       public class TextBuffer {
-               static int bufferExpension = 100;
-               int length;
-               Memory<char> buffer;
-               ReadOnlyMemory<char> origBuffer;
-               LineCollection lines;
-               public bool mixedLineBreak = false;
-               public string lineBreak = null;
-
-               internal LineCollection GetLineListCopy() => new LineCollection(lines.ToArray());
-               public Span<char> Span => buffer.Span.Slice(0, length);
-               public ReadOnlySpan<char> ReadOnlySpan => buffer.Span.Slice(0, length);
-               public bool IsEmpty => length == 0;
-               public bool IsDirty => !origBuffer.Span.Equals(Span, StringComparison.Ordinal);
-               public int LinesCount => lines.Count;
-               public int Length => length;
-               public ReadOnlyMemory<char> ReadOnlyCopy {
-                       get {
-                               return ReadOnlySpan.ToArray();
-                       }
-               } 
-               public void ResetDirtyState () {
-                       origBuffer = Span.ToArray();
-               }
-               public TextBuffer(ReadOnlySpan<char> origText) {
-                       length = origText.Length;
-                       buffer = new char[length + bufferExpension];
-                       origText.CopyTo(buffer.Span);
-                       lines = new LineCollection (10);
-                       if (IsEmpty)
-                               lines.Add (new TextLine (0, 0, 0));
-                       else
-                               lines.Update (Span);
-                       ResetDirtyState ();
-               }
-               public void Update (TextChange change) {
-                       ReadOnlySpan<char> orig = buffer.Span;
-                       char[] newBuff = null;
-                       Span<char> tmp;
-                       if (buffer.Length < length + change.CharDiff) {
-                               newBuff = new char[length + change.CharDiff + bufferExpension];
-                               tmp = newBuff;
-                               orig.Slice(0, change.Start).CopyTo(tmp);
-                               if (change.CharDiff == 0)
-                                       orig.Slice(change.End, length - change.End).CopyTo(tmp.Slice(change.End));
-                       } else
-                               tmp = buffer.Span;
-                       
-                       if (change.CharDiff != 0)
-                               orig.Slice(change.End, length - change.End).CopyTo(tmp.Slice(change.End2));
-                       if (!string.IsNullOrEmpty (change.ChangedText))
-                               change.ChangedText.AsSpan ().CopyTo (tmp.Slice (change.Start));
-                       
-                       if (newBuff != null)
-                               buffer = newBuff;
-                       length += change.CharDiff;
-
-                       lines.Update (change);
-               }
-               public string GetLineBreak () {
-                       if (string.IsNullOrEmpty (lineBreak)) {
-                               mixedLineBreak = false;
-
-                               if (lines.Count == 0 || lines[0].LineBreakLength == 0)
-                                       lineBreak = Environment.NewLine;
-                               else {
-                                       lineBreak = ReadOnlySpan.GetLineBreak (lines[0]).ToString ();
-                                       for (int i = 1; i < lines.Count; i++) {
-                                               if (!ReadOnlySpan.GetLineBreak (lines[i]).SequenceEqual (lineBreak)) {
-                                                       mixedLineBreak = true;
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-                       return lineBreak;
-               }
-               public CharLocation GetLocation (int absolutePosition) => lines.GetLocation (absolutePosition);
-               public TextLine GetLine (int index) => lines[index];
-               public void SetLine (int index, TextLine line) => lines[index] = line;
-               public ReadOnlySpan<char> GetText (TextLine line) => GetText(line.Span);
-               public ReadOnlySpan<char> GetText (TextSpan textSpan) => buffer.Span.Slice(textSpan.Start, textSpan.Length);
-               public int GetAbsolutePosition (CharLocation loc) => lines.GetAbsolutePosition (loc);
-               public CharLocation EndLocation => new CharLocation (lines.Count - 1, lines[lines.Count - 1].Length);
-        public override string ToString() => ReadOnlySpan.ToString();
-    }
-}
\ No newline at end of file
index d220f1a75c332af6661c43a41b45a39aab4f2f2f..3a3e2c618aad6c93716a08b5b3f01444106fd40d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <Button Command="{}" Width="Stretched" BubbleEvents="All">
        <Template>
-               <HorizontalStack Background="{./Background}" Width="Stretched" Height="Stretched" Margin="3" Spacing="2"
+               <HorizontalStack Background="{./Background}" Width="Stretched" Height="Stretched" Margin="3" Spacing="6"
                                                MouseEnter="{Background=${ControlHighlight}}"
                                                MouseLeave="{Background=Transparent}">
                        <Image Style="MenuIcon" Picture="{./Icon}" />
index 85d42cd1109496cc72fbdfe6ab908d6236806d41..8dfb33019767da57fd20804e8c60d2b18b20fc90 100644 (file)
@@ -5,8 +5,8 @@
                        MouseEnter="{Background=${ControlHighlight}}"
                        MouseLeave="{Background=Transparent}">
                <Template>
-                       <HorizontalStack Background="{./Background}" Width="Stretched" Height="Fit" Margin="3">
-                               <Image Style="MenuIcon" Picture="{./Icon}"/>
+                       <HorizontalStack Background="{./Background}" Width="Stretched" Height="Fit" Margin="3" Spacing="6">
+                               <Image Style="MenuIcon" Picture="{Icon}"/>
                                <Label Text="{./Caption}" Height="Fit"/>
                                <Label Text="..." Width="Fit"/>
                        </HorizontalStack>
index 8a67d5201a4de5d453c4f3872a19d4538c8bbfcd..ec9ddfd80601e18dfcec5116b643b3f9d0159dc3 100644 (file)
@@ -1,2 +1,2 @@
-MainService=Crow.CrowService
+MainService=CECrowPlugin.CrowService
 FileAssociations = CECrowPlugin.ImlDocument:.crow,.iml,.itmp,.template,.tmp:#ui.sourceEditor.itmp;CECrowPlugin.Style.StyleDocument:.style:#ui.sourceEditor.itmp
index 1b62aa3b6daf15853ac98c50be8a403c458ea886..e7c1eb82ebc36451cbb1eae957e6ee2ff0b867d4 100644 (file)
@@ -12,22 +12,37 @@ using Crow.DebugLogger;
 using System.Linq;
 using CrowEditBase;
 using static CrowEditBase.CrowEditBase;
+
+using static CECrowPlugin.ForeignWidgetContainer;
+
 using Drawing2D;
 using System.Diagnostics;
+using Crow;
 
-namespace Crow
+namespace CECrowPlugin
 {
-       public class ForeignWidgetContainer {
-               Type type;
-               object instance;
-
-       }
        public class CrowService : Service {
                public CrowService () : base () {
                        restoreCrowAssemblies ();
                        initCommands ();
+                       App.ValueChanged += app_ValueChanged;
+               }
+               ~CrowService() {
+                       App.ValueChanged -= app_ValueChanged;
                }
-               public override string ConfigurationWindowPath => "#CECrowPlugin.ui.winConfiguration.crow";
+               void app_ValueChanged(object instance, ValueChangeEventArgs e) {
+                       if (e.MemberName == "CurrentProject") {
+                               if (e.NewValue is CERoslynPlugin.SolutionProject sol)
+                                       CurrentSolution = sol;
+                               else
+                                       CurrentSolution = null;
+                       }
+               }               
+               public override string[] ServiceWindowsPath => [
+                       "#CECrowPlugin.ui.winConfiguration.crow",
+                       "#CECrowPlugin.ui.winGraphicTree.crow",
+                       "#CECrowPlugin.ui.winProperties.crow"
+               ];
 
                #region Commands
                public Command CMDStartRecording, CMDStopRecording, CMDRefresh;
@@ -57,10 +72,14 @@ namespace Crow
                        }
                );
                public ActionCommand CMDOptions_RemoveCrowAssembly;
-               public ActionCommand CMDViewPreview;
+               public ActionCommand CMDViewPreview, CMDViewGraphicTree, CMDViewProperties;
+               public CommandGroup ViewCommands;
                void initCommands ()
                {
-                       CMDViewPreview = new ActionCommand("Crow Preview", () => App.LoadWindow ("#CECrowPlugin.ui.winCrowPreview.crow", App));
+                       CMDViewPreview = new ActionCommand("Preview", () => App.LoadWindow ("#CECrowPlugin.ui.winCrowPreview.crow", App), "#icons.presentation.svg");
+                       CMDViewGraphicTree = new ActionCommand("Graphic Tree", () => App.LoadWindow (ServiceWindowsPath[1], this), "#icons.Crow.TreeView.svg");
+                       CMDViewProperties = new ActionCommand("Widget Properties", () => App.LoadWindow (ServiceWindowsPath[2], this), "#icons.property.svg");
+                       ViewCommands = new CommandGroup("C.R.O.W.", "#icons.crow.svg" ,CMDViewPreview, CMDViewGraphicTree, CMDViewProperties);
 
                        CMDRefresh = new ActionCommand ("Refresh", refresh, "#icons.refresh.svg", IsRunning);
                        CMDStartRecording = new ActionCommand ("Start Recording", () => Recording = true, "#icons.circle.svg", false);
@@ -79,11 +98,13 @@ namespace Crow
                #endregion
 
                public void LoadIML (string imlSource) {
-                       if (CurrentState == Status.Running)
+                       if (CurrentState == Status.Running) {
+                               fiITor_NextInstantiatorID?.SetValue (null, 0);
                                delSetSource (imlSource);
+                       }
                }
                
-               Project activeSolution;
+               Project currentSolution;
                Exception currentException;
                public string ErrorMessage = "";
                public bool ServiceIsInError;
@@ -91,6 +112,28 @@ namespace Crow
                AssemblyLoadContext crowLoadCtx;
                Assembly crowAssembly, thisAssembly;
                Type dbgIfaceType;
+               IList<ForeignWidgetContainer> graphicTree;
+               ForeignWidgetContainer currentWidget;
+
+               
+               public IList<ForeignWidgetContainer> GraphicTree {
+                       get => graphicTree;
+                       set {
+                               if (graphicTree == value)
+                                       return;
+                               graphicTree = value;
+                               NotifyValueChanged("GraphicTree",graphicTree);
+                       }
+               }
+               public ForeignWidgetContainer CurrentWidget {
+                       get => currentWidget;
+                       set {
+                               if (currentWidget == value)
+                                       return;
+                               currentWidget = value;
+                               NotifyValueChanged("CurrentWidget",currentWidget);
+                       }
+               }
 
 
                #region dbgIface delegates
@@ -111,12 +154,12 @@ namespace Crow
                Action delUnlockRenderMutex;
                Func<double> delGetZoomFactor;
                Action<double> delSetZoomFactor;
+               Func<object, IEnumerable<object>> delGetWidgetChildren;
 
 
                FieldInfo fiDbg_IncludedEvents, fiDbg_ConsoleOutput, fiDbgIFace_MaxLayoutingTries, fiDbgIFace_MaxDiscardCount, fiDbgIFace_Terminate;
+               FieldInfo fiITor_NextInstantiatorID;
                
-               //design mode members, present only if crow compiled with DESIGN_MODE enabled
-               FieldInfo fiWidget_design_id;
                #endregion
 
                #region DebugLog
@@ -254,12 +297,23 @@ namespace Crow
                                delUnlockRenderMutex();
                }
                public bool GetDirtyState => IsRunning ? (bool)fiDbgIFace_IsDirty.GetValue (dbgIFace) : false;
-               public bool DesignModeEnabled => IsRunning && fiWidget_design_id != null ? true : false;
+               public bool DesignModeEnabled => IsRunning && ForeignWidgetContainer.fiWidget_design_id != null ? true : false;
                public Type GetWidgetTypeFromeName(string typeName) {
                        if (!IsRunning)
                                return null;
                        return delGetWidgetTypeFromName(typeName);                      
                }
+               public IEnumerable<MemberInfo> GetAllCrowTypeMembers (string crowTypeName) {
+                       Type crowType = GetWidgetTypeFromeName(crowTypeName);
+                       return crowType?.GetMembers (BindingFlags.Public | BindingFlags.Instance).
+                               Where (m=>((m is PropertyInfo pi && pi.CanWrite) || (m is EventInfo)) &&
+                                               m.GetCustomAttribute<XmlIgnoreAttribute>() == null);
+               }
+               public IEnumerable<object> GetWidgetChilren(object widget) {
+                       if (!IsRunning)
+                               return null;
+                       return delGetWidgetChildren(widget);
+               }
                void updateCrowDebuggerState (string errorMsg = null) {
                        ErrorMessage = errorMsg;
                        ServiceIsInError = errorMsg != null;
@@ -271,6 +325,9 @@ namespace Crow
 
                #region DesignInterface callbacks
                //those methods are called by designed interface
+               public void UpdateRootWidget(Type widgetType, object instance) {
+                       GraphicTree = new List<ForeignWidgetContainer>([new ForeignWidgetContainer(widgetType, instance)]);
+               }
                void getMouseScreenCoordinates (out int x, out int y) {
                        x = mouseScreenPos.X;
                        y = mouseScreenPos.Y;
@@ -330,7 +387,7 @@ namespace Crow
 
                        CurrentState = Status.Running;
 
-                       App.ViewCommands.Add (CMDViewPreview);
+                       App.ViewCommands.Add (ViewCommands);
 
                        updateCrowDebuggerState();
 
@@ -340,7 +397,7 @@ namespace Crow
                {
                        if (CurrentState == Status.Running)
                                fiDbgIFace_Terminate.SetValue (dbgIFace, true);
-                       App.ViewCommands.Remove (CMDViewPreview);
+                       App.ViewCommands.Remove (ViewCommands);
 
                        Recording = false;
                        DebugLogIsEnabled = false;
@@ -394,6 +451,8 @@ namespace Crow
 
                        delGetWidgetTypeFromName = (Func<string, Type>)Delegate.CreateDelegate(typeof(Func<string, Type>),
                                                                                dbgIFace, dbgIfaceType.GetMethod("GetWidgetTypeFromName"));
+                       delGetWidgetChildren = (Func<object, IEnumerable<object>>)Delegate.CreateDelegate(typeof(Func<object, IEnumerable<object>>),
+                                                                               dbgIFace, dbgIfaceType.GetMethod("GetWidgetChilren"));
 
                        
 
@@ -446,10 +505,25 @@ namespace Crow
                        fiDbgIFace_MaxLayoutingTries.SetValue (null, MaxLayoutingTries);
                        fiDbgIFace_MaxDiscardCount.SetValue (null, MaxDiscardCount);
 
+                       
+
+                       //*** IN ForeignWidgetContainer ****
+                       typeWidget = crowAssembly.GetType("Crow.Widget");
+                       /*typeGroup = crowAssembly.GetType("Crow.Group");
+                       typeContainer = crowAssembly.GetType("Crow.Container");
+                       typeTemplatedContainer = crowAssembly.GetType("Crow.TemplatedContainer");
+                       typeTemplatedGroup = crowAssembly.GetType("Crow.TemplatedGroup");*/
+
                        //DESIGN_MODE only
-                       Type widgetType = crowAssembly.GetType("Crow.Widget");
-                       fiWidget_design_id = widgetType.GetField("design_id");
+                       fiWidget_design_id = typeWidget.GetField("design_id");
+                       fiWidget_design_style_values = typeWidget.GetField("design_style_values");
+                       fiWidget_design_style_locations = typeWidget.GetField("design_style_locations");
+                       fiWidget_design_iml_values = typeWidget.GetField("design_iml_values");
+                       //***********************************
 
+
+                       fiITor_NextInstantiatorID = crowAssembly.GetType("Crow.IML.Instantiator").GetField("NextInstantiatorID", BindingFlags.Public | BindingFlags.Static);
+                       
                        return true;
                }
 
@@ -462,14 +536,14 @@ namespace Crow
                                NotifyValueChanged(value);
                        }
                }
-               public Project ActiveSolution {
-                       get => activeSolution;
+               public Project CurrentSolution {
+                       get => currentSolution;
                        set {
                                //CERoslynPlugin.SolutionProject sol = value as CERoslynPlugin.SolutionProject;
-                               if (activeSolution == value)
+                               if (currentSolution == value)
                                        return;
-                               activeSolution = value;
-                               NotifyValueChanged (activeSolution);
+                               currentSolution = value;
+                               NotifyValueChanged (currentSolution);
                        }
                }
 
@@ -635,7 +709,7 @@ namespace Crow
                                return;
                        Recording = false;
                        getLog ();
-                       CrowEditBase.CrowEditBase.App.LoadWindow ("#CECrowPlugin.ui.winDebugLog.crow", this);
+                       App.LoadWindow ("#CECrowPlugin.ui.winDebugLog.crow", this);
                }
                int firstWidgetIndexToGet = 0;
                public object LogMutex = new object ();
@@ -694,7 +768,7 @@ namespace Crow
                bool disableCurrentEventHistory;
                Stack<DbgEvent> CurrentEventHistoryForward = new Stack<DbgEvent>();
                Stack<DbgEvent> CurrentEventHistoryBackward = new Stack<DbgEvent>();
-               DbgWidgetRecord curWidget = new DbgWidgetRecord();
+               DbgWidgetRecord curWidgetRecord = new DbgWidgetRecord();
                public string[] AllEventTypes => Enum.GetNames (typeof(DbgEvtType));
                string searchEventType;
                DbgWidgetRecord searchWidget;
@@ -766,27 +840,27 @@ namespace Crow
                        disableCurrentEventHistory = false;
                }
 
-               public DbgWidgetRecord CurrentWidget {
-                       get => curWidget;
+               public DbgWidgetRecord CurrentWidgetRecord {
+                       get => curWidgetRecord;
                        set {
-                               if (curWidget == value)
+                               if (curWidgetRecord == value)
                                        return;
-                               curWidget = value;
-                               NotifyValueChanged (nameof (CurrentWidget), curWidget);
-                               NotifyValueChanged ("CurWidgetRootEvents", curWidget?.RootEvents);
-                               NotifyValueChanged ("CurrentWidgetEvents", curWidget?.Events);
+                               curWidgetRecord = value;
+                               NotifyValueChanged (nameof (CurrentWidget), curWidgetRecord);
+                               NotifyValueChanged ("CurWidgetRootEvents", curWidgetRecord?.RootEvents);
+                               NotifyValueChanged ("CurrentWidgetEvents", curWidgetRecord?.Events);
                                NotifyValueChanged ("CurWidgetProperties", CurWidgetProperties);
                        }
                }
-               public List<DbgWidgetEvent> CurWidgetRootEvents => curWidget == null? new List<DbgWidgetEvent>() : curWidget.RootEvents;
+               public List<DbgWidgetEvent> CurWidgetRootEvents => curWidgetRecord == null? new List<DbgWidgetEvent>() : curWidgetRecord.RootEvents;
 
                public IEnumerable<KeyValuePair<string, string>> CurWidgetProperties {
                        get {
-                               if (curWidget == null)
+                               if (curWidgetRecord == null)
                                        return null;
                                long endTime = curEvent == null ? long.MaxValue : curEvent.end;
                                Dictionary<string, string> result = new Dictionary<string, string> ();
-                               foreach (DbgWidgetEvent evt in curWidget?.Events?.Where (e => e.type == DbgEvtType.GOSetProperty && e.begin <= endTime)){
+                               foreach (DbgWidgetEvent evt in curWidgetRecord?.Events?.Where (e => e.type == DbgEvtType.GOSetProperty && e.begin <= endTime)){
                                        string[] tmp = evt.Message.Split('=');
                                        if (result.ContainsKey (tmp[0]))
                                                result[tmp[0]] = tmp[1];
@@ -797,5 +871,7 @@ namespace Crow
                        }
                }
                #endregion
+
+
        }
 }
\ No newline at end of file
diff --git a/plugins/CECrowPlugin/src/CrowSuggestions.cs b/plugins/CECrowPlugin/src/CrowSuggestions.cs
new file mode 100644 (file)
index 0000000..13f4743
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright (c) 2013-2025  Bruyère Jean-Philippe <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+using Crow.Text;
+using System.Reflection;
+using Crow;
+using CrowEditBase;
+
+namespace CECrowPlugin
+{
+       public class WidgetSuggestion : Suggestion {
+               public Type Type;
+        public override string Icon => $"#icons.{Type.FullName}.svg";
+        public WidgetSuggestion(Type type, TextChange change = default, int finalPositionOffset = 0)
+                       : base(type.Name, change, finalPositionOffset) {
+                       Type = type;
+               }
+       }
+       public class ColorSuggestion : Suggestion {
+               public Fill Fill;
+        public override string Icon => $"#icons.fill.svg";
+        public ColorSuggestion(Fill fill, TextChange change = default, int finalPositionOffset = 0)
+                       : base(fill.ToString(), change, finalPositionOffset) {
+                       Fill = fill;
+               }
+       }
+       public class CrowPropertySuggestion : MemberInfoSuggestion {
+               DesignCategory category;
+               public string Category => category == null ? "Divers" : category.Name;
+               public override string Icon => $"#icons.{Category}.svg";
+               public CrowPropertySuggestion(PropertyInfo pi, TextChange change, int finalPositionOffset = 0)
+               : base (pi, change, finalPositionOffset) {
+                       category = (DesignCategory)MemberInfo.GetCustomAttribute (typeof(DesignCategory));
+               }
+       }
+}
\ No newline at end of file
index fd495a8cb6181e472dd7d9433fe7c57918c67944..a4f03172f609a0ecaf88a7ca7b05133a51b39018 100644 (file)
@@ -92,6 +92,8 @@ namespace CECrowPlugin
                string source;
                //Action delRegisterForRepaint;//call RegisterForRepaint in the container widget (DebugInterfaceWidget)
                Action<Exception> delCrowServiceSetCurrentException;
+               Action<Type,object> delCrowServiceUpdateRootWidget;
+
 
                delegate void GetScreenCoordinateDelegateType(out int x, out int y);
                GetScreenCoordinateDelegateType delCrowServiceGetScreenCoordinate;
@@ -104,6 +106,9 @@ namespace CECrowPlugin
                        //delRegisterForRepaint = (Action)Delegate.CreateDelegate(typeof(Action), w, t.GetMethod("RegisterForRepaint"));
                        delCrowServiceSetCurrentException = (Action<Exception>)Delegate.CreateDelegate(typeof(Action<Exception>), crowService,
                                t.GetProperty("CurrentException").GetSetMethod(true));
+                       delCrowServiceUpdateRootWidget = (Action<Type,object>)Delegate.CreateDelegate(typeof(Action<Type,object>), crowService,
+                               t.GetMethod("UpdateRootWidget"));
+
                        delCrowServiceGetScreenCoordinate = (GetScreenCoordinateDelegateType)Delegate.CreateDelegate(typeof(GetScreenCoordinateDelegateType), crowService,
                                t.GetMethod("getMouseScreenCoordinates", BindingFlags.Instance | BindingFlags.NonPublic));
                        delCrowServiceGetStyling = (Func<IEnumerable<object>>)Delegate.CreateDelegate (typeof (Func<IEnumerable<object>>), crowService,
@@ -130,6 +135,7 @@ namespace CECrowPlugin
                                                AddWidget (tmp);
                                                tmp.DataSource = this;
                                        }
+                                       delCrowServiceUpdateRootWidget(GraphicTree[0].GetType(), (object)GraphicTree[0]);
                                }
                                catch (IML.InstantiatorException iTorEx)
                                {
@@ -141,6 +147,8 @@ namespace CECrowPlugin
                                }
                        }
                }
+
+
                
                void resetInterface () {
                        ClearInterface();
@@ -268,7 +276,25 @@ namespace CECrowPlugin
                        }
                        return null;
                }
-       
+               public IEnumerable<object> GetWidgetChilren(object widget) {
+                       Type goType = widget.GetType();
+                       if (typeof (Group).IsAssignableFrom (goType)) {
+                               foreach (Widget w in (widget as Group).Children)
+                                       yield return w;
+                       } else if (typeof(Container).IsAssignableFrom (goType))
+                               yield return (widget as Container).Child;
+                       else if (typeof(TemplatedContainer).IsAssignableFrom (goType))
+                               yield return (widget as TemplatedContainer).Content;
+                       else if (typeof(TemplatedGroup).IsAssignableFrom (goType)) {
+                               foreach (Widget w in (widget as TemplatedGroup).Items)
+                                       yield return w;
+                       }
+                       /* for template tree
+                       } else if (typeof(PrivateContainer).IsAssignableFrom (goType)) {
+                               FieldInfo fi = typeof(PrivateContainer).GetField("child", BindingFlags.NonPublic | BindingFlags.Instance);
+                               yield return fi.GetValue(widget);
+                       */
+               }
        
                public void LockRenderMutex() => Monitor.Enter(this.UpdateMutex);
                public void UnlockRenderMutex() => Monitor.Exit(this.UpdateMutex);
index c69f16647949753d61086d98425d75219affe942..2f0c73b0e07c4d58fb727e7a7658acf67f39fb5d 100644 (file)
@@ -1,26 +1,20 @@
-// Copyright (c) 2013-2022  Bruyère Jean-Philippe <jp_bruyere@hotmail.com>
+// Copyright (c) 2013-2025  Bruyère Jean-Philippe <jp_bruyere@hotmail.com>
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
 using Glfw;
-using System.Reflection;
-using System.Runtime.Loader;
-using System.IO;
 using Drawing2D;
 using System.Diagnostics;
 using System.Collections.Generic;
-using Crow.DebugLogger;
-using System.Linq;
 using CrowEditBase;
 using System.Threading;
 using Crow.Text;
-using System.Runtime.InteropServices;
 
 using static CrowEditBase.CrowEditBase;
-using CECrowPlugin;
+using Crow;
 
-namespace Crow
+namespace CECrowPlugin
 {
        public class DebugInterfaceWidget : Widget {
                CrowService crowIFaceService;
@@ -96,6 +90,7 @@ namespace Crow
                string imlSource;
 
                ImlDocument document;
+               ForeignWidgetContainer currentWidget;
                public TextDocument Document {
                        get => document;
                        set {
@@ -114,6 +109,19 @@ namespace Crow
                        }
                }
 
+               
+               public ForeignWidgetContainer CurrentWidget {
+                       get => currentWidget;
+                       set {
+                               if (currentWidget == value)
+                                       return;
+                               currentWidget = value;
+                               NotifyValueChanged("CurrentWidget",currentWidget);
+                               RegisterForRepaint ();
+                       }
+               }
+
+
                protected override void onInitialized(object sender, EventArgs e)
                {
                        base.onInitialized(sender, e);
@@ -158,12 +166,13 @@ namespace Crow
 
                public override bool Paint(IContext ctx)
                {
-                       crowIFaceService.LockRenderMutex();
+                       return base.Paint(ctx);
+                       /*crowIFaceService.LockRenderMutex();
                        try {
                                return base.Paint(ctx);                         
                        } finally {
                                crowIFaceService.UnlockRenderMutex();
-                       }
+                       }*/
                }
                protected override void RecreateCache()
                {
@@ -177,9 +186,9 @@ namespace Crow
                protected override void UpdateCache(IContext ctx)
                {
                        if (crowIFaceService != null && crowIFaceService.IsRunning && bmp != null) {
-                               crowIFaceService.LockRenderMutex();
+                               //crowIFaceService.LockRenderMutex();
                                paintCache (ctx, Slot + Parent.ClientRectangle.Position);
-                               crowIFaceService.UnlockRenderMutex();
+                               //crowIFaceService.UnlockRenderMutex();
                                crowIFaceService.ResetDirtyState ();
                        } 
                                
diff --git a/plugins/CECrowPlugin/src/ForeignWidgetContainer.cs b/plugins/CECrowPlugin/src/ForeignWidgetContainer.cs
new file mode 100644 (file)
index 0000000..ddc9ddd
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright (c) 2013-2025  Bruyère Jean-Philippe <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+using System.Reflection;
+using System.Collections.Generic;
+using System.Linq;
+using CrowEditBase;
+using Crow;
+
+using static CrowEditBase.CrowEditBase;
+
+namespace CECrowPlugin
+{
+       public class ForeignWidgetContainer : CrowEditComponent {
+               internal static Type typeWidget;//, typeGroup, typeContainer, typeTemplatedContainer, typeTemplatedGroup;
+               //design mode members, present only if crow compiled with DESIGN_MODE enabled
+               internal static FieldInfo fiWidget_design_id, fiWidget_design_style_values,     fiWidget_design_iml_values, fiWidget_design_style_locations;
+               Func<string> delGetName;
+
+               bool isExpanded;
+               Type type;
+               object instance;
+               public ForeignWidgetContainer(Type widgetType, object instance) {
+                       type = widgetType;
+                       this.instance = instance;
+
+                       delGetName = (Func<string>)Delegate.CreateDelegate(typeof(Func<string>), instance, type.GetProperty("Name").GetGetMethod());
+               }
+
+               public string Icon => $"#icons.{type.FullName}.svg";
+
+               public IEnumerable<MemberInfo> Members => type.GetMembers (BindingFlags.Public | BindingFlags.Instance).
+                               Where (m=>((m is PropertyInfo pi && pi.CanWrite) || (m is EventInfo)) &&
+                                               m.GetCustomAttribute<XmlIgnoreAttribute>() == null);
+
+               public IEnumerable<PropertyContainer> Properties => Members.Where(m=>m.MemberType == MemberTypes.Property).Select(p=> new PropertyContainer(this, p as PropertyInfo));
+
+               public string Name => delGetName();
+
+               public IEnumerable<ForeignWidgetContainer> Children  {
+                       get {
+                               var srv = App.GetService<CrowService> ();
+                               if (srv == null || !srv.IsRunning)
+                                       return null;
+                               return srv.GetWidgetChilren(instance)?.Select(c=>new ForeignWidgetContainer(c.GetType(),c));
+                       }
+                       
+               } 
+                       
+                               
+               
+               public object Instance => instance;
+
+               public Dictionary<string,string> ImlValues => fiWidget_design_iml_values.GetValue(instance) as Dictionary<string,string>;
+               public Dictionary<string,string> StyleValues => fiWidget_design_style_values.GetValue(instance) as Dictionary<string,string>;
+               public Dictionary<string,FileLocation> StyleLocation => fiWidget_design_style_locations.GetValue(instance) as Dictionary<string,FileLocation>;
+
+               public virtual bool IsExpanded {
+                       get => isExpanded;
+                       set {
+                               if (value == isExpanded)
+                                       return;
+                               isExpanded = value;
+                               NotifyValueChanged (isExpanded);
+                       }
+               }
+               public bool HasChildren => Children?.Count() > 0;               
+
+       }
+}
index bca46b4d5289def1317225a823b5a66e07bc839a..b0d3fd451917366a6479d039c9b0cd19dd2d5964 100644 (file)
@@ -32,12 +32,6 @@ namespace CECrowPlugin
                public override string GetTokenTypeString (TokenType tokenType) => ((ImlTokenType)tokenType).ToString();
 
 
-               IEnumerable<MemberInfo> getAllCrowTypeMembers (string crowTypeName) {
-                       Type crowType = App.GetService<CrowService>()?.GetWidgetTypeFromeName(crowTypeName);
-                       return crowType?.GetMembers (BindingFlags.Public | BindingFlags.Instance).
-                               Where (m=>((m is PropertyInfo pi && pi.CanWrite) || (m is EventInfo)) &&
-                                               m.GetCustomAttribute<XmlIgnoreAttribute>() == null);
-               }
                /*MemberInfo getCrowTypeMember (string crowTypeName, string memberName) {
                        Type crowType = App.GetService<CrowService>()?.GetWidgetTypeFromeName(crowTypeName);
                        return crowType.GetMember (memberName, BindingFlags.Public | BindingFlags.Instance).FirstOrDefault ();
@@ -66,21 +60,31 @@ namespace CECrowPlugin
         }
         protected override IEnumerable<Suggestion> getAttributeNameSuggestions(string eltName, string curName, TextChange change) {
                        int endPosOffset = change.HasNewText ? -1 : 0;
-                       var members = getAllCrowTypeMembers(eltName);
-                       if (members == null)
-                               return null;
-                       if (!string.IsNullOrEmpty(curName))
-                               members = members.Where(m =>
-                                       m.Name.StartsWith (curName, StringComparison.OrdinalIgnoreCase));
-                       return members?.Select(m
-                               => new MemberInfoSuggestion(m,
-                                       new TextChange(change.Start, change.Length, m.Name + change.ChangedText), endPosOffset));
+                       var members = App.GetService<CrowService>()?.GetAllCrowTypeMembers(eltName);
+                       if (members != null) {
+                               
+                               if (!string.IsNullOrEmpty(curName))
+                                       members = members.Where(m => m.Name.StartsWith (curName, StringComparison.OrdinalIgnoreCase));
+
+                               var suggs = members?.Where(m=>m.MemberType == MemberTypes.Property)?.Select(p
+                                       => new CrowPropertySuggestion(p as PropertyInfo,
+                                               new TextChange(change.Start, change.Length, p.Name + change.ChangedText), endPosOffset));
+
+                               foreach (var tmp in suggs.Where(s=>s.Category == "Divers"))
+                                       yield return tmp;
+                               foreach (var tmp in suggs.Where(s=>s.Category == "Appearance"))
+                                       yield return tmp;
+                               foreach (var tmp in suggs.Where(s=>s.Category == "Layout"))
+                                       yield return tmp;
+                               foreach (var tmp in suggs.Where(s=>s.Category == "Data"))
+                                       yield return tmp;
+                               foreach (var tmp in suggs.Where(s=>s.Category == "Behaviour"))
+                                       yield return tmp;                               
+                       }
+                               
                }
                protected override IEnumerable<Suggestion> getAttributeValueSuggestions(string eltName, string attribName, string attribValue, TextChange change) {
-                       CrowService srv = App.GetService<CrowService>();
-                       if (srv == null || !srv.IsRunning)
-                               return null;
-                       MemberInfo mi = getAllCrowTypeMembers(eltName)?.Where(m=>m.Name.Equals(attribName, StringComparison.Ordinal)).FirstOrDefault();
+                       MemberInfo mi = App.GetService<CrowService>()?.GetAllCrowTypeMembers(eltName)?.Where(m=>m.Name.Equals(attribName, StringComparison.Ordinal)).FirstOrDefault();
                        if (mi is PropertyInfo pi) {
                                if (pi.Name == "Style")
                                        return App.Styling.Keys
diff --git a/plugins/CECrowPlugin/src/PropertyContainer.cs b/plugins/CECrowPlugin/src/PropertyContainer.cs
new file mode 100644 (file)
index 0000000..5c7f5db
--- /dev/null
@@ -0,0 +1,128 @@
+// Copyright (c) 2013-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+using System.Reflection;
+using System.Linq;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.ComponentModel;
+using CrowEditBase;
+using Drawing2D;
+using Crow;
+
+using static CrowEditBase.CrowEditBase;
+
+namespace CECrowPlugin
+{
+       [DebuggerDisplay ("{Type}:{Name}")]
+       public class PropertyContainer : CrowEditComponent
+       {
+               ForeignWidgetContainer host;
+               PropertyInfo pi;
+
+               Command cmdReset, cmdGoToStyle;
+               public CommandGroup Commands;
+
+               #region CTOR
+               public PropertyContainer(ForeignWidgetContainer host, PropertyInfo prop){
+                       this.host = host;
+                       pi = prop;
+
+                       cmdReset = new ActionCommand ("Reset to default", Reset, "", HasStyling | IsSetByIML);
+                       cmdGoToStyle = new ActionCommand ("Goto style", GotoStyle, "#icons.edit.svg", HasStyling);
+
+                       Commands = new CommandGroup (cmdReset, cmdGoToStyle);
+               }
+               #endregion
+
+               public string DesignCategory {
+                       get {
+                               DesignCategory dca = (DesignCategory)pi.GetCustomAttribute (typeof(DesignCategory));
+                               return dca == null ? "Divers" : dca.Name;                                       
+                       }
+               }
+               public string Name => pi.Name;
+               public object Value {
+                       get => pi.GetValue(host.Instance);
+                       set {
+                               
+                                       
+                       }
+               }
+               /// <summary>
+               /// for style attribute which is a string, return Style as type
+               /// </summary>
+               public string Type => pi.PropertyType.IsEnum ? "System.Enum"
+                                       : pi.Name == "Style" ? "Style" : pi.PropertyType.FullName;
+               
+               public object[] Choices {
+                       get {
+                               return pi.PropertyType.IsEnum ?
+                                       Enum.GetValues (pi.PropertyType).Cast<object>().ToArray() : null;
+                       }
+               }
+
+               public object DefaultValue => ((DefaultValueAttribute)pi.GetCustomAttribute (typeof (DefaultValueAttribute))).Value;
+               public bool HasDefaultValue => pi.GetCustomAttribute (typeof(DefaultValueAttribute))!=null; 
+               /// <summary>
+               /// return true if current value comes from IML attributes
+               /// </summary>
+               public bool IsSetByIML => host.ImlValues.ContainsKey (Name);
+               /// <summary>
+               /// return true if member default value comes from style
+               /// </summary>
+               public bool HasStyling => host.StyleLocation.ContainsKey(Name);
+               /// <summary>
+               /// Return true if current value comes from styling
+               /// </summary>
+               public bool IsSetByStyling => IsSetByIML ? false : HasStyling;
+
+
+               public Color LabForeground => IsSetByIML ? Colors.Blue : HasStyling ? Colors.Black : Colors.Silver;
+
+               /// <summary>
+               /// reset to default value
+               /// </summary>
+               public void Reset () {
+                       /*Widget inst = imlProjItem.SelectedItem as Widget;
+                       if (!inst.design_iml_values.ContainsKey (Name))
+                               return;
+                       inst.design_iml_values.Remove (Name);
+
+                       NotifyValueChanged ("LabForeground", LabForeground);
+                       imlProjItem.UpdateSource(this, imlProjItem.Instance.GetIML());*/
+                       //mview.ProjectNode.Instance.design_HasChanged = true;
+                       //should reinstantiate to get default
+               }
+               public void GotoStyle(){
+                       if (!HasStyling)
+                               return;
+                       FileLocation fl = host.StyleLocation[Name];
+
+                       CrowService srv = App.GetService<CrowService> ();
+                       if (srv?.CurrentSolution == null)
+                               return;
+                       if (srv.CurrentSolution.ContainsFile(fl.FilePath)) {
+                               Console.WriteLine($"file found: {fl.FilePath}");
+                       }
+                       
+
+/*                     if (!mview.ProjectNode.Project.TryGetProjectFileFromPath ("#" + fl.FilePath, out pf))
+                               return;
+
+                       if (!pf.IsOpened)
+                               pf.Open ();
+
+                       pf.CurrentLine = fl.Line;
+                       pf.CurrentColumn = fl.Column;
+
+                       pf.IsSelected = true;*/
+
+               }
+
+               public override string ToString () => $"{Name} = {Value}";
+       }
+}
+
index 3f4aeb8f9bf56bd16287a0789389a2496aaf1b86..71b71bf56f9163c64578910a35da499b55e6bf48 100644 (file)
@@ -3,7 +3,7 @@
        <VerticalStack Background="Black" >
                <DebugInterfaceWidget Name="dbgIfaceWidget" Focusable="true"
                                        BubbleEvents="None"
-                                       Document="{CurrentDocument}"/>
+                                       Document="{CurrentDocument}" CurrentWidget="{²CurrentWidget}"/>
                <Popper DataSource="{../dbgIfaceWidget.CrowIFaceService}" IsVisible="{PreviewHasError}" Background="DarkRed">
                        <Template>
                                <CheckBox IsChecked="{²./IsPopped}" MouseEnter="{IsChecked='true'}" MouseLeave="{IsChecked='false'}">
diff --git a/plugins/CECrowPlugin/ui/winGraphicTree.crow b/plugins/CECrowPlugin/ui/winGraphicTree.crow
new file mode 100644 (file)
index 0000000..4380b9a
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<DockWindow Caption="Graphic Tree"  Width="30%">
+       <VerticalStack RootDataLevel="true" Spacing="0">
+               <Button Command="{CMDRefresh}"/>
+               <TreeView Data="{GraphicTree}" SelectedItem="{²CurrentWidget}">
+                       <ItemTemplate Data="Children">
+                               <ListItem IsSelected="{IsSelected}"
+                                               Selected="{/exp.Background=${ControlHighlight}}"
+                                               Unselected="{/exp.Background=${TreeItemBackground}}">
+                                       <Expandable Name="exp" Caption="{Name}" MouseDoubleClick="/onClickForExpand" BubbleEvents="All" IsExpanded="{²IsExpanded}"
+                                                               Tooltip="{AsText}">
+                                               <Template>
+                                                       <VerticalStack>
+                                                               <Border CornerRadius="2" Margin="0" Height="Fit" MouseDoubleClick="./onClickForExpand"
+                                                                               Foreground="Transparent"
+                                                                               MouseEnter="{Foreground=DimGrey}"
+                                                                               MouseLeave="{Foreground=Transparent}">
+                                                                       <HorizontalStack Background="{./Background}" Spacing="1">
+                                                                               <Image Margin="1" Width="9" Height="9" Focusable="true" MouseDown="./onClickForExpand"
+                                                                                       Path="{./Image}"
+                                                                                       Visible="{HasChilds}"
+                                                                                       SvgSub="{IsExpanded}"
+                                                                                       MouseEnter="{Background=LightGrey}"
+                                                                                       MouseLeave="{Background=Transparent}"/>
+                                                                               <Image Path='{Icon}' Width='16' Height='16'/>
+                                                                               <Label Style="TreeLabel" Text="{./Caption}"/>
+                                                                       </HorizontalStack>
+                                                               </Border>                                                               
+                                                               <Container Name="Content" Visible="false"/>
+                                                       </VerticalStack>
+                                               </Template>
+                                               <HorizontalStack Height="Fit">
+                                                       <Widget Width="12" Height="10"/>
+                                                       <VerticalStack Height="Fit" Name="ItemsContainer"/>
+                                               </HorizontalStack>
+                                       </Expandable>
+                               </ListItem>
+                       </ItemTemplate>
+               </TreeView>
+       </VerticalStack>
+</DockWindow>
+
+
diff --git a/plugins/CECrowPlugin/ui/winProperties.crow b/plugins/CECrowPlugin/ui/winProperties.crow
new file mode 100644 (file)
index 0000000..065020a
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<DockWindow Caption="Properties"  Width="20%" Height="50%">
+    <VerticalStack RootDataLevel="true" DataSource="{CurrentWidget}">
+        <ListBox Data="{Properties}">
+            <Template>
+                <VerticalStack Background="{./Background}">
+                    <Label Text="{Name}"/>
+                    <HorizontalStack Margin="1">
+                        <Scroller Name="ItemsScroller" Margin="2">
+                            <VerticalStack Height="Fit" MinimumSize="10,10"
+                                Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
+                        </Scroller>
+                        <ScrollBar Name="scrollbar1" Value="{²../ItemsScroller.ScrollY}"
+                            LargeIncrement="{../ItemsScroller.PageHeight}" SmallIncrement="30" CursorRatio="{../ItemsScroller.ChildHeightRatio}"
+                            Maximum="{../ItemsScroller.MaxScrollY}" Orientation="Vertical" 
+                            Width="12" />
+                    </HorizontalStack>
+                </VerticalStack>
+            </Template>        
+            <ItemTemplate>
+                <ListItem Height="Fit" Width="Stretched" ContextCommands="{Commands}"
+                                    Selected="{Background=${ControlHighlight}}"
+                                    Unselected="{Background=Transparent}">
+                    <HorizontalStack>
+                        <Label Width="50%" Text="{Name}" Foreground="LightGrey"/>
+                        <TextBox Margin="1" Text="{²Value}" Height="Fit" Foreground="{LabForeground}" Font="mono, 12"/>
+                    </HorizontalStack>
+                </ListItem>
+            </ItemTemplate>    
+        </ListBox>
+    </VerticalStack>
+</DockWindow>
+
+
index eeb42f8a21095042a8ef64a2654b9d92808e4d67..c4822895f6c556b50f81ab53a9b6c850c8e6ad5a 100644 (file)
@@ -18,7 +18,7 @@ using Crow;
 namespace NetcoreDbgPlugin
 {
        public class NetcoreDbgService : Service {
-               public override string ConfigurationWindowPath => "#CENetcoreDbgPlugin.ui.winConfiguration.crow";
+               public override string[] ServiceWindowsPath => ["#CENetcoreDbgPlugin.ui.winConfiguration.crow"];
                public NetcoreDbgService () : base () {
                        initCommands();
                        App.ValueChanged += app_ValueChanged;
@@ -46,7 +46,7 @@ namespace NetcoreDbgPlugin
                        CMDViewStackFrames = new ActionCommand("Stack Frames", () => App.LoadWindow ("#CENetcoreDbgPlugin.ui.winStackFrames.crow", this));
                        CMDViewWatches = new ActionCommand("Watches", () => App.LoadWindow ("#CENetcoreDbgPlugin.ui.winWatches.crow", this));
                        CMDViewThreads = new ActionCommand("Threads", () => App.LoadWindow ("#CENetcoreDbgPlugin.ui.winThreads.crow", this));
-                       ViewCommands = new CommandGroup("Debugger", CMDViewDebug, CMDViewWatches, CMDViewBreakPoints, CMDViewStackFrames, CMDViewThreads);
+                       ViewCommands = new CommandGroup("Debugger", "#icons.bug.svg", CMDViewDebug, CMDViewWatches, CMDViewBreakPoints, CMDViewStackFrames, CMDViewThreads);
                }
                #endregion
 
index de3e586699a591000a9cdb171f786ed951bc8fd9..d460325b2b2a7bb72241e3930ae7bd99f105f1ea 100644 (file)
@@ -26,7 +26,7 @@ using System.Net.Http;
 namespace NugetPlugin
 {
        public class NugetService : Service {
-               public override string ConfigurationWindowPath => "#CENugetPlugin.ui.winConfiguration.crow";
+               public override string[] ServiceWindowsPath => ["#CENugetPlugin.ui.winConfiguration.crow"];
 
                public NugetService () : base () {
                        initCommands();
index d85da1633843576437f6e02701d04fdd4ea189d3..ed64eca8b61ccb6e8bb3969c124e516a00461324 100644 (file)
@@ -148,9 +148,9 @@ namespace CERoslynPlugin
 
                                lastBuildResult = BuildManager.DefaultBuildManager.Build (solutionProject.buildParams, request);
 
-                               /*printEvaluatedProperties (lastBuildResult.ProjectStateAfterBuild);
+                               printEvaluatedProperties (lastBuildResult.ProjectStateAfterBuild);
 
-                               var test = lastBuildResult.ProjectStateAfterBuild.GetItems ("Reference");*/
+                               /*var test = lastBuildResult.ProjectStateAfterBuild.GetItems ("Reference");*/
 
                                //Console.WriteLine (IsCrowProject);
 
index 2fb5d41dd55f286b00cbff15c30ca7c695a2a412..9df1211da53a1702da2d6c6b0de212323d97b314 100644 (file)
@@ -18,6 +18,7 @@ using Crow;
 namespace CERoslynPlugin
 {
        public class RoslynService : Service {
+               public override string[] ServiceWindowsPath => ["#CERoslynPlugin.ui.winConfiguration.crow"];
                CELogger logger;
                internal CELogger Logger {
                        get => logger;
@@ -154,7 +155,7 @@ namespace CERoslynPlugin
                                return (Document)Activator.CreateInstance (t, new object[] {fullPath});
                        }
                }*/
-               public override string ConfigurationWindowPath => "#CERoslynPlugin.ui.winConfiguration.crow";
+               
 
                public string SDKFolder {
                        get => Configuration.Global.Get<string> ("SDKFolder");
index b921c7974f42601145cecf83b69513ba80b60270..db222835a712038bbab3c3198a7f1410a83aaaf4 100644 (file)
@@ -76,9 +76,13 @@ namespace CrowEdit
 
                        reloadWinConfigs ();
 
-                       foreach (Service service in Services) {
-                               if (TryGetWindow (service.ConfigurationWindowPath, out Window win))
-                                       win.DataSource = service;
+                       lock(UpdateMutex) {
+                               foreach (Service service in Services) {
+                                       foreach (string winPath in service.ServiceWindowsPath) {
+                                               if (TryGetWindow (winPath, out Window win))
+                                                       win.DataSource = service;
+                                       }
+                               }
                        }
 
                        reloadLogsConfigs ();
@@ -115,9 +119,9 @@ namespace CrowEdit
 
                        );
                        ViewCommands = new CommandGroup ("View",
-                               new ActionCommand("Explorer", () => LoadWindow ("#CrowEdit.ui.windows.winFileExplorer.crow", this)),
-                               new ActionCommand("Editors", () => LoadWindow ("#CrowEdit.ui.windows.winEditor.crow", this)),
-                               new ActionCommand("Exceptions", () => LoadWindow ("#CrowEdit.ui.windows.winExceptions.crow", this)),
+                               new ActionCommand("Explorer", () => LoadWindow ("#CrowEdit.ui.windows.winFileExplorer.crow", this), "#icons.folder.svg"),
+                               new ActionCommand("Editors", () => LoadWindow ("#CrowEdit.ui.windows.winEditor.crow", this), "#icons.edit.svg"),
+                               new ActionCommand("Exceptions", () => LoadWindow ("#CrowEdit.ui.windows.winExceptions.crow", this), "#icons.exclamation.svg"),
                                new ActionCommand("Projects", () => LoadWindow ("#CrowEdit.ui.windows.winProjects.crow", this)),
                                new ActionCommand("Logs", () => LoadWindow ("#CrowEdit.ui.windows.winLogs.crow", this), "#icons.log.svg"),
                                new ActionCommand("Services", () => LoadWindow ("#CrowEdit.ui.windows.winServices.crow", this), "#icons.services.svg"),
diff --git a/ui/windows/winProperties.crow b/ui/windows/winProperties.crow
deleted file mode 100644 (file)
index fd6b4d0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<DockWindow Caption="Properties"  Width="20%" Height="50%">
-
-</DockWindow>
-
-