소스 검색

Shorcuts, Esptool

jungervin 7 년 전
부모
커밋
65a790116e

+ 4 - 0
EsPy/App.config

@@ -229,6 +229,10 @@
         <assemblyIdentity name="Microsoft.Dynamic" publicKeyToken="7f709c5b713576e1" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" />
       </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="WeifenLuo.WinFormsUI.Docking" publicKeyToken="5cded1a1a0a7b481" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-3.0.3.0" newVersion="3.0.3.0" />
+      </dependentAssembly>
     </assemblyBinding>
   </runtime>
 </configuration>

+ 19 - 4
EsPy/Components/ExScintilla.cs

@@ -37,13 +37,13 @@ namespace EsPy.Components
         public ExScintilla() : base()
         {
             this.InitializeComponent();
-            this.CompletionEnabled = false;
+            //this.CompletionEnabled = false;
             //this.Completions = new List<Completion>(500);
             //this.MouseDwellTime = 500;
         }
 
-        public bool CompletionEnabled
-        { get; set; }
+        //public bool CompletionEnabled
+        //{ get; set; }
 
         private void InitializeComponent()
         {
@@ -435,8 +435,10 @@ namespace EsPy.Components
             this.Styles[Style.Default].Font = "Consolas";
             this.Styles[Style.Default].Size = 10;
             this.StyleClearAll(); 
+
             this.IndentWidth = 4;
-            this.IndentationGuides = IndentView.LookForward;
+            this.TabWidth = 4;
+            this.IndentationGuides = IndentView.LookBoth;
 
 
             this.SetProperty("tab.timmy.whinge.level", "1");
@@ -512,6 +514,19 @@ namespace EsPy.Components
 
         private void ExScintilla_CharAdded(object sender, CharAddedEventArgs e)
         {
+
+            //// Find the word start
+            //int currentPos = this.CurrentPosition;
+            //int wordStartPos = this.WordStartPosition(currentPos, true);
+
+            //// Display the autocompletion list
+            //int lenEntered = currentPos - wordStartPos;
+            //if (lenEntered > 0)
+            //{
+            //    if (!this.AutoCActive)
+            //        this.AutoCShow(lenEntered, "abstract as base break case catch checked continue default delegate do else event explicit extern false finally fixed for foreach goto if implicit in interface internal is lock namespace new null object operator out override params private protected public readonly ref return sealed sizeof stackalloc switch this throw true try typeof unchecked unsafe using virtual while");
+            //}
+
             //var currentPos = this.CurrentPosition;
             //var wordStartPos = this.WordStartPosition(currentPos, true);
 

+ 8 - 1
EsPy/Dialogs/EspToolDialog.cs

@@ -241,7 +241,14 @@ namespace EsPy.Dialogs
                 if (MessageBox.Show("Are you sure? Did you erase the device?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                 {
                     //string args = String.Format("\"{0}\" -p {1} -b {2} write_flash --verify --flash_size=detect 0 \"{3}\"", this.tbEsptool.Text, this.PortName, this.BaudRate, this.tbFirmware.Text);
-                    string args = String.Format("\"{0}\" -p {1} -b {2} write_flash -fm {3} -ff 20m -fs detect 0x0000 \"{4}\"",
+                    //string args = String.Format("\"{0}\" -p {1} -b {2} write_flash -fm {3} -ff 20m -fs detect 0x0000 \"{4}\"",
+                    //    this.tbEsptool.Text,
+                    //    this.PortName,
+                    //    this.BaudRate,
+                    //    this.FlashMode.Text,
+                    //    this.tbFirmware.Text);
+
+                    string args = String.Format("\"{0}\" -p {1} -b {2} write_flash -fm {3} -fs detect 0x0000 \"{4}\"",
                         this.tbEsptool.Text,
                         this.PortName,
                         this.BaudRate,

+ 21 - 7
EsPy/Dialogs/PyFileManager.Designer.cs

@@ -56,6 +56,7 @@
             this.label5 = new System.Windows.Forms.Label();
             this.lUsage = new System.Windows.Forms.Label();
             this.label4 = new System.Windows.Forms.Label();
+            this.renameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.contextMenuStrip1.SuspendLayout();
             this.SuspendLayout();
             // 
@@ -103,46 +104,51 @@
             this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.downloadToolStripMenuItem,
             this.uploadToolStripMenuItem,
+            this.renameToolStripMenuItem,
             this.toolStripMenuItem1,
             this.makeDirToolStripMenuItem,
             this.toolStripMenuItem2,
             this.deleteToolStripMenuItem});
             this.contextMenuStrip1.Name = "contextMenuStrip1";
-            this.contextMenuStrip1.Size = new System.Drawing.Size(138, 104);
+            this.contextMenuStrip1.Size = new System.Drawing.Size(153, 148);
             // 
             // downloadToolStripMenuItem
             // 
             this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem";
-            this.downloadToolStripMenuItem.Size = new System.Drawing.Size(137, 22);
+            this.downloadToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
             this.downloadToolStripMenuItem.Text = "Download...";
+            this.downloadToolStripMenuItem.Click += new System.EventHandler(this.btnDownload_Click);
             // 
             // uploadToolStripMenuItem
             // 
             this.uploadToolStripMenuItem.Name = "uploadToolStripMenuItem";
-            this.uploadToolStripMenuItem.Size = new System.Drawing.Size(137, 22);
+            this.uploadToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
             this.uploadToolStripMenuItem.Text = "Upload...";
+            this.uploadToolStripMenuItem.Click += new System.EventHandler(this.btnUpload_Click);
             // 
             // toolStripMenuItem1
             // 
             this.toolStripMenuItem1.Name = "toolStripMenuItem1";
-            this.toolStripMenuItem1.Size = new System.Drawing.Size(134, 6);
+            this.toolStripMenuItem1.Size = new System.Drawing.Size(149, 6);
             // 
             // makeDirToolStripMenuItem
             // 
             this.makeDirToolStripMenuItem.Name = "makeDirToolStripMenuItem";
-            this.makeDirToolStripMenuItem.Size = new System.Drawing.Size(137, 22);
+            this.makeDirToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
             this.makeDirToolStripMenuItem.Text = "Make Dir...";
+            this.makeDirToolStripMenuItem.Click += new System.EventHandler(this.bntMkDir_Click);
             // 
             // toolStripMenuItem2
             // 
             this.toolStripMenuItem2.Name = "toolStripMenuItem2";
-            this.toolStripMenuItem2.Size = new System.Drawing.Size(134, 6);
+            this.toolStripMenuItem2.Size = new System.Drawing.Size(149, 6);
             // 
             // deleteToolStripMenuItem
             // 
             this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";
-            this.deleteToolStripMenuItem.Size = new System.Drawing.Size(137, 22);
+            this.deleteToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
             this.deleteToolStripMenuItem.Text = "Delete...";
+            this.deleteToolStripMenuItem.Click += new System.EventHandler(this.btnDelete_Click);
             // 
             // imageList1
             // 
@@ -285,6 +291,13 @@
             this.label4.TabIndex = 9;
             this.label4.Text = "label4";
             // 
+            // renameToolStripMenuItem
+            // 
+            this.renameToolStripMenuItem.Name = "renameToolStripMenuItem";
+            this.renameToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.renameToolStripMenuItem.Text = "Rename...";
+            this.renameToolStripMenuItem.Click += new System.EventHandler(this.btnRename_Click);
+            // 
             // PyFileManager
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -347,5 +360,6 @@
         private System.Windows.Forms.Label label5;
         private System.Windows.Forms.Label lUsage;
         private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem;
     }
 }

+ 67 - 67
EsPy/Dialogs/PyFileManager.resx

@@ -127,75 +127,75 @@
     <value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADo
-        DwAAAk1TRnQBSQFMAgEBBAEAATgBAAE4AQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADi
+        DwAAAk1TRnQBSQFMAgEBBAEAAUABAAFAAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
         AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AYgADBwEJAxABFgMT
         ARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMQARYDBwEJA1gBvAFi
-        AYwBnQHvAWIBjAGdAe8BYgGMAZ0B7wFiAYwBnQHvAWIBjAGdAe8BYgGMAZ0B7wFiAYwBnQHvAWIBjAGd
-        Ae8BYgGMAZ0B7wFiAYwBnQHvAWIBjAGdAe8BYgGMAZ0B7wFiAYwBnQHvAWIBjAGdAe8BVwJZAbcIAAMa
-        ASQDUAGfA1IBqANSAagDUgGoA1IBqANSAagDUgGoA1IBqANSAagDUAGdAxgBIUgAAw0BEgMfASwDVQG5
-        A0cB5wNHAecDRwHnA0cB5wNHAecDRwHnA0cB5wNHAecDRwHnA0cB5wNVAbkDHwEsAw0BEgFcAakBygH4
-        AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/
-        AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AVkBmwG3AfUIAANQAaMDEgEZIAADFAEcA1ABnRwAAwYBCAMK
-        BA0BEgEmAYEBUQH3Aw0BEgMLAQ8DBwEJAwABARQAA1QB2wNdAf8DWAH/A1gB/wNYAf8DWAH/A1gB/wNY
-        Af8DWAH/A1gB/wNdAf8DVAHbCAABXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHM
-        Av8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwG5AdoB/AgA
-        A1MBrCgAA1IBqBQAAwQBBgMLAQ8DEgEYAykBPgFFAaMBcwH6AYUB5QG1Af8DGwEmAxgBIgMUARsDDgET
-        AwcBChAAA1gBzgNbAf8C0AHEAf8C8wHkAf8C8wHkAf8C8wHkAf8C8wHkAf8C8wHkAf8C8wHkAf8C0AHE
-        Af8DWwH/A1gBzggAAV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/
-        AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BuQHaAfwIAANTAawEAAMg
-        AS8DUwGsA1MBrANTAawDUwGsA1MBrANTAawDHwEsBAADUgGoEAADAgEDAwoBDgMSARkBRwFIAUcBhAFm
-        AckBmAH/ARIBxAFoAf8BhQHkAbQB/wMnAToDIgEyAxwBKAMVAR0DDgETAwYBCAwAA1gByQNdAf8C9QHm
-        Af8C6gHcAf8C6gHcAf8C6gHcAf8C6gHcAf8C6gHcAf8C6gHcAf8C9QHmAf8DXQH/A1gByQgAAV8BzAL/
-        AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/
-        AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BuQHaAfwIAANTAawoAANSAagQAAMDAQQDCwEPAUABYwFR
-        AdUBdAHOAaIB/wEJAbQBXQH/AQwBvAFiAf8BgwHfAbEB/wGDAd0BsAH/AYIB2QGtAf8BgAHVAaoB/wF8
-        Ac8BpgH/AQEBcAE3Af8DBwEJDAADOwFjA1UB4wL3AesB/wLtAeIB/wLtAeIB/wLtAeIB/wLtAeIB/wLt
-        AeIB/wLtAeIB/wL3AesB/wNgAf8DVwHFCAABXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHM
-        Av8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwG5
-        AdoB/AgAA1MBrAQAAxEBFwM0AVQDNAFUAzQBVAM0AVQDNAFUAzQBVAMQARUEAANSAagUAAEaAW8BQgH1
-        AVwBwAGPAf8BBQGlAVMB/wEIAa4BWQH/AQkBtAFdAf8BCgG3AV8B/wEKAbUBXgH/AQgBrwFaAf8BBgGn
-        AVQB/wEDAZ4BTgH/AQEBcAE3Af8DAgEDEAADVgHBAvkB7wH/AvEB6AH/AvEB6AH/AvEB6AH/AvEB6AH/
-        AvEB6AH/AvEB6AH/AvkB7wH/A2QB/wNWAcEIAAFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFf
-        AcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFf
-        AbkB2gH8CAADUwGsBAADEgEZAzUBWAM1AVgDNQFYAzUBWAM1AVgDNQFYAxEBFwQAA1IBqBAAATUBiQFZ
-        AfcBYQHAAZEB/wFIAbUBfAH/AUoBugGEAf8BSgG/AYYB/wElAbUBawH/AQgBrgFYAf8BBwGsAVcB/wEG
-        AagBVAH/AQQBoQFQAf8BCwGdAVEB/wEBAXABNwH/FAADVgG+AvsB9AH/AvUB7wH/AvUB7wH/AvUB7wH/
-        AvUB7wH/AvUB7wH/AvUB7wH/AvsB9AH/A2cB/wNWAb4IAAFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFf
-        AcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFf
-        AcwC/wFfAbkB2gH8CAADUwGsKAADUgGoEAABPAE9ATwBaAGMAcsBqwH/AVgBvAGLAf8BVwG8AYoB/wFX
-        Ab8BjAH/AVUBwAGMAf8BUAG/AYgB/wFIAbwBgwH/AUEBtwF6Af8BNwGvAXAB/wEuAasBagH/AQ0BcQE9
-        AfoUAANWAbsC/QH4Af8C+QH1Af8C+QH1Af8C+QH1Af8C+QH1Af8C+QH1Af8C+QH1Af8C/QH4Af8DWAHd
-        AzgBXggAAV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/
-        AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BuQHaAfwIAANTAawEAAMgAS4DUgGo
-        A1IBqANSAagDUgGoA1IBqANSAagDHgErBAADUgGoFAADGAEiAWQBqgGFAfoBcwHHAZ4B/wFkAcEBkwH/
-        AV8BvwGQAf8BWAG9AYwB/wFQAbkBhgH/AUgBtQF8Af8BPgGxAXUB/wE0Aa0BbgH/ARUBbQE+AfcUAANW
-        AbgC/gH8Af8C/AH6Af8C/AH6Af8C/AH6Af8C/AH6Af8C/AH6Af8C/AH6Af8C/gH8Af8DVgG4DAABXwHM
-        Av8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwHM
-        Av8BXwHMAv8BXwHMAv8BXwHMAv8BXwHMAv8BXwG5AdoB/AgAA1MBrCgAA1IBqBgAAwEBAgE4AYkBYgH3
-        AZUB1AG0Af8BaQHDAZcB/wGqAdwBwwH/AQEBcAE3Af8BAQFwATcB/wEBAXABNwH/AQEBcAE3Af8BAQFw
-        ATcB/xAAAzcBWwNaAdoC4AHfA/8B/gP/Af4D/wH+A/8B/gP/Af4D/wH+Af8C4AHfAf8DWgHaAzcBWwgA
-        AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/
-        AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AV8BzAL/AVgBvAHoAf0IAANTAawoAANSAaggAAEoAW8BSgHu
-        AacB2wHBAf8BqwHdAcQB/yQAA1UBsgN1Af8DbAH/A2wB/wNsAf8DbAH/A2wB/wNsAf8DbAH/A2wB/wOE
-        Af8DVQGyCAABXgHKAfwB/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFf
-        AcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFfAcwC/wFlAboB7AH+CAADUwGsGAADEQEX
-        AzQBVAM0AVQDNAFUA1IBqCQAAUwBWgFSAbQBrAHcAcMB/yQAA1MBsAN3Af8DbgH/A24B/wNuAf8DbgH/
-        A24B/wNuAf8DbgH/A4YB/wNTAbADNQFYCAABVwG+Ae0B/wF1AdIB/QH/AYMB1gL/AYMB1gL/AYMB1gL/
-        AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AXUB0gH9
-        Af8BXgGtAd0B/ggAA1MBrBgAAzUBWANLAZADNwFaA1MB1wMxAU8oAAM1AVYkAANUAa4DhAH/A3gB/wN4
-        Af8DeAH/A3gB/wN4Af8DeAH/A4gB/wNUAa4DNQFYDAABSwGjAcwB/wHLAeQB8AH/AeoB9AH5Af8B6gH0
-        AfkB/wHqAfQB+QH/AeoB9AH5Af8B6gH0AfkB/wHqAfQB+QH/AeoB9AH5Af8B6gH0AfkB/wHqAfQB+QH/
-        AeoB9AH5Af8B6gH0AfkB/wHqAfQB+QH/AckB4gHvAf8BVwGEAZwB9QgAA1MBrBgAAzUBWAM1AVYDTgGZ
-        AzMBUlQAA0YBgQNTAawDUwGsA1MBrANTAawDUwGsA1MBrANTAawDUwGsAzUBVhAAAUQBjgG5AfwBSwGj
-        AcwB/wFOAaQBzQH/AU4BpAHNAf8BTgGkAc0B/wFHAY8BuQH8AVgBewGMAe8BWAF7AYwB7wFYAXsBjAHv
-        AVgBewGMAe8BWAF7AYwB7wFYAXsBjAHvAVgBewGMAe8BWAF7AYwB7wFYAXsBjAHvAVUBWAFZAboIAANQ
-        AaMDEgEYFAADNQFYA1UB1QMzAVKQAAFZAV4BXwHJAUsBowHMAf8BSwGjAcwB/wFLAaMBzAH/AUsBowHM
-        Af8BWQFcAV4BxzAAAxsBJgNQAaMDUwGsA1MBrANTAawDUwGsA1MBrANTAawDMQFPFAABQgFNAT4HAAE+
-        AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4EAAv8EAAHAAQMC/wQAAc8B8wH4AQcBwAEDAgAB3wH7
-        AeABAwHAAQMCAAHQAQsBwAEBAcABAwIAAd8B+wHAAQEBwAEDAgAB0AELAeABAQHgAQMCAAHQAQsBwAED
-        AeABAwIAAd8B+wHAAQMB4AEDAgAB0AELAeABAwHgAQcCAAHfAfsB8AEDAcABAwIAAd8B+wH8AX8BwAED
-        AgAB3wGDAf4BfwHAAQMCAAHfAYMB/wF/AcABBwIAAd8BhwL/AcABDwIAAc8BjwT/AQMB/wHAAR8L
+        AYYBlQHvAWIBhgGVAe8BYgGGAZUB7wFiAYYBlQHvAWIBhgGVAe8BYgGGAZUB7wFiAYYBlQHvAWIBhgGV
+        Ae8BYgGGAZUB7wFiAYYBlQHvAWIBhgGVAe8BYgGGAZUB7wFiAYYBlQHvAWIBhgGVAe8BVwJYAbcIAAMa
+        ASQDUAGfA1IBqANSAagDUgGoA1IBqANSAagDUgGoA1IBqANSAagDUAGdAxgBIUgAAw0BEgMfASwDVgG5
+        A0oB5wNKAecDSgHnA0oB5wNKAecDSgHnA0oB5wNKAecDSgHnA0oB5wNWAbkDHwEsAw0BEgFcAaQBwwH4
+        AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/
+        AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AVkBlwGxAfUIAANQAaMDEgEZIAADFAEcA1ABnRwAAwYBCAMK
+        BA0BEgEqAYABUQH3Aw0BEgMLAQ8DBwEJAwABARQAA1YB2wNcAf8DVwH/A1cB/wNXAf8DVwH/A1cB/wNX
+        Af8DVwH/A1cB/wNcAf8DVgHbCAABXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHM
+        Av8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgG3AdUB/AgA
+        A1MBrCgAA1IBqBQAAwQBBgMLAQ8DEgEYAykBPgFGAaEBcgH6AYUB5QG1Af8DGwEmAxgBIgMUARsDDgET
+        AwcBChAAA1kBzgNaAf8C0AHEAf8C8wHkAf8C8wHkAf8C8wHkAf8C8wHkAf8C8wHkAf8C8wHkAf8C0AHE
+        Af8DWgH/A1kBzggAAV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/
+        AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BtwHVAfwIAANTAawEAAMg
+        AS8DUwGsA1MBrANTAawDUwGsA1MBrANTAawDHwEsBAADUgGoEAADAgEDAwoBDgMSARkDSAGEAWUByQGY
+        Af8BEQHEAWcB/wGFAeQBtAH/AycBOgMiATIDHAEoAxUBHQMOARMDBgEIDAADWQHJA1wB/wL1AeYB/wLq
+        AdwB/wLqAdwB/wLqAdwB/wLqAdwB/wLqAdwB/wLqAdwB/wL1AeYB/wNcAf8DWQHJCAABXgHMAv8BXgHM
+        Av8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHM
+        Av8BXgHMAv8BXgHMAv8BXgHMAv8BXgG3AdUB/AgAA1MBrCgAA1IBqBAAAwMBBAMLAQ8BSQFiAVUB1QFz
+        Ac4BogH/AQgBtAFcAf8BCwG8AWEB/wGDAd8BsQH/AYMB3QGwAf8BggHZAa0B/wGAAdUBqgH/AXsBzwGm
+        Af8BAAFvATYB/wMHAQkMAAM7AWMDVwHjAvcB6wH/Au0B4gH/Au0B4gH/Au0B4gH/Au0B4gH/Au0B4gH/
+        Au0B4gH/AvcB6wH/A18B/wNXAcUIAAFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFe
+        AcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAbcB1QH8
+        CAADUwGsBAADEQEXAzQBVAM0AVQDNAFUAzQBVAM0AVQDNAFUAxABFQQAA1IBqBQAAR8BbgFCAfUBWwHA
+        AY8B/wEEAaUBUgH/AQcBrgFYAf8BCAG0AVwB/wEJAbcBXgH/AQkBtQFdAf8BBwGvAVkB/wEFAacBUwH/
+        AQIBngFNAf8BAAFvATYB/wMCAQMQAANWAcEC+QHvAf8C8QHoAf8C8QHoAf8C8QHoAf8C8QHoAf8C8QHo
+        Af8C8QHoAf8C+QHvAf8DYwH/A1YBwQgAAV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/
+        AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BtwHV
+        AfwIAANTAawEAAMSARkDNQFYAzUBWAM1AVgDNQFYAzUBWAM1AVgDEQEXBAADUgGoEAABNgGIAVgB9wFg
+        AcABkQH/AUcBtQF7Af8BSQG6AYQB/wFJAb8BhgH/ASQBtQFqAf8BBwGuAVcB/wEGAawBVgH/AQUBqAFT
+        Af8BAwGhAU8B/wEKAZ0BUAH/AQABbwE2Af8UAANWAb4C+wH0Af8C9QHvAf8C9QHvAf8C9QHvAf8C9QHv
+        Af8C9QHvAf8C9QHvAf8C+wH0Af8DZgH/A1YBvggAAV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/
+        AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/
+        AV4BtwHVAfwIAANTAawoAANSAagQAAE8AT0BPAFoAYwBywGrAf8BVwG8AYsB/wFWAbwBigH/AVYBvwGM
+        Af8BVAHAAYwB/wFPAb8BiAH/AUcBvAGDAf8BQAG3AXkB/wE2Aa8BbwH/AS0BqwFpAf8BEAFwAT4B+hQA
+        A1YBuwL9AfgB/wL5AfUB/wL5AfUB/wL5AfUB/wL5AfUB/wL5AfUB/wL5AfUB/wL9AfgB/wNYAd0DOAFe
+        CAABXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHM
+        Av8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgHMAv8BXgG3AdUB/AgAA1MBrAQAAyABLgNSAagDUgGo
+        A1IBqANSAagDUgGoA1IBqAMeASsEAANSAagUAAMYASIBYgGnAYIB+gFyAccBngH/AWMBwQGTAf8BXgG/
+        AZAB/wFXAb0BjAH/AU8BuQGGAf8BRwG1AXsB/wE9AbEBdAH/ATMBrQFtAf8BGQFtAT8B9xQAA1YBuAL+
+        AfwB/wL8AfoB/wL8AfoB/wL8AfoB/wL8AfoB/wL8AfoB/wL8AfoB/wL+AfwB/wNWAbgMAAFeAcwC/wFe
+        AcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFe
+        AcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAbcB1QH8CAADUwGsKAADUgGoGAADAQECATkBiAFiAfcBlQHU
+        AbQB/wFoAcMBlwH/AaoB3AHDAf8BAAFvATYB/wEAAW8BNgH/AQABbwE2Af8BAAFvATYB/wEAAW8BNgH/
+        EAADNwRbAdoC4AHfA/8B/gP/Af4D/wH+A/8B/gP/Af4D/wH+Af8C4AHfAf8DWwHaAzcBWwgAAV4BzAL/
+        AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/
+        AV4BzAL/AV4BzAL/AV4BzAL/AV4BzAL/AVYBuwHlAf0IAANTAawoAANSAaggAAEuAW0BTAHuAacB2wHB
+        Af8BqwHdAcQB/yQAA1UBsgN0Af8DawH/A2sB/wNrAf8DawH/A2sB/wNrAf8DawH/A2sB/wOEAf8DVQGy
+        CAABXQHKAfwB/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFe
+        AcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFeAcwC/wFlAbgB6gH+CAADUwGsGAADEQEXAzQBVAM0
+        AVQDNAFUA1IBqCQAAVEBWAFUAbQBrAHcAcMB/yQAA1MBsAN2Af8DbQH/A20B/wNtAf8DbQH/A20B/wNt
+        Af8DbQH/A4YB/wNTAbADNQFYCAABVgG+Ae0B/wF0AdIB/QH/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/
+        AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AYMB1gL/AXQB0gH9Af8BXgGr
+        AdsB/ggAA1MBrBgAAzUBWANLAZADNwFaA1YB1wMxAU8oAAM1AVYkAANUAa4DhAH/A3cB/wN3Af8DdwH/
+        A3cB/wN3Af8DdwH/A4gB/wNUAa4DNQFYDAABSgGjAcwB/wHLAeQB8AH/AeoB9AH5Af8B6gH0AfkB/wHq
+        AfQB+QH/AeoB9AH5Af8B6gH0AfkB/wHqAfQB+QH/AeoB9AH5Af8B6gH0AfkB/wHqAfQB+QH/AeoB9AH5
+        Af8B6gH0AfkB/wHqAfQB+QH/AckB4gHvAf8BWAGCAZgB9QgAA1MBrBgAAzUBWAM1AVYDTgGZAzMBUlQA
+        A0YBgQNTAawDUwGsA1MBrANTAawDUwGsA1MBrANTAawDUwGsAzUBVhAAAUIBiwG3AfwBSgGjAcwB/wFN
+        AaQBzQH/AU0BpAHNAf8BTQGkAc0B/wFFAYwBtwH8AVgBdgGGAe8BWAF2AYYB7wFYAXYBhgHvAVgBdgGG
+        Ae8BWAF2AYYB7wFYAXYBhgHvAVgBdgGGAe8BWAF2AYYB7wFYAXYBhgHvAVUBVwFYAboIAANQAaMDEgEY
+        FAADNQFYA1cB1QMzAVKQAAFZAVwBXgHJAUoBowHMAf8BSgGjAcwB/wFKAaMBzAH/AUoBowHMAf8BWQFb
+        AVwBxzAAAxsBJgNQAaMDUwGsA1MBrANTAawDUwGsA1MBrANTAawDMQFPFAABQgFNAT4HAAE+AwABKAMA
+        AUADAAEgAwABAQEAAQEGAAEBFgAD/4EAAv8EAAHAAQMC/wQAAc8B8wH4AQcBwAEDAgAB3wH7AeABAwHA
+        AQMCAAHQAQsBwAEBAcABAwIAAd8B+wHAAQEBwAEDAgAB0AELAeABAQHgAQMCAAHQAQsBwAEDAeABAwIA
+        Ad8B+wHAAQMB4AEDAgAB0AELAeABAwHgAQcCAAHfAfsB8AEDAcABAwIAAd8B+wH8AX8BwAEDAgAB3wGD
+        Af4BfwHAAQMCAAHfAYMB/wF/AcABBwIAAd8BhwL/AcABDwIAAc8BjwT/AQMB/wHAAR8L
 </value>
   </data>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

+ 73 - 0
EsPy/Dialogs/UploadConfirmation.Designer.cs

@@ -0,0 +1,73 @@
+namespace EsPy.Dialogs
+{
+    partial class UploadConfirmation
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.Path = new System.Windows.Forms.Label();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(13, 13);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(35, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "label1";
+            // 
+            // Path
+            // 
+            this.Path.AutoSize = true;
+            this.Path.Location = new System.Drawing.Point(55, 13);
+            this.Path.Name = "Path";
+            this.Path.Size = new System.Drawing.Size(35, 13);
+            this.Path.TabIndex = 1;
+            this.Path.Text = "label2";
+            // 
+            // UploadConfirmation
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(569, 173);
+            this.Controls.Add(this.Path);
+            this.Controls.Add(this.label1);
+            this.Name = "UploadConfirmation";
+            this.Text = "UploadConfirmation";
+            this.Load += new System.EventHandler(this.UploadConfirmation_Load);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label Path;
+    }
+}

+ 41 - 0
EsPy/Dialogs/UploadConfirmation.cs

@@ -0,0 +1,41 @@
+using EsPy.Units;
+using EsPy.Utility;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace EsPy.Dialogs
+{
+    public partial class UploadConfirmation : Form
+    {
+        public UploadConfirmation()
+        {
+            InitializeComponent();
+        }
+
+        public PySerial Port
+        { get; set; }
+
+        private void UploadConfirmation_Load(object sender, EventArgs e)
+        {
+            ResultStatus cwd = this.Port.Cwd();
+            if (cwd.Result == ResultStatus.Statuses.Success)
+            {
+                this.Path.Text = cwd.ToString().Replace("'", "");
+                if (this.Path.Text == "")
+                    this.Path.Text = "/";
+            }
+            else
+            {
+                Helpers.ErrorBox(cwd);
+                return;
+            }
+        }
+    }
+}

+ 120 - 0
EsPy/Dialogs/UploadConfirmation.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 18 - 8
EsPy/EsPy.csproj

@@ -91,12 +91,12 @@
     <Prefer32Bit>true</Prefer32Bit>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
-    <Reference Include="ScintillaNET, Version=3.5.10.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\jacobslusser.ScintillaNET.3.5.10\lib\net40\ScintillaNET.dll</HintPath>
+    <Reference Include="ScintillaNET, Version=3.6.3.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\jacobslusser.ScintillaNET.3.6.3\lib\net40\ScintillaNET.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="System" />
@@ -110,12 +110,12 @@
     <Reference Include="System.Net.Http" />
     <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml" />
-    <Reference Include="WeifenLuo.WinFormsUI.Docking, Version=2.11.0.0, Culture=neutral, PublicKeyToken=5cded1a1a0a7b481, processorArchitecture=MSIL">
-      <HintPath>..\packages\DockPanelSuite.2.11.0-beta2\lib\net40\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
+    <Reference Include="WeifenLuo.WinFormsUI.Docking, Version=3.0.3.0, Culture=neutral, PublicKeyToken=5cded1a1a0a7b481, processorArchitecture=MSIL">
+      <HintPath>..\packages\DockPanelSuite.3.0.3\lib\net40\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
       <Private>True</Private>
     </Reference>
-    <Reference Include="WeifenLuo.WinFormsUI.Docking.ThemeVS2015, Version=2.11.0.0, Culture=neutral, PublicKeyToken=5cded1a1a0a7b481, processorArchitecture=MSIL">
-      <HintPath>..\packages\DockPanelSuite.ThemeVS2015.2.11.0-beta2\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll</HintPath>
+    <Reference Include="WeifenLuo.WinFormsUI.Docking.ThemeVS2015, Version=3.0.3.0, Culture=neutral, PublicKeyToken=5cded1a1a0a7b481, processorArchitecture=MSIL">
+      <HintPath>..\packages\DockPanelSuite.ThemeVS2015.3.0.3\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll</HintPath>
       <Private>True</Private>
     </Reference>
   </ItemGroup>
@@ -162,6 +162,12 @@
     <Compile Include="Dialogs\SettingsDialog.Designer.cs">
       <DependentUpon>SettingsDialog.cs</DependentUpon>
     </Compile>
+    <Compile Include="Dialogs\UploadConfirmation.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Dialogs\UploadConfirmation.Designer.cs">
+      <DependentUpon>UploadConfirmation.cs</DependentUpon>
+    </Compile>
     <Compile Include="Forms\EditorForm.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -208,6 +214,7 @@
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <None Include="Release\EsPy.1.0.0.7.7z" />
+    <None Include="Release\EsPy.1.0.0.9.7z" />
     <None Include="Resources\error16.png" />
     <None Include="Resources\info.png" />
     <None Include="Resources\compile.png" />
@@ -237,6 +244,9 @@
     <EmbeddedResource Include="Dialogs\SettingsDialog.resx">
       <DependentUpon>SettingsDialog.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="Dialogs\UploadConfirmation.resx">
+      <DependentUpon>UploadConfirmation.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Forms\EditorForm.resx">
       <DependentUpon>EditorForm.cs</DependentUpon>
     </EmbeddedResource>

+ 55 - 6
EsPy/Forms/EditorForm.Designer.cs

@@ -55,6 +55,10 @@
             this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
             this.mnShowEol = new System.Windows.Forms.ToolStripMenuItem();
             this.mnShowWhitespace = new System.Windows.Forms.ToolStripMenuItem();
+            this.deviceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripSeparator();
+            this.mnRun = new System.Windows.Forms.ToolStripMenuItem();
+            this.mnUpload = new System.Windows.Forms.ToolStripMenuItem();
             this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
             this.cmUndo = new System.Windows.Forms.ToolStripMenuItem();
             this.cmRedo = new System.Windows.Forms.ToolStripMenuItem();
@@ -97,7 +101,8 @@
             this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.FileMenuItem,
             this.mnEdit,
-            this.mnView});
+            this.mnView,
+            this.deviceToolStripMenuItem});
             this.menuStrip1.Location = new System.Drawing.Point(0, 0);
             this.menuStrip1.Name = "menuStrip1";
             this.menuStrip1.Size = new System.Drawing.Size(636, 24);
@@ -123,7 +128,8 @@
             this.mnSave.MergeAction = System.Windows.Forms.MergeAction.Replace;
             this.mnSave.MergeIndex = 3;
             this.mnSave.Name = "mnSave";
-            this.mnSave.Size = new System.Drawing.Size(152, 22);
+            this.mnSave.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
+            this.mnSave.Size = new System.Drawing.Size(138, 22);
             this.mnSave.Text = "Save";
             this.mnSave.Click += new System.EventHandler(this.mnSave_Click);
             // 
@@ -132,7 +138,7 @@
             this.mnSaveAs.MergeAction = System.Windows.Forms.MergeAction.Replace;
             this.mnSaveAs.MergeIndex = 4;
             this.mnSaveAs.Name = "mnSaveAs";
-            this.mnSaveAs.Size = new System.Drawing.Size(152, 22);
+            this.mnSaveAs.Size = new System.Drawing.Size(138, 22);
             this.mnSaveAs.Text = "Save as...";
             this.mnSaveAs.Click += new System.EventHandler(this.mnSaveAs_Click);
             // 
@@ -347,6 +353,46 @@
             this.mnShowWhitespace.Text = "Show Whitespace";
             this.mnShowWhitespace.Click += new System.EventHandler(this.mnShowWhitespace_Click);
             // 
+            // deviceToolStripMenuItem
+            // 
+            this.deviceToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripMenuItem10,
+            this.mnRun,
+            this.mnUpload});
+            this.deviceToolStripMenuItem.MergeAction = System.Windows.Forms.MergeAction.MatchOnly;
+            this.deviceToolStripMenuItem.Name = "deviceToolStripMenuItem";
+            this.deviceToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
+            this.deviceToolStripMenuItem.Text = "Device";
+            // 
+            // toolStripMenuItem10
+            // 
+            this.toolStripMenuItem10.MergeAction = System.Windows.Forms.MergeAction.Insert;
+            this.toolStripMenuItem10.MergeIndex = 2;
+            this.toolStripMenuItem10.Name = "toolStripMenuItem10";
+            this.toolStripMenuItem10.Size = new System.Drawing.Size(151, 6);
+            // 
+            // mnRun
+            // 
+            this.mnRun.Image = global::EsPy.Properties.Resources.play1;
+            this.mnRun.MergeAction = System.Windows.Forms.MergeAction.Insert;
+            this.mnRun.MergeIndex = 3;
+            this.mnRun.Name = "mnRun";
+            this.mnRun.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R)));
+            this.mnRun.Size = new System.Drawing.Size(154, 22);
+            this.mnRun.Text = "Run";
+            this.mnRun.Click += new System.EventHandler(this.btnRun_Click);
+            // 
+            // mnUpload
+            // 
+            this.mnUpload.Image = global::EsPy.Properties.Resources.upload1;
+            this.mnUpload.MergeAction = System.Windows.Forms.MergeAction.Insert;
+            this.mnUpload.MergeIndex = 4;
+            this.mnUpload.Name = "mnUpload";
+            this.mnUpload.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.U)));
+            this.mnUpload.Size = new System.Drawing.Size(154, 22);
+            this.mnUpload.Text = "Upload";
+            this.mnUpload.Click += new System.EventHandler(this.btnUpload_Click);
+            // 
             // contextMenuStrip1
             // 
             this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -690,7 +736,6 @@
             this.scintilla.AutomaticFold = ((ScintillaNET.AutomaticFold)(((ScintillaNET.AutomaticFold.Show | ScintillaNET.AutomaticFold.Click) 
             | ScintillaNET.AutomaticFold.Change)));
             this.scintilla.CaretLineBackColorAlpha = 128;
