Initial commit

This commit is contained in:
2026-03-18 08:06:55 +01:00
parent 05956e2953
commit a1defcab47
350 changed files with 121449 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
{
"Version": 1,
"ProjectMap": {
"bea96733-dfdb-4e00-9cd9-c3e9b1e1d031": {
"ProjectGuid": "bea96733-dfdb-4e00-9cd9-c3e9b1e1d031",
"DisplayName": "GFATask",
"ColorIndex": 0
},
"a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": {
"ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3",
"DisplayName": "Sonstige Dateien",
"ColorIndex": -1
},
"900e3b22-4f33-4922-906c-98cdd660e763": {
"ProjectGuid": "900e3b22-4f33-4922-906c-98cdd660e763",
"DisplayName": "CustomControls",
"ColorIndex": 1
},
"2a54c8a7-b200-47a3-b50a-b69590e75287": {
"ProjectGuid": "2a54c8a7-b200-47a3-b50a-b69590e75287",
"DisplayName": "FormEx",
"ColorIndex": 2
},
"d1fb006d-da04-4bd4-8827-c6899752a58e": {
"ProjectGuid": "d1fb006d-da04-4bd4-8827-c6899752a58e",
"DisplayName": "SystemManagement",
"ColorIndex": 3
},
"04dde1a2-453d-4717-9221-5b9c5a49f010": {
"ProjectGuid": "04dde1a2-453d-4717-9221-5b9c5a49f010",
"DisplayName": "Models",
"ColorIndex": 4
}
},
"NextColorIndex": 5
}

BIN
.vs/GFATask/v16/.suo Normal file

Binary file not shown.

BIN
.vs/GFATask/v17/.suo Normal file

Binary file not shown.

71
GFATask.sln Normal file
View File

@@ -0,0 +1,71 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.32014.148
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GFATask", "GFATask\GFATask.csproj", "{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomControls", "..\DLLs\CustomControls\CustomControls.csproj", "{900E3B22-4F33-4922-906C-98CDD660E763}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Models", "Models\Models.csproj", "{04DDE1A2-453D-4717-9221-5B9C5A49F010}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemManagement", "..\DLLs\SystemManagement\SystemManagement.csproj", "{D1FB006D-DA04-4BD4-8827-C6899752A58E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormEx", "..\DLLs\FormEx\FormEx.csproj", "{2A54C8A7-B200-47A3-B50A-B69590E75287}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}.Debug|x64.ActiveCfg = Debug|Any CPU
{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}.Debug|x64.Build.0 = Debug|Any CPU
{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}.Release|Any CPU.Build.0 = Release|Any CPU
{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}.Release|x64.ActiveCfg = Release|Any CPU
{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}.Release|x64.Build.0 = Release|Any CPU
{900E3B22-4F33-4922-906C-98CDD660E763}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{900E3B22-4F33-4922-906C-98CDD660E763}.Debug|Any CPU.Build.0 = Debug|Any CPU
{900E3B22-4F33-4922-906C-98CDD660E763}.Debug|x64.ActiveCfg = Debug|Any CPU
{900E3B22-4F33-4922-906C-98CDD660E763}.Debug|x64.Build.0 = Debug|Any CPU
{900E3B22-4F33-4922-906C-98CDD660E763}.Release|Any CPU.ActiveCfg = Release|Any CPU
{900E3B22-4F33-4922-906C-98CDD660E763}.Release|Any CPU.Build.0 = Release|Any CPU
{900E3B22-4F33-4922-906C-98CDD660E763}.Release|x64.ActiveCfg = Release|x64
{900E3B22-4F33-4922-906C-98CDD660E763}.Release|x64.Build.0 = Release|x64
{04DDE1A2-453D-4717-9221-5B9C5A49F010}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{04DDE1A2-453D-4717-9221-5B9C5A49F010}.Debug|Any CPU.Build.0 = Debug|Any CPU
{04DDE1A2-453D-4717-9221-5B9C5A49F010}.Debug|x64.ActiveCfg = Debug|Any CPU
{04DDE1A2-453D-4717-9221-5B9C5A49F010}.Debug|x64.Build.0 = Debug|Any CPU
{04DDE1A2-453D-4717-9221-5B9C5A49F010}.Release|Any CPU.ActiveCfg = Release|Any CPU
{04DDE1A2-453D-4717-9221-5B9C5A49F010}.Release|Any CPU.Build.0 = Release|Any CPU
{04DDE1A2-453D-4717-9221-5B9C5A49F010}.Release|x64.ActiveCfg = Release|Any CPU
{04DDE1A2-453D-4717-9221-5B9C5A49F010}.Release|x64.Build.0 = Release|Any CPU
{D1FB006D-DA04-4BD4-8827-C6899752A58E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1FB006D-DA04-4BD4-8827-C6899752A58E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1FB006D-DA04-4BD4-8827-C6899752A58E}.Debug|x64.ActiveCfg = Debug|Any CPU
{D1FB006D-DA04-4BD4-8827-C6899752A58E}.Debug|x64.Build.0 = Debug|Any CPU
{D1FB006D-DA04-4BD4-8827-C6899752A58E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1FB006D-DA04-4BD4-8827-C6899752A58E}.Release|Any CPU.Build.0 = Release|Any CPU
{D1FB006D-DA04-4BD4-8827-C6899752A58E}.Release|x64.ActiveCfg = Release|Any CPU
{D1FB006D-DA04-4BD4-8827-C6899752A58E}.Release|x64.Build.0 = Release|Any CPU
{2A54C8A7-B200-47A3-B50A-B69590E75287}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2A54C8A7-B200-47A3-B50A-B69590E75287}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2A54C8A7-B200-47A3-B50A-B69590E75287}.Debug|x64.ActiveCfg = Debug|Any CPU
{2A54C8A7-B200-47A3-B50A-B69590E75287}.Debug|x64.Build.0 = Debug|Any CPU
{2A54C8A7-B200-47A3-B50A-B69590E75287}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2A54C8A7-B200-47A3-B50A-B69590E75287}.Release|Any CPU.Build.0 = Release|Any CPU
{2A54C8A7-B200-47A3-B50A-B69590E75287}.Release|x64.ActiveCfg = Release|Any CPU
{2A54C8A7-B200-47A3-B50A-B69590E75287}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0C3FA6D5-90AE-4305-8190-074C613D99D6}
EndGlobalSection
EndGlobal

12
GFATask/App.config Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<!--Führt zu fehlerhafter Skalierung-->
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
</configuration>

View File

@@ -0,0 +1,124 @@
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
/// <summary>
/// Statische Klasse zum Auslesen der Registrierungseinträge für die installierten Internet Browser
/// </summary>
class AlternateWebbrowser
{
/// <summary>
/// Gibt das Symbol des Internet Browsers aus
/// </summary>
/// <param name="browsername">Name des Internet Browsers</param>
/// <returns></returns>
public static Bitmap GetImage(string browsername = "default")
{
browsername = browsername == "default" ? Config.Main.DefaultWebBrowser : browsername;
Bitmap icon = new Bitmap(1, 1);
if (XObjects.WebBrowsers.Exists(browser => browser.Name == browsername))
{
var webbrowser = XObjects.WebBrowsers.Find(browser => browser.Name == browsername);
try
{
using (FileStream fs = new FileStream(webbrowser.IconPath, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite))
{
icon = Icon.FromHandle(Icon.ExtractAssociatedIcon(fs.Name).Handle).ToBitmap();
//icon = ((Icon)Icon.FromHandle(Icon.ExtractAssociatedIcon(fs.Name).Handle).Clone()).ToBitmap();
}
}
catch (Exception ex)
{
Log.EventLog.Write("Webbrowser Icon nicht gefunden", LogClassification.LowError, ex);
}
}
return icon;
}
/// <summary>
/// Findet den Namen anhand des ausführenden Pfades des Internet Browsers. Die Informationen werden aus der Windows-Registrierung ausgelesen
/// </summary>
/// <param name="browserexec">Auszuführender Pfad des Internet Browsers</param>
/// <returns></returns>
public static string GetName(string browserexec)
{
try
{
if(XObjects.WebBrowsers.Any(browser => browser.Path != "unknown" && browser.Path == browserexec))
{
return XObjects.WebBrowsers.Find(browser => browserexec == browser.Path).Name;
}
else
{
return "";
}
}
catch (Exception ex)
{
Log.EventLog.Write("Ungültiger Registrierungseintrag für Browsernamen", LogClassification.CriticalError, ex);
return "";
}
}
/// <summary>
/// Gibt den auszuführenden Pfad des Internet Browsers anhand des Namens aus. Die Informationen werden aus der Windows-Registrierung ausgelesen
/// </summary>
/// <param name="browsername">Name des Internet Browsers</param>
/// <returns></returns>
public static string GetExec(string browsername = "default")
{
browsername = browsername == "default" ? Config.Main.DefaultWebBrowser : browsername;
string browserexec = "";
if(XObjects.WebBrowsers.Exists(browser => browser.Name == browsername))
{
try
{
browserexec = XObjects.WebBrowsers.Find(browser => browser.Name == browsername).Path;
if(browserexec == "unknown")
Log.EventLog.Write("Webbrowser nicht gefunden", LogClassification.LowError);
}
catch (Exception ex)
{
Log.EventLog.Write("Webbrowser nicht gefunden", LogClassification.LowError, ex);
}
}
return browserexec;
}
/// <summary>
/// Zeichnet das Internet Browser Symbol des ausgewählten Browsers in die untere rechte Ecke des AppButton-Symbols
/// </summary>
/// <param name="appImage">Das AppButton-Symbol</param>
/// <param name="browsername">Name des Internet Browsers</param>
public static void DrawWebBrowserIcon(Image appImage, string browsername = "default", string appname = "")
{
browsername = browsername == "default" ? Config.Main.DefaultWebBrowser : browsername;
if(XObjects.WebBrowsers.Exists(browser => browser.Name == browsername))
{
try
{
using (Graphics g = Graphics.FromImage(appImage))
{
g.DrawImage(GetImage(browsername), new Rectangle(appImage.Width / 2, appImage.Height / 2, appImage.Width / 2, appImage.Height / 2));
g.Save();
}
}
catch (Exception ex)
{
Log.EventLog.Write($"Konnte Webbrowser Icon nicht zeichnen [{appname}]", LogClassification.LowError, ex);
}
}
}
}
}

View File

@@ -0,0 +1,94 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
/// <summary>
/// Beinhaltet Methoden wie und welche App gestartet wird
/// </summary>
public class AppExecution
{
/// <summary>
/// Startet die App vom bestimmten Pfad mit den gewünschten Argumenten
/// </summary>
/// <param name="command">Der auszuführende Befehl zum starten der App</param>
/// <param name="args">Argumente mit der die App ausgeführt werden soll</param>
public static bool FromApp(string name, string command, string args)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
try
{
// Handelt es sich weder um eine App Verlinkung, noch um eine SystemApp, wird die Ausführung normal durchgeführt
if (!IsAppLink(name, command) && !StartSystemApp(command))
{
Process app = new Process();
app.StartInfo.WorkingDirectory = EnvironmentManager.VariableConverter(Path.GetDirectoryName(command) == null ? command : Path.GetDirectoryName(command), true);
app.StartInfo.FileName = EnvironmentManager.VariableConverter(command, true);
app.StartInfo.Arguments = args;
app.Start();
stopwatch.Stop();
return true;
}
return false;
}
catch (Exception ex)
{
stopwatch.Stop();
Log.EventLog.Write(string.Format("Start der App {0} nach {1}ms fehlgeschlagen", name, (stopwatch.ElapsedMilliseconds).ToString()), LogClassification.Warning, ex);
stopwatch = null;
return false;
}
}
/// <summary>
/// Prüft, ob es sich um eine verlinkte App handelt und führt den Befehl dieser App aus
/// </summary>
/// <returns></returns>
private static bool IsAppLink(string name, string command)
{
if (command.StartsWith("APPLNK:"))
{
Models.App applnk = Cast.ToAppLink(command).ToApp();
foreach (var exec in applnk.Execute)
if (FromApp(name, exec.Command, exec.Args))
break;
return true;
}
else
{
return false;
}
}
private static bool StartSystemApp(string name)
{
bool trueConditions = false;
switch (name)
{
case "kill":
SystemApps.Kill(out trueConditions);
break;
case "settings":
SystemApps.Settings(out trueConditions);
break;
case "adm":
SystemApps.Administration(out trueConditions);
break;
case "info":
SystemApps.Info(out trueConditions);
break;
}
return trueConditions;
}
}
}

View File

@@ -0,0 +1,350 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Xml.Serialization;
namespace GFATask
{
/// <summary>
/// Eine Klasse zur Steuerung der Beliebtheit der App. Je höher der Klickanteil, desto weiter vorne wird der AppButton sortiert
/// </summary>
public class Prevalencia
{
private int _id = 0;
/// <summary>
/// Die eindeutige Identifikationsnummer der App
/// </summary>
public int ID { get => _id; set => _id = value; }
private AppType _apptype = AppType.None;
/// <summary>
/// Der Apptyp
/// </summary>
public AppType AppType { get => _apptype; set => _apptype = value; }
private int _countclicks = 0;
/// <summary>
/// Wie oft wurde der AppButton angeklickt
/// </summary>
public int CountClicks { get => _countclicks; set => _countclicks = value; }
public Prevalencia() { }
/// <summary>
/// Eine Struktur zur Steuerung der Beliebtheit der App. Je höher der Klickanteil, desto weiter vorne wird der AppButton sortiert
/// </summary>
/// <param name="id">Die eindeutige Identifikationsnummer der App</param>
/// <param name="apptype">Der Apptyp</param>
/// <param name="countclicks">Wie oft wurde der AppButton angeklickt</param>
public Prevalencia(int id, AppType apptype, int countclicks)
{
ID = id;
AppType = apptype;
_countclicks = countclicks;
}
/// <summary>
/// Zählt die Klicks hoch und aktualisiert die JSON-Prevalence Konfigurationsdatei
/// </summary>
public void CountUp()
{
int _id = ID;
_countclicks++;
((List<Models.Prevalence.AppPrevalenceProperties>)Config.Prevalence.GetType().GetProperty(AppType.ToString()).GetValue(Config.Prevalence)).Find(prev => prev.ID == _id).ClickCounts = CountClicks;
JSON.Save(JSONConfig.Prevalence);
}
}
/// <summary>
/// Eine Klasse zur Nachverfolgung der angeklickten Apps
/// </summary>
public class ClickCounter
{
private int _id = 0;
/// <summary>
/// Die eindeutige Identifikationsnummer der App
/// </summary>
public int ID { get => _id; set => _id = value; }
private string _name = "";
/// <summary>
/// Der Name der App
/// </summary>
public string Name { get => _name; set => _name = value; }
private DateTime _lastclicked;
/// <summary>
/// Wann wurde die App zuletzt genutzt
/// </summary>
public DateTime LastClicked { get => _lastclicked; set => _lastclicked = value; }
private DateTime _firstclicked;
/// <summary>
/// Wann wurde die App das erste Mal genutzt
/// </summary>
public DateTime FirstClicked { get => _firstclicked; set => _firstclicked = value; }
private AppType _apptype = AppType.None;
/// <summary>
/// Der Apptyp
/// </summary>
public AppType AppType { get => _apptype; set => _apptype = value; }
private int _counts = 0;
/// <summary>
/// Wie oft wurde der AppButton angeklickt
/// </summary>
public int Counts { get => _counts; set => _counts = value; }
public ClickCounter() { }
/// <summary>
/// Eine Klasse zur Nachverfolgung der angeklickten Apps
/// </summary>
/// <param name="id">Die eindeutige Identifikationsnummer der App</param>
/// <param name="apptype">Der Apptyp</param>
/// <param name="name">Appname</param>
/// <param name="counts">Anzahl der Benutzerklicks</param>
public ClickCounter(int id, AppType apptype, string name, int counts, DateTime firstclicked)
{
ID = id;
Name = name;
AppType = apptype;
_counts = counts;
_firstclicked = firstclicked;
_lastclicked = DateTime.Now;
}
/// <summary>
/// Zählt die Klicks hoch und aktualisiert die JSON-AppClickCounter Konfigurationsdatei
/// </summary>
public void CountUp()
{
int _id = ID;
string _name = Name;
_counts++;
Models.ClickCounter.AppCounter appcounter = ((List<Models.ClickCounter.AppCounter>)Config.AppClickCounter.GetType().GetProperty(AppType.ToString()).GetValue(Config.AppClickCounter)).Find(cc => cc.ID == _id);
appcounter.Name = _name;
appcounter.Counts = _counts;
appcounter.LastClicked = DateTime.Now;
JSON.Save(JSONConfig.AppClickCounter);
}
}
/// <summary>
/// Wandelt das ausführbare Kommando einer verknüpften App in eine lesbare Klasse um
/// </summary>
public class AppLnk
{
private AppType _apptype = AppType.None;
/// <summary>
/// Der Apptyp zur verknüpften App
/// </summary>
public AppType AppType { get => _apptype; set => _apptype = value; }
private int _id = 0;
/// <summary>
/// Die eindeutige Identifikationsnummer der verknüpften App
/// </summary>
public int ID { get => _id; set => _id = value; }
public AppLnk() { }
/// <summary>
/// Gibt die verknüpfte App aus
/// </summary>
/// <returns></returns>
public Models.App ToApp()
{
return Accessor.GetAppList(_apptype).Apps.Find(app => app.ID == _id);
}
}
/// <summary>
/// Eine Klasse zum Umwandeln in ein lesbares NewsFeed-Objekt
/// </summary>
public class ReadableNewsFeed
{
/// <summary>
/// Bestimmt den Namen des NewsFeeds
/// </summary>
public string Name { get; }
/// <summary>
/// Bestimmt, ob das Objekt angezeigt werden soll
/// </summary>
public bool Aktiv { get; }
/// <summary>
/// Gibt den Pfad zu dem Symbol an, das anstelle des Grünflächenamts-Logos angezeigt werden soll
/// </summary>
public string Symbol { get; }
/// <summary>
/// Das anzuzeigende Symbol
/// </summary>
public Bitmap Icon { get; }
/// <summary>
/// An welchem Tag startet der NewFeed
/// </summary>
public int Starttag { get; }
/// <summary>
/// In welchem Monat startet der NewsFeed
/// </summary>
public int Startmonat { get; }
/// <summary>
/// An welchem Tag endet der NewsFeed
/// </summary>
public int Endtag { get; }
/// <summary>
/// In welchem Monat endet der NewsFeed
/// </summary>
public int Endmonat { get; }
/// <summary>
/// Zeigt an, was in der Titelleiste dargestellt werden soll
/// </summary>
public string Titel { get; }
/// <summary>
/// Klasse zum Umwandeln in ein lesbares NewsFeed-Objekt
/// </summary>
/// <param name="newsfeed"></param>
public ReadableNewsFeed(Models.NewsFeed newsfeed)
{
Name = newsfeed.Name;
Aktiv = newsfeed.Enable;
Symbol = newsfeed.Icon;
if (File.Exists($"{Paths.NewsFeeds.Icons.Directory}{newsfeed.Icon}"))
Icon = new Bitmap(Image.FromStream(File.OpenRead($"{Paths.NewsFeeds.Icons.Directory}{newsfeed.Icon}")), new Size(16, 16));
else
Icon = new Bitmap(1, 1);
Starttag = newsfeed.Begin.Day;
Startmonat = newsfeed.Begin.Month;
Endtag = newsfeed.End.Day;
Endmonat = newsfeed.End.Month;
Titel = newsfeed.Title;
}
}
/// <summary>
/// Gibt Informationen einer Backupkonfiguration wieder
/// </summary>
public class ConfigBackup : IComparable<ConfigBackup>
{
private string _filename = "";
/// <summary>
/// Der Dateiname der im Programmpfad liegenden Backupdateien
/// </summary>
public string FileName { get => _filename; set => _filename = value; }
private string _destination_file = "";
/// <summary>
/// Der Pfad zur Datei, die im Benutzerpfad ersetzt werden soll
/// </summary>
public string DestinationFile { get => _destination_file; set => _destination_file = value; }
private DateTime _when = default(DateTime);
/// <summary>
/// Zu welcher Zeit wurde der Sicherungssatz erstellt
/// </summary>
public DateTime When { get => _when; set => _when = value; }
private ConfigRecoveryType _recoverytype;
/// <summary>
/// Um welchen Typen von Sicherung handelt es sich
/// </summary>
public ConfigRecoveryType RecoveryType { get => _recoverytype; set => _recoverytype = value; }
/// <summary>
/// Gibt Informationen einer Backupkonfiguration wieder
/// </summary>
public ConfigBackup() { }
/// <summary>
/// Gibt Informationen einer Backupkonfiguration wieder
/// </summary>
/// <param name="filename">Dateiname der im Programmpfad liegenden Backupdateien</param>
public ConfigBackup(string filename)
{
_filename = filename;
_recoverytype = _filename.EndsWith($"_{Path.GetFileNameWithoutExtension(Paths.UserConfig.FullName)}.bak") ? ConfigRecoveryType.UserConfig :
_filename.EndsWith("_favorites.bak") ? ConfigRecoveryType.Favorites : ConfigRecoveryType.Prevalences;
_destination_file = _recoverytype == ConfigRecoveryType.UserConfig ? Paths.UserConfig.FullName :
_recoverytype == ConfigRecoveryType.Favorites ? Paths.Favorites.Apps.FullName : Paths.Prevalence.FullName;
string tempdatetime = Path.GetFileNameWithoutExtension(_filename).Trim($"{Environment.UserName.ToLower()}_".ToCharArray());
_when = DateTime.ParseExact(tempdatetime.Substring(0, 15), "yyyyMMdd-HHmmss", CultureInfo.InvariantCulture);
}
/// <summary>
/// Stellt das Backup wieder her
/// </summary>
public void Recover()
{
File.Copy(Paths.Bak.Directory + _filename, _destination_file, true);
//Creator.StreamCopy(Paths.Bak.Directory + _filename, _destination_file, null);
}
public int CompareTo(ConfigBackup other)
{
return this.When.CompareTo(other.When);
}
}
/// <summary>
/// Klasse zum Auslesen eines GFATaskStreams, welche über die FrontEndRefresh-Klasse zwischen den gestarteten GFATask-Instanzen synchronisiert wird
/// </summary>
[XmlRoot("Object")]
public class GFATaskStream
{
[XmlElement("PipeType")]
public NetPipeType PipeType { get; set; }
[XmlElement("ClickCounter")]
public ClickCounter ClickCounter { get; set; }
[XmlElement("AppType")]
public AppType AppType { get; set; }
[XmlElement("App")]
public Models.App App { get; set; }
}
}

View File

@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
/// <summary>
/// Beinhaltet das Sichern und Laden von benutzerdefinierten Dateien
/// </summary>
class ConfigBackupClass
{
/// <summary>
/// Erstellt eine Sicherung der benutzerdefinierten Einstellungen, App-Beliebtheit und Favoriten
/// </summary>
public static void Save()
{
Deploy.Templating(typeof(Models.Config.User), Paths.UserConfig.FullName, false, true);
Deploy.AppListTemplate(DeployAppList.Prevalence, false, true);
Deploy.AppListTemplate(DeployAppList.Favorites, false, true);
XObjects.MessageBox("Sicherung der Konfigurationsdateien (Benutzereinstellungen, App-Beliebtheit und Favoriten) erfolgreich", NotifyButtons.OK, NotifyType.Message, new Size(300, 140), "Erfolgreiche Sicherung");
}
/// <summary>
/// Lädt eine Sicherung der benutzerdefinierten Einstellungen, App-Beliebtheit und/oder Favoriten
/// </summary>
public static void Load()
{
DataTable backuptable = new DataTable("Backups");
backuptable.Columns.Add("Wiederherstellen", typeof(bool));
backuptable.Columns.Add(new DataColumn("Wiederherstellungstyp", typeof(string)));
backuptable.Columns.Add("Datum", typeof(DateTime));
backuptable.Columns.Add("Sicherungssatz", typeof(string));
foreach (string file in Directory.GetFiles(Paths.Bak.Directory, $"{Environment.UserName.ToLower()}_*"))
{
ConfigBackup backup = new ConfigBackup(file);
backuptable.Rows.Add(false, backup.RecoveryType.GetDescription(), backup.When, Path.GetFileName(backup.FileName));
}
if (backuptable.Rows.Count == 0)
if (XObjects.MessageBox("Es sind keine Sicherungssätze vorhanden", NotifyButtons.OK, NotifyType.Message, new Size(300, 120), "Keine Sicherungen vorhanden").Result == DialogResult.OK)
return;
backuptable = backuptable.Select("","Wiederherstellungstyp ASC, Datum DESC").CopyToDataTable();
var msgbox = XObjects.MessageBox("", NotifyButtons.OkCancel, NotifyType.DataGrid, new Size(500, 350), "Sicherungen laden", Convert.ChangeType(backuptable, typeof(DataTable)));
if (msgbox.Result == DialogResult.OK)
{
Dictionary<ConfigRecoveryType, List<ConfigBackup>> selected_recoveries = new Dictionary<ConfigRecoveryType, List<ConfigBackup>>();
foreach (var recovery in backuptable.Rows.Cast<DataRow>().Where(row => (bool)row.ItemArray[0] == true))
{
ConfigBackup selected = new ConfigBackup(recovery.ItemArray.Last().ToString());
if (!selected_recoveries.ContainsKey(selected.RecoveryType))
selected_recoveries.Add(selected.RecoveryType, new List<ConfigBackup>());
selected_recoveries[selected.RecoveryType].Add(selected);
selected_recoveries[selected.RecoveryType].Sort();
if (selected_recoveries.ContainsKey(selected.RecoveryType) && selected_recoveries[selected.RecoveryType].Count > 1)
{
var msg = XObjects.MessageBox($"Es wurden mehrere {selected.RecoveryType.GetDescription()} zur Wiederherstellung ausgewählt.\n\n" +
$"Soll die Datei vom {selected_recoveries[selected.RecoveryType].Last().When}\n" +
$"Durch eine Ältere vom {selected.When} ersetzt werden", NotifyButtons.YesNoCancel, NotifyType.Message, new Size(350, 200), "Ersetzen");
if (msg.Result == DialogResult.Yes)
{
selected.Recover();
}
else if (msg.Result == DialogResult.No)
continue;
else if (msg.Result == DialogResult.Cancel)
break;
}
else
{
selected.Recover();
}
}
}
}
}
}

162
GFATask/Classes/Deploy.cs Normal file
View File

@@ -0,0 +1,162 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace GFATask
{
/// <summary>
/// Eine Klasse die Werkzeuge zum Umgang mit den benötigten Programm-Dateien besitzt. Darunter Sicherungs-, Vorlagen- und Überschreibfunktionen
/// </summary>
public class Deploy
{
/// <summary>
/// Erzeugt am gewünschten Ort eine neue Datei aus dem Vorlagentypen und überschreibt diese, falls bereits vorhanden.
/// Bei Bedarf kann zuvor eine Sicherung dieser Datei mit Datumsangabe erstellt werden. Kann auch als reine Backup-Funktion genutzt werden.
/// Sofern die Datei bereits vorhanden ist, kann die Variable overwrite auf "false" und dobackup auf "true" gesetzt werden.
/// </summary>
/// <param name="type">Gibt den Vorlagentypen an der erzeugt werden soll</param>
/// <param name="target">Ist der gewünschte Pfad, an dem die Vorlage abgelegt wird</param>
/// <param name="overwrite">Sofern bereits eine Datei mit diesem Namen vorhanden ist, wird diese überschrieben</param>
/// <param name="dobackup">Gibt an, ob eine Sicherung der Datei erstellt werden soll</param>
/// <returns></returns>
public static bool Templating(Type type, string target, bool overwrite, bool dobackup)
{
var action = new Action(delegate
{
object o = Activator.CreateInstance(type);
JSON.Serialize(o, target);
});
if (File.Exists(target))
{
if (dobackup)
{
string filename = Path.GetFileNameWithoutExtension(target);
string bak_datetime = DateTime.Now.ToString("yyyyMMdd-HHmmss");
File.Copy(target, $@"{Paths.Bak.Directory}\{Environment.UserName.ToLower()}_{bak_datetime}_{filename}.bak");
Log.EventLog.Write($"{filename} Backup erstellt", LogClassification.Success);
}
if (overwrite)
{
try
{
string filename = Path.GetFileName(target);
string overwrite_datetime = DateTime.Now.ToString("yyyyMMdd-HHmmss");
Log.EventLog.Write($"{filename} überschrieben", LogClassification.Success);
action.Invoke();
return true;
}
catch (Exception ex)
{
Log.EventLog.Write("Vorlage nicht erstellt", LogClassification.Crash, ex);
return false;
}
}
return false;
}
else
{
try
{
action.Invoke();
return true;
}
catch (Exception ex)
{
Log.EventLog.Write("Vorlage nicht erstellt", LogClassification.MediumError, ex);
return false;
}
}
}
/// <summary>
/// Erzeugt im benutzerdefinierten Pfad (%APPDATA%\GFATASK) eine leere Typendatei. Kann auch als reine Backup-Funktion genutzt werden.
/// Sofern die Datei bereits vorhanden ist, kann die Variable overwrite auf "false" und dobackup auf "true" gesetzt werden.
/// </summary>
/// <param name="deploytype">Gibt den Typen der AppList an</param>
/// <param name="overwrite">Soll die Datei überschrieben werden</param>
/// <param name="dobackup">Soll eine Sicherung der Datei erzeugt werden</param>
/// <returns></returns>
public static bool AppListTemplate(DeployAppList deploytype, bool overwrite, bool dobackup)
{
string targetpath = deploytype == DeployAppList.Prevalence ? Paths.Prevalence.FullName : Paths.Favorites.Apps.FullName;
var action = new Func<bool>(delegate
{
try
{
string path = string.Empty;
var list = new object();
if (deploytype == DeployAppList.Prevalence)
{
list = new Models.Prevalence()
{
Admin = new List<Models.Prevalence.AppPrevalenceProperties>(),
Citrix = new List<Models.Prevalence.AppPrevalenceProperties>(),
Favorites = new List<Models.Prevalence.AppPrevalenceProperties>(),
Menu = new List<Models.Prevalence.AppPrevalenceProperties>(),
User = new List<Models.Prevalence.AppPrevalenceProperties>()
};
}
else
{
list = new Models.AppList<Models.App>() { Apps = new List<Models.App>(), Type = AppType.Favorites };
}
JSON.Serialize(list, targetpath);
return true;
}
catch (Exception ex)
{
Log.EventLog.Write("Vorlage nicht erstellt", LogClassification.MediumError, ex);
return false;
}
});
if (File.Exists(targetpath))
{
if (dobackup)
{
string filename = Path.GetFileNameWithoutExtension(targetpath);
string bak_datetime = DateTime.Now.ToString("yyyyMMdd-HHmmss");
File.Copy(targetpath, $@"{Paths.Bak.Directory}\{Environment.UserName.ToLower()}_{bak_datetime}_{filename}.bak");
Config.User.Deploy.Backup = false;
}
if (overwrite)
{
Config.User.Deploy.Overwrite = false;
return action.Invoke();
}
if(dobackup || overwrite)
JSON.Save(JSONConfig.User);
return false;
}
else
{
return action.Invoke();
}
}
}
/// <summary>
/// Definiert die zu erzeugenden Listen
/// </summary>
public enum DeployAppList
{
/// <summary>
/// Definiert die Prevalence-(Beliebtheits)-Datei
/// </summary>
Prevalence = 0,
/// <summary>
/// Definiert die Favoriten-Datei
/// </summary>
Favorites = 1
}
}

View File

@@ -0,0 +1,283 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Xml.Serialization;
namespace GFATask
{
/// <summary>
/// Stellt eine FrontEnd-Update Klasse dar, welche über eine Datei, Änderungen eines gewissen Typs(<T>) ausgibt
/// </summary>
/// <typeparam name="T">Welcher Klassentyp wird in der Datei gespeichert</typeparam>
public class FrontEndRefresh<T>
{
/// <summary>
/// Löst ein Ereignis mit dem angegebenen Ereignis-Typen (<T>) aus, welches eine Veränderung in der Datei entdeckt hat
/// </summary>
public event EventHandler<FrontEndRefreshEventArgs<T>> Updated;
/// <summary>
/// Löst ein Ereignis aus, sobald ein Fehler im Programmcode erzeugt wird
/// </summary>
public event EventHandler<FrontEndErrorEventArgs> Error;
/// <summary>
/// Threadsichere Ausführung des Update-Ereignisses
/// </summary>
private SynchronizationContext synccontext;
/// <summary>
/// Das FileSystemWatcher-Objekt
/// </summary>
private FileSystemWatcher fsw;
/// <summary>
/// Pfad zur Datei die überwacht werden soll
/// </summary>
private string path;
/// <summary>
/// Verhindert das mehrfache Ausführen einer geänderten Datei (Zugriff und Speichern werden immer als Änderung erkannt)
/// </summary>
private Dictionary<string, bool> acceptchange = new Dictionary<string, bool>();
private bool _selfupdate = false;
/// <summary>
/// Bestimmt, ob das Update auch bei dem Host ausgeführt wird, der die Datei verändert hat
/// </summary>
public bool SelfUpdate
{
get => _selfupdate;
set => _selfupdate = value;
}
private bool _active = true;
/// <summary>
/// Überprüft, ob Updates an FrontEnds gesendet werden sollen
/// </summary>
public bool Active
{
get => _active;
set => _active = value;
}
/// <summary>
/// Stellt eine FrontEnd-Update Klasse dar, welche über eine Datei, Änderungen eines gewissen Typs(<T>) ausgibt
/// </summary>
/// <param name="filename">Gibt den Pfad zur überwachenden Datei an. Ist diese noch nicht vorhanden, wird sie erstellt</param>
public FrontEndRefresh(string filename)
{
try
{
path = filename;
if (!File.Exists(path))
File.Create(path).Close();
using(FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
{
fsw = new FileSystemWatcher(Path.GetDirectoryName(fs.Name), Path.GetFileName(fs.Name));
fsw.Changed += Fsw_Changed;
}
}
catch (Exception ex)
{
Error?.Invoke(this, new FrontEndErrorEventArgs(ex));
}
}
private void Fsw_Changed(object sender, FileSystemEventArgs e)
{
// Diese Methode überspringt die Änderung beim ersten Mal
if (acceptchange.ContainsKey(path))
acceptchange[path] = true;
else
acceptchange.Add(path, false);
if (acceptchange[path])
{
try
{
if (synccontext != null)
{
synccontext.Post(s =>
{
FrontEndObject o = this.DeserializeObject<FrontEndObject>();
if (_selfupdate || (!_selfupdate && o.HostName != Dns.GetHostName()))
{
acceptchange.Remove(path);
Updated?.Invoke(this, new FrontEndRefreshEventArgs<T>(o.Data, path, o.CurrentAssembly, o.HostName, o.IPv4, o.UpdateTime));
}
}, null);
}
else
{
FrontEndObject o = this.DeserializeObject<FrontEndObject>();
if (_selfupdate || (!_selfupdate && o.HostName != Dns.GetHostName()))
{
acceptchange.Remove(path);
Updated?.Invoke(this, new FrontEndRefreshEventArgs<T>(o.Data, path, o.CurrentAssembly, o.HostName, o.IPv4, o.UpdateTime));
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
/// <summary>
/// Schreibt das Objekt als XML-Model in die Datei
/// </summary>
/// <typeparam name="U"></typeparam>
/// <param name="toSerialize"></param>
private void SerializeObject<U>(U toSerialize)
{
synccontext = SynchronizationContext.Current;
System.Serialization.Xml.SerializeToFile(path, toSerialize);
}
/// <summary>
/// Liest das XML-Model als Objekt, aus der Datei aus
/// </summary>
/// <typeparam name="U"></typeparam>
/// <returns></returns>
private U DeserializeObject<U>()
{
synccontext = SynchronizationContext.Current;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
{
//if (Verifying.IsFileLocked(new FileInfo(fs.Name)))
// return default(U);
//else
return System.Serialization.Xml.DeserializeFromFile<U>(fs.Name);
}
}
/// <summary>
/// Führt ein Update am FrontEnd und Remote-FrontEnds aus, sofern die Klasse aktiv / gestartet ist
/// </summary>
/// <param name="data"></param>
public void Update(T data)
{
try
{
if (!_active)
return;
FrontEndObject o = new FrontEndObject()
{
Data = data,
CurrentAssembly = Assembly.GetExecutingAssembly().GetName().Name,
HostName = Dns.GetHostName(),
IPv4 = Net.GetIPv4(Dns.GetHostName()).ToString(),
UpdateTime = DateTime.Now
};
this.SerializeObject(o);
if (_selfupdate)
{
if (synccontext != null)
synccontext.Post(s => Updated?.Invoke(this, new FrontEndRefreshEventArgs<T>(o.Data, path, o.CurrentAssembly, o.HostName, o.IPv4, o.UpdateTime)), null);
else
Updated?.Invoke(this, new FrontEndRefreshEventArgs<T>(o.Data, path, o.CurrentAssembly, o.HostName, o.IPv4, o.UpdateTime));
}
}
catch (Exception ex)
{
Error?.Invoke(this, new FrontEndErrorEventArgs(ex));
}
}
/// <summary>
/// Startet die Überwachung
/// </summary>
public void Start()
{
fsw.EnableRaisingEvents = true;
synccontext = SynchronizationContext.Current;
}
/// <summary>
/// Stopt die Überwachung
/// </summary>
public void Stop()
{
fsw.EnableRaisingEvents = false;
}
public class FrontEndObject
{
public T Data { get; set; }
public int Length { get; set; }
public string HostName { get; set; }
public string IPv4 { get; set; }
public DateTime UpdateTime { get; set; }
public string CurrentAssembly { get; set; }
public FrontEndObject() { }
new public string ToString()
{
return string.Join("\n", this.GetType().GetProperties().Select(prop => prop.Name + ": " + prop.GetValue(this)));
}
}
}
public class FrontEndRefreshEventArgs<T>
{
[JsonProperty("assembly")]
public string Assembly { get; set; }
[JsonProperty("host")]
public string Host { get; set; }
[JsonProperty("ipv4")]
public string IPv4 { get; set; }
[JsonProperty("updatetime")]
public DateTime UpdateTime { get; set; } = DateTime.Now;
[JsonProperty("path")]
public string Path { get; set; } = string.Empty;
[JsonProperty("data")]
public T Data { get; set; }
public FrontEndRefreshEventArgs(T data, string path, string assembly, string host, string ipv4, DateTime updatetime)
{
Data = data;
Path = path;
Assembly = assembly;
Host = host;
IPv4 = ipv4;
UpdateTime = updatetime;
}
}
public class FrontEndErrorEventArgs
{
public Exception Ex { get; set; }
public FrontEndErrorEventArgs(Exception ex) =>
Ex = ex;
}
}

View File

@@ -0,0 +1,92 @@
using System.Collections;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization;
namespace GFATask
{
public class FrontEndRefreshExecution
{
public static void Updated(object sender, FrontEndRefreshEventArgs<GFATaskStream> e)
{
if(e.Data.PipeType == NetPipeType.ErrorHandle)
{
return;
}
else if (e.Data.PipeType == NetPipeType.AppCounter_CountUp)
{
Forms.Administration.UcAdminAppClickCounter.RefreshList(e.Data.ClickCounter);
}
else if (e.Data.PipeType == NetPipeType.AppCounter_Reset)
{
Forms.Administration.UcAdminAppClickCounter.ResetAppCounter(e.Data.ClickCounter);
}
else if (e.Data.PipeType == NetPipeType.ClickCounter_Clear)
{
Config.AppClickCounter = JSON.Read<Models.ClickCounter>(Paths.AppClickCounter.FullName);
Forms.Administration.UcAdminAppClickCounter.ClearAppClickCounterList();
}
else if (e.Data.PipeType == NetPipeType.MainConfig)
{
Config.Main = JSON.Read<Models.Config.Main>(Paths.MainConfig.FullName);
Forms.Administration.UcAdminDesigns.SetWindowBorder();
Forms.Administration.UcAdminDesigns.SetNewDesign();
Application.OpenForms.OfType<FormEx>().ToList().ForEach(f => f.SetDefaultDesign());
}
else if(e.Data.PipeType == NetPipeType.Citrix)
{
Config.Main = JSON.Read<Models.Config.Main>(Paths.MainConfig.FullName);
Forms.Administration.UcAdminGeneral.ChangeCitrix();
}
else if(e.Data.PipeType == NetPipeType.FrontEndUpdate)
{
Config.Main = JSON.Read<Models.Config.Main>(Paths.MainConfig.FullName);
Forms.Administration.UcAdminGeneral.SetFrontEndUpdate();
}
else if (e.Data.PipeType == NetPipeType.ActiveDirectory)
{
Config.Main = JSON.Read<Models.Config.Main>(Paths.MainConfig.FullName);
Forms.Administration.UcAdminGeneral.UseActiveDirectory();
}
else if (e.Data.PipeType == NetPipeType.MailAccount)
{
Config.Main = JSON.Read<Models.Config.Main>(Paths.MainConfig.FullName);
}
else if (e.Data.PipeType == NetPipeType.Edit && e.Data.AppType != System.AppType.Favorites)
{
var applist = Accessor.GetAppList(e.Data.AppType);
Accessor.GetAppList(e.Data.AppType).Apps[Accessor.GetAppList(e.Data.AppType).Apps.FindIndex(app => app.ID == e.Data.App.ID)] = e.Data.App;
// BUGFIX - Wenn der Sender einen Button aus, oder in eine Gruppe verschiebt, wird dies nicht richtig übertragen...
// Jetzt wird das gesamte AppListPanel erneuert - UNSCHÖN!
//Accessor.GetAppListPanel(e.Data.AppType).ReplaceButton(e.Data.App);
Creator.AppListPanel(Accessor.GetAppListPanel(e.Data.AppType), applist);
}
else if (e.Data.PipeType == NetPipeType.Delete && e.Data.AppType != System.AppType.Favorites)
{
var applist = Accessor.GetAppList(e.Data.AppType);
applist.Apps.Remove(e.Data.App);
Accessor.GetAppListPanel(e.Data.AppType).RemoveButton(e.Data.App);
}
else if (e.Data.PipeType == NetPipeType.Create && e.Data.AppType != System.AppType.Favorites)
{
var applist = Accessor.GetAppList(e.Data.AppType);
applist.Apps.Add(e.Data.App);
Accessor.GetAppListPanel(e.Data.AppType).AddAppButton(e.Data.App);
}
}
public static void OnError(object sender, FrontEndErrorEventArgs e)
{
//Log.EventLog.Write("Fehler in FrontEndRefresh", System.LogClassification.MediumError, e.Ex);
}
}
}

131
GFATask/Classes/Hooks.cs Normal file
View File

@@ -0,0 +1,131 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace GFATask
{
public partial class Hooks
{
#region Mouse
public static void Mouse_Up(MouseHook.MSLLHOOKSTRUCT mousestruct)
{
//Rectangle scaledbounds = new Rectangle((int)(Forms.Main.DesktopBounds.X * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.DesktopBounds.Y * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.Width * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.Height * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))));
Rectangle scaledbounds = new Rectangle((int)(Forms.Main.DesktopBounds.X), (int)(Forms.Main.DesktopBounds.Y), (int)(Forms.Main.Width), (int)(Forms.Main.Height));
//Rectangle scaledbounds = new Rectangle((int)(Forms.Main.Bounds.X * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.Bounds.Y * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.Width * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.Height * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))));
Rectangle scaledappgroupbounds = new Rectangle((int)(Forms.AppButtonGroup.DesktopBounds.X * Win32API.GetScalingFactor(Screen.FromControl(Forms.AppButtonGroup))), (int)(Forms.AppButtonGroup.DesktopBounds.Y * Win32API.GetScalingFactor(Screen.FromControl(Forms.AppButtonGroup))), (int)(Forms.AppButtonGroup.Width * Win32API.GetScalingFactor(Screen.FromControl(Forms.AppButtonGroup))), (int)(Forms.AppButtonGroup.Height * Win32API.GetScalingFactor(Screen.FromControl(Forms.AppButtonGroup))));
Rectangle scaledboundswithoutgrip = new Rectangle(scaledbounds.X + Forms.Main.GripSize - Forms.Main.BorderWidth, scaledbounds.Y, scaledbounds.Width - Forms.Main.GripSize, scaledbounds.Height - Forms.Main.GripSize + Forms.Main.BorderWidth);
bool mouseover = scaledbounds.Contains(mousestruct.Location);
bool mouseoverappgroup = scaledappgroupbounds.Contains(mousestruct.Location);
bool countMAX = XObjects.Delay.Count == XObjects.Delay.MaxCounts;
if (Forms.Main.SysContextMenu.Visible || Forms.Info.Visible || Forms.Settings.Visible || Forms.Groups.Visible || Forms.AppCreator.Visible || Forms.Administration.Visible || XObjects.ContextMenuStrip.Visible)
return;
if (Config.User.NecessaryClick)
{
if (scaledboundswithoutgrip.Contains(Cursor.Position))
{
XObjects.Delay.Waiting = new Delay.DelayTime(Config.User.NecessaryClick ? 0 : Config.User.Delay.Show, Config.User.Delay.Hide);
XObjects.Delay.Increase();
}
}
if (!mouseoverappgroup && Forms.AppButtonGroup.Visible)
{
Forms.AppButtonGroup.Hide();
if (!mouseover)
{
XObjects.Delay.Decrease();
}
}
else if (!mouseover && Forms.Main.SysContextMenu.Visible)
XObjects.Delay.Decrease();
}
public static void Mouse_Move(MouseHook.MSLLHOOKSTRUCT mousestruct)
{
if (XObjects.PausedDelay || Forms.Main.SysContextMenu.Visible || Forms.Info.Visible || Forms.AppButtonGroup.Visible || Forms.Settings.Visible || Forms.Groups.Visible || Forms.AppCreator.Visible || Forms.Administration.Visible || XObjects.ContextMenuStrip.Visible)
return;
// Wegen unbekannter Probleme versetzt sich der GFATask willkürlich in den Hintergrund.
// Bei jeder Mausbewegung wird der GFATask sofort wieder an oberste Ebene versetzt, sodass er über allen anderen Fenstern steht.
Win32API.SetWindowPos(Forms.Main.Handle, HWDN.TOPMOST, 0, 0, 0, 0, SWP.NOSIZE | SWP.NOMOVE);
//Rectangle scaledbounds = new Rectangle((int)(Forms.Main.DesktopBounds.X * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.DesktopBounds.Y * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.Width * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))), (int)(Forms.Main.Height * Win32API.GetScalingFactor(Screen.FromControl(Forms.Main))));
Rectangle scaledbounds = new Rectangle((int)(Forms.Main.DesktopBounds.X), (int)(Forms.Main.DesktopBounds.Y), (int)(Forms.Main.Width), (int)(Forms.Main.Height));
// Hier muss Cursor.Position angewendet werden, da die HookStruct-Position der Maus die Bewegung angibt und nicht an welchem Punkt sich die Maus aktuell auf dem Desktop befindet
bool mouseover = scaledbounds.Contains(Cursor.Position);
bool mouseover_withoutgrip = new Rectangle(scaledbounds.X + Forms.Main.GripSize - Forms.Main.BorderWidth, scaledbounds.Y, scaledbounds.Width - Forms.Main.GripSize, scaledbounds.Height - Forms.Main.GripSize + Forms.Main.BorderWidth).Contains(Cursor.Position);
bool countMIN = XObjects.Delay.Count >= -1 && XObjects.Delay.Count <= 0;
bool countMAX = XObjects.Delay.Count >= XObjects.Delay.MaxCounts;
Delay.Prevent direction = XObjects.Delay.IsProcessing;
// BUGFIX: Wenn der Mauszeiger kurz außerhalb des GFA-Task ist und sofort wieder einspringt, wird dieser nicht ausgeblendet
if (mouseover && countMAX && !countMIN && direction == Delay.Prevent.Decrease)
{
XObjects.Delay.Waiting = new Delay.DelayTime(Config.User.NecessaryClick ? 0 : Config.User.Delay.Show, Config.User.Delay.Hide);
XObjects.Delay.Increase();
}
// Wenn der Mausklick zum Einblenden benötigt wird, der Mauszeiger sich innerhalb des sichtbaren Fensters befindet und kein Delay durchgeführt wird
else if (!Config.User.NecessaryClick && mouseover_withoutgrip && countMIN && direction == Delay.Prevent.None)
{
XObjects.Delay.Waiting = new Delay.DelayTime(Config.User.NecessaryClick ? 0 : Config.User.Delay.Show, Config.User.Delay.Hide);
XObjects.Delay.Increase();
}
// Wenn der Mauszeiger nicht über dem GFA-Task ist, dieser komplett eingeblendet ist und kein Delay durchgeführt wird
else if (!mouseover && countMAX && direction == Delay.Prevent.None)
{
XObjects.Delay.Decrease();
}
// Wenn der kein Mausklick zum Einblenden benötigt wird, der Mauszeiger sich innerhalb des GFA-Task befindet, dieser komplett eingeblendet ist und der Delay ausblendet
else if (!Config.User.NecessaryClick && mouseover && countMAX && direction == Delay.Prevent.Decrease)
{
XObjects.Delay.Waiting = new Delay.DelayTime(Config.User.NecessaryClick ? 0 : Config.User.Delay.Show, Config.User.Delay.Hide);
XObjects.Delay.Increase();
}
// Wenn der Mauszeiger sich nicht innerhalb des GFA-Task befindet, dieser komplett ausgeblendet ist und der Delay einblendet
else if (!mouseover && countMIN && direction == Delay.Prevent.Increase)
{
XObjects.Delay.Decrease();
}
// Wenn der Mauszeiger sich innerhalb des sichtbaren Fensters befindet, der GFA-Task weder komplett ein- noch ausgeblendet ist und der GFA-Task sich im Ausblendprozess befindet
else if (mouseover_withoutgrip && !countMIN && !countMAX && direction == Delay.Prevent.Decrease)
{
XObjects.Delay.Waiting = new Delay.DelayTime(0, Config.User.Delay.Hide);
XObjects.Delay.Increase();
}
// Wenn der Mauszeiger nicht über dem GFA-Task ist, der GFA-Task weder komplett ein- noch ausgeblendet ist und der GFA-Task sich im Einblendprozess befindet
else if (!mouseover && !countMIN && !countMAX && direction == Delay.Prevent.Increase)
{
XObjects.Delay.Decrease();
}
}
#endregion
#region KeyBoard
public static void KeyBoard_Intercept_KeyPress(object sender, HotKeyEventArgs e)
{
var applist = Accessor.GetAppList(AppType.Menu);
if (e.Modifier == Modifier.CTRL)
{
if (e.Key == Keys.F1)
{
SystemApps.Info(out _);
}
if (e.Key == Keys.F2)
{
SystemApps.Settings(out _);
}
if (e.Key == Keys.F3)
{
SystemApps.Administration(out _);
}
}
}
#endregion
}
}

View File

@@ -0,0 +1,118 @@
using Microsoft.VisualBasic.Devices;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public class InfoClass
{
/// <summary>
/// Gibt den Titel des Programm-Assembly aus den Projekteigenschaften aus
/// </summary>
public static string ProgramName
{
get => ((AssemblyTitleAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyTitleAttribute), false))?.Title;
}
/// <summary>
/// Gibt den Codenamen des Programm-Assembly aus den Projekteigenschaften aus
/// </summary>
public static string ProgramCodeName
{
get => Application.ProductName;
}
/// <summary>
/// Gibt den Codenamen des Programm-Assembly aus den Projekteigenschaften aus
/// </summary>
public static string Copyright
{
get => $"{((AssemblyCopyrightAttribute)Assembly.GetExecutingAssembly().GetCustomAttribute(typeof(AssemblyCopyrightAttribute))).Copyright} {DateTime.Now.Year}";
}
/// <summary>
/// Gibt eine benutzerdefinierte Version anhand der AssemblyInfo.cs aus
/// </summary>
public static string ProgramVersion
{
get
{
Version version = Assembly.GetExecutingAssembly().GetName().Version;
return string.Format("{0}.{1}.{2}", version.Major, version.Build.ToString()[0], version.Build.ToString()[1]);
}
}
/// <summary>
/// Gibt die IP-Adresse des Computers als Zeichenkette aus
/// </summary>
public static string IPAdress
{
get
{
string ipadress = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.First(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).ToString();
return $"{ipadress}";
}
}
/// <summary>
/// Gibt Informationen wie den Computernamen, oder den Typen des Computers aus über den genutzten Computer aus
/// </summary>
public static string Computer
{
get
{
bool ica = (Environment.GetEnvironmentVariable("SessionName") ?? "").ToUpper().StartsWith("ICA");
return $"{SystemInformation.ComputerName} {(ica ? "[Terminalserver]" : "")}";
}
}
/// <summary>
/// Formattierter Programm-Name und -Version als Zeichenkette
/// </summary>
public static string Program { get => $"{ProgramName} {ProgramVersion}"; }
/// <summary>
/// Gibt die aktuell genutzte Windows-Version als Zeichenkette aus
/// </summary>
public static string OperatingSystem
{
get
{
//string win_name = new ComputerInfo().OSFullName;
//string reg_win_version = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\", "DisplayVersion", "").ToString();
//string reg_win_installtype = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\", "InstallationType", "").ToString();
//return $"{win_name} {reg_win_version} [{reg_win_installtype}]";
var os = new System.Management.WMI.OSStructure();
return $"{os.Name} {os.ServicePackDisplayName} [{os.InstallType}]\nVersion {os.Version}";
}
}
/// <summary>
/// Gibt die aktuell genutzte Windows-Version als Zeichenkette aus
/// </summary>
public static string Browsers
{
get
{
return $"{string.Join("\n", XObjects.WebBrowsers.Select(browser => $"{browser.Name} [{browser.Version}]"))}";
}
}
}
}

202
GFATask/Classes/JSON.cs Normal file
View File

@@ -0,0 +1,202 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Linq;
using System.IO;
using System.Windows.Forms;
namespace GFATask
{
/// <summary>
/// Enthält Serialisierungsfunktionen zum Speichern und Auslesen von JSON-Strukturen
/// </summary>
public class JSON
{
/// <summary>
/// Speichert das serialisierte Objekt in die angegebene Datei
/// </summary>
/// <param name="deserializedJsonObject">Das Objekt welches in die Datei geschrieben werden soll</param>
/// <param name="path">Pfad zur Datei</param>
public static void Serialize(object deserializedJsonObject, string path)
{
try
{
File.WriteAllText(path, JsonConvert.SerializeObject(deserializedJsonObject, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
catch (System.Exception ex)
{
throw ex;
}
}
/// <summary>
/// Speichert die gewünschte(n) Appsdatei(en) ab
/// </summary>
/// <param name="jsonapp">Welche Apps-Datei soll gespeichert werden</param>
public static void Save(JSONApp jsonapp)
{
try
{
jsonapp.GetFlags().ToList().ForEach(json =>
{
if ((JSONApp)json == JSONApp.User)
{
File.WriteAllText(Paths.Apps.Directory + "user.json", JsonConvert.SerializeObject(AppLists.User, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
else if ((JSONApp)json == JSONApp.Admin)
{
File.WriteAllText(Paths.Apps.Directory + "admin.json", JsonConvert.SerializeObject(AppLists.Admin, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
else if ((JSONApp)json == JSONApp.Menu)
{
File.WriteAllText(Paths.Apps.Directory + "menu.json", JsonConvert.SerializeObject(AppLists.Menu, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
else if ((JSONApp)json == JSONApp.Favorites)
{
File.WriteAllText(Paths.Favorites.Apps.FullName, JsonConvert.SerializeObject(AppLists.Favorites, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
});
}
catch (System.Exception ex)
{
Log.EventLog.Write(string.Format("{0} nicht gespeichert", jsonapp.ToString()), LogClassification.CriticalError, ex);
}
}
/// <summary>
/// Speichert die gewünschte(n) Konfigurationsdatei(en) ab
/// </summary>
/// <param name="jsonconfig">Welche Konfigurationsdatei soll gespeichert werden</param>
public static void Save(JSONConfig jsonconfig)
{
try
{
jsonconfig.GetFlags().ToList().ForEach(json =>
{
if((JSONConfig)json == JSONConfig.User)
{
File.WriteAllText(Paths.UserConfig.FullName, JsonConvert.SerializeObject(Config.User, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
else if ((JSONConfig)json == JSONConfig.Main)
{
File.WriteAllText(Paths.MainConfig.FullName, JsonConvert.SerializeObject(Config.Main, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
else if ((JSONConfig)json == JSONConfig.Prevalence)
{
File.WriteAllText(Paths.Prevalence.FullName, JsonConvert.SerializeObject(Config.Prevalence, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
else if ((JSONConfig)json == JSONConfig.NewsFeeds)
{
File.WriteAllText(Paths.NewsFeeds.Values.FullName, JsonConvert.SerializeObject(Config.NewsFeeds, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
else if ((JSONConfig)json == JSONConfig.AppClickCounter)
{
File.WriteAllText(Paths.AppClickCounter.FullName, JsonConvert.SerializeObject(Config.AppClickCounter, new JsonSerializerSettings() { Formatting = Formatting.Indented }));
}
});
}
catch (System.Exception ex)
{
Log.EventLog.Write(string.Format("{0} nicht gespeichert", jsonconfig.ToString()), LogClassification.CriticalError, ex);
}
}
/// <summary>
/// Führt eine Deserialisierung der Json-Datei anhand des Pfades durch
/// </summary>
/// <typeparam name="T">Gibt das Model der Serialisierung an</typeparam>
/// <param name="path">Der Pfad zur Json-Datei die zu einem Objekt serialisiert werden soll</param>
/// <param name="array">Handelt es sich um eine Array-Datei</param>
/// <returns>Serialisierter Json-Typ</returns>
public static T Read<T>(string path, bool array = false)
{
try
{
if (array)
{
var json = JArray.Parse(File.ReadAllText(path));
return JsonConvert.DeserializeObject<T>(json.ToString(), new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Include, Formatting = Formatting.Indented });
}
else
{
string json = string.Concat(JObject.Parse(File.ReadAllText(path)));
return JsonConvert.DeserializeObject<T>(json, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Include, Formatting = Formatting.Indented });
}
}
catch (System.Exception ex)
{
Log.EventLog.Write(string.Format("{0} nicht einlesbar", Path.GetFileName(path)), LogClassification.Crash, ex);
throw ex;
}
}
public static bool Exists(string path, string propertyname)
{
dynamic jsonobject = JsonConvert.DeserializeObject(string.Concat(JObject.Parse(File.ReadAllText(path))), new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Include, Formatting = Formatting.Indented });
return ((JObject)jsonobject).Properties().Any(p => p.Name == propertyname);
}
}
/// <summary>
/// Definiert den JSON-Konfigurations-Dateitypen
/// </summary>
[Flags]
public enum JSONConfig : int
{
/// <summary>
/// Es handelt sich um die Benutzerdefinierte-Konfigurationsdatei
/// </summary>
User = 1,
/// <summary>
/// Es handelt sich um die Haupt-Konfigurationsdatei
/// </summary>
Main = 2,
/// <summary>
/// Es handelt sich um die Beliebtheits-Konfigurationsdatei
/// </summary>
Prevalence = 4,
/// <summary>
/// Es handelt sich um die Neuigkeiten-Konfigurationsdatei
/// </summary>
NewsFeeds = 8,
/// <summary>
/// Es handelt sich um die AppClickCounter-Konfigurationsdatei
/// </summary>
AppClickCounter = 16
}
/// <summary>
/// Definiert den JSON-App-Dateitypen
/// </summary>
[Flags]
public enum JSONApp : int
{
/// <summary>
/// Es handelt sich um die Benutzer-Apps Datei
/// </summary>
User = 1,
/// <summary>
/// Es handelt sich um die Admin-Apps Datei
/// </summary>
Admin = 2,
/// <summary>
/// Es handelt sich um die Menü-Apps Datei
/// </summary>
Menu = 4,
/// <summary>
/// Es handelt sich um die Favoriten-Apps Datei
/// </summary>
Favorites = 8
}
}

View File

@@ -0,0 +1,285 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
/// <summary>
/// Eine Klasse zum zwischenspeichern von Einstellungen in den JSON-Models
/// </summary>
public class PreChanging
{
private Dictionary<Control, object> Temps { get; } = new Dictionary<Control, object>();
public Dictionary<Control, JsonChange> PreChanges { get; } = new Dictionary<Control, JsonChange>();
public PreChanging() { }
public void GetTemps(IEnumerable<Control> tempedcontrols)
{
tempedcontrols.ToList().ForEach(control =>
{
object value = new object();
if (control.GetType() == typeof(SwitchButton))
{
value = (control as SwitchButton).Checked;
}
else if (control.GetType() == typeof(NumericEx))
{
value = (control as NumericEx).Value;
}
else if (control.GetType() == typeof(ListBox))
{
value = (control as ListBox).SelectedItem;
}
else if (control.GetType() == typeof(ComboBox))
{
value = (control as ComboBox).SelectedItem;
}
else if (control.GetType() == typeof(AppListButton) && control.FindForm() != Forms.Settings)
{
value = (control as AppListButton).AnimateImageBackColor;
}
this.AddToTemp(control, value);
});
}
/// <summary>
/// Speichert Änderungen vorab in einer Auflistung. Änderungen werden erst mit der Funktion SaveAll wirksam
/// </summary>
/// <param name="dictionary"></param>
/// <param name="property"></param>
/// <param name="propname"></param>
/// <param name="value"></param>
/// <param name="controlname">Bei Model-Eigenschaften mit dem gleichen Namen (z.B. Grouping, oder Show in den List-Eigenschaften von Config.User), muss der Steuerlementname angegeben werden</param>
/// <param name="action">Eine Methode, die eine individualisierte Aktion ausführt</param>
public void Add(object t, string property, Control control, object value, Action<object> action)
{
if (PreChanges.ContainsKey(control))
{
PreChanges[control] = new JsonChange(property, t, GetProperty(t, property), value, action);
PreChanges[control].Commit();
}
else
{
this.AddToTemp(control, value);
PreChanges.Add(control, new JsonChange(property, t, GetProperty(t, property), value, action));
PreChanges[control].Commit();
}
}
private void AddToTemp(Control control, object value)
{
if (!Temps.ContainsKey(control))
Temps.Add(control, value);
}
public PropertyInfo GetProperty(object t, string PropertyName)
{
if (t.GetType().GetProperties().Count(p => p.Name == PropertyName.Split('.')[0]) == 0)
throw new ArgumentNullException(string.Format("Property {0}, is not exists in object {1}", PropertyName, t.ToString()));
if (PropertyName.Split('.').Length == 1)
return t.GetType().GetProperty(PropertyName);
else
return GetProperty(t.GetType().GetProperty(PropertyName.Split('.')[0]).GetValue(t, null), PropertyName.Split('.')[1]);
}
public void Reset(Control control)
{
if (Temps.ContainsKey(control))
{
if (control.GetType() == typeof(SwitchButton))
{
object value;
if (Temps.TryGetValue(control, out value))
{
(control as SwitchButton).Checked = (bool)value;
}
}
else if (control.GetType() == typeof(NumericEx))
{
object value;
if (Temps.TryGetValue(control, out value))
{
(control as NumericEx).Value = decimal.Parse(value.ToString());
}
}
else if (control.GetType() == typeof(ListBox))
{
object value;
if (Temps.TryGetValue(control, out value))
{
(control as ListBox).SelectedItem = value;
}
}
else if (control.GetType() == typeof(ComboBox))
{
object value;
if (Temps.TryGetValue(control, out value))
{
(control as ComboBox).SelectedItem = value;
}
}
else if (control.GetType() == typeof(AppListButton) && control.FindForm() != Forms.Settings)
{
object value;
if (Temps.TryGetValue(control, out value))
{
(control as AppListButton).AnimateImageBackColor = (Color)value;
}
}
PreChanges.Remove(control);
}
}
public void CommitAll()
{
// Anstatt Temps.Clear sollten die Steuerelement aus PreChanges die mit Temps übereinstimmen, den Wert aktualisiert bekommen
this.DoItAll();
this.PreChanges.ToList().ForEach(change => this.Temps[change.Key] = change.Value.Value );
//this.Temps.Clear();
this.PreChanges.Values.ToList().ForEach(change => change.Commit());
this.PreChanges.Clear();
}
public void DoItAll()
{
// Anstatt Temps.Clear sollten die Steuerelement aus PreChanges die mit Temps übereinstimmen, den Wert aktualisiert bekommen
this.PreChanges.ToList().ForEach(change =>
{
Temps[change.Key] = change.Value.Value;
change.Value.DoIt();
});
}
public void Commit(Control control)
{
this.Temps[control] = this.PreChanges[control].Value;
this.PreChanges[control].Commit();
this.PreChanges.Remove(control);
}
public void ResetAll()
{
Temps.ToList().ForEach(kv =>
{
Control control = kv.Key;
if (control.GetType() == typeof(SwitchButton))
{
object value;
if (Temps.TryGetValue(control, out value))
{
(control as SwitchButton).Checked = (bool)value;
}
}
else if (control.GetType() == typeof(NumericEx))
{
object value;
if (Temps.TryGetValue(control, out value))
{
(control as NumericEx).Value = decimal.Parse(value.ToString());
}
}
else if (control.GetType() == typeof(ListBox))
{
object value;
if (Temps.TryGetValue(control, out value))
{
(control as ListBox).SelectedItem = value;
}
}
else if (control.GetType() == typeof(ComboBox))
{
object value;
if (Temps.TryGetValue(control, out value))
{
if (value == null)
return;
(control as ComboBox).Text = value.ToString();
}
}
});
PreChanges.Clear();
}
}
/// <summary>
/// Erzeugt eine Struktur von Änderungen in einer JSON-Datei, die vorab in einer Auflistung gespeichert werden
/// </summary>
public struct JsonChange
{
/// <summary>
/// Eine Ausführbare Methode, die beim speichern des Elements ausgeführt werden kann
/// </summary>
public Action<object> Action { get; set; }
/// <summary>
/// Die Struktur des JSON-Models
/// </summary>
public string Property { get; set; }
public object PropType { get; set; }
/// <summary>
/// Name der Eigenschaft aus der JSON-Model-Struktur
/// </summary>
public PropertyInfo PropInfo { get; set; }
/// <summary>
/// Neuer Wert
/// </summary>
public object Value { get; set; }
/// <summary>
/// Erzeugt eine Struktur von Änderungen in einer JSON-Datei, die vorab in einer Auflistung gespeichert werden
/// </summary>
/// <param name="property">Die Struktur des JSON-Models </param>
/// <param name="propinfo">Name der Eigenschaft aus der JSON-Model-Struktur</param>
/// <param name="value">Neuer Wert</param>
public JsonChange(string property, object proptype, PropertyInfo propinfo, object value, Action<object> action)
{
Property = property;
PropType = proptype;
PropInfo = propinfo;
Value = value;
Action = action;
}
/// <summary>
/// Übernimmt die Änderung bis zum abschließenden Speichern in die Laufzeit-Eigenschaft
/// </summary>
public void Commit()
{
try
{
PropInfo.SetValue(PropType, Value);
}
catch (Exception ex)
{
Log.EventLog.Write(string.Format("Einstellung {0} nicht gespeichert", Property), LogClassification.CriticalError, ex);
//Log.EventLog.Write(string.Format("Einstellung {0} nicht gespeichert", Property.ToString().Substring(0, Property.ToString().LastIndexOf("+")).Replace('+', '.') + "." + PropInfo.Name), LogClassification.CriticalError, ex);
}
}
/// <summary>
/// Führt eine individualisierte Aktion aus
/// </summary>
public void DoIt()
{
Action?.Invoke(Value);
}
}
}

View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.VisualBasic.Devices;
namespace GFATask
{
class SystemApps
{
public static void Restart(out bool conditions)
{
XObjects.Restart("-restart");
conditions = true;
}
public static void Kill(out bool conditions)
{
Environment.Exit(Environment.ExitCode);
conditions = true;
}
public static void Backup(out bool conditions)
{
ConfigBackupClass.Save();
conditions = true;
}
public static void LoadBackup(out bool conditions)
{
ConfigBackupClass.Load();
conditions = true;
}
public static void Settings(out bool conditions)
{
Forms.Main.Invoke(new MethodInvoker(delegate { Accessor.OpenForm("Settings"); }));
conditions = true;
}
public static void Administration(out bool conditions)
{
Forms.Main.Invoke(new MethodInvoker(delegate { Forms.Administration.Login(); }));
conditions = true;
}
public static void Info(out bool conditions)
{
if (Forms.Main.InvokeRequired)
Forms.Main.Invoke(new MethodInvoker(delegate { Accessor.OpenForm("Info"); }));
else
Accessor.OpenForm("Info", closeifopen: true);
conditions = true;
}
}
}

37
GFATask/Controls/AppButton.Designer.cs generated Normal file
View File

@@ -0,0 +1,37 @@
namespace GFATask
{
partial class AppButton
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@@ -0,0 +1,418 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
namespace GFATask
{
[Browsable(false), ToolboxItem(false)]
public partial class AppButton : AppListButton
{
private ContextMenuStrip _contextmenustrip = new ContextMenuStrip();
public override ContextMenuStrip ContextMenuStrip
{
get
{
XObjects.ContextMenuStrip = _contextmenustrip;
return _contextmenustrip;
}
set
{
_contextmenustrip = value;
_contextmenustrip.Items.Clear();
if (AppType == AppType.Favorites || XObjects.IsAdmin.Result)
{
_contextmenustrip.Items.Add("Bearbeiten", null, (s, evt) =>
{
Forms.AppCreator.GetEditableItem(AppType, Accessor.GetAppList(AppType).Apps.Find(app => app.ID == this.ID));
Accessor.OpenForm("AppCreator", Forms.Main);
});
_contextmenustrip.Items.Add(new ToolStripSeparator());
}
_contextmenustrip.Items.Add("Zulässige Berechtigungen", null, (s, evt) =>
{
XObjects.MessageBox(!Config.Main.UseActiveDirectoryGroups ? "Die Active Directory Berechtigungsfunktion für den GFATask ist nicht aktiviert.\nIhnen werden alle Apps angezeigt." : $"Diese App benötigt mindestens eine Mitgliedschaft in eine der aufgelisteten Gruppen:\n\n{(ActiveDirectoryGroups == null || ActiveDirectoryGroups.Length == 0 ? "Keine" : string.Join("\n", ActiveDirectoryGroups))}", NotifyButtons.OK, NotifyType.Message, new Size(280, !Config.Main.UseActiveDirectoryGroups ? 140 : 240), "Zulässige App-Berechtigungen", null);
});
_contextmenustrip.Items.Add("Wie oft wurde ich geklickt?", null, (s, evt) =>
{
XObjects.MessageBox($"Diese App wurde {Prevalence.CountClicks}x von Ihnen ausgeführt.", NotifyButtons.OK, NotifyType.Message, new Size(250, 150), "Wie oft wurde ich geklickt?", null);
});
if (AppType == AppType.Favorites || XObjects.IsAdmin.Result)
{
_contextmenustrip.Items.Add(new ToolStripSeparator());
_contextmenustrip.Items.Add(new ToolStripMenuItem($"{this.Text} entfernen", null, (s, evt) =>
{
if (AppType != AppType.Favorites)
{
if (XObjects.MessageBox($"Soll {this.Text} entfernt werden", NotifyButtons.YesNo, NotifyType.Message, new Size(300, 120), $"{this.Text} entfernen").Result == DialogResult.Yes)
Creator.RemoveApp(AppType, Accessor.GetAppList(AppType).Apps.Find(app => app.ID == this.ID));
}
else
{
Creator.RemoveApp(AppType, Accessor.GetAppList(AppType).Apps.Find(app => app.ID == this.ID));
}
})
{ Name = "remove_applistbutton" });
}
else
{
_contextmenustrip.Items.Add(new ToolStripSeparator());
_contextmenustrip.Items.Add(new ToolStripMenuItem($"{this.Text} zu Favoriten hinzufügen", null, (s, evt) =>
{
Models.App appnew = new Models.App()
{
ActiveDirectoryGroups = this.ActiveDirectoryGroups,
Group = this.GroupName,
ID = AppLists.Favorites.Apps == null || AppLists.Favorites.Apps.Count == 0 ? 1 : AppLists.Favorites.Apps.Max(app => app.ID) + 1,
Icon = Accessor.GetAppList(AppType).Apps.Find(app => app.ID == this.ID).Icon,
Name = this.Text,
Execute = this.Execute
};
File.Copy($@"{Paths.Icons.Directory}\{appnew.Icon}", Paths.Favorites.Icons.Directory + @"\" + appnew.Icon, true);
Creator.AddApp(AppType.Favorites, appnew);
})
{ Name = "to_favorites" });
}
}
}
private string _description = "";
public string Description
{
get => _description; set
{
_description = value;
this.GetToolTipText();
}
}
public override AppType AppType
{
get => base.AppType;
set
{
base.AppType = value;
this.ContextMenuStrip = _contextmenustrip;
}
}
private DateTime _lastmodified = default(DateTime);
public DateTime LastModified { get => _lastmodified; set => _lastmodified = value; }
private DateTime _creationtime = default(DateTime);
public DateTime CreationTime { get => _creationtime; set => _creationtime = value; }
private string _groupname = "";
/// <summary>
/// Sollte die App einer Gruppe zugeordnet sein, wird der Name hier angezeigt
/// </summary>
[
Description("Sollte die App einer Gruppe zugeordnet sein, wird der Name hier angezeigt"),
DefaultValue(0)
]
public string GroupName
{
get => _groupname;
set => _groupname = value;
}
private Models.Execute[] _execute = new Models.Execute[0];
/// <summary>
/// Beinhaltet die ausführbaren Befehle für diese App
/// </summary>
public Models.Execute[] Execute
{
get => _execute;
set
{
_execute = value;
if (_execute.Any(exec =>
(exec.Command != null && (exec.Command.StartsWith("http") || exec.Command.StartsWith("www.") || exec.Command.StartsWith("intranet."))) ||
(exec.Args != null && (exec.Args.StartsWith("http") || exec.Args.StartsWith("www.") || exec.Args.StartsWith("intranet."))) ||
(XObjects.IsAppLnk(exec.Command) && Accessor.GetAppList(Cast.ToAppLink(exec.Command).AppType).Apps.Find(app => app.ID == Cast.ToAppLink(exec.Command).ID).Execute.Any(lnk => lnk.Command.StartsWith("http") || lnk.Command.StartsWith("www.") || lnk.Command.StartsWith("intranet.")))))
{
string browsername = String.Empty;
if (XObjects.IsAppLnk(_execute[0].Command))
{
var applnk = Accessor.GetAppList(Cast.ToAppLink(_execute[0].Command).AppType).Apps.Find(app => app.ID == Cast.ToAppLink(_execute[0].Command).ID);
browsername = applnk.Execute[0].Command.StartsWith("http") || applnk.Execute[0].Command.StartsWith("www.") || applnk.Execute[0].Command.StartsWith("internet.") ? "default" : AlternateWebbrowser.GetName(applnk.Execute[0].Command);
}
else
{
browsername = (_execute[0].Command.StartsWith("http") || _execute[0].Command.StartsWith("www.") || _execute[0].Command.StartsWith("intranet.")) ? "default" : AlternateWebbrowser.GetName(_execute[0].Command);
}
AlternateWebbrowser.DrawWebBrowserIcon(this.Image, browsername, this.Text);
this.Invalidate();
}
if (AppType == AppType.Favorites)
{
if (_execute.Any(exec =>
(exec.Command != null && (exec.Command.StartsWith("http") || exec.Command.StartsWith("www.") || exec.Command.StartsWith("intranet."))) ||
(exec.Args != null && (exec.Args.StartsWith("http") || exec.Args.StartsWith("www.") || exec.Args.StartsWith("intranet.")))) && XObjects.WebBrowsers.Count > 0)
{
_contextmenustrip.Items.Insert(1, new ToolStripMenuItem("Öffnen mit", XObjects.WebBrowsers.Select(browser => AlternateWebbrowser.GetImage(browser.Name)).ToArray().Merge(_contextmenustrip.ImageScalingSize, 2), XObjects.WebBrowsers.Where(browser => browser.Path != "unknown").Select(browser =>
{
var browsericon = AlternateWebbrowser.GetImage(browser.Name);
return new ToolStripMenuItem(browser.Name, browsericon, (s, evt) =>
{
var app = Accessor.GetAppList(AppType.Favorites).Apps.Find(listapp => listapp.ID == this.ID);
_execute.ToList().ForEach(exec =>
{
if (exec.Args == null || exec.Args == "")
{
string website = exec.Command;
exec.Args = website;
}
exec.Command = AlternateWebbrowser.GetExec(browser.Name);
_description = $"Öffnet die verlinkte Internetadresse {this.Text} mit dem {browser.Name} Browser";
this.Image = Image.FromFile(Cast.IconPath(AppType.Favorites, app.Icon));
AlternateWebbrowser.DrawWebBrowserIcon(this.Image, browser.Name);
this.Invalidate();
this.OnMouseClick(new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0));
});
app.Execute = _execute;
app.Description = _description;
JSON.Save(JSONApp.Favorites);
});
}).ToArray()));
//_contextmenustrip.Items.Insert(1, new ToolStripMenuItem("Öffnen mit", AlternateWebbrowser.Installed.Select(browser => AlternateWebbrowser.GetImage(browser.Key)).ToArray().Merge(_contextmenustrip.ImageScalingSize, 2), AlternateWebbrowser.Installed.Select(browser =>
// {
// var browsericon = AlternateWebbrowser.GetImage(browser.Key);
// return new ToolStripMenuItem(browser.Key, browsericon, (s, evt) =>
// {
// var app = Accessor.GetAppList(AppType.Favorites).Apps.Find(listapp => listapp.ID == this.ID);
// _execute.ToList().ForEach(exec =>
// {
// if (exec.Args == null || exec.Args == "")
// {
// string website = exec.Command;
// exec.Args = website;
// }
// exec.Command = AlternateWebbrowser.GetExec(browser.Key);
// _description = $"Öffnet die verlinkte Internetadresse {this.Text} mit dem {browser.Key} Browser";
// this.Image = Image.FromFile(Cast.IconPath(AppType.Favorites, app.Icon));
// AlternateWebbrowser.DrawWebBrowserIcon(this.Image, browser.Key);
// this.Invalidate();
// this.OnMouseClick(new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0));
// });
// app.Execute = _execute;
// app.Description = _description;
// JSON.Save(JSONApp.Favorites);
// });
// }).ToArray()));
_contextmenustrip.SetDefaultDesign();
}
}
}
}
private int _id = 0;
/// <summary>
/// Die eindeutige Identifikationsnummer des AppButtons
/// </summary>
[
Description("Die eindeutige Identifikationsnummer des AppButtons"),
DefaultValue(0)
]
public int ID
{
get => _id;
set => _id = value;
}
public AppButton()
{
InitializeComponent();
this.TextAlign = ContentAlignment.MiddleLeft;
ContextMenuStrip.SetDefaultDesign();
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
this.GetToolTipText();
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
this.Width = this.ImageOnly ? this.Height : this.ActualWidth;
}
protected override void OnMouseHover(EventArgs e)
{
base.OnMouseHover(e);
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
if (AppType == AppType.Favorites || XObjects.IsAdmin.Result)
{
if (_contextmenustrip.Items["remove_applistbutton"] != null)
{
_contextmenustrip.Items["remove_applistbutton"].Text = $"{this.Text} entfernen";
_contextmenustrip.Items["remove_applistbutton"].Click += (sender, evt) =>
{
if(AppType != AppType.Favorites)
{
if (XObjects.MessageBox($"Soll {this.Text} entfernt werden", NotifyButtons.YesNo, NotifyType.Message, new Size(300, 120), $"{this.Text} entfernen").Result == DialogResult.Yes)
Creator.RemoveApp(AppType, Accessor.GetAppList(AppType).Apps.Find(app => app.ID == this.ID));
}
else
{
Creator.RemoveApp(AppType, Accessor.GetAppList(AppType).Apps.Find(app => app.ID == this.ID));
}
};
}
}
}
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
if (e.Button == MouseButtons.Left)
{
if (this.ClientRectangle.Contains(e.Location))
{
if(AppType == AppType.Admin || AppType == AppType.User || AppType == AppType.Menu)
{
Accessor.SetAppCounter(AppType, _id);
}
else if(AppType == AppType.Favorites)
{
if (XObjects.IsAppLnk(this.Execute[0].Command))
{
AppLnk lnk = Cast.ToAppLink(this.Execute[0].Command);
Models.App applnk = lnk.ToApp();
Accessor.SetAppCounter(lnk.AppType, lnk.ID);
if (applnk.LastModified > this.LastModified)
{
var applist = Accessor.GetAppList(this.AppType);
var app = applist.Apps[applist.Apps.FindIndex(appitem => appitem.ID == this.ID)];
if (!System.Drawing.Comparer.Image(Accessor.GetAppListPanel(lnk.AppType).SortedList.Find(button => button.Name == Cast.AppButtonName(lnk.AppType, applnk)).Image, this.Image))
{
File.Copy(Cast.IconPath(lnk.AppType, applnk.Icon), Cast.IconPath(AppType.Favorites, app.Icon), true);
using (FileStream fs = new FileStream(Cast.IconPath(AppType.Favorites, app.Icon), FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
{
this.Image = Image.FromStream(fs);
}
}
app.LastModified = DateTime.Now;
this.LastModified = DateTime.Now;
}
}
}
Prevalence.CountUp();
this.GetToolTipText();
if (Config.User.Prevalence)
{
this.StepUpPrevalence(this.Parent.Controls.IndexOf(this) == 0 ? null : this.Parent.Controls[this.Parent.Controls.IndexOf(this) - 1]);
}
if (_execute != null && _execute.Length > 0)
{
new Thread(new ThreadStart(delegate
{
foreach (var exec in _execute)
{
if (AppExecution.FromApp(this.Text, exec.Command, exec.Args == null ? "" : string.Join(" ", exec.Args)))
{
break;
}
}
}))
{ IsBackground = true, Priority = ThreadPriority.BelowNormal }.Start();
}
if (Forms.AppButtonGroup.Visible)
{
Forms.AppButtonGroup.Close();
}
}
}
}
private void GetToolTipText()
{
this.ToolTipText = $"{this.Text}\n\n{(_description != "" ? _description : "")}";
//this.ToolTipText = $"App: {this.Text}\n" +
// $"{(this.GroupName != null && this.GroupName != string.Empty ? $"Gruppe: {this.GroupName}\n" : "")}" +
// $"Geklickt: {this.Prevalence.CountClicks}x";
}
/// <summary>
/// Setzt den Index des AppButtons solange herunter, bis dieser richtig eingegliedert wurde
/// </summary>
/// <param name="next">Der nächste AppButton, links von diesem</param>
private void StepUpPrevalence(Control next)
{
if(this.Parent.Parent != null && this.Parent.Parent.GetType() == typeof(FormAppButtonGroup))
{
var virtual_form = ((FormAppButtonGroup)this.Parent.Parent);
var virtual_applist = ((FlowLayoutPanel)this.Parent);
virtual_form.MyGroupButton.Prevalence = virtual_applist.Controls.OfType<AppButton>().ToList().Find(
appbutton => appbutton.Prevalence.CountClicks == virtual_applist.Controls.OfType<AppButton>().ToList().Max(appbtn => appbtn.Prevalence.CountClicks)).Prevalence;
var applistpanel = ((FlowContent)virtual_form.MyGroupButton.Parent);
var groupbutton = virtual_form.MyGroupButton;
var nextbutton = applistpanel.GetNextControl(virtual_form.MyGroupButton, false);
if (nextbutton != null && groupbutton.Prevalence.CountClicks >= ((AppListButton)nextbutton).Prevalence.CountClicks)
{
applistpanel.Controls.SetChildIndex(virtual_form.MyGroupButton, applistpanel.Controls.GetChildIndex(nextbutton));
this.StepUpPrevalence(next);
}
}
if (next != null)
{
if ((next.GetType() == typeof(AppButton) && this.Prevalence.CountClicks >= ((AppButton)next).Prevalence.CountClicks) ||
(next.GetType() == typeof(GroupButton) && this.Prevalence.CountClicks >= ((GroupButton)next).Prevalence.CountClicks))
{
if(this.Parent.GetType() == typeof(FormAppButtonGroup))
{
// Neue Anordnung in der Gruppenliste
((FlowLayoutPanel)this.Parent).Controls.SetChildIndex(this, ((FlowLayoutPanel)this.Parent).Controls.GetChildIndex(next));
((FlowContent)this.Parent.Parent).Controls.SetChildIndex(((FormAppButtonGroup)this.Parent).MyGroupButton, ((FlowContent)this.Parent.Parent).Controls.GetChildIndex(next));
}
else
{
// Neue Anordnung in der gesamten App-Liste
this.Parent.Controls.SetChildIndex(this, this.Parent.Controls.GetChildIndex(next));
this.StepUpPrevalence(this.Parent.Controls.IndexOf(this) == 0 ? null : this.Parent.Controls[this.Parent.Controls.IndexOf(this) - 1]);
}
}
}
}
}
}

View File

@@ -0,0 +1,37 @@
namespace GFATask
{
partial class AppListButton
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@@ -0,0 +1,167 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
[
Browsable(false),
ToolboxItem(false)
]
public partial class AppListButton : AnimationButton
{
internal string[] _activedirectorygroups = new string[] { };
/// <summary>
/// Sollte die App einer Gruppe zugeordnet sein, wird der Name hier angezeigt
/// </summary>
[
Description("Sollte die App einer Gruppe zugeordnet sein, wird der Name hier angezeigt"),
DefaultValue(typeof(string[]), "")
]
public string[] ActiveDirectoryGroups
{
get => _activedirectorygroups;
set => _activedirectorygroups = value;
}
private AppType _apptype = AppType.None;
/// <summary>
/// Definiert den Apptypen des AppButtons
/// </summary>
[Description("Definiert den Apptypen des AppButtons")]
virtual public AppType AppType
{
get => _apptype;
set
{
_apptype = value;
//this.AllowDrop = _apptype == AppType.Favorites;
}
}
private Prevalencia _prevelance = new Prevalencia();
/// <summary>
/// Erfasst die Häufigkeit der Klicks um die App nach Beliebtheit anzuordnen
/// </summary>
[
Description("Erfasst die Häufigkeit der Klicks um die App nach Beliebtheit anzuordnen"),
DefaultValue(true)
]
virtual public Prevalencia Prevalence
{
get => _prevelance;
set => _prevelance = value;
}
private bool _imageonly = false;
virtual public bool ImageOnly {
get => _imageonly;
set
{
_imageonly = value;
OnImageOnlyChanged(new EventArgs());
this.Invalidate();
}
}
public virtual void OnImageOnlyChanged(EventArgs e)
{
if (this.ImageOnly)
{
this.Width = this.Height;
}
else
{
this.Width = _actualwidth;
}
}
private int _actualwidth = 0;
public int ActualWidth
{
get => _actualwidth;
set
{
_actualwidth = value;
OnImageOnlyChanged(new EventArgs());
}
}
public AppListButton()
{
InitializeComponent();
}
protected override void OnMouseHover(EventArgs e)
{
if (this.ContextMenuStrip != null && this.ContextMenuStrip.Items.Count > 0)
{
int menusize = (int)(this.BorderBounds.Height * 72 / this.CreateGraphics().DpiX / 2);
}
base.OnMouseHover(e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if(e.Button == MouseButtons.Right)
{
if (this.ContextMenuStrip != null && this.ContextMenuStrip.Items.Count > 0)
this.ContextMenuStrip.Show(this, new Point(this.Padding.Left, this.ClientRectangle.Bottom));
}
}
protected override void OnMouseEnter(EventArgs e)
{
ToolTip.ShowAlways = true;
if(Config.User.NecessaryClick)
ToolTip.SetToolTip(this, this.ToolTipText);
else
ToolTip.SetToolTip(this, this.ToolTipText);
//ToolTip.Show(this.ToolTipText, this, new Point(0, this.Height));
base.OnMouseEnter(e);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
this.ImageSize = new Size(this.BorderBounds.Height - this.Padding.Vertical - this.Margin.Vertical, this.BorderBounds.Height - this.Padding.Vertical - this.Margin.Vertical);
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (e.Button == MouseButtons.Left && !this.ClientRectangle.Contains(e.Location))
{
this.DoDragDrop(this, DragDropEffects.Copy);
}
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
if (_imageonly)
{
//pe.Graphics.SetClip(new Rectangle(TextBounds.X + 3, TextBounds.Y, TextBounds.Width - 3, TextBounds.Height));
//pe.Graphics.Clear(this.BackColor);
}
}
}
}

View File

@@ -0,0 +1,45 @@
namespace GFATask
{
partial class AppListPanel
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.SuspendLayout();
flowcontent = new FlowContent();
flowcontent.WrapContents = true;
flowcontent.AutoScroll = true;
flowcontent.Dock = System.Windows.Forms.DockStyle.Fill;
this.Controls.Add(flowcontent);
this.ResumeLayout(false);
}
FlowContent flowcontent;
#endregion
}
}

File diff suppressed because it is too large Load Diff

37
GFATask/Controls/GroupButton.Designer.cs generated Normal file
View File

@@ -0,0 +1,37 @@
namespace GFATask
{
partial class GroupButton
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@@ -0,0 +1,309 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace GFATask
{
[Browsable(false), ToolboxItem(false)]
public partial class GroupButton : AppListButton
{
private Collection<AppButton> _containedappbuttons = new Collection<AppButton>();
public Collection<AppButton> ContainedAppButtons
{
get => _containedappbuttons;
set
{
_containedappbuttons = value;
}
}
private List<Models.App> _containedapps = new List<Models.App>();
public List<Models.App> ContainedApps
{
get => _containedapps;
set
{
_containedapps = value;
}
}
private FormAppButtonGroup _appbuttongroup;
public FormAppButtonGroup AppButtonGroup { get => _appbuttongroup; }
private ContextMenuStrip _contextmenustrip = new ContextMenuStrip();
new public ContextMenuStrip ContextMenuStrip
{
get
{
XObjects.ContextMenuStrip = _contextmenustrip;
return _contextmenustrip;
}
set
{
_contextmenustrip = value;
_contextmenustrip.Items.Clear();
if (AppType == AppType.Favorites)
{
_contextmenustrip.Items.Add(new ToolStripMenuItem("Umbennen", null, (sender, e) =>
{
var msgbox = XObjects.MessageBox($"{this.Text}", NotifyButtons.YesNo, NotifyType.TextBox, new Size(250, 150), $"{this.Text} umbenennen", this.Text);
if(msgbox.Result == DialogResult.Yes)
{
_containedapps.ForEach(app =>
{
app.Group = msgbox.Value.ToString();
Creator.ReplaceApp(AppType, app);
});
this.Text = msgbox.Value.ToString();
_contextmenustrip.Items["remove_applistbutton"].Text = $"{this.Text} entfernen";
this.Name = Cast.GroupButtonName(AppType, this.Text);
}
}, "rename_applistbutton"));
_contextmenustrip.Items.Add(new ToolStripMenuItem($"{this.Text} entfernen", null, (s, evt) =>
{
for (int i = _containedapps.Count - 1; i >= 0; i--)
{
Creator.RemoveApp(AppType, _containedapps[i]);
}
Accessor.GetAppListPanel(AppType).RemoveGroupButton(this.Name, true);
}, "remove_applistbutton"));
}
else
{
_contextmenustrip.Items.Add(new ToolStripMenuItem($"{this.Text} zu Favoriten hinzufügen", null, (s, evt) =>
{
List<Models.App> clones = new List<Models.App>();
string[] usedicons = new string[0];
_containedapps.ForEach(app =>
{
app.ID = AppLists.Favorites.Apps.Max(listapp => listapp.ID) + 1;
try
{
if (!usedicons.ToList().Exists(icon => icon == app.Icon) && app.Icon != "" && app.Icon != null)
{
File.Copy($@"{Paths.Icons.Directory}\{app.Icon}", Paths.Favorites.Icons.Directory + @"\" + app.Icon, true);
Array.Resize(ref usedicons, usedicons.Length + 1);
usedicons[usedicons.Length - 1] = app.Icon;
}
}
catch (Exception ex)
{
Log.EventLog.Write("Bild nicht gespeichert", LogClassification.LowError, ex);
}
clones.Add(app);
Creator.AddApp(AppType.Favorites, app);
});
usedicons = null;
Accessor.GetAppListPanel(AppType.Favorites).AddGroupButton(clones.ToArray());
}, "to_favorites"));
}
}
}
public override AppType AppType
{
get => base.AppType; set
{
base.AppType = value;
this.ContextMenuStrip = _contextmenustrip;
}
}
public GroupButton()
{
InitializeComponent();
_containedappbuttons.CollectionChanged += _containedappbuttons_CollectionChanged;
ContextMenuStrip.SetDefaultDesign();
this.ToolTipText = "Apps: ";
}
public void RemoveApp(Models.App app)
{
if(_containedappbuttons.ToList().Exists(appbutton => appbutton.Name == Cast.AppButtonName(AppType, app)))
_containedappbuttons.Remove(_containedappbuttons.First(appbutton => appbutton.Name == Cast.AppButtonName(AppType, app)));
_containedapps.Remove(app);
if(_appbuttongroup != null)
{
if(_appbuttongroup.MyGroupButton == this)
{
_appbuttongroup.RemoveButton(app);
}
}
}
private void _containedappbuttons_CollectionChanged(object sender, System.Collections.Events.CollectionChangedEventArgs<AppButton> e)
{
if (e.ChangeType == CollectionChangeType.Add)
{
foreach (var adgroup in e.Element.ActiveDirectoryGroups != null ? e.Element.ActiveDirectoryGroups : new string[] { "" })
{
if (!_activedirectorygroups.Contains(adgroup))
{
Array.Resize(ref _activedirectorygroups, _activedirectorygroups.Length + 1);
_activedirectorygroups[_activedirectorygroups.Length - 1] = adgroup;
}
}
e.Element.MouseDown += Element_MouseDown;
}
else if (e.ChangeType == CollectionChangeType.Remove)
{
e.Element.MouseDown -= Element_MouseDown;
if (_containedappbuttons.Count == 1)
{
Accessor.GetAppListPanel(AppType).RemoveGroupButtonIfNeeded(this.Name);
if (_appbuttongroup != null && _appbuttongroup.Visible)
{
_appbuttongroup.Close();
}
}
}
if (Config.User.Prevalence)
this.Image = _containedappbuttons
.Where(button => button.Visible)
.OrderBy(button => button.Prevalence.CountClicks)
.Take(4)
.Select(button => new Bitmap(button.Image)).ToArray()
.Merge(new Size(this.ImageSize.Width + 2, this.ImageSize.Height + 2), 2);
else
this.Image = _containedappbuttons
.Where(button => button.Visible)
.OrderBy(button => button.Text)
.Take(4)
.Select(button => new Bitmap(button.Image)).ToArray()
.Merge(new Size(this.ImageSize.Width + 2, this.ImageSize.Height + 2), 2);
this.Invalidate();
}
private void Element_MouseDown(object sender, MouseEventArgs e)
{
Prevalence = Accessor.GetPrevalencia(AppType, _containedappbuttons.ToList().Find(app => app.Prevalence.CountClicks == _containedappbuttons.Max(appbutton => appbutton.Prevalence.CountClicks)).ID );
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
string appcountstring = _containedapps.Count(app => Cast.AppVisibility(app)).ToString();
GraphicsPath appCountRect;
appCountRect = Visualization.RoundedRectangle.Create(new Rectangle(
new Point(ImageBounds.Right - (int)(e.Graphics.MeasureString(appcountstring, this.Font).Width / 4) - 3, this.BorderBounds.Y + this.BorderSize),
new Size((int)e.Graphics.MeasureString(appcountstring, this.Font).Height - 1, (int)e.Graphics.MeasureString(appcountstring, this.Font).Height - 1)), 5);
e.Graphics.SetClip(new Rectangle(this.TextBounds.Location, new Size(this.TextBounds.Width , this.TextBounds.Height)));
e.Graphics.Clear(this.BackColor);
e.Graphics.SetClip(this.ClientRectangle);
e.Graphics.FillPath(Brushes.Red, appCountRect);
e.Graphics.DrawString(appcountstring, this.Font, Brushes.White, appCountRect.GetBounds(), new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center, FormatFlags = StringFormatFlags.NoClip | StringFormatFlags.NoWrap, Trimming = StringTrimming.None });
if (!this.ImageOnly)
{
e.Graphics.DrawString(Text, this.Font, new SolidBrush(this.ForeColor), new Rectangle((int)appCountRect.GetBounds().Right, this.TextBounds.Y + this.BorderSize + this.Radius, this.BorderBounds.Right - (int)appCountRect.GetBounds().Right - this.BorderSize - this.Radius, this.TextBounds.Height - (this.Radius * 2) - (this.BorderSize * 2)), new StringFormat() { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center, FormatFlags = StringFormatFlags.NoClip | StringFormatFlags.NoWrap, Trimming = StringTrimming.EllipsisCharacter });
//e.Graphics.DrawString(Text, this.Font, new SolidBrush(this.ForeColor), new Rectangle((int)appCountRect.GetBounds().Right, this.TextBounds.Y + this.BorderSize + this.Radius, this.BorderBounds.Right - (int)appCountRect.GetBounds().Right - this.BorderSize - this.Radius, this.TextBounds.Height - (this.Radius * 2) - (this.BorderSize * 2)), new StringFormat() { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center, FormatFlags = StringFormatFlags.NoClip | StringFormatFlags.NoWrap, Trimming = StringTrimming.None });
}
else
{
this.Width = (int)appCountRect.GetBounds().Right;
}
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
this.ImageSize = new Size(this.BorderBounds.Height - this.Padding.Vertical - this.Margin.Vertical, this.BorderBounds.Height - this.Padding.Vertical - this.Margin.Vertical);
}
protected override void OnLocationChanged(EventArgs e)
{
base.OnLocationChanged(e);
if (_appbuttongroup != null && _appbuttongroup.MyGroupButton == this)
{
// Wenn der obere Bereich des GroupButtons, oben aus dem AppListPanel austritt
if (this.Top < 0)
{
// Wenn der untere Bereich des GroupButtons, oben aus dem AppListPanel austritt
if (this.Bottom < 0)
{
_appbuttongroup.DesktopLocation = new Point(_appbuttongroup.Left, this.Parent.RectangleToScreen(this.Parent.Bounds).Top - this.Parent.Margin.Top - this.Parent.Parent.Padding.Top - _appbuttongroup.GripSize + 1);
}
// Oder, wenn der untere Bereich des GroupButtons noch sichtbar ist
else
{
_appbuttongroup.DesktopLocation = new Point(_appbuttongroup.Left, this.Parent.RectangleToScreen(this.Bounds).Bottom - _appbuttongroup.GripSize + 1);
}
}
// Wenn der obere Bereich des GroupButtons, im AppListPanel sichtbar ist
else if (this.Top > 0)
{
// Aber der untere Bereich des GroupButtons, unten aus dem AppListPanel austritt
if (this.Bottom > this.Parent.Bottom)
_appbuttongroup.DesktopLocation = new Point(_appbuttongroup.Left, this.Parent.RectangleToScreen(this.Parent.Bounds).Bottom - this.Parent.Padding.Vertical);
// Oder, wenn der untere Bereich des GroupButtons, unten aus dem GFATask austritt
else if (RectangleToScreen(this.DisplayRectangle).Bottom > Forms.Main.DesktopBounds.Bottom - Forms.Main.GripSize)
_appbuttongroup.DesktopLocation = new Point(_appbuttongroup.Left, Forms.Main.DesktopBounds.Bottom - Forms.Main.GripSize - _appbuttongroup.GripSize + 1 + Forms.Main.BorderWidth);
// Alle anderen Möglichkeiten korrigieren die Position des ButtonGroup-Fensters unterhalb des GroupButtons
else
_appbuttongroup.DesktopLocation = new Point(_appbuttongroup.Left, this.Parent.RectangleToScreen(this.Bounds).Bottom - _appbuttongroup.GripSize + 1);
}
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
if (e.Button == MouseButtons.Left && !Forms.AppButtonGroup.Visible)
{
_appbuttongroup = Forms.AppButtonGroup;
_appbuttongroup.MyGroupButton = this;
_appbuttongroup.Text = this.Text;
_appbuttongroup.Icon = Icon.FromHandle(new Bitmap(this.Image).GetHicon());
_appbuttongroup.DesktopLocation = this.PointToScreen(new Point(0 - _appbuttongroup.GripSize + 1, this.Height - _appbuttongroup.GripSize + 1));
_appbuttongroup.TopMost = true;
Accessor.OpenForm("AppButtonGroup", owner: Forms.Main, closeifopen: true);
}
}
protected override void OnMouseEnter(EventArgs e)
{
this.ToolTipText = $"Apps:\n{string.Join("\n", _containedapps.OrderBy(app => app.Name).Select(app => app.Name))}";
base.OnMouseEnter(e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (this.ClientRectangle.Contains(e.Location) && e.Button == MouseButtons.Right )
{
try
{
this.ContextMenuStrip.Show(this, new Point(this.Padding.Left, this.ClientRectangle.Bottom));
}
catch (Exception ex)
{
Log.EventLog.Write($"Kontextmenü des GroupButtons {this.Text} fehlerhaft", LogClassification.LowError, ex);
}
}
}
}
}

216
GFATask/Forms/FormAdmin.Designer.cs generated Normal file
View File

@@ -0,0 +1,216 @@
namespace GFATask
{
partial class FormAdmin
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.panelUC = new System.Windows.Forms.Panel();
this.flpAdminMenu = new System.Windows.Forms.FlowLayoutPanel();
this.abtnApps = new System.Windows.Forms.AnimationButton();
this.abtnGeneral = new System.Windows.Forms.AnimationButton();
this.abtnSettings = new System.Windows.Forms.AnimationButton();
this.abtnFeatures = new System.Windows.Forms.AnimationButton();
this.abtnAppClickCounter = new System.Windows.Forms.AnimationButton();
this.animationButton1 = new System.Windows.Forms.AnimationButton();
this.tableLayoutPanel1.SuspendLayout();
this.flpAdminMenu.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.panelUC, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.flpAdminMenu, 0, 0);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 39);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(980, 401);
this.tableLayoutPanel1.TabIndex = 1;
//
// panelUC
//
this.panelUC.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelUC.Location = new System.Drawing.Point(3, 48);
this.panelUC.Name = "panelUC";
this.panelUC.Size = new System.Drawing.Size(974, 350);
this.panelUC.TabIndex = 3;
//
// flpAdminMenu
//
this.flpAdminMenu.Controls.Add(this.abtnApps);
this.flpAdminMenu.Controls.Add(this.abtnGeneral);
this.flpAdminMenu.Controls.Add(this.abtnSettings);
this.flpAdminMenu.Controls.Add(this.abtnFeatures);
this.flpAdminMenu.Controls.Add(this.abtnAppClickCounter);
this.flpAdminMenu.Controls.Add(this.animationButton1);
this.flpAdminMenu.Dock = System.Windows.Forms.DockStyle.Fill;
this.flpAdminMenu.Location = new System.Drawing.Point(3, 3);
this.flpAdminMenu.Name = "flpAdminMenu";
this.flpAdminMenu.Size = new System.Drawing.Size(974, 39);
this.flpAdminMenu.TabIndex = 4;
//
// abtnApps
//
this.abtnApps.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.abtnApps.AutoSizeWidth = false;
this.abtnApps.Image = null;
this.abtnApps.ImageBackColor = System.Drawing.Color.Empty;
this.abtnApps.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnApps.Location = new System.Drawing.Point(3, 0);
this.abtnApps.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
this.abtnApps.Name = "abtnApps";
this.abtnApps.Size = new System.Drawing.Size(140, 35);
this.abtnApps.TabIndex = 3;
this.abtnApps.Tag = "ucAdminApps";
this.abtnApps.Text = "Apps";
this.abtnApps.TextBounds = new System.Drawing.Rectangle(1, 1, 138, 33);
this.abtnApps.ToolTipText = "";
//
// abtnGeneral
//
this.abtnGeneral.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.abtnGeneral.AutoSizeWidth = false;
this.abtnGeneral.Image = null;
this.abtnGeneral.ImageBackColor = System.Drawing.Color.Empty;
this.abtnGeneral.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnGeneral.Location = new System.Drawing.Point(149, 0);
this.abtnGeneral.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
this.abtnGeneral.Name = "abtnGeneral";
this.abtnGeneral.Size = new System.Drawing.Size(140, 35);
this.abtnGeneral.TabIndex = 4;
this.abtnGeneral.Tag = "ucAdminGeneral";
this.abtnGeneral.Text = "Allgemein";
this.abtnGeneral.TextBounds = new System.Drawing.Rectangle(1, 1, 138, 33);
this.abtnGeneral.ToolTipText = "";
//
// abtnSettings
//
this.abtnSettings.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.abtnSettings.AutoSizeWidth = false;
this.abtnSettings.Image = null;
this.abtnSettings.ImageBackColor = System.Drawing.Color.Empty;
this.abtnSettings.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnSettings.Location = new System.Drawing.Point(295, 0);
this.abtnSettings.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
this.abtnSettings.Name = "abtnSettings";
this.abtnSettings.Size = new System.Drawing.Size(140, 35);
this.abtnSettings.TabIndex = 6;
this.abtnSettings.Tag = "ucAdminDesigns";
this.abtnSettings.Text = "Designs";
this.abtnSettings.TextBounds = new System.Drawing.Rectangle(1, 1, 138, 33);
this.abtnSettings.ToolTipText = "";
this.abtnSettings.WordWrap = true;
//
// abtnFeatures
//
this.abtnFeatures.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.abtnFeatures.AutoSizeWidth = false;
this.abtnFeatures.Image = null;
this.abtnFeatures.ImageBackColor = System.Drawing.Color.Empty;
this.abtnFeatures.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnFeatures.Location = new System.Drawing.Point(441, 0);
this.abtnFeatures.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
this.abtnFeatures.Name = "abtnFeatures";
this.abtnFeatures.Size = new System.Drawing.Size(140, 35);
this.abtnFeatures.TabIndex = 5;
this.abtnFeatures.Tag = "ucAdminNewsFeeds";
this.abtnFeatures.Text = "News Feeds";
this.abtnFeatures.TextBounds = new System.Drawing.Rectangle(1, 1, 138, 33);
this.abtnFeatures.ToolTipText = "";
this.abtnFeatures.WordWrap = true;
//
// abtnAppClickCounter
//
this.abtnAppClickCounter.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.abtnAppClickCounter.AutoSizeWidth = false;
this.abtnAppClickCounter.Image = null;
this.abtnAppClickCounter.ImageBackColor = System.Drawing.Color.Empty;
this.abtnAppClickCounter.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnAppClickCounter.Location = new System.Drawing.Point(587, 0);
this.abtnAppClickCounter.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
this.abtnAppClickCounter.Name = "abtnAppClickCounter";
this.abtnAppClickCounter.Size = new System.Drawing.Size(140, 35);
this.abtnAppClickCounter.TabIndex = 8;
this.abtnAppClickCounter.Tag = "ucAdminAppClickCounter";
this.abtnAppClickCounter.Text = "App Click Counter";
this.abtnAppClickCounter.TextBounds = new System.Drawing.Rectangle(1, 1, 138, 33);
this.abtnAppClickCounter.ToolTipText = "";
//
// animationButton1
//
this.animationButton1.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.animationButton1.AutoSizeWidth = false;
this.animationButton1.Image = null;
this.animationButton1.ImageBackColor = System.Drawing.Color.Empty;
this.animationButton1.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.animationButton1.Location = new System.Drawing.Point(733, 0);
this.animationButton1.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
this.animationButton1.Name = "animationButton1";
this.animationButton1.Size = new System.Drawing.Size(140, 35);
this.animationButton1.TabIndex = 7;
this.animationButton1.Tag = "ucAdminHelp";
this.animationButton1.Text = "Hilfethemen";
this.animationButton1.TextBounds = new System.Drawing.Rectangle(1, 1, 138, 33);
this.animationButton1.ToolTipText = "";
//
// FormAdmin
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.ClientSize = new System.Drawing.Size(1000, 450);
this.Controls.Add(this.tableLayoutPanel1);
this.DesktopAnchor = System.Windows.Forms.DesktopAnchor.Center;
this.Name = "FormAdmin";
this.Padding = new System.Windows.Forms.Padding(10, 39, 10, 10);
this.RegionBounds = new System.Drawing.Rectangle(19, 19, 1000, 450);
this.Text = "Administration";
this.tableLayoutPanel1.ResumeLayout(false);
this.flpAdminMenu.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Panel panelUC;
private System.Windows.Forms.FlowLayoutPanel flpAdminMenu;
private System.Windows.Forms.AnimationButton abtnApps;
private System.Windows.Forms.AnimationButton abtnGeneral;
private System.Windows.Forms.AnimationButton abtnFeatures;
private System.Windows.Forms.AnimationButton abtnSettings;
private System.Windows.Forms.AnimationButton animationButton1;
private System.Windows.Forms.AnimationButton abtnAppClickCounter;
}
}

142
GFATask/Forms/FormAdmin.cs Normal file
View File

@@ -0,0 +1,142 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public partial class FormAdmin : FormEx
{
public ucAdminApps UcAdminApps { get; } = new ucAdminApps() { Dock = DockStyle.Fill };
public ucAdminGeneral UcAdminGeneral { get; } = new ucAdminGeneral() { Dock = DockStyle.Fill };
public ucAdminNewsFeeds UcAdminNewsFeeds { get; } = new ucAdminNewsFeeds() { Dock = DockStyle.Fill };
public ucAdminDesigns UcAdminDesigns { get; } = new ucAdminDesigns() { Dock = DockStyle.Fill };
public ucAdminHelp UcAdminHelp { get; } = new ucAdminHelp() { Dock = DockStyle.Fill };
public ucAdminAppClickCounter UcAdminAppClickCounter { get; } = new ucAdminAppClickCounter() { Dock = DockStyle.Fill };
private AnimationButton clickedbutton = null;
int loginfails = 0;
public FormAdmin()
{
InitializeComponent();
this.SetDefaultDesign();
panelUC.Controls.AddRange(new Control[] { UcAdminApps, UcAdminGeneral, UcAdminNewsFeeds, UcAdminDesigns, UcAdminHelp, UcAdminAppClickCounter });
this.Icon = Icon.FromHandle(new Bitmap(File.OpenRead(Paths.Icons.Directory + @"System\administration.png")).GetHicon());
Accumulations.Controls(flpAdminMenu).OfType<AnimationButton>().ToList().ForEach(button =>
{
button.MouseClick += OpenUserControl;
button.Paint += Button_Paint;
});
OpenUserControl(abtnApps, new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0));
}
private void Button_Paint(object sender, PaintEventArgs e)
{
if((clickedbutton != null && (sender as AnimationButton).Equals(clickedbutton) && (sender as AnimationButton).BorderSize == 0))
{
e.Graphics.DrawLine(new Pen(Config.Main.Colors.Apps.Hover.Border, 3), new Point(0, e.ClipRectangle.Bottom - 3 ), new Point(e.ClipRectangle.Right, e.ClipRectangle.Bottom - 3));
}
}
private void OpenUserControl(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
var button = sender as AnimationButton;
clickedbutton = button;
Accumulations.Controls(this).OfType<AnimationButton>().ToList().ForEach(btn => btn.Invalidate());
if (button.BorderSize > 0 || button.BorderColor == button.BackColor)
{
button.BorderColor = Color.Green;
Accumulations.Controls(this).OfType<AnimationButton>().Where(btn => btn != button).ToList().ForEach(btn => btn.BorderColor = Config.Main.Colors.Apps.Default.Border);
}
panelUC.Controls[button.Tag.ToString()].Dock = DockStyle.Fill;
panelUC.Controls[button.Tag.ToString()].BringToFront();
panelUC.Controls[button.Tag.ToString()].Invalidate();
}
}
public void Login()
{
Task.Run(delegate
{
Forms.Main.Invoke(new MethodInvoker(async delegate
{
if (Forms.AppButtonGroup != null && Forms.AppButtonGroup.Visible)
Forms.AppButtonGroup.Close();
if (await XObjects.IsAdmin)
{
this.Visible = true;
return;
}
var msgbox = XObjects.MessageBox(
loginfails == 0 ? "Administratorkennwort" :
$"Das Kennwort war falsch. Nochmal!", NotifyButtons.OkCancel, NotifyType.Login, new Size(250, 200), "Administrationsbereich", null);
if (msgbox.Result == DialogResult.OK)
{
if (msgbox.Value.ToString() == new string(Config.Main.Administration.Accounts.Login.SecurePassword.Select(chr => (char)chr).ToArray()))
{
this.Visible = true;
}
else
{
loginfails++;
this.Login();
}
}
else if (msgbox.Result == DialogResult.Cancel)
{
return;
}
}));
});
}
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (this.Visible)
{
XObjects.Delay.Increase();
this.TopMost = true;
}
}
protected override void OnBackColorChanged(EventArgs e)
{
base.OnBackColorChanged(e);
flpAdminMenu.SetDefaultDesign();
flpAdminMenu.Controls.OfType<AnimationButton>().ToList().ForEach(abtn => abtn.SetDefaultDesign());
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
if(e.CloseReason == CloseReason.UserClosing)
this.Visible = false;
e.Cancel = e.CloseReason == CloseReason.UserClosing;
base.OnFormClosing(e);
}
}
}

View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,71 @@
namespace GFATask
{
partial class FormAppButtonGroup
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.flpAppbuttons = new System.Windows.Forms.FlowLayoutPanel();
this.SuspendLayout();
//
// flpAppbuttons
//
this.flpAppbuttons.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.flpAppbuttons.Dock = System.Windows.Forms.DockStyle.Fill;
this.flpAppbuttons.Location = new System.Drawing.Point(10, 39);
this.flpAppbuttons.Margin = new System.Windows.Forms.Padding(0);
this.flpAppbuttons.Name = "flpAppbuttons";
this.flpAppbuttons.Size = new System.Drawing.Size(288, 178);
this.flpAppbuttons.TabIndex = 1;
//
// FormAppButtonGroup
//
this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.ClientSize = new System.Drawing.Size(308, 227);
this.Controls.Add(this.flpAppbuttons);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Moveable = false;
this.Name = "FormAppButtonGroup";
this.Padding = new System.Windows.Forms.Padding(10, 39, 10, 10);
this.RegionBounds = new System.Drawing.Rectangle(15, 15, 308, 227);
this.Resizable = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.SystemMenu = false;
this.Text = "FormAppButtonGroup";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.FlowLayoutPanel flpAppbuttons;
}
}

View File

@@ -0,0 +1,152 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public partial class FormAppButtonGroup : FormEx
{
private GroupButton _mygroupbutton = null;
public GroupButton MyGroupButton
{
get => _mygroupbutton;
set
{
_mygroupbutton = value;
_apptype = _mygroupbutton.AppType;
}
}
private AppType _apptype;
public AppType AppType { get => _apptype; set => _apptype = value; }
public FormAppButtonGroup()
{
InitializeComponent();
}
protected override void OnVisibleChanged(EventArgs e)
{
if (this.Visible)
{
flpAppbuttons.Controls.AddRange(_mygroupbutton.ContainedAppButtons.ToArray<Control>());
Comparer.SortAllButtons(flpAppbuttons.Controls, Config.User.Prevalence);
this.Sizing();
this.SetDefaultDesign();
}
else
{
flpAppbuttons.Controls.Clear();
}
base.OnVisibleChanged(e);
}
public void Sizing()
{
if (_mygroupbutton != null)
{
int appcounts = _mygroupbutton.ContainedAppButtons.Where(appbutton => appbutton.Visible).ToList().Count;
int columns = Config.User.GroupListColumnCount;
int border = this.Padding.Horizontal;
int vborder = this.Padding.Vertical;
Size appsize = new Size((Config.User.Apps.ImageOnly ? Config.User.Apps.Size.Height : Config.User.Apps.Size.Width) + (Config.User.Apps.Margin * 2), Config.User.Apps.Size.Height + (Config.User.Apps.Margin * 2));
int width, height;
width = (appsize.Width * (appcounts < columns ? appcounts : columns)) < ((TextRenderer.MeasureText(this.Text, this.Font).Width + (this.TitlebarHeight * 4) + this.Icon.Size.Width) / appsize.Width) * appsize.Width ?
(((TextRenderer.MeasureText(this.Text, this.Font).Width + (this.TitlebarHeight * 4) + this.Icon.Size.Width) / appsize.Width) * appsize.Width) + border :
(appsize.Width * (appcounts < columns ? appcounts : columns)) + border;
height = (((int)Math.Ceiling((appsize.Width * appcounts) / (double)width)) * appsize.Height) + vborder;
this.Size = new Size(width, height);
}
}
/// <summary>
/// Löscht einen AppButton aus einem AppListPanel anhand des Apptypen und der App aus der JSON-Datei
/// </summary>
/// <param name="apptype">Findet anhand des Typen das gewünschte AppListPanel</param>
/// <param name="app">Die JSON-App mit der der AppButton gefunden und entfernt wird</param>
public void RemoveButton(Models.App app)
{
try
{
if (_mygroupbutton != null)
{
if (flpAppbuttons.Controls.ContainsKey(app.ID + "_" + _apptype.ToString() + "_" + app.Name))
{
Control appbutton = flpAppbuttons.Controls.Find(Cast.AppButtonName(_apptype, app), false)[0];
flpAppbuttons.Controls.Remove(appbutton);
_mygroupbutton.ContainedApps.Remove(app);
_mygroupbutton.ContainedAppButtons.Remove(appbutton as AppButton);
//if(_mygroupbutton.ContainedApps.Exists(_app => _app.ID == app.ID))
// _mygroupbutton.ContainedAppButtons.Remove((AppButton)appbutton);
}
if (_mygroupbutton.ContainedAppButtons.Count <= 1 && flpAppbuttons.Controls.Count > 0)
{
AppListPanel panel = Accessor.GetAppListPanel(_apptype);
panel.RemoveGroupButton(_mygroupbutton.Name);
this.Close();
}
else
{
this.Sizing();
}
}
}
catch (Exception ex)
{
Log.EventLog.Write("FormAppButtonGroup RemoveButton-Fehler", LogClassification.CriticalError, ex);
}
}
public bool ReplaceButton(Models.App replacing_app) =>
this.ReplaceButton(_apptype, replacing_app);
public bool ReplaceButton(AppType apptype, Models.App replacing_app)
{
if (apptype == AppType.None)
return false;
Models.App existing_app = Accessor.GetAppList(apptype).Apps.Find(app => app.ID == _mygroupbutton.ContainedAppButtons.ToList().Find(button => button.Name == Cast.AppButtonName(apptype, replacing_app)).ID);
if (existing_app != null)
{
AppButton appbutton = _mygroupbutton.ContainedAppButtons.Select(button => button).ToList().Find(button => button.Name == Cast.AppButtonName(apptype, existing_app));
int cur_index = _mygroupbutton.ContainedAppButtons.ToList().IndexOf(appbutton);
appbutton.Name = Cast.AppButtonName(apptype, replacing_app);
appbutton.Text = replacing_app.Name;
appbutton.ActiveDirectoryGroups = replacing_app.ActiveDirectoryGroups;
appbutton.Prevalence = Accessor.GetPrevalencia(apptype, replacing_app.ID);
appbutton.Execute = replacing_app.Execute;
appbutton.Visible = Cast.AppVisibility(replacing_app);
appbutton.Image = Image.FromStream(File.OpenRead(Cast.IconPath(apptype, replacing_app.Icon)));
_mygroupbutton.ContainedAppButtons[cur_index] = appbutton;
Comparer.SortAllButtons(flpAppbuttons.Controls, Config.User.Prevalence);
return true;
}
return false;
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
this.Visible = false;
e.Cancel = e.CloseReason == CloseReason.UserClosing;
base.OnFormClosing(e);
}
}
}

View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

500
GFATask/Forms/FormAppCreator.Designer.cs generated Normal file
View File

@@ -0,0 +1,500 @@
namespace GFATask
{
partial class FormAppCreator
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.tbAppname = new System.Windows.Forms.TextBox();
this.tbGroup = new System.Windows.Forms.TextBox();
this.rtbADGroups = new System.Windows.Forms.RichTextBox();
this.dgvExecutes = new System.Windows.Forms.DataGridView();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.label6 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.picbox = new System.Windows.Forms.PictureBox();
this.lIconPath = new System.Windows.Forms.Label();
this.abtnCheckADGroupName = new System.Windows.Forms.AnimationButton();
this.abtnSave = new System.Windows.Forms.AnimationButton();
this.abtnCancel = new System.Windows.Forms.AnimationButton();
this.label7 = new System.Windows.Forms.Label();
this.abtnIconPath = new System.Windows.Forms.AnimationButton();
this.cbAppType = new System.Windows.Forms.ComboBox();
this.switchPrototype = new System.Windows.Forms.SwitchButton();
this.labelPrototype = new System.Windows.Forms.Label();
this.lID = new System.Windows.Forms.Label();
this.lIsNew = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.tbDescription = new System.Windows.Forms.TextBox();
((System.ComponentModel.ISupportInitialize)(this.dgvExecutes)).BeginInit();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picbox)).BeginInit();
this.SuspendLayout();
//
// label1
//
this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(65, 96);
this.label1.Margin = new System.Windows.Forms.Padding(0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(57, 13);
this.label1.TabIndex = 1;
this.label1.Text = "App Name";
//
// label2
//
this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(36, 191);
this.label2.Margin = new System.Windows.Forms.Padding(0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(86, 13);
this.label2.TabIndex = 2;
this.label2.Text = "Gruppieren nach";
//
// label3
//
this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(56, 285);
this.label3.Margin = new System.Windows.Forms.Padding(0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(66, 13);
this.label3.TabIndex = 3;
this.label3.Text = "AD Gruppen";
//
// label4
//
this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(67, 385);
this.label4.Margin = new System.Windows.Forms.Padding(0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(55, 13);
this.label4.TabIndex = 4;
this.label4.Text = "Ausführen";
//
// tbAppname
//
this.tbAppname.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbAppname.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tableLayoutPanel1.SetColumnSpan(this.tbAppname, 4);
this.tbAppname.Location = new System.Drawing.Point(127, 92);
this.tbAppname.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.tbAppname.Name = "tbAppname";
this.tbAppname.Size = new System.Drawing.Size(388, 20);
this.tbAppname.TabIndex = 2;
//
// tbGroup
//
this.tbGroup.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbGroup.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tableLayoutPanel1.SetColumnSpan(this.tbGroup, 4);
this.tbGroup.Location = new System.Drawing.Point(127, 187);
this.tbGroup.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.tbGroup.Name = "tbGroup";
this.tbGroup.Size = new System.Drawing.Size(388, 20);
this.tbGroup.TabIndex = 4;
//
// rtbADGroups
//
this.rtbADGroups.AutoWordSelection = true;
this.rtbADGroups.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.tableLayoutPanel1.SetColumnSpan(this.rtbADGroups, 4);
this.rtbADGroups.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtbADGroups.Location = new System.Drawing.Point(127, 285);
this.rtbADGroups.Margin = new System.Windows.Forms.Padding(5, 0, 0, 40);
this.rtbADGroups.Name = "rtbADGroups";
this.rtbADGroups.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
this.rtbADGroups.Size = new System.Drawing.Size(388, 60);
this.rtbADGroups.TabIndex = 6;
this.rtbADGroups.Text = "";
//
// dgvExecutes
//
this.dgvExecutes.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.dgvExecutes.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
this.dgvExecutes.BackgroundColor = System.Drawing.Color.White;
this.dgvExecutes.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.dgvExecutes.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
this.dgvExecutes.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.tableLayoutPanel1.SetColumnSpan(this.dgvExecutes, 5);
this.dgvExecutes.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgvExecutes.GridColor = System.Drawing.SystemColors.ControlDarkDark;
this.dgvExecutes.Location = new System.Drawing.Point(127, 390);
this.dgvExecutes.Margin = new System.Windows.Forms.Padding(5);
this.dgvExecutes.MultiSelect = false;
this.dgvExecutes.Name = "dgvExecutes";
this.dgvExecutes.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
this.dgvExecutes.RowHeadersWidth = 24;
this.dgvExecutes.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
this.dgvExecutes.RowTemplate.Height = 24;
this.dgvExecutes.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
this.dgvExecutes.Size = new System.Drawing.Size(549, 90);
this.dgvExecutes.TabIndex = 8;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 6;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 122F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 103F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 84F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 45.18272F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 54.81728F));
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.dgvExecutes, 1, 9);
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 8);
this.tableLayoutPanel1.Controls.Add(this.label4, 0, 9);
this.tableLayoutPanel1.Controls.Add(this.rtbADGroups, 1, 8);
this.tableLayoutPanel1.Controls.Add(this.label6, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 5);
this.tableLayoutPanel1.Controls.Add(this.label5, 0, 10);
this.tableLayoutPanel1.Controls.Add(this.picbox, 3, 10);
this.tableLayoutPanel1.Controls.Add(this.lIconPath, 4, 10);
this.tableLayoutPanel1.Controls.Add(this.abtnCheckADGroupName, 5, 8);
this.tableLayoutPanel1.Controls.Add(this.abtnSave, 5, 11);
this.tableLayoutPanel1.Controls.Add(this.abtnCancel, 4, 11);
this.tableLayoutPanel1.Controls.Add(this.label7, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.abtnIconPath, 1, 10);
this.tableLayoutPanel1.Controls.Add(this.tbGroup, 1, 5);
this.tableLayoutPanel1.Controls.Add(this.tbAppname, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.cbAppType, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.switchPrototype, 1, 6);
this.tableLayoutPanel1.Controls.Add(this.labelPrototype, 0, 6);
this.tableLayoutPanel1.Controls.Add(this.lID, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.lIsNew, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.label8, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.tbDescription, 1, 4);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 39);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 13;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(681, 571);
this.tableLayoutPanel1.TabIndex = 10;
//
// label6
//
this.label6.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(104, 26);
this.label6.Margin = new System.Windows.Forms.Padding(0);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(18, 13);
this.label6.TabIndex = 13;
this.label6.Text = "ID";
//
// label5
//
this.label5.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(81, 496);
this.label5.Margin = new System.Windows.Forms.Padding(0);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(41, 13);
this.label5.TabIndex = 10;
this.label5.Text = "Symbol";
//
// picbox
//
this.picbox.Anchor = System.Windows.Forms.AnchorStyles.None;
this.picbox.Location = new System.Drawing.Point(321, 487);
this.picbox.Margin = new System.Windows.Forms.Padding(0);
this.picbox.Name = "picbox";
this.picbox.Size = new System.Drawing.Size(32, 30);
this.picbox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.picbox.TabIndex = 15;
this.picbox.TabStop = false;
this.picbox.Paint += new System.Windows.Forms.PaintEventHandler(this.picbox_Paint);
//
// lIconPath
//
this.lIconPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.lIconPath.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.lIconPath, 2);
this.lIconPath.Location = new System.Drawing.Point(379, 496);
this.lIconPath.Margin = new System.Windows.Forms.Padding(0);
this.lIconPath.Name = "lIconPath";
this.lIconPath.Size = new System.Drawing.Size(302, 13);
this.lIconPath.TabIndex = 11;
this.lIconPath.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// abtnCheckADGroupName
//
this.abtnCheckADGroupName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.abtnCheckADGroupName.AutoSizeWidth = false;
this.abtnCheckADGroupName.Image = null;
this.abtnCheckADGroupName.ImageAutoSize = System.Windows.Forms.ImageAutoSizeDirection.Manual;
this.abtnCheckADGroupName.ImageBackColor = System.Drawing.Color.Empty;
this.abtnCheckADGroupName.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnCheckADGroupName.ImageMargin = 3;
this.abtnCheckADGroupName.ImagePadding = 0;
this.abtnCheckADGroupName.Location = new System.Drawing.Point(520, 285);
this.abtnCheckADGroupName.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.abtnCheckADGroupName.Name = "abtnCheckADGroupName";
this.abtnCheckADGroupName.Padding = new System.Windows.Forms.Padding(0, 0, 15, 0);
this.abtnCheckADGroupName.Size = new System.Drawing.Size(161, 50);
this.abtnCheckADGroupName.TabIndex = 7;
this.abtnCheckADGroupName.Text = "Namen überprüfen";
this.abtnCheckADGroupName.TextBounds = new System.Drawing.Rectangle(2, 2, 142, 46);
this.abtnCheckADGroupName.ToolTipText = "";
this.abtnCheckADGroupName.WordWrap = true;
this.abtnCheckADGroupName.Click += new System.EventHandler(this.abtnCheckADGroupName_Click);
//
// abtnSave
//
this.abtnSave.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.abtnSave.AutoSizeWidth = false;
this.abtnSave.Image = null;
this.abtnSave.ImageAutoSize = System.Windows.Forms.ImageAutoSizeDirection.Manual;
this.abtnSave.ImageBackColor = System.Drawing.Color.Empty;
this.abtnSave.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnSave.ImageMargin = 3;
this.abtnSave.ImagePadding = 0;
this.abtnSave.Location = new System.Drawing.Point(532, 522);
this.abtnSave.Margin = new System.Windows.Forms.Padding(5, 0, 20, 0);
this.abtnSave.Name = "abtnSave";
this.abtnSave.Padding = new System.Windows.Forms.Padding(0, 0, 15, 0);
this.abtnSave.Size = new System.Drawing.Size(129, 30);
this.abtnSave.TabIndex = 11;
this.abtnSave.Text = "Speichern";
this.abtnSave.TextBounds = new System.Drawing.Rectangle(1, 1, 107, 28);
this.abtnSave.ToolTipText = "";
this.abtnSave.Click += new System.EventHandler(this.abtnSave_Click);
//
// abtnCancel
//
this.abtnCancel.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.abtnCancel.AutoSizeWidth = false;
this.abtnCancel.Image = null;
this.abtnCancel.ImageAutoSize = System.Windows.Forms.ImageAutoSizeDirection.Manual;
this.abtnCancel.ImageBackColor = System.Drawing.Color.Empty;
this.abtnCancel.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnCancel.ImageMargin = 3;
this.abtnCancel.ImagePadding = 0;
this.abtnCancel.Location = new System.Drawing.Point(384, 522);
this.abtnCancel.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.abtnCancel.Name = "abtnCancel";
this.abtnCancel.Padding = new System.Windows.Forms.Padding(0, 0, 15, 0);
this.abtnCancel.Size = new System.Drawing.Size(131, 30);
this.abtnCancel.TabIndex = 10;
this.abtnCancel.Text = "Abbrechen";
this.abtnCancel.TextBounds = new System.Drawing.Rectangle(2, 2, 112, 26);
this.abtnCancel.ToolTipText = "";
this.abtnCancel.Click += new System.EventHandler(this.abtnCancel_Click);
//
// label7
//
this.label7.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(71, 61);
this.label7.Margin = new System.Windows.Forms.Padding(0);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(51, 13);
this.label7.TabIndex = 18;
this.label7.Text = "App Liste";
//
// abtnIconPath
//
this.abtnIconPath.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.abtnIconPath.AutoSizeWidth = false;
this.tableLayoutPanel1.SetColumnSpan(this.abtnIconPath, 2);
this.abtnIconPath.Image = global::GFATask.Properties.Resources.magnifier;
this.abtnIconPath.ImageAutoSize = System.Windows.Forms.ImageAutoSizeDirection.Height;
this.abtnIconPath.ImageBackColor = System.Drawing.Color.Empty;
this.abtnIconPath.ImageBounds = new System.Drawing.Rectangle(5, 5, 20, 20);
this.abtnIconPath.ImageMargin = 3;
this.abtnIconPath.ImagePadding = 0;
this.abtnIconPath.ImageSize = new System.Drawing.Size(20, 20);
this.abtnIconPath.Location = new System.Drawing.Point(127, 487);
this.abtnIconPath.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.abtnIconPath.Name = "abtnIconPath";
this.abtnIconPath.Size = new System.Drawing.Size(168, 30);
this.abtnIconPath.TabIndex = 9;
this.abtnIconPath.Text = "Symbol suchen";
this.abtnIconPath.TextBounds = new System.Drawing.Rectangle(25, 2, 141, 26);
this.abtnIconPath.ToolTipText = "";
this.abtnIconPath.Click += new System.EventHandler(this.abtnIconPath_Click);
//
// cbAppType
//
this.cbAppType.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.tableLayoutPanel1.SetColumnSpan(this.cbAppType, 2);
this.cbAppType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppType.FormattingEnabled = true;
this.cbAppType.Location = new System.Drawing.Point(127, 57);
this.cbAppType.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.cbAppType.Name = "cbAppType";
this.cbAppType.Size = new System.Drawing.Size(121, 21);
this.cbAppType.TabIndex = 1;
this.cbAppType.SelectedIndexChanged += new System.EventHandler(this.cbAppType_SelectedIndexChanged);
//
// switchPrototype
//
this.switchPrototype.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.switchPrototype.BackColor = System.Drawing.Color.White;
this.switchPrototype.ButtonWidth = 35;
this.switchPrototype.CheckThreeState = false;
this.switchPrototype.ColorActive = System.Drawing.Color.DarkSeaGreen;
this.switchPrototype.ColorInactive = System.Drawing.Color.OrangeRed;
this.switchPrototype.Location = new System.Drawing.Point(135, 237);
this.switchPrototype.Margin = new System.Windows.Forms.Padding(13, 5, 4, 5);
this.switchPrototype.Name = "switchPrototype";
this.switchPrototype.RoundedButton = true;
this.tableLayoutPanel1.SetRowSpan(this.switchPrototype, 2);
this.switchPrototype.ShowBoarder = false;
this.switchPrototype.Size = new System.Drawing.Size(80, 25);
this.switchPrototype.TabIndex = 5;
this.switchPrototype.Text = "switchButton1";
//
// labelPrototype
//
this.labelPrototype.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.labelPrototype.AutoSize = true;
this.labelPrototype.Location = new System.Drawing.Point(76, 243);
this.labelPrototype.Margin = new System.Windows.Forms.Padding(0);
this.labelPrototype.Name = "labelPrototype";
this.tableLayoutPanel1.SetRowSpan(this.labelPrototype, 2);
this.labelPrototype.Size = new System.Drawing.Size(46, 13);
this.labelPrototype.TabIndex = 27;
this.labelPrototype.Text = "Prototyp";
//
// lID
//
this.lID.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lID.AutoSize = true;
this.lID.Location = new System.Drawing.Point(127, 26);
this.lID.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.lID.Name = "lID";
this.lID.Size = new System.Drawing.Size(18, 13);
this.lID.TabIndex = 14;
this.lID.Text = "ID";
//
// lIsNew
//
this.lIsNew.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lIsNew.AutoSize = true;
this.lIsNew.Location = new System.Drawing.Point(230, 26);
this.lIsNew.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.lIsNew.Name = "lIsNew";
this.lIsNew.Size = new System.Drawing.Size(33, 13);
this.lIsNew.TabIndex = 20;
this.lIsNew.Text = "[Neu]";
//
// label8
//
this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(50, 130);
this.label8.Margin = new System.Windows.Forms.Padding(0, 10, 0, 0);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(72, 13);
this.label8.TabIndex = 28;
this.label8.Text = "Beschreibung";
//
// tbDescription
//
this.tbDescription.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tableLayoutPanel1.SetColumnSpan(this.tbDescription, 4);
this.tbDescription.Dock = System.Windows.Forms.DockStyle.Fill;
this.tbDescription.Location = new System.Drawing.Point(127, 130);
this.tbDescription.Margin = new System.Windows.Forms.Padding(5, 10, 0, 10);
this.tbDescription.Multiline = true;
this.tbDescription.Name = "tbDescription";
this.tbDescription.Size = new System.Drawing.Size(388, 40);
this.tbDescription.TabIndex = 3;
//
// FormAppCreator
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(701, 620);
this.Controls.Add(this.tableLayoutPanel1);
this.DesktopAnchor = System.Windows.Forms.DesktopAnchor.Center;
this.Name = "FormAppCreator";
this.Padding = new System.Windows.Forms.Padding(10, 39, 10, 10);
this.RegionBounds = new System.Drawing.Rectangle(19, 19, 701, 620);
this.Resizable = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.SystemMenu = false;
this.Text = "Erstellen, oder editieren einer App";
((System.ComponentModel.ISupportInitialize)(this.dgvExecutes)).EndInit();
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.picbox)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox tbAppname;
private System.Windows.Forms.TextBox tbGroup;
private System.Windows.Forms.RichTextBox rtbADGroups;
private System.Windows.Forms.AnimationButton abtnCheckADGroupName;
private System.Windows.Forms.DataGridView dgvExecutes;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.AnimationButton abtnIconPath;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label lIconPath;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label lID;
private System.Windows.Forms.PictureBox picbox;
private System.Windows.Forms.AnimationButton abtnSave;
private System.Windows.Forms.AnimationButton abtnCancel;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.ComboBox cbAppType;
private System.Windows.Forms.Label lIsNew;
private System.Windows.Forms.SwitchButton switchPrototype;
private System.Windows.Forms.Label labelPrototype;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox tbDescription;
}
}

View File

@@ -0,0 +1,249 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.DirectoryServices;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public partial class FormAppCreator : FormEx
{
public FormAppCreator()
{
InitializeComponent();
this.ResetControls();
cbAppType.Items.AddRange(Enum.GetNames(typeof(AppType)).Where(name => name != "None" || name != "Citrix").ToArray());
if (!dgvExecutes.Columns.Contains("colBefehl")) dgvExecutes.Columns.Add("colBefehl", "Befehl");
if (!dgvExecutes.Columns.Contains("colArgumente")) dgvExecutes.Columns.Add("colArgumente", "Argumente");
this.Icon = Icon.FromHandle(new Bitmap(File.OpenRead(Paths.Icons.Directory + @"System\new.png")).GetHicon());
this.DesktopAnchor = DesktopAnchor.Center;
this.SetDefaultDesign();
dgvExecutes.BackgroundColor = this.BackColor;
dgvExecutes.DefaultCellStyle.BackColor = this.BackColor;
dgvExecutes.EnableHeadersVisualStyles = false;
dgvExecutes.RowHeadersDefaultCellStyle.BackColor = this.BackColor;
dgvExecutes.DefaultCellStyle.ForeColor = this.ForeColor;
dgvExecutes.DefaultCellStyle.Font = this.Font;
}
private void abtnCheckADGroupName_Click(object sender, EventArgs e)
{
rtbADGroups.Text.Split(';').ToList().ForEach(groupname =>
{
var settledgroupname = groupname.Replace(" ", "");
if (ActiveDirectory.GroupExists(settledgroupname).Item1)
rtbADGroups.Text = rtbADGroups.Text.Replace(settledgroupname, ActiveDirectory.GroupExists(settledgroupname).Item2) + Environment.NewLine;
});
}
/// <summary>
/// Fügt den entsprechenden Steuerelementen die Informationen der App hinzu um diese editieren zu können
/// </summary>
/// <param name="app"></param>
public void GetEditableItem(AppType apptype, Models.App app)
{
this.ResetControls();
cbAppType.Text = apptype.ToString();
lID.Text = app.ID.ToString();
lIsNew.Text = string.Empty;
tbAppname.Text = app.Name;
tbDescription.Text = app.Description;
tbGroup.Text = app.Group;
switchPrototype.Checked = app.Prototype;
if (apptype != AppType.Favorites)
{
labelPrototype.Visible = true;
switchPrototype.Visible = true;
rtbADGroups.Enabled = true;
abtnCheckADGroupName.Enabled = true;
}
else
{
labelPrototype.Visible = false;
switchPrototype.Checked = false;
switchPrototype.Visible = false;
rtbADGroups.Enabled = false;
abtnCheckADGroupName.Enabled = false;
}
cbAppType.Enabled = false;
if (app.ActiveDirectoryGroups != null)
rtbADGroups.Text = string.Join("; ", app.ActiveDirectoryGroups);
app.Execute.ToList().ForEach(exec =>
{
dgvExecutes.Rows.Add(exec.Command, exec.Args);
});
lIconPath.Tag = Cast.IconPath(apptype, app.Icon);
lIconPath.Text = Path.GetFileName(app.Icon);
if (File.Exists(lIconPath.Tag.ToString()))
{
using (FileStream fs = new FileStream(lIconPath.Tag.ToString(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
{
picbox.Image = Image.FromStream(fs);
}
}
}
private void abtnIconPath_Click(object sender, EventArgs e)
{
var ofd = new OpenFileDialog() { Multiselect = false, Filter = "Image Files(.JPG; .JPEG; .JPE; .BMP; .GIF; .PNG)|*.JPG;*.JPEG;*.JPE;*.BMP;*.GIF;*.PNG" };
if (lIconPath.Tag != null && lIconPath.Text != string.Empty)
ofd.InitialDirectory = Path.GetDirectoryName(lIconPath.Tag.ToString());
else
{
ofd.InitialDirectory = Paths.Icons.Directory;
lIconPath.Text = "[Kein Symbol]";
}
if (ofd.ShowDialog(this) == DialogResult.OK)
{
lIconPath.Text = ofd.SafeFileName;
lIconPath.Tag = ofd.FileName;
using (FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
{
picbox.Image = Image.FromStream(fs);
}
}
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
this.Visible = false;
e.Cancel = true;
}
base.OnFormClosing(e);
}
public void ResetControls()
{
labelPrototype.Visible = true;
switchPrototype.Visible = true;
lIsNew.Text = "[Neu]";
lID.Text = string.Empty;
tbAppname.Clear();
tbDescription.Clear();
tbGroup.Clear();
cbAppType.Enabled = true;
switchPrototype.Checked = true;
cbAppType.Text = string.Empty;
rtbADGroups.Clear();
dgvExecutes.Rows.Clear();
picbox.Image = new Bitmap(picbox.Width, picbox.Height);
lIconPath.Text = "[Kein Symbol]";
}
private void abtnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void abtnSave_Click(object sender, EventArgs e)
{
if (cbAppType.Text == "")
{
XObjects.MessageBox("App Liste auswählen", NotifyButtons.OK, NotifyType.Message, new Size(125, 100), "App Liste", null);
}
else
{
Models.AppList<Models.App> applist = Accessor.GetAppList(cbAppType.Text);
// Ersetzt vorhandene App
if (int.TryParse(lID.Text, out _) && applist.Apps.Exists(app => app.ID == int.Parse(lID.Text)))
{
Models.App appitem = applist.Apps.Find(app => app.ID == int.Parse(lID.Text)).Copy();
appitem.Name = tbAppname.Text;
appitem.Group = tbGroup.Text;
appitem.Description = tbDescription.Text;
appitem.Prototype = switchPrototype.Checked;
appitem.ActiveDirectoryGroups = rtbADGroups.Text.Split(';').Length == 0 || rtbADGroups.Text == "" ? null : rtbADGroups.Text.Split(';');
appitem.Execute = dgvExecutes.Rows.Cast<DataGridViewRow>().Where(row => !row.IsNewRow).Select(row =>
new Models.Execute()
{
Command = row.Cells[0].Value == null ? null : row.Cells[0].Value.ToString(),
Args = row.Cells[1].Value == null ? null : row.Cells[1].Value.ToString()
}).ToArray();
if(lIconPath.Text != string.Empty)
{
if((AppType)Enum.Parse(typeof(AppType), cbAppType.Text, true) == AppType.Favorites)
{
if (lIconPath.Tag.ToString() != Cast.IconPath(AppType.Favorites, lIconPath.Text))
Creator.StreamCopy(lIconPath.Tag.ToString(), Cast.IconPath(AppType.Favorites, lIconPath.Text), null);
}
else
{
if (lIconPath.Tag != null && !File.Exists($"{Paths.Icons.Directory}{lIconPath.Text}") && File.Exists(lIconPath.Tag.ToString()))
Creator.StreamCopy(lIconPath.Tag.ToString(), $"{Paths.Icons.Directory}{lIconPath.Text}", (fs) =>
{
Forms.Administration.UcAdminApps.imageList.Images.Add(Path.GetFileName(fs.Name), Image.FromStream(fs));
});
}
appitem.Icon = lIconPath.Text;
}
Creator.ReplaceApp(cbAppType.Text, appitem);
}
else
{
// Erstellt neue App
Models.App app_new = new Models.App()
{
ID = applist.Apps.Max(app => app.ID) + 1,
Name = tbAppname.Text,
Description = tbDescription.Text,
Group = tbGroup.Text,
Icon = lIconPath.Text,
Created = DateTime.Now,
LastModified = DateTime.Now,
Prototype = switchPrototype.Checked,
ActiveDirectoryGroups = rtbADGroups.Text.Split(';').Length == 0 ? null : rtbADGroups.Text.Split(';'),
Execute = dgvExecutes.Rows.Cast<DataGridViewRow>().Where(row => !row.IsNewRow).Select(row =>
new Models.Execute()
{
Command = row.Cells[0].Value == null ? null : row.Cells[0].Value.ToString(),
Args = row.Cells[1].Value == null ? null : row.Cells[1].Value.ToString()
}).ToArray()
};
if (lIconPath.Tag != null && !File.Exists($"{Paths.Icons.Directory}{lIconPath.Text}"))
Creator.StreamCopy(lIconPath.Tag.ToString(), $"{Paths.Icons.Directory}{lIconPath.Text}", (fs) =>
{
Forms.Administration.UcAdminApps.imageList.Images.Add(Path.GetFileName(fs.Name), Image.FromStream(fs));
});
//File.Copy(lIconPath.Tag.ToString(), $"{Paths.Icons.Directory}{lIconPath.Text}", true);
Creator.AddApp(cbAppType.Text, app_new);
}
this.ResetControls();
this.Close();
}
}
private void picbox_Paint(object sender, PaintEventArgs e)
{
}
private void cbAppType_SelectedIndexChanged(object sender, EventArgs e)
{
if(this.Created)
{
lID.Text = (Accessor.GetAppList(cbAppType.Text).Apps.Max(app => app.ID) + 1).ToString();
rtbADGroups.Enabled = cbAppType.Text != AppType.Favorites.ToString();
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

177
GFATask/Forms/FormGroups.Designer.cs generated Normal file
View File

@@ -0,0 +1,177 @@
namespace GFATask
{
partial class FormGroups
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
GFATask.Prevalencia prevalencia1 = new GFATask.Prevalencia();
this.lLoading = new System.Windows.Forms.Label();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.abtnRefresh = new GFATask.AppListButton();
this.lvGroups = new System.Windows.Forms.ListViewEx();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// lLoading
//
this.lLoading.Location = new System.Drawing.Point(7, 7);
this.lLoading.Margin = new System.Windows.Forms.Padding(7, 6, 7, 6);
this.lLoading.Name = "lLoading";
this.lLoading.Size = new System.Drawing.Size(539, 30);
this.lLoading.TabIndex = 3;
this.lLoading.Text = "Loading";
this.lLoading.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(10, 39);
this.splitContainer1.Margin = new System.Windows.Forms.Padding(0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.abtnRefresh);
this.splitContainer1.Panel1.Controls.Add(this.lLoading);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.lvGroups);
this.splitContainer1.Size = new System.Drawing.Size(1424, 299);
this.splitContainer1.SplitterDistance = 36;
this.splitContainer1.SplitterWidth = 5;
this.splitContainer1.TabIndex = 0;
//
// abtnRefresh
//
this.abtnRefresh.ActiveDirectoryGroups = new string[0];
this.abtnRefresh.ActualWidth = 0;
this.abtnRefresh.AppType = System.AppType.None;
this.abtnRefresh.AutoSizeWidth = false;
this.abtnRefresh.Dock = System.Windows.Forms.DockStyle.Right;
this.abtnRefresh.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.abtnRefresh.Image = global::GFATask.Properties.Resources.magnifier;
this.abtnRefresh.ImageAutoSize = System.Windows.Forms.ImageAutoSizeDirection.Manual;
this.abtnRefresh.ImageBackColor = System.Drawing.Color.Empty;
this.abtnRefresh.ImageBounds = new System.Drawing.Rectangle(5, 1, 34, 34);
this.abtnRefresh.ImageMargin = 3;
this.abtnRefresh.ImageOnly = false;
this.abtnRefresh.ImagePadding = 0;
this.abtnRefresh.ImageSize = new System.Drawing.Size(34, 34);
this.abtnRefresh.Location = new System.Drawing.Point(1232, 0);
this.abtnRefresh.Margin = new System.Windows.Forms.Padding(0);
this.abtnRefresh.Name = "abtnRefresh";
prevalencia1.AppType = System.AppType.None;
prevalencia1.CountClicks = 0;
prevalencia1.ID = 0;
this.abtnRefresh.Prevalence = prevalencia1;
this.abtnRefresh.Size = new System.Drawing.Size(192, 36);
this.abtnRefresh.TabIndex = 4;
this.abtnRefresh.Text = "Wiederhole Suche";
this.abtnRefresh.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.abtnRefresh.TextBounds = new System.Drawing.Rectangle(39, 2, 151, 32);
this.abtnRefresh.ToolTipText = "";
this.abtnRefresh.Click += new System.EventHandler(this.abtnRefresh_Click);
//
// lvGroups
//
this.lvGroups.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvGroups.ColumnFont = new System.Drawing.Font("Segoe UI", 9F);
this.lvGroups.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.lvGroups.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvGroups.HideSelection = false;
this.lvGroups.Location = new System.Drawing.Point(0, 0);
this.lvGroups.Margin = new System.Windows.Forms.Padding(4);
this.lvGroups.Name = "lvGroups";
this.lvGroups.Size = new System.Drawing.Size(1424, 258);
this.lvGroups.Sorting = System.Windows.Forms.SortOrder.Ascending;
this.lvGroups.TabIndex = 2;
this.lvGroups.UseCompatibleStateImageBehavior = false;
this.lvGroups.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "Name";
this.columnHeader1.Width = 345;
//
// columnHeader2
//
this.columnHeader2.Text = "SID";
this.columnHeader2.Width = 248;
//
// columnHeader3
//
this.columnHeader3.Text = "Beschreibung";
this.columnHeader3.Width = 463;
//
// FormGroups
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.ClientSize = new System.Drawing.Size(1444, 348);
this.Controls.Add(this.splitContainer1);
this.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2);
this.MinimizeBox = false;
this.Name = "FormGroups";
this.Padding = new System.Windows.Forms.Padding(10, 39, 10, 10);
this.RegionBounds = new System.Drawing.Rectangle(19, 19, 1444, 348);
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.SystemMenu = false;
this.Text = "Meine Gruppen";
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label lLoading;
private System.Windows.Forms.SplitContainer splitContainer1;
private AppListButton abtnRefresh;
private System.Windows.Forms.ListViewEx lvGroups;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
}
}

View File

@@ -0,0 +1,95 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.DirectoryServices.AccountManagement;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public partial class FormGroups : FormEx
{
public FormGroups()
{
InitializeComponent();
lvGroups.DoubleBuffer(true);
// Lädt das Layout des GFATask
this.SetDefaultDesign();
lvGroups.SortByColumn(0);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
lLoading.ForeColor = Coloring.GetReadableForeColor(lLoading.BackColor);
}
public void AddADGroup(GroupPrincipal group)
{
var item = new ListViewItem(new string[] { group.Name, group.Sid.Value, group.Description });
var subSID = new ListViewItem.ListViewSubItem(item, group.Sid.Value);
var subDescription = new ListViewItem.ListViewSubItem(item, group.Description);
item.SubItems.AddRange(new ListViewItem.ListViewSubItem[] { subSID, subDescription });
if (lvGroups.InvokeRequired)
{
lvGroups.Invoke(new MethodInvoker(delegate
{
lvGroups.Items.Add(item);
lvGroups.Update();
lvGroups.Invalidate();
}));
}
else
{
lvGroups.Items.Add(item);
lvGroups.Update();
lvGroups.Invalidate();
}
}
/// <summary>
/// Durchsucht die Domäne nach Active Directory Gruppen
/// </summary>
/// <param name="local">Befindet sich der PC in einer Domäne, dann false, andernfalls true</param>
public void Loading(bool local = false)
{
if (lvGroups.InvokeRequired)
{
lvGroups.Invoke(new MethodInvoker( delegate { lvGroups.Items.Clear(); }));
}
else
{
lvGroups.Items.Clear();
}
if (!local)
{
lLoading.Loading("Suche nach Gruppen", "Suche abgeschlossen", AD.GetGroups);
}
else
lLoading.Loading("Suche nach Gruppen", "Keine Domäne gefunden", null);
}
protected override void OnClosing(CancelEventArgs e)
{
this.Visible = false;
e.Cancel = true;
base.OnClosing(e);
}
private void abtnRefresh_Click(object sender, EventArgs e)
{
lvGroups.Items.Clear();
this.Loading();
}
}
}

View File

@@ -0,0 +1,123 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>81</value>
</metadata>
</root>

238
GFATask/Forms/FormInfo.Designer.cs generated Normal file
View File

@@ -0,0 +1,238 @@
namespace GFATask
{
partial class FormInfo
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.lCopyright = new System.Windows.Forms.Label();
this.lOS = new System.Windows.Forms.Label();
this.lComputer = new System.Windows.Forms.Label();
this.lText = new System.Windows.Forms.Label();
this.picLOGO = new System.Windows.Forms.PictureBox();
this.label5 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.lWebBrowser = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picLOGO)).BeginInit();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 4;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 112F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.Controls.Add(this.label4, 2, 6);
this.tableLayoutPanel1.Controls.Add(this.lCopyright, 1, 9);
this.tableLayoutPanel1.Controls.Add(this.lOS, 1, 5);
this.tableLayoutPanel1.Controls.Add(this.lComputer, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.lText, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.picLOGO, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.label5, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.label1, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.label2, 2, 4);
this.tableLayoutPanel1.Controls.Add(this.lWebBrowser, 1, 7);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 33);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 10;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 42F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 56F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(503, 412);
this.tableLayoutPanel1.TabIndex = 1;
//
// lCopyright
//
this.tableLayoutPanel1.SetColumnSpan(this.lCopyright, 3);
this.lCopyright.Dock = System.Windows.Forms.DockStyle.Fill;
this.lCopyright.Location = new System.Drawing.Point(115, 384);
this.lCopyright.Name = "lCopyright";
this.lCopyright.Size = new System.Drawing.Size(385, 28);
this.lCopyright.TabIndex = 24;
this.lCopyright.Text = "InfoClass.Copyright";
this.lCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// lOS
//
this.tableLayoutPanel1.SetColumnSpan(this.lOS, 3);
this.lOS.Dock = System.Windows.Forms.DockStyle.Fill;
this.lOS.Location = new System.Drawing.Point(115, 140);
this.lOS.Name = "lOS";
this.lOS.Size = new System.Drawing.Size(385, 42);
this.lOS.TabIndex = 8;
this.lOS.Text = "InfoClass.OS";
this.lOS.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lComputer
//
this.tableLayoutPanel1.SetColumnSpan(this.lComputer, 3);
this.lComputer.Dock = System.Windows.Forms.DockStyle.Fill;
this.lComputer.Location = new System.Drawing.Point(115, 84);
this.lComputer.Name = "lComputer";
this.lComputer.Size = new System.Drawing.Size(385, 28);
this.lComputer.TabIndex = 7;
this.lComputer.Text = "InfoClass.Computer";
this.lComputer.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lText
//
this.tableLayoutPanel1.SetColumnSpan(this.lText, 3);
this.lText.Dock = System.Windows.Forms.DockStyle.Fill;
this.lText.Location = new System.Drawing.Point(115, 28);
this.lText.Name = "lText";
this.lText.Size = new System.Drawing.Size(385, 28);
this.lText.TabIndex = 5;
this.lText.Text = "InfoClass.Program+ProgramCodeName";
this.lText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// picLOGO
//
this.picLOGO.Anchor = System.Windows.Forms.AnchorStyles.None;
this.picLOGO.Location = new System.Drawing.Point(6, 41);
this.picLOGO.Name = "picLOGO";
this.tableLayoutPanel1.SetRowSpan(this.picLOGO, 6);
this.picLOGO.Size = new System.Drawing.Size(100, 100);
this.picLOGO.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.picLOGO.TabIndex = 6;
this.picLOGO.TabStop = false;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Dock = System.Windows.Forms.DockStyle.Fill;
this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label5.Location = new System.Drawing.Point(209, 0);
this.label5.Margin = new System.Windows.Forms.Padding(0);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(195, 28);
this.label5.TabIndex = 20;
this.label5.Text = "Version";
this.label5.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(209, 56);
this.label1.Margin = new System.Windows.Forms.Padding(0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(195, 28);
this.label1.TabIndex = 21;
this.label1.Text = "Ihr Computer";
this.label1.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(209, 112);
this.label2.Margin = new System.Windows.Forms.Padding(0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(195, 28);
this.label2.TabIndex = 22;
this.label2.Text = "Ihr Betriebssystem";
this.label2.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// lWebBrowser
//
this.lWebBrowser.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.lWebBrowser, 3);
this.lWebBrowser.Dock = System.Windows.Forms.DockStyle.Fill;
this.lWebBrowser.Location = new System.Drawing.Point(115, 210);
this.lWebBrowser.Name = "lWebBrowser";
this.lWebBrowser.Size = new System.Drawing.Size(385, 56);
this.lWebBrowser.TabIndex = 25;
this.lWebBrowser.Text = "InfoClass.Browsers";
this.lWebBrowser.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(209, 182);
this.label4.Margin = new System.Windows.Forms.Padding(0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(195, 28);
this.label4.TabIndex = 26;
this.label4.Text = "Verfügbare Webbrowser";
this.label4.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// FormInfo
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(523, 455);
this.Controls.Add(this.tableLayoutPanel1);
this.DesktopAnchor = System.Windows.Forms.DesktopAnchor.Center;
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FormInfo";
this.Padding = new System.Windows.Forms.Padding(10, 33, 10, 10);
this.RegionBounds = new System.Drawing.Rectangle(15, 15, 523, 455);
this.Resizable = false;
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "";
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.picLOGO)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Label lText;
private System.Windows.Forms.PictureBox picLOGO;
private System.Windows.Forms.Label lComputer;
private System.Windows.Forms.Label lOS;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label lCopyright;
private System.Windows.Forms.Label lWebBrowser;
private System.Windows.Forms.Label label4;
}
}

63
GFATask/Forms/FormInfo.cs Normal file
View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public partial class FormInfo : FormEx
{
LoadingPanel panel = XObjects.LoadingPanel.Clone();
public FormInfo()
{
InitializeComponent();
this.SetDefaultDesign();
picLOGO.Image = Image.FromStream(File.OpenRead(Paths.Icons.Directory + @"\System\GFA.png"));
lText.Text = $"{InfoClass.Program} [Codename {InfoClass.ProgramCodeName}]";
lComputer.Text = $"{InfoClass.Computer } [{InfoClass.IPAdress}]";
lOS.Text = InfoClass.OperatingSystem;
lCopyright.Text = InfoClass.Copyright;
label1.Paint += Designer.DrawHeaderLabel;
label2.Paint += Designer.DrawHeaderLabel;
label4.Paint += Designer.DrawHeaderLabel;
label5.Paint += Designer.DrawHeaderLabel;
lWebBrowser.Text = InfoClass.Browsers;
}
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if(this.Visible)
{
panel = XObjects.LoadingPanel.Clone();
panel.Loading = true;
this.tableLayoutPanel1.Controls.Add(panel, 1, this.tableLayoutPanel1.RowCount -2);
this.tableLayoutPanel1.SetColumnSpan(panel, this.tableLayoutPanel1.ColumnCount - 1);
}
else
{
panel.Loading = this.Visible;
}
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
if(e.CloseReason == CloseReason.UserClosing)
{
this.Visible = false;
e.Cancel = true;
}
base.OnFormClosing(e);
}
}
}

120
GFATask/Forms/FormInfo.resx Normal file
View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

184
GFATask/Forms/FormMain.Designer.cs generated Normal file
View File

@@ -0,0 +1,184 @@
namespace GFATask
{
partial class FormMain
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.applistpanelUser = new GFATask.AppListPanel();
this.applistpanelMenu = new GFATask.AppListPanel();
this.applistpanelAdmin = new GFATask.AppListPanel();
this.applistpanelFavorites = new GFATask.AppListPanel();
this.applistpanelCitrix = new GFATask.AppListPanel();
this.SuspendLayout();
//
// applistpanelUser
//
this.applistpanelUser.AppType = System.AppType.User;
this.applistpanelUser.AutoScroll = true;
this.applistpanelUser.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.applistpanelUser.Border = new System.Drawing.Point(2, 2);
this.applistpanelUser.Dock = System.Windows.Forms.DockStyle.Top;
this.applistpanelUser.Font = new System.Drawing.Font("Calibri", 10F);
this.applistpanelUser.Grouping = false;
this.applistpanelUser.IsLast = false;
this.applistpanelUser.ListName = "Apps";
this.applistpanelUser.Location = new System.Drawing.Point(10, 328);
this.applistpanelUser.Margin = new System.Windows.Forms.Padding(0);
this.applistpanelUser.MinimumSize = new System.Drawing.Size(0, 42);
this.applistpanelUser.Name = "applistpanelUser";
this.applistpanelUser.Padding = new System.Windows.Forms.Padding(31, 7, 2, 2);
this.applistpanelUser.Resizing = false;
this.applistpanelUser.Showing = false;
this.applistpanelUser.Size = new System.Drawing.Size(720, 82);
this.applistpanelUser.TabIndex = 7;
this.applistpanelUser.Tag = "user";
//
// applistpanelMenu
//
this.applistpanelMenu.AppType = System.AppType.Menu;
this.applistpanelMenu.AutoScroll = true;
this.applistpanelMenu.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.applistpanelMenu.Border = new System.Drawing.Point(2, 2);
this.applistpanelMenu.Dock = System.Windows.Forms.DockStyle.Top;
this.applistpanelMenu.Font = new System.Drawing.Font("Calibri", 10F);
this.applistpanelMenu.Grouping = false;
this.applistpanelMenu.IsLast = false;
this.applistpanelMenu.ListName = "Menü";
this.applistpanelMenu.Location = new System.Drawing.Point(10, 40);
this.applistpanelMenu.Margin = new System.Windows.Forms.Padding(0, 0, 0, 2);
this.applistpanelMenu.MinimumSize = new System.Drawing.Size(0, 49);
this.applistpanelMenu.Name = "applistpanelMenu";
this.applistpanelMenu.Padding = new System.Windows.Forms.Padding(31, 7, 2, 7);
this.applistpanelMenu.Showing = false;
this.applistpanelMenu.Size = new System.Drawing.Size(720, 61);
this.applistpanelMenu.TabIndex = 3;
this.applistpanelMenu.Tag = "menu";
//
// applistpanelAdmin
//
this.applistpanelAdmin.AppType = System.AppType.Admin;
this.applistpanelAdmin.AutoScroll = true;
this.applistpanelAdmin.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.applistpanelAdmin.Border = new System.Drawing.Point(2, 2);
this.applistpanelAdmin.Dock = System.Windows.Forms.DockStyle.Top;
this.applistpanelAdmin.Font = new System.Drawing.Font("Calibri", 10F);
this.applistpanelAdmin.Grouping = false;
this.applistpanelAdmin.IsLast = false;
this.applistpanelAdmin.ListName = "Admin";
this.applistpanelAdmin.Location = new System.Drawing.Point(10, 257);
this.applistpanelAdmin.Margin = new System.Windows.Forms.Padding(0);
this.applistpanelAdmin.MinimumSize = new System.Drawing.Size(0, 52);
this.applistpanelAdmin.Name = "applistpanelAdmin";
this.applistpanelAdmin.Padding = new System.Windows.Forms.Padding(31, 7, 2, 7);
this.applistpanelAdmin.Showing = false;
this.applistpanelAdmin.Size = new System.Drawing.Size(720, 71);
this.applistpanelAdmin.TabIndex = 6;
this.applistpanelAdmin.Tag = "admin";
//
// applistpanelFavorites
//
this.applistpanelFavorites.AppType = System.AppType.Favorites;
this.applistpanelFavorites.AutoScroll = true;
this.applistpanelFavorites.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.applistpanelFavorites.Border = new System.Drawing.Point(2, 2);
this.applistpanelFavorites.Dock = System.Windows.Forms.DockStyle.Top;
this.applistpanelFavorites.Font = new System.Drawing.Font("Calibri", 10F);
this.applistpanelFavorites.Grouping = false;
this.applistpanelFavorites.IsLast = false;
this.applistpanelFavorites.ListName = "Favoriten";
this.applistpanelFavorites.Location = new System.Drawing.Point(10, 172);
this.applistpanelFavorites.Margin = new System.Windows.Forms.Padding(0);
this.applistpanelFavorites.MinimumSize = new System.Drawing.Size(0, 73);
this.applistpanelFavorites.Name = "applistpanelFavorites";
this.applistpanelFavorites.Padding = new System.Windows.Forms.Padding(31, 7, 2, 7);
this.applistpanelFavorites.Showing = false;
this.applistpanelFavorites.Size = new System.Drawing.Size(720, 85);
this.applistpanelFavorites.TabIndex = 5;
this.applistpanelFavorites.Tag = "favorites";
//
// applistpanelCitrix
//
this.applistpanelCitrix.AppType = System.AppType.Citrix;
this.applistpanelCitrix.AutoScroll = true;
this.applistpanelCitrix.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.applistpanelCitrix.Border = new System.Drawing.Point(2, 2);
this.applistpanelCitrix.Dock = System.Windows.Forms.DockStyle.Top;
this.applistpanelCitrix.Font = new System.Drawing.Font("Calibri", 10F);
this.applistpanelCitrix.Grouping = false;
this.applistpanelCitrix.IsLast = false;
this.applistpanelCitrix.ListName = "Citrix";
this.applistpanelCitrix.Location = new System.Drawing.Point(10, 101);
this.applistpanelCitrix.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
this.applistpanelCitrix.MinimumSize = new System.Drawing.Size(0, 44);
this.applistpanelCitrix.Name = "applistpanelCitrix";
this.applistpanelCitrix.Padding = new System.Windows.Forms.Padding(31, 7, 2, 7);
this.applistpanelCitrix.Showing = false;
this.applistpanelCitrix.Size = new System.Drawing.Size(720, 71);
this.applistpanelCitrix.TabIndex = 4;
this.applistpanelCitrix.Tag = "citrix";
//
// FormMain
//
this.AllowDrop = true;
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(716, 387);
this.ControlBox = false;
this.Controls.Add(this.applistpanelUser);
this.Controls.Add(this.applistpanelMenu);
this.Controls.Add(this.applistpanelAdmin);
this.Controls.Add(this.applistpanelFavorites);
this.Controls.Add(this.applistpanelCitrix);
this.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Moveable = false;
this.Name = "FormMain";
this.Opacity = 0.5D;
this.Padding = new System.Windows.Forms.Padding(10, 38, 10, 10);
this.RegionBounds = new System.Drawing.Rectangle(15, 15, 716, 387);
this.Resizable = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "GFATask";
this.TextAlign = System.Drawing.StringAlignment.Center;
this.TitlebarHeight = 28;
this.TopMost = true;
this.ResumeLayout(false);
}
#endregion
private AppListPanel applistpanelMenu;
private AppListPanel applistpanelCitrix;
private AppListPanel applistpanelFavorites;
private AppListPanel applistpanelAdmin;
private AppListPanel applistpanelUser;
}
}

647
GFATask/Forms/FormMain.cs Normal file
View File

@@ -0,0 +1,647 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public partial class FormMain : FormEx
{
/// <summary>
/// Gibt den aktuell fokusierten Bildschirm aus, auf dem sich der GFA-Task befindet
/// </summary>
private Screen currentscreen = null;
/// <summary>
/// Darstellung des Aktionsbereichs des GFA-Task
/// </summary>
Rectangle actionregion = new Rectangle();
/// <summary>
/// Gibt die absoluten Y-Koordinaten für das Aus[0]- und Einblenden[1] an
/// </summary>
private int[] start_stop_y = new int[2];
/// <summary>
/// Speichert den Wert einer einzelnen Einheit ab, die den GFA-Task parallel zum hoch- und runterfahren ein- und ausblendet.
/// Damit endet der Ein- und Ausblendevorgang zeitgleich mit dem hoch- und runterfahren
/// </summary>
private double opacitystep;
private int _actionregionheight = 1;
/// <summary>
/// Zeichenbreite der Aktionslinie des Hauptfensters
/// </summary>
public int ActionRegionHeight
{
get => _actionregionheight; set
{
_actionregionheight = value;
this.SetActionRegion();
this.Invalidate();
}
}
public FormMain()
{
if (Config.User.ErrorHandle)
Log.EventLog.StartLoggingUI(Config.Main.LoggerAppPath, "");
Log.EventLog.SetAutoHandleException(true);
#region Erstellung der Forms zur Laufzeit / in der selben AppDomain
Forms.Main = this;
Forms.Info = new FormInfo();
Forms.Groups = new FormGroups();
Forms.Settings = new FormSettings();
Forms.Administration = new FormAdmin();
Forms.AppCreator = new FormAppCreator();
Forms.AppButtonGroup = new FormAppButtonGroup();
#endregion
InitializeComponent();
this.UseNewsFeeds();
Accumulations.Controls(this).Reverse().OfType<AppListPanel>().ToList().ForEach(applistpanel =>
{
XObjects.AllAppListPanels.Add(applistpanel);
});
#region Configs
try
{
// Lädt das Layout des GFATask
this.SetDefaultDesign();
this.Size = Config.User.Window.Size.Height < this.MinimumSize.Height ? new Size(Config.User.Window.Size.Width, this.MinimumSize.Height) : Config.User.Window.Size;
_actionregionheight = Config.User.Window.ActionRegionHeight;
this.SetStartValue();
}
catch (Exception ex)
{
Log.EventLog.Write("Auslesefehler des Layouts", LogClassification.CriticalError, ex);
}
try
{
// Lädt die Größe des GFATask
XObjects.Delay = new Delay(Config.User.NecessaryClick ? 0 : Config.User.Delay.Show, Config.User.Delay.Hide, Config.User.Delay.Speed == 100 ? 99 : Config.User.Delay.Speed, start_stop_y[0], start_stop_y[1]);
XObjects.Delay.ValueChanged += Delay_ValueChanged;
this.SetOpacityStep();
}
catch (Exception ex)
{
Log.EventLog.Write("Delay nicht erstellt", LogClassification.CriticalError, ex);
}
try
{
// Richtet den GFATask am Bildschirm aus
this.DesktopAlign();
}
catch (Exception ex)
{
Log.EventLog.Write("Fehler in GFATask-Koordinaten", LogClassification.MediumError, ex);
}
#endregion
#region AppListPanels / Apperstellung
// Richtet im Falle einer Falschsortierung die AppListPanels richtig aus
this.Controls.SetChildIndex(applistpanelMenu, 4);
this.Controls.SetChildIndex(applistpanelCitrix, 3);
this.Controls.SetChildIndex(applistpanelFavorites, 2);
this.Controls.SetChildIndex(applistpanelAdmin, 1);
this.Controls.SetChildIndex(applistpanelUser, 0);
// Lädt die Größe der entsprechenden Appliste aus der Config.User Datei
XObjects.AllAppListPanels.ForEach(panel =>
{
try
{
panel.Height = Accessor.GetListProperties(panel.AppType).Height;
}
catch (Exception ex)
{
Log.EventLog.Write(string.Format("Größenfehler in AppListPanel {0}", panel.Tag.ToString().First().ToString() + panel.Tag.ToString().Skip(1).ToString().ToLower()), LogClassification.CriticalError, ex);
}
});
this.CreateAppListPanels();
Accessor.SetLastAppListPanel();
#endregion
#region Active Directory Groups
try
{
// Lädt die Active Directory-Gruppen in das FormGroup
Forms.Groups.Loading();
}
catch (Exception ex)
{
Log.EventLog.Write("AD Gruppen konnten nicht ausgelesen werden", LogClassification.CriticalError, ex);
}
#endregion
#region Systemkontextmenü
this.RemoveSysMenuItem(SystemContextMenuEntry.Maximieren | SystemContextMenuEntry.Minimieren | SystemContextMenuEntry.Schließen | SystemContextMenuEntry.Seperator);
this.AddSysMenuItem(new ToolStripMenuItem("Meine Gruppen", null, (sender, e) => Accessor.OpenForm("Groups")));
this.AddSysMenuItem(new ToolStripMenuItem("Info", null, (sender, e) => { SystemApps.Info(out _); }));
this.InsertSysMenuItem(2, new ToolStripMenuItem("Einstellungen", null, (sender, e) => { SystemApps.Settings(out _); }));
this.InsertSysMenuItem(3, new ToolStripSeparator());
this.InsertSysMenuItem(4, new ToolStripMenuItem("Konfiguration sichern", null, (sender, e) => { SystemApps.Backup(out _); }));
this.InsertSysMenuItem(5, new ToolStripMenuItem("Konfiguration laden", null, (sender, e) => { SystemApps.LoadBackup(out _); }));
this.InsertSysMenuItem(6, new ToolStripSeparator());
Task.Run(async delegate
{
if (await XObjects.IsADGroupFinish)
{
if (AD.Groups.Select(group => group.Name).Contains(Config.Main.Administration.ActiveDirectoryGroup))
{
Forms.Main.Invoke(new MethodInvoker(delegate
{
this.InsertSysMenuItem(7, new ToolStripMenuItem("Administration", null, (sender, e) => { Accessor.OpenForm("Administration"); }));
this.InsertSysMenuItem(8, new ToolStripSeparator());
this.InsertSysMenuItem(this.SysContextMenu.Items.Count, new ToolStripMenuItem("Beenden", null, (sender, e) => { SystemApps.Kill(out _); }));
}));
}
}
});
this.InsertSysMenuItem(this.SysContextMenu.Items.Count, new ToolStripMenuItem("Neustart", null, (sender, e) => { SystemApps.Restart(out _); }));
#endregion
#region Globale Hooks
try
{
// Installiert die Mouse-Hooks
Hooks.Mouse.Install();
Hooks.Mouse.MouseMove += Hooks.Mouse_Move;
Hooks.Mouse.LeftButtonDown += Hooks.Mouse_Up;
Hooks.Mouse.RightButtonDown += Hooks.Mouse_Up;
}
catch (Exception ex)
{
Log.EventLog.Write("Konnte Mouse-Hook nicht installieren", LogClassification.Crash, ex);
throw;
}
try
{
// Installiert die Tastatur-Hooks für die System-Apps und die SearchBox
// Fängt die Tastenkombinationen ab, sodass sie für Windows nicht mehr erreichbar sind, solange das Programm läuft
Hooks.KeyBoard.Interceptor.RegisterHotKey(Modifier.CTRL, Keys.F1, "info");
Hooks.KeyBoard.Interceptor.RegisterHotKey(Modifier.CTRL, Keys.F2, "settings");
Hooks.KeyBoard.Interceptor.RegisterHotKey(Modifier.CTRL, Keys.F3, "admin");
Hooks.KeyBoard.Interceptor.KeyPressed += Hooks.KeyBoard_Intercept_KeyPress;
}
catch (Exception ex)
{
Log.EventLog.Write("HotKeys konnten nicht registriert werden", LogClassification.MediumError, ex);
}
#endregion
}
/// <summary>
/// Erstellt die App- und GoupButtons in den AppListPanels
/// </summary>
public void CreateAppListPanels()
{
try
{
Creator.AppListPanel(applistpanelMenu, AppLists.Menu);
}
catch (Exception ex)
{
Log.EventLog.Write("Apps in Menü-Liste nicht erstellt", LogClassification.CriticalError, ex);
}
try
{
Creator.AppListPanel(applistpanelCitrix, AppLists.Citrix);
}
catch (Exception ex)
{
Log.EventLog.Write("Apps in Citrix-Liste nicht erstellt", LogClassification.CriticalError, ex);
}
try
{
Creator.AppListPanel(applistpanelFavorites, AppLists.Favorites);
//Creator.AppListPanel(applistpanelFavorites, AppLists.Favorites);
}
catch (Exception ex)
{
Log.EventLog.Write("Apps in Favoriten-Liste nicht erstellt", LogClassification.CriticalError, ex);
}
try
{
Creator.AppListPanel(applistpanelAdmin, AppLists.Admin);
}
catch (Exception ex)
{
Log.EventLog.Write("Apps in Admin-Liste nicht erstellt", LogClassification.CriticalError, ex);
}
try
{
Creator.AppListPanel(applistpanelUser, AppLists.User);
}
catch (Exception ex)
{
Log.EventLog.Write("Apps in User-Apps-Liste nicht erstellt", LogClassification.CriticalError, ex);
}
}
/// <summary>
/// Richtet den GFA-Task mittig am oberen Rand des angegebenen Bildschirms aus
/// </summary>
public void DesktopAlign()
{
try
{
this.SetStartValue();
this.DesktopLocation = new Point(Desktop.Anchor(this, currentscreen, DesktopAnchor.Top).X, start_stop_y[0]);
}
catch (Exception ex)
{
Log.EventLog.Write("Ausrichtungsfehler am Bildschirm", LogClassification.CriticalError,
new Exception(string.Format("{0}\n\n{1}", "Der Bildschirm auf dem der GFA-Task ausgerichtet werden soll, konnte nicht gefunden werden.", ex.Message), ex.InnerException));
//if (Notify.Show("Der ausgewählte Bildschirm konnte nicht gefunden werden. Der GFA-Task wird auf dem Hauptbildschirm dargestellt.\n\n" +
// "Um den eigentlichen Bildschirm wiederherzustellen, öffnen Sie die App \"Einstellungen\" in der Menüliste und wählen dort einen geeigneten Bildschirm aus", NotifyButtons.OK, NotifyType.Message, Designer.Notify(300, 200), null, "SelfService").Result == DialogResult.OK)
//{
// int primary_id = Array.IndexOf(Screen.AllScreens, Screen.AllScreens.First(scr => scr.Primary)) + 1;
// this.MaximumSize = Screen.PrimaryScreen.WorkingArea.Size;
// this.DesktopLocation = Desktop.Anchor(this, primary_id, DesktopAnchor.Top, (int)-XObjects.Delay.StartValue);
// Config.User.Screen = Screen.AllScreens[ primary_id -1].DeviceName;
// JSON.Save(JSONConfig.User);
//}
}
XObjects.Delay.Decrease();
}
/// <summary>
/// Lädt die Symbole der internationalen Welttage, abhängig von den aktivierten Welttages-Zeiträumen im Administrationsbereich
/// </summary>
public void UseNewsFeeds()
{
// Der Programmname mit dynamischer Versionierung
this.Text = $"{InfoClass.Program}";
// Ist heute mindestens ein internationaler Welttag aktiviert
if (Config.NewsFeeds.Exists(this.GetCurrentNewsFeed()))
{
// Liest alle heutigen internationalen Welttage aus der worldday.json aus
var newsfeeds = Config.NewsFeeds.FindAll(this.GetCurrentNewsFeed());
newsfeeds.ForEach(newsfeed => this.Text += $" | {newsfeed.Title.Replace("\\n", "\n")}");
// Sind heute internationale Welttage aktiv, besitzen diese jedoch keine Symbole, dann wird das Grünflächenamt Logo angezeigt
if (newsfeeds.All(news => news.Icon == null || news.Icon == ""))
{
this.Icon = Icon.FromHandle(new Bitmap(Paths.Icons.Directory + @"\System\GFA.png").GetHicon());
}
else
{
// Ist heute nur ein internationaler Welttag in der worldday.json Datei aktiv, oder gibt es nur ein Symbol, wird dieses angezeigt
if (newsfeeds.Count == 1 || newsfeeds.Count(news => news.Icon != null && news.Icon != "") == 1)
{
this.Icon = Icon.FromHandle(new Bitmap(Paths.NewsFeeds.Icons.Directory + newsfeeds.Find(w => w.Icon != null && w.Icon != "").Icon).GetHicon());
}
else
{
// Sind mehrere aktiv, so werden diese in einem Symbol zusammengeführt
this.Icon = Icon.FromHandle(newsfeeds.Where(w => w.Icon != null && System.IO.File.Exists(Paths.NewsFeeds.Icons.Directory + w.Icon)).Select(w => new Bitmap(Paths.NewsFeeds.Icons.Directory + w.Icon)).ToArray().Merge(this.Icon.Size, 2).GetHicon());
}
}
}
// Sind heute keine internationalen Welttage aktiv, dann wird das Grünflächenamt Logo angezeigt
else
{
this.Text = $"{InfoClass.Program} | Herzlich Willkommen";
this.Icon = Icon.FromHandle(new Bitmap(Paths.Icons.Directory + @"\System\GFA.png").GetHicon());
}
}
/// <summary>
/// Berechnet einen Schritt um beim Abschluss der Delay Funktion den richtigen Transparenzwert zu erhalten
/// </summary>
public void SetOpacityStep() =>
opacitystep = XObjects.Delay.GetSteps(Config.User.Window.Opacity - .5D);
/// <summary>
/// Definiert die Start- und Stop-Y-Koordinate für das Erscheinen und Ausblenden des GFATask
/// </summary>
public void SetStartValue()
{
// Wenn es den Bildschirm nicht gibt, dann soll der Primäre genommen werden,
// ansonsten wird geprüft, ob der ausgewählte Bildschirm den obersten Punkt aller Bildschirme enthält.
// Wenn nicht, wird der Bildschirm mit dem gerinsten Y-Koordinaten-Wert genutzt
//if(Config.User.Screen == "DYNAMIC")
//{
// currentscreen = Screen.FromPoint(Cursor.Position);
//}
//else
//{
if (!Screen.AllScreens.ToList().Exists(scr => scr.DeviceName.Replace(@"\\.\", "") == Config.User.Screen))
{
currentscreen = Screen.PrimaryScreen;
}
else
{
Screen tempscreen = Screen.AllScreens.ToList().Find(scr => scr.DeviceName.Replace(@"\\.\", "") == Config.User.Screen);
if (tempscreen.Bounds.Y != Screen.AllScreens.Min(scr => scr.Bounds.Y) && (tempscreen.Bounds.Right <= Screen.PrimaryScreen.Bounds.Left && tempscreen.Bounds.Left <= Screen.PrimaryScreen.Bounds.Right))
{
currentscreen = Screen.AllScreens.ToList().Find(scr => scr.Bounds.Y == Screen.AllScreens.Min(s => s.Bounds.Y));
}
else
{
currentscreen = tempscreen;
}
}
//currentscreen = Screen.AllScreens.ToList().Find(scr => scr.DeviceName.Replace(@"\\.\", "") == Config.User.Screen) == null ?
//Screen.PrimaryScreen :
//Screen.AllScreens.ToList().Find(scr => scr.DeviceName.Replace(@"\\.\", "") == Config.User.Screen).Bounds.Y == Screen.AllScreens.Min(scr => scr.Bounds.Y) ?
//Screen.AllScreens.ToList().Find(scr => scr.DeviceName.Replace(@"\\.\", "") == Config.User.Screen) :
//Screen.AllScreens.ToList().Find(scr => scr.Bounds.Y == Screen.AllScreens.Min(s => s.Bounds.Y));
//}
start_stop_y = new int[]
{
Screen.PrimaryScreen.Bounds.Top +currentscreen.Bounds.Top - (Config.User.Window.Size.Height < this.MinimumSize.Height ? this.MinimumSize.Height : this.Height) + this.GripSize +_actionregionheight - this.BorderWidth,
Screen.PrimaryScreen.Bounds.Top +currentscreen.Bounds.Top - this.GripSize - (this.BorderWidth == 0 ? 1 : this.BorderWidth)
};
//start_stop_y = new int[]
//{
// (int)Math.Floor((currentscreen.Bounds.Y) * (decimal)Win32API.GetScalingFactor(currentscreen)) - (Config.User.Window.Size.Height < this.MinimumSize.Height ? this.MinimumSize.Height : this.Height) + this.GripSize +_actionregionheight - this.BorderWidth,
// (int)Math.Floor((currentscreen.Bounds.Y) * (decimal)Win32API.GetScalingFactor(currentscreen)) - this.GripSize - (this.BorderWidth == 0 ? 1 : this.BorderWidth)
//};
// Eingeklappte Y-Koordinate
XObjects.Delay.StartValue = start_stop_y[0];
// Ausgeklappte Y-Koordinate
XObjects.Delay.EndValue = start_stop_y[1];
this.SetActionRegion();
this.SetMaximumSize();
}
/// <summary>
/// Anhand der Mindesthöhe der AppListPanels Steuerelemente wird mit dieser Methode die Mindesthöhe des GFATask berechnet
/// </summary>
public void SetMinimumSize()
{
this.MinimumSize = new Size(200, XObjects.AllAppListPanels.Where(panel => panel.Showing).Sum(panel => panel.IsLast ? panel.MinimumSize.Height : panel.Height) + this.Padding.Vertical + _actionregionheight);
this.Size = Config.User.Window.Size.Height < this.MinimumSize.Height ? new Size(Config.User.Window.Size.Width, this.MinimumSize.Height + _actionregionheight) : Config.User.Window.Size;
}
/// <summary>
/// Richtet sich nach der Auflösung des Bildschirms. Der GFATask kann bis maximal zur Taskleiste, abzüglich der GripSize vergrößert werden
/// </summary>
public void SetMaximumSize()
{
try
{
this.MaximumSize = new Size(currentscreen.WorkingArea.Width - (this.GripSize * 2), start_stop_y[1] + currentscreen.WorkingArea.Height - this.GripSize);
}
catch (Exception ex)
{
Log.EventLog.Write("Fehler beim skalieren der maximalen Größe", LogClassification.MediumError, ex);
}
}
/// <summary>
/// Darstellung des farbigen Elements, welches im unteren Bereich des GFATask dargestellt wird
/// </summary>
public void SetActionRegion()
{
// Erstellt das zu zeichnende farbige Element
actionregion = new Rectangle(this.borderbounds.Left, this.borderbounds.Bottom - _actionregionheight + this.BorderWidth, this.borderbounds.Width + this.BorderWidth, _actionregionheight);
}
/// <summary>
/// Führt das Ein- und Ausblenden des GFATask aus. In der Hook-Klasse wird die Methode angestoßen
/// </summary>
public void Delay_ValueChanged(object sender, DelayEventArgs e)
{
switch (e.Direction)
{
case Delay.Prevent.Increase:
this.Invoke(new MethodInvoker(delegate
{
if (this.DesktopLocation.Y < (int)XObjects.Delay.EndValue - XObjects.Delay.Steps)
{
this.DesktopLocation = new Point(this.DesktopLocation.X, this.DesktopLocation.Y + (int)Math.Ceiling(e.Step));
this.Opacity += opacitystep;
}
else
{
this.DesktopLocation = new Point(this.DesktopLocation.X, (int)XObjects.Delay.EndValue);
this.Opacity = Config.User.Window.Opacity;
}
}));
break;
case Delay.Prevent.Decrease:
if (this.Created)
{
this.Invoke(new MethodInvoker(delegate
{
if (this.DesktopLocation.Y > (int)XObjects.Delay.StartValue + XObjects.Delay.Steps)
{
this.DesktopLocation = new Point(this.DesktopLocation.X, this.DesktopLocation.Y - (int)Math.Ceiling(e.Step));
this.Opacity -= opacitystep;
}
else
{
this.DesktopLocation = new Point(this.DesktopLocation.X, (int)XObjects.Delay.StartValue);
this.Opacity = .5;
}
}));
}
break;
}
if (e.CurrentCount == XObjects.Delay.MaxCounts)
{
this.Resizable = true;
this.DesktopLocation = new Point(this.DesktopLocation.X, (int)XObjects.Delay.EndValue);
}
else if (e.CurrentCount == 0)
{
this.Resizable = false;
this.DesktopLocation = new Point(this.DesktopLocation.X, (int)XObjects.Delay.StartValue);
this.Invalidate();
}
}
/// <summary>
/// Überprüft, ob für heute ein internationaler Welttag in den Neuigkeiten newsfeeds.json vorhanden ist
/// </summary>
/// <returns></returns>
private Predicate<Models.NewsFeed> GetCurrentNewsFeed()
{
return new Predicate<Models.NewsFeed>(feed =>
{
if (feed.Begin.Day > DateTime.DaysInMonth(DateTime.Now.Year, feed.Begin.Month))
{
feed.Begin.Day = DateTime.DaysInMonth(DateTime.Now.Year, feed.Begin.Month);
JSON.Save(JSONConfig.NewsFeeds);
}
if (feed.End.Day > DateTime.DaysInMonth(DateTime.Now.Year, feed.End.Month))
{
feed.End.Day = DateTime.DaysInMonth(DateTime.Now.Year, feed.End.Month);
JSON.Save(JSONConfig.NewsFeeds);
}
return feed.Enable && Verifying.BetweenDate(new DateTime(DateTime.Now.Year, feed.Begin.Month, feed.Begin.Day), new DateTime(DateTime.Now.Year, feed.End.Month, feed.End.Day));
});
}
/// <summary>
/// Bei einem Drag'n Drop-Vorgang wird der GFA-Task sofort ausgeklappt
/// </summary>
/// <param name="drgevent"></param>
protected override void OnDragEnter(DragEventArgs drgevent)
{
XObjects.Delay.Waiting = new Delay.DelayTime(0, Config.User.Delay.Hide);
XObjects.Delay.Increase();
base.OnDragEnter(drgevent);
this.Invalidate();
}
protected override void OnSizeChanged(EventArgs e)
{
this.Update();
if (this.Created)
XObjects.AllAppListPanels.ForEach(applist => applist.FlowContent.Update());
base.OnSizeChanged(e);
}
/// <summary>
/// Beim Ändern der Schriftart, wird die neue minimale Höhe ermittelt
/// </summary>
/// <param name="e"></param>
protected override void OnFontChanged(EventArgs e)
{
base.OnFontChanged(e);
this.SetMinimumSize();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
#region Startet die Ladeanimation
try
{
// Animiert das Ladefenster zu Beginn der App. Schließt dieses, sobald in der AppListe all Apps geladen wurden
XObjects.LoadingPanel.Location = new Point(this.Padding.Left, this.Padding.Top);
XObjects.LoadingPanel.Size = new Size(this.Width - this.Padding.Horizontal, this.Height - this.Padding.Vertical - _actionregionheight);
this.Controls.Add(XObjects.LoadingPanel);
}
catch (Exception ex)
{
Log.EventLog.Write("Kann Ladeanimation nicht starten", LogClassification.LowError, ex);
}
#endregion
this.SetMinimumSize();
this.SetStartValue();
XObjects.FrontEndRefresh = new FrontEndRefresh<GFATaskStream>(Paths.FrontEndRefresh.FullName) { SelfUpdate = false };
if(Config.Main.Administration.RemoteFrontEndUpdate)
XObjects.FrontEndRefresh.Start();
XObjects.FrontEndRefresh.Updated += FrontEndRefreshExecution.Updated;
XObjects.FrontEndRefresh.Error += FrontEndRefreshExecution.OnError;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.FillPath(new SolidBrush(Config.Main.Colors.Window.Action), actionregion.ToRoundedRectangle(this.Radius, RectangleCorners.BottomLeft | RectangleCorners.BottomRight));
//e.Graphics.FillRectangle(Brushes.AliceBlue, RegionBounds);
}
protected override void WndProc(ref Message m)
{
// Beginnt mit dem Vergrößerungsprozess des GFA-Task
if (m.Msg == (int)WM.ENTERSIZEMOVE)
{
XObjects.AllAppListPanels.ForEach(applist => applist.DoubleBuffer(true));
XObjects.Delay.Increase();
}
// Beendet den Vergrößerungsprozess des GFA-Task
if (m.Msg == (int)WM.EXITSIZEMOVE)
{
XObjects.AllAppListPanels.ForEach(applist => applist.DoubleBuffer(false));
this.DesktopLocation = new Point(Desktop.Anchor(this, currentscreen, DesktopAnchor.Top).X, start_stop_y[1]);
//this.Invoke(new MethodInvoker(delegate { this.DesktopAnchor = new Point(Desktop.Anchor(this, DesktopAnchor.Top, -this.GripSize).X, start_stop_y[1]); }));
Config.User.Window.Size = this.Size;
JSON.Save(JSONConfig.User);
Accessor.SetLastAppListPanel();
this.SetMinimumSize();
this.SetStartValue();
this.Invalidate(true);
}
base.WndProc(ref m);
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
}
else
{
Environment.Exit(Environment.ExitCode);
}
base.OnFormClosing(e);
}
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.ExStyle |= (int)WS_EX.WS_EX_TOOLWINDOW | (int)WS_EX.WS_EX_TOPMOST;
return cp;
}
}
}
}

120
GFATask/Forms/FormMain.resx Normal file
View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

1323
GFATask/Forms/FormSettings.Designer.cs generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,838 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public partial class FormSettings : FormEx
{
/// <summary>
/// Gibt den aktuell fokusierten Bildschirm aus, auf dem sich das Einstellungsfenster befindet.
/// </summary>
Screen currentscreen = null;
/// <summary>
/// Eine Auflistung von gezeichneten Rechtecken, die in Größe, Farbe und Form einem AppButton entsprechen und ringsum um die TestApp angefügt werden
/// </summary>
Rectangle[] dummyapps = new Rectangle[0];
/// <summary>
/// Eine Auflistung der veränderten Steuerelemente. Dadurch lassen sich einzelne Änderungen rückgängig machen
/// </summary>
public List<TableControlChange> ControlChanges { get; } = new List<TableControlChange>();
/// <summary>
/// Erstellt die ToolTips für die Steuerelemente
/// </summary>
private void SetToolTips()
{
tooltip.SetDefaultDesign();
switch_darkmode.MouseEnter += (sender, e) => tooltip.Show("Die Farben des GFATask werden umgekehrt und Text wird mit weißer Schrift auf schwarzem Hintergrund gezeigt", sender as Control, new Point(0, (sender as Control).Height));
switch_group_admin .MouseEnter += (sender, e) => tooltip.Show("Sollen die Apps in der Administrator-Liste gruppiert werden", sender as Control, new Point(0, (sender as Control).Height));
switch_show_admin.MouseEnter += (sender, e) => tooltip.Show("Soll die Administrator-Liste angezeigt werden", sender as Control, new Point(0, (sender as Control).Height));
switch_group_citrix.MouseEnter += (sender, e) => tooltip.Show("Sollen die Apps in der Citrix-Liste gruppiert werden", sender as Control, new Point(0, (sender as Control).Height));
switch_show_citrix.MouseEnter += (sender, e) => tooltip.Show("Soll die Citrix-Liste angezeigt werden", sender as Control, new Point(0, (sender as Control).Height));
switch_group_favorites.MouseEnter += (sender, e) => tooltip.Show("Sollen die Apps in der Favoriten-Liste gruppiert werden", sender as Control, new Point(0, (sender as Control).Height));
switch_show_favorites.MouseEnter += (sender, e) => tooltip.Show("Soll die Favoriten-Liste angezeigt werden", sender as Control, new Point(0, (sender as Control).Height));
switch_group_menu.MouseEnter += (sender, e) => tooltip.Show("Sollen die Apps in der Menü-Liste gruppiert werden", sender as Control, new Point(0, (sender as Control).Height));
switch_group_user.MouseEnter += (sender, e) => tooltip.Show("Sollen die Apps in der Apps-Liste gruppiert werden", sender as Control, new Point(0, (sender as Control).Height));
switch_show_user.MouseEnter += (sender, e) => tooltip.Show("Soll die Apps-Liste angezeigt werden", sender as Control, new Point(0, (sender as Control).Height));
numAppBorder.MouseEnter += (sender, e) => tooltip.Show("Zeichnet einen Rahmen um die Apps", sender as Control, new Point(0, (sender as Control).Height));
numAppHeight.MouseEnter += (sender, e) => tooltip.Show("Verändert die Apps in der Höhe", sender as Control, new Point(0, (sender as Control).Height));
numAppRadius.MouseEnter += (sender, e) => tooltip.Show("Rundet die App ab", sender as Control, new Point(0, (sender as Control).Height));
numAppImageRadius.MouseEnter += (sender, e) => tooltip.Show("Rundet den Symbolhintergrund innerhalb der App ab", sender as Control, new Point(0, (sender as Control).Height));
numAppMargin.MouseEnter += (sender, e) => tooltip.Show("Verändert den Abstand zwischen den Apps", sender as Control, new Point(0, (sender as Control).Height));
numAppWidth.MouseEnter += (sender, e) => tooltip.Show("Verändert die Apps in der Breite", sender as Control, new Point(0, (sender as Control).Height));
numDelayHide.MouseEnter += (sender, e) => tooltip.Show("Wartet die angegebene Zeit in Millisekunden, bis der GFA-Task ausgeblendet wird", sender as Control, new Point(0, (sender as Control).Height));
numDelayShow.MouseEnter += (sender, e) => tooltip.Show("Wartet die angegebene Zeit in Millisekunden, bis der GFA-Task eingeblendet wird." +
"\nWird ignoriert wenn der GFA-Task per Klick eingeblendet wird", sender as Control, new Point(0, (sender as Control).Height));
numDelaySpeed.MouseEnter += (sender, e) => tooltip.Show("Verändert die Geschwindigkeit des GFA-Task die er zum Ein- und Ausblenden benötigt", sender as Control, new Point(0, (sender as Control).Height));
numFontSize.MouseEnter += (sender, e) => tooltip.Show("Verändert die Schriftgröße des GFA-Task", sender as Control, new Point(0, (sender as Control).Height));
numGrouplistapps.MouseEnter += (sender, e) => tooltip.Show("Wenn eine App-Gruppe geöffnet wird, bestimmt dieser Wert die Anzahl der Apps in einer Zeile.\n" +
"Kann vom eigentlichen Wert abweichen, wenn die Anzahl der gruppierten Apps nicht an die angegebene Zahl heranreicht,\n" +
"oder die Breite der Apps nicht der Mindestbreite des Gruppenfensters entspricht", sender as Control, new Point(0, (sender as Control).Height));
numOpacity.MouseEnter += (sender, e) => tooltip.Show("Verändert die maximale Transparenz des GFA-Task nachdem diese komplett eingeblendet wird", sender as Control, new Point(0, (sender as Control).Height));
switchNecessaryClick.MouseEnter += (sender, e) => tooltip.Show("Benötigt zum Anzeigen des GFA-Task einen Mausklick am oberen Bildschirmrand", sender as Control, new Point(0, (sender as Control).Height) );
cbAppSorting.MouseEnter += (sender, e) => tooltip.Show("Sortiert die Apps in den Listen nach" +
"\n\t- Beliebtheit: Sortiert die Apps nach der Nutzung" +
"\n\t- Name: Sortiert die Apps alphabetisch aufsteigend", sender as Control, new Point(0, (sender as Control).Height) );
numActionRegionWidth.MouseEnter += (sender, e) => tooltip.Show("Setzt die Breite der Linie, am unteren Rand des GFATask", sender as Control, new Point(0, (sender as Control).Height));
cbScreen.MouseEnter += (sender, e) => tooltip.Show("Wählt den Bildschirm aus, auf dem der GFA-Task angezeigt werden soll", sender as Control, new Point(0, (sender as Control).Height));
switchOnlyImage.MouseEnter += (sender, e) => tooltip.Show("Die App wird mit Bild, aber ohne Text angezeigt", sender as Control, new Point(0, (sender as Control).Height));
}
/// <summary>
/// Zeichnet einen weichen transparenten Übergang
/// </summary>
/// <param name="rec">Der Bereich</param>
/// <param name="fromcolor">100% Transparenz</param>
/// <param name="tocolor">0% Transparenz</param>
/// <param name="wrap">Richtung des Übergangs</param>
/// <returns></returns>
private LinearGradientBrush SetBrush(Rectangle rec, Color fromcolor, Color tocolor, WrapMode wrap) =>
new LinearGradientBrush(new Rectangle(0, 0, rec.Width <= 0 ? 1 : rec.Width, (int)(rec.Height * .5) <= 0 ? 1 : (int)(rec.Height * .5)), fromcolor, tocolor, 0, false) { WrapMode = wrap };
#region Erstellt die Bindings und EventHandler
/// <summary>
/// Erstellt die Bindings und EventHandler für die Listeneinstellungen
/// </summary>
private void CreateAppListBindings()
{
switch_group_menu.Checked = Config.User.Lists.Menu.Grouping;
switch_group_menu.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.Menu, "Grouping", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_Menu_Grouping);
};
switch_group_citrix.Checked = Config.User.Lists.Citrix.Grouping;
switch_group_citrix.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.Citrix, "Grouping", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_Citrix_Grouping);
};
switch_show_citrix.Checked = Config.User.Lists.Citrix.Show;
switch_show_citrix.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.Citrix, "Show", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_Citrix_Showing);
};
switch_group_favorites.Checked = Config.User.Lists.Favorites.Grouping;
switch_group_favorites.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.Favorites, "Grouping", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_Favorites_Grouping);
};
switch_show_favorites.Checked = Config.User.Lists.Favorites.Show;
switch_show_favorites.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.Favorites, "Show", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_Favorites_Showing);
};
Task.Run(async delegate
{
switch_group_admin.Enabled = (await XObjects.IsAdmin);
switch_show_admin.Enabled = (await XObjects.IsAdmin);
switch_group_admin.Checked = Config.User.Lists.Admin.Grouping;
switch_group_admin.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.Admin, "Grouping", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_Admin_Grouping);
};
switch_show_admin.Checked = Config.User.Lists.Admin.Show;
switch_show_admin.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.Admin, "Show", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_Admin_Showing);
};
});
switch_group_user.Checked = Config.User.Lists.User.Grouping;
switch_group_user.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.User, "Grouping", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_User_Grouping);
};
switch_show_user.Checked = Config.User.Lists.User.Show;
switch_show_user.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Lists.User, "Show", (sender as SwitchButton), (sender as SwitchButton).Checked, DoIt_User_Showing);
};
numGrouplistapps.Value = Config.User.GroupListColumnCount;
numGrouplistapps.ValueChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User, "GroupListColumnCount", (sender as NumericEx), (int)(sender as NumericEx).Value, DoIt_GroupListColumnCount);
};
}
/// <summary>
/// Erstellt die Bindings und EventHandler für die erweiterten Einstellungen
/// </summary>
private void CreateExtendedBindings()
{
cbAppSorting.DataSource = new List<object>(new object[] { new { name = "Name", value = false }, new { name = "Beliebtheit", value = true } });
cbAppSorting.DisplayMember = "name";
cbAppSorting.ValueMember = "value";
cbAppSorting.SelectedValue = Config.User.Prevalence;
cbAppSorting.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.User, "Prevalence", cbAppSorting, (bool)cbAppSorting.SelectedValue, DoIt_Prevalence); };
numOpacity.Value = (decimal)Config.User.Window.Opacity;
numOpacity.ValueChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.User.Window, "Opacity", numOpacity, (double)(sender as NumericUpDown).Value, DoIt_Opacity); };
numActionRegionWidth.Value = (decimal)Config.User.Window.ActionRegionHeight;
numActionRegionWidth.ValueChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.User.Window, "ActionRegionHeight", numActionRegionWidth, (int)(sender as NumericUpDown).Value, DoIt_ActionRegionWidth); };
numFontSize.Value = (decimal)Config.User.Window.FontSize;
numFontSize.ValueChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.User.Window, "FontSize", numFontSize, (float)(sender as NumericUpDown).Value, DoIt_FontSize); } ;
switch_darkmode.Checked = Config.User.DarkMode;
switch_darkmode.CheckStateChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.User, "DarkMode", switch_darkmode, bool.Parse(switch_darkmode.Checked.ToString()), DoIt_DarkMode); };
this.LoadDisplays();
cbScreen.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.User, "Screen", cbScreen, cbScreen.Text.Replace(" [Dieser Monitor]","").Replace(" ",""), DoIt_ScreenChange); };
cbScreen.DropDown += (sender , e) => {
if (this.Created)
cbScreen.SelectedIndex = Screen.AllScreens.Select(scr => scr.DeviceName.Substring(scr.DeviceName.LastIndexOf("\\") + 1)).ToList().FindIndex(scr => scr == Config.User.Screen);
};
cbScreen.SelectedIndex = Screen.AllScreens.Select(scr => scr.DeviceName.Substring(scr.DeviceName.LastIndexOf("\\") + 1)).ToList().FindIndex(scr => scr == Config.User.Screen);
}
/// <summary>
/// Erstellt die Bindings und EventHandler für die Verzögerungseinstellungen
/// </summary>
public void CreateMouseFunctions()
{
switchNecessaryClick.Checked = Config.User.NecessaryClick;
switchNecessaryClick.CheckStateChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User, "NecessaryClick", switchNecessaryClick, switchNecessaryClick.Checked, DoIt_NecessaryClick);
};
numDelayShow.Value = Config.User.NecessaryClick ? 0 : (decimal)Config.User.Delay.Show;
numDelayShow.ValueChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Delay, "Show", numDelayShow, (float)(sender as NumericUpDown).Value, DoIt_DelayShow);
};
numDelayHide.Value = (decimal)Config.User.Delay.Hide;
numDelayHide.ValueChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Delay, "Hide", (Control)sender, (float)(sender as NumericUpDown).Value, DoIt_DelayHide);
};
numDelaySpeed.Value = Config.User.Delay.Speed;
numDelaySpeed.ValueChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Delay, "Speed", numDelaySpeed, (int)(sender as NumericUpDown).Value, DoIt_Speed);
};
}
/// <summary>
/// Erstellt die Bindings und EventHandler für die App-Darstellung
/// </summary>
private void CreateDeciptionBindings()
{
abtnTestApp.ActualWidth = Config.User.Apps.Size.Width;
abtnTestApp.SizeChanged += abtnTestApp_SizeChanged;
abtnTestApp.ImageOnly = Config.User.Apps.ImageOnly;
abtnTestApp.Invalidate();
switchOnlyImage.Checked = Config.User.Apps.ImageOnly;
switchOnlyImage.CheckStateChanged += (sender, e) =>
{
if (this.Created)
{
numAppWidth.Enabled = !switchOnlyImage.Checked;
abtnTestApp.ImageOnly = switchOnlyImage.Checked;
this.SetTestAppPanel();
XObjects.PreChanging.Add(Config.User.Apps, "ImageOnly", (Control)sender, switchOnlyImage.Checked, DoIt_AppImageOnly);
}
};
numAppWidth.Enabled = !switchOnlyImage.Checked;
numAppWidth.Value = Config.User.Apps.Size.Width;
numAppWidth.Maximum = panelMargin.Width - 2;
numAppWidth.ValueChanged += (sender, e) =>
{
if (this.Created && !Config.User.Apps.ImageOnly)
{
abtnTestApp.Width = (int)numAppWidth.Value;
abtnTestApp.ActualWidth = (int)numAppWidth.Value;
XObjects.PreChanging.Add(Config.User.Apps.Size, "Width", (Control)sender, (int)numAppWidth.Value, DoIt_AppWidth);
}
};
numAppHeight.Value = Config.User.Apps.Size.Height;
numAppHeight.Maximum = panelMargin.Height - 3;
numAppHeight.ValueChanged += (sender, e) =>
{
if (this.Created)
{
abtnTestApp.Height = (int)numAppHeight.Value;
XObjects.PreChanging.Add(Config.User.Apps.Size, "Height", (Control)sender, (int)numAppHeight.Value, DoIt_AppHeight);
}
};
numAppBorder.Value = Config.User.Apps.Border;
numAppBorder.ValueChanged += NumAppBorder_ValueChanged;
numAppBorder.ValueChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Apps, "Border", (Control)sender, (int)numAppBorder.Value, DoIt_AppBorder);
};
numAppRadius.Value = Config.User.Apps.Radius.Button;
numAppRadius.ValueChanged += NumAppRadius_ValueChanged;
numAppRadius.ValueChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Apps.Radius, "Button", (Control)sender, (int)numAppRadius.Value, DoIt_AppRadius);
};
numAppImageRadius.Value = Config.User.Apps.Radius.Button;
numAppImageRadius.ValueChanged += NumAppImageRadius_ValueChanged;
numAppImageRadius.ValueChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Apps.Radius, "Image", (Control)sender, (int)numAppImageRadius.Value, DoIt_AppImageRadius);
};
numAppMargin.Value = Config.User.Apps.Margin;
numAppMargin.ValueChanged += NumAppMargin_ValueChanged;
numAppMargin.ValueChanged += (sender, e) =>
{
if (this.Created) XObjects.PreChanging.Add(Config.User.Apps, "Margin", (Control)sender, (int)numAppMargin.Value, DoIt_AppMargin);
};
panelMargin.Paint += PanelMargin_Paint;
}
#endregion
#region DoIt Methoden
private void DoIt_Prevalence(object value)
{
Config.User.Prevalence = (bool)value;
XObjects.AllAppListPanels.ForEach(panel =>
{
Comparer.SortAllButtons(panel.FlowContent.Controls, Config.User.Prevalence);
});
}
private void DoIt_Opacity(object value)
{
Config.User.Window.Opacity = (double)value;
Config.User.Window.Size = Forms.Main.Size;
Forms.Main.Opacity = (double)value;
Forms.Main.SetOpacityStep();
}
private void DoIt_ActionRegionWidth(object value)
{
Config.User.Window.ActionRegionHeight = (int)value;
Forms.Main.ActionRegionHeight = Config.User.Window.ActionRegionHeight;
Forms.Main.SetStartValue();
Forms.Main.SetOpacityStep();
XObjects.Delay.Increase();
}
private void DoIt_FontSize(object value)
{
try
{
Config.User.Window.FontSize = Convert.ToSingle(value);
Forms.Administration.SetDefaultDesign();
Forms.AppButtonGroup.SetDefaultDesign();
Forms.AppCreator.SetDefaultDesign();
Forms.Groups.SetDefaultDesign();
Forms.Settings.SetDefaultDesign();
Task.Run(delegate
{
Forms.Main.Invoke(new MethodInvoker(delegate
{
Forms.Main.SetDefaultDesign();
Win32API.SendMessage(Forms.Main.Handle, (int)WM.EXITSIZEMOVE, 0, 0);
Forms.Main.SetOpacityStep();
Forms.Main.Invalidate(true);
}));
});
XObjects.AllAppListPanels.ForEach(panel => panel.Invalidate(true));
Config.User.Window.Size = Forms.Main.Size;
}
catch (Exception ex)
{
Log.EventLog.Write("Fehlerhaft Einstellung - FontSize", LogClassification.LowError, ex);
}
}
private void DoIt_DarkMode(object value)
{
typeof(Forms).GetProperties().ToList().ForEach(prop =>
{
FormEx f = (FormEx)prop.GetValue(typeof(Forms));
f.SetDefaultDesign();
});
}
private void DoIt_ScreenChange(object value)
{
Config.User.Screen = value.ToString();
Accessor.SetLastAppListPanel();
Forms.Main.SetMinimumSize();
Forms.Main.SetStartValue();
Forms.Main.DesktopAlign();
}
private void DoIt_GroupListColumnCount(object value)
{
Config.User.GroupListColumnCount = (int)value;
//Config.User = JSON.Read<Models.Config.User>(Paths.UserConfig.FullName);
}
private void DoIt_Menu_Grouping(object value) =>
Creator.AppListPanel(Accessor.GetAppListPanel(AppType.Menu), Accessor.GetAppList(AppType.Menu));
private void DoIt_Citrix_Grouping(object value) =>
Creator.AppListPanel(Accessor.GetAppListPanel(AppType.Citrix), Accessor.GetAppList(AppType.Citrix));
private void DoIt_Favorites_Grouping(object value) =>
Creator.AppListPanel(Accessor.GetAppListPanel(AppType.Favorites), Accessor.GetAppList(AppType.Favorites));
private void DoIt_Admin_Grouping(object value) =>
Creator.AppListPanel(Accessor.GetAppListPanel(AppType.Admin), Accessor.GetAppList(AppType.Admin));
private void DoIt_User_Grouping(object value) =>
Creator.AppListPanel(Accessor.GetAppListPanel(AppType.User), Accessor.GetAppList(AppType.User));
private void DoIt_Citrix_Showing(object value)
{
Accessor.GetAppListPanel(AppType.Citrix).Showing = (bool)value;
Accessor.SetLastAppListPanel();
}
private void DoIt_Favorites_Showing(object value)
{
Accessor.GetAppListPanel(AppType.Favorites).Showing = (bool)value;
Accessor.SetLastAppListPanel();
}
private void DoIt_Admin_Showing(object value)
{
Accessor.GetAppListPanel(AppType.Admin).Showing = (bool)value;
Accessor.SetLastAppListPanel();
}
private void DoIt_User_Showing(object value)
{
Accessor.GetAppListPanel(AppType.User).Showing = (bool)value;
Accessor.SetLastAppListPanel();
}
private void DoIt_Speed(object value)
{
XObjects.Delay.Reset(Config.User.Delay.Show, Config.User.Delay.Hide, XObjects.Delay.StartValue, XObjects.Delay.EndValue, (int)numDelaySpeed.Value);
Forms.Main.SetOpacityStep();
Win32API.SendMessage(Forms.Main.Handle, (int)WM.EXITSIZEMOVE, 0, 0);
}
private void DoIt_NecessaryClick(object value) =>
Forms.Main.SetActionRegion();
private void DoIt_DelayShow(object value)
{
XObjects.Delay.Reset((float)value, Config.User.Delay.Hide, XObjects.Delay.StartValue, XObjects.Delay.EndValue, Config.User.Delay.Speed);
}
private void DoIt_DelayHide(object value)
{
XObjects.Delay.Reset(Config.User.Delay.Show, (float)value, XObjects.Delay.StartValue, XObjects.Delay.EndValue, Config.User.Delay.Speed);
}
private void DoIt_AppBorder(object value)
{
Config.User.Apps.Border = (int)value;
typeof(Forms).GetProperties().ToList().ForEach(prop =>
{
FormEx f = (FormEx)prop.GetValue(typeof(Forms));
f.SetDefaultDesign();
});
XObjects.AllAppListPanels.ForEach(panel =>
panel.FlowContent.Controls.OfType<AppListButton>().ToList().ForEach(button => button.BorderSize = (int)value));
}
private void DoIt_AppRadius(object value)
{
Config.User.Apps.Radius.Button = (int)value;
this.SetDefaultDesign();
XObjects.AllAppListPanels.ForEach(panel =>
panel.FlowContent.Controls.OfType<AnimationButton>().ToList().ForEach(button => button.Radius = (int)value));
Forms.Administration.SetDefaultDesign();
}
private void DoIt_AppImageRadius(object value)
{
Config.User.Apps.Radius.Image = (int)value;
this.SetDefaultDesign();
XObjects.AllAppListPanels.ForEach(panel =>
panel.FlowContent.Controls.OfType<AnimationButton>().ToList().ForEach(button => button.ImageRadius = (int)value));
Forms.Administration.SetDefaultDesign();
}
private void DoIt_AppMargin(object value)
{
Config.User.Apps.Margin = (int)value;
this.SetDefaultDesign();
XObjects.AllAppListPanels.ForEach(panel =>
panel.FlowContent.Controls.OfType<AnimationButton>().ToList().ForEach(button => button.Margin = new Padding((int)value)));
Forms.Administration.SetDefaultDesign();
}
private void DoIt_AppImageOnly(object value)
{
this.SetDefaultDesign();
XObjects.AllAppListPanels.ForEach(panel =>
panel.FlowContent.Controls.OfType<AppListButton>().ToList().ForEach(button =>
{
if (button.GetType() == typeof(GroupButton))
{
((GroupButton)button).ContainedAppButtons.ToList().ForEach(cbtn =>
{
cbtn.ImageOnly = (bool)value;
cbtn.ImageMargin = (bool)value ? 0 : 3;
cbtn.ImageAutoSize = ImageAutoSizeDirection.Height;
cbtn.Invalidate();
});
}
button.ImageOnly = (bool)value;
button.ImageMargin = (bool)value ? 0 : 3;
button.ImageAutoSize = ImageAutoSizeDirection.Height;
button.Invalidate();
}));
Forms.Administration.SetDefaultDesign();
}
private void DoIt_AppWidth(object value)
{
if (!switchOnlyImage.Checked)
Config.User.Apps.Size = new Size((int)value, Config.User.Apps.Size.Height);
this.SetDefaultDesign();
XObjects.AllAppListPanels.ForEach(panel =>
panel.FlowContent.Controls.OfType<AppListButton>().ToList().ForEach(button =>
{
if(button.GetType() == typeof(GroupButton))
{
((GroupButton)button).ContainedAppButtons.ToList().ForEach(cbtn =>
{
cbtn.ActualWidth = (int)value;
cbtn.Width = (int)value;
cbtn.SetDefaultDesign();
});
}
button.ActualWidth = (int)value;
button.Width = (int)value;
button.SetDefaultDesign();
}));
if (Forms.AppButtonGroup.Visible)
Forms.AppButtonGroup.Sizing();
Forms.Administration.SetDefaultDesign();
}
private void DoIt_AppHeight(object value)
{
Config.User.Apps.Size = new Size(Config.User.Apps.Size.Width, (int)value);
this.SetDefaultDesign();
XObjects.AllAppListPanels.ForEach(panel =>
{
panel.FlowContent.Controls.OfType<AppListButton>().ToList().ForEach(button => button.Height = (int)value);
panel.FlowContent.Controls.OfType<GroupButton>().ToList().ForEach(button => button.ContainedAppButtons.ToList().ForEach(cbtn => cbtn.Height = (int)value));
});
if (Forms.AppButtonGroup.Visible)
Forms.AppButtonGroup.Sizing();
Forms.Administration.SetDefaultDesign();
}
#endregion
private void SetTestAppPanel()
{
abtnTestApp.Size = switchOnlyImage.Checked ? new Size((int)numAppHeight.Value, (int)numAppHeight.Value) : Config.User.Apps.Size;
abtnTestApp.Animation = true;
abtnTestApp.Location = new Point((panelMargin.Width / 2) - (abtnTestApp.Width / 2), (panelMargin.Height / 2) - (abtnTestApp.Height / 2));
abtnTestApp.AnimationRegion = AnimationRgn.Both;
abtnTestApp.ImageMargin = switchOnlyImage.Checked ? 0 : 3;
abtnTestApp.ImageAutoSize = ImageAutoSizeDirection.Height;
this.InvalidateDummyApps();
}
public void LoadDisplays()
{
cbScreen.DataSource = Screen.AllScreens.Select(scr => new { key = Array.IndexOf(Screen.AllScreens, scr) + 1, value = $"{scr.DeviceName.Substring(scr.DeviceName.LastIndexOf("\\") + 1)} {(scr.Bounds.Contains(this.Bounds.Location) ? "[Dieser Monitor]" : "")}" }).ToList();
// Fügt das Element DYNAMIC hinzu, was bewirkt, dass der GFATask an dem Bildschirm angeheftet wird, auf dem sich der Mauszeiger befindet - Hat noch nicht so richtig funktioniert
//cbScreen.DataSource = Screen.AllScreens.Select(scr => new { key = Array.IndexOf(Screen.AllScreens, scr) + 1, value = $"{scr.DeviceName.Substring(scr.DeviceName.LastIndexOf("\\") + 1)} {(scr.Bounds.Contains(this.Bounds.Location) ? "[Dieser Monitor]" : "")}" }).Union(new[] { new { key = -2, value = "DYNAMIC" } }).ToList();
cbScreen.DisplayMember = "Value";
cbScreen.ValueMember = "Key";
}
public FormSettings()
{
InitializeComponent();
this.SetDefaultDesign();
this.CreateAppListBindings();
this.CreateExtendedBindings();
this.CreateDeciptionBindings();
this.CreateMouseFunctions();
this.SetTestAppPanel();
abtnAnwenden.TextAlign = ContentAlignment.MiddleCenter;
abtnSubmit.TextAlign = ContentAlignment.MiddleCenter;
abtnVerwerfen.TextAlign = ContentAlignment.MiddleCenter;
this.Icon = Icon.FromHandle(new Bitmap(File.Open(Paths.Icons.Directory + "optionen.png", FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete)).GetHicon());
this.DesktopAnchor(DesktopAnchor.Center, this.GripSize);
tableGeneral.Controls.Cast<Control>().Where(ctl => ctl.GetType() != typeof(Label) && ctl.GetType() != typeof(AnimationButton)).ToList().ForEach(ctl =>
{
if (typeof(NumericEx) == ctl.GetType())
{
(ctl as NumericEx).ValueChanged += (s, evt) =>
{
AddResetButton(ctl);
};
}
else if (typeof(SwitchButton) == ctl.GetType())
{
(ctl as SwitchButton).CheckStateChanged += (s, evt) =>
{
AddResetButton(ctl);
};
}
else if (typeof(ListBox) == ctl.GetType())
{
(ctl as ListBox).SelectedIndexChanged += (s, evt) =>
{
AddResetButton(ctl);
};
}
else if (typeof(ComboBox) == ctl.GetType())
{
(ctl as ComboBox).SelectionChangeCommitted += (s, evt) =>
{
AddResetButton(ctl);
};
}
});
label3.Paint += Designer.DrawHeaderLabel;
label5.Paint += Designer.DrawHeaderLabel;
label7.Paint += Designer.DrawHeaderLabel;
label21.Paint += Designer.DrawHeaderLabel;
this.InvalidateDummyApps();
this.SetToolTips();
}
/// <summary>
/// Fügt der "Zurücksetzen"-Auflistung das Steuerelement hinzu, damit der alte Wert wiederhergestellt werden kann
/// </summary>
/// <param name="control"></param>
private void AddResetButton(Control control)
{
if (!this.ControlChanges.Select(change => change.Control).Contains(control))
{
TableControlChange change = new TableControlChange(tableGeneral, control.Location, 25);
change.Click += (sender, e) =>
{
XObjects.PreChanging.Reset(change.Control);
(sender as TableControlChange).Clear();
this.ControlChanges.Remove(change);
tableGeneral.Invalidate();
};
this.ControlChanges.Add(change);
}
}
/// <summary>
/// Zeichnet die umliegenden AppButtons im Test-Panel neu
/// </summary>
private void InvalidateDummyApps()
{
int margin = (int)(numAppMargin.Value + (numAppMargin.Value == 0 ? 0 : 3));
Size size = new Size(abtnTestApp.ClientSize.Width - 1, abtnTestApp.ClientSize.Height - 1);
dummyapps = new Rectangle[]
{
// Left
new Rectangle(new Point(abtnTestApp.Location.X - abtnTestApp.Width - margin , abtnTestApp.Location.Y ), size),
// TopLeft
new Rectangle(new Point(abtnTestApp.Location.X - abtnTestApp.Width - margin , abtnTestApp.Location.Y - abtnTestApp.Height - margin), size ),
// Top
new Rectangle(new Point(abtnTestApp.Location.X , abtnTestApp.Location.Y - abtnTestApp.Height - margin), size ),
// TopRight
new Rectangle(new Point(abtnTestApp.Location.X + abtnTestApp.Width + margin , abtnTestApp.Location.Y - abtnTestApp.Height - margin), size ),
// Right
new Rectangle(new Point(abtnTestApp.Location.X + abtnTestApp.Width + margin , abtnTestApp.Location.Y ), size ),
// BottomRight
new Rectangle(new Point(abtnTestApp.Location.X + abtnTestApp.Width + margin , abtnTestApp.Location.Y + abtnTestApp.Height + margin), size ),
// Bottom
new Rectangle(new Point(abtnTestApp.Location.X , abtnTestApp.Location.Y + abtnTestApp.Height + margin), size ),
// BottomLeft
new Rectangle(new Point(abtnTestApp.Location.X - abtnTestApp.Width - margin , abtnTestApp.Location.Y + abtnTestApp.Height + margin), size ),
};
}
/// <summary>
/// Übernimmt alle vorläufigen Speicherungen in die JSON-Config
/// </summary>
/// <param name="json">Gibt die JSON-Config Datei an</param>
private void SaveAll(JSONConfig json)
{
XObjects.PreChanging.CommitAll();
this.ControlChanges.ForEach(change => change.Clear());
this.ControlChanges.Clear();
JSON.Save(json);
}
/// <summary>
/// Leert die vorläufigen Speicherungen aus der Auflistung
/// </summary>
private void ResetAll()
{
XObjects.PreChanging.ResetAll();
this.ControlChanges.ForEach(change => change.Clear());
this.ControlChanges.Clear();
tableGeneral.Invalidate();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
// Fügt der Auflistung der vorläufigen Änderungen die aktuellen Anfangswerte hinzu, damit diese wiederhergestellt werden können
XObjects.PreChanging.GetTemps(Accumulations.Controls(this));
}
protected override void OnLocationChanged(EventArgs e)
{
base.OnLocationChanged(e);
if (currentscreen != null || Screen.FromPoint(this.DesktopLocation) != currentscreen)
{
this.LoadDisplays();
}
}
private void NumAppBorder_ValueChanged(object sender, EventArgs e)
{
if (!this.Created) return;
this.InvalidateDummyApps();
abtnTestApp.BorderSize = (int)numAppBorder.Value;
panelMargin.Invalidate();
}
private void NumAppRadius_ValueChanged(object sender, EventArgs e)
{
if (!this.Created) return;
this.InvalidateDummyApps();
abtnTestApp.Radius = (int)numAppRadius.Value;
panelMargin.Invalidate();
}
private void NumAppImageRadius_ValueChanged(object sender, EventArgs e)
{
if (!this.Created) return;
this.InvalidateDummyApps();
abtnTestApp.ImageRadius = (int)numAppImageRadius.Value;
panelMargin.Invalidate();
}
private void NumAppMargin_ValueChanged(object sender, EventArgs e)
{
if (!this.Created) return;
this.InvalidateDummyApps();
panelMargin.Invalidate();
}
private void PanelMargin_Paint(object sender, PaintEventArgs e)
{
int border = (int)numAppBorder.Value;
int margin = (int)numAppMargin.Value * 2;
dummyapps.ToList().ForEach(dummyapp =>
{
e.Graphics.FillPath(new SolidBrush(this.BackColor), dummyapp.ToRoundedRectangle(abtnTestApp.Radius, RectangleCorners.All));
e.Graphics.DrawPath(new Pen(border == 0 ? Color.Empty : Config.Main.Colors.Apps.Default.Border, border) { Alignment = PenAlignment.Outset }, dummyapp.ToRoundedRectangle(abtnTestApp.Radius, RectangleCorners.All));
e.Graphics.DrawString("Test App", abtnTestApp.Font, new SolidBrush(abtnTestApp.ForeColor), dummyapp, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
});
e.Graphics.FillRectangle(this.SetBrush(e.ClipRectangle, this.BackColor, Color.FromArgb(0, 0, 0, 0), WrapMode.Tile), new Rectangle(e.ClipRectangle.Location, new Size(e.ClipRectangle.Width / 2, e.ClipRectangle.Height)));
e.Graphics.FillRectangle(this.SetBrush(e.ClipRectangle, Color.FromArgb(0, 0, 0, 0), this.BackColor, WrapMode.TileFlipX), new Rectangle(new Point(e.ClipRectangle.X + e.ClipRectangle.Width / 2, e.ClipRectangle.Y), new Size(e.ClipRectangle.Width / 2, e.ClipRectangle.Height)));
if (border > 0 && margin > 0)
{
e.Graphics.DrawPath(new Pen(Color.Red, 2),
new Rectangle(abtnTestApp.Right - border - (margin == 0 ? border : margin), abtnTestApp.Bottom - border - margin, (margin * 3) + (border * 3), (margin * 3) + (border * 3)).ToRoundedRectangle(border + margin, RectangleCorners.All));
}
}
private void abtnTestApp_SizeChanged(object sender, EventArgs e)
{
var _this = sender as AppListButton;
//if (!switchOnlyImage.Checked)
// numAppWidth.Value = _this.Width;
//else
// numAppWidth.Value = Config.User.Apps.Size.Width;
numAppHeight.Value = (decimal)_this.Height;
_this.Width = _this.ImageOnly ? _this.Height : _this.ActualWidth;
this.InvalidateDummyApps();
panelMargin.Invalidate();
}
protected override void OnClosing(CancelEventArgs e)
{
this.ResetAll();
this.Visible = false;
e.Cancel = true;
base.OnClosing(e);
}
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (this.Visible)
XObjects.Delay.Increase();
}
private void abtnAnwenden_Click(object sender, EventArgs e)
{
this.SaveAll(JSONConfig.User);
this.ResetAll();
this.Close();
}
private void abtnVerwerfen_Click(object sender, EventArgs e)
{
this.ResetAll();
this.Close();
}
private void abtnSubmit_Click(object sender, EventArgs e)
{
this.SaveAll(JSONConfig.User);
this.ResetAll();
}
private void FormSettings_DpiChanged(object sender, DpiChangedEventArgs e)
{
e.Cancel = true;
}
}
}

View File

@@ -0,0 +1,126 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>160, 17</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

BIN
GFATask/GFA.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

324
GFATask/GFATask.csproj Normal file
View File

@@ -0,0 +1,324 @@
<?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>{BEA96733-DFDB-4E00-9CD9-C3E9B1E1D031}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>GFATask</RootNamespace>
<AssemblyName>GFATask</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>false</Deterministic>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<Prefer32Bit>false</Prefer32Bit>
</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>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>GFA.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<SignManifests>false</SignManifests>
</PropertyGroup>
<ItemGroup>
<Reference Include="CustomControls">
<HintPath>..\..\DLLs\CustomControls\bin\Debug\CustomControls.dll</HintPath>
</Reference>
<Reference Include="CustomGraphics">
<HintPath>..\..\DLLs\CustomGraphics\bin\Debug\CustomGraphics.dll</HintPath>
</Reference>
<Reference Include="ExScreen">
<HintPath>..\..\DLLs\ExScreen\bin\Debug\ExScreen.dll</HintPath>
</Reference>
<Reference Include="Extensions">
<HintPath>..\..\DLLs\Extensions\bin\Debug\Extensions.dll</HintPath>
</Reference>
<Reference Include="FormEx, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\DLLs\FormEx\bin\Debug\FormEx.dll</HintPath>
</Reference>
<Reference Include="ILog">
<HintPath>..\..\Interfaces\ILog\bin\Debug\ILog.dll</HintPath>
</Reference>
<Reference Include="Logging">
<HintPath>..\..\DLLs\Logging\bin\Debug\Logging.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualBasic" />
<Reference Include="Microsoft.VisualStudio.DebuggerVisualizers, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Models">
<HintPath>..\Models\bin\Debug\Models.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.DirectoryServices.AccountManagement" />
<Reference Include="System.Management" />
<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" />
<Reference Include="SystemManagement">
<HintPath>..\..\DLLs\SystemManagement\bin\Debug\SystemManagement.dll</HintPath>
</Reference>
<Reference Include="Win32API">
<HintPath>..\..\DLLs\Win32API\bin\Debug\Win32API.dll</HintPath>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="XObjects, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\DLLs\XObjects\bin\Debug\XObjects.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Classes\AlternateWebbrowser.cs" />
<Compile Include="Classes\AppExecution.cs" />
<Compile Include="Classes\ConfigBackupClass.cs" />
<Compile Include="Controls\AppButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\AppButton.Designer.cs">
<DependentUpon>AppButton.cs</DependentUpon>
</Compile>
<Compile Include="Controls\AppListButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\AppListButton.Designer.cs">
<DependentUpon>AppListButton.cs</DependentUpon>
</Compile>
<Compile Include="Controls\AppListPanel.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\AppListPanel.Designer.cs">
<DependentUpon>AppListPanel.cs</DependentUpon>
</Compile>
<Compile Include="Classes\Deploy.cs" />
<Compile Include="Forms\FormAppButtonGroup.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormAppButtonGroup.Designer.cs">
<DependentUpon>FormAppButtonGroup.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FormAppCreator.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormAppCreator.Designer.cs">
<DependentUpon>FormAppCreator.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FormAdmin.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormAdmin.Designer.cs">
<DependentUpon>FormAdmin.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FormInfo.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormInfo.Designer.cs">
<DependentUpon>FormInfo.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FormSettings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormSettings.Designer.cs">
<DependentUpon>FormSettings.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FormGroups.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormGroups.Designer.cs">
<DependentUpon>FormGroups.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FormMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormMain.Designer.cs">
<DependentUpon>FormMain.cs</DependentUpon>
</Compile>
<Compile Include="Controls\GroupButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\GroupButton.Designer.cs">
<DependentUpon>GroupButton.cs</DependentUpon>
</Compile>
<Compile Include="Classes\InfoClass.cs" />
<Compile Include="Classes\Casting_Classes.cs" />
<Compile Include="Classes\FrontEndRefreshExecution.cs" />
<Compile Include="Classes\FrontEndRefresh.cs" />
<Compile Include="UserControls\ucAdminAppClickCounter.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\ucAdminAppClickCounter.Designer.cs">
<DependentUpon>ucAdminAppClickCounter.cs</DependentUpon>
</Compile>
<Compile Include="UserControls\ucAdminHelp.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\ucAdminHelp.Designer.cs">
<DependentUpon>ucAdminHelp.cs</DependentUpon>
</Compile>
<Compile Include="UserControls\ucAdminNewsFeeds.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\ucAdminNewsFeeds.Designer.cs">
<DependentUpon>ucAdminNewsFeeds.cs</DependentUpon>
</Compile>
<Compile Include="UserControls\ucAdminApps.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\ucAdminApps.Designer.cs">
<DependentUpon>ucAdminApps.cs</DependentUpon>
</Compile>
<Compile Include="Classes\Hooks.cs" />
<Compile Include="Classes\JSON.cs" />
<Compile Include="Classes\PreChanging.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Statics.cs" />
<Compile Include="Classes\SystemApps.cs" />
<Compile Include="SystemChanges.cs" />
<Compile Include="UserControls\ucAdminDesigns.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\ucAdminDesigns.Designer.cs">
<DependentUpon>ucAdminDesigns.cs</DependentUpon>
</Compile>
<Compile Include="UserControls\ucAdminGeneral.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UserControls\ucAdminGeneral.Designer.cs">
<DependentUpon>ucAdminGeneral.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="Forms\FormAppButtonGroup.resx">
<DependentUpon>FormAppButtonGroup.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormAppCreator.resx">
<DependentUpon>FormAppCreator.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormAdmin.resx">
<DependentUpon>FormAdmin.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormGroups.resx">
<DependentUpon>FormGroups.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormInfo.resx">
<DependentUpon>FormInfo.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormMain.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormSettings.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UserControls\ucAdminAppClickCounter.resx">
<DependentUpon>ucAdminAppClickCounter.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UserControls\ucAdminApps.resx">
<DependentUpon>ucAdminApps.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UserControls\ucAdminHelp.resx">
<DependentUpon>ucAdminHelp.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UserControls\ucAdminNewsFeeds.resx">
<DependentUpon>ucAdminNewsFeeds.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UserControls\ucAdminDesigns.resx">
<DependentUpon>ucAdminDesigns.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UserControls\ucAdminGeneral.resx">
<DependentUpon>ucAdminGeneral.cs</DependentUpon>
</EmbeddedResource>
<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="app.manifest" />
<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>
<None Include="Resources\magnifier.png" />
</ItemGroup>
<ItemGroup>
<None Include="bin\Debug\Icons\System\GFA.png" />
</ItemGroup>
<ItemGroup>
<Content Include="GFA.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.8 %28x86 und x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>de-DE</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>

64
GFATask/Program.cs Normal file
View File

@@ -0,0 +1,64 @@
using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using System.Linq;
using System.Text;
namespace GFATask
{
static class Program
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
using (Mutex mutexSingleInstance = new Mutex(true, "bea96733-dfdb-4e00-9cd9-c3e9b1e1d031"))
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (Environment.CommandLine.Contains("-restart") || mutexSingleInstance.WaitOne(TimeSpan.Zero, true) && (Environment.GetEnvironmentVariable("RUN_GFATASK", EnvironmentVariableTarget.Machine) == null || Environment.GetEnvironmentVariable("RUN_GFATASK", EnvironmentVariableTarget.Machine) == "1"))
{
// Prüft ob die Datei user.json vorhanden ist. Wenn nicht, wird sie automatisch erstellt. Falls doch und nur nötige Eigenschaften fehlen, werden diese angefügt.
Deploy.Templating(
typeof(Models.Config.User),
Paths.UserConfig.FullName,
File.Exists(Paths.UserConfig.FullName) ? JSON.Exists(Paths.UserConfig.FullName, "deploy") ? Config.User.Deploy.Overwrite : true : true,
File.Exists(Paths.UserConfig.FullName) ? JSON.Exists(Paths.UserConfig.FullName, "deploy") ? Config.User.Deploy.Backup : true : true);
// Prüft ob die Prevalence/Favoriten-Datei im benutzerdefinierten Verzeichnis vorhanden ist. Wenn nicht wird sie automatisch erstellt. Wenn doch, wird geprüft,
// ob die user.json Datei bereits existiert. Falls ja, wird nach der Eigenschaft Overwrite verfahren, andernfalls wird sie ebenfalls automatisch erstellt
Deploy.AppListTemplate(DeployAppList.Prevalence, File.Exists(Paths.Prevalence.FullName) ? Config.User.Deploy.Overwrite : true, File.Exists(Paths.Prevalence.FullName) ? Config.User.Deploy.Backup : false);
Deploy.AppListTemplate(DeployAppList.Favorites, File.Exists(Paths.Favorites.Apps.FullName) ? Config.User.Deploy.Overwrite : true, File.Exists(Paths.Favorites.Apps.FullName) ? Config.User.Deploy.Backup : false);
// Prüft die Eigenschaften-Strukturen der angegebenen json-Dateien
if (Models.Compare.StructureUserConfig(Paths.UserConfig.FullName).Any())
JSON.Save(JSONConfig.User);
if(Models.Compare.Structure<Models.AppList<Models.App>>(Paths.Favorites.Apps.FullName).Any())
JSON.Save(JSONApp.Favorites);
if (Models.Compare.Structure<Models.Prevalence>(Paths.Prevalence.FullName).Any())
JSON.Save(JSONConfig.Prevalence);
try
{
Forms.Main = new FormMain();
XObjects.SystemChanges.Load();
Application.Run(Forms.Main);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else
{
}
}
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("GFATask")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Flammenbaum")]
[assembly: AssemblyCopyright("Copyright © Grünflächenamt")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("bea96733-dfdb-4e00-9cd9-c3e9b1e1d031")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
[assembly: AssemblyVersion("4.0.*")]
//[assembly: AssemblyVersion(version: "4.0.*")]
//[assembly: AssemblyVersion("4.0.*")]

83
GFATask/Properties/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,83 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace GFATask.Properties {
using System;
/// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.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>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </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("GFATask.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap GFA {
get {
object obj = ResourceManager.GetObject("GFA", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap magnifier {
get {
object obj = ResourceManager.GetObject("magnifier", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -0,0 +1,127 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="magnifier" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\magnifier.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="GFA" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\bin\Debug\Icons\System\GFA.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

26
GFATask/Properties/Settings.Designer.cs generated Normal file
View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace GFATask.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.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,5 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles />
<Settings />
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

1992
GFATask/Statics.cs Normal file

File diff suppressed because it is too large Load Diff

82
GFATask/SystemChanges.cs Normal file
View File

@@ -0,0 +1,82 @@
using Microsoft.Win32;
using System;
using System.Net.NetworkInformation;
using System.Windows.Forms;
using System.Drawing;
namespace GFATask
{
public class SystemChanges
{
public SystemChanges() { }
public void Load()
{
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
SystemEvents.EventsThreadShutdown += SystemEvents_EventsThreadShutdown;
SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
SystemEvents.DisplaySettingsChanging += SystemEvents_DisplaySettingsChanging;
SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
SystemEvents.SessionEnding += SystemEvents_SessionEnding;
NetworkChange.NetworkAvailabilityChanged += NetworkChange_NetworkAvailabilityChanged;
}
private void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
XObjects.Delay.Break(Delay.Prevent.Decrease);
SystemApps.Kill(out _);
}
private void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
{
//XObjects.MessageBox = Feed.Show("Netzwerkverbindung " + (e.IsAvailable ? "hergestellt" : "getrennt"), NotifyButtons.OK, NotifyType.Message, Designer.Feed(150, 150), null, "Netzwerk");
if (e.IsAvailable)
{
AD.GetGroups();
Forms.Main.CreateAppListPanels();
}
}
private void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
{
//if (e.Category == UserPreferenceCategory.General)
//{
// MessageBox.Show(e.Category.ToString());
// Forms.Main.BackColor = WindowsColors.Accent.StartMenuBackColor;
// Forms.Main.BorderColor = WindowsColors.Accent.BackColor;
// Forms.Main.TitlebarForeColor = Coloring.GetReadableForeColor(Forms.Main.BorderColor);
//}
}
private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
Forms.Main.SetMaximumSize();
//Forms.Main.DesktopAlign();
}
private void SystemEvents_DisplaySettingsChanging(object sender, EventArgs e)
{
Forms.Settings.LoadDisplays();
Win32API.SendMessage(Forms.Main.Handle, (int)WM.ENTERSIZEMOVE, 0, 0);
Forms.Main.DesktopAlign();
}
private void SystemEvents_EventsThreadShutdown(object sender, EventArgs e)
{
SystemApps.Kill(out _);
}
private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
SystemApps.Kill(out _);
}
private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
if(e.Mode == PowerModes.Resume)
{
SystemApps.Restart(out _);
}
}
}
}

View File

@@ -0,0 +1,149 @@
namespace GFATask
{
partial class ucAdminAppClickCounter
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.abtnReset = new System.Windows.Forms.AnimationButton();
this.table = new System.Windows.Forms.TableLayoutPanel();
this.lvAppClickCounter = new System.Windows.Forms.ListViewEx();
this.colID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colAppName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colCounts = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colDateLast = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colDateFirst = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.table.SuspendLayout();
this.SuspendLayout();
//
// abtnReset
//
this.abtnReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.abtnReset.AutoSizeWidth = false;
this.abtnReset.Image = null;
this.abtnReset.ImageAlign = System.Windows.Forms.AnchorStyles.None;
this.abtnReset.ImageBackColor = System.Drawing.Color.Empty;
this.abtnReset.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnReset.ImageSize = new System.Drawing.Size(1, 1);
this.abtnReset.Location = new System.Drawing.Point(699, 382);
this.abtnReset.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.abtnReset.Name = "abtnReset";
this.abtnReset.Size = new System.Drawing.Size(234, 23);
this.abtnReset.TabIndex = 0;
this.abtnReset.Text = "Alle Click Counts zurücksetzen";
this.abtnReset.TextBoxAlign = System.Windows.Forms.AnchorStyles.None;
this.abtnReset.ToolTipText = "";
this.abtnReset.Click += new System.EventHandler(this.abtnReset_Click);
//
// table
//
this.table.ColumnCount = 1;
this.table.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.table.Controls.Add(this.abtnReset, 0, 1);
this.table.Controls.Add(this.lvAppClickCounter, 0, 0);
this.table.Dock = System.Windows.Forms.DockStyle.Fill;
this.table.Location = new System.Drawing.Point(0, 0);
this.table.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.table.Name = "table";
this.table.RowCount = 2;
this.table.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.table.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.table.Size = new System.Drawing.Size(935, 407);
this.table.TabIndex = 2;
//
// lvAppClickCounter
//
this.lvAppClickCounter.ColumnFont = new System.Drawing.Font("Segoe UI", 9F);
this.lvAppClickCounter.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colID,
this.colAppName,
this.colCounts,
this.colDateLast,
this.colDateFirst});
this.lvAppClickCounter.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvAppClickCounter.FullRowSelect = true;
this.lvAppClickCounter.GridLines = true;
this.lvAppClickCounter.HideSelection = false;
this.lvAppClickCounter.Location = new System.Drawing.Point(0, 0);
this.lvAppClickCounter.Margin = new System.Windows.Forms.Padding(0);
this.lvAppClickCounter.Name = "lvAppClickCounter";
this.lvAppClickCounter.OwnerDraw = true;
this.lvAppClickCounter.Size = new System.Drawing.Size(935, 379);
this.lvAppClickCounter.TabIndex = 1;
this.lvAppClickCounter.UseCompatibleStateImageBehavior = false;
this.lvAppClickCounter.View = System.Windows.Forms.View.Details;
//
// colID
//
this.colID.Text = "ID";
//
// colAppName
//
this.colAppName.Text = "App";
this.colAppName.Width = 409;
//
// colCounts
//
this.colCounts.Text = "Benutzerklicks";
this.colCounts.Width = 120;
//
// colDateLast
//
this.colDateLast.Text = "Zuletzt geklick";
this.colDateLast.Width = 160;
//
// colDateFirst
//
this.colDateFirst.Text = "Erste Ausführung";
this.colDateFirst.Width = 160;
//
// ucAdminAppClickCounter
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.table);
this.Margin = new System.Windows.Forms.Padding(0);
this.Name = "ucAdminAppClickCounter";
this.Size = new System.Drawing.Size(935, 407);
this.table.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.AnimationButton abtnReset;
private System.Windows.Forms.TableLayoutPanel table;
private System.Windows.Forms.ListViewEx lvAppClickCounter;
private System.Windows.Forms.ColumnHeader colID;
private System.Windows.Forms.ColumnHeader colAppName;
private System.Windows.Forms.ColumnHeader colCounts;
private System.Windows.Forms.ColumnHeader colDateLast;
private System.Windows.Forms.ColumnHeader colDateFirst;
}
}

View File

@@ -0,0 +1,143 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
[Browsable(false), ToolboxItem(false)]
public partial class ucAdminAppClickCounter : UserControl
{
public ContextMenuStrip CMS
{
get
{
return new ContextMenuStrip();
}
}
public ucAdminAppClickCounter()
{
InitializeComponent();
this.SetDefaultDesign();
lvAppClickCounter.SortByColumn(1, SortOrder.Ascending);
lvAppClickCounter.ContextMenuStrip = CMS;
lvAppClickCounter.MouseClick += LvAppClickCounter_MouseClick;
Config.AppClickCounter.GetType().GetProperties().ToList().ForEach(applist =>
{
ListViewGroup group = new ListViewGroup(applist.Name, applist.Name);
lvAppClickCounter.Groups.Add(group);
var apps = ((List<Models.ClickCounter.AppCounter>)applist.GetValue(Config.AppClickCounter));
lvAppClickCounter.Items.AddRange(apps.Select(app => new ListViewItem(new string[] { app.ID.ToString(), app.Name, app.Counts.ToString(), app.LastClicked.ToEuropeDateCulture(), app.FirstClicked.ToEuropeDateCulture() }, group)).ToArray());
});
}
private void LvAppClickCounter_MouseClick(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Right)
{
var item = lvAppClickCounter.HitTest(e.Location).Item;
if(item != null && item.GetType() != typeof(ColumnHeader) && item.GetType() != typeof(ListViewGroup))
{
if (lvAppClickCounter.ContextMenuStrip != null)
{
lvAppClickCounter.ContextMenuStrip.Items.Clear();
ToolStripMenuItem item_reset = new ToolStripMenuItem("Zurücksetzen", null, (s, evt) =>
{
AppType apptype = (AppType)Enum.Parse(typeof(AppType), item.Group.Header, true);
int id = int.Parse(item.Text);
ClickCounter clickcounter = Accessor.GetAppCounter(apptype, id).ToClickCounter(apptype);
ResetAppCounter(clickcounter);
JSON.Save(JSONConfig.AppClickCounter);
XObjects.FrontEndRefresh.Update(new GFATaskStream() { PipeType = NetPipeType.AppCounter_Reset, AppType = apptype, ClickCounter = clickcounter });
});
lvAppClickCounter.ContextMenuStrip.Items.Add(item_reset);
lvAppClickCounter.ContextMenuStrip.Show(this, new Point(e.X, lvAppClickCounter.GetItemRect(item.Index).Bottom));
}
}
}
}
public void ResetAppCounter(ClickCounter clickcounter)
{
Models.ClickCounter.AppCounter appcounter = ((List<Models.ClickCounter.AppCounter>)Config.AppClickCounter.GetType().GetProperty(clickcounter.AppType.ToString()).GetValue(Config.AppClickCounter)).Find(appc => appc.ID == clickcounter.ID);
appcounter.Counts = 0;
appcounter.FirstClicked = DateTime.Now;
appcounter.LastClicked = DateTime.Now;
clickcounter.Counts = 0;
clickcounter.FirstClicked = DateTime.Now;
clickcounter.LastClicked = DateTime.Now;
ListViewItem replacing_item = clickcounter.AsLvItem();
replacing_item.Group = lvAppClickCounter.Groups[clickcounter.AppType.ToString()];
lvAppClickCounter.Items[lvAppClickCounter.Items.Cast<ListViewItem>().ToList().FindIndex(lvitem => lvitem.Text == clickcounter.ID.ToString())] = replacing_item;
}
private void abtnReset_Click(object sender, EventArgs e)
{
if(XObjects.MessageBox("Setzt die gezählten Klicks pro App zurück", NotifyButtons.OkCancel, NotifyType.Message, new Size(350,150), "ClickCounter zurücksetzen").Result == DialogResult.OK)
{
Config.AppClickCounter = new Models.ClickCounter()
{
Admin = new List<Models.ClickCounter.AppCounter>(),
Menu = new List<Models.ClickCounter.AppCounter>(),
User = new List<Models.ClickCounter.AppCounter>()
};
JSON.Save(JSONConfig.AppClickCounter);
ClearAppClickCounterList();
XObjects.FrontEndRefresh.Update(new GFATaskStream() { PipeType = NetPipeType.ClickCounter_Clear });
}
}
public void ClearAppClickCounterList()
{
lvAppClickCounter.Items.Clear();
}
public void RefreshList(ClickCounter clickcounter)
{
ListViewItem item = clickcounter.AsLvItem();
item.Group = lvAppClickCounter.Groups.Cast<ListViewGroup>().First(group => group.Header == clickcounter.AppType.ToString());
if (lvAppClickCounter.Items.Cast<ListViewItem>().ToList().Exists(lvitem => lvitem.Text == clickcounter.ID.ToString()))
{
lvAppClickCounter.Items[lvAppClickCounter.Items.Cast<ListViewItem>().ToList().FindIndex(lvitem => lvitem.Text == clickcounter.ID.ToString())] = item;
}
else
{
lvAppClickCounter.Items.Add(item);
}
}
}
internal static class Extensions
{
public static ListViewItem AsLvItem(this ClickCounter clickcounter)
{
ListViewItem item = new ListViewItem(clickcounter.ID.ToString());
ListViewItem.ListViewSubItem subName = new ListViewItem.ListViewSubItem(item, clickcounter.Name) { Name = "colAppName" };
ListViewItem.ListViewSubItem subCounts = new ListViewItem.ListViewSubItem(item, clickcounter.Counts.ToString()) { Name = "colCounts" };
ListViewItem.ListViewSubItem subLastClicked = new ListViewItem.ListViewSubItem(item, clickcounter.LastClicked.ToEuropeDateCulture()) { Name = "colDateLast" };
ListViewItem.ListViewSubItem subFirstClicked = new ListViewItem.ListViewSubItem(item, clickcounter.FirstClicked.ToEuropeDateCulture()) { Name = "colDateFirst" };
item.SubItems.AddRange(new ListViewItem.ListViewSubItem [] { subName, subCounts, subLastClicked, subFirstClicked }.ToArray());
return item;
}
}
}

View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,105 @@
namespace GFATask
{
partial class ucAdminApps
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lvApps = new System.Windows.Forms.ListViewEx();
this.abtnCreate = new System.Windows.Forms.AnimationButton();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// lvApps
//
this.lvApps.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvApps.ColumnFont = new System.Drawing.Font("Segoe UI", 9F);
this.lvApps.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvApps.FullRowSelect = true;
this.lvApps.GridLines = true;
this.lvApps.HideSelection = false;
this.lvApps.Location = new System.Drawing.Point(3, 3);
this.lvApps.Name = "lvApps";
this.lvApps.OwnerDraw = true;
this.lvApps.Size = new System.Drawing.Size(852, 468);
this.lvApps.TabIndex = 2;
this.lvApps.TileSize = new System.Drawing.Size(228, 120);
this.lvApps.UseCompatibleStateImageBehavior = false;
this.lvApps.View = System.Windows.Forms.View.Details;
//
// abtnCreate
//
this.abtnCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.abtnCreate.AutoSizeWidth = false;
this.abtnCreate.Image = null;
this.abtnCreate.ImageAutoSize = System.Windows.Forms.ImageAutoSizeDirection.Manual;
this.abtnCreate.ImageBackColor = System.Drawing.Color.Empty;
this.abtnCreate.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnCreate.Location = new System.Drawing.Point(708, 477);
this.abtnCreate.Name = "abtnCreate";
this.abtnCreate.Size = new System.Drawing.Size(147, 29);
this.abtnCreate.TabIndex = 0;
this.abtnCreate.Text = "App erstellen";
this.abtnCreate.ToolTipText = "";
this.abtnCreate.Click += new System.EventHandler(this.abtnCreate_Click);
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.lvApps, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.abtnCreate, 0, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(858, 509);
this.tableLayoutPanel1.TabIndex = 2;
//
// ucAdminApps
//
this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.tableLayoutPanel1);
this.Margin = new System.Windows.Forms.Padding(0);
this.Name = "ucAdminApps";
this.Size = new System.Drawing.Size(858, 509);
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.AnimationButton abtnCreate;
private System.Windows.Forms.ListViewEx lvApps;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
}
}

View File

@@ -0,0 +1,188 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
[Browsable(false), ToolboxItem(false)]
public partial class ucAdminApps : UserControl
{
public ImageList imageList = new ImageList();
private int sortcolumn = 0;
public ucAdminApps()
{
InitializeComponent();
this.SetDefaultDesign();
this.ContextMenuStrip = new ContextMenuStrip();
this.ContextMenuStrip.Items.Add("Bearbeiten", null, SetEditableItem);
this.ContextMenuStrip.Items.Add("Schnelles kopieren", null, FastCopyApp);
this.ContextMenuStrip.Items.Add("Löschen", null, RemoveApp);
lvApps.MouseDoubleClick += SetEditableItem;
imageList.ImageSize = new Size(24,24);
imageList.Images.Add("", new Bitmap(imageList.ImageSize.Width, imageList.ImageSize.Height));
var files = XObjects.GetFiles(Paths.Icons.Directory, "*.png|*.jpg|*.ico|*.jpeg|*.bmp|*.gif");
foreach (var file in files)
{
using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
{
imageList.Images.Add(Path.GetFileName(file), Image.FromFile(fs.Name));
}
}
lvApps.DoubleBuffer(true);
lvApps.SmallImageList = lvApps.LargeImageList = imageList;
lvApps.Columns.Add("Name");
lvApps.Columns.Add("ID");
lvApps.Columns.Add("Gruppen");
lvApps.Columns.Add("Symbol");
lvApps.Columns.Add("Prototyp");
lvApps.Columns.Add("AD Gruppen");
lvApps.Columns.Add("Zuletzt geändert");
lvApps.Columns.Add("Erstellt am");
typeof(AppLists).GetProperties().Select(prop => (Models.AppList<Models.App>)prop.GetValue(typeof(AppLists))).ToList().ForEach(applist =>
{
if (applist.Apps != null && applist.Type != AppType.Citrix && applist.Type != AppType.Favorites)
{
ListViewGroup group = new ListViewGroup(applist.Type.ToString(), applist.Type.ToString());
lvApps.Groups.Add(group);
lvApps.Items.AddRange(applist.Apps.Select(app =>
{
var ad_groups = app.ActiveDirectoryGroups == null ? new string[] { "Keine" } : app.ActiveDirectoryGroups;
var item = new ListViewItem(new string[] { app.Name, app.ID.ToString(), app.Group, app.Icon, app.Prototype == true ? "✓" : "❌", string.Join(",", ad_groups), app.LastModified.ToEuropeDateCulture(), app.Created.ToEuropeDateCulture() }, Path.GetFileName(app.Icon), group);
return item;
}).ToArray());
}
});
lvApps.SortByColumn(sortcolumn);
lvApps.ColumnClick += (sender, e) => sortcolumn = e.Column;
lvApps.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
lvApps.AutoFillColumn(lvApps.Columns.Count -1);
}
public void AddAppToList(AppType apptype, Models.App app)
{
AddAppToList(apptype.ToString(), app);
}
public void AddAppToList(string apptype, Models.App app)
{
ListViewGroup group = lvApps.Groups[apptype];
var ad_groups = app.ActiveDirectoryGroups == null ? new string[] { "Keine" } : app.ActiveDirectoryGroups;
var item = new ListViewItem(new string[] { app.Name, app.ID.ToString(), app.Group, app.Icon, app.Prototype == true ? "✓" : "❌", string.Join(",", ad_groups), app.LastModified.ToEuropeDateCulture(), app.Created.ToEuropeDateCulture() }, Path.GetFileName(app.Icon), group);
lvApps.Items.Add(item);
}
public void ReplaceAppInList(AppType apptype, Models.App app)
{
ListViewGroup group = lvApps.Groups[apptype.ToString()];
var ad_groups = app.ActiveDirectoryGroups == null ? new string[] { "Keine" } : app.ActiveDirectoryGroups;
var lvitem = group.Items.Cast<ListViewItem>().First(item => int.Parse(item.SubItems[1].Text) == app.ID && item.Group.Name == apptype.ToString());
lvApps.Items.Remove(lvitem);
lvitem = new ListViewItem(new string[] { app.Name, app.ID.ToString(), app.Group, app.Icon, app.Prototype == true ? "✓" : "❌", string.Join(",", ad_groups), app.LastModified.ToEuropeDateCulture(), app.Created.ToEuropeDateCulture() }, Path.GetFileName(app.Icon), group);
lvApps.Items.Add(lvitem);
lvApps.Invalidate();
lvApps.ListViewItemSorter = new ListViewItemComparer(sortcolumn);
}
public void ReplaceAppInList(string apptype, Models.App app)
{
this.ReplaceAppInList((AppType)Enum.Parse(typeof(AppType), apptype, true), app);
}
public void RemoveAppFromList(AppType apptype, Models.App app)
{
ListViewGroup group = lvApps.Groups[apptype.ToString()];
ListViewItem lvitem = group.Items.Cast<ListViewItem>().ToList().Find(item => int.Parse(item.SubItems[1].Text) == app.ID);
lvApps.Items.Remove(lvitem);
}
public void RemoveAppFromList(string apptype, Models.App app)
{
RemoveAppFromList((AppType)Enum.Parse(typeof(AppType), apptype, true), app);
}
private void RemoveApp(object sender, EventArgs e)
{
var lvitem = lvApps.SelectedItems[0];
var msgbox = XObjects.MessageBox("Soll die App " + lvitem.Text + " wirklich gelöscht werden", NotifyButtons.YesNo, NotifyType.Message, new Size(200, 200), "App Löschen", null);
if (msgbox.Result == DialogResult.Yes)
{
AppType apptype = (AppType)Enum.Parse(typeof(AppType), lvitem.Group.Name, true);
Models.AppList<Models.App> applist = Accessor.GetAppList(apptype);
Models.App app = applist.Apps.Find(listapp => listapp.ID == int.Parse(lvitem.SubItems[1].Text));
Creator.RemoveApp(lvitem.Group.Name, app);
}
}
private void abtnCreate_Click(object sender, EventArgs e)
{
Forms.AppCreator.ResetControls();
Accessor.OpenForm("AppCreator");
}
private void FastCopyApp(object sender, EventArgs e)
{
var lvitem = lvApps.SelectedItems[0];
if (lvitem != null)
{
string typefromgroup = Enum.Parse(typeof(AppType), lvitem.Group.Name, true).ToString();
Models.AppList<Models.App> applist = (Models.AppList<Models.App>)typeof(AppLists).GetProperty(lvitem.Group.Name).GetValue(typeof(Models.AppList<Models.App>));
Models.App app_copy = applist.Apps.Find(app => app.ID == int.Parse(lvitem.SubItems[1].Text)).Copy();
app_copy.Name = app_copy.Name + " (Kopie " + applist.Apps.Count(app => app.Name == app_copy.Name) + ")";
app_copy.ID = applist.Apps.Max(app => app.ID) + 1;
app_copy.Created = DateTime.Now;
app_copy.LastModified = DateTime.Now;
Creator.AddApp(lvitem.Group.Name, app_copy);
}
}
private void SetEditableItem(object sender, EventArgs e)
{
var item = lvApps.SelectedItems[0];
if (item != null)
{
string typefromgroup = Enum.Parse(typeof(AppType), item.Group.Name, true).ToString();
Models.AppList<Models.App> applist = (Models.AppList<Models.App>)typeof(AppLists).GetProperty(item.Group.Name).GetValue(typeof(Models.AppList<Models.App>));
Models.App appitem = applist.Apps.Find(app => app.ID == int.Parse(item.SubItems[1].Text));
Forms.AppCreator.GetEditableItem(applist.Type, appitem);
Accessor.OpenForm("AppCreator", Forms.Administration);
}
}
class ListViewItemComparer : IComparer
{
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,936 @@
namespace GFATask
{
partial class ucAdminDesigns
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.tableDesign = new System.Windows.Forms.TableLayoutPanel();
this.label18 = new System.Windows.Forms.Label();
this.label17 = new System.Windows.Forms.Label();
this.label16 = new System.Windows.Forms.Label();
this.numAppListX = new System.Windows.Forms.NumericEx();
this.label13 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label();
this.label11 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.label27 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.cbWindowTitlebarColor = new System.Windows.Forms.ComboBox();
this.cbWindowBorderColor = new System.Windows.Forms.ComboBox();
this.cbWindowActionColor = new System.Windows.Forms.ComboBox();
this.cbWindowBackColor = new System.Windows.Forms.ComboBox();
this.cbGroupBackColor = new System.Windows.Forms.ComboBox();
this.cbGroupBorderColor = new System.Windows.Forms.ComboBox();
this.cbGroupTitlebarColor = new System.Windows.Forms.ComboBox();
this.cbGroupActionColor = new System.Windows.Forms.ComboBox();
this.label8 = new System.Windows.Forms.Label();
this.numAppListY = new System.Windows.Forms.NumericEx();
this.cbFontFamily = new System.Windows.Forms.ComboBox();
this.numWindowRadius = new System.Windows.Forms.NumericEx();
this.numWindowBorder = new System.Windows.Forms.NumericEx();
this.cbAppDefaultForeColor = new System.Windows.Forms.ComboBox();
this.cbAppDefaultBackColor = new System.Windows.Forms.ComboBox();
this.cbAppDefaultBorder = new System.Windows.Forms.ComboBox();
this.cbAppDefaultImage = new System.Windows.Forms.ComboBox();
this.label14 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.abtnVerwerfen = new System.Windows.Forms.AnimationButton();
this.abtnAnwenden = new System.Windows.Forms.AnimationButton();
this.cbListBorderColor = new System.Windows.Forms.ComboBox();
this.cbLoadingDot3 = new System.Windows.Forms.ComboBox();
this.label19 = new System.Windows.Forms.Label();
this.cbLoadingDot1 = new System.Windows.Forms.ComboBox();
this.label20 = new System.Windows.Forms.Label();
this.label22 = new System.Windows.Forms.Label();
this.label21 = new System.Windows.Forms.Label();
this.cbAppHoverForeColor = new System.Windows.Forms.ComboBox();
this.cbAppHoverBackColor = new System.Windows.Forms.ComboBox();
this.cbAppHoverBorder = new System.Windows.Forms.ComboBox();
this.cbAppHoverImage = new System.Windows.Forms.ComboBox();
this.cbLoadingDot4 = new System.Windows.Forms.ComboBox();
this.cbLoadingDot2 = new System.Windows.Forms.ComboBox();
this.tableDesign.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numAppListX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numAppListY)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numWindowRadius)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numWindowBorder)).BeginInit();
this.SuspendLayout();
//
// tableDesign
//
this.tableDesign.ColumnCount = 17;
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));
this.tableDesign.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableDesign.Controls.Add(this.label18, 1, 7);
this.tableDesign.Controls.Add(this.label17, 13, 8);
this.tableDesign.Controls.Add(this.label16, 11, 8);
this.tableDesign.Controls.Add(this.numAppListX, 3, 6);
this.tableDesign.Controls.Add(this.label13, 1, 6);
this.tableDesign.Controls.Add(this.label12, 15, 3);
this.tableDesign.Controls.Add(this.label11, 1, 2);
this.tableDesign.Controls.Add(this.label10, 1, 5);
this.tableDesign.Controls.Add(this.label27, 7, 3);
this.tableDesign.Controls.Add(this.label9, 3, 3);
this.tableDesign.Controls.Add(this.label3, 1, 4);
this.tableDesign.Controls.Add(this.label5, 11, 3);
this.tableDesign.Controls.Add(this.label6, 13, 3);
this.tableDesign.Controls.Add(this.label4, 7, 7);
this.tableDesign.Controls.Add(this.label1, 7, 9);
this.tableDesign.Controls.Add(this.label2, 7, 10);
this.tableDesign.Controls.Add(this.label7, 9, 3);
this.tableDesign.Controls.Add(this.cbWindowTitlebarColor, 15, 4);
this.tableDesign.Controls.Add(this.cbWindowBorderColor, 13, 4);
this.tableDesign.Controls.Add(this.cbWindowActionColor, 9, 4);
this.tableDesign.Controls.Add(this.cbWindowBackColor, 11, 4);
this.tableDesign.Controls.Add(this.cbGroupBackColor, 11, 5);
this.tableDesign.Controls.Add(this.cbGroupBorderColor, 13, 5);
this.tableDesign.Controls.Add(this.cbGroupTitlebarColor, 15, 5);
this.tableDesign.Controls.Add(this.cbGroupActionColor, 9, 5);
this.tableDesign.Controls.Add(this.label8, 1, 1);
this.tableDesign.Controls.Add(this.numAppListY, 5, 6);
this.tableDesign.Controls.Add(this.cbFontFamily, 3, 1);
this.tableDesign.Controls.Add(this.numWindowRadius, 7, 4);
this.tableDesign.Controls.Add(this.numWindowBorder, 3, 4);
this.tableDesign.Controls.Add(this.cbAppDefaultForeColor, 9, 9);
this.tableDesign.Controls.Add(this.cbAppDefaultBackColor, 11, 9);
this.tableDesign.Controls.Add(this.cbAppDefaultBorder, 13, 9);
this.tableDesign.Controls.Add(this.cbAppDefaultImage, 15, 9);
this.tableDesign.Controls.Add(this.label14, 9, 8);
this.tableDesign.Controls.Add(this.label15, 15, 8);
this.tableDesign.Controls.Add(this.abtnVerwerfen, 13, 12);
this.tableDesign.Controls.Add(this.abtnAnwenden, 15, 12);
this.tableDesign.Controls.Add(this.cbListBorderColor, 13, 6);
this.tableDesign.Controls.Add(this.cbLoadingDot3, 3, 9);
this.tableDesign.Controls.Add(this.label19, 1, 8);
this.tableDesign.Controls.Add(this.cbLoadingDot1, 1, 9);
this.tableDesign.Controls.Add(this.label20, 3, 8);
this.tableDesign.Controls.Add(this.label22, 3, 10);
this.tableDesign.Controls.Add(this.label21, 1, 10);
this.tableDesign.Controls.Add(this.cbAppHoverForeColor, 9, 10);
this.tableDesign.Controls.Add(this.cbAppHoverBackColor, 11, 10);
this.tableDesign.Controls.Add(this.cbAppHoverBorder, 13, 10);
this.tableDesign.Controls.Add(this.cbAppHoverImage, 15, 10);
this.tableDesign.Controls.Add(this.cbLoadingDot4, 3, 11);
this.tableDesign.Controls.Add(this.cbLoadingDot2, 1, 11);
this.tableDesign.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableDesign.Location = new System.Drawing.Point(0, 0);
this.tableDesign.Name = "tableDesign";
this.tableDesign.RowCount = 14;
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableDesign.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableDesign.Size = new System.Drawing.Size(985, 377);
this.tableDesign.TabIndex = 11;
//
// label18
//
this.label18.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tableDesign.SetColumnSpan(this.label18, 5);
this.label18.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label18.Location = new System.Drawing.Point(12, 186);
this.label18.Margin = new System.Windows.Forms.Padding(0);
this.label18.Name = "label18";
this.label18.Size = new System.Drawing.Size(260, 25);
this.label18.TabIndex = 107;
this.label18.Text = "Animation (Laden)";
this.label18.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label17
//
this.label17.AutoSize = true;
this.label17.Dock = System.Windows.Forms.DockStyle.Fill;
this.label17.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label17.Location = new System.Drawing.Point(702, 211);
this.label17.Margin = new System.Windows.Forms.Padding(0);
this.label17.Name = "label17";
this.label17.Size = new System.Drawing.Size(130, 30);
this.label17.TabIndex = 105;
this.label17.Text = "Rahmen";
this.label17.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label16
//
this.label16.AutoSize = true;
this.label16.Dock = System.Windows.Forms.DockStyle.Fill;
this.label16.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label16.Location = new System.Drawing.Point(562, 211);
this.label16.Margin = new System.Windows.Forms.Padding(0);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(130, 30);
this.label16.TabIndex = 104;
this.label16.Text = "Hintergrund";
this.label16.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// numAppListX
//
this.numAppListX.Anchor = System.Windows.Forms.AnchorStyles.None;
this.numAppListX.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.numAppListX.Location = new System.Drawing.Point(172, 161);
this.numAppListX.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
this.numAppListX.Maximum = new decimal(new int[] {
5,
0,
0,
0});
this.numAppListX.Name = "numAppListX";
this.numAppListX.Size = new System.Drawing.Size(30, 20);
this.numAppListX.TabIndex = 89;
this.numAppListX.ValueChanged += new System.EventHandler(this.numAppListX_ValueChanged);
//
// label13
//
this.label13.AutoSize = true;
this.label13.Dock = System.Windows.Forms.DockStyle.Fill;
this.label13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label13.Location = new System.Drawing.Point(12, 156);
this.label13.Margin = new System.Windows.Forms.Padding(0);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(130, 30);
this.label13.TabIndex = 88;
this.label13.Text = "App-Listen (X,Y)";
this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label12
//
this.label12.AutoSize = true;
this.label12.Dock = System.Windows.Forms.DockStyle.Fill;
this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label12.Location = new System.Drawing.Point(842, 71);
this.label12.Margin = new System.Windows.Forms.Padding(0);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(130, 25);
this.label12.TabIndex = 82;
this.label12.Text = "Titelleiste";
this.label12.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label11
//
this.label11.AutoSize = true;
this.tableDesign.SetColumnSpan(this.label11, 15);
this.label11.Dock = System.Windows.Forms.DockStyle.Fill;
this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label11.Location = new System.Drawing.Point(12, 46);
this.label11.Margin = new System.Windows.Forms.Padding(0);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(960, 25);
this.label11.TabIndex = 81;
this.label11.Text = "Fenster";
this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label10
//
this.label10.AutoSize = true;
this.label10.Dock = System.Windows.Forms.DockStyle.Fill;
this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label10.Location = new System.Drawing.Point(12, 126);
this.label10.Margin = new System.Windows.Forms.Padding(0);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(130, 30);
this.label10.TabIndex = 80;
this.label10.Text = "Gruppenfenster";
this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label27
//
this.label27.AutoSize = true;
this.label27.Dock = System.Windows.Forms.DockStyle.Fill;
this.label27.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label27.Location = new System.Drawing.Point(282, 71);
this.label27.Margin = new System.Windows.Forms.Padding(0);
this.label27.Name = "label27";
this.label27.Size = new System.Drawing.Size(130, 25);
this.label27.TabIndex = 65;
this.label27.Text = "Abrundung";
this.label27.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label9
//
this.label9.AutoSize = true;
this.tableDesign.SetColumnSpan(this.label9, 3);
this.label9.Dock = System.Windows.Forms.DockStyle.Fill;
this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label9.Location = new System.Drawing.Point(162, 71);
this.label9.Margin = new System.Windows.Forms.Padding(0);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(110, 25);
this.label9.TabIndex = 74;
this.label9.Text = "Rahmenbreite";
this.label9.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label3.Location = new System.Drawing.Point(12, 96);
this.label3.Margin = new System.Windows.Forms.Padding(0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(130, 30);
this.label3.TabIndex = 13;
this.label3.Text = "Hauptfenster";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Dock = System.Windows.Forms.DockStyle.Fill;
this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label5.Location = new System.Drawing.Point(562, 71);
this.label5.Margin = new System.Windows.Forms.Padding(0);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(130, 25);
this.label5.TabIndex = 66;
this.label5.Text = "Hintergrund";
this.label5.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Dock = System.Windows.Forms.DockStyle.Fill;
this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label6.Location = new System.Drawing.Point(702, 71);
this.label6.Margin = new System.Windows.Forms.Padding(0);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(130, 25);
this.label6.TabIndex = 67;
this.label6.Text = "Rahmen";
this.label6.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label4
//
this.label4.AutoSize = true;
this.tableDesign.SetColumnSpan(this.label4, 9);
this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(282, 186);
this.label4.Margin = new System.Windows.Forms.Padding(0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(690, 25);
this.label4.TabIndex = 16;
this.label4.Text = "Apps";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(282, 241);
this.label1.Margin = new System.Windows.Forms.Padding(0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(130, 30);
this.label1.TabIndex = 14;
this.label1.Text = "Normal";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(282, 271);
this.label2.Margin = new System.Windows.Forms.Padding(0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(130, 30);
this.label2.TabIndex = 15;
this.label2.Text = "Maus drauf";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label7
//
this.label7.AutoSize = true;
this.label7.Dock = System.Windows.Forms.DockStyle.Fill;
this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label7.Location = new System.Drawing.Point(422, 71);
this.label7.Margin = new System.Windows.Forms.Padding(0);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(130, 25);
this.label7.TabIndex = 68;
this.label7.Text = "Aktionsfarbe";
this.label7.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// cbWindowTitlebarColor
//
this.cbWindowTitlebarColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbWindowTitlebarColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbWindowTitlebarColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbWindowTitlebarColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbWindowTitlebarColor.Location = new System.Drawing.Point(857, 100);
this.cbWindowTitlebarColor.Margin = new System.Windows.Forms.Padding(0);
this.cbWindowTitlebarColor.Name = "cbWindowTitlebarColor";
this.cbWindowTitlebarColor.Size = new System.Drawing.Size(100, 21);
this.cbWindowTitlebarColor.TabIndex = 83;
//
// cbWindowBorderColor
//
this.cbWindowBorderColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbWindowBorderColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbWindowBorderColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbWindowBorderColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbWindowBorderColor.Location = new System.Drawing.Point(717, 100);
this.cbWindowBorderColor.Margin = new System.Windows.Forms.Padding(0);
this.cbWindowBorderColor.Name = "cbWindowBorderColor";
this.cbWindowBorderColor.Size = new System.Drawing.Size(100, 21);
this.cbWindowBorderColor.TabIndex = 78;
//
// cbWindowActionColor
//
this.cbWindowActionColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbWindowActionColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbWindowActionColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbWindowActionColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbWindowActionColor.Location = new System.Drawing.Point(437, 100);
this.cbWindowActionColor.Margin = new System.Windows.Forms.Padding(0);
this.cbWindowActionColor.Name = "cbWindowActionColor";
this.cbWindowActionColor.Size = new System.Drawing.Size(100, 21);
this.cbWindowActionColor.TabIndex = 79;
//
// cbWindowBackColor
//
this.cbWindowBackColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbWindowBackColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbWindowBackColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbWindowBackColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbWindowBackColor.Location = new System.Drawing.Point(577, 100);
this.cbWindowBackColor.Margin = new System.Windows.Forms.Padding(0);
this.cbWindowBackColor.Name = "cbWindowBackColor";
this.cbWindowBackColor.Size = new System.Drawing.Size(100, 21);
this.cbWindowBackColor.TabIndex = 77;
//
// cbGroupBackColor
//
this.cbGroupBackColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbGroupBackColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbGroupBackColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbGroupBackColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbGroupBackColor.Location = new System.Drawing.Point(577, 130);
this.cbGroupBackColor.Margin = new System.Windows.Forms.Padding(0);
this.cbGroupBackColor.Name = "cbGroupBackColor";
this.cbGroupBackColor.Size = new System.Drawing.Size(100, 21);
this.cbGroupBackColor.TabIndex = 84;
//
// cbGroupBorderColor
//
this.cbGroupBorderColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbGroupBorderColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbGroupBorderColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbGroupBorderColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbGroupBorderColor.Location = new System.Drawing.Point(717, 130);
this.cbGroupBorderColor.Margin = new System.Windows.Forms.Padding(0);
this.cbGroupBorderColor.Name = "cbGroupBorderColor";
this.cbGroupBorderColor.Size = new System.Drawing.Size(100, 21);
this.cbGroupBorderColor.TabIndex = 85;
//
// cbGroupTitlebarColor
//
this.cbGroupTitlebarColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbGroupTitlebarColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbGroupTitlebarColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbGroupTitlebarColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbGroupTitlebarColor.Location = new System.Drawing.Point(857, 130);
this.cbGroupTitlebarColor.Margin = new System.Windows.Forms.Padding(0);
this.cbGroupTitlebarColor.Name = "cbGroupTitlebarColor";
this.cbGroupTitlebarColor.Size = new System.Drawing.Size(100, 21);
this.cbGroupTitlebarColor.TabIndex = 86;
//
// cbGroupActionColor
//
this.cbGroupActionColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbGroupActionColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbGroupActionColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbGroupActionColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbGroupActionColor.Location = new System.Drawing.Point(437, 130);
this.cbGroupActionColor.Margin = new System.Windows.Forms.Padding(0);
this.cbGroupActionColor.Name = "cbGroupActionColor";
this.cbGroupActionColor.Size = new System.Drawing.Size(100, 21);
this.cbGroupActionColor.TabIndex = 87;
//
// label8
//
this.label8.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(83, 24);
this.label8.Margin = new System.Windows.Forms.Padding(3, 0, 10, 0);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(49, 13);
this.label8.TabIndex = 70;
this.label8.Text = "Schriftart";
//
// numAppListY
//
this.numAppListY.Anchor = System.Windows.Forms.AnchorStyles.None;
this.numAppListY.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.numAppListY.Location = new System.Drawing.Point(232, 161);
this.numAppListY.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
this.numAppListY.Maximum = new decimal(new int[] {
3,
0,
0,
0});
this.numAppListY.Name = "numAppListY";
this.numAppListY.Size = new System.Drawing.Size(30, 20);
this.numAppListY.TabIndex = 90;
this.numAppListY.ValueChanged += new System.EventHandler(this.numAppListY_ValueChanged);
//
// cbFontFamily
//
this.cbFontFamily.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.cbFontFamily.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.cbFontFamily.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.cbFontFamily.BackColor = System.Drawing.SystemColors.ScrollBar;
this.tableDesign.SetColumnSpan(this.cbFontFamily, 5);
this.cbFontFamily.DropDownHeight = 150;
this.cbFontFamily.DropDownWidth = 214;
this.cbFontFamily.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbFontFamily.FormattingEnabled = true;
this.cbFontFamily.IntegralHeight = false;
this.cbFontFamily.ItemHeight = 13;
this.cbFontFamily.Location = new System.Drawing.Point(162, 20);
this.cbFontFamily.Margin = new System.Windows.Forms.Padding(0);
this.cbFontFamily.Name = "cbFontFamily";
this.cbFontFamily.Size = new System.Drawing.Size(250, 21);
this.cbFontFamily.TabIndex = 76;
//
// numWindowRadius
//
this.numWindowRadius.Anchor = System.Windows.Forms.AnchorStyles.None;
this.numWindowRadius.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.numWindowRadius.Location = new System.Drawing.Point(324, 116);
this.numWindowRadius.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
this.numWindowRadius.Maximum = new decimal(new int[] {
15,
0,
0,
0});
this.numWindowRadius.Name = "numWindowRadius";
this.tableDesign.SetRowSpan(this.numWindowRadius, 2);
this.numWindowRadius.Size = new System.Drawing.Size(45, 20);
this.numWindowRadius.TabIndex = 64;
this.numWindowRadius.ValueChanged += new System.EventHandler(this.numWindowRadius_ValueChanged);
//
// numWindowBorder
//
this.numWindowBorder.Anchor = System.Windows.Forms.AnchorStyles.None;
this.numWindowBorder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tableDesign.SetColumnSpan(this.numWindowBorder, 3);
this.numWindowBorder.Location = new System.Drawing.Point(194, 116);
this.numWindowBorder.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0);
this.numWindowBorder.Maximum = new decimal(new int[] {
5,
0,
0,
0});
this.numWindowBorder.Name = "numWindowBorder";
this.tableDesign.SetRowSpan(this.numWindowBorder, 2);
this.numWindowBorder.Size = new System.Drawing.Size(45, 20);
this.numWindowBorder.TabIndex = 73;
this.numWindowBorder.ValueChanged += new System.EventHandler(this.numWindowBorder_ValueChanged);
//
// cbAppDefaultForeColor
//
this.cbAppDefaultForeColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbAppDefaultForeColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbAppDefaultForeColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppDefaultForeColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAppDefaultForeColor.Location = new System.Drawing.Point(437, 245);
this.cbAppDefaultForeColor.Margin = new System.Windows.Forms.Padding(0);
this.cbAppDefaultForeColor.Name = "cbAppDefaultForeColor";
this.cbAppDefaultForeColor.Size = new System.Drawing.Size(100, 21);
this.cbAppDefaultForeColor.TabIndex = 91;
//
// cbAppDefaultBackColor
//
this.cbAppDefaultBackColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbAppDefaultBackColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbAppDefaultBackColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppDefaultBackColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAppDefaultBackColor.Location = new System.Drawing.Point(577, 245);
this.cbAppDefaultBackColor.Margin = new System.Windows.Forms.Padding(0);
this.cbAppDefaultBackColor.Name = "cbAppDefaultBackColor";
this.cbAppDefaultBackColor.Size = new System.Drawing.Size(100, 21);
this.cbAppDefaultBackColor.TabIndex = 93;
//
// cbAppDefaultBorder
//
this.cbAppDefaultBorder.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbAppDefaultBorder.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbAppDefaultBorder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppDefaultBorder.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAppDefaultBorder.Location = new System.Drawing.Point(717, 245);
this.cbAppDefaultBorder.Margin = new System.Windows.Forms.Padding(0);
this.cbAppDefaultBorder.Name = "cbAppDefaultBorder";
this.cbAppDefaultBorder.Size = new System.Drawing.Size(100, 21);
this.cbAppDefaultBorder.TabIndex = 95;
//
// cbAppDefaultImage
//
this.cbAppDefaultImage.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbAppDefaultImage.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbAppDefaultImage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppDefaultImage.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAppDefaultImage.Location = new System.Drawing.Point(857, 245);
this.cbAppDefaultImage.Margin = new System.Windows.Forms.Padding(0);
this.cbAppDefaultImage.Name = "cbAppDefaultImage";
this.cbAppDefaultImage.Size = new System.Drawing.Size(100, 21);
this.cbAppDefaultImage.TabIndex = 97;
//
// label14
//
this.label14.AutoSize = true;
this.label14.Dock = System.Windows.Forms.DockStyle.Fill;
this.label14.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label14.Location = new System.Drawing.Point(422, 211);
this.label14.Margin = new System.Windows.Forms.Padding(0);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(130, 30);
this.label14.TabIndex = 99;
this.label14.Text = "Schrift";
this.label14.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label15
//
this.label15.AutoSize = true;
this.label15.Dock = System.Windows.Forms.DockStyle.Fill;
this.label15.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label15.Location = new System.Drawing.Point(842, 211);
this.label15.Margin = new System.Windows.Forms.Padding(0);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(130, 30);
this.label15.TabIndex = 100;
this.label15.Text = "Symbol";
this.label15.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// abtnVerwerfen
//
this.abtnVerwerfen.Anchor = System.Windows.Forms.AnchorStyles.None;
this.abtnVerwerfen.AutoSizeWidth = false;
this.abtnVerwerfen.Image = null;
this.abtnVerwerfen.ImageBackColor = System.Drawing.Color.Empty;
this.abtnVerwerfen.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnVerwerfen.Location = new System.Drawing.Point(717, 333);
this.abtnVerwerfen.Margin = new System.Windows.Forms.Padding(0);
this.abtnVerwerfen.Name = "abtnVerwerfen";
this.abtnVerwerfen.Size = new System.Drawing.Size(100, 25);
this.abtnVerwerfen.TabIndex = 103;
this.abtnVerwerfen.Text = "Verwerfen";
this.abtnVerwerfen.TextBounds = new System.Drawing.Rectangle(1, 1, 98, 23);
this.abtnVerwerfen.ToolTipText = "";
this.abtnVerwerfen.Click += new System.EventHandler(this.abtnVerwerfen_Click);
//
// abtnAnwenden
//
this.abtnAnwenden.Anchor = System.Windows.Forms.AnchorStyles.None;
this.abtnAnwenden.AutoSizeWidth = false;
this.abtnAnwenden.Image = null;
this.abtnAnwenden.ImageBackColor = System.Drawing.Color.Empty;
this.abtnAnwenden.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnAnwenden.Location = new System.Drawing.Point(857, 333);
this.abtnAnwenden.Margin = new System.Windows.Forms.Padding(0);
this.abtnAnwenden.Name = "abtnAnwenden";
this.abtnAnwenden.Size = new System.Drawing.Size(100, 25);
this.abtnAnwenden.TabIndex = 101;
this.abtnAnwenden.Text = "Anwenden";
this.abtnAnwenden.TextBounds = new System.Drawing.Rectangle(1, 1, 98, 23);
this.abtnAnwenden.ToolTipText = "";
this.abtnAnwenden.Click += new System.EventHandler(this.abtnAnwenden_Click);
//
// cbListBorderColor
//
this.cbListBorderColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbListBorderColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbListBorderColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbListBorderColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbListBorderColor.Location = new System.Drawing.Point(717, 160);
this.cbListBorderColor.Margin = new System.Windows.Forms.Padding(0);
this.cbListBorderColor.Name = "cbListBorderColor";
this.cbListBorderColor.Size = new System.Drawing.Size(100, 21);
this.cbListBorderColor.TabIndex = 106;
//
// cbLoadingDot3
//
this.cbLoadingDot3.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbLoadingDot3.BackColor = System.Drawing.SystemColors.ScrollBar;
this.tableDesign.SetColumnSpan(this.cbLoadingDot3, 3);
this.cbLoadingDot3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbLoadingDot3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbLoadingDot3.Location = new System.Drawing.Point(167, 245);
this.cbLoadingDot3.Margin = new System.Windows.Forms.Padding(0);
this.cbLoadingDot3.Name = "cbLoadingDot3";
this.cbLoadingDot3.Size = new System.Drawing.Size(100, 21);
this.cbLoadingDot3.TabIndex = 108;
//
// label19
//
this.label19.AutoSize = true;
this.label19.Dock = System.Windows.Forms.DockStyle.Fill;
this.label19.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label19.Location = new System.Drawing.Point(12, 211);
this.label19.Margin = new System.Windows.Forms.Padding(0);
this.label19.Name = "label19";
this.label19.Size = new System.Drawing.Size(130, 30);
this.label19.TabIndex = 112;
this.label19.Text = "Punkt 1";
this.label19.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// cbLoadingDot1
//
this.cbLoadingDot1.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbLoadingDot1.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbLoadingDot1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbLoadingDot1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbLoadingDot1.Location = new System.Drawing.Point(27, 245);
this.cbLoadingDot1.Margin = new System.Windows.Forms.Padding(0);
this.cbLoadingDot1.Name = "cbLoadingDot1";
this.cbLoadingDot1.Size = new System.Drawing.Size(100, 21);
this.cbLoadingDot1.TabIndex = 111;
//
// label20
//
this.label20.AutoSize = true;
this.tableDesign.SetColumnSpan(this.label20, 3);
this.label20.Dock = System.Windows.Forms.DockStyle.Fill;
this.label20.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label20.Location = new System.Drawing.Point(162, 211);
this.label20.Margin = new System.Windows.Forms.Padding(0);
this.label20.Name = "label20";
this.label20.Size = new System.Drawing.Size(110, 30);
this.label20.TabIndex = 113;
this.label20.Text = "Punkt 3";
this.label20.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label22
//
this.label22.AutoSize = true;
this.tableDesign.SetColumnSpan(this.label22, 3);
this.label22.Dock = System.Windows.Forms.DockStyle.Fill;
this.label22.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label22.Location = new System.Drawing.Point(162, 271);
this.label22.Margin = new System.Windows.Forms.Padding(0);
this.label22.Name = "label22";
this.label22.Size = new System.Drawing.Size(110, 30);
this.label22.TabIndex = 115;
this.label22.Text = "Punkt 4";
this.label22.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// label21
//
this.label21.AutoSize = true;
this.label21.Dock = System.Windows.Forms.DockStyle.Fill;
this.label21.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label21.Location = new System.Drawing.Point(12, 271);
this.label21.Margin = new System.Windows.Forms.Padding(0);
this.label21.Name = "label21";
this.label21.Size = new System.Drawing.Size(130, 30);
this.label21.TabIndex = 114;
this.label21.Text = "Punkt 2";
this.label21.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// cbAppHoverForeColor
//
this.cbAppHoverForeColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbAppHoverForeColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbAppHoverForeColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppHoverForeColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAppHoverForeColor.Location = new System.Drawing.Point(437, 275);
this.cbAppHoverForeColor.Margin = new System.Windows.Forms.Padding(0);
this.cbAppHoverForeColor.Name = "cbAppHoverForeColor";
this.cbAppHoverForeColor.Size = new System.Drawing.Size(100, 21);
this.cbAppHoverForeColor.TabIndex = 92;
//
// cbAppHoverBackColor
//
this.cbAppHoverBackColor.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbAppHoverBackColor.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbAppHoverBackColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppHoverBackColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAppHoverBackColor.Location = new System.Drawing.Point(577, 275);
this.cbAppHoverBackColor.Margin = new System.Windows.Forms.Padding(0);
this.cbAppHoverBackColor.Name = "cbAppHoverBackColor";
this.cbAppHoverBackColor.Size = new System.Drawing.Size(100, 21);
this.cbAppHoverBackColor.TabIndex = 94;
//
// cbAppHoverBorder
//
this.cbAppHoverBorder.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbAppHoverBorder.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbAppHoverBorder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppHoverBorder.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAppHoverBorder.Location = new System.Drawing.Point(717, 275);
this.cbAppHoverBorder.Margin = new System.Windows.Forms.Padding(0);
this.cbAppHoverBorder.Name = "cbAppHoverBorder";
this.cbAppHoverBorder.Size = new System.Drawing.Size(100, 21);
this.cbAppHoverBorder.TabIndex = 96;
//
// cbAppHoverImage
//
this.cbAppHoverImage.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cbAppHoverImage.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbAppHoverImage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbAppHoverImage.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAppHoverImage.Location = new System.Drawing.Point(857, 275);
this.cbAppHoverImage.Margin = new System.Windows.Forms.Padding(0);
this.cbAppHoverImage.Name = "cbAppHoverImage";
this.cbAppHoverImage.Size = new System.Drawing.Size(100, 21);
this.cbAppHoverImage.TabIndex = 98;
//
// cbLoadingDot4
//
this.cbLoadingDot4.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.cbLoadingDot4.BackColor = System.Drawing.SystemColors.ScrollBar;
this.tableDesign.SetColumnSpan(this.cbLoadingDot4, 3);
this.cbLoadingDot4.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbLoadingDot4.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbLoadingDot4.Location = new System.Drawing.Point(167, 304);
this.cbLoadingDot4.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0);
this.cbLoadingDot4.Name = "cbLoadingDot4";
this.tableDesign.SetRowSpan(this.cbLoadingDot4, 2);
this.cbLoadingDot4.Size = new System.Drawing.Size(100, 21);
this.cbLoadingDot4.TabIndex = 110;
//
// cbLoadingDot2
//
this.cbLoadingDot2.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.cbLoadingDot2.BackColor = System.Drawing.SystemColors.ScrollBar;
this.cbLoadingDot2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbLoadingDot2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbLoadingDot2.Location = new System.Drawing.Point(27, 304);
this.cbLoadingDot2.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0);
this.cbLoadingDot2.Name = "cbLoadingDot2";
this.tableDesign.SetRowSpan(this.cbLoadingDot2, 2);
this.cbLoadingDot2.Size = new System.Drawing.Size(100, 21);
this.cbLoadingDot2.TabIndex = 109;
//
// ucAdminDesigns
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.Controls.Add(this.tableDesign);
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "ucAdminDesigns";
this.Size = new System.Drawing.Size(985, 377);
this.tableDesign.ResumeLayout(false);
this.tableDesign.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.numAppListX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numAppListY)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numWindowRadius)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numWindowBorder)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableDesign;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label27;
private System.Windows.Forms.NumericEx numWindowRadius;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.NumericEx numWindowBorder;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.ComboBox cbFontFamily;
private System.Windows.Forms.ComboBox cbWindowBackColor;
private System.Windows.Forms.ComboBox cbWindowBorderColor;
private System.Windows.Forms.ComboBox cbWindowActionColor;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.ComboBox cbWindowTitlebarColor;
private System.Windows.Forms.ComboBox cbGroupBackColor;
private System.Windows.Forms.ComboBox cbGroupBorderColor;
private System.Windows.Forms.ComboBox cbGroupTitlebarColor;
private System.Windows.Forms.ComboBox cbGroupActionColor;
private System.Windows.Forms.NumericEx numAppListX;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.NumericEx numAppListY;
private System.Windows.Forms.ComboBox cbAppDefaultForeColor;
private System.Windows.Forms.ComboBox cbAppHoverForeColor;
private System.Windows.Forms.ComboBox cbAppDefaultBackColor;
private System.Windows.Forms.ComboBox cbAppHoverBackColor;
private System.Windows.Forms.ComboBox cbAppDefaultBorder;
private System.Windows.Forms.ComboBox cbAppHoverBorder;
private System.Windows.Forms.ComboBox cbAppDefaultImage;
private System.Windows.Forms.ComboBox cbAppHoverImage;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.AnimationButton abtnVerwerfen;
private System.Windows.Forms.AnimationButton abtnAnwenden;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.ComboBox cbListBorderColor;
private System.Windows.Forms.Label label18;
private System.Windows.Forms.ComboBox cbLoadingDot3;
private System.Windows.Forms.ComboBox cbLoadingDot1;
private System.Windows.Forms.ComboBox cbLoadingDot2;
private System.Windows.Forms.ComboBox cbLoadingDot4;
private System.Windows.Forms.Label label19;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label22;
private System.Windows.Forms.Label label21;
}
}

View File

@@ -0,0 +1,512 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Text;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
[Browsable(false), ToolboxItem(false)]
public partial class ucAdminDesigns : UserControl
{
private List<string> FontFamilies { get => FontFamily.Families.Select(f => f.Name).OrderBy(f => f).ToList(); }
private ColorDialog ColorDialog { get; set; } = new ColorDialog() { AllowFullOpen = true, AnyColor = true, FullOpen = true };
public List<TableControlChange> ControlChanges { get; } = new List<TableControlChange>();
private void DoFontFamily(object value)
{
Config.Main.FontFamily = value.ToString();
typeof(Forms).GetProperties().ToList().ForEach(prop =>
{
FormEx form = (FormEx)prop.GetValue(typeof(Forms));
Font font = new Font((string)value, Config.User.Window.FontSize);
form.Font = font;
Accumulations.Controls(form).ToList().ForEach(ctl => ctl.Font = font);
});
Win32API.SendMessage(Forms.Main.Handle, (int)WM.ENTERSIZEMOVE, 0, 0);
Win32API.SendMessage(Forms.Main.Handle, (int)WM.EXITSIZEMOVE, 0, 0);
}
private void DoWindowRadius(object value)
{
Config.Main.Sizes.Window.Radius = int.Parse(value.ToString());
}
private void DoListBorderX(object value)
{
Config.Main.Sizes.List.Border = new Point(int.Parse(value.ToString()), Config.Main.Sizes.List.Border.Y);
}
private void DoListBorderY(object value)
{
Config.Main.Sizes.List.Border = new Point(Config.Main.Sizes.List.Border.X, int.Parse(value.ToString()));
}
private void CreateGeneralBindings()
{
cbFontFamily.DrawItem += LbFontFamily_DrawItem;
cbFontFamily.Items.AddRange(FontFamilies.ToArray());
cbFontFamily.SelectedItem = Config.Main.FontFamily;
cbFontFamily.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main, "FontFamily", (sender as ComboBox), (sender as ComboBox).SelectedItem, this.DoFontFamily); };
}
private void LbFontFamily_DrawItem(object sender, DrawItemEventArgs e)
{
string fontfamilyitem = (string)(sender as ListBox).Items[e.Index];
e.DrawBackground();
e.DrawFocusRectangle();
e.Graphics.DrawString(fontfamilyitem, new Font(fontfamilyitem, Config.User.Window.FontSize), new SolidBrush((sender as ListBox).ForeColor), e.Bounds);
}
/// <summary>
/// Fügt der "Zurücksetzen"-Auflistung das Steuerelement hinzu, damit der alte Wert wiederhergestellt werden kann
/// </summary>
/// <param name="control"></param>
private void AddResetButton(Control control)
{
if (!this.ControlChanges.Select(change => change.Control).Contains(control))
{
TableControlChange change = new TableControlChange(tableDesign, control.Location, 25);
change.Click += (sender, e) =>
{
XObjects.PreChanging.Reset(change.Control);
(sender as TableControlChange).Clear();
this.ControlChanges.Remove(change);
tableDesign.Invalidate();
};
this.ControlChanges.Add(change);
}
}
private void CreateSizeBindings()
{
numWindowRadius.Value = (decimal)Config.Main.Sizes.Window.Radius;
numWindowRadius.ValueChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Sizes.Window, "Radius", (sender as NumericEx), (int)(sender as NumericEx).Value, this.DoWindowRadius); };
numWindowBorder.Value = (decimal)Config.Main.Sizes.Window.Border;
numWindowBorder.ValueChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Sizes.Window, "Border", (sender as NumericEx), (int)(sender as NumericEx).Value, this.DoWindowBorder); };
numAppListX.Value = (decimal)Config.Main.Sizes.List.Border.X;
numAppListX.ValueChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Sizes.List.Border, "X", (sender as NumericEx), (int)(sender as NumericEx).Value, this.DoListBorderX); };
numAppListY.Value = (decimal)Config.Main.Sizes.List.Border.Y;
numAppListY.ValueChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Sizes.List.Border, "Y", (sender as NumericEx), (int)(sender as NumericEx).Value, this.DoListBorderY); };
}
public void DoWindowBackColor(object value)
{
Config.Main.Colors.Window.BackColor = (Color)value;
this.SetNewDesign();
}
private void DoWindowBorderColor(object value)
{
Config.Main.Colors.Window.Border = (Color)value;
this.SetNewDesign();
}
private void DoWindowAction(object value)
{
Config.Main.Colors.Window.Action = (Color)value;
this.SetNewDesign();
}
private void DoWindowTitlebarBackColor(object value)
{
Config.Main.Colors.Window.TitlebarBackColor = (Color)value;
this.SetNewDesign();
}
private void DoGroupAction(object value)
{
Config.Main.Colors.Window.Action = (Color)value;
this.SetNewDesign();
}
private void DoGroupBorderColor(object value)
{
Config.Main.Colors.Window.Border = (Color)value;
this.SetNewDesign();
}
private void DoGroupBackColor(object value)
{
Config.Main.Colors.Window.BackColor = (Color)value;
this.SetNewDesign();
}
private void DoGroupTitlebarBackColor(object value)
{
Config.Main.Colors.Window.TitlebarBackColor = (Color)value;
this.SetNewDesign();
}
private void DoListBorderColor(object value)
{
Config.Main.Colors.List.Border = (Color)value;
this.SetNewDesign();
}
private void DoAppDefaultBackColor(object value)
{
Config.Main.Colors.Apps.Default.BackColor = (Color)value;
this.SetNewDesign();
}
private void DoAppDefaultBorderColor(object value)
{
Config.Main.Colors.Apps.Default.Border = (Color)value;
this.SetNewDesign();
}
private void DoAppDefaultForeColor(object value)
{
Config.Main.Colors.Apps.Default.ForeColor = (Color)value;
}
private void DoAppDefaultImage(object value)
{
Config.Main.Colors.Apps.Default.Image = (Color)value;
this.SetNewDesign();
}
private void DoAppHoverBackColor(object value)
{
Config.Main.Colors.Apps.Hover.BackColor = (Color)value;
this.SetNewDesign();
}
private void DoAppHoverBorderColor(object value)
{
Config.Main.Colors.Apps.Hover.Border = (Color)value;
this.SetNewDesign();
}
private void DoAppHoverForeColor(object value)
{
Config.Main.Colors.Apps.Hover.ForeColor = (Color)value;
this.SetNewDesign();
}
private void DoAppHoverImage(object value)
{
Config.Main.Colors.Apps.Hover.Image = (Color)value;
this.SetNewDesign();
}
private void DoWindowBorder(object value)
{
Config.Main.Sizes.Window.Border = int.Parse(value.ToString());
this.SetWindowBorder();
this.SetNewDesign();
}
private void DoLoadingAnimationDot1(object value)
{
Config.Main.Colors.LoadingAnimation.Dot1 = (Color)value;
XObjects.LoadingPanel.MovingPoints[0].Fill = Config.Main.Colors.LoadingAnimation.Dot1;
this.SetNewDesign();
}
private void DoLoadingAnimationDot2(object value)
{
Config.Main.Colors.LoadingAnimation.Dot2 = (Color)value;
XObjects.LoadingPanel.MovingPoints[1].Fill = Config.Main.Colors.LoadingAnimation.Dot2;
this.SetNewDesign();
}
private void DoLoadingAnimationDot3(object value)
{
Config.Main.Colors.LoadingAnimation.Dot3 = (Color)value;
XObjects.LoadingPanel.MovingPoints[2].Fill = Config.Main.Colors.LoadingAnimation.Dot3;
this.SetNewDesign();
}
private void DoLoadingAnimationDot4(object value)
{
Config.Main.Colors.LoadingAnimation.Dot4 = (Color)value;
XObjects.LoadingPanel.MovingPoints[3].Fill = Config.Main.Colors.LoadingAnimation.Dot4;
this.SetNewDesign();
}
private void CreateColorBindings()
{
this.DesignComboBoxes(cbWindowBackColor, Config.Main.Colors.Window.BackColor);
cbWindowBackColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Window, "BackColor", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoWindowBackColor); };
this.DesignComboBoxes(cbWindowBorderColor, Config.Main.Colors.Window.Border);
cbWindowBorderColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Window, "Border", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoWindowBorderColor); };
this.DesignComboBoxes(cbWindowActionColor, Config.Main.Colors.Window.Action);
cbWindowActionColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Window, "Action", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoWindowAction); };
this.DesignComboBoxes(cbWindowTitlebarColor, Config.Main.Colors.Window.TitlebarBackColor);
cbWindowTitlebarColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Window, "TitlebarBackColor", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoWindowTitlebarBackColor); };
this.DesignComboBoxes(cbGroupActionColor, Config.Main.Colors.GroupWindow.Action);
cbGroupActionColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.GroupWindow, "Action", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoGroupAction); };
this.DesignComboBoxes(cbGroupBackColor, Config.Main.Colors.GroupWindow.BackColor);
cbGroupBackColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.GroupWindow, "BackColor", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoGroupBackColor); };
this.DesignComboBoxes(cbGroupBorderColor, Config.Main.Colors.GroupWindow.Border);
cbGroupBorderColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.GroupWindow, "Border", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoGroupBorderColor); };
this.DesignComboBoxes(cbGroupTitlebarColor, Config.Main.Colors.GroupWindow.TitlebarBackColor);
cbGroupTitlebarColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.GroupWindow, "TitlebarBackColor", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoGroupTitlebarBackColor); };
this.DesignComboBoxes(cbListBorderColor, Config.Main.Colors.List.Border);
cbListBorderColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.List, "Border", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoListBorderColor); };
this.DesignComboBoxes(cbAppDefaultBackColor, Config.Main.Colors.Apps.Default.BackColor);
cbAppDefaultBackColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Apps.Default, "BackColor", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoAppDefaultBackColor); };
this.DesignComboBoxes(cbAppDefaultForeColor, Config.Main.Colors.Apps.Default.ForeColor);
cbAppDefaultForeColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Apps.Default, "ForeColor", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoAppDefaultForeColor); };
this.DesignComboBoxes(cbAppDefaultBorder, Config.Main.Colors.Apps.Default.Border);
cbAppDefaultBorder.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Apps.Default, "Border", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoAppDefaultBorderColor); };
this.DesignComboBoxes(cbAppDefaultImage, Config.Main.Colors.Apps.Default.Image);
cbAppDefaultImage.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Apps.Default, "Image", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoAppDefaultImage); };
this.DesignComboBoxes(cbAppHoverBackColor, Config.Main.Colors.Apps.Hover.BackColor);
cbAppHoverBackColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Apps.Hover, "BackColor", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoAppHoverBackColor); };
this.DesignComboBoxes(cbAppHoverForeColor, Config.Main.Colors.Apps.Hover.ForeColor);
cbAppHoverForeColor.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Apps.Hover, "ForeColor", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoAppHoverForeColor); };
this.DesignComboBoxes(cbAppHoverBorder, Config.Main.Colors.Apps.Hover.Border);
cbAppHoverBorder.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Apps.Hover, "Border", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoAppHoverBorderColor); };
this.DesignComboBoxes(cbAppHoverImage, Config.Main.Colors.Apps.Hover.Image);
cbAppHoverImage.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.Apps.Hover, "Image", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoAppHoverImage); };
this.DesignComboBoxes(cbLoadingDot1, Config.Main.Colors.LoadingAnimation.Dot1);
cbLoadingDot1.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.LoadingAnimation, "Dot1", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoLoadingAnimationDot1); };
this.DesignComboBoxes(cbLoadingDot2, Config.Main.Colors.LoadingAnimation.Dot2);
cbLoadingDot2.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.LoadingAnimation, "Dot2", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoLoadingAnimationDot2); };
this.DesignComboBoxes(cbLoadingDot3, Config.Main.Colors.LoadingAnimation.Dot3);
cbLoadingDot3.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.LoadingAnimation, "Dot3", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoLoadingAnimationDot3); };
this.DesignComboBoxes(cbLoadingDot4, Config.Main.Colors.LoadingAnimation.Dot4);
cbLoadingDot4.SelectedIndexChanged += (sender, e) => { if (this.Created) XObjects.PreChanging.Add(Config.Main.Colors.LoadingAnimation, "Dot4", (sender as ComboBox), ToColor((sender as ComboBox).SelectedItem.ToString()), this.DoLoadingAnimationDot4); };
}
private Color ToColor(string comboboxitem)
{
int[] rgb = new int[] { int.Parse(comboboxitem.Split(';')[0]), int.Parse(comboboxitem.Split(';')[1]), int.Parse(comboboxitem.Split(';')[2]) };
return Color.FromArgb(rgb[0], rgb[1], rgb[2]);
}
private void DesignComboBoxes(ComboBox cb, Color color)
{
cb.BackColor = color;
cb.ForeColor = Coloring.GetReadableForeColor(cb.BackColor);
cb.Items.Add($"{color.R};{color.G};{color.B}");
cb.SelectedIndex = 0;
cb.MouseClick += cbColor_MouseClick;
cb.SelectedIndexChanged += cbColor_SelectedIndexChanged;
}
private void cbColor_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox _this = sender as ComboBox;
if (this.Created)
{
_this.BackColor = Color.FromArgb(int.Parse(_this.Text.Split(';')[0]), int.Parse(_this.Text.Split(';')[1]), int.Parse(_this.Text.Split(';')[2]));
_this.ForeColor = Coloring.GetReadableForeColor(_this.BackColor);
}
}
private void cbColor_MouseClick(object sender, MouseEventArgs e)
{
ComboBox _this = sender as ComboBox;
ColorDialog.Color = _this.BackColor;
if (ColorDialog.ShowDialog() == DialogResult.OK)
{
_this.BackColor = ColorDialog.Color;
_this.ForeColor = Coloring.GetReadableForeColor(_this.BackColor);
_this.Items.Add($"{ColorDialog.Color.R};{ColorDialog.Color.G};{ColorDialog.Color.B}");
_this.SelectedIndex = _this.Items.Count- 1;
}
}
public ucAdminDesigns()
{
InitializeComponent();
this.SetDefaultDesign();
this.CreateGeneralBindings();
this.CreateSizeBindings();
this.CreateColorBindings();
XObjects.PreChanging.GetTemps(Accumulations.Controls(this));
tableDesign.Controls.Cast<Control>().Where(ctl => ctl.GetType() != typeof(Label) && ctl.GetType() != typeof(AnimationButton)).ToList().ForEach(ctl =>
{
if (typeof(NumericEx) == ctl.GetType())
{
(ctl as NumericEx).ValueChanged += (s, evt) =>
{
AddResetButton(ctl);
};
}
else if (typeof(ComboBox) == ctl.GetType())
{
(ctl as ComboBox).SelectedIndexChanged += (s, evt) =>
{
AddResetButton(ctl);
};
}
});
label11.Paint += Designer.DrawHeaderLabel;
label4.Paint += Designer.DrawHeaderLabel;
label18.Paint += Designer.DrawHeaderLabel;
}
private void numWindowRadius_ValueChanged(object sender, EventArgs e)
{
if(this.Created)
{
typeof(Forms).GetProperties().ToList().ForEach(prop =>
{
FormEx form = ((FormEx)prop.GetValue(typeof(Forms)));
form.Radius = (int)numWindowRadius.Value;
if (form.Name == Forms.Main.Name)
((FormMain)form).SetActionRegion();
form.Invalidate();
});
}
}
private void numWindowBorder_ValueChanged(object sender, EventArgs e)
{
if (this.Created)
{
this.SetWindowBorder();
}
}
public void SetNewDesign()
{
JSON.Save(JSONConfig.Main);
Config.Main = JSON.Read<Models.Config.Main>(Paths.MainConfig.FullName);
XObjects.LoadingPanel.MovingPoints[0].Fill = Config.Main.Colors.LoadingAnimation.Dot1;
XObjects.LoadingPanel.MovingPoints[1].Fill = Config.Main.Colors.LoadingAnimation.Dot2;
XObjects.LoadingPanel.MovingPoints[2].Fill = Config.Main.Colors.LoadingAnimation.Dot3;
XObjects.LoadingPanel.MovingPoints[3].Fill = Config.Main.Colors.LoadingAnimation.Dot4;
typeof(Forms).GetProperties().ToList().ForEach(prop =>
{
FormEx form = ((FormEx)prop.GetValue(typeof(Forms)));
form.SetDefaultDesign();
form.Invalidate();
});
}
public void SetWindowBorder()
{
typeof(Forms).GetProperties().ToList().ForEach(prop =>
{
FormEx form = ((FormEx)prop.GetValue(typeof(Forms)));
form.BorderWidth = (int)numWindowBorder.Value;
if (form.Name == Forms.Main.Name)
{
((FormMain)form).SetOpacityStep();
((FormMain)form).SetStartValue();
}
form.Invalidate();
});
}
/// <summary>
/// Übernimmt alle vorläufigen Speicherungen in die JSON-Config
/// </summary>
/// <param name="json">Gibt die JSON-Config Datei an</param>
private void SaveAll(JSONConfig json)
{
XObjects.PreChanging.CommitAll();
this.ControlChanges.ForEach(change => change.Clear());
this.ControlChanges.Clear();
JSON.Save(json);
}
/// <summary>
/// Leert die vorläufigen Speicherungen aus der Auflistung
/// </summary>
private void ResetAll()
{
XObjects.PreChanging.ResetAll();
this.ControlChanges.ForEach(change => change.Clear());
this.ControlChanges.Clear();
tableDesign.Invalidate();
}
private void abtnAnwenden_Click(object sender, EventArgs e)
{
this.SaveAll(JSONConfig.Main);
this.ResetAll();
XObjects.FrontEndRefresh.Update(new GFATaskStream() { PipeType = NetPipeType.MainConfig });
}
private void abtnVerwerfen_Click(object sender, EventArgs e)
{
this.ResetAll();
}
private void numAppListX_ValueChanged(object sender, EventArgs e)
{
XObjects.AllAppListPanels.ForEach(applist =>
{
applist.Border = new Point(int.Parse(numAppListX.Value.ToString()), applist.Border.Y);
applist.Invalidate(true);
});
}
private void numAppListY_ValueChanged(object sender, EventArgs e)
{
XObjects.AllAppListPanels.ForEach(applist =>
{
int bottom = applist.Padding.Bottom < int.Parse(numAppListY.Value.ToString()) ? int.Parse(numAppListY.Value.ToString()) : applist.Padding.Bottom;
applist.Padding = new Padding(applist.Padding.Left, applist.Padding.Top, applist.Padding.Right, bottom);
applist.Padding = new Padding(applist.Padding.Left, applist.Padding.Top, applist.Padding.Right, bottom);
applist.Border = new Point(applist.Border.X, int.Parse(numAppListY.Value.ToString()));
applist.Invalidate(true);
});
}
}
}

View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,782 @@
namespace GFATask
{
partial class ucAdminGeneral
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.tableGeneral = new System.Windows.Forms.TableLayoutPanel();
this.tbUserDomain = new System.Windows.Forms.TextBox();
this.label15 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label11 = new System.Windows.Forms.Label();
this.rtbDomains = new System.Windows.Forms.RichTextBox();
this.label5 = new System.Windows.Forms.Label();
this.switch_use_ad_groups = new System.Windows.Forms.SwitchButton();
this.label14 = new System.Windows.Forms.Label();
this.tbAdGroupAdmins = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.abtnAcceptDomains = new System.Windows.Forms.AnimationButton();
this.label18 = new System.Windows.Forms.Label();
this.abtnConfirmAD = new System.Windows.Forms.AnimationButton();
this.tbMailAccountUser = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label();
this.tbMailAccountPwd = new System.Windows.Forms.TextBox();
this.label10 = new System.Windows.Forms.Label();
this.tbMailAccountHost = new System.Windows.Forms.TextBox();
this.label12 = new System.Windows.Forms.Label();
this.label13 = new System.Windows.Forms.Label();
this.numMailAccountPort = new System.Windows.Forms.NumericEx();
this.abtnConfirmMailAccount = new System.Windows.Forms.AnimationButton();
this.label1 = new System.Windows.Forms.Label();
this.mtbPwd = new System.Windows.Forms.MaskedTextBox();
this.abtnChangePwd = new System.Windows.Forms.AnimationButton();
this.label19 = new System.Windows.Forms.Label();
this.tbCTXxmlNode = new System.Windows.Forms.TextBox();
this.label20 = new System.Windows.Forms.Label();
this.tbCTXIconPath = new System.Windows.Forms.TextBox();
this.label21 = new System.Windows.Forms.Label();
this.label22 = new System.Windows.Forms.Label();
this.tbCTXicaSelfService = new System.Windows.Forms.TextBox();
this.tbCTXappsLocation = new System.Windows.Forms.TextBox();
this.abtnConfirmCitrix = new System.Windows.Forms.AnimationButton();
this.tbMailMessageTo = new System.Windows.Forms.TextBox();
this.label17 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.tbMailMessageFrom = new System.Windows.Forms.TextBox();
this.label16 = new System.Windows.Forms.Label();
this.tbMailMessageDisplayName = new System.Windows.Forms.TextBox();
this.tooltip = new System.Windows.Forms.ToolTip(this.components);
this.switch_frontendupdate = new System.Windows.Forms.SwitchButton();
this.label23 = new System.Windows.Forms.Label();
this.tableGeneral.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numMailAccountPort)).BeginInit();
this.SuspendLayout();
//
// tableGeneral
//
this.tableGeneral.ColumnCount = 9;
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 110F));
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 128F));
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 118F));
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 147F));
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 118F));
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 157F));
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F));
this.tableGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableGeneral.Controls.Add(this.tbUserDomain, 6, 4);
this.tableGeneral.Controls.Add(this.label15, 3, 7);
this.tableGeneral.Controls.Add(this.label9, 1, 7);
this.tableGeneral.Controls.Add(this.label4, 7, 1);
this.tableGeneral.Controls.Add(this.label3, 5, 1);
this.tableGeneral.Controls.Add(this.label11, 1, 1);
this.tableGeneral.Controls.Add(this.rtbDomains, 7, 3);
this.tableGeneral.Controls.Add(this.label5, 7, 2);
this.tableGeneral.Controls.Add(this.switch_use_ad_groups, 6, 2);
this.tableGeneral.Controls.Add(this.label14, 5, 2);
this.tableGeneral.Controls.Add(this.tbAdGroupAdmins, 6, 3);
this.tableGeneral.Controls.Add(this.label6, 5, 3);
this.tableGeneral.Controls.Add(this.abtnAcceptDomains, 7, 7);
this.tableGeneral.Controls.Add(this.label18, 5, 4);
this.tableGeneral.Controls.Add(this.abtnConfirmAD, 5, 5);
this.tableGeneral.Controls.Add(this.tbMailAccountUser, 4, 2);
this.tableGeneral.Controls.Add(this.label8, 3, 2);
this.tableGeneral.Controls.Add(this.tbMailAccountPwd, 4, 3);
this.tableGeneral.Controls.Add(this.label10, 3, 3);
this.tableGeneral.Controls.Add(this.tbMailAccountHost, 4, 4);
this.tableGeneral.Controls.Add(this.label12, 3, 4);
this.tableGeneral.Controls.Add(this.label13, 3, 5);
this.tableGeneral.Controls.Add(this.numMailAccountPort, 4, 5);
this.tableGeneral.Controls.Add(this.abtnConfirmMailAccount, 1, 6);
this.tableGeneral.Controls.Add(this.label1, 1, 8);
this.tableGeneral.Controls.Add(this.mtbPwd, 2, 8);
this.tableGeneral.Controls.Add(this.abtnChangePwd, 1, 9);
this.tableGeneral.Controls.Add(this.label19, 3, 8);
this.tableGeneral.Controls.Add(this.tbCTXxmlNode, 4, 8);
this.tableGeneral.Controls.Add(this.label20, 3, 9);
this.tableGeneral.Controls.Add(this.tbCTXIconPath, 4, 9);
this.tableGeneral.Controls.Add(this.label21, 5, 8);
this.tableGeneral.Controls.Add(this.label22, 5, 9);
this.tableGeneral.Controls.Add(this.tbCTXicaSelfService, 6, 8);
this.tableGeneral.Controls.Add(this.tbCTXappsLocation, 6, 9);
this.tableGeneral.Controls.Add(this.abtnConfirmCitrix, 3, 10);
this.tableGeneral.Controls.Add(this.tbMailMessageTo, 2, 2);
this.tableGeneral.Controls.Add(this.label17, 1, 2);
this.tableGeneral.Controls.Add(this.label2, 1, 3);
this.tableGeneral.Controls.Add(this.tbMailMessageFrom, 2, 3);
this.tableGeneral.Controls.Add(this.label16, 1, 4);
this.tableGeneral.Controls.Add(this.tbMailMessageDisplayName, 2, 4);
this.tableGeneral.Controls.Add(this.switch_frontendupdate, 7, 10);
this.tableGeneral.Controls.Add(this.label23, 7, 9);
this.tableGeneral.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableGeneral.Location = new System.Drawing.Point(0, 0);
this.tableGeneral.Margin = new System.Windows.Forms.Padding(0);
this.tableGeneral.Name = "tableGeneral";
this.tableGeneral.RowCount = 13;
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableGeneral.Size = new System.Drawing.Size(940, 380);
this.tableGeneral.TabIndex = 0;
//
// tbUserDomain
//
this.tbUserDomain.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbUserDomain.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbUserDomain.Location = new System.Drawing.Point(627, 110);
this.tbUserDomain.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbUserDomain.Name = "tbUserDomain";
this.tbUserDomain.Size = new System.Drawing.Size(147, 20);
this.tbUserDomain.TabIndex = 129;
//
// label15
//
this.label15.AutoSize = true;
this.tableGeneral.SetColumnSpan(this.label15, 4);
this.label15.Dock = System.Windows.Forms.DockStyle.Fill;
this.label15.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label15.Location = new System.Drawing.Point(249, 208);
this.label15.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(530, 35);
this.label15.TabIndex = 124;
this.label15.Text = "Citrix";
this.label15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label9
//
this.label9.AutoSize = true;
this.tableGeneral.SetColumnSpan(this.label9, 2);
this.label9.Dock = System.Windows.Forms.DockStyle.Fill;
this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))));
this.label9.Location = new System.Drawing.Point(6, 208);
this.label9.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(228, 35);
this.label9.TabIndex = 106;
this.label9.Text = "Admin-Login";
this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(789, -2);
this.label4.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(140, 35);
this.label4.TabIndex = 84;
this.label4.Text = "Sonstiges";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label3
//
this.label3.AutoSize = true;
this.tableGeneral.SetColumnSpan(this.label3, 2);
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label3.Location = new System.Drawing.Point(514, -2);
this.label3.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(265, 35);
this.label3.TabIndex = 83;
this.label3.Text = "Active Directory";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label11
//
this.label11.AutoSize = true;
this.tableGeneral.SetColumnSpan(this.label11, 4);
this.label11.Dock = System.Windows.Forms.DockStyle.Fill;
this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label11.Location = new System.Drawing.Point(11, -2);
this.label11.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(493, 35);
this.label11.TabIndex = 82;
this.label11.Text = "Mail-Accounts";
this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// rtbDomains
//
this.rtbDomains.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.rtbDomains.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtbDomains.Location = new System.Drawing.Point(794, 68);
this.rtbDomains.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.rtbDomains.Name = "rtbDomains";
this.tableGeneral.SetRowSpan(this.rtbDomains, 4);
this.rtbDomains.Size = new System.Drawing.Size(140, 140);
this.rtbDomains.TabIndex = 59;
this.rtbDomains.Text = "";
//
// label5
//
this.label5.Anchor = System.Windows.Forms.AnchorStyles.None;
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(809, 44);
this.label5.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(109, 13);
this.label5.TabIndex = 103;
this.label5.Text = "Favoriten gültige TLD";
this.label5.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// switch_use_ad_groups
//
this.switch_use_ad_groups.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.switch_use_ad_groups.BackColor = System.Drawing.Color.White;
this.switch_use_ad_groups.ButtonWidth = 35;
this.switch_use_ad_groups.Checked = false;
this.switch_use_ad_groups.CheckState = System.Windows.Forms.CheckState.Unchecked;
this.switch_use_ad_groups.CheckThreeState = false;
this.switch_use_ad_groups.ColorActive = System.Drawing.Color.DarkSeaGreen;
this.switch_use_ad_groups.ColorInactive = System.Drawing.Color.OrangeRed;
this.switch_use_ad_groups.Location = new System.Drawing.Point(627, 38);
this.switch_use_ad_groups.Margin = new System.Windows.Forms.Padding(0, 5, 4, 5);
this.switch_use_ad_groups.Name = "switch_use_ad_groups";
this.switch_use_ad_groups.RoundedButton = true;
this.switch_use_ad_groups.ShowBoarder = false;
this.switch_use_ad_groups.Size = new System.Drawing.Size(80, 25);
this.switch_use_ad_groups.TabIndex = 58;
this.switch_use_ad_groups.Text = "switchButton1";
//
// label14
//
this.label14.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(537, 44);
this.label14.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(85, 13);
this.label14.TabIndex = 57;
this.label14.Text = "AD-Gruppenfilter";
//
// tbAdGroupAdmins
//
this.tbAdGroupAdmins.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbAdGroupAdmins.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbAdGroupAdmins.Location = new System.Drawing.Point(627, 75);
this.tbAdGroupAdmins.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbAdGroupAdmins.Name = "tbAdGroupAdmins";
this.tbAdGroupAdmins.Size = new System.Drawing.Size(147, 20);
this.tbAdGroupAdmins.TabIndex = 105;
//
// label6
//
this.label6.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(553, 79);
this.label6.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(69, 13);
this.label6.TabIndex = 104;
this.label6.Text = "Admingruppe";
this.label6.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// abtnAcceptDomains
//
this.abtnAcceptDomains.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.abtnAcceptDomains.AutoSizeWidth = false;
this.abtnAcceptDomains.Image = null;
this.abtnAcceptDomains.ImageBackColor = System.Drawing.Color.Empty;
this.abtnAcceptDomains.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnAcceptDomains.Location = new System.Drawing.Point(794, 211);
this.abtnAcceptDomains.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.abtnAcceptDomains.Name = "abtnAcceptDomains";
this.abtnAcceptDomains.Size = new System.Drawing.Size(140, 29);
this.abtnAcceptDomains.TabIndex = 102;
this.abtnAcceptDomains.Text = "TLD übernehmen";
this.abtnAcceptDomains.TextBounds = new System.Drawing.Rectangle(1, 1, 138, 27);
this.abtnAcceptDomains.ToolTipText = "";
this.abtnAcceptDomains.WordWrap = true;
//
// label18
//
this.label18.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label18.AutoSize = true;
this.label18.Location = new System.Drawing.Point(559, 114);
this.label18.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label18.Name = "label18";
this.label18.Size = new System.Drawing.Size(63, 13);
this.label18.TabIndex = 130;
this.label18.Text = "Userdomain";
this.label18.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// abtnConfirmAD
//
this.abtnConfirmAD.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.abtnConfirmAD.AutoSizeWidth = false;
this.tableGeneral.SetColumnSpan(this.abtnConfirmAD, 2);
this.abtnConfirmAD.Image = null;
this.abtnConfirmAD.ImageBackColor = System.Drawing.Color.Empty;
this.abtnConfirmAD.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnConfirmAD.Location = new System.Drawing.Point(519, 145);
this.abtnConfirmAD.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.abtnConfirmAD.Name = "abtnConfirmAD";
this.abtnConfirmAD.Size = new System.Drawing.Size(265, 21);
this.abtnConfirmAD.TabIndex = 135;
this.abtnConfirmAD.Text = "AD Änderungen übernehmen";
this.abtnConfirmAD.TextBounds = new System.Drawing.Rectangle(1, 1, 263, 19);
this.abtnConfirmAD.ToolTipText = "";
this.abtnConfirmAD.WordWrap = true;
this.abtnConfirmAD.Click += new System.EventHandler(this.abtnConfirmAD_Click);
//
// tbMailAccountUser
//
this.tbMailAccountUser.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbMailAccountUser.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbMailAccountUser.Location = new System.Drawing.Point(362, 40);
this.tbMailAccountUser.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbMailAccountUser.Name = "tbMailAccountUser";
this.tbMailAccountUser.Size = new System.Drawing.Size(137, 20);
this.tbMailAccountUser.TabIndex = 111;
//
// label8
//
this.label8.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(308, 44);
this.label8.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(49, 13);
this.label8.TabIndex = 109;
this.label8.Text = "Benutzer";
//
// tbMailAccountPwd
//
this.tbMailAccountPwd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbMailAccountPwd.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbMailAccountPwd.Location = new System.Drawing.Point(362, 75);
this.tbMailAccountPwd.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbMailAccountPwd.Name = "tbMailAccountPwd";
this.tbMailAccountPwd.Size = new System.Drawing.Size(137, 20);
this.tbMailAccountPwd.TabIndex = 108;
//
// label10
//
this.label10.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(307, 79);
this.label10.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(50, 13);
this.label10.TabIndex = 110;
this.label10.Text = "Passwort";
//
// tbMailAccountHost
//
this.tbMailAccountHost.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbMailAccountHost.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbMailAccountHost.Location = new System.Drawing.Point(362, 110);
this.tbMailAccountHost.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbMailAccountHost.Name = "tbMailAccountHost";
this.tbMailAccountHost.Size = new System.Drawing.Size(137, 20);
this.tbMailAccountHost.TabIndex = 122;
//
// label12
//
this.label12.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label12.AutoSize = true;
this.label12.Location = new System.Drawing.Point(328, 114);
this.label12.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(29, 13);
this.label12.TabIndex = 112;
this.label12.Text = "Host";
//
// label13
//
this.label13.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(308, 149);
this.label13.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(49, 13);
this.label13.TabIndex = 113;
this.label13.Text = "SSL Port";
//
// numMailAccountPort
//
this.numMailAccountPort.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.numMailAccountPort.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.numMailAccountPort.Location = new System.Drawing.Point(362, 145);
this.numMailAccountPort.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.numMailAccountPort.Maximum = new decimal(new int[] {
99999999,
0,
0,
0});
this.numMailAccountPort.Name = "numMailAccountPort";
this.numMailAccountPort.Size = new System.Drawing.Size(45, 20);
this.numMailAccountPort.TabIndex = 123;
this.numMailAccountPort.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// abtnConfirmMailAccount
//
this.abtnConfirmMailAccount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.abtnConfirmMailAccount.AutoSizeWidth = false;
this.tableGeneral.SetColumnSpan(this.abtnConfirmMailAccount, 4);
this.abtnConfirmMailAccount.Image = null;
this.abtnConfirmMailAccount.ImageBackColor = System.Drawing.Color.Empty;
this.abtnConfirmMailAccount.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnConfirmMailAccount.Location = new System.Drawing.Point(16, 180);
this.abtnConfirmMailAccount.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.abtnConfirmMailAccount.Name = "abtnConfirmMailAccount";
this.abtnConfirmMailAccount.Size = new System.Drawing.Size(493, 21);
this.abtnConfirmMailAccount.TabIndex = 136;
this.abtnConfirmMailAccount.Text = "Mail-Account Änderungen übernehmen";
this.abtnConfirmMailAccount.TextBounds = new System.Drawing.Rectangle(1, 1, 491, 19);
this.abtnConfirmMailAccount.ToolTipText = "";
this.abtnConfirmMailAccount.WordWrap = true;
this.abtnConfirmMailAccount.Click += new System.EventHandler(this.abtnConfirmMailAccount_Click);
//
// label1
//
this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(25, 254);
this.label1.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(86, 13);
this.label1.TabIndex = 52;
this.label1.Text = "Passwort ändern";
//
// mtbPwd
//
this.mtbPwd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.mtbPwd.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.mtbPwd.Location = new System.Drawing.Point(116, 250);
this.mtbPwd.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.mtbPwd.Name = "mtbPwd";
this.mtbPwd.PasswordChar = '⬤';
this.mtbPwd.Size = new System.Drawing.Size(118, 20);
this.mtbPwd.TabIndex = 54;
//
// abtnChangePwd
//
this.abtnChangePwd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.abtnChangePwd.AutoSizeWidth = false;
this.tableGeneral.SetColumnSpan(this.abtnChangePwd, 2);
this.abtnChangePwd.Image = null;
this.abtnChangePwd.ImageBackColor = System.Drawing.Color.Empty;
this.abtnChangePwd.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnChangePwd.Location = new System.Drawing.Point(6, 281);
this.abtnChangePwd.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.abtnChangePwd.Name = "abtnChangePwd";
this.abtnChangePwd.Size = new System.Drawing.Size(228, 29);
this.abtnChangePwd.TabIndex = 56;
this.abtnChangePwd.Text = "Passwort ändern";
this.abtnChangePwd.TextBounds = new System.Drawing.Rectangle(1, 1, 226, 27);
this.abtnChangePwd.ToolTipText = "";
this.abtnChangePwd.Click += new System.EventHandler(this.abtnChangePwd_Click);
//
// label19
//
this.label19.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label19.AutoSize = true;
this.label19.Location = new System.Drawing.Point(273, 254);
this.label19.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label19.Name = "label19";
this.label19.Size = new System.Drawing.Size(84, 13);
this.label19.TabIndex = 131;
this.label19.Text = "XML-Root-Node";
this.label19.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// tbCTXxmlNode
//
this.tbCTXxmlNode.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbCTXxmlNode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbCTXxmlNode.Location = new System.Drawing.Point(362, 250);
this.tbCTXxmlNode.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbCTXxmlNode.Name = "tbCTXxmlNode";
this.tbCTXxmlNode.Size = new System.Drawing.Size(137, 20);
this.tbCTXxmlNode.TabIndex = 125;
//
// label20
//
this.label20.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label20.AutoSize = true;
this.label20.Location = new System.Drawing.Point(295, 289);
this.label20.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label20.Name = "label20";
this.label20.Size = new System.Drawing.Size(62, 13);
this.label20.TabIndex = 132;
this.label20.Text = "Symbolpfad";
this.label20.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// tbCTXIconPath
//
this.tbCTXIconPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbCTXIconPath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbCTXIconPath.Location = new System.Drawing.Point(362, 285);
this.tbCTXIconPath.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbCTXIconPath.Name = "tbCTXIconPath";
this.tbCTXIconPath.Size = new System.Drawing.Size(137, 20);
this.tbCTXIconPath.TabIndex = 126;
//
// label21
//
this.label21.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label21.AutoSize = true;
this.label21.Location = new System.Drawing.Point(541, 254);
this.label21.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label21.Name = "label21";
this.label21.Size = new System.Drawing.Size(81, 13);
this.label21.TabIndex = 133;
this.label21.Text = "SelfService.exe";
this.label21.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// label22
//
this.label22.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label22.AutoSize = true;
this.label22.Location = new System.Drawing.Point(547, 289);
this.label22.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label22.Name = "label22";
this.label22.Size = new System.Drawing.Size(75, 13);
this.label22.TabIndex = 134;
this.label22.Text = "Apps-Location";
this.label22.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// tbCTXicaSelfService
//
this.tbCTXicaSelfService.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbCTXicaSelfService.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbCTXicaSelfService.Location = new System.Drawing.Point(627, 250);
this.tbCTXicaSelfService.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbCTXicaSelfService.Name = "tbCTXicaSelfService";
this.tbCTXicaSelfService.Size = new System.Drawing.Size(147, 20);
this.tbCTXicaSelfService.TabIndex = 127;
//
// tbCTXappsLocation
//
this.tbCTXappsLocation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbCTXappsLocation.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbCTXappsLocation.Location = new System.Drawing.Point(627, 285);
this.tbCTXappsLocation.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbCTXappsLocation.Name = "tbCTXappsLocation";
this.tbCTXappsLocation.Size = new System.Drawing.Size(147, 20);
this.tbCTXappsLocation.TabIndex = 128;
//
// abtnConfirmCitrix
//
this.abtnConfirmCitrix.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.abtnConfirmCitrix.AutoSizeWidth = false;
this.tableGeneral.SetColumnSpan(this.abtnConfirmCitrix, 4);
this.abtnConfirmCitrix.Image = null;
this.abtnConfirmCitrix.ImageBackColor = System.Drawing.Color.Empty;
this.abtnConfirmCitrix.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnConfirmCitrix.Location = new System.Drawing.Point(254, 316);
this.abtnConfirmCitrix.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.abtnConfirmCitrix.Name = "abtnConfirmCitrix";
this.abtnConfirmCitrix.Size = new System.Drawing.Size(530, 29);
this.abtnConfirmCitrix.TabIndex = 137;
this.abtnConfirmCitrix.Text = "Citrix-Einstellungen übernehmen";
this.abtnConfirmCitrix.TextBounds = new System.Drawing.Rectangle(1, 1, 528, 27);
this.abtnConfirmCitrix.ToolTipText = "";
this.abtnConfirmCitrix.WordWrap = true;
this.abtnConfirmCitrix.Click += new System.EventHandler(this.abtnConfirmCitrix_Click);
//
// tbMailMessageTo
//
this.tbMailMessageTo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbMailMessageTo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbMailMessageTo.Location = new System.Drawing.Point(116, 40);
this.tbMailMessageTo.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbMailMessageTo.Name = "tbMailMessageTo";
this.tbMailMessageTo.Size = new System.Drawing.Size(118, 20);
this.tbMailMessageTo.TabIndex = 121;
//
// label17
//
this.label17.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label17.AutoSize = true;
this.label17.Location = new System.Drawing.Point(52, 44);
this.label17.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label17.Name = "label17";
this.label17.Size = new System.Drawing.Size(59, 13);
this.label17.TabIndex = 117;
this.label17.Text = "Senden an";
//
// label2
//
this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(85, 79);
this.label2.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(26, 13);
this.label2.TabIndex = 115;
this.label2.Text = "Von";
//
// tbMailMessageFrom
//
this.tbMailMessageFrom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbMailMessageFrom.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbMailMessageFrom.Location = new System.Drawing.Point(116, 75);
this.tbMailMessageFrom.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbMailMessageFrom.Name = "tbMailMessageFrom";
this.tbMailMessageFrom.Size = new System.Drawing.Size(118, 20);
this.tbMailMessageFrom.TabIndex = 119;
//
// label16
//
this.label16.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.label16.AutoSize = true;
this.label16.Location = new System.Drawing.Point(33, 114);
this.label16.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(78, 13);
this.label16.TabIndex = 116;
this.label16.Text = "Absendername";
//
// tbMailMessageDisplayName
//
this.tbMailMessageDisplayName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbMailMessageDisplayName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbMailMessageDisplayName.Location = new System.Drawing.Point(116, 110);
this.tbMailMessageDisplayName.Margin = new System.Windows.Forms.Padding(0, 0, 10, 0);
this.tbMailMessageDisplayName.Name = "tbMailMessageDisplayName";
this.tbMailMessageDisplayName.Size = new System.Drawing.Size(118, 20);
this.tbMailMessageDisplayName.TabIndex = 120;
//
// switch_frontendupdate
//
this.switch_frontendupdate.Anchor = System.Windows.Forms.AnchorStyles.None;
this.switch_frontendupdate.BackColor = System.Drawing.Color.White;
this.switch_frontendupdate.ButtonWidth = 35;
this.switch_frontendupdate.Checked = false;
this.switch_frontendupdate.CheckState = System.Windows.Forms.CheckState.Unchecked;
this.switch_frontendupdate.CheckThreeState = false;
this.switch_frontendupdate.ColorActive = System.Drawing.Color.DarkSeaGreen;
this.switch_frontendupdate.ColorInactive = System.Drawing.Color.OrangeRed;
this.switch_frontendupdate.Location = new System.Drawing.Point(822, 318);
this.switch_frontendupdate.Margin = new System.Windows.Forms.Padding(10, 5, 4, 5);
this.switch_frontendupdate.Name = "switch_frontendupdate";
this.switch_frontendupdate.RoundedButton = true;
this.switch_frontendupdate.ShowBoarder = false;
this.switch_frontendupdate.Size = new System.Drawing.Size(80, 25);
this.switch_frontendupdate.TabIndex = 138;
this.switch_frontendupdate.Text = "switchButton1";
this.switch_frontendupdate.CheckStateChanged += new System.EventHandler<System.Windows.Forms.CheckStateEventArgs>(this.switch_frontendupdate_CheckStateChanged);
//
// label23
//
this.label23.Anchor = System.Windows.Forms.AnchorStyles.None;
this.label23.AutoSize = true;
this.label23.Location = new System.Drawing.Point(821, 289);
this.label23.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.label23.Name = "label23";
this.label23.Size = new System.Drawing.Size(85, 13);
this.label23.TabIndex = 140;
this.label23.Text = "FrontEndUpdate";
this.label23.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
//
// ucAdminGeneral
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.Controls.Add(this.tableGeneral);
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "ucAdminGeneral";
this.Size = new System.Drawing.Size(940, 380);
this.tableGeneral.ResumeLayout(false);
this.tableGeneral.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.numMailAccountPort)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableGeneral;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.MaskedTextBox mtbPwd;
private System.Windows.Forms.AnimationButton abtnChangePwd;
private System.Windows.Forms.SwitchButton switch_use_ad_groups;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.RichTextBox rtbDomains;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.AnimationButton abtnAcceptDomains;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox tbAdGroupAdmins;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.TextBox tbMailAccountPwd;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox tbMailAccountUser;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.TextBox tbMailMessageFrom;
private System.Windows.Forms.TextBox tbMailMessageDisplayName;
private System.Windows.Forms.TextBox tbMailMessageTo;
private System.Windows.Forms.TextBox tbMailAccountHost;
private System.Windows.Forms.NumericEx numMailAccountPort;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.TextBox tbCTXappsLocation;
private System.Windows.Forms.TextBox tbCTXicaSelfService;
private System.Windows.Forms.TextBox tbCTXIconPath;
private System.Windows.Forms.TextBox tbCTXxmlNode;
private System.Windows.Forms.TextBox tbUserDomain;
private System.Windows.Forms.Label label18;
private System.Windows.Forms.Label label19;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.Label label22;
private System.Windows.Forms.AnimationButton abtnConfirmAD;
private System.Windows.Forms.AnimationButton abtnConfirmMailAccount;
private System.Windows.Forms.AnimationButton abtnConfirmCitrix;
private System.Windows.Forms.ToolTip tooltip;
private System.Windows.Forms.SwitchButton switch_frontendupdate;
private System.Windows.Forms.Label label23;
}
}

View File

@@ -0,0 +1,171 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
[Browsable(false), ToolboxItem(false)]
public partial class ucAdminGeneral : UserControl
{
private void CreateGeneralBindings()
{
switch_use_ad_groups.Checked = Config.Main.UseActiveDirectoryGroups;
switch_frontendupdate.Checked = Config.Main.Administration.RemoteFrontEndUpdate;
rtbDomains.Lines = Config.Main.WebDomains;
}
/// <summary>
/// Erstellt die ToolTips für die Steuerelemente
/// </summary>
private void SetToolTips()
{
switch_use_ad_groups.MouseEnter += (sender, e) => tooltip.Show("Nutzt die Active Directory Gruppen, um die Apps aus den Listen zu filtern. Wenn nicht aktiv, werden alle Apps (außer die Admin-Liste) angezeigt", sender as Control);
switch_frontendupdate.MouseEnter += (sender, e) => tooltip.Show("Aktiviert, oder deaktiviert das Aktualisieren aller GFATask Remote-FrontEnds", sender as Control);
rtbDomains.MouseEnter += (sender, e) => tooltip.Show("Alle aufgeführten Top-Level-Domains in der Liste werden für die Favoriten-Liste als Webseite erkannt", sender as Control);
mtbPwd.MouseEnter += (sender, e) => tooltip.Show("Ändert das Passwort für den Adminbereich für Nicht-Administratoren", sender as Control);
}
public ucAdminGeneral()
{
InitializeComponent();
this.SetDefaultDesign();
this.CreateGeneralBindings();
tbAdGroupAdmins.Text = Config.Main.Administration.ActiveDirectoryGroup;
tbUserDomain.Text = Config.Main.DomainName;
tbMailAccountPwd.Text = new string(Config.Main.Administration.Accounts.Mail.SecurePassword.Select(chr => (char)chr).ToArray());
tbMailAccountUser.Text = Config.Main.Administration.Accounts.Mail.UserName;
tbMailAccountHost.Text = Config.Main.Administration.Accounts.Mail.Host;
numMailAccountPort.Value = Config.Main.Administration.Accounts.Mail.SSLPort;
tbMailMessageFrom.Text = Config.Main.Administration.Accounts.Mail.MailMessage.From.Address;
tbMailMessageDisplayName.Text = Config.Main.Administration.Accounts.Mail.MailMessage.From.DisplayName;
tbMailMessageTo.Text = Config.Main.Administration.Accounts.Mail.MailMessage.To;
tbCTXxmlNode.Text = Config.Main.Citrix.XMLNodes;
tbCTXicaSelfService.Text = Config.Main.Citrix.ICASelfService;
tbCTXIconPath.Text = Config.Main.Citrix.Icons;
tbCTXappsLocation.Text = Config.Main.Citrix.AppsLocation;
label9.Paint += Designer.DrawHeaderLabel;
label15.Paint += Designer.DrawHeaderLabel;
label11.Paint += Designer.DrawHeaderLabel;
label4.Paint += Designer.DrawHeaderLabel;
label3.Paint += Designer.DrawHeaderLabel;
this.SetToolTips();
}
private void abtnChangePwd_Click(object sender, EventArgs e)
{
string oldpw = new string(Config.Main.Administration.Accounts.Login.SecurePassword.Select(chr => (char)chr).ToArray());
Config.Main.Administration.Accounts.Login.SecurePassword = mtbPwd.Text.ToArray().Select(chr => (int)chr).ToArray();
JSON.Save(JSONConfig.Main);
XObjects.MailService.Send(
new MailAddress(
Config.Main.Administration.Accounts.Mail.MailMessage.From.Address,
Config.Main.Administration.Accounts.Mail.MailMessage.From.DisplayName, Encoding.UTF8),
new MailAddress(Config.Main.Administration.Accounts.Mail.MailMessage.To),
"GFATask Kennwortänderung des Adminbereichs",
$"<body style=\"font-family:Segoe UI\">" +
$"Das Administartionskennwort wurde\n" +
$"durch den Benutzer <b>{Environment.UserDomainName + @"\" + Environment.UserName}</b>" +
$"<br> von \"{"<b>" + oldpw + "</b>"}\"" +
$"<br> in \"{"<b>" + mtbPwd.Text + "</b>"}\" geändert" +
$"<br><br>" +
$"Ihr GFATask Administrator" +
$"</body>"
);
}
private void abtnConfirmCitrix_Click(object sender, EventArgs e)
{
Config.Main.Citrix = new Models.Config.Main.CitrixProperties()
{
AppsLocation = tbCTXappsLocation.Text,
ICASelfService = tbCTXicaSelfService.Text,
Icons = tbCTXIconPath.Text,
XMLNodes = tbCTXxmlNode.Text
};
JSON.Save(JSONConfig.Main);
XObjects.FrontEndRefresh.Update(new GFATaskStream() { PipeType = NetPipeType.Citrix });
}
private void abtnConfirmAD_Click(object sender, EventArgs e)
{
Config.Main.UseActiveDirectoryGroups = switch_use_ad_groups.Checked;
JSON.Save(JSONConfig.Main);
this.UseActiveDirectory();
XObjects.FrontEndRefresh.Update(new GFATaskStream() { PipeType = NetPipeType.ActiveDirectory });
}
public void UseActiveDirectory()
{
if (this.Created)
{
Forms.Main.CreateAppListPanels();
Accessor.SetLastAppListPanel();
}
}
public void ChangeCitrix()
{
if (this.Created)
{
Creator.AppListPanel(XObjects.AllAppListPanels.Find(panel => panel.AppType == AppType.Citrix), AppLists.Citrix);
}
}
private void abtnConfirmMailAccount_Click(object sender, EventArgs e)
{
if (this.Created)
{
Config.Main.Administration.Accounts.Mail = new Models.Config.Main.AdministrationProperties.AccountProperties.MailAccount()
{
Host = tbMailAccountHost.Text,
MailMessage = new Models.Config.Main.AdministrationProperties.AccountProperties.MailAccount.MailMessageProperties()
{
From = new Models.Config.Main.AdministrationProperties.AccountProperties.MailAccount.MailMessageProperties.FromProperties()
{
Address = tbMailMessageFrom.Text,
DisplayName = tbMailMessageDisplayName.Text
},
To = tbMailMessageTo.Text,
},
SSLPort = (int)numMailAccountPort.Value,
SecurePassword = tbMailAccountPwd.Text.ToArray().Select(chr => (int)chr).ToArray(),
UserName = tbMailAccountUser.Text
};
JSON.Save(JSONConfig.Main);
XObjects.FrontEndRefresh.Update(new GFATaskStream() { PipeType = NetPipeType.MailAccount });
}
}
public void SetFrontEndUpdate()
{
XObjects.FrontEndRefresh.Active = Config.Main.Administration.RemoteFrontEndUpdate;
}
private void switch_frontendupdate_CheckStateChanged(object sender, CheckStateEventArgs e)
{
Config.Main.Administration.RemoteFrontEndUpdate = switch_frontendupdate.Checked;
JSON.Save(JSONConfig.Main);
this.SetFrontEndUpdate();
XObjects.FrontEndRefresh.Update(new GFATaskStream() { PipeType = NetPipeType.FrontEndUpdate });
}
}
}

View File

@@ -0,0 +1,123 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,64 @@
namespace GFATask
{
partial class ucAdminHelp
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.webBrowser = new System.Windows.Forms.WebBrowser();
this.SuspendLayout();
//
// webBrowser
//
this.webBrowser.AllowNavigation = false;
this.webBrowser.AllowWebBrowserDrop = false;
this.webBrowser.Dock = System.Windows.Forms.DockStyle.Fill;
this.webBrowser.IsWebBrowserContextMenuEnabled = false;
this.webBrowser.Location = new System.Drawing.Point(0, 0);
this.webBrowser.MinimumSize = new System.Drawing.Size(20, 20);
this.webBrowser.Name = "webBrowser";
this.webBrowser.Size = new System.Drawing.Size(858, 509);
this.webBrowser.TabIndex = 0;
//
// ucAdminHelp
//
this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.BackColor = System.Drawing.Color.White;
this.Controls.Add(this.webBrowser);
this.Margin = new System.Windows.Forms.Padding(0);
this.Name = "ucAdminHelp";
this.Size = new System.Drawing.Size(858, 509);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.WebBrowser webBrowser;
}
}

View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Navigation;
namespace GFATask
{
public partial class ucAdminHelp : UserControl
{
public ucAdminHelp()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
webBrowser.Url = new Uri(Paths.Help.Administration.FullName);
}
protected override void OnInvalidated(InvalidateEventArgs e)
{
base.OnInvalidated(e);
webBrowser.Refresh();
}
}
}

View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,129 @@
namespace GFATask
{
partial class ucAdminNewsFeeds
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Komponenten-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.dgvNewsFeeds = new System.Windows.Forms.DataGridView();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.abtnAnwenden = new System.Windows.Forms.AnimationButton();
this.abtnVerwerfen = new System.Windows.Forms.AnimationButton();
((System.ComponentModel.ISupportInitialize)(this.dgvNewsFeeds)).BeginInit();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// dgvNewsFeeds
//
this.dgvNewsFeeds.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.tableLayoutPanel1.SetColumnSpan(this.dgvNewsFeeds, 3);
this.dgvNewsFeeds.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgvNewsFeeds.Location = new System.Drawing.Point(3, 3);
this.dgvNewsFeeds.Name = "dgvNewsFeeds";
this.dgvNewsFeeds.RowHeadersWidth = 51;
this.dgvNewsFeeds.RowTemplate.Height = 24;
this.dgvNewsFeeds.Size = new System.Drawing.Size(852, 468);
this.dgvNewsFeeds.TabIndex = 0;
this.dgvNewsFeeds.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvNewsFeeds_CellClick);
this.dgvNewsFeeds.RowsRemoved += new System.Windows.Forms.DataGridViewRowsRemovedEventHandler(this.dgvWorldDays_RowsRemoved);
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 3;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.63636F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 18.18182F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 18.18182F));
this.tableLayoutPanel1.Controls.Add(this.dgvNewsFeeds, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.abtnAnwenden, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.abtnVerwerfen, 1, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(858, 509);
this.tableLayoutPanel1.TabIndex = 1;
//
// abtnAnwenden
//
this.abtnAnwenden.Anchor = System.Windows.Forms.AnchorStyles.None;
this.abtnAnwenden.AutoSizeWidth = false;
this.abtnAnwenden.Image = null;
this.abtnAnwenden.ImageBackColor = System.Drawing.Color.Empty;
this.abtnAnwenden.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnAnwenden.Location = new System.Drawing.Point(728, 474);
this.abtnAnwenden.Margin = new System.Windows.Forms.Padding(0);
this.abtnAnwenden.Name = "abtnAnwenden";
this.abtnAnwenden.Size = new System.Drawing.Size(102, 34);
this.abtnAnwenden.TabIndex = 60;
this.abtnAnwenden.Text = "Anwenden";
this.abtnAnwenden.ToolTipText = "";
this.abtnAnwenden.Click += new System.EventHandler(this.abtnAnwenden_Click);
//
// abtnVerwerfen
//
this.abtnVerwerfen.Anchor = System.Windows.Forms.AnchorStyles.None;
this.abtnVerwerfen.AutoSizeWidth = false;
this.abtnVerwerfen.Image = null;
this.abtnVerwerfen.ImageBackColor = System.Drawing.Color.Empty;
this.abtnVerwerfen.ImageBounds = new System.Drawing.Rectangle(0, 0, 0, 0);
this.abtnVerwerfen.Location = new System.Drawing.Point(568, 474);
this.abtnVerwerfen.Margin = new System.Windows.Forms.Padding(0);
this.abtnVerwerfen.Name = "abtnVerwerfen";
this.abtnVerwerfen.Size = new System.Drawing.Size(110, 35);
this.abtnVerwerfen.TabIndex = 61;
this.abtnVerwerfen.Text = "Verwerfen";
this.abtnVerwerfen.ToolTipText = "";
this.abtnVerwerfen.Click += new System.EventHandler(this.abtnVerwerfen_Click);
//
// ucAdminNewsFeeds
//
this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.BackColor = System.Drawing.Color.White;
this.Controls.Add(this.tableLayoutPanel1);
this.DoubleBuffered = true;
this.Margin = new System.Windows.Forms.Padding(0);
this.Name = "ucAdminNewsFeeds";
this.Size = new System.Drawing.Size(858, 509);
this.Tag = "ucAdminNewsFeeds";
((System.ComponentModel.ISupportInitialize)(this.dgvNewsFeeds)).EndInit();
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dgvNewsFeeds;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.AnimationButton abtnAnwenden;
private System.Windows.Forms.AnimationButton abtnVerwerfen;
}
}

View File

@@ -0,0 +1,101 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GFATask
{
public partial class ucAdminNewsFeeds : UserControl
{
public ucAdminNewsFeeds()
{
InitializeComponent();
this.SetDefaultDesign();
dgvNewsFeeds.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
List<ReadableNewsFeed> converted_newsfeedlist = Config.NewsFeeds.Select(w => new ReadableNewsFeed(w) ).ToList();
DataTable dt = new DataTable();
dt.Columns.AddRange(converted_newsfeedlist[0].GetType().GetProperties().Select(prop => new DataColumn(prop.Name, prop.PropertyType)).ToArray());
converted_newsfeedlist.ForEach(w => dt.Rows.Add(w.Name, w.Aktiv, w.Symbol, w.Icon, w.Starttag, w.Startmonat, w.Endtag, w.Endmonat, w.Titel));
dgvNewsFeeds.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
dgvNewsFeeds.DataSource = dt;
dgvNewsFeeds.CellEndEdit += DgvWorldDays_CellEndEdit;
dgvNewsFeeds.CellBeginEdit += DgvWorldDays_CellBeginEdit;
}
private void DgvWorldDays_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
//if(dgvNewsFeeds.Columns["Symbol"].Index == e.ColumnIndex || dgvNewsFeeds.Columns["Icon"].Index == e.ColumnIndex)
//{
// var ofd = new OpenFileDialog() { Multiselect = false };
// if(ofd.ShowDialog() == DialogResult.OK)
// {
// dgvNewsFeeds.CurrentCell.Value = ofd.SafeFileName;
// dgvNewsFeeds.Rows[dgvNewsFeeds.CurrentRow.Index].Cells["Icon"].Value = new Bitmap(Image.FromStream(File.OpenRead(ofd.FileName)), new Size(16,16));
// }
//}
}
private void DgvWorldDays_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
dgvNewsFeeds.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange);
dgvNewsFeeds.BindingContext[dgvNewsFeeds.DataSource].EndCurrentEdit();
}
private void abtnAnwenden_Click(object sender, EventArgs e)
{
List<Models.NewsFeed> return_newsfeedlist = ((DataTable)dgvNewsFeeds.DataSource).Rows.Cast<DataRow>().Select(w => new Models.NewsFeed() {
Name = w[0].ToString(),
Enable = (bool)w[1],
Icon = w[2] == null ? "" : w[2].ToString(),
Begin = new Models.NewsFeed.Date() { Day = (int)w[4], Month = (int)w[5]},
End = new Models.NewsFeed.Date() { Day = (int)w[6], Month = (int)w[7]},
Title = w[8].ToString()
}).ToList();
Config.NewsFeeds = return_newsfeedlist;
JSON.Save(JSONConfig.NewsFeeds);
Forms.Main.UseNewsFeeds();
}
private void abtnVerwerfen_Click(object sender, EventArgs e)
{
}
private void dgvWorldDays_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
{
}
private void dgvNewsFeeds_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgvNewsFeeds.Columns["Symbol"].Index == e.ColumnIndex || dgvNewsFeeds.Columns["Icon"].Index == e.ColumnIndex)
{
var ofd = new OpenFileDialog() { Multiselect = false };
if (ofd.ShowDialog() == DialogResult.OK)
{
if(ofd.FileName == "[Kein Icon]")
{
return;
}
Creator.StreamCopy(ofd.FileName, Paths.NewsFeeds.Icons.Directory + ofd.SafeFileName, (fs) =>
{
dgvNewsFeeds[dgvNewsFeeds.Columns["Symbol"].Index, e.RowIndex].Value = ofd.SafeFileName == "[Kein Icon]" ? null : Path.GetFileName(fs.Name);
dgvNewsFeeds.Rows[dgvNewsFeeds.CurrentRow.Index].Cells["Icon"].Value = ofd.SafeFileName == "[Kein Icon]" ? null : new Bitmap(Image.FromStream(fs), new Size(16, 16));
});
}
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

79
GFATask/app.manifest Normal file
View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC-Manifestoptionen
Wenn Sie die Ebene der Benutzerkontensteuerung für Windows ändern möchten, ersetzen Sie den
Knoten "requestedExecutionLevel" wie folgt.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Durch Angabe des Elements "requestedExecutionLevel" wird die Datei- und Registrierungsvirtualisierung deaktiviert.
Entfernen Sie dieses Element, wenn diese Virtualisierung aus Gründen der Abwärtskompatibilität
für die Anwendung erforderlich ist.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Eine Liste der Windows-Versionen, unter denen diese Anwendung getestet
und für die sie entwickelt wurde. Wenn Sie die Auskommentierung der entsprechenden Elemente aufheben,
wird von Windows automatisch die kompatibelste Umgebung ausgewählt. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!--Windows 10
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Gibt an, dass die Anwendung mit DPI-Werten kompatibel ist und von Windows nicht automatisch auf höhere
DPI-Werte skaliert wird. WPF-Anwendungen (Windows Presentation Foundation) sind automatisch mit DPI-Werten kompatibel, eine Aktivierung
ist nicht erforderlich. Für Windows Forms-Anwendungen für .NET Framework 4.6, die diese Einstellung aktivieren, muss
auch die Einstellung "'EnableWindowsFormsHighDpiAutoResizing" in der Datei "app.config" auf TRUE festgelegt werden.
Hierdurch können für die Anwendung lange Pfade verwendet werden. Weitere Informationen finden Sie unter https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation.-->
<!--Führt zu fehlerhafter Skalierung-->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
<!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

View File

@@ -0,0 +1,867 @@
{
"type": 2,
"apps": [
{
"id": 1,
"description": null,
"name": "StoreFront",
"group": "Citrix",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\storefront.a67001.ffm\\",
"args": ""
}
],
"icon": "Citrix SF Logo.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 3,
"description": null,
"name": "VCSA",
"group": "vSphere",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\a670wms0008.a67001.ffm:5480\\#\\login?locale=de",
"args": ""
},
{
"cmd": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\a670wms0008.a67001.ffm:5480\\#\\login?locale=de"
},
{
"cmd": "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\a670wms0008.a67001.ffm:5480\\#\\login?locale=de"
}
],
"icon": "edge.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 5,
"description": null,
"name": "ActiveRoles",
"group": "Amt 16",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\ars.city.net.ffm\\AD-Verwaltung\\",
"args": ""
}
],
"icon": "edge.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 6,
"description": "",
"name": "Exchange Admin",
"group": "Amt 16",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\webmail.stadt-frankfurt.de\\ecp",
"args": ""
}
],
"icon": "Exchange Admin.png",
"lastmodified": "2022-01-21T09:07:41.9400123+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 7,
"description": null,
"name": "SafeQ",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\a670wps0003.a67001.ffm\\",
"args": ""
}
],
"icon": "SafeQ.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 8,
"description": null,
"name": "Sophos",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\a670lpx0001\\",
"args": ""
}
],
"icon": "Sophos.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 9,
"description": "",
"name": "Confluence Dashboard",
"group": "Jira",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http:\\\\confluence.a67001.ffm:8443\\display\\6733\\67.33+Dashboard",
"args": ""
}
],
"icon": "jira_atlassian.png",
"lastmodified": "2021-12-23T05:27:12.8420767+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 10,
"description": "",
"name": "Confluence KnowledgeBase",
"group": "Jira",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http:\\\\confluence.a67001.ffm:8443\\display\\IKT\\Start+67.33+KB",
"args": ""
}
],
"icon": "jira_atlassian.png",
"lastmodified": "2021-12-23T05:27:20.435887+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 11,
"description": "",
"name": "Confluence",
"group": "Jira",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http:\\\\confluence.a67001.ffm:8443\\#all-updates",
"args": ""
}
],
"icon": "jira_atlassian.png",
"lastmodified": "2021-12-23T05:27:06.1017967+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 12,
"description": null,
"name": "Insight",
"group": "Jira",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http:\\\\servicedesk.a67001.ffm\\secure\\ObjectSchema.jspa?id=7&typeId=70&objectId=4550",
"args": ""
}
],
"icon": "jira_logo.png",
"lastmodified": "2021-12-01T05:25:02.5469055+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 14,
"description": null,
"name": "JSD Dashboard",
"group": "Jira",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http:\\\\servicedesk.a67001.ffm\\secure\\Dashboard.jspa",
"args": ""
}
],
"icon": "jira_atlassian.png",
"lastmodified": "2021-12-01T05:24:42.8894648+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 15,
"description": null,
"name": "Apps",
"group": "Webseiten Amt",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\apps.gfa-ffm.de\\adm",
"args": ""
}
],
"icon": "edge.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 16,
"description": null,
"name": "Friedhof Frankfurt",
"group": "Webseiten Amt",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\friedhof-frankfurt.de\\adm",
"args": ""
}
],
"icon": "edge.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 17,
"description": null,
"name": "Grünflächenamt",
"group": "Webseiten Amt",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\gruenflaechenamt.de\\adm",
"args": ""
}
],
"icon": "edge.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 18,
"description": null,
"name": "Stadtwaldhaus Frankfurt",
"group": "Webseiten Amt",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\stadtwaldhaus-frankfurt.de\\adm",
"args": ""
}
],
"icon": "edge.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 19,
"description": null,
"name": "Trauerwald Frankfurt",
"group": "Webseiten Amt",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\trauerwald-frankfurt.de\\wp-admin",
"args": ""
}
],
"icon": "edge.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 20,
"description": null,
"name": "Arriba Admin",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "\\\\DellNAS\\Install$\\UsrTools\\RDP\\Arriba_V14.3_admin.rdp",
"args": ""
}
],
"icon": "Arriba.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 21,
"description": null,
"name": "Austauschsystem",
"group": "Freigaben",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "\\\\citywap1023.city.net.ffm\\amt_67$\\Austausch",
"args": ""
}
],
"icon": "Austauschsystem.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 23,
"description": null,
"name": "EgoSecure Management",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "\\\\a670wfs0002\\d$\\Administrative_Software\\Tools\\EgoSecureConsole.exe",
"args": ""
}
],
"icon": "EgoSecure Management.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 24,
"description": "Passwortmanager zum Verwalten von Anmeldeinformationen",
"name": "KeePass",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "\\\\dellnas\\d$\\admin\\install\\Programme\\KeePass\\KeePass.exe",
"args": ""
}
],
"icon": "KeePass.png",
"lastmodified": "2021-12-02T07:03:38.1005383+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 27,
"description": null,
"name": "Veeam Backup Enterprise",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\a670wms0012.a67001.ffm:9443\\",
"args": ""
},
{
"cmd": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\a670wms0012.a67001.ffm:9443\\"
},
{
"cmd": "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\a670wms0012.a67001.ffm:9443\\"
}
],
"icon": "Veeam Enterprise.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 29,
"description": null,
"name": "Metastorm (TK Auftragssystem)",
"group": "Amt 16",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http:\\\\tk-workflow.city.net.ffm\\metastorm\\",
"args": ""
}
],
"icon": "Metastorm.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 30,
"description": null,
"name": "Bookmarks",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http:\\\\A670WTS6733\\",
"args": ""
},
{
"cmd": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"args": "http:\\\\A670WTS6733\\"
},
{
"cmd": "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
"args": "http:\\\\A670WTS6733\\"
}
],
"icon": "bookmark.png",
"lastmodified": "2021-12-01T05:54:57.0348952+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 31,
"description": "",
"name": "Confluence Doku",
"group": "Jira",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http:\\\\confluence.a67001.ffm:8443\\display\\ITDoku",
"args": ""
}
],
"icon": "jira_atlassian.png",
"lastmodified": "2021-12-23T05:26:58.8329972+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 32,
"description": null,
"name": "eKom21 Shop",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\shop.ekom21.de\\home\\login\\signin",
"args": ""
},
{
"cmd": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\shop.ekom21.de\\home\\login\\signin"
},
{
"cmd": "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\shop.ekom21.de\\home\\login\\signin"
}
],
"icon": "eKom21_shop.png",
"lastmodified": "2021-12-01T06:13:53.1272746+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 33,
"description": null,
"name": "vSphere Client",
"group": "vSphere",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\a670wms0008.a67001.ffm\\ui",
"args": ""
}
],
"icon": "VI Client.png",
"lastmodified": "2021-12-01T05:55:20.270436+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 35,
"description": "",
"name": "SynoNAS DSM",
"group": "Synology",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\10.114.107.13:6733",
"args": ""
},
{
"cmd": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\10.114.107.13:6733"
},
{
"cmd": "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\10.114.107.13:6733"
}
],
"icon": "Synology.png",
"lastmodified": "2022-02-10T07:34:42.4528891+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 37,
"description": null,
"name": "Hosting-Umgebung Amt 16",
"group": "Amt 16",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\hosting.city.net.ffm",
"args": ""
},
{
"cmd": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\hosting.city.net.ffm"
},
{
"cmd": "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
"args": "\\\\dellnas\\install$\\UsrTools\\Programme\\Mozilla Firefox\\firefox.exe\thttps:\\\\hosting.city.net.ffm"
}
],
"icon": "edge.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 38,
"description": null,
"name": "A670WWW6701 Freigabe",
"group": "Freigaben",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "\\\\a670www6701.city.net.ffm\\backup$",
"args": ""
}
],
"icon": "Net Drive.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 39,
"description": "",
"name": "Service Management Portal Amt 16",
"group": "Amt 16",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\serviceportal.city.net.ffm\\",
"args": "https:\\\\serviceportal.city.net.ffm\\"
},
{
"cmd": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\serviceportal.city.net.ffm\\"
},
{
"cmd": "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\serviceportal.city.net.ffm\\"
}
],
"icon": "Windows10.png",
"lastmodified": "2021-12-22T10:03:59.9636909+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 40,
"description": null,
"name": "PRTG",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\a670wms0010.a67001.ffm\\public\\login.htm",
"args": ""
},
{
"cmd": "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\a670wms0010.a67001.ffm\\public\\login.htm"
},
{
"cmd": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"args": "https:\\\\a670wms0010.a67001.ffm\\public\\login.htm"
}
],
"icon": "PRTG.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 41,
"description": null,
"name": "APPTEC360 EMMConsole",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\www.emmconsole.com\\",
"args": ""
}
],
"icon": "apptec360.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 42,
"description": null,
"name": "McAfee MOVE Web-Console",
"group": "Amt 16",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https:\\\\citywap0022.city.net.ffm:55083\\core\\orionSplashScreen.do",
"args": ""
}
],
"icon": "mcafee.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 43,
"description": null,
"name": "Director",
"group": "Citrix",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https://director.a67001.ffm/director/",
"args": ""
}
],
"icon": "Citrix SF Logo.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 44,
"description": "",
"name": "SysAdmins",
"group": "Amt 16",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https://sysadmins.stadt-frankfurt.de/default.aspx",
"args": ""
}
],
"icon": "sharepoint.png",
"lastmodified": "2021-12-22T09:56:48.6208021+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 45,
"description": "",
"name": "RDP a670www6701.city.Net.ffm",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "mstsc",
"args": "/v:A670WWW6701.CITY.NET.FFM"
}
],
"icon": "mstsc.png",
"lastmodified": "2022-01-17T09:34:30.6285739+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 46,
"description": null,
"name": "ProfileSpy",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "\\\\a670wfs0002\\d$\\Administrative_Software\\ProfileSpy\\runas.exe.lnk",
"args": ""
}
],
"icon": "profilespy.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 47,
"description": null,
"name": "IGEL UMS Web",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https://a670wms0014:8443/webapp",
"args": ""
}
],
"icon": "igel_logo.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 48,
"description": null,
"name": "FSP Explorer",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "\\\\a670wfs0002\\d$\\Administrative_Software\\FSP_Explorer\\FSP_Explorer.exe",
"args": ""
}
],
"icon": "acl_explorer.png",
"lastmodified": "2021-11-17T08:19:26.8944052+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 49,
"description": "Protokollierungsserver zum Erstellen Abteilungs-/Sachgebiets-/Teamrelevanter Protokolle ",
"name": "4Minitz - Protokollserver",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "http://a670lww0002.a67001.ffm:3100",
"args": ""
}
],
"icon": "4minitz.png",
"lastmodified": "2021-12-02T06:09:07.0119391+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 50,
"description": "Öffnet die Weboberfläche der IT-Ticketbearbeitung",
"name": "Ticket Warteschlange",
"group": "Jira",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "https://servicedesk.a67001.ffm/projects/IKT/queues/custom/16",
"args": null
}
],
"icon": "jira_ticket.png",
"lastmodified": "2021-12-20T05:21:51.4654552+01:00",
"created": "2021-12-20T05:20:09.5247551+01:00"
},
{
"id": 51,
"description": "TreeSize ist eine Software-Produktfamilie, die dem Management des Festplattenplatzes dient und beim Aufräumen und Finden von Platzverschwendern und überflüssigen Dateien hilft",
"name": "TreeSize Pro",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "\\\\a670wfs0002\\d$\\Administrative_Software\\TreeSize Professional Portable\\TreeSize.exe",
"args": null
}
],
"icon": "TreeSize.png",
"lastmodified": "2021-12-23T05:48:12.5560903+01:00",
"created": "2021-12-23T05:46:47.9397041+01:00"
}
]
}

View File

@@ -0,0 +1,158 @@
{
"type": 4,
"apps": [
{
"id": 1,
"description": "Öffnet die Einstellungen des GFATask",
"name": "Einstellungen",
"group": "",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "settings",
"args": ""
}
],
"icon": "optionen.png",
"lastmodified": "2021-12-02T05:56:49.3539203+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 2,
"description": "Zeigt Informationen über PC, GFATask Version und Betriebssystem an",
"name": "Computer",
"group": "",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "info",
"args": ""
}
],
"icon": "Computer.png",
"lastmodified": "2021-12-02T05:56:35.2899512+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 3,
"description": "Öffnet das JIRA Ticketsystem, zum Melden von Problemen, Dateiberechtigungen, \r\nFachanwendungsanforderungen, Benutzerneuzugängen, Abwesenheitsassistenten, \r\nUmzügen und Löschen von Benutzerzugängen",
"name": "Ticket erstellen",
"group": "Ticketsystem",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "https://servicedesk.a67001.ffm/servicedesk/customer/portal/1",
"args": null
}
],
"icon": "jira_ticket.png",
"lastmodified": "2022-01-12T10:48:16.0942275+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 4,
"description": "Öffnet die AZE Online zur Einsicht und Bearbeitung der Arbeitszeiten",
"name": "AZE Online",
"group": "",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "https://aze.stadt-frankfurt.de/WebClient/iflx/login.jsp?userlocale=de",
"args": ""
}
],
"icon": "AZE Online.png",
"lastmodified": "2021-12-02T05:55:31.8366809+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 5,
"description": "Startet das webbasierte Telefonbuch der Stadtverwaltung",
"name": "eWuf",
"group": "",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "http:\\\\ewuf.city.net.ffm\\#",
"args": ""
}
],
"icon": "eWuf.png",
"lastmodified": "2021-12-02T05:57:09.6799311+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 6,
"description": "Bedienungsanleitung des GFATask",
"name": "Anleitung GFATask",
"group": "Anleitung",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "https://confluence.a67001.ffm:8443/display/IKT/GFATask",
"args": null
}
],
"icon": "GFA.png",
"lastmodified": "2021-12-22T10:28:03.7707586+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 7,
"description": "Öffnet das Hilfedokument zum Passwort SelfService",
"name": "Anleitung Passwort Self Service",
"group": "Anleitung",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "https:\\\\sysadmins.stadt-frankfurt.de\\Dokumente\\Passwort%20Self-Service%20Benutzerhandbuch.pdf",
"args": ""
}
],
"icon": "pw_selfservice.png",
"lastmodified": "2021-12-03T21:36:06.6480633+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 9,
"description": "Zeigt die von - 67.33 IKT - aufgestellten Verhaltensregeln, Richlinien und Empfehlungen für den Dateiserver an",
"name": "Richtlinien, Verhaltsregeln und Empfehlungen",
"group": "",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "https://confluence.a67001.ffm:8443/display/IKT/Dateiserver+-+Richtlinien+Verhaltensregeln+und+Empfehlungen",
"args": null
}
],
"icon": "fileserver.png",
"lastmodified": "2021-12-03T21:19:54.1597858+01:00",
"created": "2021-11-17T08:19:26.8944052+01:00"
},
{
"id": 10,
"description": "Erstellt einen neuen Benutzerzugang über das Ticketsystem",
"name": "Neuer Mitarbeiterzugang (Serviceportal)",
"group": "Ticketsystem",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "http:\\\\servicedesk.a67001.ffm\\projects\\PERS\\issues\\?filter=allissues",
"args": null
}
],
"icon": "jira_new_user.png",
"lastmodified": "2021-12-20T07:31:35.2203413+01:00",
"created": "2021-12-20T07:31:10.7747444+01:00"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,60 @@
{
"darkmode": true,
"necessary_click": true,
"prevalence": false,
"autostart_eventlogger": false,
"deploy": {
"overwrite": false,
"backup": false
},
"screen": "DISPLAY9",
"delay": {
"speed": 76,
"show": 0.5,
"hide": 0.5
},
"window": {
"size": "1206, 542",
"actionregionheight": 3,
"font": 8.5,
"opacity": 0.95
},
"apps": {
"imageonly": false,
"border": 0,
"size": "155, 36",
"margin": 3,
"radius": {
"button": 3,
"image": 5
}
},
"lists": {
"menu": {
"height": 57,
"show": true,
"grouping": true
},
"citrix": {
"height": 100,
"show": false,
"grouping": true
},
"favorites": {
"height": 73,
"show": true,
"grouping": true
},
"admin": {
"height": 182,
"show": true,
"grouping": true
},
"user": {
"height": 100,
"show": true,
"grouping": true
}
},
"grouplistcolumncount": 3
}

View File

@@ -0,0 +1,96 @@
{
"type": 3,
"apps": [
{
"id": 1,
"description": "Öffnet die verlinkte Internetadresse mit dem Microsoft Edge Browser",
"name": "Projekt Dateiserver",
"group": "Dateiserver",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "https://projekte.stadt-frankfurt.de/sites/00171/_layouts/15/start.aspx#/",
"args": ""
}
],
"icon": "sharepoint.png",
"lastmodified": "2022-01-13T13:26:37.907103+01:00",
"created": "2022-01-13T13:23:30.7428744+01:00"
},
{
"id": 2,
"description": "Öffnet die Access-Liste der Lesebestätigungen der Richlinien, Verhaltensregeln und Empfehlungen für den Dateiserver",
"name": "Dateiserver Bestätigungen",
"group": "Dateiserver",
"activedirectory_groups": null,
"prototype": false,
"exec": [
{
"cmd": "O:\\67.3\\67.33\\Projekte\\Dateiserver\\Kontakte.mdb",
"args": ""
}
],
"icon": "Kontakte(mdb).png",
"lastmodified": "2022-01-13T13:26:24.6982103+01:00",
"created": "2022-01-13T13:24:47.511978+01:00"
},
{
"id": 3,
"description": "Passwortmanager zum Verwalten von Anmeldeinformationen",
"name": "KeePass",
"group": "",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "APPLNK:2|24",
"args": null
}
],
"icon": "KeePass.png",
"lastmodified": "2022-01-13T13:55:56.3233086+01:00",
"created": "2022-01-13T13:55:56.3233086+01:00"
},
{
"id": 4,
"description": null,
"name": "Director",
"group": "Citrix",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "APPLNK:2|43",
"args": null
}
],
"icon": "Citrix SF Logo.png",
"lastmodified": "2022-01-14T06:09:17.0136404+01:00",
"created": "2022-01-14T06:09:17.0136404+01:00"
},
{
"id": 5,
"description": null,
"name": "StoreFront",
"group": "Citrix",
"activedirectory_groups": [
"A670S-BenutzerAdmins"
],
"prototype": false,
"exec": [
{
"cmd": "APPLNK:2|1",
"args": null
}
],
"icon": "Citrix SF Logo.png",
"lastmodified": "2022-01-17T05:14:08.2802844+01:00",
"created": "2022-01-17T05:14:08.2802844+01:00"
}
]
}

View File

@@ -0,0 +1,572 @@
{
"menu": [
{
"id": 1,
"clickcounts": 77
},
{
"id": 2,
"clickcounts": 0
},
{
"id": 4,
"clickcounts": 1
},
{
"id": 5,
"clickcounts": 1
},
{
"id": 9,
"clickcounts": 0
},
{
"id": 3,
"clickcounts": 1
},
{
"id": 10,
"clickcounts": 0
},
{
"id": 6,
"clickcounts": 1
},
{
"id": 7,
"clickcounts": 0
}
],
"admin": [
{
"id": 1,
"clickcounts": 1
},
{
"id": 43,
"clickcounts": 0
},
{
"id": 3,
"clickcounts": 0
},
{
"id": 33,
"clickcounts": 0
},
{
"id": 5,
"clickcounts": 1
},
{
"id": 6,
"clickcounts": 0
},
{
"id": 29,
"clickcounts": 0
},
{
"id": 37,
"clickcounts": 0
},
{
"id": 39,
"clickcounts": 0
},
{
"id": 42,
"clickcounts": 0
},
{
"id": 44,
"clickcounts": 0
},
{
"id": 7,
"clickcounts": 0
},
{
"id": 8,
"clickcounts": 0
},
{
"id": 20,
"clickcounts": 1
},
{
"id": 23,
"clickcounts": 0
},
{
"id": 24,
"clickcounts": 0
},
{
"id": 27,
"clickcounts": 0
},
{
"id": 30,
"clickcounts": 0
},
{
"id": 32,
"clickcounts": 0
},
{
"id": 40,
"clickcounts": 0
},
{
"id": 41,
"clickcounts": 0
},
{
"id": 45,
"clickcounts": 0
},
{
"id": 46,
"clickcounts": 0
},
{
"id": 47,
"clickcounts": 0
},
{
"id": 48,
"clickcounts": 0
},
{
"id": 49,
"clickcounts": 0
},
{
"id": 51,
"clickcounts": 0
},
{
"id": 9,
"clickcounts": 0
},
{
"id": 10,
"clickcounts": 0
},
{
"id": 11,
"clickcounts": 2
},
{
"id": 12,
"clickcounts": 0
},
{
"id": 14,
"clickcounts": 0
},
{
"id": 31,
"clickcounts": 0
},
{
"id": 50,
"clickcounts": 0
},
{
"id": 15,
"clickcounts": 0
},
{
"id": 16,
"clickcounts": 0
},
{
"id": 17,
"clickcounts": 0
},
{
"id": 18,
"clickcounts": 0
},
{
"id": 19,
"clickcounts": 0
},
{
"id": 21,
"clickcounts": 0
},
{
"id": 38,
"clickcounts": 0
},
{
"id": 35,
"clickcounts": 0
}
],
"user": [
{
"id": 2,
"clickcounts": 0
},
{
"id": 3,
"clickcounts": 0
},
{
"id": 9,
"clickcounts": 0
},
{
"id": 10,
"clickcounts": 0
},
{
"id": 12,
"clickcounts": 0
},
{
"id": 14,
"clickcounts": 0
},
{
"id": 15,
"clickcounts": 0
},
{
"id": 16,
"clickcounts": 0
},
{
"id": 17,
"clickcounts": 0
},
{
"id": 22,
"clickcounts": 0
},
{
"id": 23,
"clickcounts": 0
},
{
"id": 28,
"clickcounts": 0
},
{
"id": 32,
"clickcounts": 0
},
{
"id": 33,
"clickcounts": 0
},
{
"id": 36,
"clickcounts": 0
},
{
"id": 48,
"clickcounts": 0
},
{
"id": 49,
"clickcounts": 0
},
{
"id": 54,
"clickcounts": 0
},
{
"id": 55,
"clickcounts": 0
},
{
"id": 59,
"clickcounts": 0
},
{
"id": 60,
"clickcounts": 0
},
{
"id": 61,
"clickcounts": 0
},
{
"id": 62,
"clickcounts": 0
},
{
"id": 79,
"clickcounts": 0
},
{
"id": 4,
"clickcounts": 0
},
{
"id": 47,
"clickcounts": 0
},
{
"id": 71,
"clickcounts": 0
},
{
"id": 72,
"clickcounts": 0
},
{
"id": 78,
"clickcounts": 0
},
{
"id": 18,
"clickcounts": 0
},
{
"id": 19,
"clickcounts": 0
},
{
"id": 20,
"clickcounts": 0
},
{
"id": 31,
"clickcounts": 0
},
{
"id": 25,
"clickcounts": 0
},
{
"id": 52,
"clickcounts": 0
},
{
"id": 26,
"clickcounts": 0
},
{
"id": 27,
"clickcounts": 0
},
{
"id": 30,
"clickcounts": 0
},
{
"id": 38,
"clickcounts": 0
},
{
"id": 39,
"clickcounts": 0
},
{
"id": 42,
"clickcounts": 0
},
{
"id": 43,
"clickcounts": 0
},
{
"id": 44,
"clickcounts": 0
},
{
"id": 45,
"clickcounts": 0
},
{
"id": 46,
"clickcounts": 0
},
{
"id": 7,
"clickcounts": 0
},
{
"id": 8,
"clickcounts": 0
},
{
"id": 77,
"clickcounts": 0
},
{
"id": 73,
"clickcounts": 0
},
{
"id": 74,
"clickcounts": 0
},
{
"id": 75,
"clickcounts": 0
},
{
"id": 5,
"clickcounts": 0
},
{
"id": 6,
"clickcounts": 0
},
{
"id": 68,
"clickcounts": 0
},
{
"id": 69,
"clickcounts": 0
},
{
"id": 70,
"clickcounts": 0
},
{
"id": 80,
"clickcounts": 0
}
],
"citrix": [
{
"id": 1,
"clickcounts": 0
},
{
"id": 2,
"clickcounts": 0
},
{
"id": 3,
"clickcounts": 0
},
{
"id": 4,
"clickcounts": 0
},
{
"id": 5,
"clickcounts": 0
},
{
"id": 6,
"clickcounts": 0
},
{
"id": 7,
"clickcounts": 0
},
{
"id": 11,
"clickcounts": 0
},
{
"id": 12,
"clickcounts": 0
},
{
"id": 13,
"clickcounts": 0
},
{
"id": 14,
"clickcounts": 0
},
{
"id": 15,
"clickcounts": 0
},
{
"id": 17,
"clickcounts": 0
},
{
"id": 19,
"clickcounts": 0
},
{
"id": 20,
"clickcounts": 0
},
{
"id": 21,
"clickcounts": 0
},
{
"id": 22,
"clickcounts": 0
},
{
"id": 23,
"clickcounts": 0
},
{
"id": 24,
"clickcounts": 0
},
{
"id": 8,
"clickcounts": 0
},
{
"id": 9,
"clickcounts": 0
},
{
"id": 10,
"clickcounts": 0
},
{
"id": 16,
"clickcounts": 0
},
{
"id": 18,
"clickcounts": 0
}
],
"favorites": [
{
"id": 2,
"clickcounts": 0
},
{
"id": 1,
"clickcounts": 0
},
{
"id": 3,
"clickcounts": 0
},
{
"id": 3,
"clickcounts": 0
},
{
"id": 4,
"clickcounts": 1
},
{
"id": 4,
"clickcounts": 0
},
{
"id": 5,
"clickcounts": 1
},
{
"id": 5,
"clickcounts": 0
}
]
}

View File

@@ -0,0 +1,204 @@
{
"menu": [
{
"app_id": 7,
"app_name": "Passwort Hilfe",
"counts": 1,
"lastclicked": "2021-12-03T21:20:01.6836995+01:00",
"firstclicked": "2021-12-03T21:20:01.681694+01:00"
},
{
"app_id": 1,
"app_name": "Einstellungen",
"counts": 184,
"lastclicked": "2022-02-04T05:52:30.3468008+01:00",
"firstclicked": "2021-12-06T06:40:14.6225027+01:00"
},
{
"app_id": 2,
"app_name": "Computer",
"counts": 11,
"lastclicked": "2021-12-22T11:14:19.543039+01:00",
"firstclicked": "2021-12-06T10:10:17.6515061+01:00"
},
{
"app_id": 5,
"app_name": "eWuf",
"counts": 3,
"lastclicked": "2022-01-17T08:24:14.7368424+01:00",
"firstclicked": "2021-12-20T09:28:21.8468189+01:00"
},
{
"app_id": 4,
"app_name": "AZE Online",
"counts": 9,
"lastclicked": "2022-01-17T14:19:18.0801469+01:00",
"firstclicked": "2021-12-20T12:49:58.7954857+01:00"
},
{
"app_id": 6,
"app_name": "Anleitung GFATask",
"counts": 12,
"lastclicked": "2022-01-11T14:17:14.1709182+01:00",
"firstclicked": "2021-12-21T09:12:34.7328556+01:00"
},
{
"app_id": 3,
"app_name": "Ticket erstellen",
"counts": 1,
"lastclicked": "2022-01-11T14:17:17.2208021+01:00",
"firstclicked": "2022-01-11T14:17:17.2208021+01:00"
},
{
"app_id": 9,
"app_name": "Richtlinien, Verhaltsregeln und Empfehlungen",
"counts": 1,
"lastclicked": "2022-01-11T14:18:21.016702+01:00",
"firstclicked": "2022-01-11T14:18:21.0154595+01:00"
}
],
"admin": [
{
"app_id": 27,
"app_name": "Veeam Backup Enterprise",
"counts": 1,
"lastclicked": "2021-12-02T11:17:00.7470212+01:00",
"firstclicked": "2021-12-02T11:17:00.7460556+01:00"
},
{
"app_id": 31,
"app_name": "Confluence Doku",
"counts": 1,
"lastclicked": "2021-12-06T09:13:24.6316255+01:00",
"firstclicked": "2021-12-06T09:13:24.6306282+01:00"
},
{
"app_id": 43,
"app_name": "Director",
"counts": 1,
"lastclicked": "2021-12-20T06:58:11.9850184+01:00",
"firstclicked": "2021-12-20T06:58:11.9850184+01:00"
},
{
"app_id": 49,
"app_name": "4Minitz - Protokollserver",
"counts": 4,
"lastclicked": "2022-01-20T10:29:53.8182597+01:00",
"firstclicked": "2021-12-21T09:11:10.9916645+01:00"
},
{
"app_id": 24,
"app_name": "KeePass",
"counts": 1,
"lastclicked": "2021-12-21T12:36:02.1994037+01:00",
"firstclicked": "2021-12-21T12:36:02.1994037+01:00"
},
{
"app_id": 44,
"app_name": "SysAdmins",
"counts": 1,
"lastclicked": "2021-12-22T09:26:30.8543963+01:00",
"firstclicked": "2021-12-22T09:26:30.8543963+01:00"
},
{
"app_id": 50,
"app_name": "test",
"counts": 1,
"lastclicked": "2021-12-23T15:29:38.6412668+01:00",
"firstclicked": "2021-12-23T15:29:38.6402694+01:00"
},
{
"app_id": 48,
"app_name": "FSP Explorer",
"counts": 1,
"lastclicked": "2022-01-11T13:37:41.8644546+01:00",
"firstclicked": "2022-01-11T13:37:41.863418+01:00"
},
{
"app_id": 46,
"app_name": "ProfileSpy",
"counts": 1,
"lastclicked": "2022-01-11T13:38:51.4535756+01:00",
"firstclicked": "2022-01-11T13:38:51.4535756+01:00"
},
{
"app_id": 5,
"app_name": "ActiveRoles",
"counts": 1,
"lastclicked": "2022-01-14T09:01:45.4268362+01:00",
"firstclicked": "2022-01-14T09:01:45.4268362+01:00"
},
{
"app_id": 11,
"app_name": "Confluence",
"counts": 1,
"lastclicked": "2022-01-14T09:08:48.4292606+01:00",
"firstclicked": "2022-01-14T09:08:48.4292606+01:00"
},
{
"app_id": 20,
"app_name": "Arriba Admin",
"counts": 1,
"lastclicked": "2022-01-14T12:24:14.9488912+01:00",
"firstclicked": "2022-01-14T12:24:14.9478966+01:00"
},
{
"app_id": 1,
"app_name": "StoreFront",
"counts": 2,
"lastclicked": "2022-01-19T05:24:45.8798769+01:00",
"firstclicked": "2022-01-17T05:14:10.1051723+01:00"
}
],
"user": [
{
"app_id": 79,
"app_name": "Taschenrechner",
"counts": 2,
"lastclicked": "2021-12-21T13:11:40.5807592+01:00",
"firstclicked": "2021-12-21T13:06:08.6129682+01:00"
},
{
"app_id": 80,
"app_name": "Snipping Tool",
"counts": 13,
"lastclicked": "2021-12-21T13:15:19.9443117+01:00",
"firstclicked": "2021-12-21T13:07:48.8079741+01:00"
},
{
"app_id": 5,
"app_name": "Spontanbuchung [HowTo]",
"counts": 1,
"lastclicked": "2021-12-21T14:32:07.2196638+01:00",
"firstclicked": "2021-12-21T14:32:07.2196638+01:00"
},
{
"app_id": 55,
"app_name": "Bedarfsverwaltung",
"counts": 2,
"lastclicked": "2021-12-22T13:00:56.559886+01:00",
"firstclicked": "2021-12-22T07:33:07.7515293+01:00"
},
{
"app_id": 36,
"app_name": "WinfriedSE TerminPlaner",
"counts": 2,
"lastclicked": "2022-01-11T07:47:01.721756+01:00",
"firstclicked": "2022-01-11T07:46:37.4381432+01:00"
},
{
"app_id": 6,
"app_name": "Fahrzeugbuchung",
"counts": 1,
"lastclicked": "2022-01-11T10:05:58.9677903+01:00",
"firstclicked": "2022-01-11T10:05:58.9667971+01:00"
},
{
"app_id": 28,
"app_name": "Vergabe@Work",
"counts": 1,
"lastclicked": "2022-02-04T05:03:05.3621629+01:00",
"firstclicked": "2022-02-04T05:03:05.3621629+01:00"
}
]
}

View File

@@ -0,0 +1,106 @@
{
"defaultwebbrowser": "Microsoft Edge",
"webdomains": [
".de",
".com",
".org",
"a67001.ffm",
"city.net.ffm",
".co.uk",
".net"
],
"domainname": "city",
"loggerapppath": "D://Anwendungsentwicklung//C#//LoggingUI//bin//Release//LoggingUI.exe",
"citrix": {
"xmlnodes": "/resources/resource",
"icons": "%appdata%/Citrix/SelfService/Icons/",
"icaselfservice": "%programfiles(x86)%/Citrix/ICA Client/SelfServicePlugin/SelfService.exe",
"appslocation": "%localappdata%/Citrix/SelfService/"
},
"use_ad_groups": true,
"administration": {
"remote_frontend_update": true,
"ad_group": "A670S-BenutzerAdmins",
"accounts": {
"mailaccount": {
"host": "mail.stadt-frankfurt.de",
"sslport": 25,
"username": "mailservice.amt67",
"securepassword": [
81,
80,
116,
65,
51,
121,
122,
56
],
"mailmessage": {
"to": "manuel.sowada@stadt-frankfurt.de",
"from": {
"address": "A670V-IT-Administration@stadt-frankfurt.de",
"displayname": "GFATask Admin"
}
}
},
"adminlogin": {
"securepassword": [
103,
102,
97,
102,
102,
109
]
}
}
},
"font": "Microsoft YaHei",
"colors": {
"loadinganimation": {
"dot1": "230, 230, 230",
"dot2": "183, 193, 174",
"dot3": "65, 155, 81",
"dot4": "DarkSeaGreen"
},
"list": {
"border": "45, 45, 45"
},
"window": {
"backcolor": "White",
"action": "255, 127, 32",
"titlebarbackcolor": "82, 153, 86",
"border": "45, 45, 45"
},
"groupwindow": {
"backcolor": "White",
"action": "255, 127, 32",
"titlebarbackcolor": "82, 153, 86",
"border": "45, 45, 45"
},
"apps": {
"default": {
"backcolor": "White",
"forecolor": "Black",
"border": "Silver",
"image": "CornflowerBlue"
},
"hover": {
"backcolor": "201, 201, 201",
"forecolor": "Black",
"border": "29, 98, 145",
"image": "128, 167, 240"
}
}
},
"sizes": {
"window": {
"radius": 4,
"border": 1
},
"list": {
"border": "1, 1"
}
}
}

View File

@@ -0,0 +1,100 @@
[
{
"name": "Xmas",
"enable": false,
"icon": "santa.png",
"title": "Frohe Weihnachtszeit",
"begin": {
"day": 1,
"month": 12
},
"end": {
"day": 26,
"month": 12
}
},
{
"name": "Halloween",
"enable": false,
"icon": "jack.png",
"title": "Happy Halloween",
"begin": {
"day": 25,
"month": 10
},
"end": {
"day": 31,
"month": 10
}
},
{
"name": "Easter",
"enable": false,
"icon": "bunny.png",
"title": "Frohe Ostern",
"begin": {
"day": 14,
"month": 3
},
"end": {
"day": 31,
"month": 3
}
},
{
"name": "SysAdminDay",
"enable": false,
"icon": "the_bat.png",
"title": "Ehre Deinen Admin - Heute ist SysAdminDay -",
"begin": {
"day": 29,
"month": 7
},
"end": {
"day": 29,
"month": 7
}
},
{
"name": "ToDo",
"enable": true,
"icon": "wrench_orange.png",
"title": "Bildschirmwechsel fehlerhaft + Padding der Apps, wenn Schriftgröße verändert wird",
"begin": {
"day": 1,
"month": 1
},
"end": {
"day": 31,
"month": 12
}
},
{
"name": "AprilApril",
"enable": false,
"icon": "emoticon_happy.png",
"title": "Eine bundesweite Deflation ist in Aussicht - April April",
"begin": {
"day": 1,
"month": 4
},
"end": {
"day": 1,
"month": 4
}
},
{
"name": "Release",
"enable": false,
"icon": "version_release.png",
"title": "Der GFATask wurde am 03.12.2021 auf Version 4.8.0 aktualisiert!",
"begin": {
"day": 2,
"month": 12
},
"end": {
"day": 10,
"month": 12
}
}
]

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<!--Führt zu fehlerhafter Skalierung-->
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
</configuration>

Binary file not shown.

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a:clrMap xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>

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