This commit is contained in:
Meik
2025-11-11 11:03:42 +01:00
commit dc3e8a2e4c
582 changed files with 191465 additions and 0 deletions

10
.editorconfig Normal file
View File

@@ -0,0 +1,10 @@
[*.cs]
# IDE1006: Naming Styles
dotnet_diagnostic.IDE1006.severity = silent
# IDE0052: Remove unread private members
dotnet_diagnostic.IDE0052.severity = silent
# IDE0059: Unnecessary assignment of a value
dotnet_diagnostic.IDE0059.severity = silent

103
.gitignore vendored Normal file
View File

@@ -0,0 +1,103 @@
# OS generated files
.DS_Store
Thumbs.db
ehthumbs.db
Icon?
*.lnk
# Logs and temporary files
*.log
*.tmp
*.temp
*.cache
*.bak
*.swp
*.swo
*.orig
~$*
# Package artifacts
node_modules/
packages/
*.nupkg
*.snupkg
*.tgz
*.tar
*.tar.gz
*.zip
*.7z
*.pkg
*.deb
*.rpm
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# TFS specific files and folders
$tf/
[Tt][Ff][Ss]*/
*.tfs
*.tfsconfig
# Visual Studio / .NET build outputs
.vs/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
[Tt]est[Rr]esults/
[Bb]uild[Ll]og.*
[Dd]ebug*/
[Rr]elease*/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
[Ww][Ii][Nn]32/
bld/
ipch/
_ReSharper*/
*.opendb
*.pdb
*.obj
*.idb
*.ilk
# Visual Studio user-specific files
*.user
*.userosscache
*.suo
*.vcxproj.user
*.rsuser
*.sln.docstates
# NuGet & MSBuild artifacts
project.lock.json
project.fragment.lock.json
artifacts/
*.nuget.props
*.nuget.targets
.nuget/
*.msi
*.msix
*.msixupload
*.appx
*.appxbundle
# Coverage reports
*.coverage
*.coveragexml
coverage/
# Python helper scripts
__pycache__/
*.pyc
# Misc tooling
.idea/
.vscode/
.terraform/
.env
.env.*

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

View File

@@ -0,0 +1,14 @@
<Application x:Class="F4SD_AdaptableIcon_Export.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:F4SD_AdaptableIcon_Export"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--Dark/LightMode-->
<ResourceDictionary Source="ResourcesLightMode.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace F4SD_AdaptableIcon_Export
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

View File

@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7B904A36-74D7-44A0-9659-6B1B091A44E0}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>F4SD_AdaptableIcon_Export</RootNamespace>
<AssemblyName>F4SD-AdaptableIcon-Export</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="MaterialIcons, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MaterialIcons.1.0.3\lib\MaterialIcons.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="WpfAnimatedGif, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9e7cd3b544a090dc, processorArchitecture=MSIL">
<HintPath>..\packages\WpfAnimatedGif.2.0.2\lib\net40\WpfAnimatedGif.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="User Controls\IconGrid.xaml.cs">
<DependentUpon>IconGrid.xaml</DependentUpon>
</Compile>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Page Include="ResourcesLightMode.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="User Controls\IconGrid.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="Models\AdvancedIconInformation.cs" />
<Compile Include="Models\IconCollectionUserControl.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\F4SD-AdaptableIcon\F4SD-AdaptableIcon.csproj">
<Project>{bab63a6a-1524-435d-9f96-7a30b6ee0624}</Project>
<Name>F4SD-AdaptableIcon</Name>
</ProjectReference>
<ProjectReference Include="..\F4SD-Logging\F4SD-Logging.csproj">
<Project>{7793f281-b226-4e20-b6f6-5d53d70f1dc1}</Project>
<Name>F4SD-Logging</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}

View File

@@ -0,0 +1,55 @@
<Window x:Class="F4SD_AdaptableIcon_Export.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:F4SD_AdaptableIcon_Export"
xmlns:mi="clr-namespace:MaterialIcons;assembly=MaterialIcons"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
xmlns:uc="clr-namespace:F4SD_AdaptableIcon_Export.User_Controls"
mc:Ignorable="d"
Title="F4SD-AdaptableIcon-Export" Height="500" Width="600">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
<RowDefinition Height="*"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid.Resources>
<Style TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color3D3C3C}"/>
<Setter Property="IconHeight" Value="50"/>
<Setter Property="IconWidth" Value="50"/>
<Setter Property="BorderPadding" Value="5"/>
</Style>
</Grid.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<TextBlock Text="Select path for icon export:" Height="20" Margin="5,0,0,0"/>
<TextBox x:Name="folderPathTextBox" x:FieldModifier="private" Text="" Grid.Row="1" Grid.Column="0" Height="20" Margin="5,0,0,0" TextChanged="folderPathTextBox_TextChanged"/>
<Button x:Name="folderPathButton" Grid.Row="1" Grid.Column="1" Content="..." Height="20" Width="40" Click="folderPathButton_Click"/>
<Slider x:Name="pixSize" Grid.Row="2" Minimum="32" Maximum="256" VerticalAlignment="Center" Margin="10,0" Value="64" ValueChanged="pixSize_ValueChanged" />
<TextBlock x:Name="txtSize" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Text="64"/>
</Grid>
<ico:AdaptableIcon Grid.Row="1" x:Name="exampleIcon" SelectedInternIcon="f4sd" HorizontalAlignment="Center" VerticalAlignment="Center" IconWidth="64" IconHeight="64" Margin="0" Padding="0"/>
<Grid Grid.Row="2">
<Button x:Name="exportButton" Height="30" Width="100" Content="Export" Click="exportButton_Click" IsEnabled="False"/>
</Grid>
</Grid>
</Window>

View File

@@ -0,0 +1,171 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MaterialIcons;
using F4SD_AdaptableIcon.Enums;
using C4IT.Logging;
using static C4IT.Logging.cLogManager;
using System.IO;
using System.Threading;
namespace F4SD_AdaptableIcon_Export
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private List<cAdvancedIconInformation> iconInformation = new List<cAdvancedIconInformation>();
public MainWindow() => InitializeComponent();
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
InstantiateIconInformation();
}
private void InstantiateIconInformation()
{
List<cAdvancedIconInformation> IconInformation = new List<cAdvancedIconInformation>();
foreach (enumInternIcons internIcon in Enum.GetValues(typeof(enumInternIcons)))
{
cAdvancedIconInformation tempIconInformation = new cAdvancedIconInformation() { IsVisible = true };
tempIconInformation.UpdateIconInformation(internIcon);
IconInformation.Add(tempIconInformation);
}
foreach (MaterialIconType materialIcon in Enum.GetValues(typeof(MaterialIconType)))
{
cAdvancedIconInformation tempIconInformation = new cAdvancedIconInformation() { IsVisible = true };
tempIconInformation.UpdateIconInformation(materialIcon);
IconInformation.Add(tempIconInformation);
}
iconInformation = IconInformation;
//IconListUC.IconInformation = IconInformation;
//IconGridUC.IconInformation = IconInformation;
}
private void folderPathButton_Click(object sender, RoutedEventArgs e)
{
try
{
var openFileDlg = new System.Windows.Forms.OpenFileDialog();
openFileDlg.FileName = folderPathTextBox.Text;
openFileDlg.ValidateNames = false;
openFileDlg.CheckFileExists = false;
openFileDlg.CheckPathExists = true;
openFileDlg.FileName = "select a folder.";
var result = openFileDlg.ShowDialog();
if (result is System.Windows.Forms.DialogResult.OK)
{
var _path = openFileDlg.FileName;
_path = System.IO.Path.GetDirectoryName(_path);
if (System.IO.Directory.Exists(_path))
folderPathTextBox.Text = _path;
}
}
catch (Exception E)
{
LogException(E);
}
}
public void WriteToPng(UIElement element, string filename)
{
var rect = new Rect(element.RenderSize);
var visual = new DrawingVisual();
using (var dc = visual.RenderOpen())
{
dc.DrawRectangle(new VisualBrush(element), null, rect);
}
var bitmap = new RenderTargetBitmap(
(int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default);
bitmap.Render(visual);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
string directoryPath = System.IO.Path.GetDirectoryName(filename);
Directory.CreateDirectory(directoryPath);
using (var file = File.OpenWrite(filename))
{
encoder.Save(file);
}
}
private async void exportButton_Click(object sender, RoutedEventArgs e)
{
foreach (cAdvancedIconInformation icon in iconInformation)
{
exampleIcon.Visibility = Visibility.Collapsed;
string strFolder = "";
if (icon.InternIcon != null)
{
exampleIcon.SelectedMaterialIcon = null;
exampleIcon.SelectedInternIcon = icon.InternIcon;
strFolder = @folderPathTextBox.Text + "\\" + txtSize.Text + "x" + txtSize.Text + "\\intern\\" + exampleIcon.SelectedInternIcon.ToString() + ".png";
}
else if (icon.MaterialIcon != null)
{
exampleIcon.SelectedInternIcon = null;
exampleIcon.SelectedMaterialIcon = icon.MaterialIcon;
strFolder = @folderPathTextBox.Text + "\\" + txtSize.Text + "x" + txtSize.Text + "\\material\\" + exampleIcon.SelectedMaterialIcon.ToString() + ".png";
}
else
continue;
exampleIcon.Visibility = Visibility.Visible;
await Task.Delay(100);
WriteToPng(this.exampleIcon, strFolder);
}
}
private void pixSize_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
var size = (int)e.NewValue;
if (txtSize != null)
txtSize.Text = size.ToString();
if (exampleIcon != null)
{
exampleIcon.IconWidth = size;
exampleIcon.IconHeight = size;
}
}
private void folderPathTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (folderPathTextBox.Text != String.Empty)
{
exportButton.IsEnabled = true;
}
else
{
exportButton.IsEnabled = false;
}
}
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static FasdDesktopUi.Basics.UserControls.AdaptableIcon.cIconPainter;
namespace F4SD_AdaptableIcon_Export
{
public class cAdvancedIconInformation : cIconInformation, INotifyPropertyChanged
{
private bool isVisible;
public bool IsVisible
{
get { return isVisible; }
set
{
isVisible = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsVisible)));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static FasdDesktopUi.Basics.UserControls.AdaptableIcon.cIconPainter;
namespace F4SD_AdaptableIcon_Export.Models
{
public class cAdvancedIconInformation : cIconInformation, INotifyPropertyChanged
{
private bool isVisible;
public bool IsVisible
{
get { return isVisible; }
set
{
isVisible = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsVisible)));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}

View File

@@ -0,0 +1,52 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("F4SD-AdaptableIcon-Export")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("F4SD-AdaptableIcon-Export")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace F4SD_AdaptableIcon_Export.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("F4SD_AdaptableIcon_Export.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace F4SD_AdaptableIcon_Export.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,52 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon">
<SolidColorBrush x:Key="colorE9E9E9" Color="#E9E9E9"/>
<SolidColorBrush x:Key="colorF7FAFA" Color="#F7FAFA"/>
<SolidColorBrush x:Key="color3D3C3C" Color="#3D3C3C"/>
<SolidColorBrush x:Key="color1F92EE" Color="#1F92EE"/>
<SolidColorBrush x:Key="colorF2F2F2" Color="#F2F2F2"/>
<SolidColorBrush x:Key="color9A9B9B" Color="#9A9B9B"/>
<Color x:Key="ControlLightColor">#DBDBDB</Color>
<Color x:Key="ControlMediumColor">#DBDBDB</Color>
<Color x:Key="ControlDarkColor">#DBDBDB</Color>
<SolidColorBrush x:Key="Scrollbar.Track.Color">#F2F2F2</SolidColorBrush>
<Style TargetType="ico:AdaptableIcon" x:Key="GridIconStyle">
<Setter Property="PrimaryIconColor" Value="#3D3C3C"/>
<Setter Property="SecondaryIconColor" Value="#F7FAFA"/>
<Setter Property="IconHeight" Value="55"/>
<Setter Property="IconWidth" Value="55" />
<Setter Property="BorderPadding" Value="7.5" />
<Setter Property="IconBackgroundColor" Value="#F7FAFA"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="IconCornerRadius" Value="7.5"/>
<Setter Property="Margin" Value="5, 2.5, 0, 2.5" />
</Style>
<Style TargetType="Border" x:Key="ListBorderIconStyle">
<Setter Property="Background" Value="#F7FAFA" />
<Setter Property="CornerRadius" Value="5"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Margin" Value="10,3,10,0"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Cursor" Value="Hand"/>
<Style.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="#3D3C3C"/>
</Style>
<Style TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="#3D3C3C"/>
<Setter Property="SecondaryIconColor" Value="#F7FAFA"/>
</Style>
</Style.Resources>
</Style>
</ResourceDictionary>

View File

@@ -0,0 +1,35 @@
<UserControl x:Class="F4SD_AdaptableIcon_Export.User_Controls.IconGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
xmlns:local="clr-namespace:F4SD_AdaptableIcon_Export.User_Controls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibility"/>
</UserControl.Resources>
<StackPanel x:Name="GridCollection">
<ItemsControl ItemsSource="{Binding IconInformation}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ico:AdaptableIcon x:Name="adaptableIcon" ToolTip="{Binding IconName}" Tag="{Binding IconName}" SelectedInternIcon="{Binding InternIcon}" SelectedMaterialIcon="{Binding MaterialIcon}" Visibility="{Binding IsVisible, Converter = {StaticResource BooleanToVisibility}}" Style="{DynamicResource GridIconStyle}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</UserControl>

View File

@@ -0,0 +1,48 @@
using F4SD_AdaptableIcon.Enums;
using F4SD_AdaptableIcon_Export.Models;
using MaterialIcons;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace F4SD_AdaptableIcon_Export.User_Controls
{
/// <summary>
/// Interaction logic for IconGrid.xaml
/// </summary>
public partial class IconGrid : UserControl
{
public List<cAdvancedIconInformation> IconInformation
{
get { return (List<cAdvancedIconInformation>)GetValue(IconInformationProperty); }
set { SetValue(IconInformationProperty, value); }
}
// Using a DependencyProperty as the backing store for IconInformation. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IconInformationProperty =
DependencyProperty.Register("IconInformation", typeof(List<cAdvancedIconInformation>), typeof(IconGrid), new PropertyMetadata(null));
public IconGrid()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MaterialIcons" version="1.0.3" targetFramework="net472" />
<package id="WpfAnimatedGif" version="2.0.2" targetFramework="net472" />
</packages>

View File

@@ -0,0 +1,16 @@
<UserControl x:Class="FasdDesktopUi.Basics.UserControls.AdaptableIcon.AdaptableIcon"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Border x:Name="IconBorder">
<Grid x:Name="MainGrid"
DataContext="{Binding RelativeSource={RelativeSource Self}}"/>
</Border>
</UserControl>

View File

@@ -0,0 +1,373 @@
using F4SD_AdaptableIcon.Enums;
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UserControls.AdaptableIcon
{
public partial class AdaptableIcon : UserControl, ICommandSource
{
private readonly cIconPainter.cIconInformation iconInformation = new cIconPainter.cIconInformation();
#region Properties
#region Command Properties
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register("Command", typeof(ICommand), typeof(AdaptableIcon), new PropertyMetadata(null));
public object CommandParameter
{
get { return (object)GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
}
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.Register("CommandParameter", typeof(object), typeof(AdaptableIcon), new PropertyMetadata(null));
public IInputElement CommandTarget
{
get { return (IInputElement)GetValue(CommandTargetProperty); }
set { SetValue(CommandTargetProperty, value); }
}
public static readonly DependencyProperty CommandTargetProperty =
DependencyProperty.Register("CommandTarget", typeof(IInputElement), typeof(AdaptableIcon), new PropertyMetadata(null));
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
try
{
if (Command is null)
return;
if (!Command.CanExecute(CommandParameter))
return;
if (Command is RoutedCommand routedCommand)
routedCommand.Execute(CommandParameter, CommandTarget);
else
Command.Execute(CommandParameter);
}
catch (Exception E)
{
LogException(E);
}
}
protected override void OnTouchDown(TouchEventArgs e)
{
base.OnTouchDown(e);
try
{
if (Command is null)
return;
if (!Command.CanExecute(CommandParameter))
return;
if (Command is RoutedCommand routedCommand)
routedCommand.Execute(CommandParameter, CommandTarget);
else
Command.Execute(CommandParameter);
}
catch (Exception E)
{
LogException(E);
}
}
#endregion
public string IconName { get => iconInformation?.IconName; }
#region IconBackgroundColor DP
public static readonly DependencyProperty IconBackgroundColorProperty =
DependencyProperty.Register("IconBackgroundColor", typeof(Brush), typeof(AdaptableIcon), new PropertyMetadata(Brushes.Transparent, new PropertyChangedCallback(IconInformationChanged)));
public Brush IconBackgroundColor
{
get { return (Brush)GetValue(IconBackgroundColorProperty); }
set { SetValue(IconBackgroundColorProperty, value); }
}
#endregion
#region IconHeight DP
public static readonly DependencyProperty IconHeightProperty =
DependencyProperty.Register("IconHeight", typeof(double), typeof(AdaptableIcon), new PropertyMetadata(30.0, new PropertyChangedCallback(IconInformationChanged)));
public double IconHeight
{
get { return (double)GetValue(IconHeightProperty); }
set { SetValue(IconHeightProperty, value); }
}
#endregion
#region IconWidth DP
public static readonly DependencyProperty IconWidthProperty =
DependencyProperty.Register("IconWidth", typeof(double), typeof(AdaptableIcon), new PropertyMetadata(30.0, new PropertyChangedCallback(IconInformationChanged)));
public double IconWidth
{
get { return (double)GetValue(IconWidthProperty); }
set { SetValue(IconWidthProperty, value); }
}
#endregion
#region BorderPadding DP
public static readonly DependencyProperty BorderPaddingProperty =
DependencyProperty.Register("BorderPadding", typeof(Thickness), typeof(AdaptableIcon), new PropertyMetadata(new Thickness(7.5), new PropertyChangedCallback(IconInformationChanged)));
public Thickness BorderPadding
{
get { return (Thickness)GetValue(BorderPaddingProperty); }
set { SetValue(BorderPaddingProperty, value); }
}
#endregion
#region IconCornerRadius DP
public static readonly DependencyProperty IconCornerRadiusProperty =
DependencyProperty.Register("IconCornerRadius", typeof(CornerRadius), typeof(AdaptableIcon), new PropertyMetadata(new CornerRadius(5), new PropertyChangedCallback(IconInformationChanged)));
public CornerRadius IconCornerRadius
{
get { return (CornerRadius)GetValue(IconCornerRadiusProperty); }
set { SetValue(IconCornerRadiusProperty, value); }
}
#endregion
#region PrimaryIconColor DP
public static readonly DependencyProperty PrimaryIconColorProperty =
DependencyProperty.Register("PrimaryIconColor", typeof(SolidColorBrush), typeof(AdaptableIcon), new PropertyMetadata(Brushes.Black, new PropertyChangedCallback(IconInformationChanged)));
public SolidColorBrush PrimaryIconColor
{
get { return (SolidColorBrush)GetValue(PrimaryIconColorProperty); }
set { SetValue(PrimaryIconColorProperty, value); }
}
#endregion
#region SecondaryIconColor DP
public static readonly DependencyProperty SecondaryIconColorProperty =
DependencyProperty.Register("SecondaryIconColor", typeof(Brush), typeof(AdaptableIcon), new PropertyMetadata(Brushes.White, new PropertyChangedCallback(IconInformationChanged)));
public Brush SecondaryIconColor
{
get { return (Brush)GetValue(SecondaryIconColorProperty); }
set { SetValue(SecondaryIconColorProperty, value); }
}
#endregion
#region SelectedInternIcon
public enumInternIcons? SelectedInternIcon
{
get { return (enumInternIcons?)GetValue(SelectedInternIconProperty); }
set { SetValue(SelectedInternIconProperty, value); }
}
public static readonly DependencyProperty SelectedInternIconProperty =
DependencyProperty.Register("SelectedInternIcon", typeof(enumInternIcons?), typeof(AdaptableIcon), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)), ValidateInternIcon);
private static bool ValidateInternIcon(object o)
{
return true;
}
#endregion
#region SelectedInternGif
public static readonly DependencyProperty SelectedInternGifProperty =
DependencyProperty.Register("SelectedInternGif", typeof(enumInternGif?), typeof(AdaptableIcon), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
public enumInternGif? SelectedInternGif
{
get { return (enumInternGif?)GetValue(SelectedInternGifProperty); }
set { SetValue(SelectedInternGifProperty, value); }
}
#endregion
#region SelectedMaterialIcon
public MaterialIcons.MaterialIconType? SelectedMaterialIcon
{
get { return (MaterialIcons.MaterialIconType?)GetValue(SelectedMaterialIconProperty); }
set { SetValue(SelectedMaterialIconProperty, value); }
}
public static readonly DependencyProperty SelectedMaterialIconProperty =
DependencyProperty.Register("SelectedMaterialIcon", typeof(MaterialIcons.MaterialIconType?), typeof(AdaptableIcon), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
#endregion
#region SelectedCountryCode
public enumCountryCode? SelectedCountryCode
{
get { return (enumCountryCode?)GetValue(SelectedCountryCodeProperty); }
set { SetValue(SelectedCountryCodeProperty, value); }
}
public static readonly DependencyProperty SelectedCountryCodeProperty =
DependencyProperty.Register("SelectedCountryCode", typeof(enumCountryCode?), typeof(AdaptableIcon), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
#endregion
private static void IconInformationChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
try
{
if (d is AdaptableIcon _me)
_me.UpdateIconInformation();
}
catch (Exception E)
{
LogException(E);
}
}
private static void SelectedIconChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
try
{
if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(d))
return;
if (!(d is AdaptableIcon _me))
return;
if (e.NewValue is null)
return;
if (e.NewValue is enumInternIcons selectedInternIcon)
_me.iconInformation.UpdateIconInformation(selectedInternIcon);
if (e.NewValue is enumInternGif selectedInternGif)
_me.iconInformation.UpdateIconInformation(selectedInternGif);
if (e.NewValue is MaterialIcons.MaterialIconType selectedMaterialIcon)
_me.iconInformation.UpdateIconInformation(selectedMaterialIcon);
if (e.NewValue is enumCountryCode selectedCountryCode)
_me.iconInformation.UpdateIconInformation(selectedCountryCode);
_me.UpdateIconInformation();
}
catch (Exception E)
{
LogException(E);
}
}
#endregion
public AdaptableIcon()
{
InitializeComponent();
}
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
UpdateIconInformation();
}
public (enumInternIcons?, enumInternGif?, MaterialIcons.MaterialIconType?, enumCountryCode?) GetCurrentIcon()
{
return (SelectedInternIcon, SelectedInternGif, SelectedMaterialIcon, SelectedCountryCode);
}
public void SetIcon((enumInternIcons? InternIcon, enumInternGif? InternGif, MaterialIcons.MaterialIconType? MaterialIcon, enumCountryCode? CountryCode) IconValues)
{
try
{
SelectedInternIcon = IconValues.InternIcon;
SelectedInternGif = IconValues.InternGif;
SelectedMaterialIcon = IconValues.MaterialIcon;
SelectedCountryCode = IconValues.CountryCode;
}
catch (Exception E)
{
LogException(E);
}
}
private void UpdateIconInformation()
{
try
{
iconInformation.IconHeightInPx = IconHeight;
iconInformation.IconWidthInPx = IconWidth;
iconInformation.PrimaryIconColor = PrimaryIconColor;
iconInformation.SecondaryIconColor = SecondaryIconColor;
UpdateIcon();
UpdateIconBorder();
}
catch (Exception E)
{
LogException(E);
}
}
private void UpdateIcon()
{
try
{
MainGrid.Children.Clear();
var newIcon = cIconPainter.GetIcon(iconInformation);
if (newIcon != null)
MainGrid.Children.Add(newIcon);
}
catch (Exception E)
{
LogException(E);
}
}
private void UpdateIconBorder()
{
try
{
IconBorder.Background = IconBackgroundColor;
IconBorder.Height = IconHeight;
IconBorder.Width = IconWidth;
IconBorder.CornerRadius = IconCornerRadius;
IconBorder.Padding = BorderPadding;
}
catch (Exception E)
{
LogException(E);
}
}
}
}

View File

@@ -0,0 +1,255 @@
namespace F4SD_AdaptableIcon.Enums
{
public enum enumCountryCode //Reference: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
{
AF,
AX,
AL,
DZ,
AS,
AD,
AO,
AI,
AQ,
AG,
AR,
AM,
AW,
AU,
AT,
AZ,
BS,
BH,
BD,
BB,
BY,
BE,
BZ,
BJ,
BM,
BT,
BO,
BQ,
BA,
BW,
BV,
BR,
IO,
BN,
BG,
BF,
BI,
CV,
KH,
CM,
CA,
KY,
CF,
TD,
CL,
CN,
CX,
CC,
CO,
KM,
CD,
CG,
CK,
CR,
CI,
HR,
CU,
CW,
CY,
CZ,
DK,
DJ,
DM,
DO,
EC,
EG,
SV,
GQ,
ER,
EE,
SZ,
ET,
FK,
FO,
FJ,
FI,
FR,
GF,
PF,
TF,
GA,
GM,
GE,
DE,
GH,
GI,
GR,
GL,
GD,
GP,
GU,
GT,
GG,
GN,
GW,
GY,
HT,
HM,
VA,
HN,
HK,
HU,
IS,
IN,
ID,
IR,
IQ,
IE,
IM,
IL,
IT,
JM,
JP,
JE,
JO,
KZ,
KE,
KI,
KP,
KR,
KW,
KG,
LA,
LV,
LB,
LS,
LR,
LY,
LI,
LT,
LU,
MO,
MK,
MG,
MW,
MY,
MV,
ML,
MT,
MH,
MQ,
MR,
MU,
YT,
MX,
FM,
MD,
MC,
MN,
ME,
MS,
MA,
MZ,
MM,
NA,
NR,
NP,
NL,
NC,
NZ,
NI,
NE,
NG,
NU,
NF,
MP,
NO,
OM,
PK,
PW,
PS,
PA,
PG,
PY,
PE,
PH,
PN,
PL,
PT,
PR,
QA,
RE,
RO,
RU,
RW,
BL,
SH,
KN,
LC,
MF,
PM,
VC,
WS,
SM,
ST,
SA,
SN,
RS,
SC,
SL,
SG,
SX,
SK,
SI,
SB,
SO,
ZA,
GS,
SS,
ES,
LK,
SD,
SR,
SJ,
SE,
CH,
SY,
TW,
TJ,
TZ,
TH,
TL,
TG,
TK,
TO,
TT,
TN,
TR,
TM,
TC,
TV,
UG,
UA,
AE,
GB,
UM,
US,
UY,
UZ,
VU,
VE,
VN,
VG,
VI,
WF,
EH,
YE,
ZM,
ZW
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace F4SD_AdaptableIcon.Enums
{
public enum enumIconTypes
{
intern = 0,
material,
byImage,
gif,
flag
}
}

View File

@@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace F4SD_AdaptableIcon.Enums
{
public enum enumInternIcons
{
none = 0,
fasd,
f4sd,
f4sd_outline,
f4sd_speedo,
f4sd_product_logo,
//Lock
lock_closed,
lock_closedHover,
lock_open,
lock_openHover,
//MenuBar
menuBar_copy,
menuBar_details,
menuBar_mail,
menuBar_more,
menuBar_nexThink,
menuBar_refresh,
menuBar_refresh_request,
menuBar_remote,
menuBar_screenShot,
menuBar_search,
menuBar_search_noResults,
menuBar_settings,
//miscellaneous
misc_pin,
misc_pinned,
misc_copy_bolt,
misc_chevron_left,
misc_chevron_right,
misc_chevron_mid,
misc_chevron_down,
misc_check,
misc_computer,
misc_computer_disabled,
misc_directConnection,
misc_dot,
misc_functionMarker,
misc_functionBolt,
misc_heart,
misc_play,
misc_plus,
misc_screwdriver,
misc_ticket,
misc_time,
misc_tool,
misc_user,
misc_user_disabled,
//StatusIcons
status_bad,
status_danger,
status_empty,
status_good,
status_info,
//Style
style_moon,
style_moonFilled,
style_sun,
style_sunFilled,
//Window
window_close,
window_dock_left,
window_dock_right,
window_fullscreen,
window_fullscreenExit,
window_minimize,
window_toSlim
}
public enum enumInternGif
{
none,
partyPopper,
loadingSpinner,
loadingPoints
}
}

View File

@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BAB63A6A-1524-435D-9F96-7A30B6EE0624}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>F4SD_AdaptableIcon</RootNamespace>
<AssemblyName>F4SD-AdaptableIcon</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>false</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Demo%28Debug%29|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Demo%28Debug%29\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'NewFeatures%28Debug%29|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\NewFeatures%28Debug%29\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="MaterialIcons, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MaterialIcons.1.0.3\lib\MaterialIcons.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
<Reference Include="WpfAnimatedGif, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9e7cd3b544a090dc, processorArchitecture=MSIL">
<HintPath>..\packages\WpfAnimatedGif.2.0.2\lib\net40\WpfAnimatedGif.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\Shared\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="AdaptableIcon.xaml.cs">
<DependentUpon>AdaptableIcon.xaml</DependentUpon>
</Compile>
<Compile Include="Enums\CountryCode.cs" />
<Compile Include="Enums\IconType.cs" />
<Compile Include="Enums\InternIcon.cs" />
<Compile Include="Flags\DE.xaml.cs">
<DependentUpon>DE.xaml</DependentUpon>
</Compile>
<Compile Include="Flags\GB.xaml.cs">
<DependentUpon>GB.xaml</DependentUpon>
</Compile>
<Compile Include="IconData.cs" />
<Compile Include="IconPainter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\F4SD-Logging\F4SD-Logging.csproj">
<Project>{7793f281-b226-4e20-b6f6-5d53d70f1dc1}</Project>
<Name>F4SD-Logging</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Page Include="AdaptableIcon.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Flags\DE.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Flags\GB.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}

View File

@@ -0,0 +1,53 @@
<UserControl x:Class="F4SD_AdaptableIcon.Flags.DE"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:F4SD_AdaptableIcon.Flags"
mc:Ignorable="d"
d:DesignHeight="140"
d:DesignWidth="140">
<!--Reference Document-Size in Expression Design: 100px x 100px and 72 DPI => Canvas Size 133.333x133.333 -->
<Viewbox ClipToBounds="True">
<Canvas x:Name="Germany"
Width="133.333"
Height="133.333"
Canvas.Left="0"
Canvas.Top="0">
<Path x:Name="Path"
Width="133.395"
Height="44.4648"
Canvas.Left="0"
Canvas.Top="88.8685"
Stretch="Fill"
Fill="#FFFECD00"
Data="F1 M 0,111.101L 0,88.8685L 133.395,88.8685L 133.395,133.333L 0,133.333" />
<Path x:Name="Path_1"
Width="133.395"
Height="44.4648"
Canvas.Left="0"
Canvas.Top="44.4036"
Stretch="Fill"
Fill="#FFDC0000"
Data="F1 M 0,66.6363L 0,44.4036L 133.395,44.4036L 133.395,88.8685L 0,88.8685" />
<Path x:Name="Path_2"
Width="133.395"
Height="44.4648"
Canvas.Left="0"
Canvas.Top="-0.0611877"
Stretch="Fill"
Fill="#FF000000"
Data="F1 M 0,22.1715L 0,-0.0611877L 133.395,-0.0611877L 133.395,44.4036L 0,44.4036" />
<Canvas.Clip>
<RectangleGeometry Rect="0 0 133.333 133.333"
RadiusX="15"
RadiusY="15" />
</Canvas.Clip>
</Canvas>
</Viewbox>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace F4SD_AdaptableIcon.Flags
{
/// <summary>
/// Interaction logic for DE.xaml
/// </summary>
public partial class DE : UserControl
{
public DE()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,81 @@
<UserControl x:Class="F4SD_AdaptableIcon.Flags.GB"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:F4SD_AdaptableIcon.Flags"
mc:Ignorable="d"
d:DesignHeight="140"
d:DesignWidth="140">
<!--Reference Document-Size in Expression Design: 100px x 100px and 72 DPI => Canvas Size 133.333x133.333 -->
<Viewbox ClipToBounds="True">
<Canvas x:Name="United_Kingdom"
Width="133.333"
Height="133.333"
Canvas.Left="0"
Canvas.Top="0">
<Rectangle x:Name="Rectangle"
Width="153.542"
Height="136.16"
Canvas.Left="-10.0868"
Canvas.Top="-1.47615"
Stretch="Fill"
Fill="#FF012169" />
<Path x:Name="Path"
Width="160.409"
Height="160.517"
Canvas.Left="-13.5201"
Canvas.Top="-13.6547"
Stretch="Fill"
Fill="#FFFFFFFF"
Data="F1 M -6.65351,-13.6547L -13.5201,10.7024L 140.022,146.863L 146.889,122.506M 146.889,10.7024L 140.022,-13.6547L -13.5201,122.506L -6.65351,146.863L 146.889,10.7024 Z " />
<Viewbox x:Name="Group"
Width="158.12"
Height="152.398"
Canvas.Left="-12.3757"
Canvas.Top="-9.59518">
<Canvas Width="158.12"
Height="152.398">
<Canvas Width="133.333"
Height="133.333"
Clip="F1 M 79.0601,76.1991L 155.831,76.1991L 155.831,144.279M 79.0601,76.1991L 79.0601,144.279L 2.28887,144.279M 79.0601,76.1991L 2.28887,76.1991L 2.28887,8.11903M 79.0601,76.1991L 79.0601,8.11903L 155.831,8.11903L 79.0601,76.1991 Z ">
<Path x:Name="Path_0"
Width="158.12"
Height="152.398"
Canvas.Left="0"
Canvas.Top="0"
Stretch="Fill"
Fill="#FFC8102E"
Data="F1 M 4.57775,0L 0,16.2381L 153.542,152.398L 158.12,136.16M 158.12,16.2381L 153.542,0L 0,136.16L 4.57775,152.398L 158.12,16.2381 Z " />
</Canvas>
</Canvas>
</Viewbox>
<Path x:Name="Path_1"
Width="153.542"
Height="136.16"
Canvas.Left="-10.0868"
Canvas.Top="-1.47615"
Stretch="Fill"
Fill="#FFFFFFFF"
Data="F1 M 79.4796,-1.47615L 53.8892,-1.47615L 53.8892,134.684L 79.4796,134.684M -10.0868,43.9106L -10.0868,89.2973L 143.456,89.2973L 143.456,43.9106L -10.0868,43.9106 Z " />
<Path x:Name="Path_2"
Width="153.542"
Height="136.16"
Canvas.Left="-10.0868"
Canvas.Top="-1.47615"
Stretch="Fill"
Fill="#FFC8102E"
Data="F1 M 74.3615,-1.47615L 59.0072,-1.47615L 59.0072,134.684L 74.3615,134.684M -10.0868,52.9879L -10.0868,80.22L 143.456,80.22L 143.456,52.9879L -10.0868,52.9879 Z " />
<Canvas.Clip>
<RectangleGeometry Rect="0 0 133.333 133.333"
RadiusX="15"
RadiusY="15" />
</Canvas.Clip>
</Canvas>
</Viewbox>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace F4SD_AdaptableIcon.Flags
{
/// <summary>
/// Interaction logic for GB.xaml
/// </summary>
public partial class GB : UserControl
{
public GB()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,37 @@
using F4SD_AdaptableIcon.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace F4SD_AdaptableIcon
{
public readonly struct IconData
{
public IconData(enumInternIcons intern)
{
Intern = intern;
Gif = null;
Material = null;
}
public IconData(enumInternGif gif)
{
Intern = null;
Gif = gif;
Material = null;
}
public IconData(MaterialIcons.MaterialIconType material)
{
Intern = null;
Gif = null;
Material = material;
}
public enumInternIcons? Intern { get; }
public enumInternGif? Gif { get; }
public MaterialIcons.MaterialIconType? Material { get; }
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,11 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("F4SD Cockpit Client")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("bab63a6a-1524-435d-9f96-7a30b6ee0624")]

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MaterialIcons" version="1.0.3" targetFramework="net472" />
<package id="WpfAnimatedGif" version="2.0.2" targetFramework="net472" />
</packages>

View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{3320C211-B5F5-4466-B9B5-C860F76B9459}</ProjectGuid>
<OutputType>library</OutputType>
<RootNamespace>F4SD_Cockpit_Client_Intro</RootNamespace>
<AssemblyName>F4SD-Cockpit-Client-Intro</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<Deterministic>true</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<Compile Include="IntroWindow.xaml.cs">
<DependentUpon>IntroWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Page Include="IntroWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Content Include="Resources\F4SD Intro.mov">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,21 @@
<Window x:Class="F4SD_Cockpit_Client_Intro.IntroWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:F4SD_Cockpit_Client_Intro"
mc:Ignorable="d"
Title="First Aid Service Desk"
d:Height="450"
d:Width="800"
WindowState="Maximized"
WindowStyle="None"
Background="#426199"
PreviewKeyDown="Window_PreviewKeyDown">
<Grid>
<MediaElement x:Name="videoPlayer"
Stretch="Fill"
Source="Resources/F4SD Intro.mov"
MediaEnded="videoPlayer_MediaEnded" />
</Grid>
</Window>

View File

@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace F4SD_Cockpit_Client_Intro
{
/// <summary>
/// Interaction logic for IntroWindow.xaml
/// </summary>
public partial class IntroWindow : Window
{
public IntroWindow()
{
InitializeComponent();
}
private void videoPlayer_MediaEnded(object sender, RoutedEventArgs e)
{
Close();
}
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
Close();
}
}
}

View File

@@ -0,0 +1,10 @@
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("F4SD Cockpit Intro")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("7E14E8E7-54F4-44F3-B7DE-F3370178D7B0")]

View File

@@ -0,0 +1,62 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace F4SD_Cockpit_Client_Intro.Properties {
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if ((resourceMan == null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("F4SD_Cockpit_Client_Intro.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace F4SD_Cockpit_Client_Intro.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7793F281-B226-4E20-B6F6-5D53D70F1DC1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>F4SD_Logging</RootNamespace>
<AssemblyName>F4SD-Logging</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>false</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Demo%28Debug%29|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Demo%28Debug%29\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'NewFeatures%28Debug%29|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\NewFeatures%28Debug%29\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\Common Code\Logging\C4IT.Logging.LogManager.cs">
<Link>Common\C4IT.Logging.LogManager.cs</Link>
</Compile>
<Compile Include="..\Shared\CommonAssemblyAttributes.cs">
<Link>Common\CommonAssemblyAttributes.cs</Link>
</Compile>
<Compile Include="..\Shared\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}

View File

@@ -0,0 +1,11 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("F4SD Logging")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("7793f281-b226-4e20-b6f6-5d53d70f1dc1")]

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

View File

@@ -0,0 +1,259 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using IpPbx.CLMgrLib;
using C4IT.Logging;
using static C4IT.Logging.cLogManager;
using System.Runtime.Remoting.Channels;
namespace F4SD_PhoneMonitor
{
public delegate void ActiveCallMessage(string phone, string name, bool isOutgoing);
public class cCLMgrEvents
{
public ActiveCallMessage ActiveCallHandler;
private ClientLineMgrClass pCLMgr = null;
private ClientSdkEventSink MyEventSink = null;
private PubCLMgrLineDetails lastChangedLineDetails;
public bool Initialize()
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
lastChangedLineDetails.m_sPeerName = null;
lastChangedLineDetails.m_sPeerNumber = null;
pCLMgr = new ClientLineMgrClass();
if (pCLMgr == null)
{
LogEntry("Error conntection SwyxIt client interface. Terminating...", LogLevels.Fatal);
return false;
}
pCLMgr.GetVersion(out var Info);
if (Info.dwMajorVersion < 11)
{
LogEntry("Incompatible SwyxIt client version. Terminating...", LogLevels.Fatal);
return false;
}
MyEventSink = new ClientSdkEventSink();
MyEventSink.Connect(pCLMgr, new LineManagerMessageHandler(OnLineManagerMessage));
return true;
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
return false;
}
private void OnLineManagerMessage(ClientSdkEventArgs e)
{
var _msg = e.Msg.ToString();
if (int.TryParse(_msg, out _))
return;
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
LogEntry($"Client event signaled {e.Msg.ToString()}", LogLevels.Debug);
switch (e.Msg)
{
case CLMgrMessage.CLMgrLineStateChangedMessage:
IClientLinePub changedLinePub = (IClientLinePub)pCLMgr.DispGetLine(e.Param);
PubCLMgrLineDetails changedLineDetails;
changedLinePub.PubGetDetails(out changedLineDetails);
lastChangedLineDetails = changedLineDetails;
break;
case CLMgrMessage.CLMgrLineStateChangedMessageEx:
//Get Line
int line = e.Param & 0xff;
int high = e.Param >> 8;
LineState NewLineState;
//Get the LineState
NewLineState = (LineState)high;
LogEntry($"New line state: {NewLineState}", LogLevels.Debug);
if (NewLineState == LineState.Active)
{
if (lastChangedLineDetails.m_sPeerNumber != null)
{
var IsOutgoing = lastChangedLineDetails.m_bIsOutgoing == 1;
var _strDir = IsOutgoing ? "to" : "from";
LogEntry($"Active call {_strDir}: phone={lastChangedLineDetails.m_sPeerNumber}, name={lastChangedLineDetails.m_sPeerName}", LogLevels.Debug);
if (ActiveCallHandler != null)
ActiveCallHandler.Invoke(lastChangedLineDetails.m_sPeerNumber, lastChangedLineDetails.m_sPeerName, IsOutgoing);
}
}
break;
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
}
public void Disconnect()
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (MyEventSink != null)
MyEventSink.Disconnect();
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
}
}
public class ClientSdkEventArgs : EventArgs
{
public CLMgrMessage Msg;
public int Param;
public ClientSdkEventArgs(CLMgrMessage msg, int param)
{
Msg = msg;
Param = param;
}
}
public delegate void LineManagerMessageHandler(ClientSdkEventArgs e);
public class ClientSdkEventSink
{
private ClientLineMgrClass ConnectedLineManager;
private IClientLineMgrEventsPub_PubOnLineMgrNotificationEventHandler EventHandler;
private LineManagerMessageHandler LineManagerMessageDelegateOfForm;
public ClientSdkEventSink()
{
EventHandler = new IClientLineMgrEventsPub_PubOnLineMgrNotificationEventHandler(clmgr_EventSink);
}
public void Connect(ClientLineMgrClass lineManager, LineManagerMessageHandler lineManagerMessageDelegateOfForm)
{
ConnectedLineManager = lineManager;
LineManagerMessageDelegateOfForm = lineManagerMessageDelegateOfForm;
//add eventhandler for the PubOnlineMgrNotification Events
ConnectedLineManager.PubOnLineMgrNotification += EventHandler;
}
public void Disconnect()
{
//remove eventhandler for the PubOnlineMgrNotification Events
ConnectedLineManager.PubOnLineMgrNotification -= EventHandler;
ConnectedLineManager = null;
LineManagerMessageDelegateOfForm = null;
}
private void clmgr_EventSink(int msg, int param)
{
//this method receives the COM events from the client line manger
if ((LineManagerMessageDelegateOfForm != null))
{
LineManagerMessageDelegateOfForm?.Invoke(new ClientSdkEventArgs((CLMgrMessage)msg, param));
}
}
}
public enum CLMgrMessage
{
CLMgrLineStateChangedMessage = 0, //state of at least one line has changed
CLMgrLineSelectionChangedMessage = 1, //line in focus has changed
CLMgrLineDetailsChangedMessage = 2, //details of at least one line have changed
CLMgrCallDetailsMessage = 4, //details of last call are available, post mortem for logging purpose
CLMgrServerDownMessage = 5, //server goes down, keep line manager, wait for ServerUp message
CLMgrServerUpMessage = 6, //server is up again, keep interfaces to line manger
CLMgrWaveDeviceChanged = 7, //speaker / micro has been switched on / off
CLMgrGroupCallNotificationMessage = 8, //notification about group call
CLMgrNumberOfLinesChangedMessage = 10, //the number of lines has changed
CLMgrClientShutDownRequest = 11, //Client Line Manager requests client to shutdown and release all interfaces
CLMgrLineStateChangedMessageEx = 28, //state of certain line has changed, lParam: LOWORD: line index of line that changed its state (starting with 0) HIWORD: new state of this line
CLMgrSIPRegistrationStateChanged = 30, //registration state of SIP account has changed
//lParam: LOBYTE: Account index
// HIBYTE: new state
CLMgrWaveFilePlayed = 31, //wave file playback finished
//lParam: line index;
//if -1, the message is related to a LineMgr function PlaySoundFile or PlayToRtp
//if >=0 the message is related to a line function PlaySoundFile of line with this index
PubCLMgrFirstDataReceived = 32 //first RTP data received on line, might be silence
//lParam: line index;
}
public enum LineState
{
Inactive = 0, //line is inactive
HookOffInternal = 1, //off hook, internal dialtone
HookOffExternal = 2, //off hook, external dialtone
Ringing = 3, //incoming call, ringing
Dialing = 4, //outgoing call, we are dialing, no sound
Alerting = 5, //outgoing call, alerting = ringing on destination
Knocking = 6, //outgoing call, knocking = second call ringing on destination
Busy = 7, //outgoing call, destination is busy
Active = 8, //incoming / outgoing call, logical and physical connection is established
OnHold = 9, //incoming / outgoing call, logical connection is established, destination gets music on hold
ConferenceActive = 10, //incoming / outgoing conference, logical and physical connection is established
ConferenceOnHold = 11, //incoming / outgoing conference, logical connection is established, not physcically connected
Terminated = 12, //incoming / outgoing connection / call has been disconnected
Transferring = 13, //special LSOnHold, call is awaiting to be transferred, peer gets special music on hold
Disabled = 14 //special LSInactive: wrap up time
}
public enum DisconnectReason
{
Normal = 0,
Busy = 1,
Rejected = 2,
Cancelled = 3,
Transferred = 4,
JoinedConference = 5,
NoAnswer = 6,
TooLate = 7,
DirectCallImpossible = 8,
WrongNumber = 9,
Unreachable = 10,
CallDiverted = 11,
CallRoutingFailed = 12,
PermissionDenied = 13,
NetworkCongestion = 14,
NoChannelAvailable = 15,
NumberChanged = 16,
IncompatibleDestination = 17
}
}

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{5721E81F-3C41-4C63-8EA0-EE8D1CE73778}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>F4SD_PhoneMonitor</RootNamespace>
<AssemblyName>F4SD-PhoneMonitor</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>false</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>logo_FASD.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Demo%28Debug%29|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Demo%28Debug%29\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'NewFeatures%28Debug%29|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\NewFeatures%28Debug%29\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Interop.CLMgr, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cf78dfa0a74454f8, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<EmbedInteropTypes>False</EmbedInteropTypes>
<HintPath>.\Interop.CLMgr.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\C4IT FASD\_Common\C4IT.F4SD.TapiHelper.cs">
<Link>C4IT.F4SD.TapiHelper.cs</Link>
</Compile>
<Compile Include="..\FasdDesktopUi\Basics\NamedPipes.cs">
<Link>Common\NamedPipes.cs</Link>
</Compile>
<Compile Include="..\Shared\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="CLMgrEvents.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Interop.CLMgr.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="logo_FASD.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\F4SD-Logging\F4SD-Logging.csproj">
<Project>{7793f281-b226-4e20-b6f6-5d53d70f1dc1}</Project>
<Name>F4SD-Logging</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<COMReference Include="TAPI3Lib">
<Guid>{21D6D480-A88B-11D0-83DD-00AA003CCABD}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>False</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}

Binary file not shown.

View File

@@ -0,0 +1,414 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Pipes;
using System.Text;
using System.Diagnostics;
using Microsoft.Win32;
using Newtonsoft.Json;
using C4IT.Logging;
using C4IT.F4SD.TAPI;
using static C4IT.Logging.cLogManager;
using FasdDesktopUi.Basics;
namespace F4SD_PhoneMonitor
{
static class Program
{
public static string sendPipeName = null;
public static string listenPipeName = null;
public static string tapiLine = null;
public static bool SignalOutgoingCall = false;
public static string ExternalCallPrefix = "";
public static bool IsSimulation = false;
public static int SendError = 0;
public static cCLMgrEvents lmg = null;
public static System.Timers.Timer timerPolling = new System.Timers.Timer(100);
public static cF4sdPipeServer pipeServer = null;
public static bool StopImmediate = false;
[STAThread]
static int Main(string[] args)
{
try
{
cLogManagerFile.CreateInstance(false, SubFolder: "Logs");
cLogManager.DefaultLogger.LogAssemblyInfo();
}
catch
{
return 1;
}
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (args.Length < 3 || args.Length > 6)
{
LogEntry("No valid pipe names at command line. Terminating...", LogLevels.Fatal);
return -1;
}
sendPipeName = args[0];
listenPipeName = args[1];
tapiLine = args[2];
if (args.Length >= 4)
ExternalCallPrefix = args[3];
if (args.Length >= 5)
{
if (args[4] == "1")
SignalOutgoingCall = true;
}
if (args.Length >= 6)
{
if (args[5] == "simulation")
IsSimulation = true;
}
if (tapiLine.ToLowerInvariant() == "swyxitnative")
{
if (!ConnectSwyxit())
return -1;
}
else
{
if (!ConnectTapi(tapiLine))
{
System.Environment.Exit(-1);
}
}
timerPolling.Elapsed += TimerPolling_Elapsed;
timerPolling.Start();
var SessionId = 0;
try
{
SessionId = Process.GetCurrentProcess().SessionId;
}
catch { }
pipeServer = new cF4sdPipeServer();
pipeServer.PipeMessage += PipeServer_PipeMessage;
pipeServer.Listen(listenPipeName, MaxSize: 255, LowerIntegrity: true);
LogEntry($"Start listening on named pipe '{listenPipeName}'...", LogLevels.Debug);
SystemEvents.SessionEnding += SystemEvents_SessionEnding;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ApplicationExit += OnApplicationExit;
Application.Run();
return 0;
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
return -1;
}
static bool ConnectSwyxit()
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
var regObj = Registry.GetValue("HKEY_CLASSES_ROOT\\CLSID\\{F8E552F8-4C00-11D3-80BC-00105A653379}\\VersionIndependentProgID", null, null);
if (!(regObj is string strObj) || strObj.ToLowerInvariant() != "clmgr.clientlinemgr")
{
LogEntry("SwyxIt client seems not to be installed. Terminating...", LogLevels.Fatal);
return false;
}
lmg = new cCLMgrEvents();
if (!lmg.Initialize())
return false;
lmg.ActiveCallHandler += ActiveCallMessage;
return true;
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
return false;
}
static bool ConnectTapi(string Line)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
C4TapiHelper.Instance = new C4TapiHelper();
C4TapiHelper.Instance.Initialize(TapiMessageHandler);
C4TapiHelper.Instance.GetLines();
if (C4TapiHelper.Instance.ConnectLine(Line))
return true;
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
return false;
}
private static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
LogEntry("User logout detected. Terminating...", LogLevels.Debug);
Application.Exit();
}
private static void TimerPolling_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
timerPolling.Stop();
if (StopImmediate)
{
Application.Exit();
return;
}
timerPolling.Interval = 10000;
bool res = false;
lock (sendPipeName)
{
res = Send("Hello", sendPipeName);
};
if (res)
SendError = 0;
else
{
SendError++;
if (SendError == 2)
Application.Exit();
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
timerPolling.Start();
}
static private void OnApplicationExit(object sender, EventArgs e)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
timerPolling.Stop();
try
{
if (lmg != null)
{
lmg.ActiveCallHandler -= ActiveCallMessage;
lmg.Disconnect();
}
}
catch { }
try
{
if (C4TapiHelper.Instance != null)
{
C4TapiHelper.Instance.Dispose();
C4TapiHelper.Instance = null;
}
}
catch { }
if (pipeServer != null)
{
LogEntry("stopping pipe server...", LogLevels.Debug);
pipeServer.Stop();
pipeServer.Dispose();
pipeServer = null;
LogEntry("...finished.", LogLevels.Debug);
}
//Application.ApplicationExit -= OnApplicationExit;
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
}
static void ActiveCallMessage(string phone, string name, bool isOutgoing)
{
if (isOutgoing && !SignalOutgoingCall)
{
LogEntry("An outgoing call is signaled but signaling outgoing calls is not enabled.");
return;
}
if (sendPipeName == null)
return;
if (string.IsNullOrWhiteSpace(phone))
return;
if (name == null)
name = "";
var phone2 = phone.Trim();
if (!string.IsNullOrEmpty(ExternalCallPrefix) && phone2.StartsWith(ExternalCallPrefix))
phone2 = phone2.Remove(0,ExternalCallPrefix.Length);
if (phone2.StartsWith("+"))
{
var _r = Math.Min(phone2.Length, 3);
phone2 = phone2.Remove(0, _r);
}
else if (phone2.StartsWith("00"))
{
var _r = Math.Min(phone2.Length, 4);
phone2 = phone2.Remove(0, _r);
}
if (phone2.StartsWith("0"))
phone2 = phone2.Remove(0, 1);
var phone3 = "";
foreach (var C in phone2)
if ((C >= '0') && (C <= '9'))
phone3 += C;
var name2 = name.Trim();
var _strDir = isOutgoing ? "outgoing" : "incoming";
LogEntry($"Signaling {_strDir} call: phone={phone2}, name={name2}", LogLevels.Debug);
var Info = JsonConvert.SerializeObject(new cPhoneSearchParameters() { phone = phone3, name = name2 });
lock (sendPipeName)
{
Send($"phonesearch: {Info}", sendPipeName);
}
}
static public bool Send(string SendStr, string PipeName, int TimeOut = 1000)
{
try
{
if (IsSimulation)
{
LogEntry($"simulatied pipe send: {SendStr}");
return true;
}
NamedPipeClientStream pipeStream = new NamedPipeClientStream
(".", PipeName, PipeDirection.Out, PipeOptions.WriteThrough);
// The connect function will indefinitely wait for the pipe to become available
// If that is not acceptable specify a maximum waiting time (in ms)
pipeStream.Connect(TimeOut);
byte[] _buffer = Encoding.UTF8.GetBytes(SendStr);
pipeStream.Write(_buffer, 0, _buffer.Length);
pipeStream.Flush();
pipeStream.Close();
pipeStream.Dispose();
return true;
}
catch (TimeoutException oEX)
{
if (DefaultLogger.IsDebug)
cLogManager.DefaultLogger.LogException(oEX);
}
return false;
}
static private void PipeServer_PipeMessage(string Reply)
{
if (Reply.ToLowerInvariant() == "stop")
{
timerPolling.Stop();
StopImmediate = true;
timerPolling.Interval = 100;
timerPolling.Start();
}
}
private static void TapiMessageHandler(C4TapiHelper.C4TapiLineInfo lineInfo)
{
if (lineInfo.eventType == C4TapiHelper.eTapiEventType.connected)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
ActiveCallMessage(lineInfo.participantPhoneNumber, lineInfo.participantName, lineInfo.IsOutbound);
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
}
}
public class cPhoneSearchParameters
{
public string phone { get; set; }
public string name { get; set; } = null;
}
}
}

View File

@@ -0,0 +1,11 @@
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows;
[assembly: AssemblyTitle("F4SD SwyxIt Phone call Monitor")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("5721e81f-3c41-4c63-8ea0-ee8d1ce73778")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace F4SD_PhoneMonitor.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("F4SD_PhoneMonitor.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace F4SD_PhoneMonitor.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
</packages>

View File

@@ -0,0 +1,176 @@
using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication;
using FasdDesktopUi.Basics.Services.RelationService;
using NSubstitute;
using ServiceUnderTest = FasdDesktopUi.Basics.Services.RelationService;
namespace F4SD.Cockpit.Client.Test.Basics.Sevices.RelationService;
public class RelationServiceTest
{
private readonly ServiceUnderTest.RelationService _relationService = new();
private readonly cFasdCockpitCommunicationBase _communication = Substitute.For<cFasdCockpitCommunicationBase>();
public RelationServiceTest()
{
cFasdCockpitCommunicationBase.Instance = _communication;
}
[Fact(Timeout = 2_000)]
public async Task LoadedRelation_IsIn_GetLoadedRelations_Test()
{
// Arrange
Guid taskGuid = Guid.NewGuid();
cF4sdApiSearchResultRelation mockRelation = new()
{
id = Guid.NewGuid(),
Type = enumF4sdSearchResultClass.User
};
_communication.StartGatheringRelations(Arg.Any<IEnumerable<cFasdApiSearchResultEntry>>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(new cF4sdStagedSearchResultRelationTaskId() { Id = taskGuid }));
_communication.GetStagedRelations(taskGuid, Arg.Any<CancellationToken>())
.Returns(Task.FromResult(new cF4sdStagedSearchResultRelations()
{
PendingInformationClasses = [],
Relations = [mockRelation]
}));
TaskCompletionSource tcs = new(TaskCreationOptions.RunContinuationsAsynchronously);
_relationService.RelationsFound += OnRelationsFound;
try
{
// Act
await _relationService.LoadRelationsAsync(null, TestContext.Current.CancellationToken);
// Assert
await tcs.Task;
var actual = _relationService.GetLoadedRelations();
Assert.Contains(mockRelation, actual);
}
finally
{
_relationService.RelationsFound -= OnRelationsFound;
}
void OnRelationsFound(object? s, EventArgs e)
{
tcs.TrySetResult();
}
}
[Fact(Timeout = 2_000)]
public async Task LoadRelations_Raises_RelationsFound()
{
// Arrange
Guid taskGuid = Guid.NewGuid();
cF4sdApiSearchResultRelation mockRelation = new()
{
id = Guid.NewGuid(),
Type = enumF4sdSearchResultClass.User
};
_communication.StartGatheringRelations(Arg.Any<IEnumerable<cFasdApiSearchResultEntry>>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(new cF4sdStagedSearchResultRelationTaskId() { Id = taskGuid }));
_communication.GetStagedRelations(taskGuid, Arg.Any<CancellationToken>())
.Returns(Task.FromResult(new cF4sdStagedSearchResultRelations()
{
PendingInformationClasses = [],
Relations = [mockRelation]
}));
TaskCompletionSource<StagedSearchResultRelationsEventArgs> tcs = new(TaskCreationOptions.RunContinuationsAsynchronously);
_relationService.RelationsFound += OnRelationsFound;
try
{
await _relationService.LoadRelationsAsync(null, TestContext.Current.CancellationToken);
// Assert
var eventResult = await tcs.Task;
Assert.NotNull(eventResult);
Assert.Contains(mockRelation, eventResult.StagedResultRelations.Relations);
}
finally
{
_relationService.RelationsFound -= OnRelationsFound;
}
void OnRelationsFound(object? sender, StagedSearchResultRelationsEventArgs e)
{
tcs.TrySetResult(e);
}
}
[Fact(Timeout = 2_000)]
public async Task GetLoadedRelations_ContainsOnly_ActualRelations_Test()
{
// Arrange
Guid taskGuid = Guid.NewGuid();
cF4sdApiSearchResultRelation mockRelation1 = new()
{
id = Guid.NewGuid(),
Type = enumF4sdSearchResultClass.User
};
cF4sdApiSearchResultRelation mockRelation2 = new()
{
id = Guid.NewGuid(),
Type = enumF4sdSearchResultClass.Computer
};
_communication.StartGatheringRelations(Arg.Any<IEnumerable<cFasdApiSearchResultEntry>>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult(new cF4sdStagedSearchResultRelationTaskId() { Id = taskGuid }));
TaskCompletionSource tcs = new(TaskCreationOptions.RunContinuationsAsynchronously);
try
{
// Act
// load relations first time
_communication.GetStagedRelations(taskGuid, Arg.Any<CancellationToken>())
.Returns(Task.FromResult(new cF4sdStagedSearchResultRelations()
{
PendingInformationClasses = [],
Relations = [mockRelation1]
}));
_relationService.RelationsFound += OnRelationsFound;
await _relationService.LoadRelationsAsync(null, TestContext.Current.CancellationToken);
await tcs.Task;
// load relations second time
tcs = new(TaskCreationOptions.RunContinuationsAsynchronously);
_communication.GetStagedRelations(taskGuid, Arg.Any<CancellationToken>())
.Returns(Task.FromResult(new cF4sdStagedSearchResultRelations()
{
PendingInformationClasses = [],
Relations = [mockRelation2]
}));
await _relationService.LoadRelationsAsync(null, TestContext.Current.CancellationToken);
await tcs.Task;
// Assert
var actual = _relationService.GetLoadedRelations();
Assert.DoesNotContain(mockRelation1, actual);
Assert.Contains(mockRelation2, actual);
}
finally
{
_relationService.RelationsFound -= OnRelationsFound;
}
void OnRelationsFound(object? s, EventArgs e)
{
tcs.TrySetResult();
}
}
}

View File

@@ -0,0 +1,65 @@
using C4IT.FASD.Base;
using FasdDesktopUi.Basics.Services.RelationService;
using FasdDesktopUi.Basics.Services.SupportCase;
using NSubstitute;
namespace F4SD.Cockpit.Client.Test.Basics.Sevices.SupportCase;
public class SupportCaseTest
{
private readonly ISupportCase _supportCase;
private readonly IRelationService _relationService;
public SupportCaseTest()
{
_relationService = Substitute.For<IRelationService>();
cF4sdIdentityEntry primaryIdentity = new() { Class = enumFasdInformationClass.User, Id = Guid.NewGuid() };
_supportCase = SupportCaseFactory.Get(primaryIdentity, _relationService, null);
}
[Fact]
public void GetCaseRelations_Contains_AddCaseRelations()
{
var actualRelations = _supportCase.GetCaseRelations();
Assert.Empty(actualRelations);
ILookup<enumFasdInformationClass, cF4sdApiSearchResultRelation> relations = new List<cF4sdApiSearchResultRelation>()
{
new() { Type = enumF4sdSearchResultClass.Computer, Name = "My computer", Identities = [
new() { Id = Guid.NewGuid(), Class = enumFasdInformationClass.Computer }
] }
}.ToLookup(r => cF4sdIdentityEntry.GetFromSearchResult(r.Type), r => r);
_supportCase.AddCaseRelations(relations);
actualRelations = _supportCase.GetCaseRelations();
Assert.Single(actualRelations);
Assert.Contains(relations.FirstOrDefault(), actualRelations);
}
[Fact]
public void AddCaseRelations_Raise_CaseRelationsAdded()
{
ILookup<enumFasdInformationClass, cF4sdApiSearchResultRelation> relations = new List<cF4sdApiSearchResultRelation>()
{
new()
{
Type = enumF4sdSearchResultClass.Computer,
Name = "My computer",
Identities =
[
new() { Id = Guid.NewGuid(), Class = enumFasdInformationClass.Computer }
]
}
}.ToLookup(r => cF4sdIdentityEntry.GetFromSearchResult(r.Type), r => r);
var raisedEvent = Assert.Raises<RelationEventArgs>(
h => _supportCase.CaseRelationsAdded += h,
h => _supportCase.CaseRelationsAdded -= h,
() => _supportCase.AddCaseRelations(relations));
Assert.NotNull(raisedEvent);
Assert.Equal(_supportCase, raisedEvent.Sender);
Assert.Equal(relations, raisedEvent.Arguments.Relations);
}
}

View File

@@ -0,0 +1,43 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Exe</OutputType>
<RootNamespace>F4SD.Cockpit.Client.Test</RootNamespace>
<TargetFramework>net9.0</TargetFramework>
<!--
To enable the Microsoft Testing Platform 'dotnet test' experience, add property:
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
To enable the Microsoft Testing Platform native command line experience, add property:
<UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>
For more information on Microsoft Testing Platform support in xUnit.net, please visit:
https://xunit.net/docs/getting-started/v3/microsoft-testing-platform
-->
</PropertyGroup>
<ItemGroup>
<Content Include="xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="xunit.v3" Version="3.1.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FasdDesktopUi\F4SD-Cockpit-Client.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,3 @@
{
"$schema": "https://xunit.net/schema/current/xunit.runner.schema.json"
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

View File

@@ -0,0 +1,17 @@
<Application x:Class="F4SDicons.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--Dark/LightMode-->
<ResourceDictionary Source="ResourcesLightMode.xaml"/>
<!--ScrollViewer Ressourcen-->
<ResourceDictionary Source="ScrollViewerResources.xaml"/>
<!--Slider Ressourcen-->
<ResourceDictionary Source="CustomSlider.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

View File

@@ -0,0 +1,21 @@
using C4IT.Logging;
using System.Windows;
namespace F4SDicons
{
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
InitializeLogger();
}
private void InitializeLogger()
{
cLogManagerFile.CreateInstance(false, SubFolder: "Logs");
cLogManager.DefaultLogger.LogAssemblyInfo();
}
}
}

View File

@@ -0,0 +1,97 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Style x:Key="SliderRepeatButton" TargetType="RepeatButton">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="IsTabStop" Value="false" />
<Setter Property="Focusable" Value="false" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RepeatButton">
<Border x:Name="RightSliderBorder" Background="{DynamicResource colorF2F2F2}" Height="5" BorderThickness="1"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SliderRepeatButton1" TargetType="RepeatButton">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RepeatButton">
<Border x:Name="LeftSliderBorder" SnapsToDevicePixels="True" Background="{DynamicResource colorF2F2F2}" Height="5" BorderThickness="1"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SliderThumb" TargetType="Thumb">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Thumb">
<!--Add name to ellipse to use in controltemplate triggers-->
<Border x:Name="ThumbBorder" Height="15" Width="15" CornerRadius="10" VerticalAlignment="Center" HorizontalAlignment="Center" Background="{DynamicResource color3D3C3C}" Padding="2">
<TextBlock x:Name="ThumbBorderText" FontSize="12" FontWeight="DemiBold" Foreground="{DynamicResource colorF7FAFA}" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" Visibility="Collapsed" Text="{Binding RelativeSource={RelativeSource AncestorType=Slider, AncestorLevel=1}, Path=Value, StringFormat=N0}">
<!--<TextBlock.Text>
<Binding ElementName="CustomSlider" Path="Value"/>
</TextBlock.Text>-->
</TextBlock>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="ThumbBorder" Property="Height" Value="27"></Setter>
<Setter TargetName="ThumbBorder" Property="Width" Value="27"></Setter>
<Setter TargetName="ThumbBorder" Property="CornerRadius" Value="13"></Setter>
<Setter Property="Cursor" Value="Hand"></Setter>
<Setter TargetName="ThumbBorderText" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="Slider" TargetType="Slider">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="30"/>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Track Grid.Row="1" x:Name="PART_Track" >
<Track.DecreaseRepeatButton>
<RepeatButton Style="{StaticResource SliderRepeatButton1}" Command="Slider.DecreaseLarge" />
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb Style="{StaticResource SliderThumb}" />
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Style="{StaticResource SliderRepeatButton}" Command="Slider.IncreaseLarge" />
</Track.IncreaseRepeatButton>
</Track>
</Grid>
</ControlTemplate>
<Style x:Name="CustomSlider" TargetType="Slider">
<Setter Property="Focusable" Value="False"/>
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Minimum" Value="50"/>
<Setter Property="Maximum" Value="200"/>
<Setter Property="Value" Value="100"/>
<Style.Triggers>
<Trigger Property="Orientation" Value="Horizontal">
<Setter Property="MinHeight" Value="21" />
<Setter Property="MinWidth" Value="104" />
<Setter Property="Template" Value="{StaticResource Slider}" />
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>

View File

@@ -0,0 +1,225 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{459169D0-712D-46A8-B9A8-2EE0FDFD3AF3}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>F4SDicons</RootNamespace>
<AssemblyName>F4SD-IconPicker</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>false</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Setup %28Release%29|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Setup %28Release%29\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>IconPickerLogo.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'NewFeatures%28Debug%29|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\NewFeatures%28Debug%29\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="MaterialIcons, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\MaterialIcons.1.0.3\lib\MaterialIcons.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="WpfAnimatedGif, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9e7cd3b544a090dc, processorArchitecture=MSIL">
<HintPath>..\..\packages\WpfAnimatedGif.2.0.2\lib\net40\WpfAnimatedGif.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="..\..\..\Common Code\MultiLanguage\C4IT.MultiLanguage.MultiLanguageSupport.cs">
<Link>Common\C4IT.MultiLanguage.MultiLanguageSupport.cs</Link>
</Compile>
<Compile Include="..\..\..\Common Code\XML\C4IT.XML.ConfigParsing.cs">
<Link>Common\C4IT.XML.ConfigParsing.cs</Link>
</Compile>
<Compile Include="Models\AdvancedIconInformation.cs" />
<Compile Include="Models\IconCollectionUserControl.cs" />
<Compile Include="Models\RoutedEventArgsIconInfo.cs" />
<Compile Include="User Controls\CopyTextBox.xaml.cs">
<DependentUpon>CopyTextBox.xaml</DependentUpon>
</Compile>
<Compile Include="User Controls\IconGrid.xaml.cs">
<DependentUpon>IconGrid.xaml</DependentUpon>
</Compile>
<Compile Include="User Controls\IconList.xaml.cs">
<DependentUpon>IconList.xaml</DependentUpon>
</Compile>
<Compile Include="User Controls\SearchBar.xaml.cs">
<DependentUpon>SearchBar.xaml</DependentUpon>
</Compile>
<Compile Include="User Controls\WindowStateBar.xaml.cs">
<DependentUpon>WindowStateBar.xaml</DependentUpon>
</Compile>
<Compile Include="User Controls\ZoomViewer.xaml.cs">
<DependentUpon>ZoomViewer.xaml</DependentUpon>
</Compile>
<Page Include="CustomSlider.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Page Include="ResourcesDarkMode.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="ResourcesLightMode.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="ScrollViewerResources.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="User Controls\CopyTextBox.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="User Controls\IconGrid.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="User Controls\IconList.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="User Controls\SearchBar.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="User Controls\WindowStateBar.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="User Controls\ZoomViewer.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Resource Include="F4SDicon.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Images\IconsF4SD.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Images\F4SDicon3.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Images\IconPickerLogo.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\F4SD-AdaptableIcon\F4SD-AdaptableIcon.csproj">
<Project>{bab63a6a-1524-435d-9f96-7a30b6ee0624}</Project>
<Name>F4SD-AdaptableIcon</Name>
</ProjectReference>
<ProjectReference Include="..\..\F4SD-Logging\F4SD-Logging.csproj">
<Project>{7793f281-b226-4e20-b6f6-5d53d70f1dc1}</Project>
<Name>F4SD-Logging</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Resource Include="IconPickerLogo.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

View File

@@ -0,0 +1,190 @@
<Window x:Class="F4SDicons.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:F4SDicons"
xmlns:mi="clr-namespace:MaterialIcons;assembly=MaterialIcons"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
xmlns:uc="clr-namespace:F4SDicons.User_Controls"
mc:Ignorable="d"
SizeChanged="Window_SizeChanged"
WindowStyle="None"
ResizeMode="NoResize"
Title="F4SD Icon Picker" Height="600" Width="880" Icon="/Images/IconPickerLogo.ico">
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="45"/>
</WindowChrome.WindowChrome>
<Window.Resources>
<SolidColorBrush x:Key="color1C4A99" Color="#1C4A99"/>
<SolidColorBrush x:Key="colorFFFFFF" Color="#FFFFFF"/>
<BooleanToVisibilityConverter x:Key="MyBoolToVisibilityConverter" />
</Window.Resources>
<Grid Background="{DynamicResource colorE9E9E9}">
<Grid.RowDefinitions>
<RowDefinition Height="45"/>
<RowDefinition Height="*"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<uc:WindowStateBar Grid.Column="1" WindowChrome.IsHitTestVisibleInChrome="True">
</uc:WindowStateBar>
</Grid>
<Grid Grid.Row="1" Name="upperGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition x:Name="colDef3" Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Column="0" Grid.Row="2" Name="listGrid" VerticalAlignment="Stretch" Background="{DynamicResource colorE9E9E9}">
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<uc:SearchBar x:Name="SearchBarUC">
</uc:SearchBar>
<Border Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ScrollViewer Margin="0,0,5,0">
<StackPanel Name="mIconsStackpanel" Orientation="Vertical">
<uc:IconList x:Name="IconListUC" IconSelected="Viewer_IconSelected" />
<uc:IconGrid x:Name="IconGridUC" IconSelected="Viewer_IconSelected" Visibility="Collapsed"/>
</StackPanel>
</ScrollViewer>
</Border>
</Grid>
<Grid Grid.Column="1" Grid.Row="0" Background="{DynamicResource colorE9E9E9}">
<Grid.RowDefinitions>
<RowDefinition Height="6*"/>
<RowDefinition Height="60"/>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>
<uc:ZoomViewer Grid.Row="0" x:Name="currentIconUC">
</uc:ZoomViewer>
<uc:CopyTextBox Grid.Row="1" x:Name="currentNameUC" ToolTipText="Icon-Name kopieren">
</uc:CopyTextBox>
<uc:CopyTextBox Grid.Row="2" x:Name="currentFullNameUC" ToolTipText="XML-Konfigurationswert kopieren">
</uc:CopyTextBox>
</Grid>
</Grid>
<Grid Grid.Row="2" Name="bottomGrid" Background="{DynamicResource colorE9E9E9}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="35"/>
<ColumnDefinition Width="3"/>
<ColumnDefinition Width="35"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<Style TargetType="Border">
<Setter Property="Background" Value="{DynamicResource colorE9E9E9}"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="CornerRadius" Value="5"/>
<Setter Property="Height" Value="35"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource colorF2F2F2}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color3D3C3C}"/>
<Setter Property="IconHeight" Value="30"/>
<Setter Property="IconWidth" Value="30"/>
<Setter Property="BorderPadding" Value="5"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color1F92EE}"/>
<Setter Property="IconBackgroundColor" Value="{DynamicResource colorF2F2F2}"/>
<Setter Property="Cursor" Value="Hand"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="F4SDicon" TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color3D3C3C}"/>
<Setter Property="SecondaryIconColor" Value="{DynamicResource colorF7FAFA}"/>
<Setter Property="BorderPadding" Value="0"/>
<Setter Property="IconWidth" Value="30"/>
<Setter Property="IconHeight" Value="30"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color1C4A99}"/>
<Setter Property="SecondaryIconColor" Value="{DynamicResource colorFFFFFF}"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<ico:AdaptableIcon Grid.Column="0" x:Name="materialLogo" Style="{DynamicResource F4SDicon}" SelectedInternIcon="f4sd">
</ico:AdaptableIcon>
<ico:AdaptableIcon Grid.Column="2" x:Name="gridIcon" MouseLeftButtonUp="ChangeToGrid_ButtonUp" ToolTip="Gitter-Ansicht" SelectedMaterialIcon="ic_grid_on">
</ico:AdaptableIcon>
<ico:AdaptableIcon Grid.Column="2" x:Name="listIcon" Visibility="Collapsed" MouseLeftButtonUp="ChangeToList_ButtonUp" ToolTip="Listen-Ansicht" SelectedMaterialIcon="ic_format_list_bulleted">
</ico:AdaptableIcon>
<ico:AdaptableIcon Grid.Column="4" x:Name="darkModeIcon" MouseLeftButtonUp="ChangeToDarkMode_ButtonUp" ToolTip="Dark-Mode" SelectedInternIcon="style_moonFilled">
</ico:AdaptableIcon>
<ico:AdaptableIcon Grid.Column="4" x:Name="lightModeIcon" Visibility="Collapsed" MouseLeftButtonUp="ChangeToLightMode_ButtonUp" ToolTip="Light-Mode" SelectedInternIcon="style_sunFilled">
</ico:AdaptableIcon>
</Grid>
</Grid>
</Window>