-            this.scintilla.CompletionEnabled = false;
             this.scintilla.ContextMenuStrip = this.contextMenuStrip1;
             this.scintilla.Dock = System.Windows.Forms.DockStyle.Fill;
             this.scintilla.EdgeColumn = 80;
@@ -698,10 +743,10 @@
             this.scintilla.IndentationGuides = ScintillaNET.IndentView.LookBoth;
             this.scintilla.IndentWidth = 4;
             this.scintilla.Lexer = ScintillaNET.Lexer.Html;
-            this.scintilla.Location = new System.Drawing.Point(0, 24);
+            this.scintilla.Location = new System.Drawing.Point(0, 39);
             this.scintilla.MouseDwellTime = 500;
             this.scintilla.Name = "scintilla";
-            this.scintilla.Size = new System.Drawing.Size(636, 238);
+            this.scintilla.Size = new System.Drawing.Size(636, 223);
             this.scintilla.TabIndex = 2;
             this.scintilla.SavePointLeft += new System.EventHandler<System.EventArgs>(this.scintilla_SavePointLeft);
             this.scintilla.SavePointReached += new System.EventHandler<System.EventArgs>(this.scintilla_SavePointReached);
@@ -788,5 +833,9 @@
         private System.Windows.Forms.ToolStripMenuItem cmShowWhitespace;
         private System.Windows.Forms.ToolStripMenuItem btnHelp;
         private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5;
