From 57fe2dcb71d9e31221b9c201f59f8e64bdbeafe4 Mon Sep 17 00:00:00 2001 From: Franklin Date: Mon, 31 Mar 2025 20:01:55 +0800 Subject: [PATCH 1/3] update packing module Signed-off-by: Franklin --- ComputerResourceConsole.suo | Bin 121344 -> 121344 bytes view/frm_console.cs | 4 -- view/frm_packing.Designer.cs | 80 ++++++++++++++++++++++------------ view/frm_packing.cs | 82 ++++++++++++++++++++++++++++++++--- view/frm_packing.resx | 9 ++-- 5 files changed, 134 insertions(+), 41 deletions(-) diff --git a/ComputerResourceConsole.suo b/ComputerResourceConsole.suo index f6402ae8443d459c8ce7722070edef10d5927e65..94af7a606186d5c0294b845c3b46d3a8d88c5d99 100644 GIT binary patch delta 2325 zcmZ{l4Nz276vyA$eapT@AQsjQKlo@d#}tues3ApMK1?MB7AZ@j!U7S6B3(7i1g*%_ z3^w}R9y8C$GAc7a2vIQ=2_-EpGs(6uYo!0%fLSKHJHNU2{_nZ(oO{pR zduy7_HO=Oo5k{)u5yodCpOGY~6f6J>!HvGYzD20Z!9Bdo7#p_?t>xfpPzCCNZnYBi zvtSjd1~s5TE)R*hnEzH%(-|_N@2ch%@+|($_LtP7A2D#ux zuok=o)`9h41K7yUq;S4ujHs`)sg*g~$kIAZl4hjmXJm2D{d0MlJH@hb^TOU?$Z_s~ zqPp|iM$i;=7nv%gVyT?pD=OjMt^{_^mDP6_6&rbXQ31Oj2F&(^)63K zsJ_30MfA*|B-K?b%f2kdV_@)buxFjyr-lwuz3Xy0BXt_DS)Z;HV`RSnsOnw6+d$hn z?_?R@_`$&~<$-LUXfsQa?)G(_x1fq+E{`!MqW8R%q0xNmGx5&nVN~9$Wz5lJto59U2$GCGb7?0bB+@ zf-B%Ba251|pTRZo3-E$p!EfMq@CW!4TnB%FzrhXl=eKs);sy@r1W0kZjDr=AdQyMe zi8`^r&8;6KE9nEBpgjo|82?+;>3fV8dDf6DdG>7}p8ZX>Xsw_N>dp%xvNmo784T3R zWC`cB_a$2rC8w0E|Co*};>G6+w1RS)V}P;Ss8UBCQD4KQz529tlX(9L@*r1%qUIFI zNcL2Cs}*TaQYnWvj1h|~X(6908;=qFpIyULkk`~Li-zN5!kHjG*ICG&S4NA3c5-N;snknc*^bb%Xe^1x4#G`ip*|&z>G(U^*lb!u z>Zf1DlQuJlb`y7V5_etQrk&bPYh`|H)dAkSC7p}r=5U=Sn_v4alPmKh_|wiPwR?MS zkO(nRB45i-#Zk`U;vbVOfl>u-6N|Kmj~-ktt^|{!6qhV1D}AD5v9M0238HQet5NR4>Oe z_2522aJ8mKmy~!s9CJ9{r>XiH3>C#9EtKMPMWju}8udA%^dSnS|Jw_)X(@%&7I0Go zX9=a*SLloFFQurXK;}(i;1>_Qsym!%*Po_=qHjnl$kasr98&erU>GjaZB*r3mt0X? z9=~ZcWfhgme-HGHMUo)a?ZOL)^)-> zU9CR7#a^Em&Rd<)^t8{c@v=kQJ)6d`vorSJnZkXD9HMSM$=0Gb3QnKcd;7YN?p^l4 z(qmBvBQaOonnL+9P1JsMQMF77+S2K?K8QAov<@oMj}nh8v|G<+zVc}D=cbW8ou(G; d%GEy=eP;7)y5$86>9>!b)xn+ByeBEh@DHm{?m_?n delta 2674 zcmc(he^6A{702({ee4e;xX6MaBPft(Ib3ybVS)yV#fFs zQNyaSk!D{D&4=9T4#bD%Ts?$xJ>0h!9Wge%B+Zk(F}fg~hr8m~2eP!lqt{L4R`4Wa zZ|W^+imxJj)0~o~l%>L1^6so!P<@dqKg_=3r}r1_fkH^aP0edzQP)aUbAiF{O*XVO z=SN{qcd}fusvGndQ-xTbu_iMQ|N8T1ai=|5e>LgmwVSQC!8W1D_WbMN^nwcx$Z=&G z)$)vruR_rNjzrG6phJVhj273Q>68|%vb8~ybjtCVkwL0l3sGbX1V5PSPA-Dm>Xz<= zx&u5)36BYyxZUid9pw7kjEf=W9p(_z${c3em|rpN%n_!8>14W?qf9sRYvvepocRs& zF4M!j2jXRMf-ApePBOn^dYMzqX+~zwFz+)TFm9%gIm?`5`kC|00CR!)knu2s%thuB zbD4S6T>Sm%V;#nXS=@+cW-|%Q9LB;RGvNW{X;rkLbBlFKW1rFp=ugz!xstC~%Gv#D zz2wi{eG>bQ%lpAS{YCgeMH!KBH6(M)`^rze=UM)p$7E4`Ce%@T6s({d;qV6iOAASq zwjDx4*D97{#pH4DQ_p0Lg+)D;njn|+i-rzG!)NqD1Vn&nu^ZJK7MT8E9dEV)E#*Ju zv=xTX6pq_(@1ewDFuM(@paH0%pf)JRigW`F<$-|;UWXFpfZ)#MCLR-vonOBP?aINU z-bRQcgB_GZx|CP&HC7%C#+7$I!oAnzy$z*u z-<1Z5KHd#Y(2e)XOX*Gu81cfj_;EK_ha?()4Mynh>)=$RHacAcT~tvE4{5a%3h*!A z$MIrHu<6BEUPTPg{?%ir^x^)28Tj4ZMrB+zn!XDh3vv5W4I3&sw4Kto!7eg1KrB0I z0gnFgOZH&*;&Zq*G}L3oMKLSvEWY839I$-vpn~^&HSqWDYD+LaW;4 z51D$wVJrBmc@nU&pQ`-9rb}Qk#+)JTKR!9w@9+aV1?);}IDM5Jdc*Jm?X6qF0+$8w1KVHKzWK2Yw`Y8qGvX=5_= zRKo*z!$l}myL%789-y4FkU_mCz=CCO6ryQ|ftpUh39jsJnPw*Q0Ic@Q;MI0wbI1zH znhEEzBP2_yBvZ=*Xgq%52mr0>gpD+`2$s>w4$!%}*yW$h;uuQp

wK7w*eNySf7= zUBR-&^|99X+DfIiKG^8yS>~(go)*&S>ePv>cq0R@Eq;}g$&<2)FS9DKS=8`n+hVbh zGn9g|vp;UgPrIVM8Pv2!cx*>io!GR@h$o-6pnaW&tV_Vk@mZge=Jq7Rd private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.gb_programming = new System.Windows.Forms.GroupBox(); this.rb_programming_python = new System.Windows.Forms.RadioButton(); this.rb_programming_cs = new System.Windows.Forms.RadioButton(); @@ -43,13 +44,15 @@ this.gb_pick_wrappingfile = new System.Windows.Forms.GroupBox(); this.ss_packing = new System.Windows.Forms.StatusStrip(); this.gb_relatedfiles = new System.Windows.Forms.GroupBox(); - this.dgv_files = new System.Windows.Forms.DataGridView(); - this.bt_addFile = new System.Windows.Forms.Button(); this.bt_addFolder = new System.Windows.Forms.Button(); + this.bt_addFile = new System.Windows.Forms.Button(); + this.dgv_files = new System.Windows.Forms.DataGridView(); + this.dgv_co_files = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.gb_mdl = new System.Windows.Forms.GroupBox(); this.tb_mdlpath = new System.Windows.Forms.TextBox(); this.bt_pickMDLFile = new System.Windows.Forms.Button(); - this.dgv_co_files = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.cms_delete = new System.Windows.Forms.ContextMenuStrip(this.components); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.gb_programming.SuspendLayout(); this.gb_license.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit(); @@ -57,6 +60,7 @@ this.gb_relatedfiles.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dgv_files)).BeginInit(); this.gb_mdl.SuspendLayout(); + this.cms_delete.SuspendLayout(); this.SuspendLayout(); // // gb_programming @@ -84,6 +88,7 @@ this.rb_programming_python.TabStop = true; this.rb_programming_python.Text = "Python"; this.rb_programming_python.UseVisualStyleBackColor = true; + this.rb_programming_python.CheckedChanged += new System.EventHandler(this.rb_programming_python_CheckedChanged); // // rb_programming_cs // @@ -96,6 +101,7 @@ this.rb_programming_cs.TabStop = true; this.rb_programming_cs.Text = "C#"; this.rb_programming_cs.UseVisualStyleBackColor = true; + this.rb_programming_cs.CheckedChanged += new System.EventHandler(this.rb_programming_python_CheckedChanged); // // gb_license // @@ -231,18 +237,16 @@ this.gb_relatedfiles.TabStop = false; this.gb_relatedfiles.Text = "Related Files"; // - // dgv_files + // bt_addFolder // - this.dgv_files.AllowUserToAddRows = false; - this.dgv_files.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgv_files.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dgv_co_files}); - this.dgv_files.Location = new System.Drawing.Point(5, 27); - this.dgv_files.Name = "dgv_files"; - this.dgv_files.ReadOnly = true; - this.dgv_files.RowTemplate.Height = 30; - this.dgv_files.Size = new System.Drawing.Size(642, 164); - this.dgv_files.TabIndex = 0; + this.bt_addFolder.Location = new System.Drawing.Point(487, 203); + this.bt_addFolder.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.bt_addFolder.Name = "bt_addFolder"; + this.bt_addFolder.Size = new System.Drawing.Size(151, 33); + this.bt_addFolder.TabIndex = 9; + this.bt_addFolder.Text = "Add folder..."; + this.bt_addFolder.UseVisualStyleBackColor = true; + this.bt_addFolder.Click += new System.EventHandler(this.bt_addFolder_Click); // // bt_addFile // @@ -255,16 +259,26 @@ this.bt_addFile.UseVisualStyleBackColor = true; this.bt_addFile.Click += new System.EventHandler(this.bt_addFile_Click); // - // bt_addFolder + // dgv_files // - this.bt_addFolder.Location = new System.Drawing.Point(487, 203); - this.bt_addFolder.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); - this.bt_addFolder.Name = "bt_addFolder"; - this.bt_addFolder.Size = new System.Drawing.Size(151, 33); - this.bt_addFolder.TabIndex = 9; - this.bt_addFolder.Text = "Add folder..."; - this.bt_addFolder.UseVisualStyleBackColor = true; - this.bt_addFolder.Click += new System.EventHandler(this.bt_addFolder_Click); + this.dgv_files.AllowUserToAddRows = false; + this.dgv_files.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgv_files.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dgv_co_files}); + this.dgv_files.Location = new System.Drawing.Point(5, 27); + this.dgv_files.Name = "dgv_files"; + this.dgv_files.ReadOnly = true; + this.dgv_files.RowTemplate.Height = 30; + this.dgv_files.Size = new System.Drawing.Size(642, 164); + this.dgv_files.TabIndex = 0; + this.dgv_files.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgv_files_CellMouseDown); + // + // dgv_co_files + // + this.dgv_co_files.HeaderText = "Files"; + this.dgv_co_files.Name = "dgv_co_files"; + this.dgv_co_files.ReadOnly = true; + this.dgv_co_files.Width = 550; // // gb_mdl // @@ -299,12 +313,19 @@ this.bt_pickMDLFile.UseVisualStyleBackColor = true; this.bt_pickMDLFile.Click += new System.EventHandler(this.bt_pickMDLFile_Click); // - // dgv_co_files + // cms_delete // - this.dgv_co_files.HeaderText = "Files"; - this.dgv_co_files.Name = "dgv_co_files"; - this.dgv_co_files.ReadOnly = true; - this.dgv_co_files.Width = 550; + this.cms_delete.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.deleteToolStripMenuItem}); + this.cms_delete.Name = "cms_delete"; + this.cms_delete.Size = new System.Drawing.Size(153, 54); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(152, 28); + this.deleteToolStripMenuItem.Text = "Delete"; + this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); // // frm_packing // @@ -334,6 +355,7 @@ ((System.ComponentModel.ISupportInitialize)(this.dgv_files)).EndInit(); this.gb_mdl.ResumeLayout(false); this.gb_mdl.PerformLayout(); + this.cms_delete.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -363,5 +385,7 @@ private System.Windows.Forms.Button bt_addFolder; private System.Windows.Forms.Button bt_addFile; private System.Windows.Forms.DataGridViewTextBoxColumn dgv_co_files; + private System.Windows.Forms.ContextMenuStrip cms_delete; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; } } \ No newline at end of file diff --git a/view/frm_packing.cs b/view/frm_packing.cs index d31ef07..38dc354 100644 --- a/view/frm_packing.cs +++ b/view/frm_packing.cs @@ -11,6 +11,22 @@ namespace ComputerResourceConsole.view { public partial class frm_packing : Form { + private string _strWrappingFiler = "python (*.py)|*.py"; + private int _selectedColumnIndex = -1; + + public List ModelFiles + { + get + { + List modelfilelist = new List(); + for (int i = 0; i < this.dgv_files.Rows.Count; i++) + { + modelfilelist.Add(dgv_files.Rows[i].Cells[0].Value.ToString()); + } + return modelfilelist; + } + } + public frm_packing() { InitializeComponent(); @@ -54,9 +70,8 @@ namespace ComputerResourceConsole.view private void bt_pickWrappingFile_Click(object sender, EventArgs e) { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "exe/python (*.exe;*.py)|*.exe;*.py"; + ofd.Filter = this._strWrappingFiler; if (ofd.ShowDialog() == DialogResult.OK) { this.tb_wappingfilepath.Text = ofd.FileName; @@ -76,8 +91,6 @@ namespace ComputerResourceConsole.view private void bt_packing_Click(object sender, EventArgs e) { this.setStatus("Packing start..."); - List modelfiles = new List(); - } private void bt_close_Click(object sender, EventArgs e) @@ -103,7 +116,14 @@ namespace ComputerResourceConsole.view ofd.Filter = "All file (*.*)|*.*"; if (ofd.ShowDialog() == DialogResult.OK) { - this.dgv_files.Rows.Add(ofd.FileName); + if (this.existingFileOrFolder(ofd.FileName)) + { + MessageBox.Show("This file has been appended!", "Warning"); + } + else + { + this.dgv_files.Rows.Add(ofd.FileName); + } } } @@ -112,8 +132,58 @@ namespace ComputerResourceConsole.view FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { - this.dgv_files.Rows.Add(fbd.SelectedPath); + if (this.existingFileOrFolder(fbd.SelectedPath)) + { + MessageBox.Show("This folder has been appended!", "Warning"); + } + else + { + this.dgv_files.Rows.Add(fbd.SelectedPath); + } + } + } + + private void rb_programming_python_CheckedChanged(object sender, EventArgs e) + { + this.tb_wappingfilepath.Text = ""; + if (this.ProgrammingLanguage == 1) + { + this._strWrappingFiler = "Python (*.py)|*.py"; + } + else + { + this._strWrappingFiler = "Execuable file (*.exe)|*.exe"; + } + } + + private void dgv_files_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + if (e.RowIndex > -1 && e.Button == System.Windows.Forms.MouseButtons.Right) + { + this.cms_delete.Show(this, new Point(e.X + 50, e.Y + 30 * (e.RowIndex + 1) + 210)); + this._selectedColumnIndex = e.ColumnIndex; + } + } + + private void deleteToolStripMenuItem_Click(object sender, EventArgs e) + { + if (this._selectedColumnIndex != -1) + { + this.dgv_files.Rows.RemoveAt(_selectedColumnIndex); + } + } + + private bool existingFileOrFolder(string fileorfolder) + { + List list = this.ModelFiles; + for (int i = 0; i < list.Count; i++) + { + if (list[i] == fileorfolder) + { + return true; + } } + return false; } } } diff --git a/view/frm_packing.resx b/view/frm_packing.resx index a5014d4..d4d50a7 100644 --- a/view/frm_packing.resx +++ b/view/frm_packing.resx @@ -120,13 +120,16 @@ 17, 17 - - True - 277, 17 True + + True + + + 426, 17 + \ No newline at end of file -- Gitee From e8003868925b6b638665d21ce9bfda3a49622fa2 Mon Sep 17 00:00:00 2001 From: Franklin Date: Thu, 3 Apr 2025 18:55:52 +0800 Subject: [PATCH 2/3] update packing module Signed-off-by: Franklin --- ComputerResourceConsole.csproj | 4 + ComputerResourceConsole.suo | Bin 121344 -> 121344 bytes control/ModelServiceDebuggerControl.cs | 34 +-- control/PackingControl.cs | 36 +++ factory/ComponentControlFactory.cs | 4 + lib/IPackingControl.cs | 12 + lib/IPackingOpera.cs | 11 + model/PackingOpera.cs | 13 ++ view/frm_packing.Designer.cs | 145 ++++++++++-- view/frm_packing.cs | 93 +++++++- view/frm_packing.resx | 295 ++++++++++++++++++++++++- 11 files changed, 592 insertions(+), 55 deletions(-) create mode 100644 control/PackingControl.cs create mode 100644 lib/IPackingControl.cs create mode 100644 lib/IPackingOpera.cs create mode 100644 model/PackingOpera.cs diff --git a/ComputerResourceConsole.csproj b/ComputerResourceConsole.csproj index e43dc36..16fe398 100644 --- a/ComputerResourceConsole.csproj +++ b/ComputerResourceConsole.csproj @@ -106,6 +106,7 @@ + @@ -114,6 +115,8 @@ + + @@ -126,6 +129,7 @@ + diff --git a/ComputerResourceConsole.suo b/ComputerResourceConsole.suo index 94af7a606186d5c0294b845c3b46d3a8d88c5d99..74497ee3e10472227ec05f44fa0a6eaa94dad245 100644 GIT binary patch delta 2143 zcmah~3rv$&6#h>s?O&|WO6d@sl)?-+1VpDSiWEVI4{Svuj*w`@sl23U=aeb5$k2cr zZI5!5xen2}#Fn{&(J;$z@CH}}w;A8?jri8nd_z4trcJ?H%A zo_nvQRcdLK9xf3}Ja6r7sN9ch#h3XN9LL3yu^sY{cL@we+ z;-#(x^p4WYU<5Hkhq2AU2L1&?Vti4TH&`!{aZjiP`Qm6+8~6l5R{EkYuUhYir`so@ zIjk4Yv?roDTrcCs5l1zg7q0h{fnYV<7e{l1Uc`k7QM$Yly&_&hdq&7$EUD$b6qk9Ho*(!DZvr-rT~^KCqqJaK!YL+Rwf)7!NsBP>I$Q z9j1MlikDWTD!0~b$s8d%wL-1c|C1fuaovyY%?1_DG>pN^`PsN;N9c3i_g%b!V%sLv z{H%})o;l7RQ(N>(D{x#jiLe7T)YqeOe|W4gdv6GB80ziRJBG$PsNX4!?Z%TX)kiUE znSo{t1;jP0qay&Tjk75YLQ$7s|MFs2+qqgXyIcV_*pL0C#q4eh#sB$*@hoRE6rrwL z%zEF3Jk)*R!T28M|3vye3>r%At(832&@I-t87zYBJ?!WvXkn&G_|tJ?8(7eqXGF!V zXjFaE1hoixxh>y{@#c-mP(!M9*!+WS*U@q30E)at*qpDT zHEB$l1mr}E2n6QA>0Md!SXlcj&hW1i6fzqtI%RoV0Vz3 z=2CX43`#LEM~xmnlmHR-_f2JvW6;JdZNR%c5BVUdpuA0$1#pGrRK~fPeKA8v`IyOh@n8(PriVFz^b3qK3iV z0O*lH0b#3sak-9)?F1o0W1i`BN*`ZUj5KgYI#|VYbFAT3A!+#D{QE8|Kz6MdVQ^*9vZfeSGhxKyF6V3V#mj>TB|+UvW^cQq{x z!6Q>bP=qXxT*OS;rDUA}tDGBF;pbLDm0xI|Pe7Gp_A*Zed zwK{(=c>2b9s^}}EBV!;v)D+xH8^nIha}{*#`!JZzwylS`ZrUwVLE|;TEOHowpon%` zjzgxOIL|iYYldB{c0-ibzorH>owI z9%v2GK7_Bm(S+27XquWfL6>x|Ajwf*O^dutTBWAeN7A&xs?EkklR{^;w#y`w&G-9% zJM%qeCem$EJKfJ&L8r5qP$aj^ z1~*3@vy-alhFo$AM_w}~rDVv4`5etQV^vu+lw`!LD$fVyhr#Qs0#sa_hKaWDe6?}) z#l<#E@=;*^jgR>1L z0+&?~jIwl4xb7YDUCy%>aci$orlA&-i6^6RnYNu@L|xTVf}`?OvsjG>xL9Nr^0b_l*ax-eRspo~)rf&UyK_mqbPlb2)2|U@kr-q(eos!N znz0huE^OvU$R@Bm8R%mNEBU5A2V}N-7Ur?kRFmmvJFGa#`Yq6)vAY?liP}*vJz;J! zQ|t)In>fmyf^|EFjKh@_;3e5c+64Y(-UH;pEt=|eAJG~ z$!<{)c9s2aD?*r+_FyJ$TbHNt^Ai9IujiQ$X2ZsIzl|a`CgTiLBfe(#rHrT8cd6)q zm>pc&v(*^17{ _dataConfig = null; public ModelServiceDebuggerControl():base() { - this._msDebuggerOpera = ComponentOperaFactory.createModelServiceDebuggerOpera(); + this._pDebuggerOpera = ComponentOperaFactory.createModelServiceDebuggerOpera(); this._dataConfig = new List(); - this._msDebuggerOpera.FilePath = _pConfig.NodejsPath; + this._pDebuggerOpera.FilePath = _pConfig.NodejsPath; } public int start(CommonMethod.CommonEvent exit) { this._status = "Started"; - return this._msDebuggerOpera.start(exit); + return this._pDebuggerOpera.start(exit); } public int stop() { this._status = "Stopped"; - return this._msDebuggerOpera.stop(); + return this._pDebuggerOpera.stop(); } public int restart(CommonMethod.CommonEvent exit) { - this._msDebuggerOpera.stop(); - int flag = this._msDebuggerOpera.start(exit); + this._pDebuggerOpera.stop(); + int flag = this._pDebuggerOpera.start(exit); this._status = "Started"; return flag; } @@ -66,7 +66,7 @@ namespace ComputerResourceConsole.control { this._mdl = new ModelClass(); this._mdl.LoadFromXmlFile(mdlPath); - this._msDebuggerOpera.MDLPath = mdlPath; + this._pDebuggerOpera.MDLPath = mdlPath; } catch (Exception ex) { @@ -217,11 +217,11 @@ namespace ComputerResourceConsole.control public bool formatToFile() { - if (this._msDebuggerOpera.DataConfigPath == "") + if (this._pDebuggerOpera.DataConfigPath == "") { return false; } - return this.formatToFile(this._msDebuggerOpera.DataConfigPath); + return this.formatToFile(this._pDebuggerOpera.DataConfigPath); } public bool MDLLoading @@ -267,7 +267,7 @@ namespace ComputerResourceConsole.control { System.IO.Directory.CreateDirectory(path); } - this._msDebuggerOpera.DataConfigPath = path + "data.config"; + this._pDebuggerOpera.DataConfigPath = path + "data.config"; return true; } catch (Exception ex) @@ -282,11 +282,11 @@ namespace ComputerResourceConsole.control { get { - return this._msDebuggerOpera.Host; + return this._pDebuggerOpera.Host; } set { - this._msDebuggerOpera.Host = value; + this._pDebuggerOpera.Host = value; } } @@ -294,11 +294,11 @@ namespace ComputerResourceConsole.control { get { - return this._msDebuggerOpera.Port; + return this._pDebuggerOpera.Port; } set { - this._msDebuggerOpera.Port = value; + this._pDebuggerOpera.Port = value; } } @@ -307,11 +307,11 @@ namespace ComputerResourceConsole.control { get { - return this._msDebuggerOpera.InstanceID; + return this._pDebuggerOpera.InstanceID; } set { - this._msDebuggerOpera.InstanceID = value; + this._pDebuggerOpera.InstanceID = value; } } } diff --git a/control/PackingControl.cs b/control/PackingControl.cs new file mode 100644 index 0000000..11a9cbb --- /dev/null +++ b/control/PackingControl.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using ComputerResourceConsole.lib; +using ComputerResourceConsole.common; +using ComputerResourceConsole.factory; +using ComputerResourceConsole.control; +using System.IO; + +public class PackingControl : ComponentControl, IPackingControl +{ + private IPackingOpera pPackingOpera = null; + + public PackingControl() + : base() + { + + } + + public int start(CommonMethod.CommonEvent exit) + { + throw new NotImplementedException(); + } + + public int stop() + { + throw new NotImplementedException(); + } + + public int restart(CommonMethod.CommonEvent exit) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/factory/ComponentControlFactory.cs b/factory/ComponentControlFactory.cs index 9135c01..2e00c5f 100644 --- a/factory/ComponentControlFactory.cs +++ b/factory/ComponentControlFactory.cs @@ -34,6 +34,10 @@ namespace ComputerResourceConsole.factory { return new ModelServiceDebuggerControl(); } + public static IPackingControl createPackingControl() + { + return new PackingControl(); + } public static IContainerAdvancedControl createContainerAdvancedControl() { diff --git a/lib/IPackingControl.cs b/lib/IPackingControl.cs new file mode 100644 index 0000000..181e843 --- /dev/null +++ b/lib/IPackingControl.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ComputerResourceConsole.lib +{ + public interface IPackingControl: IComponentControl + { + + } +} diff --git a/lib/IPackingOpera.cs b/lib/IPackingOpera.cs new file mode 100644 index 0000000..9945e75 --- /dev/null +++ b/lib/IPackingOpera.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ComputerResourceConsole.lib +{ + public interface IPackingOpera: IComponentOpera + { + } +} diff --git a/model/PackingOpera.cs b/model/PackingOpera.cs new file mode 100644 index 0000000..49026e3 --- /dev/null +++ b/model/PackingOpera.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using ComputerResourceConsole.lib; + +namespace ComputerResourceConsole.model +{ + public class PackingOpera: ComponentOperaBase, IPackingOpera + { + + } +} diff --git a/view/frm_packing.Designer.cs b/view/frm_packing.Designer.cs index 34c25de..7addab7 100644 --- a/view/frm_packing.Designer.cs +++ b/view/frm_packing.Designer.cs @@ -29,6 +29,7 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frm_packing)); this.gb_programming = new System.Windows.Forms.GroupBox(); this.rb_programming_python = new System.Windows.Forms.RadioButton(); this.rb_programming_cs = new System.Windows.Forms.RadioButton(); @@ -40,7 +41,7 @@ this.bt_pickWrappingFile = new System.Windows.Forms.Button(); this.bt_packing = new System.Windows.Forms.Button(); this.bt_close = new System.Windows.Forms.Button(); - this.tb_wappingfilepath = new System.Windows.Forms.TextBox(); + this.tb_wrappingfilepath = new System.Windows.Forms.TextBox(); this.gb_pick_wrappingfile = new System.Windows.Forms.GroupBox(); this.ss_packing = new System.Windows.Forms.StatusStrip(); this.gb_relatedfiles = new System.Windows.Forms.GroupBox(); @@ -53,6 +54,14 @@ this.bt_pickMDLFile = new System.Windows.Forms.Button(); this.cms_delete = new System.Windows.Forms.ContextMenuStrip(this.components); this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.gb_information = new System.Windows.Forms.GroupBox(); + this.tb_author = new System.Windows.Forms.TextBox(); + this.tb_modelName = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.tb_savepath = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.bt_outputpath = new System.Windows.Forms.Button(); this.gb_programming.SuspendLayout(); this.gb_license.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit(); @@ -61,13 +70,14 @@ ((System.ComponentModel.ISupportInitialize)(this.dgv_files)).BeginInit(); this.gb_mdl.SuspendLayout(); this.cms_delete.SuspendLayout(); + this.gb_information.SuspendLayout(); this.SuspendLayout(); // // gb_programming // this.gb_programming.Controls.Add(this.rb_programming_python); this.gb_programming.Controls.Add(this.rb_programming_cs); - this.gb_programming.Location = new System.Drawing.Point(10, 10); + this.gb_programming.Location = new System.Drawing.Point(10, 118); this.gb_programming.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_programming.Name = "gb_programming"; this.gb_programming.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -108,7 +118,7 @@ this.gb_license.Controls.Add(this.rb_license_gpl); this.gb_license.Controls.Add(this.rb_license_apache); this.gb_license.Controls.Add(this.rb_license_MIT); - this.gb_license.Location = new System.Drawing.Point(10, 99); + this.gb_license.Location = new System.Drawing.Point(10, 207); this.gb_license.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_license.Name = "gb_license"; this.gb_license.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -172,7 +182,7 @@ // // bt_packing // - this.bt_packing.Location = new System.Drawing.Point(192, 593); + this.bt_packing.Location = new System.Drawing.Point(197, 772); this.bt_packing.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.bt_packing.Name = "bt_packing"; this.bt_packing.Size = new System.Drawing.Size(133, 30); @@ -183,7 +193,7 @@ // // bt_close // - this.bt_close.Location = new System.Drawing.Point(348, 593); + this.bt_close.Location = new System.Drawing.Point(353, 772); this.bt_close.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.bt_close.Name = "bt_close"; this.bt_close.Size = new System.Drawing.Size(133, 30); @@ -192,20 +202,20 @@ this.bt_close.UseVisualStyleBackColor = true; this.bt_close.Click += new System.EventHandler(this.bt_close_Click); // - // tb_wappingfilepath + // tb_wrappingfilepath // - this.tb_wappingfilepath.Enabled = false; - this.tb_wappingfilepath.Location = new System.Drawing.Point(5, 31); - this.tb_wappingfilepath.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); - this.tb_wappingfilepath.Name = "tb_wappingfilepath"; - this.tb_wappingfilepath.Size = new System.Drawing.Size(539, 28); - this.tb_wappingfilepath.TabIndex = 7; + this.tb_wrappingfilepath.Enabled = false; + this.tb_wrappingfilepath.Location = new System.Drawing.Point(5, 31); + this.tb_wrappingfilepath.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.tb_wrappingfilepath.Name = "tb_wrappingfilepath"; + this.tb_wrappingfilepath.Size = new System.Drawing.Size(539, 28); + this.tb_wrappingfilepath.TabIndex = 7; // // gb_pick_wrappingfile // - this.gb_pick_wrappingfile.Controls.Add(this.tb_wappingfilepath); + this.gb_pick_wrappingfile.Controls.Add(this.tb_wrappingfilepath); this.gb_pick_wrappingfile.Controls.Add(this.bt_pickWrappingFile); - this.gb_pick_wrappingfile.Location = new System.Drawing.Point(10, 176); + this.gb_pick_wrappingfile.Location = new System.Drawing.Point(10, 284); this.gb_pick_wrappingfile.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_pick_wrappingfile.Name = "gb_pick_wrappingfile"; this.gb_pick_wrappingfile.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -216,7 +226,7 @@ // // ss_packing // - this.ss_packing.Location = new System.Drawing.Point(0, 636); + this.ss_packing.Location = new System.Drawing.Point(0, 821); this.ss_packing.Name = "ss_packing"; this.ss_packing.Padding = new System.Windows.Forms.Padding(1, 0, 11, 0); this.ss_packing.Size = new System.Drawing.Size(673, 22); @@ -228,7 +238,7 @@ this.gb_relatedfiles.Controls.Add(this.bt_addFolder); this.gb_relatedfiles.Controls.Add(this.bt_addFile); this.gb_relatedfiles.Controls.Add(this.dgv_files); - this.gb_relatedfiles.Location = new System.Drawing.Point(11, 340); + this.gb_relatedfiles.Location = new System.Drawing.Point(11, 448); this.gb_relatedfiles.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_relatedfiles.Name = "gb_relatedfiles"; this.gb_relatedfiles.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -284,7 +294,7 @@ // this.gb_mdl.Controls.Add(this.tb_mdlpath); this.gb_mdl.Controls.Add(this.bt_pickMDLFile); - this.gb_mdl.Location = new System.Drawing.Point(10, 258); + this.gb_mdl.Location = new System.Drawing.Point(10, 366); this.gb_mdl.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_mdl.Name = "gb_mdl"; this.gb_mdl.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -318,20 +328,102 @@ this.cms_delete.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.deleteToolStripMenuItem}); this.cms_delete.Name = "cms_delete"; - this.cms_delete.Size = new System.Drawing.Size(153, 54); + this.cms_delete.Size = new System.Drawing.Size(137, 32); // // deleteToolStripMenuItem // this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; - this.deleteToolStripMenuItem.Size = new System.Drawing.Size(152, 28); + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(136, 28); this.deleteToolStripMenuItem.Text = "Delete"; this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); // + // gb_information + // + this.gb_information.Controls.Add(this.tb_author); + this.gb_information.Controls.Add(this.tb_modelName); + this.gb_information.Controls.Add(this.label2); + this.gb_information.Controls.Add(this.label1); + this.gb_information.Location = new System.Drawing.Point(11, 7); + this.gb_information.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.gb_information.Name = "gb_information"; + this.gb_information.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.gb_information.Size = new System.Drawing.Size(653, 105); + this.gb_information.TabIndex = 2; + this.gb_information.TabStop = false; + this.gb_information.Text = "Information"; + // + // tb_author + // + this.tb_author.Location = new System.Drawing.Point(118, 63); + this.tb_author.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.tb_author.Name = "tb_author"; + this.tb_author.Size = new System.Drawing.Size(520, 28); + this.tb_author.TabIndex = 9; + // + // tb_modelName + // + this.tb_modelName.Location = new System.Drawing.Point(118, 25); + this.tb_modelName.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.tb_modelName.Name = "tb_modelName"; + this.tb_modelName.Size = new System.Drawing.Size(520, 28); + this.tb_modelName.TabIndex = 8; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 66); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(71, 18); + this.label2.TabIndex = 1; + this.label2.Text = "Author:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(107, 18); + this.label1.TabIndex = 0; + this.label1.Text = "Model Name:"; + // + // tb_savepath + // + this.tb_savepath.Enabled = false; + this.tb_savepath.Location = new System.Drawing.Point(88, 723); + this.tb_savepath.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.tb_savepath.Name = "tb_savepath"; + this.tb_savepath.Size = new System.Drawing.Size(466, 28); + this.tb_savepath.TabIndex = 11; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 726); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(71, 18); + this.label3.TabIndex = 10; + this.label3.Text = "Output:"; + // + // bt_outputpath + // + this.bt_outputpath.Location = new System.Drawing.Point(558, 719); + this.bt_outputpath.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.bt_outputpath.Name = "bt_outputpath"; + this.bt_outputpath.Size = new System.Drawing.Size(100, 33); + this.bt_outputpath.TabIndex = 8; + this.bt_outputpath.Text = "Pick"; + this.bt_outputpath.UseVisualStyleBackColor = true; + this.bt_outputpath.Click += new System.EventHandler(this.bt_outputpath_Click); + // // frm_packing // this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(673, 658); + this.ClientSize = new System.Drawing.Size(673, 843); + this.Controls.Add(this.bt_outputpath); + this.Controls.Add(this.tb_savepath); + this.Controls.Add(this.label3); + this.Controls.Add(this.gb_information); this.Controls.Add(this.gb_mdl); this.Controls.Add(this.gb_relatedfiles); this.Controls.Add(this.ss_packing); @@ -340,6 +432,7 @@ this.Controls.Add(this.bt_packing); this.Controls.Add(this.gb_license); this.Controls.Add(this.gb_programming); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.Name = "frm_packing"; this.Text = "Packing"; @@ -356,6 +449,8 @@ this.gb_mdl.ResumeLayout(false); this.gb_mdl.PerformLayout(); this.cms_delete.ResumeLayout(false); + this.gb_information.ResumeLayout(false); + this.gb_information.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -375,7 +470,7 @@ private System.Windows.Forms.Button bt_close; private System.Windows.Forms.Button bt_packing; private System.Windows.Forms.GroupBox gb_pick_wrappingfile; - private System.Windows.Forms.TextBox tb_wappingfilepath; + private System.Windows.Forms.TextBox tb_wrappingfilepath; private System.Windows.Forms.StatusStrip ss_packing; private System.Windows.Forms.GroupBox gb_relatedfiles; private System.Windows.Forms.DataGridView dgv_files; @@ -387,5 +482,13 @@ private System.Windows.Forms.DataGridViewTextBoxColumn dgv_co_files; private System.Windows.Forms.ContextMenuStrip cms_delete; private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.TextBox tb_savepath; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.GroupBox gb_information; + private System.Windows.Forms.TextBox tb_author; + private System.Windows.Forms.TextBox tb_modelName; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button bt_outputpath; } } \ No newline at end of file diff --git a/view/frm_packing.cs b/view/frm_packing.cs index 38dc354..0a0b8c1 100644 --- a/view/frm_packing.cs +++ b/view/frm_packing.cs @@ -6,6 +6,10 @@ using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; +using System.IO; + +using ComputerResourceConsole.lib; +using ComputerResourceConsole.factory; namespace ComputerResourceConsole.view { @@ -13,6 +17,8 @@ namespace ComputerResourceConsole.view { private string _strWrappingFiler = "python (*.py)|*.py"; private int _selectedColumnIndex = -1; + private IPackingControl pPackingCtrl = null; + public List ModelFiles { @@ -30,41 +36,42 @@ namespace ComputerResourceConsole.view public frm_packing() { InitializeComponent(); + this.pPackingCtrl = ComponentControlFactory.createPackingControl(); } - public int ProgrammingLanguage + public string ProgrammingLanguage { get { if (rb_programming_python.Checked) { - return 1; + return "Python"; } else if (rb_programming_cs.Checked) { - return 2; + return "CSharp"; } - return -1; + return ""; } } - public int License + public string License { get { if (rb_license_MIT.Checked) { - return 1; + return "MIT"; } else if (rb_license_apache.Checked) { - return 2; + return "Apache"; } else if (rb_license_gpl.Checked) { - return 3; + return "GPL"; } - return -1; + return ""; } } @@ -74,7 +81,7 @@ namespace ComputerResourceConsole.view ofd.Filter = this._strWrappingFiler; if (ofd.ShowDialog() == DialogResult.OK) { - this.tb_wappingfilepath.Text = ofd.FileName; + this.tb_wrappingfilepath.Text = ofd.FileName; } } @@ -90,7 +97,60 @@ namespace ComputerResourceConsole.view private void bt_packing_Click(object sender, EventArgs e) { + //! Checking + if (this.tb_modelName.Text == "") + { + MessageBox.Show("Please fill model name!", "Warning"); + return; + } + if (this.tb_author.Text == "") + { + MessageBox.Show("Please fill model author!", "Warning"); + return; + } + if (this.tb_wrappingfilepath.Text == "") + { + MessageBox.Show("Please select wrapping file!", "Warning"); + return; + } + if (this.tb_mdlpath.Text == "") + { + MessageBox.Show("Please select MDL file!", "Warning"); + return; + } + if (this.tb_savepath.Text == "") + { + MessageBox.Show("Please select saving path!", "Warning"); + return; + } + if (!Directory.Exists(this.tb_savepath.Text)) + { + MessageBox.Show("Saving path is not existing!", "Warning"); + return; + } this.setStatus("Packing start..."); + + FileStream fs = new FileStream(this.tb_savepath.Text + "\\" + this.tb_modelName.Text + ".config", FileMode.CreateNew, FileAccess.Write, FileShare.None); + StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); + sw.Write("modelname||" + this.tb_modelName.Text + "\n"); + sw.Write("author||" + this.tb_author.Text + "\n"); + sw.Write("programming||" + this.ProgrammingLanguage + "\n"); + sw.Write("license||" + this.License + "\n"); + sw.Write("wrappingfile||" + this.tb_wrappingfilepath.Text + "\n"); + sw.Write("mdlfile||" + this.tb_mdlpath.Text + "\n"); + sw.Write("targetpath||" + this.tb_savepath.Text + "\n"); + for (int i = 0; i < this.dgv_files.Rows.Count; i++) + { + sw.Write("modelfile||" + this.dgv_files.Rows[i].Cells[0].Value + "\n"); + } + sw.Flush(); + sw.Close(); + fs.Close(); + fs.Dispose(); + + //! Start process + + } private void bt_close_Click(object sender, EventArgs e) @@ -145,8 +205,8 @@ namespace ComputerResourceConsole.view private void rb_programming_python_CheckedChanged(object sender, EventArgs e) { - this.tb_wappingfilepath.Text = ""; - if (this.ProgrammingLanguage == 1) + this.tb_wrappingfilepath.Text = ""; + if (this.ProgrammingLanguage == "Python") { this._strWrappingFiler = "Python (*.py)|*.py"; } @@ -185,5 +245,14 @@ namespace ComputerResourceConsole.view } return false; } + + private void bt_outputpath_Click(object sender, EventArgs e) + { + FolderBrowserDialog fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() == DialogResult.OK) + { + this.tb_savepath.Text = fbd.SelectedPath; + } + } } } diff --git a/view/frm_packing.resx b/view/frm_packing.resx index d4d50a7..54de97f 100644 --- a/view/frm_packing.resx +++ b/view/frm_packing.resx @@ -120,15 +120,300 @@ 17, 17 - - 277, 17 - True - - True + + 277, 17 + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av///yL///8+////Yv// + /4b///+e/v7+sP7+/pr///88////BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL///8U////VP// + /6b///7g/v78//v79f/59+7/+Pbq//f05v/59+7//v797v///0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av// + /yL+/v6M////2P7+/P/7+vL/7ObF/93Slf/PwG3/xLFL/72nNf+4oCT/0cJy//v79f////98AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////IP///5T////2/f36//Lu1//Yy4T/xLBF/7qjJv+1nRf/tZ0Z/7WcGv+1nBv/tZwb/9HC + c//7+vT/////fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Mv///8L+/v3/8u7V/9TGdv+7pSf/tp8a/7adGf+1nRn/tZ0X/7Wd + GP+1nBn/tZwa/7WcGv/RwnP/+/r1/////3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4K////fv///+j5+O3/39WZ/8GtN/+3nxb/tp8W/7ae + Fv+2nhf/tp4Z/7WdGf+1nRf/tZ0Y/7WdGf+1nBr/0cJz//v69f////98AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4C/v7+hP7+/fTy7tT/0MFm/7ql + IP+3oBb/t58V/7efFP+2nxb/tp4X/7aeGP+2nhn/tp0Z/7WdF/+1nRf/tZ0Z/9HDc//7+vX/////fAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/v7+bP// + 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 + EP+5oxH/uaMS/7mjEv+4ohP/uKEU/7iiFf/HtUb/6eK3//38+f/+/v76////pP///1z///8w/v7+GP// + /wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////uvj26P/MvEr/u6YN/7ql + D/+6pRD/uqUQ/7qlEf+6pBD/uaQQ/7mjEf+5oxL/uaMS/7mjFv/Ov17/9PHd//////j+/v6y////Yv// + /woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+EP// + //rq5Lf/v6wf/7umDf+6pQ3/uqUP/7qlEP+6pRH/uqUR/7mkEP+5pBD/uaMR/7mjEv/Ov1v/9/Xn//// + /+j+/v5SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Bv///57/////18ty/7yoEv+7pg//u6YO/7qlDf+6pQ//uqUQ/7qlEP+6pBH/uaQQ/7mk + EP/Bri//9PDa//7+/vb///9U/v7+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xD////6+vnv/8q6Q/+7pw//u6cP/7umD/+7pg3/u6YN/7ql + D/+6pRD/uqUQ/7qlEf+8qBr/4tqe//7+/P/+/v6M////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4S//////DszP/DsSn/u6cP/7un + D/+7pw//u6YP/7umDf+6pQ7/uqUP/7qlEP+6pRH/yLdB//v68v/+/v7Y////HAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Lv// + ///o4q//vqsY/7yoDv+7pw//u6cP/7unD/+7pg//u6YN/7umDf+6pQ//u6cW/93UjP//////////Rv// + /wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///47+/v7/39eQ/7yqEv+8qA7/vKgO/7yoD/+7pw//u6cP/7umD/+7pg3/uqUN/7+r + If/v6sn/////7P///woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gL///+e/f37/9nOef+9qRP/vKgP/7yoDv+8qA//u6cP/7un + D/+7pw//u6YP/7umDf/Htzv/9vPg/////6T///8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I////MP7+ + /jD///8w////MP///zD///8w////MP///zD///8w/v7+Mv7+/goAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////oP38+f/Xy2//vakS/7yp + EP+8qA//vKgO/7yoDv+7pw//u6cP/7unD/+7pg//zb5O//n36/////+W////AgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///+I/v7+8P////j+/v74////+P////j////4////+P////j////4////+P////j+/v7w////aAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av// + /6D9/Pj/1spt/72qEv+9qRH/vKkQ/7yoD/+8qA7/vKgP/7unD/+7pw//u6cP/87AVv/6+O7/////kv// + /wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8C////4vf05//bz43/2c2J/9nNif/ZzYn/2c2K/9nNi//ZzIv/2cyL/9nM + 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 + Ef+8qA//vaoU/82/Tv/n4Kr/9vPf//7+/f///////////////////////fz4//Ht0P/g15b/xbM3/7ql + Ev+5oxH/uaMS/7mjEv+4ohP/uKEU/7ihEv+4oRL/uKEU/7ihFf+3oRX/t6AW/7umJf/n4LP//v79/P// + /3L///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD+/v4y/v7+av// + /2z///9s////Zv///yoAAAAA////uvLv0v/EtSv/ybs8//Pw1f/+/v3//v79//7+/f/+/v3//v79/+jh + rP+/rBn/vaoR/72pEf+9qRH/vKkQ/7yoD/+8qA//vakU/8a1M//Nv1D/1Mdp/9jNeP/YzHT/0sRg/8q6 + SP/Brij/u6YU/7qlEv+5pA//uaMQ/7mjEf+5oxL/uaMS/7iiE/+4oRT/uKES/7ihEv+4oRT/t6EV/7ei + Gf/Ux3X//Pv1/////7T+/v4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8+/v7+4P7+/f/+/vv//v77//7+/fz////S////LP///7jz8NP/xLUq/7+uGP/XzG7/+/vz//// + //D///88////SP///+Dn4av/v60Z/72qEf+9qRH/vakR/7ypEf+8qRD/vKgP/7yoDv+8qA//u6cP/7un + EP+8qBP/u6gS/7umDv+6pQ7/uqUP/7qlEP+6pRH/uqQR/7mkEP+5oxD/uaMR/7mjEv+4ohL/uKIT/7ih + FP+4oRL/uKES/7ehFP/GtUj/8+/Z/////97///8kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8C////lP38+P/f14r/1Mli/9TJYv/o463//v38/////3j+/v648/DT/8S1 + Kv+/rRb/w7Ml/+bfpv//////////cP///y7////c5+Gr/7+uGv+9qhH/vaoR/72qEf+9qRH/vakR/7yp + Ef+8qA//vKgO/7yoDv+7pw//u6cP/7unD/+7pg//u6YN/7qlDf+6pQ//uqUQ/7qlEP+6pBH/uaQQ/7mk + EP+5oxH/uaMS/7mjEv+4ohP/uKEU/7ihEv++qSj/6eK3//79+/z///94AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av///5z8+/P/0MRT/8CwGf/AsBv/3dWG//39 + +f////+A////uPPw0//EtSr/v64W/7+uFv/Gti//8e3M//7+/fj+/v6i////3ufhq//Arhr/vasS/72q + Ef+9qhH/vaoR/72pEf+9qRH/vKkQ/7yoD/+8qA7/vKgO/7yoD/+7pw//u6cP/7umD/+7pg3/uqUN/7ql + D/+6pRD/uqUQ/7qlEf+6pBD/uaQQ/7mjEf+5oxL/uaMS/7iiE/+8qCP/49qk//38+vz///+4/v7+HAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL///+c/Pv0/9HF + Vf/BsRr/wbEb/97Vh//9/fn/////gP///7jz8NP/xbYq/7+uFv+/rhb/v64W/8m7Pf/y79P//v79+P// + //rn4av/wK4a/76rE/+9qhL/vaoR/72qEf+9qhH/vakR/72pEf+8qRH/vKgP/7yoDv+8qA7/u6cP/7un + D/+7pw//u6YP/7umDf+6pQ7/uqUP/7qlEP+6pRH/uqUR/7mkEP+5oxD/uaMR/7mjEv+8px7/4tme//79 + /Pz///+0////IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8C////mP38+P/i25X/181t/9jNbv/r5bX//v78/////3z+/v648/DU/8W2K/+/rhX/v64W/7+u + Fv+/rhb/yrxA//Huzv//////5+Gr/8CuGv++rBP/vqsT/72rEv+9qhH/vaoR/72qEf+9qRH/vakR/7yp + Ef+8qA//vKgO/7yoDv+7pw//u6cP/7unD/+7pg//u6YN/7qlDf+6pQ//uqUQ/7qlEP+6pRH/uaQQ/7mk + EP++qiT/49ui//7+/f////+q////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///1D+/v7y/v7+//7+/f/+/v3//v7+//7+/uj///8+/v7+uPPw + 1P/Fti3/wK8V/7+uFv+/rhb/v64W/7+uFv/IuTf/7Oa6/+fgqf/Arhr/vqwT/76sE/++qxP/vasS/72q + Ef+9qhH/vaoR/72pEf+9qRH/vKkQ/7yoD/+8qA7/vKgP/7unD/+7pw//u6cP/7umD/+7pg3/uqUN/7ql + D/+6pRD/uqUR/7umFv/Kukj/7ujE//7+/v////++////GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////GP///zj///9K/v7+hP7+ + /rD////Q/v7+uP///97z8NT/xbYt/8CvGP/Arxf/v64W/7+uFv+/rhb/v64W/8W1Lv/XzG3/x7cy/76s + FP++rBP/vqwT/76rE/+9qxL/vaoR/72qEf+9qhH/vakR/7ypEf+8qRH/vKgP/7yoDv+8qA//u6cP/7un + D/+7pw//u6YP/7qmDf+6pQ7/uqUQ/8CtKP/b0IT/9/Xl//7+/fT///+G////Dv///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Pv7+/ur5+Or/8/DT//Px1f/08dX/6+a4/87CTv/Mv0f/zL9H/8y/Rf/Mv0X/zL5F/8y+ + Rf/LvUP/29F8//HtzP/Vymn/xrYw/76sFf++rBP/vqsT/72rEv+9qhH/vaoR/72qEf+9qRH/vakR/7yp + EP+8qA//vKgO/7yoDv+7pw//u6cP/7unD/+7pxD/wrAp/9XHav/v68r//fz4+v///8b///9E////BgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///1j+/fz/4tqU/8a4Lv/GuC//xrgu/8u9P//w7Mn/+fjs//n4 + 7P/5+Oz/+fjs//n47P/5+Oz/+fjr//v68v/+/v76+/vz//Huz//e1If/0MNV/8S0Kf/Arxz/v6wX/72q + Ev+9qhH/vaoR/72pEf+8qRH/vKkR/7ypD/+9qhL/vqsY/8GvIv/Nv07/29GD//Dsy//8+/T//v7+7v// + /6L///8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9a/v37/9/Xi//Csx//wbIb/8Gx + Gv/HuTL/8u/Q//7+/uj+/v6E////hP///4T///+E////hP///4T///90////VP///57+/v7m/v7++Pn4 + 6//x7c7/5uCn/9rQef/Qw1f/yrtA/8e2NP/GtjL/xrY0/8m5P//OwFL/2M1z/+TcoP/v68j/+Pfp//7+ + /vr////m////oP///z7///8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Wv79 + +//g2I3/wrMf/8GyG//Bshv/x7oz//Lv0P/+/v7W////DAAAAAAAAAAAAAAAAAAAAAD+/v4C////EP// + /yz///8q////OP///2r///+e///+9P7+/v/+/v3//v79//z89//6+e//+vjs//r57//8/Pb//v78//7+ + /f/+/v7////+9v///6L+/v5c////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///1r+/vv/39eI/8KyHf/Cshv/wbIb/8e5Mf/x7s3/////1v///w4AAAAAAAAAAAAA + AAAAAAAA////fv////j////////////////////6////iP///1b///+G////hv///4j+/v6S////3v// + ///////k////kv///4j///+G////hv///1r///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9O/v79+vDsyP/g2Iz/4dmQ/+HZj//i25b/+Pfo//// + /9L///8GAAAAAAAAAAAAAAAA////Dv///8z18tn/3tWF/93Ug//b0n//8e7O/////9L///8Y////AP// + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8U////Rv7+/nj///+I////Uv7+/iD///8CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////////w/////////wB////////4AH///////+AAf/ + //////wAB///////+AAH///////gAAf//////+AAB///////wAAH//////+AAAf//////wAAB//////+ + AAAH//////wAAAf//////AAAB//////8AAB///////gAAf//////+AAH///////wAA////////AAD/// + ////8AAf///////wAD///////+AAP///////4AA////////gAD///AAf/+AAP//8AA//4AA///wAD//g + AD///AAP/+AAP//4AA//8AA///gAD//wAB//+AAf//AAD//wAB//+AAP/+AAH//4AAf/wAAf//gAAP8A + AD///AAAfAAAP//4AAAAAAB///gAAAAAAH/8CAwAAAAA//gIDAAAAAH/+AAAAAAAAf/4AAAAAAAD//gI + AAAAAAf//AgAAAAAD///gAAAAAAf//+AAAAAAH///4AAAAAA////gAGAAAP///+Af/AAH////4B+BAB/ + ////gHwH//////+AfAf////////8B//////w//wH/////+B//Af/////4H/+D//////gf////////+B/ + /////////f////////////////////////////////////////8= + + 426, 17 -- Gitee From ffae77a6785037f94b89f635711f7f0460b4347a Mon Sep 17 00:00:00 2001 From: Franklin Date: Thu, 17 Apr 2025 16:46:19 +0800 Subject: [PATCH 3/3] finished model packing Signed-off-by: Franklin --- ComputerResourceConsole.suo | Bin 121344 -> 121344 bytes control/PackingControl.cs | 31 ++++++++++++++++++++++------- factory/ComponentOperaFactory.cs | 5 +++++ lib/IPackingControl.cs | 8 ++++++-- lib/IPackingOpera.cs | 7 ++++++- model/PackingOpera.cs | 29 ++++++++++++++++++++++++++- view/frm_packing.Designer.cs | 2 +- view/frm_packing.cs | 33 +++++++++++++++++++++++++------ 8 files changed, 97 insertions(+), 18 deletions(-) diff --git a/ComputerResourceConsole.suo b/ComputerResourceConsole.suo index 74497ee3e10472227ec05f44fa0a6eaa94dad245..771fc59e247f40936513a7c9534ddb36fc08a2e2 100644 GIT binary patch delta 4848 zcmbUl4OmoF_MPF)@CHYmLB#PV{xn5J{7Fjq-SH8I8zuq($Q4kwDCXowR%waRLM!}yhIA)LUJ(0i08Nu=GgDs-+& zj0=|b`1)TE6;O&7Pfb8yM3*##xCwnF2IeXh5G_l%qYA|EU@rQixp$ zLif-MEHw=#D@pJSVEwR6HPE)YBl{{2vjcd{!>{!y#pEg=-ft+TOCb#-;laTQsx^eI z8izl{XX5M8GqGVrsv4q*HZ)ku;~P;N5|NcMW^?)6eIKw zUyL3sVyjtoB=LkK@pyBM=uk5e?#Yb4xBaAaz#sD^Pg8$}R^t}2JHY2c}!o~4uq z(0pJp7k&42Nj9R?1yen~S$e?hbKIVW6rVy>PP`41u-L4 zaS~n`9fyl{M0pxA3<~TRJrYd|!|**Zo{UXoh8bXB4JK$flKnc!ZusV9FGkX9B{)d% z48gMmEd-2UGr<;utpv{zY$tf0U@rj=;7%HM5qw6lyNC8d&v*;Bp#UgHW6f$iC z49BiBk(}WDb{!-D?klzLZY@&c=Qd40vrr;b2sWWgSca$a2chPHLQku?D3nEQhH}|b zv!%?l)b=W1i?y`BN%)0=C%WR89-Hr;9PSiS1qa!2(SN((F+3hZ3E`kkBoPD>0^J*O z)v%mM+CF6829rc#>5k|_bw6p6YKfu?rh0r&Y82?i9K3ZY3oW1Q@)oRu1B&M5ntmm; zxDn99Kj}Oae*ECt?dfSx zsX(Jwa{_0KHjRV^w@$e+EMFWQBwneKM__KNojaz%>+h}~gXTF2R)}Hw; z8h7{1U!ZYM&wL+^zw4R*p2h<`^Mf=VA~;OY-b3S=a+KyT5xfjk(!4b3Ab5q~7{PIZ z69gx5e%lC7rgpldX{5qH0T8VMvQdcW!Ibq)aV=pPym{wcuaJr2) zv)!?5wxc%R>UP_zmWgCBs@iF-u{l<_>~*PS){+XVC6iWkX?w}pjuNxm=BQddyqA($ zX2#ajDw4+&{5wcWb=d9J5^l(qlwWNv zAx~`eR!dU8+ey;5xqR0WDCobMd#94$2|T*1LCFdKt34hx(PDO+Lx%r~Cn-*+xh|VL z=F6&8T$ca)HPKmpWK~OSJW9$XF4~2(gf{P@t&y{mq^9Zh%N(`Efag;TC=fHh3F4XA>pgt5eYi1JMPb3Nb(P5!%1E~a}9{bi-X z10QsQqTA$!QaGiA^?0Ll86HcHC4n5Abm2K~p&j(F>$2!|R>FM%TX|Vzhd019lF0Uq zfBPhmQe)vdLQ}mL9q<~!8jLHo_IckdKRXaI$y_CB-%0W&)We4WH5ga1g0$wb3-wST z-#@}KPiuH3_8Qj&IhXxT%~?d>bNJ!#o(t;r7rsd46&-Knk7mm=Ax`Cz z@4DfNV7$+}z=czJuoe>4yZnL^vFV<#8FENH*25klVh*J@uBq`+gxLsG}cY&bizf?>-mVG75~6 zo48JbfL-PuMeQ23{7R$+I`JQxF}Q1Ao-&890~}-VMu?ZHNv9@QPir9o-c0gG&M!Hr z7h)ia?XLx`7)x}f)x$ecXSqnvvzSITfw3cS$Wq`~r8vI{vIP6u3Av2h>pj$8 z$-RIkdm|R!Q5b`hua~ERfoxthbU}~DJi7vp4f+q6*{eK=Er|9fm@*KN+c72YG)jqf zru6TuHxCQcybqPb#Qr^HW!oF-K+DU!VEolYzb(UGI>uk5bx{&jaqa&VatSkGV7*4|MydzI2a8v5}uirsPd5iTNSM7706;m$3VkOqv3Fi2}Wuc zJ~8S~;q${{+eSqm_Dz{NugMh2GE6WHBPJE;R?WWo&#@toeEr}~@%ZA$&!zEx5!TA* zy4NrtLU>b(+G~2=pLe#Lhq2A}D0tj|?wt$3fNKUU#f0xK;pcB8XFu^;a7`7CO1sw1FWrz7rK$m1960d{- zve$PKauxocSRM#wC|(sW<`%Jq=64 wusPX2h$omUa1osHx3C)b2)m06&`U@=hD zyt4Ms74^7OyrRit$-&&|))5Fsqo~H%U{NY@vj7~&?^Uy)8ROI=-3EgooRG@ZNh;CD zRa$cNz9cGy-gvp?Rdjf_YW#RLyr+auszNI;fsU74akT2Ei}QOR4t=XemJ4=8C5KOWO0gz?|d5WPa{D~6Hvs6tHM>U#8mOa27PY(gO7oUxh7-$N{ zNKu6m;W{*%5;!#cQI}-oFwyYbqZbE-py198|6@9fc>w`(_@Ee9h9#H0U)sS7vUlW> z{UEKL5~sirlK~B0{a)P6%Vjeb=Y~<^`b?iF zcR6}$pN-#CrupHnlz>XhA+)5{YcH_vCQr(P8og}+?e2Gw++h_g;ZmOC}KfnF^LV|n+TRJjC-(HK1hgTAh#_5v7>cPP?+ z;bXX>uG^!)D+|)G=(_)Je*FfDSIfw@4s`0y$aSL=iy^hDJ`;bfXE)VIzVC1C)0z1G zdN@Hdmcz@L1s#WDH7Q*WV~?0MdCwlCZAS{+u`0*Jl;uoSfRMMCMioH`Y{izjrFeXv zUMjjf1nh0a5TU@vsUd8mzL@sIVzgQ0`D@tm;3Jw|4vWxY5vlceFb8A5Xr{ zz6<~NBh?^5TL(Y~elszMHZFk`zv-iQsJ$F)GLK!hsqT+UM9?XTwIO>F>+EAhm`-*=j2>%(ZM zbB3UK)+h{msKSIt_3*&?nlq9-TXv%DXBBNTK?Pdc!zt%;wr0b;E-%L++$-jVP~7oL z73_3wWwGe+!|WhdOgCrUsM$7$7GMdr5Sp>^QA#D{2J05>mH}@X^VkXY~+zzcVQuy6|G>WN*%1B@_rCa?OxzU z>-@nEjh*P`Trg6s7kome{on)~k_N@kZB=*?y&EcTecjw`V=GDwj)+fQKpVJnaZc4RL5T{S( z!`am=JdrC|!Z9aL`?Zm<7peo`oEXWdi}nF99nXChLDm6~sukpWQK74V$7bI2FO0~I z4)ld_oep^8Rq&y^(NIce9cbyI5lqyU3+KEBxR4mf^ZC>|8jRI>u)*cU_aou&To_fP zIs@0m=yEQ1QDuJuI(eRrBVc892A$sn-_h~Cu%bE)667*Y)-YxW1|{3uQuyFiIG~cxTh_VBrFq!-cVkoPF)i1>f{b{b#B?@`?#2+>Sut{L2)n})0j zvdLyJ_PQ$$Q|WO6q+opiXj(oAQaUex>8>Ka>1@^gjL2;~Oq*eV7T(TqRlB^}waF zK+a8W@=dTuZjy2wVZhFp(_?3zJC=xRzYo=I3T!)@80vn_``!Hq-`l4=QEB$2DP|aj zwj>)h7lS9(j0m+yr-7%Ev)!7c31pkjSMnqDSpx=E50pNdk8FTsS^kG_z5<-RL+9 zotOPNuCU#44CLFs7^R2-TG0$CnpwP_=_*5xX1Jt)+48;EBge(11fJmUq;6;GIqtBY r4YmMvOAKV10io!r)7xXe01-54ykC~ ModelFiles @@ -35,8 +36,12 @@ namespace ComputerResourceConsole.view public frm_packing() { + this._pPackingCtrl = ComponentControlFactory.createPackingControl(); InitializeComponent(); - this.pPackingCtrl = ComponentControlFactory.createPackingControl(); + + //! For test! + this.dgv_files.Rows.Add("E:\\GitCode\\ogms\\python\\ogms\\context\\yolov5s.pt"); + this.dgv_files.Rows.Add("E:\\GitCode\\ogms\\python\\ogms\\context\\yolov5\\"); } public string ProgrammingLanguage @@ -128,9 +133,11 @@ namespace ComputerResourceConsole.view MessageBox.Show("Saving path is not existing!", "Warning"); return; } - this.setStatus("Packing start..."); + this.setStatusText("Packing start..."); + + string strConfig = this.tb_savepath.Text + "\\" + this.tb_modelName.Text + ".config"; - FileStream fs = new FileStream(this.tb_savepath.Text + "\\" + this.tb_modelName.Text + ".config", FileMode.CreateNew, FileAccess.Write, FileShare.None); + FileStream fs = new FileStream(strConfig, FileMode.CreateNew, FileAccess.Write, FileShare.None); StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); sw.Write("modelname||" + this.tb_modelName.Text + "\n"); sw.Write("author||" + this.tb_author.Text + "\n"); @@ -150,7 +157,21 @@ namespace ComputerResourceConsole.view //! Start process - + this._pPackingCtrl.ConfigPath = strConfig; + this._pPackingCtrl.start(this.onPackingExit); + } + + private void onPackingExit(object sender, EventArgs e) + { + if (this.bt_packing.InvokeRequired) + { + CommonMethod.CommonEvent stcb = new CommonMethod.CommonEvent(onPackingExit); + this.Invoke(stcb, new object[] { sender, e }); + } + else + { + this.setStatusText("Finished!"); + } } private void bt_close_Click(object sender, EventArgs e) @@ -165,7 +186,7 @@ namespace ComputerResourceConsole.view this.rb_license_MIT.Checked = true; } - private void setStatus(string status) + private void setStatusText(string status) { this.ss_packing.Text = status; } -- Gitee