Initial commit – alle alten Commits entfernt
This commit is contained in:
402
.gitignore
vendored
Normal file
402
.gitignore
vendored
Normal file
@@ -0,0 +1,402 @@
|
|||||||
|
# ---> VisualStudio
|
||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.rsuser
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Mono auto generated files
|
||||||
|
mono_crash.*
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
[Ww][Ii][Nn]32/
|
||||||
|
[Aa][Rr][Mm]/
|
||||||
|
[Aa][Rr][Mm]64/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Ll]og/
|
||||||
|
[Ll]ogs/
|
||||||
|
|
||||||
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUnit
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
nunit-*.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
# ASP.NET Scaffolding
|
||||||
|
ScaffoldingReadMe.txt
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_h.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.iobj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.ipdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
# but not Directory.Build.rsp, as it configures directory-level build defaults
|
||||||
|
!Directory.Build.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*_wpftmp.csproj
|
||||||
|
*.log
|
||||||
|
*.tlog
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Coverlet is a free, cross platform Code Coverage Tool
|
||||||
|
coverage*.json
|
||||||
|
coverage*.xml
|
||||||
|
coverage*.info
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# NuGet Symbol Packages
|
||||||
|
*.snupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/[Pp]ackages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
*.appxbundle
|
||||||
|
*.appxupload
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Including strong name files can present a security risk
|
||||||
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||||
|
#*.snk
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
ServiceFabricBackup/
|
||||||
|
*.rptproj.bak
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
*.rptproj.rsuser
|
||||||
|
*- [Bb]ackup.rdl
|
||||||
|
*- [Bb]ackup ([0-9]).rdl
|
||||||
|
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||||
|
*.vbp
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||||
|
*.dsw
|
||||||
|
*.dsp
|
||||||
|
|
||||||
|
# Visual Studio 6 technical files
|
||||||
|
*.ncb
|
||||||
|
*.aps
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# CodeRush personal settings
|
||||||
|
.cr/personal
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
||||||
|
|
||||||
|
# MSBuild Binary and Structured Log
|
||||||
|
*.binlog
|
||||||
|
|
||||||
|
# NVidia Nsight GPU debugger configuration file
|
||||||
|
*.nvuser
|
||||||
|
|
||||||
|
# MFractors (Xamarin productivity tool) working folder
|
||||||
|
.mfractor/
|
||||||
|
|
||||||
|
# Local History for Visual Studio
|
||||||
|
.localhistory/
|
||||||
|
|
||||||
|
# Visual Studio History (VSHistory) files
|
||||||
|
.vshistory/
|
||||||
|
|
||||||
|
# BeatPulse healthcheck temp database
|
||||||
|
healthchecksdb
|
||||||
|
|
||||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Ionide (cross platform F# VS Code tools) working folder
|
||||||
|
.ionide/
|
||||||
|
|
||||||
|
# Fody - auto-generated XML schema
|
||||||
|
FodyWeavers.xsd
|
||||||
|
|
||||||
|
# VS Code files for those working on multiple tools
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
*.code-workspace
|
||||||
|
|
||||||
|
# Local History for Visual Studio Code
|
||||||
|
.history/
|
||||||
|
|
||||||
|
# Windows Installer files from build outputs
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msix
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
*.sln.iml
|
||||||
|
|
||||||
36
.vs/GFATask/project-colors.json
Normal file
36
.vs/GFATask/project-colors.json
Normal 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
BIN
.vs/GFATask/v16/.suo
Normal file
Binary file not shown.
BIN
.vs/GFATask/v17/.suo
Normal file
BIN
.vs/GFATask/v17/.suo
Normal file
Binary file not shown.
71
GFATask.sln
Normal file
71
GFATask.sln
Normal 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
12
GFATask/App.config
Normal 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>
|
||||||
124
GFATask/Classes/AlternateWebbrowser.cs
Normal file
124
GFATask/Classes/AlternateWebbrowser.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
94
GFATask/Classes/AppExecution.cs
Normal file
94
GFATask/Classes/AppExecution.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
350
GFATask/Classes/Casting_Classes.cs
Normal file
350
GFATask/Classes/Casting_Classes.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
92
GFATask/Classes/ConfigBackupClass.cs
Normal file
92
GFATask/Classes/ConfigBackupClass.cs
Normal 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
162
GFATask/Classes/Deploy.cs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
283
GFATask/Classes/FrontEndRefresh.cs
Normal file
283
GFATask/Classes/FrontEndRefresh.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
92
GFATask/Classes/FrontEndRefreshExecution.cs
Normal file
92
GFATask/Classes/FrontEndRefreshExecution.cs
Normal 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
131
GFATask/Classes/Hooks.cs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
118
GFATask/Classes/InfoClass.cs
Normal file
118
GFATask/Classes/InfoClass.cs
Normal 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
202
GFATask/Classes/JSON.cs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
285
GFATask/Classes/PreChanging.cs
Normal file
285
GFATask/Classes/PreChanging.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
63
GFATask/Classes/SystemApps.cs
Normal file
63
GFATask/Classes/SystemApps.cs
Normal 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
37
GFATask/Controls/AppButton.Designer.cs
generated
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
418
GFATask/Controls/AppButton.cs
Normal file
418
GFATask/Controls/AppButton.cs
Normal 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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
37
GFATask/Controls/AppListButton.Designer.cs
generated
Normal file
37
GFATask/Controls/AppListButton.Designer.cs
generated
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
167
GFATask/Controls/AppListButton.cs
Normal file
167
GFATask/Controls/AppListButton.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
45
GFATask/Controls/AppListPanel.Designer.cs
generated
Normal file
45
GFATask/Controls/AppListPanel.Designer.cs
generated
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
1457
GFATask/Controls/AppListPanel.cs
Normal file
1457
GFATask/Controls/AppListPanel.cs
Normal file
File diff suppressed because it is too large
Load Diff
37
GFATask/Controls/GroupButton.Designer.cs
generated
Normal file
37
GFATask/Controls/GroupButton.Designer.cs
generated
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
309
GFATask/Controls/GroupButton.cs
Normal file
309
GFATask/Controls/GroupButton.cs
Normal 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
216
GFATask/Forms/FormAdmin.Designer.cs
generated
Normal 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
142
GFATask/Forms/FormAdmin.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
GFATask/Forms/FormAdmin.resx
Normal file
120
GFATask/Forms/FormAdmin.resx
Normal 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>
|
||||||
71
GFATask/Forms/FormAppButtonGroup.Designer.cs
generated
Normal file
71
GFATask/Forms/FormAppButtonGroup.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
152
GFATask/Forms/FormAppButtonGroup.cs
Normal file
152
GFATask/Forms/FormAppButtonGroup.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
GFATask/Forms/FormAppButtonGroup.resx
Normal file
120
GFATask/Forms/FormAppButtonGroup.resx
Normal 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
500
GFATask/Forms/FormAppCreator.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
249
GFATask/Forms/FormAppCreator.cs
Normal file
249
GFATask/Forms/FormAppCreator.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
GFATask/Forms/FormAppCreator.resx
Normal file
120
GFATask/Forms/FormAppCreator.resx
Normal 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
177
GFATask/Forms/FormGroups.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
95
GFATask/Forms/FormGroups.cs
Normal file
95
GFATask/Forms/FormGroups.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
123
GFATask/Forms/FormGroups.resx
Normal file
123
GFATask/Forms/FormGroups.resx
Normal 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
238
GFATask/Forms/FormInfo.Designer.cs
generated
Normal 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
63
GFATask/Forms/FormInfo.cs
Normal 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
120
GFATask/Forms/FormInfo.resx
Normal 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
184
GFATask/Forms/FormMain.Designer.cs
generated
Normal 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
647
GFATask/Forms/FormMain.cs
Normal 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
120
GFATask/Forms/FormMain.resx
Normal 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
1323
GFATask/Forms/FormSettings.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
838
GFATask/Forms/FormSettings.cs
Normal file
838
GFATask/Forms/FormSettings.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
126
GFATask/Forms/FormSettings.resx
Normal file
126
GFATask/Forms/FormSettings.resx
Normal 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>
|
||||||
324
GFATask/GFATask.csproj
Normal file
324
GFATask/GFATask.csproj
Normal 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>
|
||||||
13
GFATask/GFATask.csproj.user
Normal file
13
GFATask/GFATask.csproj.user
Normal 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
64
GFATask/Program.cs
Normal 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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
GFATask/Properties/AssemblyInfo.cs
Normal file
36
GFATask/Properties/AssemblyInfo.cs
Normal 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
83
GFATask/Properties/Resources.Designer.cs
generated
Normal 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
127
GFATask/Properties/Resources.resx
Normal file
127
GFATask/Properties/Resources.resx
Normal 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
26
GFATask/Properties/Settings.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
5
GFATask/Properties/Settings.settings
Normal file
5
GFATask/Properties/Settings.settings
Normal 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>
|
||||||
BIN
GFATask/Resources/magnifier.png
Normal file
BIN
GFATask/Resources/magnifier.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 615 B |
1992
GFATask/Statics.cs
Normal file
1992
GFATask/Statics.cs
Normal file
File diff suppressed because it is too large
Load Diff
82
GFATask/SystemChanges.cs
Normal file
82
GFATask/SystemChanges.cs
Normal 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 _);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
149
GFATask/UserControls/ucAdminAppClickCounter.Designer.cs
generated
Normal file
149
GFATask/UserControls/ucAdminAppClickCounter.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
143
GFATask/UserControls/ucAdminAppClickCounter.cs
Normal file
143
GFATask/UserControls/ucAdminAppClickCounter.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
GFATask/UserControls/ucAdminAppClickCounter.resx
Normal file
120
GFATask/UserControls/ucAdminAppClickCounter.resx
Normal 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>
|
||||||
105
GFATask/UserControls/ucAdminApps.Designer.cs
generated
Normal file
105
GFATask/UserControls/ucAdminApps.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
188
GFATask/UserControls/ucAdminApps.cs
Normal file
188
GFATask/UserControls/ucAdminApps.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
GFATask/UserControls/ucAdminApps.resx
Normal file
120
GFATask/UserControls/ucAdminApps.resx
Normal 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>
|
||||||
936
GFATask/UserControls/ucAdminDesigns.Designer.cs
generated
Normal file
936
GFATask/UserControls/ucAdminDesigns.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
512
GFATask/UserControls/ucAdminDesigns.cs
Normal file
512
GFATask/UserControls/ucAdminDesigns.cs
Normal 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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
GFATask/UserControls/ucAdminDesigns.resx
Normal file
120
GFATask/UserControls/ucAdminDesigns.resx
Normal 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>
|
||||||
782
GFATask/UserControls/ucAdminGeneral.Designer.cs
generated
Normal file
782
GFATask/UserControls/ucAdminGeneral.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
171
GFATask/UserControls/ucAdminGeneral.cs
Normal file
171
GFATask/UserControls/ucAdminGeneral.cs
Normal 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 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
123
GFATask/UserControls/ucAdminGeneral.resx
Normal file
123
GFATask/UserControls/ucAdminGeneral.resx
Normal 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>
|
||||||
64
GFATask/UserControls/ucAdminHelp.Designer.cs
generated
Normal file
64
GFATask/UserControls/ucAdminHelp.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
34
GFATask/UserControls/ucAdminHelp.cs
Normal file
34
GFATask/UserControls/ucAdminHelp.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
GFATask/UserControls/ucAdminHelp.resx
Normal file
120
GFATask/UserControls/ucAdminHelp.resx
Normal 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>
|
||||||
129
GFATask/UserControls/ucAdminNewsFeeds.Designer.cs
generated
Normal file
129
GFATask/UserControls/ucAdminNewsFeeds.Designer.cs
generated
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
101
GFATask/UserControls/ucAdminNewsFeeds.cs
Normal file
101
GFATask/UserControls/ucAdminNewsFeeds.cs
Normal 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));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
GFATask/UserControls/ucAdminNewsFeeds.resx
Normal file
120
GFATask/UserControls/ucAdminNewsFeeds.resx
Normal 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
79
GFATask/app.manifest
Normal 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>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
// <autogenerated />
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
|
||||||
BIN
GFATask/obj/Debug/DesignTimeResolveAssemblyReferences.cache
Normal file
BIN
GFATask/obj/Debug/DesignTimeResolveAssemblyReferences.cache
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Normal file
BIN
GFATask/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.FormAdmin.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.FormAdmin.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.FormAppButtonGroup.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.FormAppButtonGroup.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.FormAppCreator.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.FormAppCreator.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.FormGroups.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.FormGroups.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.FormInfo.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.FormInfo.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.FormMain.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.FormMain.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.FormSettings.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.FormSettings.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.Properties.Resources.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.Properties.Resources.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.csproj.AssemblyReference.cache
Normal file
BIN
GFATask/obj/Debug/GFATask.csproj.AssemblyReference.cache
Normal file
Binary file not shown.
0
GFATask/obj/Debug/GFATask.csproj.CopyComplete
Normal file
0
GFATask/obj/Debug/GFATask.csproj.CopyComplete
Normal file
1
GFATask/obj/Debug/GFATask.csproj.CoreCompileInputs.cache
Normal file
1
GFATask/obj/Debug/GFATask.csproj.CoreCompileInputs.cache
Normal file
@@ -0,0 +1 @@
|
|||||||
|
dc5c7c46120450bcdc11447a4713f457dffc0967
|
||||||
48
GFATask/obj/Debug/GFATask.csproj.FileListAbsolute.txt
Normal file
48
GFATask/obj/Debug/GFATask.csproj.FileListAbsolute.txt
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\GFATask.exe.config
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\GFATask.exe
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\GFATask.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\CustomGraphics.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\ExScreen.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Extensions.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\FormEx.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\ILog.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Logging.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Newtonsoft.Json.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Win32API.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\XObjects.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\CustomControls.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\CustomGraphics.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\ExScreen.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Extensions.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\FormEx.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\ILog.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Logging.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Newtonsoft.Json.xml
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\SystemManagement.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Win32API.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\XObjects.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.FormAppButtonGroup.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.FormAppCreator.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.FormAdmin.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.FormGroups.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.FormInfo.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.FormMain.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.FormSettings.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.ucAdminAppClickCounter.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.ucAdminApps.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.ucAdminHelp.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.ucAdminNewsFeeds.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.ucAdminDesigns.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.ucAdminGeneral.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.Properties.Resources.resources
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.csproj.GenerateResource.cache
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.csproj.CoreCompileInputs.cache
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.csproj.CopyComplete
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.exe
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\CustomControls.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Models.pdb
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\Models.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\bin\Debug\SystemManagement.dll
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.csproj.SuggestedBindingRedirects.cache
|
||||||
|
D:\Anwendungsentwicklung\C#\GFATask\GFATask\obj\Debug\GFATask.csproj.AssemblyReference.cache
|
||||||
BIN
GFATask/obj/Debug/GFATask.csproj.GenerateResource.cache
Normal file
BIN
GFATask/obj/Debug/GFATask.csproj.GenerateResource.cache
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.exe
Normal file
BIN
GFATask/obj/Debug/GFATask.exe
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.pdb
Normal file
BIN
GFATask/obj/Debug/GFATask.pdb
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.ucAdminAppClickCounter.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.ucAdminAppClickCounter.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.ucAdminApps.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.ucAdminApps.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.ucAdminDesigns.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.ucAdminDesigns.resources
Normal file
Binary file not shown.
BIN
GFATask/obj/Debug/GFATask.ucAdminGeneral.resources
Normal file
BIN
GFATask/obj/Debug/GFATask.ucAdminGeneral.resources
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user