+        private System.Windows.Forms.ToolStripMenuItem deviceToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem mnRun;
+        private System.Windows.Forms.ToolStripMenuItem mnUpload;
+        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem10;
     }
 }

+ 15 - 5
EsPy/Forms/EditorForm.cs

@@ -43,7 +43,8 @@ namespace EsPy.Forms
             this.DockAreas = DockAreas.Document;
             this.EOLVisible = Properties.Settings.Default.EolVisible;
             this.WhitespaceVisible = Properties.Settings.Default.WhitespaceVisible;
-            this.scintilla.CompletionEnabled = true;
+            
+            
         }
 
         public EditorForm(MainForm main_form) : this()
@@ -82,8 +83,6 @@ namespace EsPy.Forms
                     !this.Port.Busy &&
                     this.FileName != null &&
                     Path.GetExtension(this.FileName) == ".py";
-                    //this.FileName.EndsWith == Lexer.Python;
-
             }
         }
 
@@ -399,11 +398,12 @@ namespace EsPy.Forms
 
         public void UpdateUI()
         {
-
+            this.mnUpload.Enabled =
             this.btnUpload.Enabled = this.Port != null
                 && this.Port.IsOpen && !this.Port.Busy;
 
-            this.btnRun.Enabled = this.IsRunnable;
+            this.mnRun.Enabled =
+                this.btnRun.Enabled = this.IsRunnable;
 
             this.scintilla.Margins[0].Width = this.scintilla.TextWidth(Style.LineNumber, " " + (this.scintilla.Lines.Count + 1).ToString());
 
@@ -614,6 +614,16 @@ namespace EsPy.Forms
             this.Port.Sync(true);
             this.Port.Clean();
 
+            //UploadConfirmation dd = new UploadConfirmation();
+            //dd.Port = this.Port;
+            //dd.ShowDialog();
+
+            //this.Port.Clean();
+            //this.Port.Sync(false);
+            //Globals.Terminal.Locked = false;
+
+            //return;
+
             ProgressDialog d = new ProgressDialog();
             d.Port = this.Port;
             d.Mode = ProgressDialog.Modes.Upload;

+ 24 - 25
EsPy/Forms/TerminalForm.Designer.cs

@@ -38,6 +38,7 @@
             this.mnShowWhitespace = new System.Windows.Forms.ToolStripMenuItem();
             this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
             this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
             this.osToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
             this.cmSoftReset = new System.Windows.Forms.ToolStripMenuItem();
@@ -56,7 +57,6 @@
             this.advancedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.cmShowEOL = new System.Windows.Forms.ToolStripMenuItem();
             this.cmShowWhitespace = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
             this.scintilla = new EsPy.Components.Terminal();
             this.menuStrip1.SuspendLayout();
             this.toolStrip1.SuspendLayout();
@@ -101,7 +101,7 @@
             this.mnUndo.MergeIndex = 0;
             this.mnUndo.Name = "mnUndo";
             this.mnUndo.ShortcutKeyDisplayString = "Ctrl+Z";
-            this.mnUndo.Size = new System.Drawing.Size(144, 22);
+            this.mnUndo.Size = new System.Drawing.Size(152, 22);
             this.mnUndo.Text = "Undo";
             // 
             // mnRedo
@@ -111,7 +111,7 @@
             this.mnRedo.MergeIndex = 1;
             this.mnRedo.Name = "mnRedo";
             this.mnRedo.ShortcutKeyDisplayString = "Ctrl+Y";
-            this.mnRedo.Size = new System.Drawing.Size(144, 22);
+            this.mnRedo.Size = new System.Drawing.Size(152, 22);
             this.mnRedo.Text = "Redo";
             // 
             // toolStripMenuItem2
@@ -119,7 +119,7 @@
             this.toolStripMenuItem2.MergeAction = System.Windows.Forms.MergeAction.Insert;
             this.toolStripMenuItem2.MergeIndex = 2;
             this.toolStripMenuItem2.Name = "toolStripMenuItem2";
-            this.toolStripMenuItem2.Size = new System.Drawing.Size(141, 6);
+            this.toolStripMenuItem2.Size = new System.Drawing.Size(149, 6);
             // 
             // mnCut
             // 
@@ -128,7 +128,7 @@
             this.mnCut.MergeIndex = 3;
             this.mnCut.Name = "mnCut";
             this.mnCut.ShortcutKeyDisplayString = "Ctrl+X";
-            this.mnCut.Size = new System.Drawing.Size(144, 22);
+            this.mnCut.Size = new System.Drawing.Size(152, 22);
             this.mnCut.Text = "Cut";
             // 
             // mnCopy
@@ -138,7 +138,7 @@
             this.mnCopy.MergeIndex = 4;
             this.mnCopy.Name = "mnCopy";
             this.mnCopy.ShortcutKeyDisplayString = "";
-            this.mnCopy.Size = new System.Drawing.Size(144, 22);
+            this.mnCopy.Size = new System.Drawing.Size(152, 22);
             this.mnCopy.Text = "Copy";
             // 
             // mnPaste
@@ -149,7 +149,7 @@
             this.mnPaste.MergeIndex = 5;
             this.mnPaste.Name = "mnPaste";
             this.mnPaste.ShortcutKeyDisplayString = "Ctrl+V";
-            this.mnPaste.Size = new System.Drawing.Size(144, 22);
+            this.mnPaste.Size = new System.Drawing.Size(152, 22);
             this.mnPaste.Text = "Paste";
             // 
             // mnDelete
@@ -158,7 +158,7 @@
             this.mnDelete.MergeIndex = 6;
             this.mnDelete.Name = "mnDelete";
             this.mnDelete.ShortcutKeyDisplayString = "Del";
-            this.mnDelete.Size = new System.Drawing.Size(144, 22);
+            this.mnDelete.Size = new System.Drawing.Size(152, 22);
             this.mnDelete.Text = "Delete";
             // 
             // mnClean
@@ -167,7 +167,7 @@
             this.mnClean.MergeAction = System.Windows.Forms.MergeAction.Insert;
             this.mnClean.MergeIndex = 7;
             this.mnClean.Name = "mnClean";
-            this.mnClean.Size = new System.Drawing.Size(144, 22);
+            this.mnClean.Size = new System.Drawing.Size(152, 22);
             this.mnClean.Text = "Clean";
             this.mnClean.Click += new System.EventHandler(this.mnClean_Click);
             // 
@@ -176,7 +176,7 @@
             this.toolStripMenuItem3.MergeAction = System.Windows.Forms.MergeAction.Insert;
             this.toolStripMenuItem3.MergeIndex = 8;
             this.toolStripMenuItem3.Name = "toolStripMenuItem3";
-            this.toolStripMenuItem3.Size = new System.Drawing.Size(141, 6);
+            this.toolStripMenuItem3.Size = new System.Drawing.Size(149, 6);
             // 
             // mnSelectAll
             // 
@@ -184,7 +184,7 @@
             this.mnSelectAll.MergeIndex = 9;
             this.mnSelectAll.Name = "mnSelectAll";
             this.mnSelectAll.ShortcutKeyDisplayString = "";
-            this.mnSelectAll.Size = new System.Drawing.Size(144, 22);
+            this.mnSelectAll.Size = new System.Drawing.Size(152, 22);
             this.mnSelectAll.Text = "Select All";
             // 
             // toolStripMenuItem7
@@ -192,7 +192,7 @@
             this.toolStripMenuItem7.MergeAction = System.Windows.Forms.MergeAction.Insert;
             this.toolStripMenuItem7.MergeIndex = 10;
             this.toolStripMenuItem7.Name = "toolStripMenuItem7";
-            this.toolStripMenuItem7.Size = new System.Drawing.Size(141, 6);
+            this.toolStripMenuItem7.Size = new System.Drawing.Size(149, 6);
             // 
             // mnView
             // 
@@ -242,6 +242,16 @@
             this.toolStrip1.Text = "toolStrip1";
             this.toolStrip1.Visible = false;
             // 
+            // toolStripButton1
+            // 
+            this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.toolStripButton1.Image = global::EsPy.Properties.Resources.editclear;
+            this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.toolStripButton1.Name = "toolStripButton1";
+            this.toolStripButton1.Size = new System.Drawing.Size(36, 36);
+            this.toolStripButton1.Text = "toolStripButton1";
+            this.toolStripButton1.Click += new System.EventHandler(this.mnClean_Click);
+            // 
             // osToolStripMenuItem
             // 
             this.osToolStripMenuItem.Name = "osToolStripMenuItem";
@@ -410,35 +420,24 @@
             this.cmShowWhitespace.Text = "Show Whitespace";
             this.cmShowWhitespace.Click += new System.EventHandler(this.mnShowWhitespace_Click);
             // 
-            // toolStripButton1
-            // 
-            this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
-            this.toolStripButton1.Image = global::EsPy.Properties.Resources.editclear;
-            this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
-            this.toolStripButton1.Name = "toolStripButton1";
-            this.toolStripButton1.Size = new System.Drawing.Size(36, 36);
-            this.toolStripButton1.Text = "toolStripButton1";
-            this.toolStripButton1.Click += new System.EventHandler(this.mnClean_Click);
-            // 
             // scintilla
             // 
             this.scintilla.AutoCAutoHide = false;
             this.scintilla.AutoCChooseSingle = true;
             this.scintilla.AutomaticFold = ((ScintillaNET.AutomaticFold)(((ScintillaNET.AutomaticFold.Show | ScintillaNET.AutomaticFold.Click) 
             | ScintillaNET.AutomaticFold.Change)));
-            this.scintilla.CompletionEnabled = false;
             this.scintilla.ContextMenuStrip = this.contextMenuStrip1;
             this.scintilla.Dock = System.Windows.Forms.DockStyle.Fill;
             this.scintilla.EolMode = ScintillaNET.Eol.Cr;
             this.scintilla.IndentationGuides = ScintillaNET.IndentView.LookForward;
             this.scintilla.IndentWidth = 4;
             this.scintilla.Lexer = ScintillaNET.Lexer.Python;
-            this.scintilla.Location = new System.Drawing.Point(0, 0);
+            this.scintilla.Location = new System.Drawing.Point(0, 24);
             this.scintilla.MouseDwellTime = 500;
             this.scintilla.Name = "scintilla";
             this.scintilla.Port = null;
             this.scintilla.ReadOnly = true;
-            this.scintilla.Size = new System.Drawing.Size(664, 262);
+            this.scintilla.Size = new System.Drawing.Size(664, 238);
             this.scintilla.TabIndex = 2;
             this.scintilla.ViewWhitespace = ScintillaNET.WhitespaceMode.VisibleAlways;
             this.scintilla.UpdateUI += new System.EventHandler<ScintillaNET.UpdateUIEventArgs>(this.terminal_UpdateUI);

+ 13 - 6
EsPy/Forms/TerminalForm.cs

@@ -22,11 +22,12 @@ namespace EsPy.Forms
         {
             InitializeComponent();
             this.HideOnClose = true;
-            this.DockAreas = DockAreas.Document 
-                | DockAreas.DockBottom 
-                | DockAreas.DockLeft
-                | DockAreas.DockRight
-                | DockAreas.DockTop;
+            this.DockAreas =
+                DockAreas.Document |
+                DockAreas.DockBottom | 
+                DockAreas.DockLeft |
+                DockAreas.DockRight |
+                DockAreas.DockTop;
             this.scintilla.ReadOnly = true;
             //this.scintilla.Preprocess += new Components.Terminal.PreprocessEvent(TerminalPreprocess);
             
@@ -131,7 +132,13 @@ namespace EsPy.Forms
         }
 
         public ToolStrip ToolStrip
-        { get { return this.toolStrip1; } }
+        {
+            get
+            {
+                //return this.toolStrip1;
+                return null;
+            }
+        }
 
         public ToolStrip MenuStrip
         { get { return this.menuStrip1; } }

+ 78 - 52
EsPy/MainForm.Designer.cs

@@ -54,7 +54,6 @@
             this.mnDevice = new System.Windows.Forms.ToolStripMenuItem();
             this.mnPorts = new System.Windows.Forms.ToolStripMenuItem();
             this.mnFileManager = new System.Windows.Forms.ToolStripMenuItem();
-            this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
             this.mnEspTool = new System.Windows.Forms.ToolStripMenuItem();
             this.mnTools = new System.Windows.Forms.ToolStripMenuItem();
             this.mnWebREPL = new System.Windows.Forms.ToolStripMenuItem();
@@ -89,18 +88,21 @@
             this.btnReset = new System.Windows.Forms.ToolStripButton();
             this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
             this.btnFileManager = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
+            this.btnTerminalClear = new System.Windows.Forms.ToolStripButton();
             this.statusStrip1 = new System.Windows.Forms.StatusStrip();
             this.toolStripStatusLabel4 = new System.Windows.Forms.ToolStripStatusLabel();
             this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();
+            this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
+            this.FilePath = new System.Windows.Forms.ToolStripStatusLabel();
             this.dockPanel1 = new WeifenLuo.WinFormsUI.Docking.DockPanel();
+            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.mnOpenFileFolder = new System.Windows.Forms.ToolStripMenuItem();
             this.vS2015BlueTheme1 = new WeifenLuo.WinFormsUI.Docking.VS2015BlueTheme();
             this.vS2015DarkTheme1 = new WeifenLuo.WinFormsUI.Docking.VS2015DarkTheme();
             this.vS2015LightTheme1 = new WeifenLuo.WinFormsUI.Docking.VS2015LightTheme();
             this.visualStudioToolStripExtender1 = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components);
