<Compile Include="src\IML\BindingMember.cs" />
<Compile Include="src\CrowThread.cs" />
<Compile Include="src\GraphicObjects\ScrollingObject.cs" />
- <Compile Include="src\GraphicObjects\ScrollingTextBox.cs" />
<Compile Include="src\Mono.Cairo\Antialias.cs" />
<Compile Include="src\Mono.Cairo\Cairo.cs" />
<Compile Include="src\Mono.Cairo\CairoDebug.cs" />
<Compile Include="src\IML\IMLContext.cs" />
<Compile Include="src\Mono.Cairo\MeshPattern.cs" />
<Compile Include="src\GraphicObjects\Shape.cs" />
- <Compile Include="src\GraphicObjects\MDIContainer.cs" />
<Compile Include="src\IListChanged.cs" />
<Compile Include="src\ObservableList.cs" />
<Compile Include="src\GraphicObjects\IMLContainer.cs" />
<StartWorkingDirectory>%24{SolutionDir}\build\%24{ProjectConfigName}</StartWorkingDirectory>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
- <PropertyGroup Condition=" '$(RunConfiguration)' == 'Custom Command' ">
- <StartAction>Program</StartAction>
- <StartProgram>%24{TargetName}</StartProgram>
- <StartWorkingDirectory>%24{SolutionDir}\build\%24{ProjectConfigName}</StartWorkingDirectory>
- <ConsolePause>false</ConsolePause>
- </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Compile Include="src\MemberView\MembersView.cs" />
<Compile Include="src\MemberView\PropertyContainer.cs" />
<Compile Include="src\MemberView\CategoryContainer.cs" />
+ <Compile Include="src\GraphicObjectDesignContainer.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="ui\" />
<EmbeddedResource Include="ui\DockWindows\winErrors.crow" />
<EmbeddedResource Include="ui\DockWindows\winSolution.crow" />
<EmbeddedResource Include="ui\DockWindows\winProperties.crow" />
+ <EmbeddedResource Include="ui\DockWindows\winToolbox.crow" />
+ <EmbeddedResource Include="ui\DockWindows\toolboxBut.template" />
+ <EmbeddedResource Include="icons\toolbox\bar-chart.svg" />
+ <EmbeddedResource Include="icons\toolbox\bar-menu.svg" />
+ <EmbeddedResource Include="icons\toolbox\bullets.svg" />
+ <EmbeddedResource Include="icons\toolbox\calendar.svg" />
+ <EmbeddedResource Include="icons\toolbox\check-square-1.svg" />
+ <EmbeddedResource Include="icons\toolbox\curly-brackets.svg" />
+ <EmbeddedResource Include="icons\toolbox\database.svg" />
+ <EmbeddedResource Include="icons\toolbox\ellipsis.svg" />
+ <EmbeddedResource Include="icons\toolbox\eraser.svg" />
+ <EmbeddedResource Include="icons\toolbox\file-code.svg" />
+ <EmbeddedResource Include="icons\toolbox\gear.svg" />
+ <EmbeddedResource Include="icons\toolbox\grab.svg" />
+ <EmbeddedResource Include="icons\toolbox\hash.svg" />
+ <EmbeddedResource Include="icons\toolbox\light-bulb.svg" />
+ <EmbeddedResource Include="icons\toolbox\line-list.svg" />
+ <EmbeddedResource Include="icons\toolbox\list.svg" />
+ <EmbeddedResource Include="icons\toolbox\move-arrows.svg" />
+ <EmbeddedResource Include="icons\toolbox\package.svg" />
+ <EmbeddedResource Include="icons\toolbox\paint-brush.svg" />
+ <EmbeddedResource Include="icons\toolbox\pin.svg" />
+ <EmbeddedResource Include="icons\toolbox\pointer.svg" />
+ <EmbeddedResource Include="icons\toolbox\puzzle-piece.svg" />
+ <EmbeddedResource Include="icons\toolbox\refresh-file.svg" />
+ <EmbeddedResource Include="icons\toolbox\search.svg" />
+ <EmbeddedResource Include="icons\toolbox\sliders.svg" />
+ <EmbeddedResource Include="icons\toolbox\split-browser-1.svg" />
+ <EmbeddedResource Include="icons\toolbox\table.svg" />
+ <EmbeddedResource Include="icons\toolbox\tasks.svg" />
+ <EmbeddedResource Include="icons\toolbox\tools.svg" />
+ <EmbeddedResource Include="icons\toolbox\trash.svg" />
+ <EmbeddedResource Include="icons\toolbox\zoom-in.svg" />
+ <EmbeddedResource Include="icons\toolbox\zoom-out.svg" />
+ <EmbeddedResource Include="icons\toolbox\dot-inside-a-circle.svg" />
+ <EmbeddedResource Include="icons\toolbox\edit.svg" />
+ <EmbeddedResource Include="icons\toolbox\picture-file.svg" />
+ <EmbeddedResource Include="icons\toolbox\text-file.svg" />
+ <EmbeddedResource Include="icons\toolbox\warning.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Button.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.TextBox.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Label.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.CheckBox.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.RadioButton.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Spinner.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Container.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Group.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.HorizontalStack.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.VerticalStack.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Splitter.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.ListBox.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.ComboBox.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.TreeView.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.TabView.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Docker.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Window.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Slider.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.ProgressBar.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Grid.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Image.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.TemplatedContainer.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.TemplatedGroup.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.IMLContainer.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Wrapper.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.ColorPicker.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Border.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.GroupBox.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.ScrollBar.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Menu.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.MenuItem.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Shape.svg" />
+ <EmbeddedResource Include="icons\toolbox\padding.svg" />
+ <EmbeddedResource Include="icons\toolbox\modal-list.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Scroller.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.FileDialog.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.TabItem.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.Expandable.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.DirectoryView.svg" />
+ <EmbeddedResource Include="icons\toolbox\Crow.MessageBox.svg" />
</ItemGroup>
<ItemGroup>
<None Include="ui\test.crow">
--- /dev/null
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrowIDE", "CrowIDE.csproj", "{B6D911CD-1D09-42FC-B300-9187190F2AE1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B6D911CD-1D09-42FC-B300-9187190F2AE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B6D911CD-1D09-42FC-B300-9187190F2AE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B6D911CD-1D09-42FC-B300-9187190F2AE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B6D911CD-1D09-42FC-B300-9187190F2AE1}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
--- /dev/null
+<Properties StartupConfiguration="{B6D911CD-1D09-42FC-B300-9187190F2AE1}|Default">
+ <MonoDevelop.Ide.Workbench />
+ <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
+ <MonoDevelop.Ide.DebuggingService.Breakpoints>
+ <BreakpointStore />
+ </MonoDevelop.Ide.DebuggingService.Breakpoints>
+ <MonoDevelop.Ide.DebuggingService.PinnedWatches>
+ <Watch file="../src/GraphicObjects/Shape.cs" line="42" offsetX="508" offsetY="265" expression="c" liveUpdate="False" />
+ <Watch file="../src/GraphicObjects/Shape.cs" line="48" offsetX="524" offsetY="319" expression="tmp" liveUpdate="False" />
+ <Watch file="../src/GraphicObjects/Slider.cs" line="88" offsetX="534" offsetY="788" expression="value" liveUpdate="False" />
+ <Watch file="src/SourceEditor/SourceEditor.cs" line="632" offsetX="703" offsetY="8806" expression="cl.Tokens [t]" liveUpdate="False" />
+ <Watch file="src/SourceEditor/CSharpParser.cs" line="202" offsetX="590" offsetY="1493" expression="currentTok" liveUpdate="False" />
+ <Watch file="src/SourceEditor/Parser.cs" line="258" offsetX="328" offsetY="3348" expression="tmp" liveUpdate="False" />
+ <Watch file="src/SourceEditor/SourceEditor.cs" line="629" offsetX="835" offsetY="9513" expression="lineIndex" liveUpdate="False" />
+ <Watch file="src/SourceEditor/BufferParser.cs" line="90" offsetX="544" offsetY="972" expression="SyntacticTreeMaxDepth" liveUpdate="False" />
+ </MonoDevelop.Ide.DebuggingService.PinnedWatches>
+ <MultiItemStartupConfigurations />
+ <MonoDevelop.Ide.ItemProperties.CrowIDE PreferredExecutionTarget="MonoDevelop.Default" />
+</Properties>
\ No newline at end of file
--- /dev/null
+<?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="#444444" d="M14 2v-2h-14v14h2v2h14v-14h-2zM13 13h-12v-12h12v12z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15.7 5.3l-1-1c-0.2-0.2-0.4-0.3-0.7-0.3h-13c-0.6 0-1 0.4-1 1v5c0 0.3 0.1 0.6 0.3 0.7l1 1c0.2 0.2 0.4 0.3 0.7 0.3h13c0.6 0 1-0.4 1-1v-5c0-0.3-0.1-0.5-0.3-0.7zM14 10h-13v-5h13v5z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M13 0.9l-1 1.1h-12v14h14v-10.5l1.7-2-2.7-2.6zM6.5 11.7l-4.2-4.2 1.4-1.4 2.7 2.7 6.6-6.6 1.4 1.4-7.9 8.1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15 1c-1.8-1.8-3.7-0.7-4.6 0.1-0.4 0.4-0.7 0.9-0.7 1.5v0c0 1.1-1.1 1.8-2.1 1.5l-0.1-0.1-0.7 0.8 0.7 0.7-6 6-0.8 2.3-0.7 0.7 1.5 1.5 0.8-0.8 2.3-0.8 6-6 0.7 0.7 0.7-0.6-0.1-0.2c-0.3-1 0.4-2.1 1.5-2.1v0c0.6 0 1.1-0.2 1.4-0.6 0.9-0.9 2-2.8 0.2-4.6zM3.9 13.6l-2 0.7-0.2 0.1 0.1-0.2 0.7-2 5.8-5.8 1.5 1.5-5.9 5.7z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15 4h-14c-0.6 0-1 0.4-1 1v6c0 0.6 0.4 1 1 1h14c0.6 0 1-0.4 1-1v-6c0-0.6-0.4-1-1-1zM10 11h-9v-6h9v6zM13 8.4l-2-1.4h4l-2 1.4z"></path>
+<path fill="#444444" d="M2 6h1v4h-1v-4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15 1h-14v14h14v-14zM14 14h-12v-12h12v12z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M14 6v-2h-7l-1-2h-4l-1 2h-1v11h14l2-9h-2zM14.9 7l-1.6 7-11.9-0.1 2.3-6.9h11.2zM1 5h0.6l1-2h2.6l1.2 2h6.6v1h-10l-2 5.9v-6.9z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 2v13h15v-13h-15zM13 3h1v1h-1v-1zM7 14h-6v-9h6v9zM14 14h-6v-9h6v9z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15 4h-14c-0.6 0-1 0.4-1 1v6c0 0.6 0.4 1 1 1h14c0.6 0 1-0.4 1-1v-6c0-0.6-0.4-1-1-1zM12 9l-2-2h4l-2 2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M11 2h-6v4h6v-4zM9 4h-2v-1h2v1z"></path>
+<path fill="#444444" d="M3 0v16h2v-1h6v1h2v-16h-10zM12 14h-8v-6h8v6zM12 7h-8v-6h8v6z"></path>
+<path fill="#444444" d="M11 9h-6v4h6v-4zM9 11h-2v-1h2v1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 0v16h16v-16h-16zM5 15h-4v-4h4v4zM5 10h-4v-4h4v4zM5 5h-4v-4h4v4zM10 15h-4v-4h4v4zM10 10h-4v-4h4v4zM10 5h-4v-4h4v4zM15 15h-4v-4h4v4zM15 10h-4v-4h4v4zM15 5h-4v-4h4v4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 7h7v-7h-7v7zM1 1h5v5h-5v-5z"></path>
+<path fill="#444444" d="M9 0v7h7v-7h-7zM15 6h-5v-5h5v5z"></path>
+<path fill="#444444" d="M0 16h7v-7h-7v7zM1 10h5v5h-5v-5z"></path>
+<path fill="#444444" d="M9 16h7v-7h-7v7zM10 10h5v5h-5v-5z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M1 4h-1v-4h4v1h-3z"></path>
+<path fill="#444444" d="M12 1v-1h4v4h-1v-3z"></path>
+<path fill="#444444" d="M15 12h1v4h-4v-1h3z"></path>
+<path fill="#444444" d="M4 15v1h-4v-4h1v3z"></path>
+<path fill="#444444" d="M13 3v10h-10v-10h10zM14 2h-12v12h12v-12z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 0v16h16v-16h-16zM5 15h-4v-14h4v14zM10 15h-4v-14h4v14zM15 15h-4v-14h4v14z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M5.2 14l4.5-12h1.1l-4.5 12z"></path>
+<path fill="#444444" d="M11.1 13h1.2l3.7-5-3.7-5h-1.3l3.8 5z"></path>
+<path fill="#444444" d="M4.9 13h-1.2l-3.7-5 3.7-5h1.3l-3.8 5z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M16 14h-16v-12h16v12zM1 13h14v-10h-14v10z"></path>
+<path fill="#444444" d="M2 10v2h12v-1c0 0 0.2-1.7-2-2-1.9-0.3-2.2 0.6-3.8 0.6-1.1 0-0.9-1.6-3.2-1.6-1.7 0-3 2-3 2z"></path>
+<path fill="#444444" d="M13 6c0 1.105-0.895 2-2 2s-2-0.895-2-2c0-1.105 0.895-2 2-2s2 0.895 2 2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M12.5 4.9c-1.4 0-2.5 0.8-2.6 0.9l1.2 1.6c0 0 0.7-0.5 1.4-0.5 1.4 0 1.5 1.2 1.5 1.6-0.4-0.1-1.1-0.3-2-0.1-1.4 0.3-2.8 2-2.1 3.9 0.7 1.8 3.1 2.1 4.1 0.6v1h2v-5.3c0-2.7-1.9-3.7-3.5-3.7zM11.5 11.4c-0.1-1.9 1.5-1.9 2.5-1.8v1c0 1.2-2.3 2.3-2.5 0.8z"></path>
+<path fill="#444444" d="M6.9 14h2.1l-3.2-12h-2.7l-3.1 12h2.1l1-4h2.7l1.1 4zM3.6 8l0.8-3.2 0.9 3.2h-1.7z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 1h3v3h-3v-3z"></path>
+<path fill="#444444" d="M0 6h3v3h-3v-3z"></path>
+<path fill="#444444" d="M0 11h3v3h-3v-3z"></path>
+<path fill="#444444" d="M5 1h11v3h-11v-3z"></path>
+<path fill="#444444" d="M5 6h11v3h-11v-3z"></path>
+<path fill="#444444" d="M5 11h11v3h-11v-3z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15 2v2h-9v-2h9zM16 1h-11v4h11v-4z"></path>
+<path fill="#444444" d="M0 1h4v4h-4v-4z"></path>
+<path fill="#444444" d="M15 7v2h-9v-2h9zM16 6h-11v4h11v-4z"></path>
+<path fill="#444444" d="M0 6h4v4h-4v-4z"></path>
+<path fill="#444444" d="M15 12v2h-9v-2h9zM16 11h-11v4h11v-4z"></path>
+<path fill="#444444" d="M0 11h4v4h-4v-4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15 7v2h-9v-2h9zM16 6h-11v4h11v-4z"></path>
+<path fill="#444444" d="M0 6h4v4h-4v-4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" 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="#444444" d="M7 6h2v7h-2v-7z"></path>
+<path fill="#444444" d="M7 3h2v2h-2v-2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 5v6h16v-6h-16zM15 10h-14v-4h14v4z"></path>
+<path fill="#444444" d="M2 7h7v2h-7v-2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M5 3.5c0 0.828-0.672 1.5-1.5 1.5s-1.5-0.672-1.5-1.5c0-0.828 0.672-1.5 1.5-1.5s1.5 0.672 1.5 1.5z"></path>
+<path fill="#444444" d="M3.5 0c-1.9 0-3.5 1.6-3.5 3.5s1.6 3.5 3.5 3.5 3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5zM3.5 6c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5c0 1.4-1.1 2.5-2.5 2.5z"></path>
+<path fill="#444444" d="M3.5 8c-1.9 0-3.5 1.6-3.5 3.5s1.6 3.5 3.5 3.5 3.5-1.6 3.5-3.5c0-1.9-1.6-3.5-3.5-3.5zM3.5 14c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5c0 1.4-1.1 2.5-2.5 2.5z"></path>
+<path fill="#444444" d="M8 2h8v3h-8v-3z"></path>
+<path fill="#444444" d="M8 10h8v3h-8v-3z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M2 2h1v4h-1v-4z"></path>
+<path fill="#444444" d="M1 0c-0.6 0-1 0.4-1 1v14c0 0.6 0.4 1 1 1h15v-16h-15zM13 15h-12v-14h12v14zM15 15v0h-1v-1h1v1zM15 13h-1v-10h1v10zM15 2h-1v-1h1v1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 0v16h16v-16h-16zM15 15h-14v-6h3v1l3-2-3-2v1h-3v-6h6v3h-1l2 3 2-3h-1v-3h6v14z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M8 0l-8 8 8 8 8-8-8-8zM2 8l6-6 6 6-6 6-6-6z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M16 6h-3.6c-0.7-1.2-2-2-3.4-2s-2.8 0.8-3.4 2h-5.6v4h5.6c0.7 1.2 2 2 3.4 2s2.8-0.8 3.4-2h3.6v-4zM1 9v-2h4.1c0 0.3-0.1 0.7-0.1 1s0.1 0.7 0.1 1h-4.1zM9 11c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3c0 1.7-1.3 3-3 3z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M11 7h-6l3-4z"></path>
+<path fill="#444444" d="M5 9h6l-3 4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M7 0h2v16h-2v-16z"></path>
+<path fill="#444444" d="M3 5l-3 3 3 3v-2h3v-2h-3z"></path>
+<path fill="#444444" d="M16 8l-3-3v2h-3v2h3v2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M7 4l-1-2h-4l-1 2h-1v11h16v-11h-9zM15 14h-14v-9h0.6l1-2h2.6l1.2 2h8.6v9z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M14 4v-2h-14v13h16v-11h-2zM10 3h3v1h-3v-1zM6 3h3v1h-3v-1zM15 14h-14v-11h4v2h10v9z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M8 0l-8 2v10l8 4 8-4v-10l-8-2zM14.4 2.6l-5.9 2.2-6.6-2.2 6.1-1.6 6.4 1.6zM1 11.4v-8.1l7 2.4v9.2l-7-3.5z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M11 6.6v0-3.8l-4-1.8-4 1.8v4.2l-3 1.3v4.4l4 1.8 3.5-1.5 3.5 1.6 4-1.8v-4.5l-4-1.7zM7 2.1l2.8 1.2-2.7 1.1-2.6-1.2 2.5-1.1zM7 5v2.9l-3-1.3v-3l3 1.4zM4 13.5l-3-1.3v-3l3 1.4v2.9zM4 10l-2.6-1.2 2.6-1.1 2.8 1.2-2.8 1.1zM11 13.5l-3-1.3v-3l3 1.4v2.9zM11 10l-2.6-1.2 2.6-1.1 2.8 1.2-2.8 1.1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M16 5c0-0.6-0.4-1-1-1h-14c-0.6 0-1 0.4-1 1v6c0 0.6 0.4 1 1 1h14c0.6 0 1-0.4 1-1v-6zM15 11h-14v-6h14v6z"></path>
+<path fill="#444444" d="M2 6h1v4h-1v-4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M16 10v-4h-11v1h-2v-3h9v-4h-12v4h2v10h3v2h11v-4h-11v1h-2v-5h2v2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M16 0h-16v16h16v-16zM1 5v-4h14v4h-14zM1 10v-4h14v4h-14zM1 15v-4h14v4h-14z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 4v11h16v-14h-16v3zM14 2h1v1h-1v-1zM1 4h14v10h-14v-10z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 6h4v4h-4v-4z"></path>
+<path fill="#444444" d="M6 6h4v4h-4v-4z"></path>
+<path fill="#444444" d="M12 6h4v4h-4v-4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 15h15v1h-15v-1z"></path>
+<path fill="#444444" d="M0 11h3v3h-3v-3z"></path>
+<path fill="#444444" d="M4 9h3v5h-3v-5z"></path>
+<path fill="#444444" d="M8 5h3v9h-3v-9z"></path>
+<path fill="#444444" d="M12 0h3v14h-3v-14z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 1h16v3h-16v-3z"></path>
+<path fill="#444444" d="M0 6h16v3h-16v-3z"></path>
+<path fill="#444444" d="M0 11h16v3h-16v-3z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 2.5v0c0 0.8 0.7 1.5 1.5 1.5v0c0.8 0 1.5-0.7 1.5-1.5v0c0-0.8-0.7-1.5-1.5-1.5v0c-0.8 0-1.5 0.7-1.5 1.5z"></path>
+<path fill="#444444" d="M0 7.5v0c0 0.8 0.7 1.5 1.5 1.5v0c0.8 0 1.5-0.7 1.5-1.5v0c0-0.8-0.7-1.5-1.5-1.5v0c-0.8 0-1.5 0.7-1.5 1.5z"></path>
+<path fill="#444444" d="M0 12.5v0c0 0.8 0.7 1.5 1.5 1.5v0c0.8 0 1.5-0.7 1.5-1.5v0c0-0.8-0.7-1.5-1.5-1.5v0c-0.8 0-1.5 0.7-1.5 1.5z"></path>
+<path fill="#444444" d="M5 1h11v3h-11v-3z"></path>
+<path fill="#444444" d="M5 6h11v3h-11v-3z"></path>
+<path fill="#444444" d="M5 11h11v3h-11v-3z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M14 1v3h-3v-3h-6v3h-3v-3h-2v15h16v-15h-2zM3 15h-2v-2h2v2zM3 12h-2v-2h2v2zM3 9h-2v-2h2v2zM6 15h-2v-2h2v2zM6 12h-2v-2h2v2zM6 9h-2v-2h2v2zM9 15h-2v-2h2v2zM9 12h-2v-2h2v2zM9 9h-2v-2h2v2zM12 15h-2v-2h2v2zM12 12h-2v-2h2v2zM12 9h-2v-2h2v2zM15 15h-2v-2h2v2zM15 12h-2v-2h2v2zM15 9h-2v-2h2v2z"></path>
+<path fill="#444444" d="M3 0h1v3h-1v-3z"></path>
+<path fill="#444444" d="M12 0h1v3h-1v-3z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M14 6.2v7.8h-12v-12h10.5l1-1h-12.5v14h14v-9.8z"></path>
+<path fill="#444444" d="M7.9 10.9l-4.2-4.2 1.5-1.4 2.7 2.8 6.7-6.7 1.4 1.4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M2.1 3.1c0.2 1.3 0.4 1.6 0.4 2.9 0 0.8-1.5 1.5-1.5 1.5v1c0 0 1.5 0.7 1.5 1.5 0 1.3-0.2 1.6-0.4 2.9-0.3 2.1 0.8 3.1 1.8 3.1s2.1 0 2.1 0v-2c0 0-1.8 0.2-1.8-1 0-0.9 0.2-0.9 0.4-2.9 0.1-0.9-0.5-1.6-1.1-2.1 0.6-0.5 1.2-1.1 1.1-2-0.3-2-0.4-2-0.4-2.9 0-1.2 1.8-1.1 1.8-1.1v-2c0 0-1 0-2.1 0s-2.1 1-1.8 3.1z"></path>
+<path fill="#444444" d="M13.9 3.1c-0.2 1.3-0.4 1.6-0.4 2.9 0 0.8 1.5 1.5 1.5 1.5v1c0 0-1.5 0.7-1.5 1.5 0 1.3 0.2 1.6 0.4 2.9 0.3 2.1-0.8 3.1-1.8 3.1s-2.1 0-2.1 0v-2c0 0 1.8 0.2 1.8-1 0-0.9-0.2-0.9-0.4-2.9-0.1-0.9 0.5-1.6 1.1-2.1-0.6-0.5-1.2-1.1-1.1-2 0.2-2 0.4-2 0.4-2.9 0-1.2-1.8-1.1-1.8-1.1v-2c0 0 1 0 2.1 0s2.1 1 1.8 3.1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" 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="#444444" 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="#444444" 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="#444444" 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>
--- /dev/null
+<?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="#444444" d="M8 4c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"></path>
+<path fill="#444444" 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>
+</svg>
--- /dev/null
+<?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="#444444" d="M16 4c0 0 0-1-1-2s-1.9-1-1.9-1l-1.1 1.1v-2.1h-12v16h12v-8l4-4zM6.3 11.4l-0.6-0.6 0.3-1.1 1.5 1.5-1.2 0.2zM7.2 9.5l-0.6-0.6 5.2-5.2c0.2 0.1 0.4 0.3 0.6 0.5zM14.1 2.5l-0.9 1c-0.2-0.2-0.4-0.3-0.6-0.5l0.9-0.9c0.1 0.1 0.3 0.2 0.6 0.4zM11 15h-10v-14h10v2.1l-5.9 5.9-1.1 4.1 4.1-1.1 2.9-3v6z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M6 0h4v4h-4v-4z"></path>
+<path fill="#444444" d="M6 6h4v4h-4v-4z"></path>
+<path fill="#444444" d="M6 12h4v4h-4v-4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M8.1 14l6.4-7.2c0.6-0.7 0.6-1.8-0.1-2.5l-2.7-2.7c-0.3-0.4-0.8-0.6-1.3-0.6h-1.8c-0.5 0-1 0.2-1.4 0.6l-6.7 7.6c-0.6 0.7-0.6 1.9 0.1 2.5l2.7 2.7c0.3 0.4 0.8 0.6 1.3 0.6h11.4v-1h-7.9zM6.8 13.9c0 0 0-0.1 0 0l-2.7-2.7c-0.4-0.4-0.4-0.9 0-1.3l3.4-3.9h-1l-3 3.3c-0.6 0.7-0.6 1.7 0.1 2.4l2.3 2.3h-1.3c-0.2 0-0.4-0.1-0.6-0.2l-2.8-2.8c-0.3-0.3-0.3-0.8 0-1.1l3.5-3.9h1.8l3.5-4h1l-3.5 4 3.1 3.7-3.5 4c-0.1 0.1-0.2 0.1-0.3 0.2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" 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="#444444" d="M7 3h2v7h-2v-7z"></path>
+<path fill="#444444" d="M7 11h2v2h-2v-2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zM9 13h-2v-2h2v2zM9 10h-2v-7h2v7z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
+<path fill="#444444" d="M6.2 13h-0.7l-2-2.5 2-2.5h0.7l-2 2.5z"></path>
+<path fill="#444444" d="M9.8 13h0.7l2-2.5-2-2.5h-0.7l2 2.5z"></path>
+<path fill="#444444" d="M6.7 14h0.6l2.1-7h-0.8z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M12 7v-2l-1.2-0.4c-0.1-0.3-0.2-0.7-0.4-1l0.6-1.2-1.5-1.3-1.1 0.5c-0.3-0.2-0.6-0.3-1-0.4l-0.4-1.2h-2l-0.4 1.2c-0.3 0.1-0.7 0.2-1 0.4l-1.1-0.5-1.4 1.4 0.6 1.2c-0.2 0.3-0.3 0.6-0.4 1l-1.3 0.3v2l1.2 0.4c0.1 0.3 0.2 0.7 0.4 1l-0.5 1.1 1.4 1.4 1.2-0.6c0.3 0.2 0.6 0.3 1 0.4l0.3 1.3h2l0.4-1.2c0.3-0.1 0.7-0.2 1-0.4l1.2 0.6 1.4-1.4-0.6-1.2c0.2-0.3 0.3-0.6 0.4-1l1.2-0.4zM3 6c0-1.7 1.3-3 3-3s3 1.3 3 3c0 1.7-1.3 3-3 3s-3-1.3-3-3z"></path>
+<path fill="#444444" d="M7.5 6c0 0.828-0.672 1.5-1.5 1.5s-1.5-0.672-1.5-1.5c0-0.828 0.672-1.5 1.5-1.5s1.5 0.672 1.5 1.5z"></path>
+<path fill="#444444" d="M16 3v-1h-0.6c0-0.2-0.1-0.4-0.2-0.5l0.4-0.4-0.7-0.7-0.4 0.4c-0.2-0.1-0.3-0.2-0.5-0.2v-0.6h-1v0.6c-0.2 0-0.4 0.1-0.5 0.2l-0.4-0.4-0.7 0.7 0.4 0.4c-0.1 0.2-0.2 0.3-0.2 0.5h-0.6v1h0.6c0 0.2 0.1 0.4 0.2 0.5l-0.4 0.4 0.7 0.7 0.4-0.4c0.2 0.1 0.3 0.2 0.5 0.2v0.6h1v-0.6c0.2 0 0.4-0.1 0.5-0.2l0.4 0.4 0.7-0.7-0.4-0.4c0.1-0.2 0.2-0.3 0.2-0.5h0.6zM13.5 3.5c-0.6 0-1-0.4-1-1s0.4-1 1-1 1 0.4 1 1c0 0.6-0.4 1-1 1z"></path>
+<path fill="#444444" d="M15.4 11.8c-0.1-0.3-0.2-0.6-0.4-0.9l0.3-0.6-0.7-0.7-0.5 0.4c-0.3-0.2-0.6-0.3-0.9-0.4l-0.2-0.6h-1l-0.2 0.6c-0.3 0.1-0.6 0.2-0.9 0.4l-0.6-0.3-0.7 0.7 0.3 0.6c-0.2 0.3-0.3 0.6-0.4 0.9l-0.5 0.1v1l0.6 0.2c0.1 0.3 0.2 0.6 0.4 0.9l-0.3 0.6 0.7 0.7 0.6-0.3c0.3 0.2 0.6 0.3 0.9 0.4l0.1 0.5h1l0.2-0.6c0.3-0.1 0.6-0.2 0.9-0.4l0.6 0.3 0.7-0.7-0.4-0.5c0.2-0.3 0.3-0.6 0.4-0.9l0.6-0.2v-1l-0.6-0.2zM12.5 14c-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>
--- /dev/null
+<?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="#444444" d="M12.6 4c-0.2 0-0.4 0-0.6 0 0-0.2-0.2-0.6-0.4-0.8s-0.5-0.4-1.1-0.4c-0.2 0-0.4 0-0.6 0.1-0.1-0.2-0.2-0.3-0.3-0.5-0.2-0.2-0.5-0.4-1.1-0.4-0.8 0-1.2 0.5-1.4 1-0.1 0-0.3-0.1-0.5-0.1-0.5 0-0.8 0.2-1.1 0.4-0.5 0.6-0.5 1.4-0.5 1.5v0.4c-0.6 0-1.1 0.2-1.4 0.5-0.6 0.7-0.6 1.6-0.6 2.8 0 0.2 0 0.5 0 0.7 0 1.4 0.7 2.1 1.4 2.8l0.3 0.4c1.3 1.2 2.5 1.6 5.1 1.6 2.9 0 4.2-1.6 4.2-5.1v-2.5c0-0.7-0.2-2.1-1.4-2.4zM10.5 3.8c0.4 0 0.5 0.4 0.5 0.6v0.8c0 0.3 0.2 0.5 0.4 0.5 0.3 0 0.5-0.1 0.5-0.4 0 0 0-0.4 0.4-0.3 0.6 0.2 0.7 1.1 0.7 1.3 0 0 0 0 0 0v2.6c0 3.4-1.3 4.1-3.2 4.1-2.4 0-3.3-0.3-4.3-1.3-0.1-0.1-0.2-0.2-0.4-0.4-0.7-0.7-1.1-1.1-1.1-2.1 0-0.2 0-0.3 0-0.6 0-1 0-1.8 0.3-2.1 0.1-0.2 0.4-0.3 0.7-0.3v0.8l-0.3 1.2c0 0.1 0 0.1 0.1 0.1 0.1 0.1 0.2 0 0.2 0l1-1.2c0 0 0-0.1 0-0.1v-2c0-0.1 0-0.6 0.2-0.8 0.1-0.1 0.2-0.2 0.4-0.2 0.3 0 0.4 0.2 0.4 0.4v0.4c0 0.2 0.2 0.5 0.5 0.5s0.5-0.3 0.5-0.5v-1.3c0-0.1 0-0.5 0.5-0.5 0.3 0 0.5 0.2 0.5 0.5v1.2c0 0.3 0.2 0.6 0.5 0.6s0.5-0.3 0.5-0.5v-0.5c0-0.3 0.2-0.5 0.5-0.5z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M13 1h-10l-2.7 8h15.4z"></path>
+<path fill="#444444" d="M0 10v5h16v-5h-16zM3 13h-1v-1h1v1zM7 13h-3v-1h3v1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15 6v-2h-2.6l0.6-2.8-2-0.4-0.7 3.2h-3l0.7-2.8-2-0.4-0.7 3.2h-3.3v2h2.9l-0.9 4h-3v2h2.6l-0.6 2.8 2 0.4 0.7-3.2h3l-0.7 2.8 2 0.4 0.7-3.2h3.3v-2h-2.9l0.9-4h3zM9 10h-3l1-4h3l-1 4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M7 5h3v11h-3v-11z"></path>
+<path fill="#444444" d="M10.5 2c0 1.105-0.895 2-2 2s-2-0.895-2-2c0-1.105 0.895-2 2-2s2 0.895 2 2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 0v16h16v-16h-16zM1 3h4v12h-4v-12zM15 15h-9v-12h9v12z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M11.7 1.9c-1-1.2-2.6-1.9-4.2-1.9s-3.2 0.7-4.2 1.9c-1 1.1-1.4 2.6-1.2 4 0.2 1.5 0.8 2.6 2.1 3.7 0.5 0.4 0.7 0.8 0.9 1.2 0 0.1 0.1 0.2 0.1 0.3-0.1 0.1-0.2 0.2-0.2 0.4 0 0.3 0.2 0.5 0.5 0.5-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5c-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5c-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5h0.5c0 0.5 0.7 1 1.5 1s1.5-0.5 1.5-1h0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5 0-0.2-0.1-0.3-0.2-0.4 0-0.1 0.1-0.1 0.1-0.2 0.2-0.4 0.4-0.8 0.9-1.2 1.3-1.1 1.9-2.2 2.1-3.8 0.2-1.4-0.2-2.8-1.2-4zM12 5.8c-0.2 1.3-0.7 2.2-1.8 3.2-0.6 0.5-0.9 1-1.2 1.4-0.2 0.5-0.3 0.6-0.5 0.6h-2c-0.2 0-0.3-0.1-0.5-0.6-0.2-0.4-0.5-1-1.1-1.6-1.3-1.1-1.6-2-1.8-3-0.2-1.1 0.2-2.3 0.9-3.2 0.9-1 2.2-1.6 3.5-1.6s2.6 0.6 3.5 1.6c0.7 0.9 1.1 2.1 1 3.2z"></path>
+<path fill="#444444" d="M11 5h-1c0-0.7-0.8-2-2-2v-1c1.8 0 3 1.8 3 3z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 1h3v2h-3v-2z"></path>
+<path fill="#444444" d="M0 5h3v2h-3v-2z"></path>
+<path fill="#444444" d="M0 9h3v2h-3v-2z"></path>
+<path fill="#444444" d="M0 13h3v2h-3v-2z"></path>
+<path fill="#444444" d="M4 1h12v2h-12v-2z"></path>
+<path fill="#444444" d="M4 5h12v2h-12v-2z"></path>
+<path fill="#444444" d="M4 9h12v2h-12v-2z"></path>
+<path fill="#444444" d="M4 13h12v2h-12v-2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M4 0h12v4h-12v-4z"></path>
+<path fill="#444444" d="M4 6h12v4h-12v-4z"></path>
+<path fill="#444444" d="M4 12h12v4h-12v-4z"></path>
+<path fill="#444444" d="M1 0l-0.9 0.5 0.2 0.7 0.7-0.3v3.1h1v-4z"></path>
+<path fill="#444444" d="M2.2 13.9c0.3-0.2 0.5-0.5 0.5-0.8 0-0.5-0.4-1-1.3-1-0.5 0-1 0.1-1.2 0.3h-0.1l0.2 0.8 0.1-0.1c0.1-0.1 0.4-0.2 0.7-0.2s0.4 0.1 0.4 0.3c0 0.4-0.5 0.4-0.6 0.4h-0.4v0.7h0.4c0.3 0 0.6 0.1 0.6 0.4 0 0.2-0.2 0.4-0.6 0.4s-0.7-0.2-0.8-0.2l-0.1-0.1v0.9h0.1c0.2 0.2 0.6 0.3 1.1 0.3 1 0 1.6-0.5 1.6-1.2 0-0.4-0.2-0.8-0.6-0.9z"></path>
+<path fill="#444444" d="M0.1 6.4l0.3 1c0 0 0.7-0.6 1.2-0.3 1.1 0.8-1.6 2.4-1.6 2.4v0.5h3v-1h-1.2c0.6-0.5 1.2-1.2 1-1.9-0.5-1.9-2.7-0.7-2.7-0.7z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 4v11h16v-14h-16v3zM14 2h1v1h-1v-1zM1 4h14v10h-14v-10z"></path>
+<path fill="#444444" d="M3 6h2v1h-2v-1z"></path>
+<path fill="#444444" d="M6 6h7v1h-7v-1z"></path>
+<path fill="#444444" d="M3 8h2v1h-2v-1z"></path>
+<path fill="#444444" d="M6 8h7v1h-7v-1z"></path>
+<path fill="#444444" d="M3 10h2v1h-2v-1z"></path>
+<path fill="#444444" d="M6 10h7v1h-7v-1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M16 8l-3-3v2h-4v-4h2l-3-3-3 3h2v4h-4v-2l-3 3 3 3v-2h4v4h-2l3 3 3-3h-2v-4h4v2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M8 0l-8 2v10l8 4 8-4v-10l-8-2zM8 1l2.1 0.5-5.9 1.9-2.3-0.8 6.1-1.6zM8 14.9l-7-3.5v-8.1l3 1v3.4l1 0.3v-3.3l3 1v9.2zM8.5 4.8l-2.7-0.9 6.2-1.9 2.4 0.6-5.9 2.2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 0v16h16v-16h-16zM15 3h-1v1h1v1h-1v1h1v1h-1v1h1v1h-1v1h1v1h-1v1h1v1h-1v1h1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v-1h1v1h1v1z"></path>
+<path fill="#444444" d="M3 2h1v1h-1v-1z"></path>
+<path fill="#444444" d="M4 3h1v1h-1v-1z"></path>
+<path fill="#444444" d="M6 3h1v1h-1v-1z"></path>
+<path fill="#444444" d="M5 2h1v1h-1v-1z"></path>
+<path fill="#444444" d="M7 2h1v1h-1v-1z"></path>
+<path fill="#444444" d="M9 2h1v1h-1v-1z"></path>
+<path fill="#444444" d="M8 3h1v1h-1v-1z"></path>
+<path fill="#444444" d="M10 3h1v1h-1v-1z"></path>
+<path fill="#444444" d="M12 3h1v1h-1v-1z"></path>
+<path fill="#444444" d="M11 2h1v1h-1v-1z"></path>
+<path fill="#444444" d="M13 2h1v1h-1v-1z"></path>
+<path fill="#444444" d="M12 5h1v1h-1v-1z"></path>
+<path fill="#444444" d="M13 4h1v1h-1v-1z"></path>
+<path fill="#444444" d="M12 7h1v1h-1v-1z"></path>
+<path fill="#444444" d="M13 6h1v1h-1v-1z"></path>
+<path fill="#444444" d="M12 9h1v1h-1v-1z"></path>
+<path fill="#444444" d="M13 8h1v1h-1v-1z"></path>
+<path fill="#444444" d="M12 11h1v1h-1v-1z"></path>
+<path fill="#444444" d="M13 10h1v1h-1v-1z"></path>
+<path fill="#444444" d="M12 13h1v1h-1v-1z"></path>
+<path fill="#444444" d="M13 12h1v1h-1v-1z"></path>
+<path fill="#444444" d="M2 3h1v1h-1v-1z"></path>
+<path fill="#444444" d="M3 4h1v1h-1v-1z"></path>
+<path fill="#444444" d="M2 5h1v1h-1v-1z"></path>
+<path fill="#444444" d="M3 6h1v1h-1v-1z"></path>
+<path fill="#444444" d="M2 7h1v1h-1v-1z"></path>
+<path fill="#444444" d="M3 8h1v1h-1v-1z"></path>
+<path fill="#444444" d="M2 9h1v1h-1v-1z"></path>
+<path fill="#444444" d="M3 10h1v1h-1v-1z"></path>
+<path fill="#444444" d="M2 11h1v1h-1v-1z"></path>
+<path fill="#444444" d="M2 13h1v1h-1v-1z"></path>
+<path fill="#444444" d="M3 12h1v1h-1v-1z"></path>
+<path fill="#444444" d="M4 11h1v1h-1v-1z"></path>
+<path fill="#444444" d="M4 13h1v1h-1v-1z"></path>
+<path fill="#444444" d="M5 12h1v1h-1v-1z"></path>
+<path fill="#444444" d="M6 13h1v1h-1v-1z"></path>
+<path fill="#444444" d="M7 12h1v1h-1v-1z"></path>
+<path fill="#444444" d="M9 12h1v1h-1v-1z"></path>
+<path fill="#444444" d="M8 13h1v1h-1v-1z"></path>
+<path fill="#444444" d="M11 12h1v1h-1v-1z"></path>
+<path fill="#444444" d="M10 13h1v1h-1v-1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M5.6 11.6l-1.2-1.2c-0.8-0.2-2-0.1-2.7 1-0.8 1.1-0.3 2.8-1.7 4.6 0 0 3.5 0 4.8-1.3 1.2-1.2 1.2-2.2 1-3l-0.2-0.1z"></path>
+<path fill="#444444" d="M5.8 8.1c-0.2 0.3-0.5 0.7-0.7 1 0 0.2-0.1 0.3-0.2 0.4l1.5 1.5c0.1-0.1 0.3-0.2 0.4-0.3 0.3-0.2 0.7-0.4 1-0.7 0.4 0 0.6-0.2 0.8-0.4l-2.2-2.2c-0.2 0.2-0.4 0.4-0.6 0.7z"></path>
+<path fill="#444444" d="M15.8 0.2c-0.3-0.3-0.7-0.3-1-0.1 0 0-3 2.5-5.9 5.1-0.4 0.4-0.7 0.7-1.1 1-0.2 0.2-0.4 0.4-0.6 0.5l2.1 2.1c0.2-0.2 0.4-0.4 0.5-0.7 0.3-0.4 0.6-0.7 0.9-1.1 2.5-3 5.1-5.9 5.1-5.9 0.3-0.2 0.3-0.6 0-0.9z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
+<path fill="#444444" d="M4 11.5v2.5h8v-1.7c0 0 0.1-1.3-1.3-1.5-1.3-0.2-1.5 0.4-2.5 0.5-0.8 0-0.6-1.3-2.2-1.3-1.2 0-2 1.5-2 1.5z"></path>
+<path fill="#444444" d="M12 8.5c0 0.828-0.672 1.5-1.5 1.5s-1.5-0.672-1.5-1.5c0-0.828 0.672-1.5 1.5-1.5s1.5 0.672 1.5 1.5z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M11 6.5v-5.5h1v-1h-8v1h1v5.5c0 0-2 1.5-2 3.5 0 0.5 1.9 0.7 4 0.7v2.2c0 0.7 0.2 1.4 0.5 2.1l0.5 1 0.5-1c0.3-0.6 0.5-1.3 0.5-2.1v-2.2c2.1 0 4-0.3 4-0.7 0-2-2-3.5-2-3.5zM7 6.6c0 0-0.5 0.3-1.6 1.4-1 1-1.5 1.9-1.5 1.9s0.1-1 0.8-1.9c0.9-1.1 1.3-1.4 1.3-1.4v-5.6h1v5.6z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M11.6 5c-0.2 0-0.5 0-0.6 0 0-0.2-0.2-0.6-0.4-0.8s-0.6-0.4-1.1-0.4c-0.2 0-0.4 0-0.6 0.1-0.1-0.2-0.2-0.3-0.3-0.5-0.2-0.2-0.5-0.4-1.1-0.4-0.2 0-0.4 0-0.5 0.1v-1.7c0-0.6-0.4-1.4-1.4-1.4-0.4 0-0.8 0.2-1.1 0.4-0.5 0.6-0.5 1.4-0.5 1.4v4.3c-0.6 0.1-1.1 0.3-1.4 0.6-0.6 0.7-0.6 1.6-0.6 2.8 0 0.2 0 0.5 0 0.7 0 1.4 0.7 2.1 1.4 2.8l0.3 0.4c1.3 1.2 2.4 1.6 5.1 1.6 2.9 0 4.2-1.6 4.2-5.1v-2.5c0-0.7-0.2-2.1-1.4-2.4zM12 7.4v2.6c0 3.4-1.3 4.1-3.2 4.1-2.4 0-3.3-0.3-4.3-1.3-0.1-0.1-0.2-0.2-0.4-0.4-0.7-0.8-1.1-1.2-1.1-2.2 0-0.2 0-0.5 0-0.7 0-1 0-1.7 0.3-2.1 0.1-0.1 0.4-0.2 0.7-0.2v0.5l-0.3 1.5c0 0.1 0 0.1 0.1 0.2s0.2 0 0.2 0l1-1.2c0-0.1 0-0.2 0-0.2v-6.2c0-0.1 0-0.5 0.2-0.7 0.1 0 0.2-0.1 0.4-0.1 0.3 0 0.4 0.3 0.4 0.4v3.1c0 0 0 0 0 0v1.2c0 0.3 0.2 0.6 0.5 0.6s0.5-0.3 0.5-0.5v-1.3c0 0 0 0 0 0 0-0.1 0.1-0.5 0.5-0.5 0.3 0 0.5 0.1 0.5 0.4v1.3c0 0.3 0.2 0.6 0.5 0.6s0.5-0.3 0.5-0.5v-0.7c0-0.1 0.1-0.3 0.5-0.3 0.2 0 0.3 0.1 0.3 0.1 0.2 0.1 0.2 0.4 0.2 0.4v0.8c0 0.3 0.2 0.5 0.4 0.5 0.3 0 0.5-0.1 0.5-0.4 0-0.1 0.1-0.2 0.2-0.3 0 0 0.1 0 0.2 0 0.6 0.2 0.7 1.2 0.7 1.5 0-0.1 0-0.1 0 0z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M14.9 0.9c-1.1-1-2.5-1.3-3.1-0.4-0.7 1.1 0.5 1.7-0.3 2.5-0.5 0.6-2-0.8-2-0.8l-0.8-0.8-1.4 1.4c-0.6 0.7-2.1 1.5-2.6 1.1-0.7-0.6 0.1-1.8-0.5-2.6-0.7-1-2.1-0.8-3 0.3-1 1.1-1.4 2.4-0.5 3 1.1 0.7 1.9-0.3 2.7 0.5 0.4 0.4-0.2 1.7-0.5 2.1l-2.3 2.3 6.5 6.5 1.7-1.7c0.7-0.7 1.5-2 1.1-2.4-0.6-0.7-1.7 0.1-2.5-0.4-1-0.7-0.8-2 0.3-3s2.5-1.3 3.1-0.4c0.7 1.1-0.4 1.8 0.4 2.6 0.4 0.4 1.6-0.2 2-0.6l2.1-2.1-1.1-1.1c-0.6-0.6-1.9-2-1.4-2.5 0.6-0.7 1.7 0.2 2.5-0.4 0.9-0.8 0.6-2.1-0.4-3.1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M10 0h-8v16h12v-12l-4-4zM13 15h-10v-14h6v4h4v10zM10 4v-3l3 3h-3z"></path>
+<path fill="#444444" d="M4.7 7.7l-0.7-0.7v3h3l-1.2-1.2c0.4-0.8 1.3-1.3 2.2-1.3 1.4 0 2.5 1.1 2.5 2.5h1.5c0-2.2-1.8-4-4-4-1.3 0-2.5 0.7-3.3 1.7z"></path>
+<path fill="#444444" d="M9.8 11.8c-0.5 0.5-1.1 0.8-1.8 0.7-1 0-1.9-0.6-2.3-1.5h-1.6c0.4 1.7 2 3 3.8 3 1.1 0 2.1-0.5 2.8-1.2l1.3 1.2v-3h-3l0.8 0.8z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M7 0h2v3h-2v-3z"></path>
+<path fill="#444444" d="M6 4v3h1v9h2v-9h1v-3z"></path>
+<path fill="#444444" d="M2 0h2v8h-2v-8z"></path>
+<path fill="#444444" d="M1 9v3h1v4h2v-4h1v-3z"></path>
+<path fill="#444444" d="M12 0h2v10h-2v-10z"></path>
+<path fill="#444444" d="M11 11v3h1v2h2v-2h1v-3z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 15h15v-13h-15v13zM13 3h1v1h-1v-1zM14 14h-13v-4h13v4zM14 9h-13v-4h13v4z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M0 1v15h16v-15h-16zM5 15h-4v-2h4v2zM5 12h-4v-2h4v2zM5 9h-4v-2h4v2zM5 6h-4v-2h4v2zM10 15h-4v-2h4v2zM10 12h-4v-2h4v2zM10 9h-4v-2h4v2zM10 6h-4v-2h4v2zM15 15h-4v-2h4v2zM15 12h-4v-2h4v2zM15 9h-4v-2h4v2zM15 6h-4v-2h4v2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M6 0h10v4h-10v-4z"></path>
+<path fill="#444444" d="M6 6h10v4h-10v-4z"></path>
+<path fill="#444444" d="M6 12h10v4h-10v-4z"></path>
+<path fill="#444444" d="M3 1v2h-2v-2h2zM4 0h-4v4h4v-4z"></path>
+<path fill="#444444" d="M3 13v2h-2v-2h2zM4 12h-4v4h4v-4z"></path>
+<path fill="#444444" d="M5.3 5.9l-0.6-0.8-0.9 0.9h-3.8v4h4v-2.8l1.3-1.3zM2.7 7l-0.7 0.7-0.8-0.7h1.5zM1 8.2l0.9 0.8h-0.9v-0.8zM3 9h-0.9l0.9-0.9v0.9z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
+<path fill="#444444" d="M4 7h8v1h-8v-1z"></path>
+<path fill="#444444" d="M4 9h8v1h-8v-1z"></path>
+<path fill="#444444" d="M4 11h8v1h-8v-1z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M10.3 8.2l-0.9 0.9 0.9 0.9-1.2 1.2 4.3 4.3c0.6 0.6 1.5 0.6 2.1 0s0.6-1.5 0-2.1l-5.2-5.2zM14.2 15c-0.4 0-0.8-0.3-0.8-0.8 0-0.4 0.3-0.8 0.8-0.8s0.8 0.3 0.8 0.8c0 0.5-0.3 0.8-0.8 0.8z"></path>
+<path fill="#444444" d="M3.6 8l0.9-0.6 1.5-1.7 0.9 0.9 0.9-0.9-0.1-0.1c0.2-0.5 0.3-1 0.3-1.6 0-2.2-1.8-4-4-4-0.6 0-1.1 0.1-1.6 0.3l2.9 2.9-2.1 2.1-2.9-2.9c-0.2 0.5-0.3 1-0.3 1.6 0 2.1 1.6 3.7 3.6 4z"></path>
+<path fill="#444444" d="M8 10.8l0.9-0.8-0.9-0.9 5.7-5.7 1.2-0.4 1.1-2.2-0.7-0.7-2.3 1-0.5 1.2-5.6 5.7-0.9-0.9-0.8 0.9c0 0 0.8 0.6-0.1 1.5-0.5 0.5-1.3-0.1-2.8 1.4-0.5 0.5-2.1 2.1-2.1 2.1s-0.6 1 0.6 2.2 2.2 0.6 2.2 0.6 1.6-1.6 2.1-2.1c1.4-1.4 0.9-2.3 1.3-2.7 0.9-0.9 1.6-0.2 1.6-0.2zM4.9 10.4l0.7 0.7-3.8 3.8-0.7-0.7z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M2 5v1h1v9c0 0 1.1 1 4.5 1s4.5-1 4.5-1v-9h1v-1h-11zM6 14h-1v-7h1v7zM8 14h-1v-7h1v7zM10 14h-1v-7h1v7z"></path>
+<path fill="#444444" d="M12 3c0 0 0-0.5-2-0.8v-0.7c0-0.8-0.7-1.5-1.5-1.5h-2c-0.8 0-1.5 0.7-1.5 1.5v0.7c-1.6 0.3-2 0.8-2 0.8h-1v1h11v-1h-1zM6 1.5c0-0.3 0.2-0.5 0.5-0.5h2c0.2 0 0.5 0.2 0.5 0.5v0.6c0-0.1-0.9-0.1-1.5-0.1s-1.1 0-1.5 0.1v-0.6z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M8 1l-8 14h16l-8-14zM8 13c-0.6 0-1-0.4-1-1s0.4-1 1-1 1 0.4 1 1c0 0.6-0.4 1-1 1zM7 10v-4h2v4h-2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
+<path fill="#444444" d="M7 3h-2v2h-2v2h2v2h2v-2h2v-2h-2z"></path>
+</svg>
--- /dev/null
+<?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="#444444" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
+<path fill="#444444" d="M3 5h6v2h-6v-2z"></path>
+</svg>
CMDUndo, CMDRedo, CMDCut, CMDCopy, CMDPaste, CMDHelp,
CMDAbout, CMDOptions,
CMDViewGTExp, CMDViewProps, CMDViewProj, CMDViewProjProps, CMDViewErrors, CMDViewSolution, CMDViewEditor, CMDViewProperties,
+ CMDViewToolbox,
CMDCompile;
void initCommands () {
{ Caption = "Editor Pane"};
CMDViewProperties = new Command(new Action(() => loadDockWindow ("#Crow.Coding.ui.DockWindows.winProperties.crow")))
{ Caption = "Properties"};
+ CMDViewToolbox = new Command(new Action(() => loadDockWindow ("#Crow.Coding.ui.DockWindows.winToolbox.crow")))
+ { Caption = "Toolbox"};
CMDViewGTExp = new Command(new Action(() => loadWindow ("#Crow.Coding.ui.GTreeExplorer.crow"))) { Caption = "Graphic Tree Explorer"};
CMDViewProps = new Command(new Action(() => loadWindow ("#Crow.Coding.ui.MemberView.crow"))) { Caption = "Properties View"};
dw = loadDockWindow ("#Crow.Coding.ui.DockWindows.winSolution.crow");
dw.DockingPosition = Alignment.Right;
dw.Dock (mainDock.Children [0] as DockStack);
+ dw = loadDockWindow ("#Crow.Coding.ui.DockWindows.winToolbox.crow");
+ dw.DockingPosition = Alignment.Left;
+ dw.Dock (mainDock.Children [0] as DockStack);
+
}
void loadProjProps () {
using System;
using Crow;
using System.Globalization;
+using System.Threading;
+using System.Collections.Generic;
+using System.Diagnostics;
namespace Crow.Coding
{
HoverWidget = null;
return false;
}
+
+ protected override void processLayouting ()
+ {
+ #if MEASURE_TIME
+ layoutingMeasure.StartCycle();
+ #endif
+
+ if (Monitor.TryEnter (LayoutMutex)) {
+ DiscardQueue = new Queue<LayoutingQueueItem> ();
+ LayoutingQueueItem lqi;
+ while (LayoutingQueue.Count > 0) {
+ lqi = LayoutingQueue.Dequeue ();
+ Console.WriteLine (lqi.ToString ());
+ #if DEBUG_LAYOUTING
+ currentLQI = lqi;
+ curLQIsTries.Add(currentLQI);
+ #endif
+ lqi.ProcessLayouting ();
+ }
+ LayoutingQueue = DiscardQueue;
+ Monitor.Exit (LayoutMutex);
+ DiscardQueue = null;
+ }
+
+ #if MEASURE_TIME
+ layoutingMeasure.StopCycle();
+ #endif
+ }
}
}
--- /dev/null
+//
+// GraphicObjectDesignContainer.cs
+//
+// Author:
+// Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using Cairo;
+
+namespace Crow.Coding
+{
+ public class GraphicObjectDesignContainer
+ {
+ public Type CrowType;
+
+ public string IconPath {
+ get { return "#Crow.Coding.icons.toolbox." + CrowType.FullName + ".svg"; }
+ }
+ public string DisplayName {
+ get { return CrowType.Name; }
+ }
+
+ public GraphicObjectDesignContainer (Type crowType)
+ {
+ CrowType = crowType;
+ }
+ int dis = 32;
+ void onStartDrag (object sender, EventArgs e)
+ {
+ GraphicObject go = sender as GraphicObject;
+
+ lock (go.IFace.UpdateMutex) {
+ go.IFace.DragImageHeight = dis;
+ go.IFace.DragImageWidth = dis;
+ SvgPicture pic = new SvgPicture ();
+ pic.Load (IconPath);
+ ImageSurface img = new ImageSurface (Format.Argb32, dis, dis);
+ using (Context ctx = new Context (img)) {
+ Rectangle r = new Rectangle (0, 0, dis, dis);
+ pic.Paint (ctx, r);
+ ctx.Operator = Operator.In;
+ ctx.SetSourceRGBA (1.0, 1.0, 1.0, 1.0);
+ ctx.Rectangle (r);
+ ctx.Fill ();
+
+ }
+ go.IFace.DragImage = img;
+ }
+ }
+ void onEndDrag (object sender, DragDropEventArgs e)
+ {
+ (sender as GraphicObject).IFace.ClearDragImage ();
+
+ }
+ void onDrop (object sender, DragDropEventArgs e)
+ {
+ ImlVisualEditor imlVE = e.DropTarget as ImlVisualEditor;
+ if (imlVE != null)
+ imlVE.ClearDraggedObj (false);
+ (sender as GraphicObject).IFace.ClearDragImage ();
+ }
+ }
+}
+
break;
}
}
+ bool tryAddDraggedObjTo(GraphicObject g){
+ lock (imlVE.UpdateMutex) {
+ if (g.GetType ().IsSubclassOf (typeof(Container))) {
+ Container c = g as Container;
+ c.SetChild (draggedObj);
+ GraphicTree [0].design_HasChanged = true;
+ } else if (g.GetType ().IsSubclassOf (typeof(Group))) {
+ Group c = g as Group;
+ c.AddChild (draggedObj);
+ } else
+ return false;
+ GraphicTree [0].design_HasChanged = true;
+ draggedObjContainer = g;
+ }
+ return true;
+ }
+ bool isPossibleContainer (GraphicObject g){
+ if (g.GetType().IsSubclassOf(typeof(Container))){
+ Container c = g as Container;
+ return c.Child == null;
+ }
+ return g.GetType ().IsSubclassOf (typeof(Group));
+ }
+ void removeDraggedObjFrom(){
+ if (draggedObjContainer == null)
+ return;
+ lock (imlVE.UpdateMutex) {
+ if (draggedObjContainer.GetType().IsSubclassOf(typeof(Container))){
+ Container c = draggedObjContainer as Container;
+ c.SetChild (null);
+ GraphicTree [0].design_HasChanged = true;
+ //Console.WriteLine ("remove {0} from {1}", draggedObj, c);
+ }else if (draggedObjContainer.GetType().IsSubclassOf(typeof(Group))){
+ Group c = draggedObjContainer as Group;
+ c.RemoveChild (draggedObj);
+ GraphicTree [0].design_HasChanged = true;
+ //Console.WriteLine ("remove {0} from {1}", draggedObj, c);
+ }//else
+ // Console.WriteLine ("Error removing dragged obj");
+ }
+ draggedObjContainer = null;
+ }
+ public void ClearDraggedObj (bool removeFromTree = true) {
+ //Console.WriteLine ("Clear dragged obj {0}, remove from tree = {1}", draggedObj, removeFromTree);
+ if (removeFromTree)
+ removeDraggedObjFrom ();
+ draggedObjContainer = null;
+ if (draggedObj == null)
+ return;
+ if (removeFromTree)
+ draggedObj.Dispose ();
+ draggedObj = null;
+ }
public override void onMouseMove (object sender, MouseMoveEventArgs e)
{
- //base.onMouseMove (sender, e);
+ base.onMouseMove (sender, e);
+
GraphicObject oldHW = HoverWidget;
Rectangle scr = this.ScreenCoordinates (this.getSlot ());
ProcessMouseMove (e.X - scr.X, e.Y - scr.Y);
+
if (oldHW == HoverWidget)
return;
+
+ if (draggedObj != null) {
+ if (isPossibleContainer (HoverWidget) && draggedObjContainer != HoverWidget) {
+ removeDraggedObjFrom ();
+ tryAddDraggedObjTo (HoverWidget);
+ }
+ }
+
RegisterForRedraw ();
}
gr.SetDash (new double[]{ 5.0, 3.0 },0.0);
gr.Rectangle (hr, 1.0);
}
+
+ public GraphicObject draggedObj = null;
+ public GraphicObject draggedObjContainer = null;
+
+ protected override void onDragEnter (object sender, DragDropEventArgs e)
+ {
+ base.onDragEnter (sender, e);
+ GraphicObjectDesignContainer godc = e.DragSource.DataSource as GraphicObjectDesignContainer;
+ if (godc == null)
+ return;
+ Console.WriteLine ("IMLEditor Drag Enter");
+
+ lock (imlVE.UpdateMutex) {
+ draggedObj = imlVE.CreateITorFromIMLFragment ("<" + godc.CrowType.Name + "/>").CreateInstance ();
+ }
+ }
+ protected override void onDragLeave (object sender, DragDropEventArgs e)
+ {
+ base.onDragLeave (sender, e);
+
+ Console.WriteLine ("IMLEditor Drag Enter");
+
+ ClearDraggedObj ();
+ }
#endregion
void WidgetCheckOver (GraphicObject go, MouseMoveEventArgs e){
}
}
- public void updateSource () {
- if (projFile == null)
- return;
- projFile.UpdateSource (this, (Instance as GraphicObject).GetIML ());
- }
+// public void updateSource () {
+// if (projFile == null)
+// return;
+// projFile.UpdateSource (this, (Instance as GraphicObject).GetIML ());
+// }
// public override void Paint (ref Context ctx)
// {
ProjectItem selectedItem = null;
object selectedItemElement = null;
ObservableList<ProjectItem> openedItems = new ObservableList<ProjectItem>();
+ ObservableList<GraphicObjectDesignContainer> toolboxItems;
public Dictionary<string, Style> Styling;
public Dictionary<string, string> DefaultTemplates;
if (StartupProject != null)
StartupProject.GetDefaultTemplates ();
}
+ public void updateToolboxItems () {
+ Type[] crowItems = AppDomain.CurrentDomain.GetAssemblies ()
+ .SelectMany (t => t.GetTypes ())
+ .Where (t => t.IsClass && !t.IsAbstract && t.IsPublic &&
+ t.Namespace == "Crow" && t.IsSubclassOf(typeof(GraphicObject)) &&
+ t.GetCustomAttribute<DesignIgnore>(false) == null).ToArray ();
+ ToolboxItems = new ObservableList<GraphicObjectDesignContainer> ();
+ foreach (Type ci in crowItems) {
+ toolboxItems.AddElement(new GraphicObjectDesignContainer(ci));
+ }
+ }
public bool GetProjectFileFromPath (string path, out ProjectFile pi){
pi = null;
return StartupProject == null ? false :
NotifyValueChanged ("OpenedItems", openedItems);
}
}
+
+ public ObservableList<GraphicObjectDesignContainer> ToolboxItems {
+ get { return toolboxItems; }
+ set {
+ if (toolboxItems == value)
+ return;
+ toolboxItems = value;
+ NotifyValueChanged ("ToolboxItems", toolboxItems);
+ }
+ }
public ProjectItem SelectedItem {
get { return selectedItem; }
set {
s.UserConfig = new Configuration (s.path + ".user");
s.ReloadStyling ();
s.ReloadDefaultTemplates ();
+ s.updateToolboxItems ();
return s;
} //LoadSolution
#endregion
}
#endregion
+ protected Node addChildNode (Node curNode, CodeLine cl, int tokPtr, string type = "") {
+ Node n = new Node () { Name = cl.Tokens [tokPtr].Content, StartLine = cl, Type = type };
+ curNode.AddChild (n);
+ if (cl.SyntacticNode == null)
+ cl.SyntacticNode = n;
+ SyntacticTreeDepth++;
+ return n;
+ }
+ protected void closeNodeAndGoUp (ref Node n, CodeLine cl, string type = ""){
+ while (n != null) {
+ if (n.Type == type) {
+ n.EndLine = cl;
+ n = n.Parent;
+ SyntacticTreeDepth--;
+ break;
+ }
+ n = n.Parent;
+ SyntacticTreeDepth--;
+ }
+ }
+ protected void closeNodeAndGoUp (ref Node n, CodeLine cl){
+ SyntacticTreeDepth--;
+ n.EndLine = cl;
+ n = n.Parent;
+ }
+
+ protected void initSyntaxAnalysis () {
+ RootNode = new Node () { Name = "RootNode", Type="Root" };
+ SyntacticTreeDepth = SyntacticTreeMaxDepth = 0;
+ }
+
+
protected void throwParserException(string msg){
throw new ParserException (currentLine, currentColumn, msg);
}
cl.EndingState = (int)curState;
}
- Node addChildNode (Node curNode, CodeLine cl, int tokPtr, string type = "") {
- Node n = new Node () { Name = cl.Tokens [tokPtr].Content, StartLine = cl, Type = type };
- curNode.AddChild (n);
- if (cl.SyntacticNode == null)
- cl.SyntacticNode = n;
- SyntacticTreeDepth++;
- return n;
- }
- void closeNodeAndGoUp (ref Node n, CodeLine cl, string type = ""){
- while (n != null) {
- if (n.Type == type) {
- n.EndLine = cl;
- n = n.Parent;
- SyntacticTreeDepth--;
- break;
- }
- n = n.Parent;
- SyntacticTreeDepth--;
- }
-// if (n.StartLine == cl){//prevent single line node
-// n.Parent.Children.Remove (n);
-// if (cl.SyntacticNode == n)
-// cl.SyntacticNode = null;
-// }else
-
- }
- void closeNodeAndGoUp (ref Node n, CodeLine cl){
- // if (n.StartLine == cl){//prevent single line node
- // n.Parent.Children.Remove (n);
- // if (cl.SyntacticNode == n)
- // cl.SyntacticNode = null;
- // }else
- SyntacticTreeDepth--;
- n.EndLine = cl;
- n = n.Parent;
- }
-
public override void SyntaxAnalysis ()
{
- RootNode = new Node () { Name = "RootNode", Type="Root" };
-
+ initSyntaxAnalysis ();
Node currentNode = RootNode;
- SyntacticTreeDepth = SyntacticTreeMaxDepth = 0;
int ptrLine = 0;
while (ptrLine < buffer.LineCount) {
editMutex.ExitWriteLock ();
LineUpadateEvent.Raise (this, new CodeBufferEventArgs (i));
}
+ public void RemoveLeadingTab (int l) {
+ if (this [l] [0] == '\t') {
+ UpdateLine (l, this [l].Content.Substring (1));
+ return;
+ }
+ int i = 0;
+ while (i < Interface.TabSize) {
+ if (this [l] [i] != ' ')
+ break;
+ i++;
+ }
+ if (i > 0)
+ UpdateLine (l, this [l].Content.Substring (i));
+ }
public void ToogleFolding (int line) {
if (!this [line].IsFoldable)
return;
selEndPos = CurrentPosition;
SelectionChanged.Raise (this, null);
}
+ public void SetSelectionOnFullLines () {
+ if (!SelectionInProgress)
+ return;
+ Point s = new Point (0, SelectionStart.Y);
+ Point e = new Point (this [SelectionEnd.Y].Length, SelectionEnd.Y);
+ selStartPos = s;
+ selEndPos = e;
+ SelectionChanged.Raise (this, null);
+ }
/// <summary>
/// Set selection in buffer to -1, empty selection
/// </summary>
#region Mouse handling
- void updateCurrentPosFromMouseLocalPos(){
+ int hoverLine = -1;
+ public int HoverLine {
+ get { return hoverLine; }
+ set {
+ if (hoverLine == value)
+ return;
+ hoverLine = value;
+ NotifyValueChanged ("HoverLine", hoverLine);
+ }
+ }
+ void updateHoverLine () {
+ int hvl = (int)Math.Max (0, Math.Floor (mouseLocalPos.Y / (fe.Ascent+fe.Descent)));
+ hvl = Math.Min (PrintedLines.Count, hvl);
+ HoverLine = buffer.IndexOf (PrintedLines[hvl]);
+ }
+ void updateCurrentPosFromMouseLocalPos(){
PrintedCurrentLine = (int)Math.Max (0, Math.Floor (mouseLocalPos.Y / (fe.Ascent+fe.Descent)));
int curVisualCol = ScrollX + (int)Math.Round ((mouseLocalPos.X - leftMargin) / fe.MaxXAdvance);
buffCol++;
}
buffer.CurrentColumn = buffCol;
-
-// if (mouseLocalPos.Y < 0)
-// ScrollY--;
}
public override void onMouseEnter (object sender, MouseMoveEventArgs e)
{
mouseLocalPos = e.Position - ScreenCoordinates(Slot).TopLeft - ClientRectangle.TopLeft;
+ updateHoverLine ();
+
if (!e.Mouse.IsButtonDown (MouseButton.Left)) {
if (mouseLocalPos.X < leftMargin)
IFace.MouseCursor = XCursor.Default;
case Key.RWin:
break;
case Key.Tab:
- buffer.Insert ("\t");
+ if (e.Shift) {
+ if (buffer.SelectionIsEmpty ||
+ (buffer.SelectionStart.Y == buffer.SelectionEnd.Y)) {
+ //TODO
+ break;
+ }
+ for (int i = buffer.SelectionStart.Y; i <= buffer.SelectionEnd.Y; i++)
+ buffer.RemoveLeadingTab (i);
+ buffer.SetSelectionOnFullLines ();
+ } else {
+ if (buffer.SelectionIsEmpty ||
+ (buffer.SelectionStart.Y == buffer.SelectionEnd.Y)) {
+ buffer.Insert ("\t");
+ break;
+ }
+ for (int i = buffer.SelectionStart.Y; i <= buffer.SelectionEnd.Y; i++) {
+ buffer.UpdateLine (i, "\t" + buffer [i].Content);
+ }
+ }
+
break;
case Key.F8:
toogleFolding (buffer.CurrentLine);
}
break;
case ',':
- if (curState != States.init || curState != States.classNames )
+ if (curState != States.init && curState != States.classNames )
throw new ParserException (currentLine, currentColumn, "Unexpected char ','");
readAndResetCurrentTok (TokenType.OperatorOrPunctuation, true);
curState = States.classNames;
}
public override void SyntaxAnalysis ()
{
- RootNode = new Node () { Name = "RootNode", Type="Root" };
-
+ initSyntaxAnalysis ();
Node currentNode = RootNode;
for (int i = 0; i < buffer.LineCount; i++) {
while (tokPtr < cl.Tokens.Count) {
switch (cl.Tokens [tokPtr].Type) {
case TokenType.OpenBlock:
- Node newElt = new Node () { Name = cl.Tokens [tokPtr].Content, StartLine = cl };
- currentNode.AddChild (newElt);
- currentNode = newElt;
- if (cl.SyntacticNode == null)
- cl.SyntacticNode = newElt;
+ currentNode = addChildNode (currentNode, cl, tokPtr, "style");
break;
case TokenType.CloseBlock:
- currentNode.EndLine = cl;
- currentNode = currentNode.Parent;
+ closeNodeAndGoUp (ref currentNode, cl, "style");
break;
}
tokPtr++;
cl.EndingState = (int)curState;
}
+
public override void SyntaxAnalysis ()
{
- RootNode = new Node () { Name = "RootNode", Type="Root" };
-
+ initSyntaxAnalysis ();
Node currentNode = RootNode;
- SyntacticTreeDepth = SyntacticTreeMaxDepth = 0;
for (int i = 0; i < buffer.LineCount; i++) {
CodeLine cl = buffer[i];
switch ((XMLParser.TokenType)cl.Tokens [tokPtr].Type) {
case TokenType.ElementStart:
tokPtr++;
- Node newElt = new Node () { Name = cl.Tokens [tokPtr].Content, StartLine = cl };
- currentNode.AddChild (newElt);
- currentNode = newElt;
- if (cl.SyntacticNode == null)
- cl.SyntacticNode = newElt;
- SyntacticTreeDepth++;
+ currentNode = addChildNode (currentNode, cl, tokPtr, "Element");
break;
case TokenType.ElementEnd:
tokPtr++;
if (tokPtr < cl.Tokens.Count) {
if ((XMLParser.TokenType)cl.Tokens [tokPtr].Type == TokenType.ElementName &&
- cl.Tokens [tokPtr].Content != currentNode.Name)
+ cl.Tokens [tokPtr].Content != currentNode.Name)
throw new ParserException (currentLine, currentColumn, "Closing tag mismatch");
}
- currentNode.EndLine = cl;
- currentNode = currentNode.Parent;
- SyntacticTreeDepth--;
+ closeNodeAndGoUp (ref currentNode, cl, "Element");
break;
case TokenType.ElementClosing:
//currentNode = currentNode.Parent;
<MenuItem Command="{CMDViewSolution}"/>
<MenuItem Command="{CMDViewEditor}"/>
<MenuItem Command="{CMDViewProperties}"/>
+ <MenuItem Command="{CMDViewToolbox}"/>
<MenuItem Command="{CMDViewErrors}"/>
<MenuItem Command="{CMDViewGTExp}"/>
<MenuItem Command="{CMDViewProps}"/>
<MenuItem Command="{CMDHelp}"/>
</MenuItem>
</Menu>
+ <Label DataSource="{CurrentSolution}" Text="{SelectedItemElement}" Width="Stretched"/>
<Docker Name="mainDock">
<DockStack />
<!-- <DockWindow DataSource="{CurrentSolution}" Name="winEditor" Caption="Edit View" Width="70%" Height="80%">
--- /dev/null
+<?xml version="1.0"?>
+<Border Background="{./Background}" Name="Content"
+ Foreground="Transparent" CornerRadius="{./CornerRadius}" BorderWidth="1"
+ MouseDown="{Foreground=vgradient|0:Black|0.05:Gray|0.85:Gray|1:White}"
+ MouseUp="{Foreground=vgradient|0:White|0.2:Gray|0.9:Gray|1:Black}">
+ <Image Path="{./Caption}" Margin="2" Width="20" Height="20" />
+</Border>
--- /dev/null
+<?xml version="1.0"?>
+<DockWindow DataSource="{CurrentSolution}" Name="winToolbox" Caption="Toolbox" Width="10%" Height="80%">
+ <ListBox Margin="10" Data="{ToolboxItems}" SelectionBackground="SkyBlue">
+ <Template>
+ <Wrapper Name="ItemsContainer" Orientation="Vertical" Margin="10" Spacing="3"/>
+ </Template>
+ <ItemTemplate>
+ <Container Fit="true" Focusable="true" Tooltip="{DisplayName}" Margin="2" AllowDrag="true"
+ StartDrag="onStartDrag" EndDrag="onEndDrag" Drop="onDrop">
+ <Border Background="Silver" Margin="0"
+ Foreground="Transparent" BorderWidth="1"
+ MouseDown="{Foreground=vgradient|0:Black|0.05:Gray|0.85:Gray|1:White}"
+ MouseUp="{Foreground=vgradient|0:White|0.2:Gray|0.9:Gray|1:Black}">
+ <Image Path="{IconPath}" Margin="2" Width="20" Height="20" />
+ </Border>
+ </Container>
+ </ItemTemplate>
+ </ListBox>
+</DockWindow>
Width = "8";
Height = "14";
Background = "White";
-}
\ No newline at end of file
+}
<TabItem Caption="{DisplayName}" QueryClose="OnQueryClose">
<VerticalStack>
<Label Width="Stretched" Margin="1" Text="{HoverWidget}"/>
- <ImlVisualEditor Height="60%" Margin="0" MinimumSize="10,10" Foreground="SkyBlue"
+ <ImlVisualEditor Height="60%" Margin="0" MinimumSize="10,10" Foreground="SkyBlue"
+ AllowDrop="true"
ProjectNode="{}" SelectedItem="{²SelectedItem}"
Name="crowContainer" Background="Onyx"/>
<Splitter/>
Height="14" />
<HorizontalStack Height="Fit">
<GraphicObject Height="5" Width="Stretched"/>
- <GraphicObject Background="Red" Width="5" Height="5" Visible="{../../editor.IsDirty}"/>
- <Label Text="Line:"/>
+ <GraphicObject Background="Red" Width="5" Height="5" Visible="{IsDirty}"/>
+ <Label Text="Line:" Foreground="Gray"/>
<Label Text="{CurrentLine}"/>
- <Label Text="column:"/>
+ <GraphicObject Height="5" Width="10"/>
+ <Label Text="column:" Foreground="Gray"/>
<Label Text="{CurrentColumn}"/>
- <Label Text="ScrollX:"/>
+ <GraphicObject Height="5" Width="10"/>
+ <Label Text="ScrollX:" Foreground="Gray"/>
<Label Text="{../../editor.ScrollX}"/>
</HorizontalStack>
</VerticalStack>
Slider {
Background = "vgradient|0:Black|0.1:Gray|0.9:Gray|1:LightGray";
Foreground = "Gray";
- Width = "Fit";
+ Height = "10";
+ Value="5";
}
Splitter {
Focusable = "true";
/// <summary>
/// simple squarred rgb color selector
/// </summary>
+ [DesignIgnore]
public class ColorSelector : GraphicObject
{
#region CTOR
namespace Crow
{
+ [DesignIgnore]
public class DockStack : GenericStack
{
Docker rootDock { get { return LogicalParent as Docker; }}
namespace Crow
{
+ [DesignIgnore]
public class GraduatedSlider : Slider
{
#region CTOR
public event EventHandler Disabled;
#region DragAndDrop Events
- public event EventHandler StartDrag;
- public event EventHandler DragEnter;
- public event EventHandler DragLeave;
- public event EventHandler EndDrag;
- public event EventHandler Drop;
+ public event EventHandler<DragDropEventArgs> StartDrag;
+ public event EventHandler<DragDropEventArgs> DragEnter;
+ public event EventHandler<DragDropEventArgs> DragLeave;
+ public event EventHandler<DragDropEventArgs> EndDrag;
+ public event EventHandler<DragDropEventArgs> Drop;
#endregion
/// <summary>
IFace.HoverWidget = null;
IsDragged = true;
StartDrag.Raise (this, e);
+ #if DEBUG_DRAGNDROP
Debug.WriteLine(this.ToString() + " : START DRAG => " + e.ToString());
+ #endif
}
/// <summary>
/// Occured when dragging ends without dropping
protected virtual void onEndDrag (object sender, DragDropEventArgs e){
IsDragged = false;
EndDrag.Raise (this, e);
+ #if DEBUG_DRAGNDROP
Debug.WriteLine(this.ToString() + " : END DRAG => " + e.ToString());
+ #endif
}
protected virtual void onDragEnter (object sender, DragDropEventArgs e){
e.DropTarget = this;
DragEnter.Raise (this, e);
+ #if DEBUG_DRAGNDROP
Debug.WriteLine(this.ToString() + " : DRAG Enter => " + e.ToString());
+ #endif
}
protected virtual void onDragLeave (object sender, DragDropEventArgs e){
e.DropTarget = null;
DragLeave.Raise (this, e);
+ #if DEBUG_DRAGNDROP
Debug.WriteLine(this.ToString() + " : DRAG Leave => " + e.ToString());
+ #endif
}
protected virtual void onDrop (object sender, DragDropEventArgs e){
IsDragged = false;
Drop.Raise (this, e);
//e.DropTarget.onDragLeave (this, e);//raise drag leave in target
+ #if DEBUG_DRAGNDROP
Debug.WriteLine(this.ToString() + " : DROP => " + e.ToString());
- }
- public virtual void OnDragMove(object sender, MouseMoveEventArgs e, DragDropEventArgs dde)
- {
-
+ #endif
}
public bool IsDropTarget {
get { return IFace.DragAndDropOperation?.DropTarget == this; }
IFace.currentLQI.NewSlot = Slot;
Debug.WriteLine ("\t\t{0} => {1}",LastSlots,Slot);
#endif
+ #if DESIGN_MODE
+ if (IFace.GetType().Name == "DesignInterface"){
+ Debug.WriteLine ("\t\t{2}: {0} => {1}",LastSlots,Slot,this.name);
+ }
+ #endif
switch (layoutType) {
case LayoutingType.Width:
Disabled.Raise (this, e);
}
protected virtual void onParentChanged(object sender, DataSourceChangeEventArgs e) {
+// if (e.NewDataSource != null) {
+// if (width == Measure.Inherit)
+// RegisterForLayouting (LayoutingType.Width);
+// if (height == Measure.Inherit)
+// RegisterForLayouting (LayoutingType.Height);
+// }
+
ParentChanged.Raise (this, e);
if (logicalParent == null)
LogicalParentChanged.Raise (this, e);
namespace Crow
{
+ [DesignIgnore]
public class HueSelector : ColorSelector
{
#region CTOR
+++ /dev/null
-//
-// MDIContainer.cs
-//
-// Author:
-// Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-
-namespace Crow
-{
- public class MDIContainer : Group
- {
- #region CTOR
- public MDIContainer () : base()
- {
- }
- #endregion
-
- }
-}
-
/// TemplatedControl may have 3 children (template,templateItem,content) but
/// behave exactely as a container for layouting and drawing
/// </summary>
+ [DesignIgnore]
public class PrivateContainer : GraphicObject
{
#region CTOR
if (this.Contains (IFace.HoverWidget))
IFace.HoverWidget = null;
}
- contentSize = new Size (0, 0);
+ contentSize = default(Size);
child.LayoutChanged -= OnChildLayoutChanges;
- child.Dispose ();
this.RegisterForGraphicUpdate ();
}
if (child != null) {
child.Parent = this;
child.LayoutChanged += OnChildLayoutChanges;
+ child.Slot = child.LastSlots = default(Rectangle);
contentSize = child.Slot.Size;
child.RegisteredLayoutings = LayoutingType.None;
child.RegisterForLayouting (LayoutingType.Sizing);
}
}
+ //dispose child if not null
+ protected virtual void deleteChild () {
+ GraphicObject g = child;
+ SetChild (null);
+ if (g != null)
+ g.Dispose ();
+ }
#region GraphicObject Overrides
namespace Crow
{
+ [DesignIgnore]
public class SaturationValueSelector : ColorSelector
{
public SaturationValueSelector () : base(){}
/// <summary>
/// generic class to build scrolling control in both directions
/// </summary>
+ [DesignIgnore]
public class ScrollingObject : GraphicObject
{
#region CTOR
+++ /dev/null
-//
-// ScrollingTextBox.cs
-//
-// Author:
-// Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Collections;
-using Cairo;
-using System.Text;
-using System.Collections.Generic;
-using System.Text.RegularExpressions;
-using System.Linq;
-
-namespace Crow
-{
- /// <summary>
- /// Scrolling text box optimized for monospace fonts, for coding
- /// </summary>
- public class ScrollingTextBox : ScrollingObject
- {
- #region CTOR
- protected ScrollingTextBox ():base()
- {
- KeyEventsOverrides = true;
- }
- public ScrollingTextBox (Interface iface):base(iface){
- KeyEventsOverrides = true;
- }
- #endregion
-
- public event EventHandler TextChanged;
-
- public virtual void OnTextChanged(Object sender, EventArgs e)
- {
- TextChanged.Raise (this, e);
- }
-
- #region private and protected fields
- string lineBreak = Interface.LineBreak;
- int visibleLines = 1;
- List<string> lines;
- string _text = "label";
- Color selBackground;
- Color selForeground;
- Point mouseLocalPos = 0;//mouse coord in widget space
- int _currentCol; //0 based cursor position in string
- int _currentLine;
- Point _selBegin = -1; //selection start (row,column)
- Point _selRelease = -1; //selection end (row,column)
-
- protected Rectangle rText;
- protected FontExtents fe;
- protected TextExtents te;
- #endregion
-
- [XmlAttributeAttribute][DefaultValue("label")]
- public string Text
- {
- get {
- return lines == null ?
- _text : lines.Aggregate((i, j) => i + Interface.LineBreak + j);
- }
- set
- {
- if (string.Equals (value, _text, StringComparison.Ordinal))
- return;
-
- _text = value;
-
- if (string.IsNullOrEmpty(_text))
- _text = "";
-
- lines = getLines;
- MaxScrollY = Math.Max (0, lines.Count - visibleLines);
-
- OnTextChanged (this, null);
- RegisterForGraphicUpdate ();
- }
- }
-
-
- [XmlAttributeAttribute][DefaultValue("BlueGray")]
- public virtual Color SelectionBackground {
- get { return selBackground; }
- set {
- if (value == selBackground)
- return;
- selBackground = value;
- NotifyValueChanged ("SelectionBackground", selBackground);
- RegisterForRedraw ();
- }
- }
- [XmlAttributeAttribute][DefaultValue("White")]
- public virtual Color SelectionForeground {
- get { return selForeground; }
- set {
- if (value == selForeground)
- return;
- selForeground = value;
- NotifyValueChanged ("SelectionForeground", selForeground);
- RegisterForRedraw ();
- }
- }
- [XmlAttributeAttribute][DefaultValue(0)]
- public int CurrentColumn{
- get { return _currentCol; }
- set {
- if (value == _currentCol)
- return;
- if (value < 0)
- _currentCol = 0;
- else if (value > lines [_currentLine].Length)
- _currentCol = lines [_currentLine].Length;
- else
- _currentCol = value;
- NotifyValueChanged ("CurrentColumn", _currentCol);
- }
- }
- [XmlAttributeAttribute][DefaultValue(0)]
- public int CurrentLine{
- get { return _currentLine; }
- set {
- if (value == _currentLine)
- return;
- if (value >= lines.Count)
- _currentLine = lines.Count-1;
- else if (value < 0)
- _currentLine = 0;
- else
- _currentLine = value;
- //force recheck of currentCol for bounding
- int cc = _currentCol;
- _currentCol = 0;
- CurrentColumn = cc;
- NotifyValueChanged ("CurrentLine", _currentLine);
-
- if (CurrentLine < ScrollY)
- ScrollY = CurrentLine;
- else if (CurrentLine >= ScrollY + visibleLines)
- ScrollY = Math.Max (0, CurrentLine - visibleLines + 1);
- }
- }
- [XmlIgnore]public Point CurrentPosition {
- get { return new Point(CurrentColumn, CurrentLine); }
- }
- //TODO:using HasFocus for drawing selection cause SelBegin and Release binding not to work
- /// <summary>
- /// Selection begin position in char units (line, column)
- /// </summary>
- [XmlAttributeAttribute][DefaultValue("-1")]
- public Point SelBegin {
- get { return _selBegin; }
- set {
- if (value == _selBegin)
- return;
- _selBegin = value;
- System.Diagnostics.Debug.WriteLine ("SelBegin=" + _selBegin);
- NotifyValueChanged ("SelBegin", _selBegin);
- NotifyValueChanged ("SelectedText", SelectedText);
- }
- }
- /// <summary>
- /// Selection release position in char units (line, column)
- /// </summary>
- [XmlAttributeAttribute][DefaultValue("-1")]
- public Point SelRelease {
- get {
- return _selRelease;
- }
- set {
- if (value == _selRelease)
- return;
- _selRelease = value;
- NotifyValueChanged ("SelRelease", _selRelease);
- NotifyValueChanged ("SelectedText", SelectedText);
- }
- }
- /// <summary>
- /// return char at CurrentLine, CurrentColumn
- /// </summary>
- [XmlIgnore]protected Char CurrentChar
- {
- get {
- return lines [CurrentLine] [CurrentColumn];
- }
- }
- /// <summary>
- /// ordered selection start and end positions in char units
- /// </summary>
- [XmlIgnore]protected Point selectionStart
- {
- get {
- return SelRelease < 0 || SelBegin.Y < SelRelease.Y ? SelBegin :
- SelBegin.Y > SelRelease.Y ? SelRelease :
- SelBegin.X < SelRelease.X ? SelBegin : SelRelease;
- }
- }
- [XmlIgnore]public Point selectionEnd
- {
- get {
- return SelRelease < 0 || SelBegin.Y > SelRelease.Y ? SelBegin :
- SelBegin.Y < SelRelease.Y ? SelRelease :
- SelBegin.X > SelRelease.X ? SelBegin : SelRelease;
- }
- }
- [XmlIgnore]public string SelectedText
- {
- get {
-
- if (SelRelease < 0 || SelBegin < 0)
- return "";
- if (selectionStart.Y == selectionEnd.Y)
- return lines [selectionStart.Y].Substring (selectionStart.X, selectionEnd.X - selectionStart.X);
- string tmp = "";
- tmp = lines [selectionStart.Y].Substring (selectionStart.X);
- for (int l = selectionStart.Y + 1; l < selectionEnd.Y; l++) {
- tmp += Interface.LineBreak + lines [l];
- }
- tmp += Interface.LineBreak + lines [selectionEnd.Y].Substring (0, selectionEnd.X);
- return tmp;
- }
- }
- [XmlIgnore]public bool selectionIsEmpty
- { get { return SelRelease == SelBegin; } }
-
- List<string> getLines {
- get {
- return Regex.Split (_text, "\r\n|\r|\n|\\\\n").ToList();
- }
- }
- /// <summary>
- /// Moves cursor one char to the left.
- /// </summary>
- /// <returns><c>true</c> if move succeed</returns>
- public bool MoveLeft(){
- int tmp = _currentCol - 1;
- if (tmp < 0) {
- if (_currentLine == 0)
- return false;
- CurrentLine--;
- CurrentColumn = int.MaxValue;
- } else
- CurrentColumn = tmp;
- return true;
- }
- /// <summary>
- /// Moves cursor one char to the right.
- /// </summary>
- /// <returns><c>true</c> if move succeed</returns>
- public bool MoveRight(){
- int tmp = _currentCol + 1;
- if (tmp > lines [_currentLine].Length){
- if (CurrentLine == lines.Count - 1)
- return false;
- CurrentLine++;
- CurrentColumn = 0;
- } else
- CurrentColumn = tmp;
- return true;
- }
- public void GotoWordStart(){
- if (lines[CurrentLine].Length == 0)
- return;
- CurrentColumn--;
- //skip white spaces
- while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn > 0)
- CurrentColumn--;
- while (char.IsLetterOrDigit (lines [CurrentLine] [CurrentColumn]) && CurrentColumn > 0)
- CurrentColumn--;
- if (!char.IsLetterOrDigit (this.CurrentChar))
- CurrentColumn++;
- }
- public void GotoWordEnd(){
- //skip white spaces
- if (CurrentColumn >= lines [CurrentLine].Length - 1)
- return;
- while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
- CurrentColumn++;
- while (char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
- CurrentColumn++;
- if (char.IsLetterOrDigit (this.CurrentChar))
- CurrentColumn++;
- }
- public void DeleteChar()
- {
- if (selectionIsEmpty) {
- if (CurrentColumn == 0) {
- if (CurrentLine == 0 && lines.Count == 1)
- return;
- CurrentLine--;
- CurrentColumn = lines [CurrentLine].Length;
- lines [CurrentLine] += lines [CurrentLine + 1];
- lines.RemoveAt (CurrentLine + 1);
- OnTextChanged (this, null);
- return;
- }
- CurrentColumn--;
- lines [CurrentLine] = lines [CurrentLine].Remove (CurrentColumn, 1);
- } else {
- int linesToRemove = selectionEnd.Y - selectionStart.Y + 1;
- int l = selectionStart.Y;
-
- if (linesToRemove > 0) {
- lines [l] = lines [l].Remove (selectionStart.X, lines [l].Length - selectionStart.X) +
- lines [selectionEnd.Y].Substring (selectionEnd.X, lines [selectionEnd.Y].Length - selectionEnd.X);
- l++;
- for (int c = 0; c < linesToRemove-1; c++)
- lines.RemoveAt (l);
- CurrentLine = selectionStart.Y;
- CurrentColumn = selectionStart.X;
- } else
- lines [l] = lines [l].Remove (selectionStart.X, selectionEnd.X - selectionStart.X);
- CurrentColumn = selectionStart.X;
- SelBegin = -1;
- SelRelease = -1;
- }
- OnTextChanged (this, null);
- }
-
- #region GraphicObject overrides
- public override Font Font {
- get { return base.Font; }
- set {
- base.Font = value;
-
- using (ImageSurface img = new ImageSurface (Format.Argb32, 1, 1)) {
- using (Context gr = new Context (img)) {
- gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
- gr.SetFontSize (Font.Size);
-
- fe = gr.FontExtents;
- }
- }
- MaxScrollY = 0;
- RegisterForGraphicUpdate ();
- }
- }
- protected override int measureRawSize(LayoutingType lt)
- {
- if (lt == LayoutingType.Height)
- return (int)Math.Ceiling(fe.Height * lines.Count) + Margin * 2;
-
- string txt = _text.Replace("\t", new String (' ', Interface.TabSize));
-
-
- int maxChar = 0;
- foreach (string s in Regex.Split (txt, "\r\n|\r|\n|\\\\n")) {
- if (maxChar < s.Length)
- maxChar = s.Length;
- }
- return (int)(fe.MaxXAdvance * maxChar) + Margin * 2;
- }
- public override void OnLayoutChanges (LayoutingType layoutType)
- {
- base.OnLayoutChanges (layoutType);
-
- if (layoutType == LayoutingType.Height)
- updateVisibleLines ();
- }
- protected override void onDraw (Context gr)
- {
- base.onDraw (gr);
-
- gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
- gr.SetFontSize (Font.Size);
- gr.FontOptions = Interface.FontRenderingOptions;
- gr.Antialias = Interface.Antialias;
-
- Rectangle cb = ClientRectangle;
-
- Foreground.SetAsSource (gr);
-
- bool selectionInProgress = false;
-
- #region draw text cursor
- if (SelBegin != SelRelease)
- selectionInProgress = true;
- else if (HasFocus){
- gr.SetSourceColor(Color.Red);
- gr.LineWidth = 2.0;
- double cursorX = cb.X + (CurrentColumn - ScrollX) * fe.MaxXAdvance;
- gr.MoveTo (0.5 + cursorX, cb.Y + (CurrentLine - ScrollY) * fe.Height);
- gr.LineTo (0.5 + cursorX, cb.Y + (CurrentLine + 1 - ScrollY) * fe.Height);
- gr.Stroke();
- }
- #endregion
-
- Foreground.SetAsSource (gr);
-
- for (int i = 0; i < visibleLines; i++) {
- int curL = i + ScrollY;
- if (curL >= lines.Count)
- break;
- string lstr = lines[curL];
-
- gr.MoveTo (cb.X, cb.Y + fe.Ascent + fe.Height * i);
- gr.ShowText (lstr);
- gr.Fill ();
-
- if (selectionInProgress && curL >= selectionStart.Y && curL <= selectionEnd.Y) {
-
- double rLineX = cb.X,
- rLineY = cb.Y + i * fe.Height,
- rLineW = lstr.Length * fe.MaxXAdvance;
-
- System.Diagnostics.Debug.WriteLine ("sel start: " + selectionStart + " sel end: " + selectionEnd);
- if (curL == selectionStart.Y) {
- rLineX += (selectionStart.X - ScrollX) * fe.MaxXAdvance;
- rLineW -= selectionStart.X * fe.MaxXAdvance;
- }
- if (curL == selectionEnd.Y)
- rLineW -= (lstr.Length - selectionEnd.X) * fe.MaxXAdvance;
-
- gr.Save ();
- gr.Operator = Operator.Source;
- gr.Rectangle (rLineX, rLineY, rLineW, fe.Height);
- gr.SetSourceColor (SelectionBackground);
- gr.FillPreserve ();
- gr.Clip ();
- gr.Operator = Operator.Over;
- gr.SetSourceColor (SelectionForeground);
- gr.MoveTo (cb.X, cb.Y + fe.Ascent + fe.Height * i);
- gr.ShowText (lstr);
- gr.Fill ();
- gr.Restore ();
- }
- }
- }
- #endregion
-
- #region Mouse handling
- void updatemouseLocalPos(Point mpos){
- Point mouseLocalPos = mpos - ScreenCoordinates(Slot).TopLeft - ClientRectangle.TopLeft;
- if (mouseLocalPos.X < 0)
- CurrentColumn--;
- else
- CurrentColumn = ScrollX + (int)Math.Round (mouseLocalPos.X / fe.MaxXAdvance);
-
- if (mouseLocalPos.Y < 0)
- CurrentLine--;
- else
- CurrentLine = ScrollY + (int)Math.Floor (mouseLocalPos.Y / fe.Height);
- }
- public override void onMouseEnter (object sender, MouseMoveEventArgs e)
- {
- base.onMouseEnter (sender, e);
- IFace.MouseCursor = XCursor.Text;
- }
- public override void onMouseLeave (object sender, MouseMoveEventArgs e)
- {
- base.onMouseLeave (sender, e);
- IFace.MouseCursor = XCursor.Default;
- }
- protected override void onFocused (object sender, EventArgs e)
- {
- base.onFocused (sender, e);
-
- // SelBegin = new Point(0,0);
- // SelRelease = new Point (lines.LastOrDefault ().Length, lines.Count-1);
- RegisterForRedraw ();
- }
- protected override void onUnfocused (object sender, EventArgs e)
- {
- base.onUnfocused (sender, e);
-
- // SelBegin = -1;
- // SelRelease = -1;
- RegisterForRedraw ();
- }
- public override void onMouseMove (object sender, MouseMoveEventArgs e)
- {
- base.onMouseMove (sender, e);
-
- if (!e.Mouse.IsButtonDown (MouseButton.Left))
- return;
- if (!HasFocus || SelBegin < 0)
- return;
-
- updatemouseLocalPos (e.Position);
- SelRelease = CurrentPosition;
-
- RegisterForRedraw();
- }
- public override void onMouseDown (object sender, MouseButtonEventArgs e)
- {
- if (this.HasFocus){
- updatemouseLocalPos (e.Position);
- SelBegin = SelRelease = CurrentPosition;
- RegisterForRedraw();//TODO:should put it in properties
- }
-
- //done at the end to set 'hasFocus' value after testing it
- base.onMouseDown (sender, e);
- }
- public override void onMouseUp (object sender, MouseButtonEventArgs e)
- {
- base.onMouseUp (sender, e);
-
- if (SelBegin == SelRelease)
- SelBegin = SelRelease = -1;
-
- updatemouseLocalPos (e.Position);
- RegisterForRedraw ();
- }
- public override void onMouseDoubleClick (object sender, MouseButtonEventArgs e)
- {
- base.onMouseDoubleClick (sender, e);
-
- GotoWordStart ();
- SelBegin = CurrentPosition;
- GotoWordEnd ();
- SelRelease = CurrentPosition;
- RegisterForRedraw ();
- }
- #endregion
-
- #region Keyboard handling
- public override void onKeyDown (object sender, KeyboardKeyEventArgs e)
- {
- base.onKeyDown (sender, e);
-
- Key key = e.Key;
-
- switch (key)
- {
- case Key.Back:
- if (CurrentPosition == 0)
- return;
- this.DeleteChar();
- break;
- case Key.Clear:
- break;
- case Key.Delete:
- if (selectionIsEmpty) {
- if (!MoveRight ())
- return;
- }else if (e.Shift)
- IFace.Clipboard = this.SelectedText;
- this.DeleteChar ();
- break;
- case Key.Enter:
- case Key.KeypadEnter:
- if (!selectionIsEmpty)
- this.DeleteChar ();
- this.InsertLineBreak ();
- break;
- case Key.Escape:
- Text = "";
- CurrentColumn = 0;
- SelRelease = -1;
- break;
- case Key.Home:
- if (e.Shift) {
- if (selectionIsEmpty)
- SelBegin = new Point (CurrentColumn, CurrentLine);
- if (e.Control)
- CurrentLine = 0;
- CurrentColumn = 0;
- SelRelease = new Point (CurrentColumn, CurrentLine);
- break;
- }
- SelRelease = -1;
- if (e.Control)
- CurrentLine = 0;
- CurrentColumn = 0;
- break;
- case Key.End:
- if (e.Shift) {
- if (selectionIsEmpty)
- SelBegin = CurrentPosition;
- if (e.Control)
- CurrentLine = int.MaxValue;
- CurrentColumn = int.MaxValue;
- SelRelease = CurrentPosition;
- break;
- }
- SelRelease = -1;
- if (e.Control)
- CurrentLine = int.MaxValue;
- CurrentColumn = int.MaxValue;
- break;
- case Key.Insert:
- if (e.Shift)
- this.Insert (IFace.Clipboard);
- else if (e.Control && !selectionIsEmpty)
- IFace.Clipboard = this.SelectedText;
- break;
- case Key.Left:
- if (e.Shift) {
- if (selectionIsEmpty)
- SelBegin = new Point(CurrentColumn, CurrentLine);
- if (e.Control)
- GotoWordStart ();
- else if (!MoveLeft ())
- return;
- SelRelease = CurrentPosition;
- break;
- }
- SelRelease = -1;
- if (e.Control)
- GotoWordStart ();
- else
- MoveLeft();
- break;
- case Key.Right:
- if (e.Shift) {
- if (selectionIsEmpty)
- SelBegin = CurrentPosition;
- if (e.Control)
- GotoWordEnd ();
- else if (!MoveRight ())
- return;
- SelRelease = CurrentPosition;
- break;
- }
- SelRelease = -1;
- if (e.Control)
- GotoWordEnd ();
- else
- MoveRight ();
- break;
- case Key.Up:
- if (e.Shift) {
- if (selectionIsEmpty)
- SelBegin = CurrentPosition;
- CurrentLine--;
- SelRelease = CurrentPosition;
- break;
- }
- SelRelease = -1;
- CurrentLine--;
- break;
- case Key.Down:
- if (e.Shift) {
- if (selectionIsEmpty)
- SelBegin = CurrentPosition;
- CurrentLine++;
- SelRelease = CurrentPosition;
- break;
- }
- SelRelease = -1;
- CurrentLine++;
- break;
- case Key.Menu:
- break;
- case Key.NumLock:
- break;
- case Key.PageDown:
- if (e.Shift) {
- if (selectionIsEmpty)
- SelBegin = CurrentPosition;
- CurrentLine += visibleLines;
- SelRelease = CurrentPosition;
- break;
- }
- SelRelease = -1;
- CurrentLine += visibleLines;
- break;
- case Key.PageUp:
- if (e.Shift) {
- if (selectionIsEmpty)
- SelBegin = CurrentPosition;
- CurrentLine -= visibleLines;
- SelRelease = CurrentPosition;
- break;
- }
- CurrentLine -= visibleLines;
- break;
- case Key.RWin:
- break;
- case Key.Tab:
- this.Insert ("\t");
- break;
- default:
- break;
- }
- RegisterForGraphicUpdate();
- }
- public override void onKeyPress (object sender, KeyPressEventArgs e)
- {
- base.onKeyPress (sender, e);
-
- this.Insert (e.KeyChar.ToString());
-
- SelRelease = -1;
- SelBegin = -1; //new Point(CurrentColumn, SelBegin.Y);
-
- RegisterForGraphicUpdate();
- }
- #endregion
-
-
- /// <summary> Compute x offset in cairo unit from text position </summary>
- double GetXFromTextPointer(Context gr, Point pos)
- {
- try {
- string l = lines [pos.Y].Substring (0, pos.X).
- Replace ("\t", new String (' ', Interface.TabSize));
- return gr.TextExtents (l).XAdvance;
- } catch{
- return -1;
- }
- }
-
- /// <summary> line break could be '\r' or '\n' or '\r\n' </summary>
- string detectLineBreakKind(){
- string strLB = "";
-
- if (string.IsNullOrEmpty(_text))
- return Interface.LineBreak;
- int i = 0;
- while ( i < _text.Length) {
- if (_text [i] == '\r') {
- strLB += '\r';
- i++;
- }
- if (i < _text.Length) {
- if (_text [i] == '\r')
- return "\r";
- if (_text [i] == '\n')
- strLB += '\n';
- }
- if (!string.IsNullOrEmpty (strLB))
- return strLB;
- i++;
- }
- return Interface.LineBreak;
- }
-
- void updateVisibleLines(){
- visibleLines = (int)Math.Floor ((double)ClientRectangle.Height / fe.Height);
- MaxScrollY = Math.Max (0, lines.Count - visibleLines);
-
- System.Diagnostics.Debug.WriteLine ("update visible lines: " + visibleLines);
- System.Diagnostics.Debug.WriteLine ("update MaxScrollY: " + MaxScrollY);
- }
-
-
- /// <summary>
- /// Insert new string at caret position, should be sure no line break is inside.
- /// </summary>
- /// <param name="str">String.</param>
- protected void Insert(string str)
- {
- if (!selectionIsEmpty)
- this.DeleteChar ();
- string[] strLines = Regex.Split (str, "\r\n|\r|\n|" + @"\\n").ToArray();
- lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, strLines[0]);
- CurrentColumn += strLines[0].Length;
- for (int i = 1; i < strLines.Length; i++) {
- InsertLineBreak ();
- lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, strLines[i]);
- CurrentColumn += strLines[i].Length;
- }
- OnTextChanged (this, null);
- RegisterForGraphicUpdate();
- }
-
- /// <summary>
- /// Insert a line break.
- /// </summary>
- protected void InsertLineBreak()
- {
- lines.Insert(CurrentLine + 1, lines[CurrentLine].Substring(CurrentColumn));
- lines [CurrentLine] = lines [CurrentLine].Substring (0, CurrentColumn);
- CurrentLine++;
- CurrentColumn = 0;
- OnTextChanged (this, null);
- }
- }
-}
\ No newline at end of file
namespace Crow
{
+ [DesignIgnore]
public class TextRun : GraphicObject
{
#region CTOR
namespace Crow
{
+ public class DesignIgnore : Attribute
+ {
+ }
+
public class DesignCategory : Attribute
{
public string Name { get; set; }
/// <summary>Layouting loop, this is the first step of the udpate and process registered
/// Layouting queue items. Failing LQI's are requeued in this cycle until MaxTry is reached which
/// trigger an enqueue for the next Update Cycle</summary>
- void processLayouting(){
+ protected virtual void processLayouting(){
#if MEASURE_TIME
layoutingMeasure.StartCycle();
#endif
public void ProcessLayouting()
{
GraphicObject go = Layoutable as GraphicObject;
- if (go == null) {
- Debug.WriteLine ("ERROR: processLayouting on something else than a graphic object: " + this.ToString ());
- return;
- }
+// if (go == null) {
+// Debug.WriteLine ("ERROR: processLayouting on something else than a graphic object: " + this.ToString ());
+// return;
+// }
go.parentRWLock.EnterReadLock ();