├── EasyJob.sln ├── EasyJob ├── App.xaml ├── App.xaml.cs ├── AssemblyInfo.cs ├── Documentation │ ├── HelpDocumentation.xml │ └── Videos │ │ ├── HelpAddActionButtonArguments.mp4 │ │ ├── HelpAddActionButtonDescription.mp4 │ │ ├── HelpAddActionButtonScript.mp4 │ │ ├── HelpAddActionButtonScriptPathType.mp4 │ │ ├── HelpAddActionButtonScriptType.mp4 │ │ ├── HelpAddActionButtonText.mp4 │ │ ├── HelpConfigurationBlockButtonsAdd.mp4 │ │ ├── HelpConfigurationBlockButtonsCopy.mp4 │ │ ├── HelpConfigurationBlockButtonsEdit.mp4 │ │ ├── HelpConfigurationBlockButtonsPaste.mp4 │ │ ├── HelpConfigurationBlockButtonsRemove.mp4 │ │ ├── HelpConfigurationBlockButtonsReorder.mp4 │ │ ├── HelpConfigurationBlockTabsAdd.mp4 │ │ ├── HelpConfigurationBlockTabsRemove.mp4 │ │ ├── HelpConfigurationBlockTabsRename.mp4 │ │ ├── HelpConfigurationClearEventsWhenReload.mp4 │ │ ├── HelpConfigurationConsoleBackground.mp4 │ │ ├── HelpConfigurationConsoleForeground.mp4 │ │ ├── HelpConfigurationConsoleIgnoreColorTags.mp4 │ │ ├── HelpConfigurationDefaultCMDPath.mp4 │ │ ├── HelpConfigurationDefaultPowershellPath.mp4 │ │ ├── HelpConfigurationHideAbout.mp4 │ │ ├── HelpConfigurationHideClearEventsList.mp4 │ │ ├── HelpConfigurationHideColorTags.mp4 │ │ ├── HelpConfigurationHideFileOpenAppFolder.mp4 │ │ ├── HelpConfigurationHideFileReloadConfig.mp4 │ │ ├── HelpConfigurationHideHelp.mp4 │ │ ├── HelpConfigurationHideSettings.mp4 │ │ ├── HelpConfigurationHideSettingsConfiguration.mp4 │ │ ├── HelpConfigurationHideSettingsWorkflow.mp4 │ │ ├── HelpConfigurationHideSettingsWorkflowAddButtonToCurrentTab.mp4 │ │ ├── HelpConfigurationHideSettingsWorkflowAddTab.mp4 │ │ ├── HelpConfigurationHideSettingsWorkflowRemoveCurrentTab.mp4 │ │ ├── HelpConfigurationHideSettingsWorkflowRenameCurrentTab.mp4 │ │ ├── HelpConfigurationHideSettingsWorkflowReorderButtonsInCurrentTab.mp4 │ │ ├── HelpConfigurationHideSettingsWorkflowReorderTabs.mp4 │ │ ├── HelpConfigurationHideTroubleshooting.mp4 │ │ └── HelpConfigurationPowerShellArguments.mp4 ├── EasyJob.csproj ├── EasyJob.csproj.user ├── EasyJobPS │ ├── EasyJobPS.psd1 │ └── EasyJobPS.psm1 ├── Images │ ├── ColorTags │ │ ├── tag01.png │ │ ├── tag02.png │ │ ├── tag03.png │ │ ├── tag04.png │ │ ├── tag05.png │ │ ├── tag06.png │ │ ├── tag07.png │ │ ├── tag08.png │ │ ├── tag09.png │ │ ├── tag10.png │ │ ├── tag11.png │ │ ├── tag12.png │ │ ├── tag13.png │ │ └── tag14.png │ ├── about.png │ ├── add.png │ ├── addbutton.png │ ├── addtab.png │ ├── clear.png │ ├── close.png │ ├── colortags.png │ ├── configuration.png │ ├── convert.png │ ├── copy.png │ ├── down.png │ ├── editbutton.png │ ├── exit.png │ ├── find.png │ ├── folder.png │ ├── github.png │ ├── help.png │ ├── icon.ico │ ├── paste.png │ ├── play.png │ ├── reload.png │ ├── removebutton.png │ ├── removetab.png │ ├── renametab.png │ ├── reorderbuttons.png │ ├── reordertabs.png │ ├── stop.png │ ├── troubleshoot.png │ ├── up.png │ └── workflow.png ├── LICENSE.txt ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Serialization │ ├── AnswerDialog │ │ ├── Answer.cs │ │ └── AnswerData.cs │ ├── Config │ │ ├── Config.cs │ │ ├── ConfigArgument.cs │ │ ├── ConfigButton.cs │ │ ├── ConfigRestrictions.cs │ │ └── ConfigTab.cs │ ├── TabItems │ │ ├── ActionButton.cs │ │ └── TabData.cs │ └── TasksList │ │ └── TaskListTask.cs ├── Utils │ ├── CommonUtils.cs │ ├── ConfigUtils.cs │ └── ScrollViewerExtensions.cs ├── Windows │ ├── AboutDialog.xaml │ ├── AboutDialog.xaml.cs │ ├── AddActionButtonDialog.xaml │ ├── AddActionButtonDialog.xaml.cs │ ├── AnswerDialog.xaml │ ├── AnswerDialog.xaml.cs │ ├── ColorTagsDialog.xaml │ ├── ColorTagsDialog.xaml.cs │ ├── ConfigurationDialog.xaml │ ├── ConfigurationDialog.xaml.cs │ ├── EditActionButtonDialog.xaml │ ├── EditActionButtonDialog.xaml.cs │ ├── HelpDialog.xaml │ ├── HelpDialog.xaml.cs │ ├── NewTabDialog.xaml │ ├── NewTabDialog.xaml.cs │ ├── RenameTabDialog.xaml │ ├── RenameTabDialog.xaml.cs │ ├── ReorderActionButtonsDialog.xaml │ ├── ReorderActionButtonsDialog.xaml.cs │ ├── ReorderTabsDialog.xaml │ ├── ReorderTabsDialog.xaml.cs │ ├── TroubleshootingWindow.xaml │ └── TroubleshootingWindow.xaml.cs └── config.json ├── EasyJobPSTools ├── EasyJobPSTools.csproj ├── EasyJobPSTools.psd1 ├── EasyJobPSTools.psm1 ├── EasyJobPSTools.sln ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Utils │ └── CommonUtils.cs ├── Windows │ ├── ShowEJInputBox.xaml │ └── ShowEJInputBox.xaml.cs └── app.config ├── LICENSE.txt ├── README.md ├── WpfRichText ├── AttachedProperties │ └── RichTextboxAssistant.cs ├── Commands │ ├── CommandReference.cs │ └── DelegateCommand.cs ├── Controls │ ├── RichTextEditor.xaml │ └── RichTextEditor.xaml.cs ├── WpfRichText.csproj ├── WpfRichText.sln └── XamlToHtmlParser │ ├── HtmlCssParser.cs │ ├── HtmlFromXamlConverter.cs │ ├── HtmlLexicalAnalyzer.cs │ ├── HtmlParser.cs │ ├── HtmlSchema.cs │ ├── HtmlToXamlConverter.cs │ └── HtmlTokenType.cs ├── assets └── icon.png └── ej ├── build ├── build1.PNG └── build2.PNG ├── color_tags ├── tag01.png ├── tag02.png ├── tag03.png ├── tag04.png ├── tag05.png ├── tag06.png ├── tag07.png ├── tag08.png ├── tag09.png ├── tag10.png ├── tag11.png ├── tag12.png ├── tag13.png └── tag14.png ├── feature1_1_9_0.png ├── feature2_1_1_5.png ├── feature3_1_1_9_0.PNG ├── main_window1_1_1_5.png ├── main_window2_1_1_4.png ├── main_window3_1_1_4.png └── troubleshooting1_1_0_9_0.png /EasyJob.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.31624.102 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyJob", "EasyJob\EasyJob.csproj", "{E4A73656-4B1A-4A18-AC41-6AC59E1C8EB3}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfRichText", "WpfRichText\WpfRichText.csproj", "{BD7ECC34-44C8-4D3C-B0E5-0384E2F2DE02}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyJobPSTools", "EasyJobPSTools\EasyJobPSTools.csproj", "{D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {E4A73656-4B1A-4A18-AC41-6AC59E1C8EB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {E4A73656-4B1A-4A18-AC41-6AC59E1C8EB3}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {E4A73656-4B1A-4A18-AC41-6AC59E1C8EB3}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {E4A73656-4B1A-4A18-AC41-6AC59E1C8EB3}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {BD7ECC34-44C8-4D3C-B0E5-0384E2F2DE02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {BD7ECC34-44C8-4D3C-B0E5-0384E2F2DE02}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {BD7ECC34-44C8-4D3C-B0E5-0384E2F2DE02}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {BD7ECC34-44C8-4D3C-B0E5-0384E2F2DE02}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(ExtensibilityGlobals) = postSolution 35 | SolutionGuid = {92C31FCF-A509-4155-9117-FDEC0F8333AD} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /EasyJob/App.xaml: -------------------------------------------------------------------------------- 1 |  7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /EasyJob/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Threading.Tasks; 8 | using System.Windows; 9 | 10 | namespace EasyJob 11 | { 12 | /// 13 | /// Interaction logic for App.xaml 14 | /// 15 | public partial class App : Application 16 | { 17 | protected override void OnStartup(StartupEventArgs e) 18 | { 19 | base.OnStartup(e); 20 | 21 | SetDropDownMenuToBeRightAligned(); 22 | } 23 | 24 | private static void SetDropDownMenuToBeRightAligned() 25 | { 26 | var menuDropAlignmentField = typeof(SystemParameters).GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static); 27 | Action setAlignmentValue = () => 28 | { 29 | if (SystemParameters.MenuDropAlignment && menuDropAlignmentField != null) menuDropAlignmentField.SetValue(null, false); 30 | }; 31 | 32 | setAlignmentValue(); 33 | 34 | SystemParameters.StaticPropertyChanged += (sender, e) => 35 | { 36 | setAlignmentValue(); 37 | }; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /EasyJob/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | [assembly: ThemeInfo( 4 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 5 | //(used if a resource is not found in the page, 6 | // or application resource dictionaries) 7 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 8 | //(used if a resource is not found in the page, 9 | // app, or any theme specific resource dictionaries) 10 | )] 11 | -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpAddActionButtonArguments.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpAddActionButtonArguments.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpAddActionButtonDescription.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpAddActionButtonDescription.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpAddActionButtonScript.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpAddActionButtonScript.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpAddActionButtonScriptPathType.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpAddActionButtonScriptPathType.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpAddActionButtonScriptType.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpAddActionButtonScriptType.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpAddActionButtonText.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpAddActionButtonText.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsAdd.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsAdd.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsCopy.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsCopy.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsEdit.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsEdit.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsPaste.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsPaste.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsRemove.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsRemove.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsReorder.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockButtonsReorder.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockTabsAdd.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockTabsAdd.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockTabsRemove.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockTabsRemove.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationBlockTabsRename.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationBlockTabsRename.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationClearEventsWhenReload.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationClearEventsWhenReload.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationConsoleBackground.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationConsoleBackground.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationConsoleForeground.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationConsoleForeground.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationConsoleIgnoreColorTags.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationConsoleIgnoreColorTags.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationDefaultCMDPath.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationDefaultCMDPath.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationDefaultPowershellPath.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationDefaultPowershellPath.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideAbout.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideAbout.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideClearEventsList.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideClearEventsList.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideColorTags.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideColorTags.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideFileOpenAppFolder.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideFileOpenAppFolder.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideFileReloadConfig.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideFileReloadConfig.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideHelp.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideHelp.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettings.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettings.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettingsConfiguration.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettingsConfiguration.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflow.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflow.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowAddButtonToCurrentTab.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowAddButtonToCurrentTab.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowAddTab.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowAddTab.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowRemoveCurrentTab.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowRemoveCurrentTab.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowRenameCurrentTab.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowRenameCurrentTab.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowReorderButtonsInCurrentTab.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowReorderButtonsInCurrentTab.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowReorderTabs.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideSettingsWorkflowReorderTabs.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationHideTroubleshooting.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationHideTroubleshooting.mp4 -------------------------------------------------------------------------------- /EasyJob/Documentation/Videos/HelpConfigurationPowerShellArguments.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Documentation/Videos/HelpConfigurationPowerShellArguments.mp4 -------------------------------------------------------------------------------- /EasyJob/EasyJob.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Designer 7 | 8 | 9 | 10 | 11 | Code 12 | 13 | 14 | Code 15 | 16 | 17 | Code 18 | 19 | 20 | Code 21 | 22 | 23 | Code 24 | 25 | 26 | Code 27 | 28 | 29 | Code 30 | 31 | 32 | Code 33 | 34 | 35 | Code 36 | 37 | 38 | Code 39 | 40 | 41 | Code 42 | 43 | 44 | 45 | 46 | Designer 47 | 48 | 49 | Designer 50 | 51 | 52 | Designer 53 | 54 | 55 | Designer 56 | 57 | 58 | Designer 59 | 60 | 61 | Designer 62 | 63 | 64 | Designer 65 | 66 | 67 | Designer 68 | 69 | 70 | Designer 71 | 72 | 73 | Designer 74 | 75 | 76 | Designer 77 | 78 | 79 | Designer 80 | 81 | 82 | Designer 83 | 84 | 85 | -------------------------------------------------------------------------------- /EasyJob/EasyJobPS/EasyJobPS.psd1: -------------------------------------------------------------------------------- 1 | # Module manifest for module 'EasyJobPS' 2 | # Generated by: Akshin Mustafayev 3 | # Generated on: 10/8/2021 4 | 5 | @{ 6 | 7 | # Script module or binary module file associated with this manifest. 8 | RootModule = 'EasyJobPS.psm1' 9 | 10 | # Version number of this module. 11 | ModuleVersion = '1.0' 12 | 13 | # ID used to uniquely identify this module 14 | GUID = 'd6c56376-ae08-4c23-b901-9bc75144e0c6' 15 | 16 | # Author of this module 17 | Author = 'Akshin Mustafayev' 18 | 19 | # Company or vendor of this module 20 | CompanyName = 'Akshin Mustafayev' 21 | 22 | # Copyright statement for this module 23 | Copyright = '(c) 2021 Akshin Mustafayev. Apache-2.0 license.' 24 | 25 | # Description of the functionality provided by this module 26 | Description = 'Module for implementing EasyJob additional helper functions' 27 | 28 | # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. 29 | FunctionsToExport = 'Show-EJInputBox' 30 | 31 | } -------------------------------------------------------------------------------- /EasyJob/EasyJobPS/EasyJobPS.psm1: -------------------------------------------------------------------------------- 1 | [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') 2 | 3 | function Show-EJInputBox { 4 | <# 5 | .SYNOPSIS 6 | Shows Input-Box for you script. 7 | 8 | .DESCRIPTION 9 | Shows Input-Box for you script. This might be necessary 10 | when you want to get som input while executing your script, 11 | since EasyJob does not support Read from console. 12 | 13 | .PARAMETER Title 14 | Specifies Title for message box. 15 | 16 | .PARAMETER Message 17 | Specifies Message for message box. 18 | 19 | .INPUTS 20 | None. 21 | 22 | .OUTPUTS 23 | String value of the input from the box. 24 | 25 | .EXAMPLE 26 | C:\PS> $Result = Show-EJInputBox -Title "Specify your name" -Message "What is your name?" 27 | C:\PS> Write-Host "Your name is $Result" 28 | Your name is test 29 | 30 | .LINK 31 | https://github.com/akshinmustafayev/EasyJob 32 | #> 33 | 34 | param ( 35 | [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()] [string]$Title, 36 | [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()] [string]$Message 37 | ) 38 | 39 | $Result = [Microsoft.VisualBasic.Interaction]::InputBox($Message, $Title) 40 | return $Result 41 | } -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag01.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag02.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag03.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag04.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag05.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag06.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag07.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag08.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag09.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag10.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag11.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag12.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag13.png -------------------------------------------------------------------------------- /EasyJob/Images/ColorTags/tag14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/ColorTags/tag14.png -------------------------------------------------------------------------------- /EasyJob/Images/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/about.png -------------------------------------------------------------------------------- /EasyJob/Images/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/add.png -------------------------------------------------------------------------------- /EasyJob/Images/addbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/addbutton.png -------------------------------------------------------------------------------- /EasyJob/Images/addtab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/addtab.png -------------------------------------------------------------------------------- /EasyJob/Images/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/clear.png -------------------------------------------------------------------------------- /EasyJob/Images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/close.png -------------------------------------------------------------------------------- /EasyJob/Images/colortags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/colortags.png -------------------------------------------------------------------------------- /EasyJob/Images/configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/configuration.png -------------------------------------------------------------------------------- /EasyJob/Images/convert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/convert.png -------------------------------------------------------------------------------- /EasyJob/Images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/copy.png -------------------------------------------------------------------------------- /EasyJob/Images/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/down.png -------------------------------------------------------------------------------- /EasyJob/Images/editbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/editbutton.png -------------------------------------------------------------------------------- /EasyJob/Images/exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/exit.png -------------------------------------------------------------------------------- /EasyJob/Images/find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/find.png -------------------------------------------------------------------------------- /EasyJob/Images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/folder.png -------------------------------------------------------------------------------- /EasyJob/Images/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/github.png -------------------------------------------------------------------------------- /EasyJob/Images/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/help.png -------------------------------------------------------------------------------- /EasyJob/Images/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/icon.ico -------------------------------------------------------------------------------- /EasyJob/Images/paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/paste.png -------------------------------------------------------------------------------- /EasyJob/Images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/play.png -------------------------------------------------------------------------------- /EasyJob/Images/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/reload.png -------------------------------------------------------------------------------- /EasyJob/Images/removebutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/removebutton.png -------------------------------------------------------------------------------- /EasyJob/Images/removetab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/removetab.png -------------------------------------------------------------------------------- /EasyJob/Images/renametab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/renametab.png -------------------------------------------------------------------------------- /EasyJob/Images/reorderbuttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/reorderbuttons.png -------------------------------------------------------------------------------- /EasyJob/Images/reordertabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/reordertabs.png -------------------------------------------------------------------------------- /EasyJob/Images/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/stop.png -------------------------------------------------------------------------------- /EasyJob/Images/troubleshoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/troubleshoot.png -------------------------------------------------------------------------------- /EasyJob/Images/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/up.png -------------------------------------------------------------------------------- /EasyJob/Images/workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akshinmustafayev/EasyJob/2469fe858a77b467afab3dd451cfa56df56d3fbb/EasyJob/Images/workflow.png -------------------------------------------------------------------------------- /EasyJob/Serialization/AnswerDialog/Answer.cs: -------------------------------------------------------------------------------- 1 | namespace EasyJob.Serialization.AnswerDialog 2 | { 3 | public class Answer 4 | { 5 | public string AnswerQuestion { get; set; } 6 | public string AnswerResult { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /EasyJob/Serialization/AnswerDialog/AnswerData.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace EasyJob.Serialization.AnswerDialog 4 | { 5 | public class AnswerData 6 | { 7 | private List _Answers = new List(); 8 | 9 | public List Answers 10 | { 11 | get { return _Answers; } 12 | set { _Answers = value; } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /EasyJob/Serialization/Config/Config.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace EasyJob.Serialization 4 | { 5 | public class Config 6 | { 7 | public string default_powershell_path { get; set; } 8 | public string default_cmd_path { get; set; } 9 | public string powershell_arguments { get; set; } 10 | public string console_background { get; set; } 11 | public string console_foreground { get; set; } 12 | public bool console_ignore_color_tags { get; set; } 13 | public bool clear_events_when_reload { get; set; } 14 | public ConfigRestrictions restrictions { get; set; } 15 | public List tabs { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /EasyJob/Serialization/Config/ConfigArgument.cs: -------------------------------------------------------------------------------- 1 | namespace EasyJob.Serialization 2 | { 3 | public class ConfigArgument 4 | { 5 | private string _argument_question; 6 | private string _argument_answer; 7 | 8 | /// 9 | /// Initializes a new instance of the class. 10 | /// 11 | /// The argument question. 12 | /// The argument answer. 13 | public ConfigArgument(string argument_question, string argument_answer) 14 | { 15 | this._argument_question = argument_question; 16 | this._argument_answer = argument_answer; 17 | } 18 | 19 | /// 20 | /// Gets or sets the argument question. 21 | /// 22 | /// 23 | /// The argument question. 24 | /// 25 | public string ArgumentQuestion { get => _argument_question; set => _argument_question = value; } 26 | /// 27 | /// Gets or sets the argument answer. 28 | /// 29 | /// 30 | /// The argument answer. 31 | /// 32 | public string ArgumentAnswer { get => _argument_answer; set => _argument_answer = value; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /EasyJob/Serialization/Config/ConfigButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace EasyJob.Serialization 5 | { 6 | public class ConfigButton 7 | { 8 | private Guid _id; 9 | private string _text; 10 | private string _description; 11 | private string _script; 12 | private string _scriptpathtype; 13 | private string _scripttype; 14 | private List _arguments; 15 | 16 | /// 17 | /// Initializes a new instance of the class. 18 | /// 19 | /// The text. 20 | /// The description. 21 | /// The script. 22 | /// The scriptpathtype. 23 | /// The scripttype. 24 | /// The arguments. 25 | /// 26 | public ConfigButton(Guid id, string text, string description, string script, string scriptpathtype, string scripttype, List arguments) 27 | { 28 | this._id = id.Equals(Guid.Empty) ? Guid.NewGuid() : id; 29 | this._text = text; 30 | this._description = description; 31 | this._script = script; 32 | this._scriptpathtype = scriptpathtype; 33 | this._scripttype = scripttype; 34 | this._arguments = arguments; 35 | } 36 | 37 | /// 38 | /// Gets or sets the identifier. 39 | /// 40 | /// 41 | /// The identifier. 42 | /// 43 | public Guid Id { get => _id; set => _id = value; } 44 | 45 | /// 46 | /// Gets or sets the text. 47 | /// 48 | /// 49 | /// The text. 50 | /// 51 | public string Text { get => _text; set => _text = value; } 52 | 53 | /// 54 | /// Gets or sets the description. 55 | /// 56 | /// 57 | /// The description. 58 | /// 59 | public string Description { get => _description; set => _description = value; } 60 | 61 | /// 62 | /// Gets or sets the script. 63 | /// 64 | /// 65 | /// The script. 66 | /// 67 | public string Script { get => _script; set => _script = value; } 68 | 69 | /// 70 | /// Gets or sets the type of the script path. 71 | /// 72 | /// 73 | /// The type of the script path. 74 | /// 75 | public string ScriptPathType { get => _scriptpathtype; set => _scriptpathtype = value; } 76 | 77 | /// 78 | /// Gets or sets the type of the script. 79 | /// 80 | /// 81 | /// The type of the script. 82 | /// 83 | public string ScriptType { get => _scripttype; set => _scripttype = value; } 84 | 85 | /// 86 | /// Gets or sets the arguments. 87 | /// 88 | /// 89 | /// The arguments. 90 | /// 91 | public List Arguments { get => _arguments; set => _arguments = value; } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /EasyJob/Serialization/Config/ConfigRestrictions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace EasyJob.Serialization 8 | { 9 | public class ConfigRestrictions 10 | { 11 | public bool block_tabs_remove { get; set; } 12 | public bool block_buttons_remove { get; set; } 13 | public bool block_tabs_add { get; set; } 14 | public bool block_buttons_add { get; set; } 15 | public bool block_buttons_reorder { get; set; } 16 | public bool block_buttons_edit { get; set; } 17 | public bool block_tabs_rename { get; set; } 18 | public bool block_buttons_paste { get; set; } 19 | public bool block_buttons_copy { get; set; } 20 | public bool hide_menu_item_file_reload_config { get; set; } 21 | public bool hide_menu_item_file_open_app_folder { get; set; } 22 | public bool hide_menu_item_file_clear_events_list { get; set; } 23 | public bool hide_menu_item_settings { get; set; } 24 | public bool hide_menu_item_settings_workflow { get; set; } 25 | public bool hide_menu_item_settings_workflow_reorder_tabs { get; set; } 26 | public bool hide_menu_item_settings_workflow_add_tab { get; set; } 27 | public bool hide_menu_item_settings_workflow_remove_current_tab { get; set; } 28 | public bool hide_menu_item_settings_workflow_rename_current_tab { get; set; } 29 | public bool hide_menu_item_settings_workflow_add_button_to_current_tab { get; set; } 30 | public bool hide_menu_item_settings_workflow_reorder_buttons_in_current_tab { get; set; } 31 | public bool hide_menu_item_settings_configuration { get; set; } 32 | public bool hide_menu_item_help { get; set; } 33 | public bool hide_menu_item_help_troubleshooting { get; set; } 34 | public bool hide_menu_item_help_colortags { get; set; } 35 | public bool hide_menu_item_help_about { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /EasyJob/Serialization/Config/ConfigTab.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace EasyJob.Serialization 5 | { 6 | public class ConfigTab 7 | { 8 | private Guid _id; 9 | private string _header; 10 | private List _buttons; 11 | 12 | /// 13 | /// Initializes a new instance of the class. 14 | /// 15 | /// The identifier. 16 | /// The header. 17 | /// The buttons. 18 | public ConfigTab(Guid id, string header, List buttons) 19 | { 20 | this._id = id.Equals(Guid.Empty) ? Guid.NewGuid() : id; 21 | this._header = header; 22 | this._buttons = buttons; 23 | } 24 | 25 | /// 26 | /// Gets or sets the identifier. 27 | /// 28 | /// 29 | /// The identifier. 30 | /// 31 | public Guid ID { get => _id; set => _id = value; } 32 | 33 | 34 | /// 35 | /// Gets or sets the header. 36 | /// 37 | /// 38 | /// The header. 39 | /// 40 | public string Header { get => _header; set => _header = value; } 41 | /// 42 | /// Gets or sets the buttons. 43 | /// 44 | /// 45 | /// The buttons. 46 | /// 47 | public List Buttons { get => _buttons; set => _buttons = value; } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /EasyJob/Serialization/TabItems/ActionButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Windows.Controls; 4 | using EasyJob.Serialization.AnswerDialog; 5 | 6 | namespace EasyJob.TabItems 7 | { 8 | public class ActionButton 9 | { 10 | /// 11 | /// Gets or sets the identifier. 12 | /// 13 | /// 14 | /// The identifier. 15 | /// 16 | public Guid ID { get; set; } 17 | 18 | /// 19 | /// Gets or sets the button text. 20 | /// 21 | /// 22 | /// The button text. 23 | /// 24 | public string ButtonText { get; set; } 25 | 26 | /// 27 | /// Gets or sets the button description. 28 | /// 29 | /// 30 | /// The button description. 31 | /// 32 | public string ButtonDescription { get; set; } 33 | 34 | /// 35 | /// Gets or sets the button script. 36 | /// 37 | /// 38 | /// The button script. 39 | /// 40 | public string ButtonScript { get; set; } 41 | 42 | /// 43 | /// Gets or sets the type of the button script path. 44 | /// 45 | /// 46 | /// The type of the button script path. 47 | /// 48 | public string ButtonScriptPathType { get; set; } 49 | 50 | /// 51 | /// Gets or sets the type of the button script. 52 | /// 53 | /// 54 | /// The type of the button script. 55 | /// 56 | public string ButtonScriptType { get; set; } 57 | 58 | /// 59 | /// Gets or sets the button arguments. 60 | /// 61 | /// 62 | /// The button arguments. 63 | /// 64 | public List ButtonArguments { get; set; } 65 | 66 | /// 67 | /// Gets or sets the context menu. 68 | /// 69 | /// 70 | /// The context menu. 71 | /// 72 | public ContextMenu contextMenu { get; set; } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /EasyJob/Serialization/TabItems/TabData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Threading.Tasks; 5 | 6 | namespace EasyJob.TabItems 7 | { 8 | public class TabData : INotifyPropertyChanged 9 | { 10 | private string _TabTextBoxText; 11 | 12 | /// 13 | /// Initializes a new instance of the class. 14 | /// 15 | public TabData() 16 | { 17 | 18 | } 19 | 20 | /// 21 | /// Initializes a new instance of the class. 22 | /// 23 | /// The tab text box text. 24 | public TabData(string tabTextBoxText) 25 | { 26 | this._TabTextBoxText = tabTextBoxText; 27 | ID = Guid.NewGuid(); 28 | TabHeader = tabTextBoxText; 29 | TabActionButtons = new List(); 30 | } 31 | 32 | /// 33 | /// Gets or sets the identifier. 34 | /// 35 | /// 36 | /// The identifier. 37 | /// 38 | public Guid ID { get; set; } 39 | 40 | /// 41 | /// Gets or sets the tab header. 42 | /// 43 | /// 44 | /// The tab header. 45 | /// 46 | public string TabHeader { get; set; } 47 | /// 48 | /// Gets or sets the console background. 49 | /// 50 | /// 51 | /// The console background. 52 | /// 53 | public string ConsoleBackground { get; set; } 54 | /// 55 | /// Gets or sets the console foreground. 56 | /// 57 | /// 58 | /// The console foreground. 59 | /// 60 | public string ConsoleForeground { get; set; } 61 | /// 62 | /// Gets or sets the tab action buttons. 63 | /// 64 | /// 65 | /// The tab action buttons. 66 | /// 67 | public List TabActionButtons { get; set; } 68 | /// 69 | /// Gets or sets the tab text box text. 70 | /// 71 | /// 72 | /// The tab text box text. 73 | /// 74 | public string TabTextBoxText { 75 | get 76 | { 77 | return this._TabTextBoxText; 78 | } 79 | set 80 | { 81 | if (_TabTextBoxText != value) 82 | { 83 | _TabTextBoxText = value; 84 | Task.Run(() => { 85 | OnChange("TabTextBoxText"); 86 | }); 87 | } 88 | } 89 | } 90 | 91 | /// 92 | /// Occurs when a property value changes. 93 | /// 94 | public event PropertyChangedEventHandler PropertyChanged; 95 | /// 96 | /// Called when [change]. 97 | /// 98 | /// The information. 99 | protected void OnChange(string info) 100 | { 101 | if (PropertyChanged != null) 102 | { 103 | PropertyChanged(this, new PropertyChangedEventArgs(info)); 104 | } 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /EasyJob/Serialization/TasksList/TaskListTask.cs: -------------------------------------------------------------------------------- 1 | namespace EasyJob.Serialization.TasksList 2 | { 3 | public class TaskListTask 4 | { 5 | public int TaskID { get; set; } 6 | public string TaskFile { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /EasyJob/Utils/CommonUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Reflection; 6 | using System.Windows; 7 | 8 | namespace EasyJob.Utils 9 | { 10 | public class CommonUtils 11 | { 12 | public static void OpenLinkInBrowser(string url) 13 | { 14 | try 15 | { 16 | Process proc = new Process(); 17 | proc.StartInfo.UseShellExecute = true; 18 | proc.StartInfo.FileName = url; 19 | proc.Start(); 20 | } 21 | catch (Exception ex) { MessageBox.Show(ex.Message); } 22 | } 23 | 24 | public static string ReadAssemblyFile(string name) 25 | { 26 | // Determine path 27 | var assembly = Assembly.GetExecutingAssembly(); 28 | string resourcePath = name; 29 | // Format: "{Namespace}.{Folder}.{filename}.{Extension}" 30 | if (!name.StartsWith(nameof(EasyJob))) 31 | { 32 | resourcePath = assembly.GetManifestResourceNames() 33 | .Single(str => str.EndsWith(name)); 34 | } 35 | 36 | using (Stream stream = assembly.GetManifestResourceStream(resourcePath)) 37 | using (StreamReader reader = new StreamReader(stream)) 38 | { 39 | return reader.ReadToEnd(); 40 | } 41 | } 42 | 43 | public static string ApplyConsoleColorTagsToText(string Text) 44 | { 45 | string[][] colorCodes = new string[][] { 46 | new string[] { @"\c01EJ", "/c01EJ", "" }, 47 | new string[] { @"\c02EJ", "/c02EJ", "" }, 48 | new string[] { @"\c03EJ", "/c03EJ", "" }, 49 | new string[] { @"\c04EJ", "/c04EJ", "" }, 50 | new string[] { @"\c05EJ", "/c05EJ", "" }, 51 | new string[] { @"\c06EJ", "/c06EJ", "" }, 52 | new string[] { @"\c07EJ", "/c07EJ", "" }, 53 | new string[] { @"\c08EJ", "/c08EJ", "" }, 54 | new string[] { @"\c09EJ", "/c09EJ", "" }, 55 | new string[] { @"\c10EJ", "/c10EJ", "" }, 56 | new string[] { @"\c11EJ", "/c11EJ", "" }, 57 | new string[] { @"\c12EJ", "/c12EJ", "" }, 58 | new string[] { @"\c13EJ", "/c13EJ", "" }, 59 | new string[] { @"\c14EJ", "/c14EJ", "" } 60 | }; 61 | 62 | for (int i = 0; i <= colorCodes.GetLength(0) - 1; i++) 63 | { 64 | if (Text.Contains(colorCodes[i][0]) == true && Text.Contains(colorCodes[i][1]) == false) 65 | { 66 | Text = Text.Replace(colorCodes[i][0], colorCodes[i][2]); 67 | Text = Text + ""; 68 | } 69 | else if (Text.Contains(colorCodes[i][0]) == false && Text.Contains(colorCodes[i][1]) == true) 70 | { 71 | Text = Text.Replace(colorCodes[i][1], ""); 72 | } 73 | else if (Text.Contains(colorCodes[i][0]) == true && Text.Contains(colorCodes[i][1]) == true) 74 | { 75 | Text = Text.Replace(colorCodes[i][0], colorCodes[i][2]); 76 | Text = Text.Replace(colorCodes[i][1], ""); 77 | } 78 | } 79 | 80 | return Text; 81 | } 82 | 83 | public static string ConvertPartToRelative(string Path) 84 | { 85 | Path = Path.Replace(AppDomain.CurrentDomain.BaseDirectory, ""); 86 | return Path; 87 | } 88 | 89 | public static string ApplicationStartupPath() 90 | { 91 | return AppDomain.CurrentDomain.BaseDirectory; 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /EasyJob/Utils/ConfigUtils.cs: -------------------------------------------------------------------------------- 1 | using EasyJob.Serialization; 2 | using EasyJob.Serialization.AnswerDialog; 3 | using EasyJob.TabItems; 4 | using Newtonsoft.Json; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Collections.ObjectModel; 8 | using System.IO; 9 | using System.Linq; 10 | using System.Text; 11 | using System.Threading.Tasks; 12 | using System.Windows; 13 | 14 | namespace EasyJob.Utils 15 | { 16 | public class ConfigUtils 17 | { 18 | public static string ConfigJsonPath = AppDomain.CurrentDomain.BaseDirectory + "config.json"; 19 | 20 | 21 | public static ObservableCollection ConvertTabsFromConfigToUI(Config config) 22 | { 23 | ObservableCollection tabs = new ObservableCollection(); 24 | 25 | foreach (ConfigTab configTab in config.tabs) 26 | { 27 | List actionButtons = new List(); 28 | 29 | foreach (ConfigButton configButton in configTab.Buttons) 30 | { 31 | List configArguments = new List(); 32 | foreach (ConfigArgument configArgument in configButton.Arguments) 33 | { 34 | configArguments.Add(new Answer { AnswerQuestion = configArgument.ArgumentQuestion, AnswerResult = configArgument.ArgumentAnswer }); 35 | } 36 | 37 | actionButtons.Add(new ActionButton { ID = configButton.Id, ButtonText = configButton.Text, ButtonDescription = configButton.Description, ButtonScript = configButton.Script, ButtonScriptPathType = configButton.ScriptPathType, ButtonScriptType = configButton.ScriptType, ButtonArguments = configArguments }); 38 | } 39 | 40 | tabs.Add(new TabData { ID = configTab.ID, TabHeader = configTab.Header, ConsoleBackground = config.console_background, ConsoleForeground = config.console_foreground, TabActionButtons = actionButtons, TabTextBoxText = "" }); 41 | } 42 | 43 | return tabs; 44 | } 45 | 46 | /// 47 | /// Saves the configs. 48 | /// 49 | /// The tabs. 50 | /// 51 | public static List ConvertTabsFromUIToConfig(IEnumerable tabs) 52 | { 53 | List configTabs = new List(); 54 | List buttons = null; 55 | List configArguments = null; 56 | 57 | foreach (TabData tab in tabs) 58 | { 59 | buttons = new List(); 60 | foreach (ActionButton button in tab.TabActionButtons) 61 | { 62 | configArguments = new List(); 63 | foreach (Answer answer in button.ButtonArguments) 64 | { 65 | configArguments.Add(new ConfigArgument(answer.AnswerQuestion, answer.AnswerResult)); 66 | } 67 | 68 | buttons.Add(new ConfigButton(button.ID, button.ButtonText, button.ButtonDescription, button.ButtonScript, button.ButtonScriptPathType, button.ButtonScriptType, configArguments)); 69 | } 70 | 71 | configTabs.Add(new ConfigTab(tab.ID, tab.TabHeader, buttons)); 72 | } 73 | 74 | return configTabs; 75 | } 76 | 77 | public static bool SaveFromConfigToFile(Config config) 78 | { 79 | try 80 | { 81 | string confifJson = JsonConvert.SerializeObject(config); 82 | File.WriteAllText(ConfigJsonPath, confifJson, Encoding.UTF8); 83 | 84 | return true; 85 | } 86 | catch (Exception ex) 87 | { 88 | MessageBox.Show(ex.Message); 89 | return false; 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /EasyJob/Utils/ScrollViewerExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | 9 | namespace EasyJob.Utils 10 | { 11 | public class ScrollViewerExtensions 12 | { 13 | public static readonly DependencyProperty AlwaysScrollToEndProperty = DependencyProperty.RegisterAttached("AlwaysScrollToEnd", typeof(bool), typeof(ScrollViewerExtensions), new PropertyMetadata(false, AlwaysScrollToEndChanged)); 14 | private static bool _autoScroll; 15 | 16 | private static void AlwaysScrollToEndChanged(object sender, DependencyPropertyChangedEventArgs e) 17 | { 18 | ScrollViewer scroll = sender as ScrollViewer; 19 | if (scroll != null) 20 | { 21 | bool alwaysScrollToEnd = (e.NewValue != null) && (bool)e.NewValue; 22 | if (alwaysScrollToEnd) 23 | { 24 | scroll.ScrollToEnd(); 25 | scroll.ScrollChanged += ScrollChanged; 26 | } 27 | else { scroll.ScrollChanged -= ScrollChanged; } 28 | } 29 | else { throw new InvalidOperationException("The attached AlwaysScrollToEnd property can only be applied to ScrollViewer instances."); } 30 | } 31 | 32 | public static bool GetAlwaysScrollToEnd(ScrollViewer scroll) 33 | { 34 | if (scroll == null) { throw new ArgumentNullException("scroll"); } 35 | return (bool)scroll.GetValue(AlwaysScrollToEndProperty); 36 | } 37 | 38 | public static void SetAlwaysScrollToEnd(ScrollViewer scroll, bool alwaysScrollToEnd) 39 | { 40 | if (scroll == null) { throw new ArgumentNullException("scroll"); } 41 | scroll.SetValue(AlwaysScrollToEndProperty, alwaysScrollToEnd); 42 | } 43 | 44 | private static void ScrollChanged(object sender, ScrollChangedEventArgs e) 45 | { 46 | ScrollViewer scroll = sender as ScrollViewer; 47 | if (scroll == null) { throw new InvalidOperationException("The attached AlwaysScrollToEnd property can only be applied to ScrollViewer instances."); } 48 | 49 | // User scroll event : set or unset autoscroll mode 50 | if (e.ExtentHeightChange == 0) { _autoScroll = scroll.VerticalOffset == scroll.ScrollableHeight; } 51 | 52 | // Content scroll event : autoscroll eventually 53 | if (_autoScroll && e.ExtentHeightChange != 0) { scroll.ScrollToVerticalOffset(scroll.ExtentHeight); } 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /EasyJob/Windows/AboutDialog.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 48 | -------------------------------------------------------------------------------- /EasyJob/Windows/HelpDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using EasyJob.Utils; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows; 10 | using System.Windows.Controls; 11 | using System.Windows.Data; 12 | using System.Windows.Documents; 13 | using System.Windows.Input; 14 | using System.Windows.Media; 15 | using System.Windows.Media.Imaging; 16 | using System.Windows.Shapes; 17 | using System.Xml; 18 | using System.Xml.Linq; 19 | 20 | namespace EasyJob.Windows 21 | { 22 | /// 23 | /// Interaction logic for HelpDialog.xaml 24 | /// 25 | public partial class HelpDialog : Window 26 | { 27 | public HelpDialog(string helpitem) 28 | { 29 | InitializeComponent(); 30 | LoadXml(helpitem); 31 | } 32 | 33 | private void LoadXml(string helpitem) 34 | { 35 | XmlDocument doc = new XmlDocument(); 36 | doc.LoadXml(CommonUtils.ReadAssemblyFile(@"EasyJob.Documentation.HelpDocumentation.xml")); 37 | 38 | XmlNodeList nodeList = doc.SelectNodes("/items/item[name='" + helpitem + "']"); 39 | 40 | HelpHeading.Text = nodeList[0]["heading"].InnerText; 41 | HelpUsed.Text = nodeList[0]["used"].InnerText; 42 | HelpDescription.Text = nodeList[0]["description"].InnerText; 43 | if (nodeList[0]["video"].InnerText != "" || nodeList[0]["video"].InnerText != null) 44 | { 45 | try 46 | { 47 | HelpVideo.HorizontalAlignment = HorizontalAlignment.Stretch; 48 | HelpVideo.VerticalAlignment = VerticalAlignment.Stretch; 49 | HelpVideo.Stretch = Stretch.Fill; 50 | HelpVideo.Volume = 0; 51 | HelpVideo.Source = new Uri(@"Documentation\Videos\" + nodeList[0]["video"].InnerText, UriKind.Relative); 52 | HelpVideo.Position = TimeSpan.FromSeconds(0); 53 | HelpVideo.Play(); 54 | } 55 | catch { } 56 | } 57 | } 58 | 59 | private void ReloadVideoButton_Click(object sender, RoutedEventArgs e) 60 | { 61 | HelpVideo.Position = TimeSpan.FromSeconds(0); 62 | HelpVideo.Play(); 63 | } 64 | 65 | private void StopVideoButton_Click(object sender, RoutedEventArgs e) 66 | { 67 | HelpVideo.Stop(); 68 | } 69 | 70 | private void PlayVideoButton_Click(object sender, RoutedEventArgs e) 71 | { 72 | HelpVideo.Play(); 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /EasyJob/Windows/NewTabDialog.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 44 | 45 | -------------------------------------------------------------------------------- /EasyJob/Windows/ReorderActionButtonsDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using EasyJob.Serialization; 2 | using EasyJob.TabItems; 3 | using EasyJob.Utils; 4 | using Newtonsoft.Json; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Collections.ObjectModel; 8 | using System.IO; 9 | using System.Linq; 10 | using System.Text; 11 | using System.Threading.Tasks; 12 | using System.Windows; 13 | using System.Windows.Controls; 14 | using System.Windows.Data; 15 | using System.Windows.Documents; 16 | using System.Windows.Input; 17 | using System.Windows.Media; 18 | using System.Windows.Media.Imaging; 19 | using System.Windows.Shapes; 20 | 21 | namespace EasyJob.Windows 22 | { 23 | /// 24 | /// Interaction logic for ReorderActionButtonsDialog.xaml 25 | /// 26 | public partial class ReorderActionButtonsDialog : Window 27 | { 28 | public Config config; 29 | public int currentTabIndex = 0; 30 | public bool changesOccured = false; 31 | ObservableCollection TabItems = null; 32 | ObservableCollection ActionButtons = null; 33 | 34 | public ReorderActionButtonsDialog(int _currentTabIndex, Config _config) 35 | { 36 | InitializeComponent(); 37 | config = _config; 38 | currentTabIndex = _currentTabIndex; 39 | LoadConfig(); 40 | } 41 | 42 | public void LoadConfig() 43 | { 44 | try 45 | { 46 | MainWindowActionButtonsList.ItemsSource = null; 47 | 48 | TabItems = ConfigUtils.ConvertTabsFromConfigToUI(config); 49 | 50 | List list = TabItems[currentTabIndex].TabActionButtons; 51 | ObservableCollection collection = new ObservableCollection(list); 52 | 53 | ActionButtons = collection; 54 | 55 | MainWindowActionButtonsList.ItemsSource = ActionButtons; 56 | } 57 | catch (Exception ex) 58 | { 59 | MessageBox.Show(ex.Message); 60 | } 61 | } 62 | 63 | public bool SaveConfig() 64 | { 65 | if (File.Exists(ConfigUtils.ConfigJsonPath)) 66 | { 67 | try 68 | { 69 | config.tabs.Clear(); 70 | config.tabs = ConfigUtils.ConvertTabsFromUIToConfig(TabItems); 71 | 72 | if (ConfigUtils.SaveFromConfigToFile(config) == true) 73 | { 74 | return true; 75 | } 76 | else 77 | { 78 | return false; 79 | } 80 | } 81 | catch 82 | { 83 | return false; 84 | } 85 | } 86 | else 87 | { 88 | SaveConfig(); 89 | } 90 | 91 | return false; 92 | } 93 | 94 | private void ActionButtonsRedorderDown_Click(object sender, RoutedEventArgs e) 95 | { 96 | if (MainWindowActionButtonsList.SelectedIndex == -1) 97 | { 98 | MessageBox.Show("Please select item to reorder"); 99 | return; 100 | } 101 | 102 | var selectedIndex = MainWindowActionButtonsList.SelectedIndex; 103 | 104 | if (selectedIndex + 1 < ActionButtons.Count) 105 | { 106 | var itemToMoveDown = ActionButtons[selectedIndex]; 107 | ActionButtons.RemoveAt(selectedIndex); 108 | ActionButtons.Insert(selectedIndex + 1, itemToMoveDown); 109 | MainWindowActionButtonsList.SelectedIndex = selectedIndex + 1; 110 | 111 | List myList = new List(ActionButtons); 112 | TabItems[currentTabIndex].TabActionButtons = myList; 113 | } 114 | 115 | changesOccured = true; 116 | 117 | SaveConfig(); 118 | } 119 | 120 | private void ActionButtonsReorderUp_Click(object sender, RoutedEventArgs e) 121 | { 122 | if (MainWindowActionButtonsList.SelectedIndex == -1) 123 | { 124 | MessageBox.Show("Please select item to reorder"); 125 | return; 126 | } 127 | 128 | var selectedIndex = MainWindowActionButtonsList.SelectedIndex; 129 | 130 | if (selectedIndex > 0) 131 | { 132 | var itemToMoveUp = ActionButtons[selectedIndex]; 133 | ActionButtons.RemoveAt(selectedIndex); 134 | ActionButtons.Insert(selectedIndex - 1, itemToMoveUp); 135 | MainWindowActionButtonsList.SelectedIndex = selectedIndex - 1; 136 | List myList = new List(ActionButtons); 137 | TabItems[currentTabIndex].TabActionButtons = myList; 138 | } 139 | 140 | changesOccured = true; 141 | 142 | SaveConfig(); 143 | } 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /EasyJob/Windows/ReorderTabsDialog.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 41 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /EasyJob/Windows/ReorderTabsDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using EasyJob.Serialization; 2 | using EasyJob.TabItems; 3 | using EasyJob.Utils; 4 | using Newtonsoft.Json; 5 | using System; 6 | using System.Collections.ObjectModel; 7 | using System.IO; 8 | using System.Text; 9 | using System.Windows; 10 | 11 | namespace EasyJob.Windows 12 | { 13 | /// 14 | /// Interaction logic for ReorderTabsDialog.xaml 15 | /// 16 | public partial class ReorderTabsDialog : Window 17 | { 18 | public Config config; 19 | ObservableCollection TabItems = null; 20 | public bool changesOccured = false; 21 | 22 | public ReorderTabsDialog(Config _config) 23 | { 24 | InitializeComponent(); 25 | config = _config; 26 | LoadConfig(); 27 | } 28 | 29 | public void LoadConfig() 30 | { 31 | try 32 | { 33 | MainWindowTabsList.ItemsSource = null; 34 | TabItems = ConfigUtils.ConvertTabsFromConfigToUI(config); 35 | MainWindowTabsList.ItemsSource = TabItems; 36 | } 37 | catch (Exception ex) 38 | { 39 | MessageBox.Show(ex.Message); 40 | } 41 | } 42 | 43 | public bool SaveConfig() 44 | { 45 | if (File.Exists(ConfigUtils.ConfigJsonPath)) 46 | { 47 | try 48 | { 49 | config.tabs.Clear(); 50 | config.tabs = ConfigUtils.ConvertTabsFromUIToConfig(TabItems); 51 | 52 | if (ConfigUtils.SaveFromConfigToFile(config) == true) 53 | { 54 | return true; 55 | } 56 | else 57 | { 58 | return false; 59 | } 60 | } 61 | catch 62 | { 63 | return false; 64 | } 65 | } 66 | else 67 | { 68 | SaveConfig(); 69 | } 70 | 71 | return false; 72 | } 73 | 74 | private void TabsRedorderDown_Click(object sender, RoutedEventArgs e) 75 | { 76 | if(MainWindowTabsList.SelectedIndex == -1) 77 | { 78 | MessageBox.Show("Please select item to reorder"); 79 | return; 80 | } 81 | 82 | var selectedIndex = MainWindowTabsList.SelectedIndex; 83 | 84 | if (selectedIndex + 1 < TabItems.Count) 85 | { 86 | var itemToMoveDown = TabItems[selectedIndex]; 87 | TabItems.RemoveAt(selectedIndex); 88 | TabItems.Insert(selectedIndex + 1, itemToMoveDown); 89 | MainWindowTabsList.SelectedIndex = selectedIndex + 1; 90 | } 91 | 92 | changesOccured = true; 93 | 94 | SaveConfig(); 95 | } 96 | 97 | private void TabsReorderUp_Click(object sender, RoutedEventArgs e) 98 | { 99 | if (MainWindowTabsList.SelectedIndex == -1) 100 | { 101 | MessageBox.Show("Please select item to reorder"); 102 | return; 103 | } 104 | 105 | changesOccured = true; 106 | 107 | var selectedIndex = MainWindowTabsList.SelectedIndex; 108 | 109 | if (selectedIndex > 0) 110 | { 111 | var itemToMoveUp = TabItems[selectedIndex]; 112 | TabItems.RemoveAt(selectedIndex); 113 | TabItems.Insert(selectedIndex - 1, itemToMoveUp); 114 | MainWindowTabsList.SelectedIndex = selectedIndex - 1; 115 | } 116 | 117 | SaveConfig(); 118 | } 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /EasyJob/Windows/TroubleshootingWindow.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /EasyJob/Windows/TroubleshootingWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using EasyJob.Serialization; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Diagnostics; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Net; 8 | using System.Runtime.InteropServices; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows; 12 | using System.Windows.Controls; 13 | using System.Windows.Data; 14 | using System.Windows.Documents; 15 | using System.Windows.Input; 16 | using System.Windows.Media; 17 | using System.Windows.Media.Imaging; 18 | using System.Windows.Shapes; 19 | using System.Windows.Threading; 20 | 21 | namespace EasyJob.Windows 22 | { 23 | /// 24 | /// Interaction logic for TroubleshootingWindow.xaml 25 | /// 26 | public partial class TroubleshootingWindow : Window 27 | { 28 | Config config = null; 29 | 30 | public TroubleshootingWindow(Config _config) 31 | { 32 | InitializeComponent(); 33 | config = _config; 34 | FillKnownData(); 35 | } 36 | 37 | private void FillKnownData() 38 | { 39 | OSDescription.Text = RuntimeInformation.OSDescription; 40 | FrameworkDescription.Text = RuntimeInformation.FrameworkDescription; 41 | OsD.Text = RuntimeInformation.OSArchitecture.ToString(); 42 | 43 | PowerShellPath.Text = config.default_powershell_path; 44 | 45 | if(config.powershell_arguments == "") 46 | { 47 | PowerShellArguments.Text = "empty"; 48 | PowerShellArguments.Foreground = new SolidColorBrush(Color.FromRgb(128, 128, 128)); 49 | } 50 | else 51 | { 52 | PowerShellArguments.Text = config.powershell_arguments; 53 | } 54 | 55 | if(File.Exists(config.default_powershell_path)) 56 | { 57 | try 58 | { 59 | var versionInfo = FileVersionInfo.GetVersionInfo(config.default_powershell_path); 60 | PowerShellVersion.Text = versionInfo.FileVersion; 61 | } 62 | catch 63 | { 64 | PowerShellVersion.Text = "unable to get version"; 65 | PowerShellVersion.Foreground = new SolidColorBrush(Color.FromRgb(128, 128, 128)); 66 | } 67 | } 68 | 69 | if(Directory.Exists(System.IO.Path.GetPathRoot(Environment.SystemDirectory) + @"Program Files\WindowsPowerShell\Modules")) 70 | { 71 | try 72 | { 73 | string[] dirs = Directory.GetDirectories(System.IO.Path.GetPathRoot(Environment.SystemDirectory) + @"Program Files\WindowsPowerShell\Modules", "*", SearchOption.TopDirectoryOnly); 74 | foreach (string dir in dirs) 75 | { 76 | PowerShellModules.Text = PowerShellModules.Text + dir + Environment.NewLine; 77 | } 78 | } 79 | catch { } 80 | } 81 | if (Directory.Exists(System.IO.Path.GetPathRoot(Environment.SystemDirectory) + @"Windows\System32\WindowsPowerShell\v1.0\Modules")) 82 | { 83 | try 84 | { 85 | string[] dirs = Directory.GetDirectories(System.IO.Path.GetPathRoot(Environment.SystemDirectory) + @"Windows\System32\WindowsPowerShell\v1.0\Modules", "*", SearchOption.TopDirectoryOnly); 86 | foreach (string dir in dirs) 87 | { 88 | PowerShellModules.Text = PowerShellModules.Text + dir + Environment.NewLine; 89 | } 90 | } 91 | catch { } 92 | } 93 | if (Directory.Exists(System.IO.Path.GetPathRoot(Environment.SystemDirectory) + @"Program Files (x86)\WindowsPowerShell\Modules")) 94 | { 95 | try 96 | { 97 | string[] dirs = Directory.GetDirectories(System.IO.Path.GetPathRoot(Environment.SystemDirectory) + @"Program Files (x86)\WindowsPowerShell\Modules", "*", SearchOption.TopDirectoryOnly); 98 | foreach (string dir in dirs) 99 | { 100 | PowerShellModules.Text = PowerShellModules.Text + dir + Environment.NewLine; 101 | } 102 | } 103 | catch { } 104 | } 105 | 106 | } 107 | 108 | private void TroubleshootingWindow_Loaded(object sender, RoutedEventArgs e) 109 | { 110 | /* 111 | try 112 | { 113 | Task.Factory.StartNew(() => 114 | { 115 | string URL = "https://google.com"; 116 | HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); 117 | request.ContentType = "text/html"; 118 | HttpWebResponse response = request.GetResponse() as HttpWebResponse; 119 | using (Stream responseStream = response.GetResponseStream()) 120 | { 121 | StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 122 | MessageBox.Show(reader.ReadToEnd()); 123 | } 124 | 125 | }).ContinueWith((task) => 126 | { 127 | // do this on the UI thread once the task has finished.. 128 | }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); 129 | } 130 | catch (Exception ex) { MessageBox.Show(ex.Message); } 131 | */ 132 | } 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /EasyJob/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "default_powershell_path": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", 3 | "default_cmd_path": "C:\\Windows\\System32\\cmd.exe", 4 | "powershell_arguments": "", 5 | "console_background": "Black", 6 | "console_foreground": "White", 7 | "console_ignore_color_tags": false, 8 | "clear_events_when_reload": true, 9 | "restrictions": { 10 | "block_tabs_remove": false, 11 | "block_buttons_remove": false, 12 | "block_tabs_add": false, 13 | "block_buttons_add": false, 14 | "block_buttons_reorder": false, 15 | "block_buttons_edit": false, 16 | "block_tabs_rename": false, 17 | "block_buttons_paste": false, 18 | "block_buttons_copy": false, 19 | "hide_menu_item_file_reload_config": false, 20 | "hide_menu_item_file_open_app_folder": false, 21 | "hide_menu_item_file_clear_events_list": false, 22 | "hide_menu_item_settings": false, 23 | "hide_menu_item_settings_workflow": false, 24 | "hide_menu_item_settings_workflow_reorder_tabs": false, 25 | "hide_menu_item_settings_workflow_add_tab": false, 26 | "hide_menu_item_settings_workflow_remove_current_tab": false, 27 | "hide_menu_item_settings_workflow_rename_current_tab": false, 28 | "hide_menu_item_settings_workflow_add_button_to_current_tab": false, 29 | "hide_menu_item_settings_workflow_reorder_buttons_in_current_tab": false, 30 | "hide_menu_item_settings_configuration": false, 31 | "hide_menu_item_help": false, 32 | "hide_menu_item_help_troubleshooting": false, 33 | "hide_menu_item_help_colortags": false, 34 | "hide_menu_item_help_about": false 35 | }, 36 | "tabs": [ 37 | { 38 | "ID": "357f9827-f4f7-439f-b62c-792e880fd06c", 39 | "Header": "Common actions", 40 | "Buttons": [ 41 | { 42 | "Id": "5e371407-140f-4fa2-abf3-2cec4bb174b2", 43 | "Text": "test01", 44 | "Description": "Some test script", 45 | "Script": "scripts\\common\\test01.ps1", 46 | "ScriptPathType": "relative", 47 | "ScriptType": "powershell", 48 | "Arguments": [] 49 | }, 50 | { 51 | "Id": "9159b485-39e5-42d6-adb4-275753db9027", 52 | "Text": "test02", 53 | "Description": "Some second test script", 54 | "Script": "scripts\\test02.ps1", 55 | "ScriptPathType": "relative", 56 | "ScriptType": "powershell", 57 | "Arguments": [] 58 | }, 59 | { 60 | "Id": "eaaff0bf-2a9f-4037-bdd6-e8405830d90e", 61 | "Text": "bat", 62 | "Description": "Some second test script", 63 | "Script": "scripts\\1.bat", 64 | "ScriptPathType": "relative", 65 | "ScriptType": "cmd", 66 | "Arguments": [] 67 | }, 68 | { 69 | "Id": "5ec086d9-7987-43ef-84fb-1d8481b05aea", 70 | "Text": "Absolute script", 71 | "Description": "", 72 | "Script": "C:\\scripts\\absolute_script.ps1", 73 | "ScriptPathType": "absolute", 74 | "ScriptType": "powershell", 75 | "Arguments": [] 76 | }, 77 | { 78 | "Id": "a7b94662-4d66-4a8a-af33-b326a99215cf", 79 | "Text": "test03", 80 | "Description": "Some test 03 script with arguments", 81 | "Script": "scripts\\common\\test03.ps1", 82 | "ScriptPathType": "relative", 83 | "ScriptType": "powershell", 84 | "Arguments": [ 85 | { 86 | "ArgumentQuestion": "Enter IP address or DNS name", 87 | "ArgumentAnswer": "" 88 | } 89 | ] 90 | }, 91 | { 92 | "Id": "aabc2bf5-e26c-4a73-8e89-e702f14eaa8b", 93 | "Text": "test04", 94 | "Description": "Some test 04 script with arguments", 95 | "Script": "scripts\\common\\test04.ps1", 96 | "ScriptPathType": "relative", 97 | "ScriptType": "powershell", 98 | "Arguments": [ 99 | { 100 | "ArgumentQuestion": "What is your name?", 101 | "ArgumentAnswer": "" 102 | }, 103 | { 104 | "ArgumentQuestion": "What is your surname", 105 | "ArgumentAnswer": "" 106 | }, 107 | { 108 | "ArgumentQuestion": "No, really what is your name?", 109 | "ArgumentAnswer": "" 110 | } 111 | ] 112 | } 113 | ] 114 | }, 115 | { 116 | "ID": "fa774e10-7772-4074-8d8e-c57b09e9377e", 117 | "Header": "Second Tab", 118 | "Buttons": [ 119 | { 120 | "Id": "b3ebb860-7682-4613-8f82-0ca59226b0f9", 121 | "Text": "Some button", 122 | "Description": "no description", 123 | "Script": "scripts\\some_button_script.ps1", 124 | "ScriptPathType": "relative", 125 | "ScriptType": "powershell", 126 | "Arguments": [] 127 | }, 128 | { 129 | "Id": "f9fc3c8f-fb36-432d-96c9-09c4169d540e", 130 | "Text": "Test11", 131 | "Description": "no description", 132 | "Script": "scripts\\some_button_script2.ps1", 133 | "ScriptPathType": "relative", 134 | "ScriptType": "powershell", 135 | "Arguments": [] 136 | } 137 | ] 138 | }, 139 | { 140 | "ID": "a744a5e3-4dc0-4f42-abac-ee67dd17c6a1", 141 | "Header": "Third Tab", 142 | "Buttons": [ 143 | { 144 | "Id": "5839ed21-7c33-4aac-9b3c-663cc794e3f5", 145 | "Text": "Some button 1", 146 | "Description": "no description", 147 | "Script": "scripts\\some_button_script.ps1", 148 | "ScriptPathType": "relative", 149 | "ScriptType": "powershell", 150 | "Arguments": [] 151 | }, 152 | { 153 | "Id": "7ecdea7a-8865-45d7-a037-0dd4dd1cb996", 154 | "Text": "Button asd", 155 | "Description": "", 156 | "Script": "D:\\net50\\test04.ps1", 157 | "ScriptPathType": "absolute", 158 | "ScriptType": "powershell", 159 | "Arguments": [] 160 | } 161 | ] 162 | } 163 | ] 164 | } -------------------------------------------------------------------------------- /EasyJobPSTools/EasyJobPSTools.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C} 8 | Library 9 | EasyJobPSTools 10 | EasyJobPSTools 11 | v4.8 12 | 512 13 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 14 | 4 15 | true 16 | 17 | 18 | 19 | 20 | 21 | AnyCPU 22 | true 23 | full 24 | false 25 | ..\bin\Debug\EasyJobPSTools\ 26 | DEBUG;TRACE 27 | prompt 28 | 4 29 | false 30 | 31 | 32 | AnyCPU 33 | pdbonly 34 | true 35 | ..\bin\Release\EasyJobPSTools\ 36 | TRACE 37 | prompt 38 | 4 39 | false 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 4.0 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | Code 64 | 65 | 66 | True 67 | True 68 | Resources.resx 69 | 70 | 71 | True 72 | Settings.settings 73 | True 74 | 75 | 76 | 77 | ShowEJInputBox.xaml 78 | 79 | 80 | ResXFileCodeGenerator 81 | Resources.Designer.cs 82 | 83 | 84 | 85 | Always 86 | 87 | 88 | SettingsSingleFileGenerator 89 | Settings.Designer.cs 90 | 91 | 92 | 93 | 94 | Designer 95 | MSBuild:Compile 96 | 97 | 98 | 99 | 100 | 0.9.4 101 | 102 | 103 | 4.7.0 104 | 105 | 106 | 4.5.0 107 | 108 | 109 | 110 | 111 | Always 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /EasyJobPSTools/EasyJobPSTools.psd1: -------------------------------------------------------------------------------- 1 | # Module manifest for module 'EasyJobPSTools' 2 | # Generated by: Akshin Mustafayev 3 | # Generated on: 10/8/2021 4 | 5 | @{ 6 | 7 | # Script module or binary module file associated with this manifest. 8 | RootModule = 'EasyJobPSTools.psm1' 9 | 10 | # Version number of this module. 11 | ModuleVersion = '1.0' 12 | 13 | # ID used to uniquely identify this module 14 | GUID = 'd6c56376-ae08-4c23-b901-9bc75144e0c6' 15 | 16 | # Author of this module 17 | Author = 'Akshin Mustafayev' 18 | 19 | # Company or vendor of this module 20 | CompanyName = 'Akshin Mustafayev' 21 | 22 | # Copyright statement for this module 23 | Copyright = '(c) 2021 Akshin Mustafayev. GNU Affero General Public License v3.0.' 24 | 25 | # Description of the functionality provided by this module 26 | Description = 'Module for implementing EasyJob additional helper functions' 27 | 28 | # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. 29 | FunctionsToExport = 'Show-EJInputBox', 'Show-EJSelectFileWindow', 'Show-EJSelectFolderWindow' 30 | 31 | } -------------------------------------------------------------------------------- /EasyJobPSTools/EasyJobPSTools.psm1: -------------------------------------------------------------------------------- 1 | Add-Type -Path "$PSScriptRoot\ModernWpf.dll" 2 | Add-Type -Path "$PSScriptRoot\EasyJobPSTools.dll" 3 | 4 | function Show-EJInputBox { 5 | <# 6 | .SYNOPSIS 7 | Shows Input-Box for you script. 8 | 9 | .DESCRIPTION 10 | Shows Input-Box for you script. This might be necessary 11 | when you want to get some input while executing your script, 12 | since EasyJob does not support Read from console. 13 | 14 | .PARAMETER Header 15 | Specifies Title for input box. 16 | 17 | .PARAMETER Text 18 | Specifies Text for the input box. 19 | 20 | .PARAMETER AllowEmptyResult 21 | Specifies if user can not enter any text and press OK. 22 | 23 | .INPUTS 24 | None. 25 | 26 | .OUTPUTS 27 | String value of the input from the box. 28 | 29 | .EXAMPLE 30 | C:\PS> $Result = Show-EJInputBox -Header "Specify your name" -Text "What is your name?" -AllowEmptyResult $false 31 | C:\PS> Write-Host "Your name is $Result" 32 | Your name is test 33 | 34 | .LINK 35 | https://github.com/akshinmustafayev/EasyJobPSTools 36 | https://github.com/akshinmustafayev/EasyJob 37 | #> 38 | 39 | param ( 40 | [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()] [string]$Header, 41 | [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()] [string]$Text, 42 | [Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()] $AllowEmptyResult 43 | ) 44 | 45 | $Result = [EasyJobPSTools.Program]::ShowEJInputBoxWindow($Header, $Text, $AllowEmptyResult) 46 | return $Result 47 | } 48 | 49 | function Show-EJSelectFileWindow { 50 | <# 51 | .SYNOPSIS 52 | Shows select file Window and returns selected file path. 53 | 54 | .DESCRIPTION 55 | Shows select file Window. This might be necessary 56 | when you want to get selected file path and use it 57 | in your script. 58 | 59 | .PARAMETER FileType 60 | Specifies File type which you would like for user to select. 61 | This parameter may be empty. If it is empty then any file type is espected 62 | 63 | .INPUTS 64 | None. 65 | 66 | .OUTPUTS 67 | String path value of the selected file. 68 | 69 | .EXAMPLE 70 | C:\PS> $Result = Show-EJSelectFileWindow 71 | D:\temp\excel_list.xlsx 72 | 73 | .EXAMPLE 74 | C:\PS> $Result = Show-EJSelectFileWindow -FileType "txt files (*.txt)|*.txt|All files (*.*)|*.*" 75 | D:\temp\testfile.txt 76 | 77 | .LINK 78 | https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.filedialog.filter?view=windowsdesktop-5.0#System_Windows_Forms_FileDialog_Filter 79 | https://github.com/akshinmustafayev/EasyJobPSTools 80 | https://github.com/akshinmustafayev/EasyJob 81 | #> 82 | 83 | param ( 84 | [Parameter(Mandatory = $false)] [string]$FileType 85 | ) 86 | 87 | if($null -eq $FileType){ 88 | $Result = [EasyJobPSTools.Program]::ShowEJSelectFileWindow() 89 | return $Result 90 | } 91 | else{ 92 | $Result = [EasyJobPSTools.Program]::ShowEJSelectFileWindow($FileType) 93 | return $Result 94 | } 95 | } 96 | 97 | function Show-EJSelectFolderWindow { 98 | <# 99 | .SYNOPSIS 100 | Shows select folder Window and returns selected folder path. 101 | 102 | .DESCRIPTION 103 | Shows select folder Window. This might be necessary 104 | when you want to get selected folder path and use it 105 | in your script. 106 | 107 | .INPUTS 108 | None. 109 | 110 | .OUTPUTS 111 | String path value of the selected folder. 112 | 113 | .EXAMPLE 114 | C:\PS> $Result = Show-EJSelectFolderWindow 115 | D:\temp\ 116 | 117 | .LINK 118 | https://github.com/akshinmustafayev/EasyJobPSTools 119 | https://github.com/akshinmustafayev/EasyJob 120 | #> 121 | 122 | $Result = [EasyJobPSTools.Program]::ShowEJSelectFolderWindow() 123 | return $Result 124 | } 125 | -------------------------------------------------------------------------------- /EasyJobPSTools/EasyJobPSTools.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.31624.102 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyJobPSTools", "EasyJobPSTools.csproj", "{D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {D4CD0099-4071-4516-8ADC-95ADCD8A7A4C}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {0D0B0E81-ED08-435B-82D0-A80FABEA9637} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /EasyJobPSTools/Program.cs: -------------------------------------------------------------------------------- 1 | using EasyJobPSTools.Windows; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | 9 | namespace EasyJobPSTools 10 | { 11 | public class Program 12 | { 13 | public static string ShowEJInputBoxWindow(string Header, string Text, bool AllowEmptyResult) 14 | { 15 | ShowEJInputBox sejib = new ShowEJInputBox(Header, Text, AllowEmptyResult); 16 | if (sejib.ShowDialog() == true) 17 | { 18 | return sejib.windowResult; 19 | } 20 | else 21 | { 22 | return ""; 23 | } 24 | } 25 | 26 | public static string ShowEJSelectFileWindow() 27 | { 28 | OpenFileDialog ofd = new OpenFileDialog(); 29 | if (ofd.ShowDialog() == DialogResult.OK) 30 | { 31 | return ofd.FileName; 32 | } 33 | else 34 | { 35 | return ""; 36 | } 37 | } 38 | 39 | public static string ShowEJSelectFileWindow(string fileType) 40 | { 41 | OpenFileDialog ofd = new OpenFileDialog(); 42 | ofd.Filter = fileType; 43 | if (ofd.ShowDialog() == DialogResult.OK) 44 | { 45 | return ofd.FileName; 46 | } 47 | else 48 | { 49 | return ""; 50 | } 51 | } 52 | 53 | public static string ShowEJSelectFolderWindow() 54 | { 55 | using (var fbd = new FolderBrowserDialog()) 56 | { 57 | DialogResult result = fbd.ShowDialog(); 58 | 59 | if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath)) 60 | { 61 | return fbd.SelectedPath; 62 | } 63 | else 64 | { 65 | return ""; 66 | } 67 | } 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /EasyJobPSTools/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | // General Information about an assembly is controlled through the following 8 | // set of attributes. Change these attribute values to modify the information 9 | // associated with an assembly. 10 | [assembly: AssemblyTitle("EasyJobPSTools")] 11 | [assembly: AssemblyDescription("PowerShell tools for the EasyJob")] 12 | [assembly: AssemblyConfiguration("")] 13 | [assembly: AssemblyCompany("Akshin Mustafayev")] 14 | [assembly: AssemblyProduct("EasyJobPSTools")] 15 | [assembly: AssemblyCopyright("Copyright © 2021")] 16 | [assembly: AssemblyTrademark("Akshin Mustafayev")] 17 | [assembly: AssemblyCulture("")] 18 | 19 | // Setting ComVisible to false makes the types in this assembly not visible 20 | // to COM components. If you need to access a type in this assembly from 21 | // COM, set the ComVisible attribute to true on that type. 22 | [assembly: ComVisible(true)] 23 | 24 | //In order to begin building localizable applications, set 25 | //CultureYouAreCodingWith in your .csproj file 26 | //inside a . For example, if you are using US english 27 | //in your source files, set the to en-US. Then uncomment 28 | //the NeutralResourceLanguage attribute below. Update the "en-US" in 29 | //the line below to match the UICulture setting in the project file. 30 | 31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 32 | 33 | 34 | [assembly: ThemeInfo( 35 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 36 | //(used if a resource is not found in the page, 37 | // or application resource dictionaries) 38 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 39 | //(used if a resource is not found in the page, 40 | // app, or any theme specific resource dictionaries) 41 | )] 42 | 43 | 44 | // Version information for an assembly consists of the following four values: 45 | // 46 | // Major Version 47 | // Minor Version 48 | // Build Number 49 | // Revision 50 | // 51 | // You can specify all the values or you can default the Build and Revision Numbers 52 | // by using the '*' as shown below: 53 | // [assembly: AssemblyVersion("1.0.*")] 54 | [assembly: AssemblyVersion("1.0.1.0")] 55 | [assembly: AssemblyFileVersion("1.0.1.0")] 56 | -------------------------------------------------------------------------------- /EasyJobPSTools/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace EasyJobPSTools.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EasyJobPSTools.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /EasyJobPSTools/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /EasyJobPSTools/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace EasyJobPSTools.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /EasyJobPSTools/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /EasyJobPSTools/Utils/CommonUtils.cs: -------------------------------------------------------------------------------- 1 | using ModernWpf; 2 | using ModernWpf.Controls; 3 | using System.Windows; 4 | 5 | namespace EasyJobPSTools.Utils 6 | { 7 | public class CommonUtils 8 | { 9 | public static void FixModernWpfUI() 10 | { 11 | if (Application.Current is null) 12 | { 13 | var app = new Application { ShutdownMode = ShutdownMode.OnExplicitShutdown }; 14 | 15 | var themeResources = new ThemeResources(); 16 | themeResources.BeginInit(); 17 | app.Resources.MergedDictionaries.Add(themeResources); 18 | themeResources.EndInit(); 19 | 20 | app.Resources.MergedDictionaries.Add(new XamlControlsResources()); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /EasyJobPSTools/Windows/ShowEJInputBox.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |