From 96a118065d7b5e1ae8707d1dce568c48efccc2e1 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sun, 8 Aug 2021 21:05:43 +1000 Subject: [PATCH] Add support to config max instances in tray (#244) --- docs/diff-tool.md | 4 +- docs/mdsource/diff-tool.source.md | 4 +- docs/mdsource/tray.source.md | 5 + docs/tray.md | 5 + src/DiffEngine/DiffRunner.cs | 3 +- src/DiffEngine/Guard.cs | 2 +- src/DiffEngine/MaxInstance.cs | 31 ++++++- src/DiffEngine/ResolvedTool.cs | 2 +- ...getPositionHelper.cs => TargetPosition.cs} | 9 +- .../OptionsFormTests.Default.verified.png | Bin 19582 -> 22753 bytes .../OptionsFormTests.WithKeys.verified.png | Bin 18944 -> 22122 bytes ...SettingsHelperTests.ReadWrite.verified.txt | 5 +- src/DiffEngineTray/DiffEngineTray.csproj | 4 +- .../Settings/OptionsForm.Designer.cs | 86 +++++++++++++++--- src/DiffEngineTray/Settings/OptionsForm.cs | 4 +- src/DiffEngineTray/Settings/Settings.cs | 1 + src/DiffEngineTray/Settings/SettingsHelper.cs | 6 +- src/Directory.Build.props | 2 +- 18 files changed, 138 insertions(+), 35 deletions(-) rename src/DiffEngine/{TargetPositionHelper.cs => TargetPosition.cs} (88%) diff --git a/docs/diff-tool.md b/docs/diff-tool.md index 62717df3..3a9f3eac 100644 --- a/docs/diff-tool.md +++ b/docs/diff-tool.md @@ -53,6 +53,8 @@ This value can be changed: Setting the `DiffEngine_MaxInstances` environment variable to the number of instances to launch. +This value can also be set using [the DiffEngineTray options dialog](/docs/tray.md#max-instances-to-launch). + ### Using code @@ -71,7 +73,7 @@ By default, when a diff is opened, the temp file is on the left and the target f This value can be changed by setting the `DiffEngine_TargetOnLeft` environment variable to `true`. -This value can also be set using [the DiffEngineTray options dialog](https://github.com/VerifyTests/DiffEngine/blob/main/docs/tray.md#open-on-left). +This value can also be set using [the DiffEngineTray options dialog](/docs/tray.md#open-on-left). ## Successful verification behavior diff --git a/docs/mdsource/diff-tool.source.md b/docs/mdsource/diff-tool.source.md index ee1261f1..29838fa5 100644 --- a/docs/mdsource/diff-tool.source.md +++ b/docs/mdsource/diff-tool.source.md @@ -46,6 +46,8 @@ This value can be changed: Setting the `DiffEngine_MaxInstances` environment variable to the number of instances to launch. +This value can also be set using [the DiffEngineTray options dialog](/docs/tray.md#max-instances-to-launch). + ### Using code @@ -58,7 +60,7 @@ By default, when a diff is opened, the temp file is on the left and the target f This value can be changed by setting the `DiffEngine_TargetOnLeft` environment variable to `true`. -This value can also be set using [the DiffEngineTray options dialog](https://github.com/VerifyTests/DiffEngine/blob/main/docs/tray.md#open-on-left). +This value can also be set using [the DiffEngineTray options dialog](/docs/tray.md#open-on-left). ## Successful verification behavior diff --git a/docs/mdsource/tray.source.md b/docs/mdsource/tray.source.md index 8c6c613a..1ea270f5 100644 --- a/docs/mdsource/tray.source.md +++ b/docs/mdsource/tray.source.md @@ -69,6 +69,11 @@ Runs DiffEngineTray at system startup. By default, when a diff is opened, the temp file will be on the left and the target file will be on the right. To invert this, select "Open on left". +#### Max instances to launch + +Control the [max instances to launch setting](docs/diff-tool.md#maxinstancestolaunch). + + #### Accept all HotKey Registers a system wide HotKey to accept pending: diff --git a/docs/tray.md b/docs/tray.md index 5fdcd53b..5f63743f 100644 --- a/docs/tray.md +++ b/docs/tray.md @@ -76,6 +76,11 @@ Runs DiffEngineTray at system startup. By default, when a diff is opened, the temp file will be on the left and the target file will be on the right. To invert this, select "Open on left". +#### Max instances to launch + +Control the [max instances to launch setting](docs/diff-tool.md#maxinstancestolaunch). + + #### Accept all HotKey Registers a system wide HotKey to accept pending: diff --git a/src/DiffEngine/DiffRunner.cs b/src/DiffEngine/DiffRunner.cs index ed4a7f7a..0d2fb36e 100644 --- a/src/DiffEngine/DiffRunner.cs +++ b/src/DiffEngine/DiffRunner.cs @@ -16,8 +16,7 @@ public static partial class DiffRunner public static void MaxInstancesToLaunch(int value) { - Guard.AgainstNegativeAndZero(value, nameof(value)); - MaxInstance.Set(value); + MaxInstance.SetForAppDomain(value); } public static LaunchResult Launch(DiffTool tool, string tempFile, string targetFile) diff --git a/src/DiffEngine/Guard.cs b/src/DiffEngine/Guard.cs index 75845d4c..0784b3dd 100644 --- a/src/DiffEngine/Guard.cs +++ b/src/DiffEngine/Guard.cs @@ -29,7 +29,7 @@ public static void AgainstEmpty(string value, string argumentName) } } - public static void AgainstEmpty(object[] value, string argumentName) + public static void AgainstEmpty(object?[] value, string argumentName) { if (value == null) { diff --git a/src/DiffEngine/MaxInstance.cs b/src/DiffEngine/MaxInstance.cs index cb2ca954..bc9cdfd4 100644 --- a/src/DiffEngine/MaxInstance.cs +++ b/src/DiffEngine/MaxInstance.cs @@ -3,15 +3,16 @@ static class MaxInstance { - static int maxInstancesToLaunch = GetMaxInstances(); + public static int MaxInstancesToLaunch { get; private set; } = GetMaxInstances(); static int launchedInstances; + const int defaultMax = 5; static int GetMaxInstances() { var variable = Environment.GetEnvironmentVariable("DiffEngine_MaxInstances"); if (string.IsNullOrEmpty(variable)) { - return 5; + return defaultMax; } if (ushort.TryParse(variable, out var result)) @@ -22,15 +23,35 @@ static int GetMaxInstances() throw new($"Could not parse the DiffEngine_MaxInstances environment variable: {variable}"); } - public static void Set(int value) + public static void SetForAppDomain(int value) { Guard.AgainstNegativeAndZero(value, nameof(value)); - maxInstancesToLaunch = value; + MaxInstancesToLaunch = value; + } + + public static void SetForUser(int value) + { + if (MaxInstancesToLaunch == value) + { + return; + } + MaxInstancesToLaunch = value; + string? envVariable; + if (value == defaultMax) + { + envVariable = null; + } + else + { + envVariable = value.ToString(); + } + + Environment.SetEnvironmentVariable("DiffEngine_MaxInstances", envVariable, EnvironmentVariableTarget.User); } public static bool Reached() { var instanceCount = Interlocked.Increment(ref launchedInstances); - return instanceCount > maxInstancesToLaunch; + return instanceCount > MaxInstancesToLaunch; } } \ No newline at end of file diff --git a/src/DiffEngine/ResolvedTool.cs b/src/DiffEngine/ResolvedTool.cs index f49b8616..ce9bc4e9 100644 --- a/src/DiffEngine/ResolvedTool.cs +++ b/src/DiffEngine/ResolvedTool.cs @@ -30,7 +30,7 @@ public string BuildCommand(string tempFile, string targetFile) string GetArguments(string tempFile, string targetFile) { - if (TargetPositionHelper.TargetOnLeft) + if (TargetPosition.TargetOnLeft) { return TargetLeftArguments(tempFile, targetFile); } diff --git a/src/DiffEngine/TargetPositionHelper.cs b/src/DiffEngine/TargetPosition.cs similarity index 88% rename from src/DiffEngine/TargetPositionHelper.cs rename to src/DiffEngine/TargetPosition.cs index 6ca02f7d..e7241dc1 100644 --- a/src/DiffEngine/TargetPositionHelper.cs +++ b/src/DiffEngine/TargetPosition.cs @@ -1,10 +1,10 @@ using System; -static class TargetPositionHelper +static class TargetPosition { public static bool TargetOnLeft { get; private set; } - static TargetPositionHelper() + static TargetPosition() { TargetOnLeft = ReadTargetOnLeft().GetValueOrDefault(false); } @@ -33,6 +33,11 @@ static TargetPositionHelper() public static void SetTargetOnLeft(bool value) { + if (TargetOnLeft == value) + { + return; + } + TargetOnLeft = value; string? envVariable; if (value) diff --git a/src/DiffEngineTray.Tests/OptionsFormTests.Default.verified.png b/src/DiffEngineTray.Tests/OptionsFormTests.Default.verified.png index 39331afbef9bd3e788d0aaf6b4ef36ae59f1637d..9051f6fe13a6a815b74639b571bb1410f94d1d48 100644 GIT binary patch literal 22753 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 JDb#nk{Wr*!D1`t3 literal 19582 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 J!{F!Y|^`ZSK^^c9?4@m#x8%cJ~a0S=^ zP(}z$TO%0`z_AEZi&s~{kh5*ze>{`2lg-7ZE+Kwn6!o|hGwHWhR)J&vTjjiS6d|-V z1xbH})2#Zqc$M=o9U4e%7P@m%>?>TIrj5IY*Ey7Wtu!n>vB!gPE31X#t{s`lTaC*3p z8@)%msMg=Y$sf`UKWcQvp3>aC_giyk9 zw@Kd%fZp#`%|D2e8$)vG4*@V53S+fui3AIs)i#RzAz98|A@p$)Gb=}2gqy<~UFBR;n(eqWzNyEXa23fgf%-O_IV0#pCrlsaap#VY) z2I9M?BUQ#q8jAZa${Xpc$;H1ooq+bwcAkVlB*)U${mWmXEkgem4>dMo_22}5k|#b? zaCRH;vSRO?3yqUfj*5lQ$J%Yw9p`4mhc^BDeG^Xgh!s^5`aRpoamY>%&=%Z{B93tp z8(??-G!8{79WC^Bc?-CijR^qyX~t6(`xutoyccv@UJ0K)?A(6_1X=`|9{v+7!sB}Z zMD_0Zxb1!b%nBfZ(d1xFRh#p`PCnWIVa;FsAKGL714;d7FgAKu#Okvo7OSRyuwh{3 zt;5e(-T>S5u9qG@B58gD4IN6j0HC8^=0*V|wP5~GnNgY;NUsxMYYfUzDF8{*Q_oQFjK(>H#9NNi7YA5Zzml8hlz0MYrcsT8Hl&|U)fU@$J z95C+^AjDNDw!c%klfCx6q5Vs70@Q;w;By{b&eC#vOjpIb45BK zVdY(|Kv{6pB5)2;4R){Zb`Ip-{EE3zC~Kv6i-Ip;E-j*LiFXXgW`uWL+vPxaakZ$e z`SGOj0i{u{N81Y-3+9FB1vX+zw-I@FmdM;=dCv}T_;o#>-v!%K5#(pKOlV@){Jt;v z!fs5ab5QNCP{!w-%;SM!53alF;AL%)ioc|n0u#b7Y(U-YPyL>rNMBW~XQL z&n}#KZfjJs^ZH(&^n&mY{W~=3ElSa)$*6Dpho$qO9#rf4JiT6vB9ja^8-X2ZZaj`AXnJ2s;sS=kU^Ms3YnSWr#sT_3LED;!Iv3cx4AAHM3tVJ zBCdWgW8Bl-f_rO55Qpz4TE@Rjpuh)-7c8k4#6Ym~0-3}&*MF4TKHS=UKRe7rR;h^c zs7l5AJov)>ZkrKI;2;xd1RrWNc6|OM@PoI0<0NyC8bN{~LMBs!>kOHUV*F;%=No#B z4AZ`5Ev$sS#CINhN%&T8|DN$Z4S25#1N$QSip8e9;5hshr)yzVMP(USlayH)BC3j? z3EBSMLfy!~G*3$K%+*YR1BjPdQpw#b#>06O z9}8Z29hNBVH%mF8)RCeMa&;L3`nAR~!z%5yuSW3&NoV~WN^gi7t52!kqwc^3gmkA> zNz0QMc~U)!}3g0*9CR{_sUq^Zc}=20SMId&Lqm>+U{WZFAKYa z{h+5#=VoQdi0}bLPahD7LQGlhc%$d5fFF+7{H^H!o{#lU2)nE_JJJV_6bvD+_MieGCKFRe%{vl5H2^aMt)DTF-h#3MvF#cgtW5qYPV!y-Sw#GqLL(C z;D8t^-O0vGoLK`DYXNhOWZDR07l9ASDaC6bA_J`=!`-b6cZgM>d;>D+kA|G>O$D~l zqnPpx8BNAVGU8|VbTKsDFt!?{_aX7M69+zm6+`y(D-(Loyg^!udIa6IAf|skd9Q088g4At(G&qn&oTBs-`^&I3@|cV3GkEzBh+GP->)eZoCq9SR ze$A7a9Uid>ioOU6=(JUiTI1{5ce-CDPpCx{8MCS~r6jhu?<{eJ)H}^PC}K_}zPRt* zI#3Z?xYJoA)-W)Y7x)YZDN*6BR>{lwlSjJi)zQOh0(sj z>6k{k-w;j>f}7slCb+%SUwDTYM{dOf)GRdRM}bs95o{Y2M-IuOHl8EYt4R zS$%0T;ivJ1Q8(|+-z?qa#$j)LG=3Y%@%k6(N=)OczHx`66u-alCee$B3NMZAAsQ4;~-3KYIBB9NUL-uy!X}%^ia_dQ0fBjf-gW?P`HAM#tp#jfqj9K5_7gu}syoob zo@f?XjrZJC`CV62?Cz;*SymR9^6KPpL?m%SpSksEPwYR{t^T>);Q!#1|MjCcbQ|T$ zfF8t5hV*bKn%XYi&B?c|9!$03`k7HzhMjLAuJcsAJFIz!ey=G&KzHM^kt+BPK=5$H z8F3oH-{?*x-?){}%8v}}2mILuzaA++l#JK8s3< z5$RGLe_mq1_UMPSk9eqFkJxbre3uvUvs7Iz5isg&PEPYV_VYzI6Gv^(23a(K@i?+< z?6}o@`GnmjlTDYG#4-25fmahM&juHTJrGUH=! zOZE3zi`@^mXq7rBaa^LdpEeP2uY$Py<0TmUwwZun zBd?z_a#JNUrLuY`(6@fKJwT*)`0s|1|MCw0b3JG1DsYfL_4E3(af3a!!O^4P3+gIh zcJitKkMLV7K-K%-Hdg~pxIw$nDLVem^2Q+0M$YgO$gdR7tmSOkV5x53=-kF1+xU3m z|HVg>ZA$pZW%VB&E-|D4?dxpc7d#?UN(GpEwiJL@B@Wu@w$U@bD|%2Dj(zd}U2ja_ zDiCez$&B}{H2s{PpO1eKo$XbQDl)1o0N5g%>YS?}2=UuQpu0N~UWhM<{I}l@yp_>x zsE}g927Q;t@|ktW&kl%jwnFd|6%Ba!X}Q~x!Z*do0Z)GVJwOwr$w;SDMp37!2>#M$ z<;S$*SZ25Jf*d15#-c4yxA*U4@&(Wp>?$*Ewous*kE~uNoNGLmY_*^9+b3dmJ7RQW zFaI7YOa_a$C=B~^$L~dU4PmJ$G5_-lrpM|VA4i8d$S=4lJc!D{Oqd!0JNNg9fHP4j zM`aeW>PUL*ns8V}z0~jL(u`v0a+tT<<4E3ve&ywbi%M!XpQLv(HjYr^e{_8tx0A6a_HaWNw)~Os_v-+b=VfU>iQ_vTzE%Q(J^|$5WkAFr z8X%7Ut#bXV=Kq}j(NV=%B?Sv-1|dNZ=koV|4e-17-Qn^7v8}(nnU-rGxm+5NcS8R^ z#9Y6%0*|hl-Eev!@aQpU6)|tik5?QYKY|v#vN_e1w)_C~z$2Iy_gOjB)Bt_BrcoeX zR?!X=9M>E=*7pg>%L6-3*$PL(-8(=FqZ>?f%#MJ{z4LF+^Y`Sw1{Qq4PS2TK_4L(> zb->cib@!!hGjw~5)E}iBp9NNKazwQuZL{Fv2PLgP4%Y0?Ft)pQwB{Y(l}{%@?kO^p zd?e&l^nAyR-ct6;Sxz<9$8Q0B4HOp#4cT!u0@LbQv8-rOfld2f^oQrmZ&+L9v)*3f z$L?z@dOzl<9*Is~HuboD%9};}{udYj%*wO6F8qkWz_Mte-NpwO7YTSVJ5K99(6O!k zK;*WytJGJ;JLLjP>?f~3<|-d~>U?s;eANrb=k?6(xmZ{6NAGrz;UtFjr$t^Bh9=iC zfdc06GAEnb7CHUx%!@eJF1&r^dZs{cPF49M)|+~bv6;0eK3*vbul2N@Cx7~zO;0Dt zzb9OO9cfyw#yEkcd4=;5Spi@vzccQT_8AKE?A-k8XW#TxJaQZ~cq9efGE)g-b9}ri z_~B+R32h1l> ziNxBM70Vp^uP%AKlB`oOBxFEC15u#PJ!GFDMzygPlplYta0VV`_2gOdyZ`L^x1(4- Uo(|Ino*BmA>FVdQ&MBb@0P`Q6y8r+H diff --git a/src/DiffEngineTray.Tests/OptionsFormTests.WithKeys.verified.png b/src/DiffEngineTray.Tests/OptionsFormTests.WithKeys.verified.png index 971c787a75d394d3586b0d6ed9654c63e1045bb2..f96ddd39de0b917dd53c3a86929802aef9b38cbc 100644 GIT binary patch literal 22122 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 diff --git a/src/DiffEngineTray.Tests/SettingsHelperTests.ReadWrite.verified.txt b/src/DiffEngineTray.Tests/SettingsHelperTests.ReadWrite.verified.txt index 90191a1f..390dfe51 100644 --- a/src/DiffEngineTray.Tests/SettingsHelperTests.ReadWrite.verified.txt +++ b/src/DiffEngineTray.Tests/SettingsHelperTests.ReadWrite.verified.txt @@ -1,5 +1,6 @@ -{ +{ AcceptAllHotKey: { Key: T - } + }, + MaxInstancesToLaunch: 5 } \ No newline at end of file diff --git a/src/DiffEngineTray/DiffEngineTray.csproj b/src/DiffEngineTray/DiffEngineTray.csproj index 36382d1b..207a8a01 100644 --- a/src/DiffEngineTray/DiffEngineTray.csproj +++ b/src/DiffEngineTray/DiffEngineTray.csproj @@ -28,7 +28,9 @@ - + + + diff --git a/src/DiffEngineTray/Settings/OptionsForm.Designer.cs b/src/DiffEngineTray/Settings/OptionsForm.Designer.cs index 3417aa5f..e3d83701 100644 --- a/src/DiffEngineTray/Settings/OptionsForm.Designer.cs +++ b/src/DiffEngineTray/Settings/OptionsForm.Designer.cs @@ -26,9 +26,14 @@ void InitializeComponent() this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.updateButton = new System.Windows.Forms.Button(); this.targetOnLeftCheckBox = new System.Windows.Forms.CheckBox(); + this.maxInstancesGroupBox = new System.Windows.Forms.GroupBox(); + this.maxInstancesNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); this.bottomPanel.SuspendLayout(); this.groupBox1.SuspendLayout(); this.flowLayoutPanel1.SuspendLayout(); + this.maxInstancesGroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.maxInstancesNumericUpDown)).BeginInit(); this.SuspendLayout(); // // bottomPanel @@ -38,17 +43,17 @@ void InitializeComponent() this.bottomPanel.Controls.Add(this.save); this.bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom; this.bottomPanel.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.bottomPanel.Location = new System.Drawing.Point(5, 451); + this.bottomPanel.Location = new System.Drawing.Point(5, 508); this.bottomPanel.Margin = new System.Windows.Forms.Padding(2); this.bottomPanel.Name = "bottomPanel"; - this.bottomPanel.Size = new System.Drawing.Size(471, 29); + this.bottomPanel.Size = new System.Drawing.Size(507, 29); this.bottomPanel.TabIndex = 1; // // cancel // this.cancel.AutoSize = true; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancel.Location = new System.Drawing.Point(389, 2); + this.cancel.Location = new System.Drawing.Point(425, 2); this.cancel.Margin = new System.Windows.Forms.Padding(2); this.cancel.Name = "cancel"; this.cancel.RightToLeft = System.Windows.Forms.RightToLeft.Yes; @@ -60,7 +65,7 @@ void InitializeComponent() // save // this.save.AutoSize = true; - this.save.Location = new System.Drawing.Point(305, 2); + this.save.Location = new System.Drawing.Point(341, 2); this.save.Margin = new System.Windows.Forms.Padding(2); this.save.Name = "save"; this.save.Size = new System.Drawing.Size(80, 25); @@ -76,11 +81,11 @@ void InitializeComponent() this.acceptAllHotKey.Help = "Accept pending deletes and pending moves"; this.acceptAllHotKey.HotKey = null; this.acceptAllHotKey.Label = "Accept all HotKey"; - this.acceptAllHotKey.Location = new System.Drawing.Point(5, 58); + this.acceptAllHotKey.Location = new System.Drawing.Point(5, 140); this.acceptAllHotKey.Margin = new System.Windows.Forms.Padding(2); this.acceptAllHotKey.Name = "acceptAllHotKey"; this.acceptAllHotKey.Padding = new System.Windows.Forms.Padding(3); - this.acceptAllHotKey.Size = new System.Drawing.Size(471, 114); + this.acceptAllHotKey.Size = new System.Drawing.Size(507, 114); this.acceptAllHotKey.TabIndex = 2; this.acceptAllHotKey.TabStop = false; // @@ -92,7 +97,7 @@ void InitializeComponent() this.startupCheckBox.Margin = new System.Windows.Forms.Padding(2); this.startupCheckBox.Name = "startupCheckBox"; this.startupCheckBox.Padding = new System.Windows.Forms.Padding(5, 4, 5, 4); - this.startupCheckBox.Size = new System.Drawing.Size(471, 27); + this.startupCheckBox.Size = new System.Drawing.Size(507, 27); this.startupCheckBox.TabIndex = 3; this.startupCheckBox.Text = "Run at startup"; this.startupCheckBox.UseVisualStyleBackColor = true; @@ -104,10 +109,10 @@ void InitializeComponent() this.groupBox1.Controls.Add(this.trayDocsLink); this.groupBox1.Controls.Add(this.diffEngineLink); this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top; - this.groupBox1.Location = new System.Drawing.Point(5, 316); + this.groupBox1.Location = new System.Drawing.Point(5, 398); this.groupBox1.Name = "groupBox1"; this.groupBox1.Padding = new System.Windows.Forms.Padding(6, 5, 6, 5); - this.groupBox1.Size = new System.Drawing.Size(471, 89); + this.groupBox1.Size = new System.Drawing.Size(507, 89); this.groupBox1.TabIndex = 5; this.groupBox1.TabStop = false; this.groupBox1.Text = "More information:"; @@ -158,11 +163,11 @@ void InitializeComponent() " Rider, or Visual Studio Code."; this.acceptOpenHotKey.HotKey = null; this.acceptOpenHotKey.Label = "Accept all open HotKey"; - this.acceptOpenHotKey.Location = new System.Drawing.Point(5, 172); + this.acceptOpenHotKey.Location = new System.Drawing.Point(5, 254); this.acceptOpenHotKey.Margin = new System.Windows.Forms.Padding(2); this.acceptOpenHotKey.Name = "acceptOpenHotKey"; this.acceptOpenHotKey.Padding = new System.Windows.Forms.Padding(3); - this.acceptOpenHotKey.Size = new System.Drawing.Size(471, 144); + this.acceptOpenHotKey.Size = new System.Drawing.Size(507, 144); this.acceptOpenHotKey.TabIndex = 6; this.acceptOpenHotKey.TabStop = false; // @@ -171,11 +176,11 @@ void InitializeComponent() this.flowLayoutPanel1.AutoSize = true; this.flowLayoutPanel1.Controls.Add(this.updateButton); this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; - this.flowLayoutPanel1.Location = new System.Drawing.Point(5, 405); + this.flowLayoutPanel1.Location = new System.Drawing.Point(5, 487); this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.flowLayoutPanel1.Size = new System.Drawing.Size(471, 33); + this.flowLayoutPanel1.Size = new System.Drawing.Size(507, 33); this.flowLayoutPanel1.TabIndex = 7; // // updateButton @@ -198,10 +203,54 @@ void InitializeComponent() this.targetOnLeftCheckBox.Margin = new System.Windows.Forms.Padding(2); this.targetOnLeftCheckBox.Name = "targetOnLeftCheckBox"; this.targetOnLeftCheckBox.Padding = new System.Windows.Forms.Padding(5, 4, 5, 4); - this.targetOnLeftCheckBox.Size = new System.Drawing.Size(471, 27); + this.targetOnLeftCheckBox.Size = new System.Drawing.Size(507, 27); this.targetOnLeftCheckBox.TabIndex = 8; this.targetOnLeftCheckBox.Text = "Open target on left. The default is temp on left and target on right"; this.targetOnLeftCheckBox.UseVisualStyleBackColor = true; + // + // maxInstancesGroupBox + // + this.maxInstancesGroupBox.Controls.Add(this.maxInstancesNumericUpDown); + this.maxInstancesGroupBox.Controls.Add(this.label1); + this.maxInstancesGroupBox.Dock = System.Windows.Forms.DockStyle.Top; + this.maxInstancesGroupBox.Location = new System.Drawing.Point(5, 58); + this.maxInstancesGroupBox.Name = "maxInstancesGroupBox"; + this.maxInstancesGroupBox.Padding = new System.Windows.Forms.Padding(5); + this.maxInstancesGroupBox.Size = new System.Drawing.Size(507, 82); + this.maxInstancesGroupBox.TabIndex = 9; + this.maxInstancesGroupBox.TabStop = false; + this.maxInstancesGroupBox.Text = "Max instances to launch"; + // + // maxInstancesNumericUpDown + // + this.maxInstancesNumericUpDown.Dock = System.Windows.Forms.DockStyle.Left; + this.maxInstancesNumericUpDown.Location = new System.Drawing.Point(5, 44); + this.maxInstancesNumericUpDown.Margin = new System.Windows.Forms.Padding(5); + this.maxInstancesNumericUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.maxInstancesNumericUpDown.Name = "maxInstancesNumericUpDown"; + this.maxInstancesNumericUpDown.Size = new System.Drawing.Size(62, 23); + this.maxInstancesNumericUpDown.TabIndex = 0; + this.maxInstancesNumericUpDown.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Dock = System.Windows.Forms.DockStyle.Top; + this.label1.Location = new System.Drawing.Point(5, 21); + this.label1.Name = "label1"; + this.label1.Padding = new System.Windows.Forms.Padding(3, 3, 3, 5); + this.label1.Size = new System.Drawing.Size(473, 23); + this.label1.TabIndex = 1; + this.label1.Text = "To minimize the impact on system resources, the maximum diffs to launch is restri" + + "cted."; // // OptionsForm // @@ -210,12 +259,13 @@ void InitializeComponent() this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoSize = true; this.CancelButton = this.cancel; - this.ClientSize = new System.Drawing.Size(481, 484); + this.ClientSize = new System.Drawing.Size(517, 541); this.Controls.Add(this.flowLayoutPanel1); this.Controls.Add(this.groupBox1); this.Controls.Add(this.bottomPanel); this.Controls.Add(this.acceptOpenHotKey); this.Controls.Add(this.acceptAllHotKey); + this.Controls.Add(this.maxInstancesGroupBox); this.Controls.Add(this.targetOnLeftCheckBox); this.Controls.Add(this.startupCheckBox); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; @@ -233,6 +283,9 @@ void InitializeComponent() this.groupBox1.PerformLayout(); this.flowLayoutPanel1.ResumeLayout(false); this.flowLayoutPanel1.PerformLayout(); + this.maxInstancesGroupBox.ResumeLayout(false); + this.maxInstancesGroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.maxInstancesNumericUpDown)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -250,4 +303,7 @@ void InitializeComponent() private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; private System.Windows.Forms.Button updateButton; private System.Windows.Forms.CheckBox targetOnLeftCheckBox; + private System.Windows.Forms.GroupBox maxInstancesGroupBox; + private System.Windows.Forms.NumericUpDown maxInstancesNumericUpDown; + private System.Windows.Forms.Label label1; } \ No newline at end of file diff --git a/src/DiffEngineTray/Settings/OptionsForm.cs b/src/DiffEngineTray/Settings/OptionsForm.cs index 7fa8da72..ed066196 100644 --- a/src/DiffEngineTray/Settings/OptionsForm.cs +++ b/src/DiffEngineTray/Settings/OptionsForm.cs @@ -25,6 +25,7 @@ public OptionsForm(Settings settings, Func> acceptOpenHotKey.HotKey = settings.AcceptOpenHotKey; startupCheckBox.Checked = settings.RunAtStartup; targetOnLeftCheckBox.Checked = settings.TargetOnLeft; + maxInstancesNumericUpDown.Value = settings.MaxInstancesToLaunch; } async void save_Click(object sender, EventArgs e) @@ -34,7 +35,8 @@ async void save_Click(object sender, EventArgs e) TargetOnLeft = targetOnLeftCheckBox.Checked, RunAtStartup = startupCheckBox.Checked, AcceptAllHotKey = acceptAllHotKey.HotKey, - AcceptOpenHotKey = acceptOpenHotKey.HotKey + AcceptOpenHotKey = acceptOpenHotKey.HotKey, + MaxInstancesToLaunch = (int)maxInstancesNumericUpDown.Value }; var errors = (await trySave(newSettings)).ToList(); diff --git a/src/DiffEngineTray/Settings/Settings.cs b/src/DiffEngineTray/Settings/Settings.cs index 16db46fc..f9ff1e11 100644 --- a/src/DiffEngineTray/Settings/Settings.cs +++ b/src/DiffEngineTray/Settings/Settings.cs @@ -4,4 +4,5 @@ public class Settings public HotKey? AcceptOpenHotKey { get; set; } public bool RunAtStartup { get; set; } public bool TargetOnLeft { get; set; } + public int MaxInstancesToLaunch { get; set; } = MaxInstance.MaxInstancesToLaunch; } \ No newline at end of file diff --git a/src/DiffEngineTray/Settings/SettingsHelper.cs b/src/DiffEngineTray/Settings/SettingsHelper.cs index e7d506c5..d28fa46c 100644 --- a/src/DiffEngineTray/Settings/SettingsHelper.cs +++ b/src/DiffEngineTray/Settings/SettingsHelper.cs @@ -29,13 +29,15 @@ public static async Task Read() settings = new(); } - settings.TargetOnLeft = TargetPositionHelper.TargetOnLeft; + settings.TargetOnLeft = TargetPosition.TargetOnLeft; + settings.MaxInstancesToLaunch = MaxInstance.MaxInstancesToLaunch; return settings; } public static async Task Write(Settings settings) { - TargetPositionHelper.SetTargetOnLeft(settings.TargetOnLeft); + TargetPosition.SetTargetOnLeft(settings.TargetOnLeft); + MaxInstance.SetForUser(settings.MaxInstancesToLaunch); File.Delete(FilePath); await using var stream = File.OpenWrite(FilePath); await JsonSerializer.SerializeAsync(stream, settings); diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 66a112ef..65dad285 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CS1591;CS0649 - 7.0.0 + 7.1.0 1.0.0 Testing, Snapshot, Diff, Compare Launches diff tools based on file extensions. Designed to be consumed by snapshot testing libraries.