From d1f6b3af13b42e9fa60b903ab78830c94c98c669 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Mon, 6 Jun 2022 22:05:18 +0200 Subject: [PATCH 01/11] Added icons --- .../UI WinForms/Resources/Icons.Designer.cs | 50 ++++ .../UI WinForms/Resources/Icons.resx | 229 ++++++++++-------- .../Resources/icons8-browse-folder-512.png | Bin 0 -> 2693 bytes .../Resources/icons8-document-512.png | Bin 0 -> 2295 bytes .../Resources/icons8-language-512.png | Bin 0 -> 5467 bytes .../Resources/icons8-new-window-512.png | Bin 0 -> 2859 bytes .../icons8-open-file-under-cursor-512.png | Bin 0 -> 2673 bytes 7 files changed, 182 insertions(+), 97 deletions(-) create mode 100644 I18N Commander/UI WinForms/Resources/icons8-browse-folder-512.png create mode 100644 I18N Commander/UI WinForms/Resources/icons8-document-512.png create mode 100644 I18N Commander/UI WinForms/Resources/icons8-language-512.png create mode 100644 I18N Commander/UI WinForms/Resources/icons8-new-window-512.png create mode 100644 I18N Commander/UI WinForms/Resources/icons8-open-file-under-cursor-512.png diff --git a/I18N Commander/UI WinForms/Resources/Icons.Designer.cs b/I18N Commander/UI WinForms/Resources/Icons.Designer.cs index 7086b75..32a2e64 100644 --- a/I18N Commander/UI WinForms/Resources/Icons.Designer.cs +++ b/I18N Commander/UI WinForms/Resources/Icons.Designer.cs @@ -59,5 +59,55 @@ namespace UI_WinForms.Resources { resourceCulture = value; } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_browse_folder_512 { + get { + object obj = ResourceManager.GetObject("icons8_browse_folder_512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_document_512 { + get { + object obj = ResourceManager.GetObject("icons8_document_512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_language_512 { + get { + object obj = ResourceManager.GetObject("icons8_language_512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_new_window_512 { + get { + object obj = ResourceManager.GetObject("icons8_new_window_512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_open_file_under_cursor_512 { + get { + object obj = ResourceManager.GetObject("icons8_open_file_under_cursor_512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/I18N Commander/UI WinForms/Resources/Icons.resx b/I18N Commander/UI WinForms/Resources/Icons.resx index 85c9090..17944cf 100644 --- a/I18N Commander/UI WinForms/Resources/Icons.resx +++ b/I18N Commander/UI WinForms/Resources/Icons.resx @@ -1,101 +1,136 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + icons8-browse-folder-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + icons8-document-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + icons8-language-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + icons8-new-window-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + icons8-open-file-under-cursor-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/I18N Commander/UI WinForms/Resources/icons8-browse-folder-512.png b/I18N Commander/UI WinForms/Resources/icons8-browse-folder-512.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e35130b6def2bc3842e026ebea8e16cef4a8b8 GIT binary patch literal 2693 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 literal 0 HcmV?d00001 diff --git a/I18N Commander/UI WinForms/Resources/icons8-new-window-512.png b/I18N Commander/UI WinForms/Resources/icons8-new-window-512.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5c493c884b6fbf4cc1e4aedbc89a323ca89854 GIT binary patch literal 2859 zcmah~3p|ti8{f|8BA36D+$z1j_#FLXo4I8+qfHH2vXx26+TQVE7u(B5H*}+-bW?6g zx}8!HB}o^FiXtDWjzW|u*{POp^nXW3r&FE(=d*X)@Av&a-{<)~&+~iU6o1xSJsoo$ z3CV;>&1&O4BTt9z+E|Eci6W$3=1l@H2icBCR2QcP*F-BKZFdRXo zWCB5~6h-;Yg{Jn4_fet!Q>7m2<(h8*#VMHBHQso%u(mjgK`P6`nMAh{$)#)rIOAu(b( zoC!@{$lfAe7&H$Ohaurq(9!81Kp-sm=e|ZLDn?U@g<=?WP5NrW{fbdR7ZSn#D-`rY zNRw)^KdgkJxC~eXiRGy3XcS+;pr3$rNt8s!M%x;qf+N00>p&jH{3HStau^QdE96b5 z`^zLkI10t&0dr>q-d=QPdsk;?I}(0G1}z#HwS|Ro3?72ANJO+ZiO%SULn4wL9m%9w zGl?WJkvOb8%tr5mfQRt@A79ha00p)1^CL51IU&(B8q5*a~rq%GYBkjXQUrxlukn zr>I`V^xvDicVWd=PVMo-Q}_KIbd4dH<CZz>cOF@3nxVTuKjhNDo?oQ zjOvK$U9qUFVn*u`>t^i^euq9=$EY$^&CT7ngw^%F3UV;lPdv=xdVhL+k8pRpa4|O| zjh1sGf~GDb98C*51TGI2IPndI>i`|Tt|91QfGZyRtRMsLy1=UPquc83)+x;bms(yi zGs((%YQE5V#ggOr_$9(k*?)Y#xT^F`<)f8vdx4#_S+{&=DqY&;52GIqOznP+@#*id zWhXCtuy!c0v1LN$8k2~?j;@Nl>ND+#Ugk^PX3oWf0YMf^H+EYd*_*h*_el25ffwDm zRl&(8Y6F*EdaGZOvZn8o$sAT#OUCO8d-QcNUdjxTV=xmYY91^mGusq>z3lL2cyhSw z`?!9Q0xu(~Iz$nlX(g;(zGsVYqG`UH$>S>riD2D>oFRS1&_r#QA)Ke_+5FAe>Fo@! z{0T+Yo>S+>mp47^w=n5%t|{EwB9b0lwcq4@!D0FZno)Emw#pF7iA*p6O=dWIayjqq*OpZgt<;58mb&;bPf` z9GCt@rB`y7noW$Fgj|fh<$e~>evJX14~(;JXaft?C6^ubj@@>*oi%tTXTgEfUdav( z+L-bpE!N^1B%z^GT*%B=A9~@=eeH(S@d58Av2*9zJ!cYk-%1Q1s`!(U5@Q z&iwRdrMB54ndds|Je+O9whrkNgd1s$rLovkK*q0k9F^+O1jRDl)6DVCm^%lJ!sf3d&dJCOv$VQ=d`DMACavd2_*GADLEe+01ibJ4-WeNH z)AfU_p5A(8ubaKpy{hG+d-W+2*E#9*%`hNBF}?Sr|2@w3%)5t|^_27myl^)vufNvb zeem+wWkcJP-E0e7w=Uc)?eu=IG^5>W7vDm zr_o?-Kn*2HsN>V#=HX&AXn=c_ef6rjet+HU@!|Duzjbg|=6$Fvj2Wcw#mq8Tb~Ui6 zpIPDc3Y$=L_@Y{Od*^EvSxQI3Fc#Rdvg=PZlOp)NL2X;b@x${sV>z0ch4J=cF;2`5 GP5K|y)PFbt literal 0 HcmV?d00001 diff --git a/I18N Commander/UI WinForms/Resources/icons8-open-file-under-cursor-512.png b/I18N Commander/UI WinForms/Resources/icons8-open-file-under-cursor-512.png new file mode 100644 index 0000000000000000000000000000000000000000..c908d3d2ca5c510ff7da8f99eed3f1158942cfe1 GIT binary patch literal 2673 zcmai04Lp-;8=r_H6&seh$+pv+ZMB-GhLiwttd_*Ma zc%`CGZ&D;Bqa*c}O5#XEIXTa!!|7D-`}^(LcHjU1^}nwBx~}`$_L1G4=Bq7LgTY|) zU7YPbp--gznWGB5bm zFqp|90E2b)0D?&;0KVoV42eesLzvD{e9$Y(-J2H0qFK@b8*4Qy5grm?gF-4o#17>M z@FD`B(8WXF<=bcgp`Zv^1b{*!BZyo+h%iT)qcDKA8p4WCXW%{U9lsbuD*_NA6!P$B zbYx^CD$)$a`=b&lZ6@u5VZ

&!!l3_72Sv;u(B;TCbY2Ko$Q6WedD92@%EdJN zjUkl2@0*CIyzh}or2kE4v%flqKcBxET}53`PLf;n3I_$nU$5 zJk@wIQv`-m?3rwkBY;$=qnH8xegG1=p7Q zd@h3-3Sk0Ir;P{~2ciYm(!v6XLruv*MZ-h3OorH=Duh@#4Ah$#3+UyI!{E)acykLA z3=WUMD3ld!=q}KyLhAqH%R3rj1zC_tcxR?S$mNR_TT^ZB1%^$nrk0^hMSmj@iYnu& zG2g$lR~VI-9g+66-eCIEH}1{11}7(teIE&_|fVo+1nowkS! z0U@;?pAG#bGPL~0{S}%O`kUab6okKBQOIs;54!r$3_(v15oj?zhCmK9d-%|h$vlC- z34tB+BNbi}`XJGn~|uBq*yi98v;IrmUk?HZ$Wv*tW*tl(a6vtH%cB3I9|%l6RM zl#7d>+$(ITdLVPX-0b7{N^Q+W{9x{|SNJXhnI^4^HS-Oxk8|=`UtmIhfUr7I;_okV z6mbm7b1s>5SKLUX_6mBfNov|x)_owS_qZKcJl;sZJNO~K(BZLO*;BHLNf^@D6y2EV zM$hmhyxjCQy}iIAwC0Sv@RHl}TenRQi*&)1uuiAf!AF%WH?NGX)U0o~cwoLW ze(!g}$c&>Z&eUpLJ*T460V1nsAL(lS{gmp39d=bsRrV)`VpZ=dh14b8$_#389nG`e z9p`oBjjC*c#CKv@S$!%gSSHZQqe8zHb9v5w0vK%GBKe~P%gNJ)!QfICdpmDR(m-~L z$4{Vcqs`z%07X)sR8X#6o)zM`(d}^QW{rnO9q;c+oBi`E5>58(YTOMXA^WlY&$k|* zaw*@3y-%bSlwfz3XkpG>u&pC!ZHw@GoS)rzy|cu z2m`O*9ZJ<|w?URS7&lx>G_}S=^;YJTEv78G80UWsj+*t(BK~2U+E824^*3oRE{ozE#g>qFKKDUMx&eAuj`@^O1H;Z^>jLe`Lv>%{Q5FP(euQU0#&(fUt<-D$N^ z*B$kxqgHD3{M52lw)H>yZ$;vuSlT*yP)1I^=Kk;X`{#$Ru33a?N~t!QBuQJ{0lSv> zEzgb+2I#qL=~OuxDA@jwp|%StjSHtXe>5*l*B?)n97skn2)?;?5ltx7hdaPJJf(QTSX_9cNiY zo7o2w>(p9<1+=vmj(iqzYXz~7_QbSr$%V}whQQdkY3kNFt!97d)0CULdy=wC2$L*g zZkB`7=*cij$4aHbaq*a?m4uSevhQ_RQxhVl@~F+n!MqUiz{CAYS z$c)5+x`y2T@jU@i2Ry?pt*ewpohpHM15WR7exX0d5e?+49@)J}8LH zx{sNv-7gJqN6Q+|C2J)-D{6nJ<8ZjL4H>-G>0Y7g>{%&F>^c-wM}t@iYg^ypc>XH* zq9Z09+8ZV6>Yc;ghC>!Z3oEtf`D?l+0fDvJ`Z=~neKj1oh5C&J@gDKHtmExZZNml_ zXO1oZG>of_()bnl4?n@zJsFNCr-l|}!*6y=M@Ij(cuc29cWJ3~t+X|nx?_VzmRI8n z4Y9#E4gIIDD#e|TiIhEPYS_6mXe530(f;)ZI$KkEFS`8}t=@x~f9>WA zW62vwdWVKm^7Ej<4e`{y>>_n|W@u1R?c!^$HSlFyE^lzuvttw_jC_{OeM*$97_0CP z$Vi|xb{DM%bDATBF Date: Mon, 6 Jun 2022 22:06:41 +0200 Subject: [PATCH 02/11] WIP: Added the loader start component --- .../Components/LoaderStart.Designer.cs | 168 ++++++++++++++++++ .../UI WinForms/Components/LoaderStart.cs | 85 +++++++++ .../UI WinForms/Components/LoaderStart.resx | 63 +++++++ I18N Commander/UI WinForms/UI WinForms.csproj | 4 - 4 files changed, 316 insertions(+), 4 deletions(-) create mode 100644 I18N Commander/UI WinForms/Components/LoaderStart.Designer.cs create mode 100644 I18N Commander/UI WinForms/Components/LoaderStart.cs create mode 100644 I18N Commander/UI WinForms/Components/LoaderStart.resx diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.Designer.cs b/I18N Commander/UI WinForms/Components/LoaderStart.Designer.cs new file mode 100644 index 0000000..5d19dc7 --- /dev/null +++ b/I18N Commander/UI WinForms/Components/LoaderStart.Designer.cs @@ -0,0 +1,168 @@ +namespace UI_WinForms.Components +{ + partial class LoaderStart + { + ///

+ /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.tableLayout = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBox = new System.Windows.Forms.PictureBox(); + this.labelTitle = new System.Windows.Forms.Label(); + this.flowLayoutButtons = new System.Windows.Forms.FlowLayoutPanel(); + this.buttonNew = new System.Windows.Forms.Button(); + this.buttonOpen = new System.Windows.Forms.Button(); + this.contextMenuRecentProjects = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.tableLayout.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); + this.flowLayoutButtons.SuspendLayout(); + this.contextMenuRecentProjects.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayout + // + this.tableLayout.ColumnCount = 4; + this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 128F)); + this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 360F)); + this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayout.Controls.Add(this.pictureBox, 1, 1); + this.tableLayout.Controls.Add(this.labelTitle, 2, 1); + this.tableLayout.Controls.Add(this.flowLayoutButtons, 1, 2); + this.tableLayout.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayout.Location = new System.Drawing.Point(0, 0); + this.tableLayout.Name = "tableLayout"; + this.tableLayout.RowCount = 4; + this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 128F)); + this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 66F)); + this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayout.Size = new System.Drawing.Size(937, 465); + this.tableLayout.TabIndex = 0; + // + // pictureBox + // + this.pictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox.Image = global::UI_WinForms.Resources.Icons.icons8_language_512; + this.pictureBox.Location = new System.Drawing.Point(227, 138); + this.pictureBox.Name = "pictureBox"; + this.pictureBox.Size = new System.Drawing.Size(122, 122); + this.pictureBox.TabIndex = 0; + this.pictureBox.TabStop = false; + // + // labelTitle + // + this.labelTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelTitle.Font = new System.Drawing.Font("Segoe UI", 28F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.labelTitle.Location = new System.Drawing.Point(355, 135); + this.labelTitle.Name = "labelTitle"; + this.labelTitle.Size = new System.Drawing.Size(354, 128); + this.labelTitle.TabIndex = 1; + this.labelTitle.Text = "I18N Commander"; + this.labelTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // flowLayoutButtons + // + this.tableLayout.SetColumnSpan(this.flowLayoutButtons, 2); + this.flowLayoutButtons.Controls.Add(this.buttonNew); + this.flowLayoutButtons.Controls.Add(this.buttonOpen); + this.flowLayoutButtons.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutButtons.Location = new System.Drawing.Point(224, 263); + this.flowLayoutButtons.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutButtons.Name = "flowLayoutButtons"; + this.flowLayoutButtons.Size = new System.Drawing.Size(488, 66); + this.flowLayoutButtons.TabIndex = 2; + // + // buttonNew + // + this.buttonNew.Image = global::UI_WinForms.Resources.Icons.icons8_new_window_512; + this.buttonNew.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonNew.Location = new System.Drawing.Point(3, 3); + this.buttonNew.Name = "buttonNew"; + this.buttonNew.Size = new System.Drawing.Size(200, 60); + this.buttonNew.TabIndex = 0; + this.buttonNew.Text = "New Project"; + this.buttonNew.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonNew.UseVisualStyleBackColor = true; + // + // buttonOpen + // + this.buttonOpen.Image = global::UI_WinForms.Resources.Icons.icons8_open_file_under_cursor_512; + this.buttonOpen.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonOpen.Location = new System.Drawing.Point(209, 3); + this.buttonOpen.Name = "buttonOpen"; + this.buttonOpen.Size = new System.Drawing.Size(259, 60); + this.buttonOpen.TabIndex = 1; + this.buttonOpen.Text = "Open Recent Project"; + this.buttonOpen.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonOpen.UseVisualStyleBackColor = true; + this.buttonOpen.Click += new System.EventHandler(this.buttonOpen_Click); + // + // contextMenuRecentProjects + // + this.contextMenuRecentProjects.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.contextMenuRecentProjects.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuRecentProjects.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem1}); + this.contextMenuRecentProjects.Name = "contextMenuRecentProjects"; + this.contextMenuRecentProjects.Size = new System.Drawing.Size(181, 48); + this.contextMenuRecentProjects.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.contextMenuRecentProjects_Closing); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(180, 22); + // + // LoaderStart + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.Controls.Add(this.tableLayout); + this.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.Name = "LoaderStart"; + this.Size = new System.Drawing.Size(937, 465); + this.tableLayout.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); + this.flowLayoutButtons.ResumeLayout(false); + this.contextMenuRecentProjects.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private TableLayoutPanel tableLayout; + private PictureBox pictureBox; + private Label labelTitle; + private FlowLayoutPanel flowLayoutButtons; + private Button buttonNew; + private Button buttonOpen; + private ContextMenuStrip contextMenuRecentProjects; + private ToolStripMenuItem toolStripMenuItem1; + } +} diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.cs b/I18N Commander/UI WinForms/Components/LoaderStart.cs new file mode 100644 index 0000000..f6d34dc --- /dev/null +++ b/I18N Commander/UI WinForms/Components/LoaderStart.cs @@ -0,0 +1,85 @@ +using Microsoft.Win32; + +namespace UI_WinForms.Components; + +public partial class LoaderStart : UserControl +{ + private bool areRecentProjectsVisible = false; + + public LoaderStart() + { + this.InitializeComponent(); + } + + private RegistryKey I18NCommanderKey => Registry.CurrentUser.OpenSubKey("Software", RegistryKeyPermissionCheck.ReadWriteSubTree)!.CreateSubKey("I18N Commander", RegistryKeyPermissionCheck.ReadWriteSubTree); + + private List RecentProjects + { + get + { + using var regKey = this.I18NCommanderKey; + var recentProjectsValue = regKey.GetValue("recentProjects"); + return recentProjectsValue switch + { + string[] list => new List(list), + _ => new List(), + }; + } + + set + { + using var regKey = this.I18NCommanderKey; + regKey.SetValue("recentProjects", value, RegistryValueKind.MultiString); + } + } + + private void buttonOpen_Click(object sender, EventArgs e) + { + if(this.areRecentProjectsVisible) + { + this.areRecentProjectsVisible = false; + this.contextMenuRecentProjects.Close(); + return; + } + + var recentProjects = this.RecentProjects; + this.contextMenuRecentProjects.Items.Clear(); + this.contextMenuRecentProjects.Items.Add("Browse for project...", Resources.Icons.icons8_browse_folder_512, (innerSender, args) => this.browseForProject()); + foreach (var recentProject in recentProjects) + { + var fileInfo = new FileInfo(recentProject); + var item = this.contextMenuRecentProjects.Items.Add($"{fileInfo.Directory.GetDirectories().Last()}/{fileInfo.Name}", Resources.Icons.icons8_document_512, (innerSender, args) => this.openRecentProject(innerSender)); + item.Tag = recentProject; + } + + var button = (sender as Button)!; + this.contextMenuRecentProjects.Show(button, 0, button.Height); + this.areRecentProjectsVisible = true; + } + + private void browseForProject() + { + // TODO: Browse for project + // TODO: Open the project + // TODO: Handle cancel event + // TODO: Add the project to the recent projects + // TODO: Prune the recent project list + } + + private void openRecentProject(object? sender) + { + if(sender is null) + return; + + if (sender is ToolStripItem item) + { + var path = (item.Tag as string)!; + // TODO: Open the project + } + } + + private void contextMenuRecentProjects_Closing(object sender, ToolStripDropDownClosingEventArgs e) + { + this.areRecentProjectsVisible = false; + } +} \ No newline at end of file diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.resx b/I18N Commander/UI WinForms/Components/LoaderStart.resx new file mode 100644 index 0000000..41dc900 --- /dev/null +++ b/I18N Commander/UI WinForms/Components/LoaderStart.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/I18N Commander/UI WinForms/UI WinForms.csproj b/I18N Commander/UI WinForms/UI WinForms.csproj index 38f8d5b..71d18c0 100644 --- a/I18N Commander/UI WinForms/UI WinForms.csproj +++ b/I18N Commander/UI WinForms/UI WinForms.csproj @@ -13,10 +13,6 @@ - - - - True From 1a97e7f640f38e303babb1f8fae8252b6adb436a Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Mon, 6 Jun 2022 22:07:04 +0200 Subject: [PATCH 03/11] Changed language & target platform --- I18N Commander/UI WinForms/UI WinForms.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/I18N Commander/UI WinForms/UI WinForms.csproj b/I18N Commander/UI WinForms/UI WinForms.csproj index 71d18c0..9b0d15f 100644 --- a/I18N Commander/UI WinForms/UI WinForms.csproj +++ b/I18N Commander/UI WinForms/UI WinForms.csproj @@ -2,11 +2,12 @@ WinExe - net6.0-windows + net6.0-windows10.0.22000.0 UI_WinForms enable true enable + default From 085efa3c52f696ae394b64dfc5d1085eab3fbb21 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Mon, 6 Jun 2022 22:07:17 +0200 Subject: [PATCH 04/11] Added loader screen --- I18N Commander/UI WinForms/Loader.Designer.cs | 81 +++++++++++++++++++ I18N Commander/UI WinForms/Loader.cs | 9 +++ I18N Commander/UI WinForms/Loader.resx | 60 ++++++++++++++ I18N Commander/UI WinForms/Program.cs | 6 ++ 4 files changed, 156 insertions(+) create mode 100644 I18N Commander/UI WinForms/Loader.Designer.cs create mode 100644 I18N Commander/UI WinForms/Loader.cs create mode 100644 I18N Commander/UI WinForms/Loader.resx diff --git a/I18N Commander/UI WinForms/Loader.Designer.cs b/I18N Commander/UI WinForms/Loader.Designer.cs new file mode 100644 index 0000000..af291fb --- /dev/null +++ b/I18N Commander/UI WinForms/Loader.Designer.cs @@ -0,0 +1,81 @@ +namespace UI_WinForms +{ + partial class Loader + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tableLayout = new System.Windows.Forms.TableLayoutPanel(); + this.loaderStart = new UI_WinForms.Components.LoaderStart(); + this.tableLayout.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayout + // + this.tableLayout.ColumnCount = 1; + this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayout.Controls.Add(this.loaderStart, 0, 0); + this.tableLayout.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayout.Location = new System.Drawing.Point(0, 0); + this.tableLayout.Name = "tableLayout"; + this.tableLayout.RowCount = 1; + this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayout.Size = new System.Drawing.Size(800, 450); + this.tableLayout.TabIndex = 0; + // + // loaderStart + // + this.loaderStart.Dock = System.Windows.Forms.DockStyle.Fill; + this.loaderStart.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.loaderStart.Location = new System.Drawing.Point(3, 3); + this.loaderStart.Name = "loaderStart"; + this.loaderStart.Size = new System.Drawing.Size(794, 444); + this.loaderStart.TabIndex = 0; + // + // Loader + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.tableLayout); + this.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "Loader"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Loader"; + this.tableLayout.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private TableLayoutPanel tableLayout; + private Components.LoaderStart loaderStart; + } +} \ No newline at end of file diff --git a/I18N Commander/UI WinForms/Loader.cs b/I18N Commander/UI WinForms/Loader.cs new file mode 100644 index 0000000..6980c76 --- /dev/null +++ b/I18N Commander/UI WinForms/Loader.cs @@ -0,0 +1,9 @@ +namespace UI_WinForms; + +public partial class Loader : Form +{ + public Loader() + { + this.InitializeComponent(); + } +} \ No newline at end of file diff --git a/I18N Commander/UI WinForms/Loader.resx b/I18N Commander/UI WinForms/Loader.resx new file mode 100644 index 0000000..b5ae26c --- /dev/null +++ b/I18N Commander/UI WinForms/Loader.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/I18N Commander/UI WinForms/Program.cs b/I18N Commander/UI WinForms/Program.cs index 8a629c4..50c87bb 100644 --- a/I18N Commander/UI WinForms/Program.cs +++ b/I18N Commander/UI WinForms/Program.cs @@ -6,6 +6,12 @@ internal static class Program private static void Main() { ApplicationConfiguration.Initialize(); + + // Start the loader screen: + var loader = new Loader(); + Application.Run(loader); + + // Start the main app: Application.Run(new Main()); } } \ No newline at end of file From bf9dec62486f71f8446a061ac82c0b336b284949 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 7 Jun 2022 20:44:17 +0200 Subject: [PATCH 05/11] Added method to add recent project with pruning --- .../UI WinForms/Components/LoaderStart.cs | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.cs b/I18N Commander/UI WinForms/Components/LoaderStart.cs index f6d34dc..5829a65 100644 --- a/I18N Commander/UI WinForms/Components/LoaderStart.cs +++ b/I18N Commander/UI WinForms/Components/LoaderStart.cs @@ -33,6 +33,18 @@ public partial class LoaderStart : UserControl } } + private static void UpdateRecentProjectsWithPruning(string latestUsedProjectPath) + { + var previousRecentList = LoaderStart.RecentProjects; + previousRecentList.Insert(0, latestUsedProjectPath); + if (previousRecentList.Count > 6) + previousRecentList = previousRecentList.Take(6).ToList(); + + LoaderStart.RecentProjects = previousRecentList; + } + + #endregion + private void buttonOpen_Click(object sender, EventArgs e) { if(this.areRecentProjectsVisible) @@ -60,10 +72,15 @@ public partial class LoaderStart : UserControl private void browseForProject() { // TODO: Browse for project + + // TODO: Apply new project's path + LoaderStart.UpdateRecentProjectsWithPruning(string.Empty); + // TODO: Open the project // TODO: Handle cancel event - // TODO: Add the project to the recent projects - // TODO: Prune the recent project list + + // TODO: Apply chosen project's path + LoaderStart.UpdateRecentProjectsWithPruning(string.Empty); } private void openRecentProject(object? sender) @@ -74,6 +91,8 @@ public partial class LoaderStart : UserControl if (sender is ToolStripItem item) { var path = (item.Tag as string)!; + LoaderStart.UpdateRecentProjectsWithPruning(path); + // TODO: Open the project } } From 915924c291aa89660329d8204d9d4243d10ca7ca Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 7 Jun 2022 20:46:21 +0200 Subject: [PATCH 06/11] Added the add new event --- .../UI WinForms/Components/LoaderStart.Designer.cs | 5 +++-- I18N Commander/UI WinForms/Components/LoaderStart.cs | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.Designer.cs b/I18N Commander/UI WinForms/Components/LoaderStart.Designer.cs index 5d19dc7..2adebcb 100644 --- a/I18N Commander/UI WinForms/Components/LoaderStart.Designer.cs +++ b/I18N Commander/UI WinForms/Components/LoaderStart.Designer.cs @@ -109,6 +109,7 @@ this.buttonNew.Text = "New Project"; this.buttonNew.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; this.buttonNew.UseVisualStyleBackColor = true; + this.buttonNew.Click += new System.EventHandler(this.buttonNew_Click); // // buttonOpen // @@ -130,13 +131,13 @@ this.contextMenuRecentProjects.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripMenuItem1}); this.contextMenuRecentProjects.Name = "contextMenuRecentProjects"; - this.contextMenuRecentProjects.Size = new System.Drawing.Size(181, 48); + this.contextMenuRecentProjects.Size = new System.Drawing.Size(73, 26); this.contextMenuRecentProjects.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.contextMenuRecentProjects_Closing); // // toolStripMenuItem1 // this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem1.Size = new System.Drawing.Size(72, 22); // // LoaderStart // diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.cs b/I18N Commander/UI WinForms/Components/LoaderStart.cs index 5829a65..ae7ba08 100644 --- a/I18N Commander/UI WinForms/Components/LoaderStart.cs +++ b/I18N Commander/UI WinForms/Components/LoaderStart.cs @@ -69,14 +69,15 @@ public partial class LoaderStart : UserControl this.areRecentProjectsVisible = true; } - private void browseForProject() + private void buttonNew_Click(object sender, EventArgs e) { - // TODO: Browse for project + // TODO: Browse for new project's location // TODO: Apply new project's path LoaderStart.UpdateRecentProjectsWithPruning(string.Empty); // TODO: Open the project + } // TODO: Handle cancel event // TODO: Apply chosen project's path From 633b13316ff77190936ebdace8eb7ad6278c4f67 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 7 Jun 2022 20:46:39 +0200 Subject: [PATCH 07/11] Refactoring --- .../UI WinForms/Components/LoaderStart.cs | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.cs b/I18N Commander/UI WinForms/Components/LoaderStart.cs index ae7ba08..026c6e7 100644 --- a/I18N Commander/UI WinForms/Components/LoaderStart.cs +++ b/I18N Commander/UI WinForms/Components/LoaderStart.cs @@ -11,13 +11,18 @@ public partial class LoaderStart : UserControl this.InitializeComponent(); } - private RegistryKey I18NCommanderKey => Registry.CurrentUser.OpenSubKey("Software", RegistryKeyPermissionCheck.ReadWriteSubTree)!.CreateSubKey("I18N Commander", RegistryKeyPermissionCheck.ReadWriteSubTree); + private static RegistryKey I18NCommanderKey => Registry.CurrentUser.OpenSubKey("Software", RegistryKeyPermissionCheck.ReadWriteSubTree)!.CreateSubKey("I18N Commander", RegistryKeyPermissionCheck.ReadWriteSubTree); - private List RecentProjects + #region Recent Projects + + /// + /// Gets or sets the list of recent projects without any extras e.g. it does not prune the list of projects. + /// + private static List RecentProjects { get { - using var regKey = this.I18NCommanderKey; + using var regKey = LoaderStart.I18NCommanderKey; var recentProjectsValue = regKey.GetValue("recentProjects"); return recentProjectsValue switch { @@ -28,7 +33,7 @@ public partial class LoaderStart : UserControl set { - using var regKey = this.I18NCommanderKey; + using var regKey = LoaderStart.I18NCommanderKey; regKey.SetValue("recentProjects", value, RegistryValueKind.MultiString); } } @@ -54,13 +59,13 @@ public partial class LoaderStart : UserControl return; } - var recentProjects = this.RecentProjects; + var recentProjects = LoaderStart.RecentProjects; this.contextMenuRecentProjects.Items.Clear(); - this.contextMenuRecentProjects.Items.Add("Browse for project...", Resources.Icons.icons8_browse_folder_512, (innerSender, args) => this.browseForProject()); + this.contextMenuRecentProjects.Items.Add("Browse for project...", Resources.Icons.icons8_browse_folder_512, (innerSender, args) => this.BrowseForProject()); foreach (var recentProject in recentProjects) { var fileInfo = new FileInfo(recentProject); - var item = this.contextMenuRecentProjects.Items.Add($"{fileInfo.Directory.GetDirectories().Last()}/{fileInfo.Name}", Resources.Icons.icons8_document_512, (innerSender, args) => this.openRecentProject(innerSender)); + var item = this.contextMenuRecentProjects.Items.Add($"{fileInfo.Directory.GetDirectories().Last()}/{fileInfo.Name}", Resources.Icons.icons8_document_512, (innerSender, args) => this.OpenRecentProject(innerSender)); item.Tag = recentProject; } @@ -78,24 +83,27 @@ public partial class LoaderStart : UserControl // TODO: Open the project } + + private void BrowseForProject() + { + // TODO: Browse for project // TODO: Handle cancel event // TODO: Apply chosen project's path LoaderStart.UpdateRecentProjectsWithPruning(string.Empty); + + // TODO: Open the project } - private void openRecentProject(object? sender) + private void OpenRecentProject(object? sender) { - if(sender is null) + if (sender is not ToolStripItem item) return; - if (sender is ToolStripItem item) - { - var path = (item.Tag as string)!; + var path = (item.Tag as string)!; LoaderStart.UpdateRecentProjectsWithPruning(path); - // TODO: Open the project - } + // TODO: Open the project } private void contextMenuRecentProjects_Closing(object sender, ToolStripDropDownClosingEventArgs e) From bcd56d29db5320f91b21694198b380fb184cb163 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sun, 12 Jun 2022 16:16:16 +0200 Subject: [PATCH 08/11] Fixed bug when changing the recent files --- I18N Commander/UI WinForms/Components/LoaderStart.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.cs b/I18N Commander/UI WinForms/Components/LoaderStart.cs index 026c6e7..28e0eb5 100644 --- a/I18N Commander/UI WinForms/Components/LoaderStart.cs +++ b/I18N Commander/UI WinForms/Components/LoaderStart.cs @@ -34,7 +34,7 @@ public partial class LoaderStart : UserControl set { using var regKey = LoaderStart.I18NCommanderKey; - regKey.SetValue("recentProjects", value, RegistryValueKind.MultiString); + regKey.SetValue("recentProjects", value.ToArray(), RegistryValueKind.MultiString); } } From 0876caa0d02551c6e472fc36e3d83a84d0a2e59b Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sun, 12 Jun 2022 16:19:32 +0200 Subject: [PATCH 09/11] Added event for when the user is done --- I18N Commander/UI WinForms/Components/LoaderStart.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.cs b/I18N Commander/UI WinForms/Components/LoaderStart.cs index 28e0eb5..aeebe7a 100644 --- a/I18N Commander/UI WinForms/Components/LoaderStart.cs +++ b/I18N Commander/UI WinForms/Components/LoaderStart.cs @@ -1,7 +1,9 @@ +using System.ComponentModel; using Microsoft.Win32; namespace UI_WinForms.Components; +[DefaultEvent(nameof(LoadProject))] public partial class LoaderStart : UserControl { private bool areRecentProjectsVisible = false; @@ -110,4 +112,7 @@ public partial class LoaderStart : UserControl { this.areRecentProjectsVisible = false; } + + [Category("Settings"), Description("When the user chooses a project to load.")] + public event EventHandler? LoadProject; } \ No newline at end of file From 89b2744896ed1a219ee6b689cd6677305b20c37d Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sun, 12 Jun 2022 16:20:04 +0200 Subject: [PATCH 10/11] Implemented file selection --- .../UI WinForms/Components/LoaderStart.cs | 58 ++++++++++++++----- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/I18N Commander/UI WinForms/Components/LoaderStart.cs b/I18N Commander/UI WinForms/Components/LoaderStart.cs index aeebe7a..ad55a5f 100644 --- a/I18N Commander/UI WinForms/Components/LoaderStart.cs +++ b/I18N Commander/UI WinForms/Components/LoaderStart.cs @@ -1,5 +1,5 @@ using System.ComponentModel; -using Microsoft.Win32; +using Microsoft.Win32; namespace UI_WinForms.Components; @@ -78,23 +78,50 @@ public partial class LoaderStart : UserControl private void buttonNew_Click(object sender, EventArgs e) { - // TODO: Browse for new project's location + var saveDialog = new SaveFileDialog + { + AddExtension = true, + CheckPathExists = true, + CheckFileExists = false, + CreatePrompt = false, + OverwritePrompt = true, + DereferenceLinks = true, + DefaultExt = ".i18nc", + Filter = "I18N Commander Files (*.i18nc)|*.i18nc", + RestoreDirectory = true, + Title = "Create a new I18N Commander file", + }; - // TODO: Apply new project's path - LoaderStart.UpdateRecentProjectsWithPruning(string.Empty); + var dialogResult = saveDialog.ShowDialog(this); + if (dialogResult != DialogResult.OK) + return; - // TODO: Open the project + var destinationFilePath = saveDialog.FileName; + LoaderStart.UpdateRecentProjectsWithPruning(destinationFilePath); + this.OpenProject(destinationFilePath); } private void BrowseForProject() { - // TODO: Browse for project - // TODO: Handle cancel event + var openDialog = new OpenFileDialog + { + AddExtension = true, + CheckPathExists = true, + CheckFileExists = true, + DereferenceLinks = true, + DefaultExt = ".i18nc", + Filter = "I18N Commander Files (*.i18nc)|*.i18nc", + Multiselect = false, + RestoreDirectory = true, + Title = "Open an I18N Commander file", + }; + var dialogResult = openDialog.ShowDialog(this); + if (dialogResult != DialogResult.OK) + return; - // TODO: Apply chosen project's path - LoaderStart.UpdateRecentProjectsWithPruning(string.Empty); - - // TODO: Open the project + var projectFilePath = openDialog.FileName; + LoaderStart.UpdateRecentProjectsWithPruning(projectFilePath); + this.OpenProject(projectFilePath); } private void OpenRecentProject(object? sender) @@ -104,8 +131,13 @@ public partial class LoaderStart : UserControl var path = (item.Tag as string)!; LoaderStart.UpdateRecentProjectsWithPruning(path); - - // TODO: Open the project + this.OpenProject(path); + } + + private void OpenProject(string path) + { + // Hint: the project file might or might not exist (new project vs. recent project) + this.LoadProject?.Invoke(this, path); } private void contextMenuRecentProjects_Closing(object sender, ToolStripDropDownClosingEventArgs e) From 502dea63e0b68d5ec710253d92df429532ba53a7 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sun, 12 Jun 2022 16:20:26 +0200 Subject: [PATCH 11/11] Implemented load project event --- I18N Commander/UI WinForms/Loader.Designer.cs | 1 + I18N Commander/UI WinForms/Loader.cs | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/I18N Commander/UI WinForms/Loader.Designer.cs b/I18N Commander/UI WinForms/Loader.Designer.cs index af291fb..377596e 100644 --- a/I18N Commander/UI WinForms/Loader.Designer.cs +++ b/I18N Commander/UI WinForms/Loader.Designer.cs @@ -56,6 +56,7 @@ this.loaderStart.Name = "loaderStart"; this.loaderStart.Size = new System.Drawing.Size(794, 444); this.loaderStart.TabIndex = 0; + this.loaderStart.LoadProject += new System.EventHandler(this.loaderStart_LoadProject); // // Loader // diff --git a/I18N Commander/UI WinForms/Loader.cs b/I18N Commander/UI WinForms/Loader.cs index 6980c76..b18c284 100644 --- a/I18N Commander/UI WinForms/Loader.cs +++ b/I18N Commander/UI WinForms/Loader.cs @@ -6,4 +6,10 @@ public partial class Loader : Form { this.InitializeComponent(); } + + private void loaderStart_LoadProject(object sender, string projectFilePath) + { + // TODO: Call the data model + this.Close(); + } } \ No newline at end of file