-            this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
-            this.FilePath = new System.Windows.Forms.ToolStripStatusLabel();
-            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
-            this.mnOpenFileFolder = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();
             this.menuStrip1.SuspendLayout();
             this.toolStrip1.SuspendLayout();
             this.statusStrip1.SuspendLayout();
@@ -149,13 +151,14 @@
             this.mnNewOther});
             this.mnNew.Image = ((System.Drawing.Image)(resources.GetObject("mnNew.Image")));
             this.mnNew.Name = "mnNew";
-            this.mnNew.Size = new System.Drawing.Size(121, 22);
+            this.mnNew.Size = new System.Drawing.Size(185, 22);
             this.mnNew.Text = "New";
             // 
             // mnNewPython
             // 
             this.mnNewPython.Name = "mnNewPython";
-            this.mnNewPython.Size = new System.Drawing.Size(134, 22);
+            this.mnNewPython.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
+            this.mnNewPython.Size = new System.Drawing.Size(164, 22);
             this.mnNewPython.Tag = ".py";
             this.mnNewPython.Text = "Python...";
             this.mnNewPython.Click += new System.EventHandler(this.mnNewPython_Click);
@@ -163,7 +166,7 @@
             // mnNewHtml
             // 
             this.mnNewHtml.Name = "mnNewHtml";
-            this.mnNewHtml.Size = new System.Drawing.Size(134, 22);
+            this.mnNewHtml.Size = new System.Drawing.Size(164, 22);
             this.mnNewHtml.Tag = ".html";
             this.mnNewHtml.Text = "HTML...";
             this.mnNewHtml.Click += new System.EventHandler(this.mnNewHtml_Click);
@@ -171,7 +174,7 @@
             // mnNewCss
             // 
             this.mnNewCss.Name = "mnNewCss";
-            this.mnNewCss.Size = new System.Drawing.Size(134, 22);
+            this.mnNewCss.Size = new System.Drawing.Size(164, 22);
             this.mnNewCss.Tag = ".css";
             this.mnNewCss.Text = "Css...";
             this.mnNewCss.Click += new System.EventHandler(this.mnNewCss_Click);
@@ -179,7 +182,7 @@
             // mnNewJs
             // 
             this.mnNewJs.Name = "mnNewJs";
-            this.mnNewJs.Size = new System.Drawing.Size(134, 22);
+            this.mnNewJs.Size = new System.Drawing.Size(164, 22);
             this.mnNewJs.Tag = ".js";
             this.mnNewJs.Text = "Javascript...";
             this.mnNewJs.Click += new System.EventHandler(this.mnNewJs_Click);
@@ -187,7 +190,7 @@
             // mnNewJson
             // 
             this.mnNewJson.Name = "mnNewJson";
-            this.mnNewJson.Size = new System.Drawing.Size(134, 22);
+            this.mnNewJson.Size = new System.Drawing.Size(164, 22);
             this.mnNewJson.Tag = ".json";
             this.mnNewJson.Text = "JSON...";
             this.mnNewJson.Click += new System.EventHandler(this.mnNewJson_Click);
@@ -195,14 +198,14 @@
             // mnNewTxt
             // 
             this.mnNewTxt.Name = "mnNewTxt";
-            this.mnNewTxt.Size = new System.Drawing.Size(134, 22);
+            this.mnNewTxt.Size = new System.Drawing.Size(164, 22);
             this.mnNewTxt.Text = "Text...";
             this.mnNewTxt.Click += new System.EventHandler(this.mnNewTxt_Click);
             // 
             // mnNewOther
             // 
             this.mnNewOther.Name = "mnNewOther";
-            this.mnNewOther.Size = new System.Drawing.Size(134, 22);
+            this.mnNewOther.Size = new System.Drawing.Size(164, 22);
             this.mnNewOther.Text = "Other...";
             this.mnNewOther.Click += new System.EventHandler(this.mnNewOther_Click);
             // 
@@ -210,20 +213,22 @@
             // 
             this.mnOpen.Image = ((System.Drawing.Image)(resources.GetObject("mnOpen.Image")));
             this.mnOpen.Name = "mnOpen";
-            this.mnOpen.Size = new System.Drawing.Size(121, 22);
+            this.mnOpen.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
+            this.mnOpen.Size = new System.Drawing.Size(185, 22);
             this.mnOpen.Text = "Open...";
             this.mnOpen.Click += new System.EventHandler(this.mnOpen_Click);
             // 
             // toolStripSeparator4
             // 
             this.toolStripSeparator4.Name = "toolStripSeparator4";
-            this.toolStripSeparator4.Size = new System.Drawing.Size(118, 6);
+            this.toolStripSeparator4.Size = new System.Drawing.Size(182, 6);
             // 
             // mnSave
             // 
             this.mnSave.Enabled = false;
             this.mnSave.Name = "mnSave";
-            this.mnSave.Size = new System.Drawing.Size(121, 22);
+            this.mnSave.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
+            this.mnSave.Size = new System.Drawing.Size(185, 22);
             this.mnSave.Text = "Save";
             this.mnSave.Click += new System.EventHandler(this.mnSave_Click);
             // 
@@ -231,7 +236,7 @@
             // 
             this.mnSaveAs.Enabled = false;
             this.mnSaveAs.Name = "mnSaveAs";
-            this.mnSaveAs.Size = new System.Drawing.Size(121, 22);
+            this.mnSaveAs.Size = new System.Drawing.Size(185, 22);
             this.mnSaveAs.Text = "Save as...";
             this.mnSaveAs.Click += new System.EventHandler(this.mnSaveAs_Click);
             // 
@@ -239,19 +244,21 @@
             // 
             this.mnSaveAll.Image = global::EsPy.Properties.Resources.saveall;
             this.mnSaveAll.Name = "mnSaveAll";
-            this.mnSaveAll.Size = new System.Drawing.Size(121, 22);
+            this.mnSaveAll.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) 
+            | System.Windows.Forms.Keys.S)));
+            this.mnSaveAll.Size = new System.Drawing.Size(185, 22);
             this.mnSaveAll.Text = "Save all";
             this.mnSaveAll.Click += new System.EventHandler(this.mnSaveAll_Click);
             // 
             // toolStripMenuItem2
             // 
             this.toolStripMenuItem2.Name = "toolStripMenuItem2";
-            this.toolStripMenuItem2.Size = new System.Drawing.Size(118, 6);
+            this.toolStripMenuItem2.Size = new System.Drawing.Size(182, 6);
             // 
             // exitToolStripMenuItem
             // 
             this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
-            this.exitToolStripMenuItem.Size = new System.Drawing.Size(121, 22);
+            this.exitToolStripMenuItem.Size = new System.Drawing.Size(185, 22);
             this.exitToolStripMenuItem.Text = "Exit";
             this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
             // 
@@ -268,7 +275,7 @@
             this.settingsToolStripMenuItem.Enabled = false;
             this.settingsToolStripMenuItem.MergeIndex = 20;
             this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
-            this.settingsToolStripMenuItem.Size = new System.Drawing.Size(125, 22);
+            this.settingsToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
             this.settingsToolStripMenuItem.Text = "Settings...";
             this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click);
             // 
@@ -284,7 +291,7 @@
             // mnTerminal
             // 
             this.mnTerminal.Name = "mnTerminal";
-            this.mnTerminal.Size = new System.Drawing.Size(121, 22);
+            this.mnTerminal.Size = new System.Drawing.Size(152, 22);
             this.mnTerminal.Text = "Terminal";
             this.mnTerminal.Click += new System.EventHandler(this.mnTerminal_Click);
             // 
@@ -293,7 +300,7 @@
             this.mnDevice.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.mnPorts,
             this.mnFileManager,
-            this.toolStripSeparator3,
+            this.toolStripMenuItem4,
             this.mnEspTool});
             this.mnDevice.Name = "mnDevice";
             this.mnDevice.Size = new System.Drawing.Size(54, 20);
@@ -304,7 +311,7 @@
             // 
             this.mnPorts.Image = global::EsPy.Properties.Resources.port;
             this.mnPorts.Name = "mnPorts";
-            this.mnPorts.Size = new System.Drawing.Size(148, 22);
+            this.mnPorts.Size = new System.Drawing.Size(152, 22);
             this.mnPorts.Text = "Ports";
             // 
             // mnFileManager
@@ -312,19 +319,14 @@
             this.mnFileManager.Enabled = false;
             this.mnFileManager.Image = global::EsPy.Properties.Resources.filemanager;
             this.mnFileManager.Name = "mnFileManager";
-            this.mnFileManager.Size = new System.Drawing.Size(148, 22);
+            this.mnFileManager.Size = new System.Drawing.Size(152, 22);
             this.mnFileManager.Text = "Filemanager...";
             this.mnFileManager.Click += new System.EventHandler(this.mnFileManager_Click);
             // 
-            // toolStripSeparator3
-            // 
-            this.toolStripSeparator3.Name = "toolStripSeparator3";
-            this.toolStripSeparator3.Size = new System.Drawing.Size(145, 6);
-            // 
             // mnEspTool
             // 
             this.mnEspTool.Name = "mnEspTool";
-            this.mnEspTool.Size = new System.Drawing.Size(148, 22);
+            this.mnEspTool.Size = new System.Drawing.Size(152, 22);
             this.mnEspTool.Text = "EspTool...";
             this.mnEspTool.Click += new System.EventHandler(this.btnFlashing_Click);
             // 
@@ -339,7 +341,7 @@
             // mnWebREPL
             // 
             this.mnWebREPL.Name = "mnWebREPL";
-            this.mnWebREPL.Size = new System.Drawing.Size(124, 22);
+            this.mnWebREPL.Size = new System.Drawing.Size(152, 22);
             this.mnWebREPL.Text = "WebREPL";
             this.mnWebREPL.Click += new System.EventHandler(this.mnWebREPL_Click);
             // 
@@ -401,7 +403,9 @@
             this.toolStripSeparator1,
             this.btnReset,
             this.toolStripSeparator7,
-            this.btnFileManager});
+            this.btnFileManager,
+            this.toolStripSeparator8,
+            this.btnTerminalClear});
             this.toolStrip1.Location = new System.Drawing.Point(0, 24);
             this.toolStrip1.Name = "toolStrip1";
             this.toolStrip1.Size = new System.Drawing.Size(522, 31);
@@ -629,6 +633,21 @@
             this.btnFileManager.Text = "File Manager";
             this.btnFileManager.Click += new System.EventHandler(this.mnFileManager_Click);
             // 
+            // toolStripSeparator8
+            // 
+            this.toolStripSeparator8.Name = "toolStripSeparator8";
+            this.toolStripSeparator8.Size = new System.Drawing.Size(6, 31);
+            // 
+            // btnTerminalClear
+            // 
+            this.btnTerminalClear.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnTerminalClear.Image = global::EsPy.Properties.Resources.editclear;
+            this.btnTerminalClear.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnTerminalClear.Name = "btnTerminalClear";
+            this.btnTerminalClear.Size = new System.Drawing.Size(28, 28);
+            this.btnTerminalClear.Text = "toolStripButton1";
+            this.btnTerminalClear.Click += new System.EventHandler(this.btnTerminalClear_Click);
+            // 
             // statusStrip1
             // 
             this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -657,6 +676,18 @@
             this.toolStripStatusLabel2.Text = "---";
             this.toolStripStatusLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
             // 
+            // toolStripStatusLabel1
+            // 
+            this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
+            this.toolStripStatusLabel1.Size = new System.Drawing.Size(28, 17);
+            this.toolStripStatusLabel1.Text = "File:";
+            // 
+            // FilePath
+            // 
+            this.FilePath.Name = "FilePath";
+            this.FilePath.Size = new System.Drawing.Size(22, 17);
+            this.FilePath.Text = "---";
+            // 
             // dockPanel1
             // 
             this.dockPanel1.ContextMenuStrip = this.contextMenuStrip1;
@@ -672,37 +703,30 @@
             this.dockPanel1.ActiveDocumentChanged += new System.EventHandler(this.dockPanel1_ActiveDocumentChanged);
             this.dockPanel1.ActiveContentChanged += new System.EventHandler(this.dockPanel1_ActiveContentChanged);
             // 
-            // visualStudioToolStripExtender1
-            // 
-            this.visualStudioToolStripExtender1.DefaultRenderer = null;
-            // 
-            // toolStripStatusLabel1
-            // 
-            this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
-            this.toolStripStatusLabel1.Size = new System.Drawing.Size(28, 17);
-            this.toolStripStatusLabel1.Text = "File:";
-            // 
-            // FilePath
-            // 
-            this.FilePath.Name = "FilePath";
-            this.FilePath.Size = new System.Drawing.Size(22, 17);
-            this.FilePath.Text = "---";
-            // 
             // contextMenuStrip1
             // 
             this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.mnOpenFileFolder});
             this.contextMenuStrip1.Name = "contextMenuStrip1";
-            this.contextMenuStrip1.Size = new System.Drawing.Size(153, 48);
+            this.contextMenuStrip1.Size = new System.Drawing.Size(149, 26);
             this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening);
             // 
             // mnOpenFileFolder
             // 
             this.mnOpenFileFolder.Name = "mnOpenFileFolder";
-            this.mnOpenFileFolder.Size = new System.Drawing.Size(152, 22);
+            this.mnOpenFileFolder.Size = new System.Drawing.Size(148, 22);
             this.mnOpenFileFolder.Text = "Open Folder...";
             this.mnOpenFileFolder.Click += new System.EventHandler(this.mnOpenFileFolder_Click);
             // 
+            // visualStudioToolStripExtender1
+            // 
+            this.visualStudioToolStripExtender1.DefaultRenderer = null;
+            // 
+            // toolStripMenuItem4
+            // 
+            this.toolStripMenuItem4.Name = "toolStripMenuItem4";
+            this.toolStripMenuItem4.Size = new System.Drawing.Size(149, 6);
+            // 
             // MainForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -788,7 +812,6 @@
         private System.Windows.Forms.ToolStripMenuItem mnNewOther;
         private System.Windows.Forms.ToolStripMenuItem mnFileManager;
         private System.Windows.Forms.ToolStripMenuItem mnWebREPL;
-        private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
         private System.Windows.Forms.ToolStripMenuItem mnEspTool;
         private System.Windows.Forms.ToolStripMenuItem btnNewPython;
         private System.Windows.Forms.ToolStripMenuItem btnNewHtml;
@@ -805,6 +828,9 @@
         private System.Windows.Forms.ToolStripStatusLabel FilePath;
         private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
         private System.Windows.Forms.ToolStripMenuItem mnOpenFileFolder;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
+        private System.Windows.Forms.ToolStripButton btnTerminalClear;
+        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem4;
     }
 }
 

+ 26 - 9
EsPy/MainForm.cs

@@ -251,8 +251,15 @@ namespace EsPy
             }
             else
             {
-                deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString);
-                dockPanel1.LoadFromXml(configFile, this.deserializeDockContent);
+                try
+                {
+                    deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString);
+                    dockPanel1.LoadFromXml(configFile, this.deserializeDockContent);
+                }
+                catch (Exception ex)
+                {
+                    Helpers.ErrorBox(ex.Message);                    
+                }
             }
 
             this.CurretPortName = Properties.Settings.Default.PortName;
@@ -262,7 +269,7 @@ namespace EsPy
                 this.TerminalForm = new TerminalForm();
                 this.TerminalForm.Show(this.dockPanel1);
             }
-
+            //
             //if (!this.ComportIsExists)
             //{
             //    this.btnConnect.Enabled = false;
@@ -381,6 +388,9 @@ namespace EsPy
 
         private void mnTerminal_Click(object sender, EventArgs e)
         {
+            if (this.TerminalForm == null)
+                this.TerminalForm = new TerminalForm();
+
             this.TerminalForm.Show(this.dockPanel1);
             this.UpdateUI();
         }
@@ -397,6 +407,8 @@ namespace EsPy
                     return this.TerminalForm;
                 this.TerminalForm = new TerminalForm();
                 this.TerminalForm.IsHidden = false;
+                if(this.TerminalForm.DockState == DockState.Document)
+                    this.TerminalForm.DockState = DockState.DockRight;
                 return this.TerminalForm;
             }
             //else if (persistString == typeof(ErrorListForm).ToString())
@@ -453,7 +465,8 @@ namespace EsPy
             {
                 IDocument doc = this.dockPanel1.ActiveDocument as IDocument;
                 doc.CanPaste = Clipboard.ContainsText();
-                doc.UpdateUI();
+                this.FilePath.Text = doc.FileName;
+                //doc.UpdateUI();
             }
             else
             {
@@ -814,7 +827,7 @@ namespace EsPy
         {
             foreach (DockContent dc in this.dockPanel1.Documents)
             {
-                if (dc is IDockDragSource)
+                if (dc is IDocument)
                 {
                     IDocument d = dc as IDocument;
                     if (d.Modified)
@@ -833,9 +846,7 @@ namespace EsPy
                     mi.Click -= Port_Click;
             }
             mnPorts.DropDownItems.Clear();
-
             mnPorts.DropDownItems.Clear();
-
             string[] ports = System.IO.Ports.SerialPort.GetPortNames();
             if (ports != null && ports.Length > 0)
             {
@@ -849,7 +860,6 @@ namespace EsPy
                     {
                         mi.Checked = true;
                     }
-
                     this.mnPorts.DropDownItems.Add(mi);
                 }
             }
@@ -860,7 +870,6 @@ namespace EsPy
                 mi.Enabled = false;
                 this.mnPorts.DropDownItems.Add(mi);
             }
-
             //this.mnEspTool.Enabled = this.Port == null && this.ComportIsExists;
         }
 
@@ -1017,5 +1026,13 @@ namespace EsPy
         {
             mnOpenFileFolder.Enabled = this.dockPanel1.ActiveDocument != null && this.dockPanel1.ActiveDocument is IDocument;
         }
+
+        private void btnTerminalClear_Click(object sender, EventArgs e)
+        {
+            if (this.TerminalForm != null)
+            {
+                this.TerminalForm.scintilla.Clean();
+            }
+        }
     }
 }

+ 1 - 1
EsPy/MainForm.resx

@@ -479,6 +479,6 @@
     <value>17, 56</value>
   </metadata>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>78</value>
+    <value>47</value>
   </metadata>
 </root>

+ 2 - 2
EsPy/Properties/AssemblyInfo.cs

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.7")]
-[assembly: AssemblyFileVersion("1.0.0.7")]
+[assembly: AssemblyVersion("1.0.0.9")]
+[assembly: AssemblyFileVersion("1.0.0.9")]

+ 4 - 4
EsPy/packages.config

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="DockPanelSuite" version="2.11.0-beta2" targetFramework="net46" />
-  <package id="DockPanelSuite.ThemeVS2015" version="2.11.0-beta2" targetFramework="net46" />
-  <package id="jacobslusser.ScintillaNET" version="3.5.10" targetFramework="net46" />
-  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net46" />
+  <package id="DockPanelSuite" version="3.0.3" targetFramework="net46" />
+  <package id="DockPanelSuite.ThemeVS2015" version="3.0.3" targetFramework="net46" />
+  <package id="jacobslusser.ScintillaNET" version="3.6.3" targetFramework="net46" />
+  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
 </packages>