View File

@@ -0,0 +1,311 @@
using FasdDesktopUi.Basics.UserControls.AdaptableIcon;
using MaterialIcons;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using F4SDicons.Models;
using F4SD_AdaptableIcon.Enums;
namespace F4SDicons
{
public partial class MainWindow : System.Windows.Window
{
private List<cAdvancedIconInformation> iconInformation = new List<cAdvancedIconInformation>();
public MainWindow() => InitializeComponent();
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
SearchBarUC.bindingTextBox.DataContext = this;
InstantiateIconInformation();
}
private void InstantiateIconInformation()
{
List<cAdvancedIconInformation> IconInformation = new List<cAdvancedIconInformation>();
foreach (enumInternIcons internIcon in Enum.GetValues(typeof(enumInternIcons)))
{
switch (internIcon)
{
case enumInternIcons.none:
case enumInternIcons.fasd:
case enumInternIcons.f4sd:
case enumInternIcons.f4sd_outline:
case enumInternIcons.f4sd_speedo:
case enumInternIcons.f4sd_product_logo:
case enumInternIcons.misc_functionMarker:
continue;
}
cAdvancedIconInformation tempIconInformation = new cAdvancedIconInformation() { IsVisible = true };
tempIconInformation.UpdateIconInformation(internIcon);
IconInformation.Add(tempIconInformation);
}
foreach (MaterialIconType materialIcon in Enum.GetValues(typeof(MaterialIconType)))
{
cAdvancedIconInformation tempIconInformation = new cAdvancedIconInformation() { IsVisible = true };
tempIconInformation.UpdateIconInformation(materialIcon);
IconInformation.Add(tempIconInformation);
}
iconInformation = IconInformation;
IconListUC.IconInformation = IconInformation;
IconGridUC.IconInformation = IconInformation;
}
#region Variables
bool greaterThan = false;
string src = "ResourcesLightMode.xaml";
#endregion
#region Search Filter
private string searchvalue;
public string SearchValue
{
get { return searchvalue; }
set
{
searchvalue = value;
FilterIconInformation(value);
}
}
private void FilterIconInformation(string filterValue)
{
foreach (var information in iconInformation)
{
if (string.IsNullOrWhiteSpace(filterValue))
{
information.IsVisible = true;
continue;
}
information.IsVisible = information.IconName.Contains(filterValue);
}
}
#endregion
#region Size Change
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
var ah = ActualHeight;
var aw = ActualWidth;
if (ah > aw)
{
if (greaterThan == false)
{
HeightGtWidth();
}
}
else
{
if (greaterThan == true)
{
WidthGtHeight();
}
}
}
private void HeightGtWidth()
{
RowDefinition rowDef3 = new RowDefinition();
rowDef3.Height = new GridLength(1, GridUnitType.Star);
upperGrid.RowDefinitions.Add(rowDef3);
var spareColumnDefinitions = upperGrid.ColumnDefinitions.Skip(1).ToList();
foreach (var spareColumnDefinition in spareColumnDefinitions)
{
upperGrid.ColumnDefinitions.Remove(spareColumnDefinition);
}
greaterThan = true;
}
private void WidthGtHeight()
{
ColumnDefinition colDef3 = new ColumnDefinition();
colDef3.Width = new GridLength(1, GridUnitType.Star);
upperGrid.ColumnDefinitions.Add(colDef3);
var spareRowDefinitions = upperGrid.RowDefinitions.Skip(1).ToList();
foreach (var spareRowDefinition in spareRowDefinitions)
{
upperGrid.RowDefinitions.Remove(spareRowDefinition);
}
greaterThan = false;
}
#endregion
#region Grid/List
bool gridMode = false;
#region To Grid
private void ChangeToGrid_ButtonUp(object sender, MouseButtonEventArgs e)
{
if (gridMode == false)
{
ShowGrid();
}
listIcon.Visibility = Visibility.Visible;
gridIcon.Visibility = Visibility.Collapsed;
gridMode = true;
}
public void ShowGrid()
{
IconGridUC.Visibility = Visibility.Visible;
IconListUC.Visibility = Visibility.Collapsed;
}
#endregion
#region To List
private void ChangeToList_ButtonUp(object sender, MouseButtonEventArgs e)
{
if (gridMode == true)
{
ShowList();
}
gridIcon.Visibility = Visibility.Visible;
listIcon.Visibility = Visibility.Collapsed;
gridMode = false;
}
public void ShowList()
{
IconListUC.Visibility = Visibility.Visible;
IconGridUC.Visibility = Visibility.Collapsed;
}
#endregion
#endregion
#region Color Mode
bool colorMode = false;
#region Dark Mode
private void ChangeToDarkMode_ButtonUp(object sender, MouseButtonEventArgs e)
{
if (colorMode == false)
{
Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
src = "ResourcesDarkMode.xaml";
System.Windows.Application.Current.Resources.MergedDictionaries.Insert(0, new ResourceDictionary { Source = new Uri(src, UriKind.Relative) });
System.Windows.Application.Current.Resources.MergedDictionaries.Remove(System.Windows.Application.Current.Resources.MergedDictionaries[1]);
}
lightModeIcon.Visibility = Visibility.Visible;
darkModeIcon.Visibility = Visibility.Collapsed;
colorMode = true;
Mouse.OverrideCursor = null;
}
#endregion
#region Light Mode
private void ChangeToLightMode_ButtonUp(object sender, MouseButtonEventArgs e)
{
if (colorMode == true)
{
Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
src = "ResourcesLightMode.xaml";
System.Windows.Application.Current.Resources.MergedDictionaries.Insert(0, new ResourceDictionary { Source = new Uri(src, UriKind.Relative) });
System.Windows.Application.Current.Resources.MergedDictionaries.Remove(System.Windows.Application.Current.Resources.MergedDictionaries[1]);
}
darkModeIcon.Visibility = Visibility.Visible;
lightModeIcon.Visibility = Visibility.Collapsed;
colorMode = false;
Mouse.OverrideCursor = null;
}
#endregion
#endregion
#region Klick Event
private void Viewer_IconSelected(object sender, RoutedEventArgs e)
{
if (!(sender is FrameworkElement frameworkElement) || !(e is RoutedEventArgsIconInfo iconEventArgs))
return;
if (iconEventArgs.IconType == enumIconTypes.intern)
{
if (Enum.TryParse(iconEventArgs.IconName, out enumInternIcons internIconType))
{
currentIconUC.currentIcon.SelectedInternIcon = internIconType;
currentNameUC.TextContent = iconEventArgs.IconName;
currentFullNameUC.TextContent = "<Icon IconType=\"intern\" Name=\"" + iconEventArgs.IconName + "\"/>";
}
}
else if (iconEventArgs.IconType == enumIconTypes.material)
{
if (Enum.TryParse(iconEventArgs.IconName, out MaterialIconType materialIconType))
{
currentIconUC.currentIcon.SelectedMaterialIcon = materialIconType;
currentNameUC.TextContent = iconEventArgs.IconName;
currentFullNameUC.TextContent = "<Icon IconType=\"material\" Name=\"" + iconEventArgs.IconName + "\"/>";
}
}
}
#endregion
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static FasdDesktopUi.Basics.UserControls.AdaptableIcon.cIconPainter;
namespace F4SDicons.Models
{
public class cAdvancedIconInformation : cIconInformation, INotifyPropertyChanged
{
private bool isVisible;
public bool IsVisible
{
get { return isVisible; }
set
{
isVisible = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsVisible)));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace F4SDicons.Models
{
public class IconCollectionUserControl : UserControl
{
#region Events
public static readonly RoutedEvent IconSelectedEvent = EventManager.RegisterRoutedEvent("IconSelected", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(UserControl));
#endregion
}
}

View File

@@ -0,0 +1,27 @@
using F4SD_AdaptableIcon.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace F4SDicons.Models
{
public class RoutedEventArgsIconInfo : RoutedEventArgs
{
public string IconName { get; set; }
public enumIconTypes IconType { get; set; }
public RoutedEventArgsIconInfo()
{
}
public RoutedEventArgsIconInfo(RoutedEvent customEvent) : base (customEvent)
{
}
}
}

View File

@@ -0,0 +1,55 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("F4SD Icon Picker")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Consulting4IT GmbH, Germany")]
[assembly: AssemblyProduct("F4SD Icon Picker")]
[assembly: AssemblyCopyright("Copyright © 2024, Consulting4IT GmbH, Germany")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.1.*")]
[assembly: AssemblyFileVersion("1.1.0.0")]

View File

@@ -0,0 +1,70 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace F4SDicons.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("F4SDicons.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,29 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace F4SDicons.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,52 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon">
<SolidColorBrush x:Key="colorE9E9E9" Color="#363636"/>
<SolidColorBrush x:Key="colorF7FAFA" Color="#1A1A1A"/>
<SolidColorBrush x:Key="color3D3C3C" Color="#9B9B9B"/>
<SolidColorBrush x:Key="color1F92EE" Color="#0077A8"/>
<SolidColorBrush x:Key="colorF2F2F2" Color="#272727"/>
<SolidColorBrush x:Key="color9A9B9B" Color="#5A5A5A"/>
<Color x:Key="ControlLightColor">#303030</Color>
<Color x:Key="ControlMediumColor">#303030</Color>
<Color x:Key="ControlDarkColor">#303030</Color>
<SolidColorBrush x:Key="Scrollbar.Track.Color">#575757</SolidColorBrush>
<Style TargetType="ico:AdaptableIcon" x:Key="GridIconStyle">
<Setter Property="PrimaryIconColor" Value="#9B9B9B"/>
<Setter Property="SecondaryIconColor" Value="#1A1A1A"/>
<Setter Property="IconHeight" Value="55"/>
<Setter Property="IconWidth" Value="55" />
<Setter Property="BorderPadding" Value="7.5" />
<Setter Property="IconBackgroundColor" Value="#1A1A1A"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="IconCornerRadius" Value="7.5"/>
<Setter Property="Margin" Value="5, 2.5, 0, 2.5" />
</Style>
<Style TargetType="Border" x:Key="ListBorderIconStyle">
<Setter Property="Background" Value="#1A1A1A" />
<Setter Property="CornerRadius" Value="5"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Margin" Value="10,3,10,0"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Cursor" Value="Hand"/>
<Style.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="#9B9B9B"/>
</Style>
<Style TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="#9B9B9B"/>
<Setter Property="SecondaryIconColor" Value="#1A1A1A"/>
</Style>
</Style.Resources>
</Style>
</ResourceDictionary>

View File

@@ -0,0 +1,52 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon">
<SolidColorBrush x:Key="colorE9E9E9" Color="#E9E9E9"/>
<SolidColorBrush x:Key="colorF7FAFA" Color="#F7FAFA"/>
<SolidColorBrush x:Key="color3D3C3C" Color="#3D3C3C"/>
<SolidColorBrush x:Key="color1F92EE" Color="#1F92EE"/>
<SolidColorBrush x:Key="colorF2F2F2" Color="#F2F2F2"/>
<SolidColorBrush x:Key="color9A9B9B" Color="#9A9B9B"/>
<Color x:Key="ControlLightColor">#DBDBDB</Color>
<Color x:Key="ControlMediumColor">#DBDBDB</Color>
<Color x:Key="ControlDarkColor">#DBDBDB</Color>
<SolidColorBrush x:Key="Scrollbar.Track.Color">#F2F2F2</SolidColorBrush>
<Style TargetType="ico:AdaptableIcon" x:Key="GridIconStyle">
<Setter Property="PrimaryIconColor" Value="#3D3C3C"/>
<Setter Property="SecondaryIconColor" Value="#F7FAFA"/>
<Setter Property="IconHeight" Value="55"/>
<Setter Property="IconWidth" Value="55" />
<Setter Property="BorderPadding" Value="7.5" />
<Setter Property="IconBackgroundColor" Value="#F7FAFA"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="IconCornerRadius" Value="7.5"/>
<Setter Property="Margin" Value="5, 2.5, 0, 2.5" />
</Style>
<Style TargetType="Border" x:Key="ListBorderIconStyle">
<Setter Property="Background" Value="#F7FAFA" />
<Setter Property="CornerRadius" Value="5"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Margin" Value="10,3,10,0"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Cursor" Value="Hand"/>
<Style.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="#3D3C3C"/>
</Style>
<Style TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="#3D3C3C"/>
<Setter Property="SecondaryIconColor" Value="#F7FAFA"/>
</Style>
</Style.Resources>
</Style>
</ResourceDictionary>

View File

@@ -0,0 +1,346 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Color x:Key="WindowColor">#FFE8EDF9</Color>
<Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color>
<Color x:Key="ContentAreaColorDark">#FF7381F9</Color>
<Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color>
<Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color>
<Color x:Key="DisabledForegroundColor">#FF888888</Color>
<Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color>
<Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color>
<!--<Color x:Key="ControlLightColor">#DBDBDB</Color>
<Color x:Key="ControlMediumColor">#DBDBDB</Color>
<Color x:Key="ControlDarkColor">#DBDBDB</Color>-->
<Color x:Key="ControlMouseOverColor">#FF3843C4</Color>
<Color x:Key="ControlPressedColor">#FF211AA9</Color>
<Color x:Key="GlyphColor">#FF444444</Color>
<Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color>
<!--Border colors-->
<Color x:Key="BorderLightColor">#FFCCCCCC</Color>
<Color x:Key="BorderMediumColor">#FF888888</Color>
<Color x:Key="BorderDarkColor">#FF444444</Color>
<Color x:Key="PressedBorderLightColor">#FF888888</Color>
<Color x:Key="PressedBorderDarkColor">#FF444444</Color>
<Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color>
<Color x:Key="DisabledBorderDarkColor">#FF888888</Color>
<Color x:Key="DefaultBorderBrushDarkColor">Black</Color>
<!--Control-specific resources.-->
<Color x:Key="HeaderTopColor">#FFC5CBF9</Color>
<Color x:Key="DatagridCurrentCellBorderColor">Black</Color>
<Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color>
<Color x:Key="NavButtonFrameColor">#FF3843C4</Color>
<LinearGradientBrush x:Key="MenuPopupBrush"
EndPoint="0.5,1"
StartPoint="0.5,0">
<GradientStop Color="{DynamicResource ControlLightColor}"
Offset="0" />
<GradientStop Color="{DynamicResource ControlMediumColor}"
Offset="0.5" />
<GradientStop Color="{DynamicResource ControlLightColor}"
Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill"
StartPoint="0,0"
EndPoint="1,0">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#000000FF"
Offset="0" />
<GradientStop Color="#600000FF"
Offset="0.4" />
<GradientStop Color="#600000FF"
Offset="0.6" />
<GradientStop Color="#000000FF"
Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<Style x:Key="ScrollBarLineButton"
TargetType="{x:Type RepeatButton}">
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="Focusable"
Value="false" />
</Style>
<Style x:Key="ScrollBarPageButton"
TargetType="{x:Type RepeatButton}">
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="IsTabStop"
Value="false" />
<Setter Property="Focusable"
Value="false" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Border Background="Transparent" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ScrollBarThumb"
TargetType="{x:Type Thumb}">
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="IsTabStop"
Value="false" />
<Setter Property="Focusable"
Value="false" />
<Setter Property="Cursor"
Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Border CornerRadius="2"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="0" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="VerticalScrollBar"
TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition MaxHeight="0.1" />
<RowDefinition Height="*" />
<RowDefinition MaxHeight="0.1" />
</Grid.RowDefinitions>
<Border Grid.RowSpan="3"
CornerRadius="2"
Background="{DynamicResource Scrollbar.Track.Color}" />
<RepeatButton Grid.Row="0"
Style="{StaticResource ScrollBarLineButton}"
Height="18"
Command="ScrollBar.LineUpCommand"
Content="M 0 4 L 8 4 L 4 0 Z" />
<Track x:Name="PART_Track"
Grid.Row="1"
IsDirectionReversed="true">
<Track.DecreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}"
Command="ScrollBar.PageUpCommand" />
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb Style="{StaticResource ScrollBarThumb}"
Margin="1,0,1,0">
<Thumb.BorderBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="1,0">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource BorderLightColor}"
Offset="0.0" />
<GradientStop Color="{DynamicResource BorderDarkColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Thumb.BorderBrush>
<Thumb.Background>
<LinearGradientBrush StartPoint="0,0"
EndPoint="1,0">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource ControlLightColor}"
Offset="0.0" />
<GradientStop Color="{DynamicResource ControlMediumColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Thumb.Background>
</Thumb>
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}"
Command="ScrollBar.PageDownCommand" />
</Track.IncreaseRepeatButton>
</Track>
<RepeatButton Grid.Row="2"
Style="{StaticResource ScrollBarLineButton}"
Height="18"
Command="ScrollBar.LineDownCommand"
Content="M 0 0 L 4 4 L 8 0 Z" />
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="HorizontalScrollBar"
TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="0.1" />
<ColumnDefinition Width="*" />
<ColumnDefinition MaxWidth="0.1" />
</Grid.ColumnDefinitions>
<Border Grid.ColumnSpan="3"
CornerRadius="2"
Background="{DynamicResource Scrollbar.Track.Color}" />
<RepeatButton Grid.Column="0"
Style="{StaticResource ScrollBarLineButton}"
Width="18"
Command="ScrollBar.LineLeftCommand"
Content="M 4 0 L 4 8 L 0 4 Z" />
<Track x:Name="PART_Track"
Grid.Column="1"
IsDirectionReversed="False">
<Track.DecreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}"
Command="ScrollBar.PageLeftCommand" />
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb Style="{StaticResource ScrollBarThumb}"
Margin="0,1,0,1">
<Thumb.BorderBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="1,0">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource BorderLightColor}"
Offset="0.0" />
<GradientStop Color="{DynamicResource BorderDarkColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Thumb.BorderBrush>
<Thumb.Background>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource ControlLightColor}"
Offset="0.0" />
<GradientStop Color="{DynamicResource ControlMediumColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Thumb.Background>
</Thumb>
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}"
Command="ScrollBar.PageRightCommand" />
</Track.IncreaseRepeatButton>
</Track>
<RepeatButton Grid.Column="2"
Style="{StaticResource ScrollBarLineButton}"
Width="18"
Command="ScrollBar.LineRightCommand"
Content="M 0 0 L 4 4 L 0 8 Z" />
</Grid>
</ControlTemplate>
<Style x:Key="{x:Type ScrollBar}"
TargetType="{x:Type ScrollBar}">
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Orientation"
Value="Horizontal"/>
<Condition Property="IsMouseOver"
Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Width"
Value="Auto" />
<Setter Property="Height"
Value="6" />
<Setter Property="Template"
Value="{StaticResource HorizontalScrollBar}" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Orientation"
Value="Horizontal"/>
<Condition Property="IsMouseOver"
Value="true"/>
</MultiTrigger.Conditions>
<Setter Property="Width"
Value="Auto" />
<Setter Property="Height"
Value="10" />
<Setter Property="Margin"
Value="0 -2"/>
<Setter Property="Template"
Value="{StaticResource HorizontalScrollBar}" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Orientation"
Value="Vertical"/>
<Condition Property="IsMouseOver"
Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Width"
Value="6" />
<Setter Property="Height"
Value="Auto" />
<Setter Property="Template"
Value="{StaticResource VerticalScrollBar}" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Orientation"
Value="Vertical"/>
<Condition Property="IsMouseOver"
Value="true"/>
</MultiTrigger.Conditions>
<Setter Property="Width"
Value="10" />
<Setter Property="Margin"
Value="-2 0"/>
<Setter Property="Height"
Value="Auto" />
<Setter Property="Template"
Value="{StaticResource VerticalScrollBar}" />
</MultiTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>

View File

@@ -0,0 +1,42 @@
<UserControl x:Class="F4SDicons.User_Controls.CopyTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:F4SDicons.User_Controls"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
d:Background="Moccasin" Name="TextUserControl">
<DockPanel>
<DockPanel.Resources>
<Style TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color3D3C3C}"/>
<Setter Property="IconHeight" Value="40"/>
<Setter Property="IconWidth" Value="40"/>
<Setter Property="BorderPadding" Value="5"/>
<Setter Property="Margin" Value="10"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color1F92EE}"/>
<Setter Property="IconBackgroundColor" Value="{DynamicResource colorF2F2F2}"/>
<Setter Property="Cursor" Value="Hand"/>
</Trigger>
</Style.Triggers>
</Style>
</DockPanel.Resources>
<ico:AdaptableIcon DockPanel.Dock="Right" x:Name="CopyBorder" MouseLeftButtonUp="currentNameButton_Click" ToolTip="{Binding ElementName=TextUserControl, Path=ToolTipText}" SelectedMaterialIcon="ic_content_copy">
</ico:AdaptableIcon>
<TextBlock Name="CopyBlock" Text="{Binding ElementName=TextUserControl, Path=TextContent}" Foreground="{DynamicResource color3D3C3C}" FontFamily="Calibri Light" TextWrapping="Wrap" Height="45" FontSize="14" Background="{DynamicResource colorF7FAFA}" Margin="10,0,0,0">
</TextBlock>
</DockPanel>
</UserControl>

View File

@@ -0,0 +1,87 @@
using FasdDesktopUi.Basics.UserControls.AdaptableIcon;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace F4SDicons.User_Controls
{
public partial class CopyTextBox : UserControl
{
public CopyTextBox()
{
InitializeComponent();
}
#region Dependency Properties
public string TextContent
{
get { return (string)GetValue(TextContentProperty); }
set { SetValue(TextContentProperty, value); }
}
// Using a DependencyProperty as the backing store for TextContent. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TextContentProperty =
DependencyProperty.Register("TextContent", typeof(string), typeof(CopyTextBox), new PropertyMetadata(""));
public string ToolTipText
{
get { return (string)GetValue(ToolTipTextProperty); }
set { SetValue(ToolTipTextProperty, value); }
}
// Using a DependencyProperty as the backing store for ToolTipText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ToolTipTextProperty =
DependencyProperty.Register("ToolTipText", typeof(string), typeof(CopyTextBox), new PropertyMetadata(""));
#endregion
#region Klick Event
private void currentNameButton_Click(object sender, MouseButtonEventArgs e)
{
System.Windows.Clipboard.SetText(CopyBlock.Text);
if (!(sender is AdaptableIcon senderIcon) )
{
return;
}
Dispatcher.Invoke(async ()=>
{
var currentMaterialIcon = senderIcon.SelectedMaterialIcon;
senderIcon.SelectedMaterialIcon = null;
senderIcon.SelectedInternIcon = F4SD_AdaptableIcon.Enums.enumInternIcons.misc_check;
Color ColorGreen = (Color)ColorConverter.ConvertFromString("#75B159");
senderIcon.PrimaryIconColor = new SolidColorBrush(ColorGreen);
await Task.Delay(500);
senderIcon.SelectedInternIcon = null;
senderIcon.SelectedMaterialIcon = currentMaterialIcon;
senderIcon.ClearValue(AdaptableIcon.PrimaryIconColorProperty);
});
}
#endregion
}
}

View File

@@ -0,0 +1,35 @@
<UserControl x:Class="F4SDicons.User_Controls.IconGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
xmlns:local="clr-namespace:F4SDicons.User_Controls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibility"/>
</UserControl.Resources>
<StackPanel x:Name="GridCollection">
<ItemsControl ItemsSource="{Binding IconInformation}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ico:AdaptableIcon x:Name="adaptableIcon" ToolTip="{Binding IconName}" Tag="{Binding IconName}" SelectedInternIcon="{Binding InternIcon}" SelectedMaterialIcon="{Binding MaterialIcon}" MouseLeftButtonUp="adaptableIcon_MouseLeftButtonUp" TouchDown="adaptableIcon_TouchDown" Visibility="{Binding IsVisible, Converter = {StaticResource BooleanToVisibility}}" Style="{DynamicResource GridIconStyle}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</UserControl>

View File

@@ -0,0 +1,103 @@
using F4SD_AdaptableIcon.Enums;
using F4SDicons.Models;
using FasdDesktopUi.Basics.UserControls.AdaptableIcon;
using MaterialIcons;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static FasdDesktopUi.Basics.UserControls.AdaptableIcon.cIconPainter;
namespace F4SDicons.User_Controls
{
public partial class IconGrid : UserControl
{
public List<cAdvancedIconInformation> IconInformation
{
get { return (List<cAdvancedIconInformation>)GetValue(IconInformationProperty); }
set { SetValue(IconInformationProperty, value); }
}
// Using a DependencyProperty as the backing store for IconInformation. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IconInformationProperty =
DependencyProperty.Register("IconInformation", typeof(List<cAdvancedIconInformation>), typeof(IconGrid), new PropertyMetadata(null));
public IconGrid()
{
InitializeComponent();
}
#region Klick Event
#region Event
public event RoutedEventHandler IconSelected
{
add { AddHandler(IconCollectionUserControl.IconSelectedEvent, value); }
remove { RemoveHandler(IconCollectionUserControl.IconSelectedEvent, value); }
}
#endregion
#region Klick
private void adaptableIcon_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
MaterialIconWasClicked(sender);
}
private void adaptableIcon_TouchDown(object sender, TouchEventArgs e)
{
MaterialIconWasClicked(sender);
}
#endregion
#region On Klick
private void MaterialIconWasClicked(object sender)
{
if (!(sender is FrameworkElement frameworkElement))
return;
enumIconTypes? iconType = null;
if (Enum.TryParse(frameworkElement.Tag.ToString(), out MaterialIconType _))
iconType = enumIconTypes.material;
else if (Enum.TryParse(frameworkElement.Tag.ToString(), out enumInternIcons _))
iconType = enumIconTypes.intern;
if (iconType is null)
return;
RoutedEventArgsIconInfo eventArgs = new RoutedEventArgsIconInfo(IconCollectionUserControl.IconSelectedEvent) { IconName = frameworkElement.Tag.ToString(), IconType = iconType.Value };
RaiseEvent(eventArgs);
}
#endregion
#endregion
}
}

View File

@@ -0,0 +1,34 @@
<UserControl x:Class="F4SDicons.User_Controls.IconList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:F4SDicons.User_Controls"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibility"/>
</UserControl.Resources>
<StackPanel x:Name="collectionStackPanel">
<ItemsControl ItemsSource="{Binding IconInformation}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border x:Name="adaptableBorder" MouseLeftButtonUp="MaterialStackPanel_MouseLeftButtonUp" TouchDown="MaterialStackPanel_TouchDown" ToolTip="{Binding IconName}" Tag="{Binding IconName}" Visibility="{Binding IsVisible, Converter = {StaticResource BooleanToVisibility}}" Style="{DynamicResource ListBorderIconStyle}">
<StackPanel x:Name="adaptableStackPanel" Orientation="Horizontal">
<ico:AdaptableIcon Margin="0, 0, 10, 0" BorderPadding="2.5" IconHeight="25" IconWidth="25" SelectedInternIcon="{Binding InternIcon}" SelectedMaterialIcon="{Binding MaterialIcon}"/>
<Border x:Name="scrollBorder">
<TextBlock x:Name="adaptableBlock" FontFamily="Calibri Regular" FontSize="18" Text="{Binding IconName}"/>
</Border>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</UserControl>

View File

@@ -0,0 +1,92 @@
using F4SD_AdaptableIcon.Enums;
using F4SDicons.Models;
using FasdDesktopUi.Basics.UserControls.AdaptableIcon;
using MaterialIcons;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static FasdDesktopUi.Basics.UserControls.AdaptableIcon.cIconPainter;
namespace F4SDicons.User_Controls
{
public partial class IconList : UserControl
{
public List<cAdvancedIconInformation> IconInformation
{
get { return (List<cAdvancedIconInformation>)GetValue(IconInformationProperty); }
set { SetValue(IconInformationProperty, value); }
}
// Using a DependencyProperty as the backing store for IconInformation. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IconInformationProperty =
DependencyProperty.Register("IconInformation", typeof(List<cAdvancedIconInformation>), typeof(IconList), new PropertyMetadata(null));
public IconList()
{
InitializeComponent();
}
#region Klick
private void MaterialStackPanel_TouchDown(object sender, TouchEventArgs e)
{
MaterialStackPanelWasClicked(sender);
}
private void MaterialStackPanel_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
MaterialStackPanelWasClicked(sender);
}
#endregion
#region Event
public event RoutedEventHandler IconSelected
{
add { AddHandler(IconCollectionUserControl.IconSelectedEvent, value); }
remove { RemoveHandler(IconCollectionUserControl.IconSelectedEvent, value); }
}
#endregion
private void MaterialStackPanelWasClicked(object sender)
{
if (!(sender is FrameworkElement frameworkElement))
return;
enumIconTypes? iconType = null;
if (Enum.TryParse(frameworkElement.Tag.ToString(), out MaterialIconType _))
iconType = enumIconTypes.material;
else if (Enum.TryParse(frameworkElement.Tag.ToString(), out enumInternIcons _))
iconType = enumIconTypes.intern;
if (iconType is null)
return;
RoutedEventArgsIconInfo eventArgs = new RoutedEventArgsIconInfo(IconCollectionUserControl.IconSelectedEvent) { IconName = frameworkElement.Tag.ToString(), IconType = iconType.Value };
RaiseEvent(eventArgs);
}
}
}

View File

@@ -0,0 +1,54 @@
<UserControl x:Class="F4SDicons.User_Controls.SearchBar"
x:Name="_this"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:F4SDicons.User_Controls"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="500">
<Border Grid.Row="0" Background="{DynamicResource colorF7FAFA}" CornerRadius="17.5" VerticalAlignment="Center" Margin="10,0,15,5" Height="35">
<Border.Resources>
<Style TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color3D3C3C}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color1F92EE}"/>
</Trigger>
</Style.Triggers>
</Style>
</Border.Resources>
<Grid VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<ico:AdaptableIcon Grid.Column="1" x:Name="SearchIcon" BorderPadding="0" IconHeight="20" IconWidth="20" SelectedInternIcon="menuBar_search">
</ico:AdaptableIcon>
<TextBlock Grid.Column="2" Name="previewTextBlock" Foreground="{DynamicResource color3D3C3C}" Background="Transparent" VerticalAlignment="Center" Margin="10,0,0,0">
Suchbegriff eingeben...
</TextBlock>
<TextBox Name="bindingTextBox" Grid.Column="2" Foreground="{DynamicResource color3D3C3C}" Background="Transparent" BorderThickness="0" VerticalAlignment="Center" GotFocus="TextBoxGotFocus" LostFocus="TextBoxLostFocus" Margin="10,0,0,0"
Text = "{Binding SearchValue, Mode = OneWayToSource, UpdateSourceTrigger = PropertyChanged}" Grid.ColumnSpan="2">
</TextBox>
<ico:AdaptableIcon Grid.Column="3" x:Name="clearSearchIcon" BorderPadding="0" IconHeight="12" IconWidth="12" MouseLeftButtonUp="ClearSearchButtonUp" Cursor="Hand" ToolTip="Eingabe löschen" SelectedInternIcon="window_close">
</ico:AdaptableIcon>
</Grid>
</Border>
</UserControl>

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace F4SDicons.User_Controls
{
public partial class SearchBar : UserControl
{
public SearchBar()
{
InitializeComponent();
}
#region Default Suchtext
private void TextBoxGotFocus(object sender, EventArgs e)
{
//previewTextBlock.Text = "";
previewTextBlock.Visibility = Visibility.Hidden;
}
private void TextBoxLostFocus(object sender, EventArgs e)
{
if (bindingTextBox.Text == "")
{
//previewTextBlock.Text = "Suchbegriff eingeben...";
previewTextBlock.Visibility = Visibility.Visible;
}
}
#endregion
#region TextBox
private void ClearSearchButtonUp(object sender, MouseButtonEventArgs e)
{
bindingTextBox.Text = String.Empty;
FocusManager.SetFocusedElement(FocusManager.GetFocusScope(bindingTextBox), null);
Keyboard.ClearFocus();
TextBoxLostFocus(null, null);
}
#endregion
}
}

View File

@@ -0,0 +1,80 @@
<UserControl x:Class="F4SDicons.User_Controls.WindowStateBar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:F4SDicons.User_Controls"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
mc:Ignorable="d"
d:DesignHeight="60" d:DesignWidth="215"
Name="StateBar">
<!-- TODO: WindowChrome-->
<Grid Grid.Row="0" Name="StateGrid" Margin="0,10,0,0" Background="{DynamicResource colorE9E9E9}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<Style TargetType="Border">
<Setter Property="Background" Value="{DynamicResource colorE9E9E9}"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="CornerRadius" Value="5"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource colorF2F2F2}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="ico:AdaptableIcon">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color3D3C3C}"/>
<Setter Property="IconHeight" Value="35"/>
<Setter Property="IconWidth" Value="35"/>
<Setter Property="BorderPadding" Value="5"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="PrimaryIconColor" Value="{DynamicResource color1F92EE}"/>
<Setter Property="IconBackgroundColor" Value="{DynamicResource colorF2F2F2}"/>
<Setter Property="Cursor" Value="Hand"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<ico:AdaptableIcon MouseLeftButtonUp="WindowToTopLeftCorner" Grid.Column="0" ToolTip="Fenster links anheften" SelectedInternIcon="window_dock_left">
</ico:AdaptableIcon>
<ico:AdaptableIcon MouseLeftButtonUp="WindowToTopRightCorner" Grid.Column="1" ToolTip="Fenster rechts anheften" SelectedInternIcon="window_dock_right">
</ico:AdaptableIcon>
<ico:AdaptableIcon x:Name="minimizeIcon" Grid.Column="2" MouseLeftButtonUp="minimizeWindow_ButtonUp" ToolTip="Anwendung minimieren" SelectedInternIcon="window_minimize">
</ico:AdaptableIcon>
<ico:AdaptableIcon x:Name="resizeIcon" Grid.Column="3" ToolTip="Anwendung ist bereits im Fenster-Modus" PrimaryIconColor="{DynamicResource color9A9B9B}" SelectedInternIcon="window_fullscreenExit">
</ico:AdaptableIcon>
<ico:AdaptableIcon x:Name="resizeIcon2" Grid.Column="3" Visibility="Collapsed" MouseLeftButtonUp="resizeWindow2_ButtonUp" ToolTip="Fenster verkleinern" SelectedInternIcon="window_fullscreenExit">
</ico:AdaptableIcon>
<ico:AdaptableIcon x:Name="closeIcon" Grid.Column="4" MouseLeftButtonUp="closeWindow_ButtonUp" ToolTip="Anwendung beenden" SelectedInternIcon="window_close">
</ico:AdaptableIcon>
</Grid>
</UserControl>

View File

@@ -0,0 +1,166 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace F4SDicons.User_Controls
{
public partial class WindowStateBar : UserControl
{
public WindowStateBar()
{
InitializeComponent();
}
public bool isWindowRight = false;
#region DockWindow
//TopLeft Position of Screen
public static void TopLeftCorner(System.Windows.Window window)
{
var screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)window.Left, (int)window.Top));
window.Top = screen.WorkingArea.Top;
window.Left = screen.WorkingArea.Left;
}
//TopRight Position of Screen
public static void TopRightCorner(System.Windows.Window window)
{
var screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)window.Left, (int)window.Top));
window.Top = screen.WorkingArea.Top;
window.Left = screen.WorkingArea.Left + window.ActualWidth + window.ActualWidth;
}
public static void TopRightCorner2(System.Windows.Window window)
{
var screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)window.Left, (int)window.Top));
window.Top = screen.WorkingArea.Top;
window.Left = screen.WorkingArea.Right - window.ActualWidth;
}
private void WindowToTopLeftCorner(object sender, MouseButtonEventArgs e)
{
resizeWindow();
TopLeftCorner(Window.GetWindow(this));
isWindowRight = false;
}
private void WindowToTopRightCorner(object sender, MouseButtonEventArgs e)
{
resizeWindow();
TopLeftCorner(Window.GetWindow(this));
isWindowRight = false;
TopRightCorner(Window.GetWindow(this));
isWindowRight = true;
}
#endregion
#region Minimize
//Minimize Window
private void minimizeWindow_ButtonUp(object sender, MouseButtonEventArgs e)
{
Window.GetWindow(this).WindowState = WindowState.Minimized;
}
#endregion
#region Resize
//Resize Window
private void resizeWindow2_ButtonUp(object sender, MouseButtonEventArgs e)
{
resizeWindow2();
if (isWindowRight == false)
{
TopLeftCorner(Window.GetWindow(this));
}
else
{
TopRightCorner2(Window.GetWindow(this));
}
resizeIcon.Visibility = Visibility.Visible;
resizeIcon2.Visibility = Visibility.Collapsed;
}
private void resizeWindow()
{
Rect rectangle = GetCurrentScreenWorkArea(Window.GetWindow(this));
double wHeight = rectangle.Height;
double wWidth = rectangle.Width;
wWidth = wWidth / 3;
Window.GetWindow(this).Height = wHeight;
Window.GetWindow(this).Width = wWidth;
resizeIcon2.Visibility = Visibility.Visible;
resizeIcon.Visibility = Visibility.Collapsed;
}
private void resizeWindow2()
{
Window.GetWindow(this).Height = 600;
Window.GetWindow(this).Width = 880;
}
#endregion
#region Display
public static Rect GetCurrentScreenWorkArea(System.Windows.Window window)
{
var screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)window.Left, (int)window.Top));
var dpiScale = VisualTreeHelper.GetDpi(window);
return new Rect { Width = screen.WorkingArea.Width / dpiScale.DpiScaleX, Height = screen.WorkingArea.Height / dpiScale.DpiScaleY };
}
#endregion
#region Close Window
private void closeWindow_ButtonUp(object sender, MouseButtonEventArgs e)
{
Window.GetWindow(this).Close();
}
#endregion
#region Drag Move
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Window.GetWindow(this).DragMove();
}
#endregion
}
}

View File

@@ -0,0 +1,29 @@
<UserControl x:Class="F4SDicons.User_Controls.ZoomViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:F4SDicons.User_Controls"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="450">
<Grid Name="currentIconGrid" Background="{DynamicResource colorE9E9E9}">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<ico:AdaptableIcon Grid.Row="0" x:Name="currentIcon" PrimaryIconColor="{DynamicResource color3D3C3C}" SecondaryIconColor="{DynamicResource colorF7FAFA}" IconHeight="100" IconWidth="100" Grid.RowSpan="2" RenderTransformOrigin="0.5, 0.5" VerticalAlignment="Center" HorizontalAlignment="Center">
<ico:AdaptableIcon.RenderTransform>
<RotateTransform/>
</ico:AdaptableIcon.RenderTransform>
</ico:AdaptableIcon>
<Slider Name="ZoomSlider" Grid.Row="1" Width="250" Minimum="50" Maximum="200" PreviewMouseLeftButtonUp="ZoomSlider_ButtonUp" PreviewMouseLeftButtonDown="ZoomSlider_ButtonUp" ValueChanged="Slider_ValueChanged" Value="100">
</Slider>
</Grid>
</UserControl>

View File

@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace F4SDicons.User_Controls
{
public partial class ZoomViewer : UserControl
{
public ZoomViewer()
{
InitializeComponent();
}
#region Variables
bool zoomReachedMinimum = false;
#endregion
#region Value
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
double iconZoom = e.NewValue / 100;
currentIcon.IconHeight = 100 * iconZoom;
currentIcon.IconWidth = 100 * iconZoom;
if (iconZoom == 0.5)
{
zoomReachedMinimum = true;
}
if (zoomReachedMinimum == true && iconZoom == 2.0)
{
RotateEasterEgg();
zoomReachedMinimum = false;
}
}
#endregion
#region RotateIcon
private void RotateEasterEgg()
{
Storyboard storyboard = new Storyboard();
DoubleAnimation animation = new DoubleAnimation();
animation.From = 0;
animation.To = 360;
animation.Duration = new Duration(TimeSpan.FromSeconds(1));
storyboard.Children.Add(animation);
Storyboard.SetTarget(animation, currentIcon);
Storyboard.SetTargetProperty(animation, new PropertyPath("(Control.RenderTransform).(RotateTransform.Angle)"));
storyboard.Begin();
}
internal void ZoomSlider_ButtonUp(object sender, MouseButtonEventArgs e)
{
zoomReachedMinimum = false;
}
#endregion
}
}

Some files were not shown because too many files have changed in this diff Show More