using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Public.Fun; using ryCommon; using System; using System.Drawing; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; namespace Itrycn_Project2 { public partial class FrmMainEditor : Form { public static FrmMainEditor MainEditor { get; private set; } public FrmMainEditor() { InitializeComponent(); EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2015, vS2015BlueTheme1); //DragManager = RyFiles.AddDropDrag(Handle); //DragManager.ElevatedDragDrop += FrmMainEditor_ElevatedDragDrop; MainEditor = this; this.AllowDrop = true; this.DragEnter += FrmMainEditor_DragEnter; this.DragDrop += FrmMainEditor_DragDrop; } public DockPanel DockPanel { get { return this.dockPanel; } } private void FrmMainEditor_DragDrop(object sender, DragEventArgs e) { string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false); if (s.Length == 1 && System.IO.Directory.Exists(s[0])) { // } for (int i = 0; i < s.Length; i++) { if (!System.IO.File.Exists(s[i])) { continue; } //OpenFile(s[i], s.Length == 1); } } private void FrmMainEditor_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.All; } else { e.Effect = DragDropEffects.None; } } private void EnableVSRenderer(VisualStudioToolStripExtender.VsVersion version, ThemeBase theme) { vsToolStripExtender1.SetStyle(menuStrip1, version, theme); vsToolStripExtender1.SetStyle(toolStrip1, version, theme); vsToolStripExtender1.SetStyle(statusStrip1, version, theme); } private void 打开ToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog { Filter = "常用格式|*.php;*.cs;*.txt;*.pas;*.js;*.html;*.htm;*.css;*.ini;*.json;*.xml;*.java;*.vbs;*.asp;*.aspx|所有文件|*.*" }; if (dialog.ShowDialog() == DialogResult.OK) { //OpenFile(dialog.FileName,true); } } private Form GetActiveForm() { if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi) return ActiveMdiChild; else if (dockPanel.ActiveDocument != null) return (Form)dockPanel.ActiveDocument; return null; } /// /// 更新列表中的文件信息 /// /// public void UpdateFileState(string path) { foreach (IDockContent document in dockPanel.Contents) { // IMPORANT: dispose all panes. if (document is FrmFileBrowser_New frm2) { frm2.UpdateFileInfo(path); } } } private void 重新读取ToolStripMenuItem_Click(object sender, EventArgs e) { } private void TsOpen_Click(object sender, EventArgs e) { 打开ToolStripMenuItem.PerformClick(); } private bool msg_show = false; private Form last_active_doc= null; private bool ProcUse = false; private void DockPanel_ActiveContentChanged(object sender, EventArgs e) { if (ProcUse) { return; } var form = GetActiveForm(); if (dockPanel.ActiveContent is FrmFileBrowser_New frm_file) { if(frm_file.InitPath.Length>0) { frm_file.GotoPath(frm_file.InitPath,frm_file.Init_Selected_Path); frm_file.InitPath = ""; frm_file.Init_Selected_Path = ""; } } if (form != last_active_doc) { last_active_doc = form; } } private void FrmMainEditor_FormClosing(object sender, FormClosingEventArgs e) { SaveState(); ProcUse = true; QuickMsg.RyMemoryShare.DelMemory("SmartEditor"); //DragManager.ElevatedDragDrop -= FrmMainEditor_ElevatedDragDrop; //DragManager.Remove(); } private void ShowUI(bool changelocation=true) { this.WindowState = FormWindowState.Normal; if (changelocation) { this.Top = (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2; this.Left = (Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2; } bool topmost = this.TopMost; this.TopMost = true; RyForm.BringToTop(Handle); this.TopMost = topmost; } private const int WM_COPYDATA = 0x004A; protected override void WndProc(ref Message m) { switch (m.Msg) { case 17189: #region 显示窗体 switch (m.WParam.ToInt32()) { case 100:// if ((int)m.LParam.ToInt32() == 100) { ShowUI(); } break; } #endregion break; case WM_COPYDATA: switch (m.WParam.ToInt32()) { case 1666: #region 打开文件 //string str = ryConfig.MsgManager.GetMsg(m); //if(System.IO.File.Exists(str)) //{ // ShowUI(false); // OpenFile(str); //} #endregion break; default: break; } break; } base.WndProc(ref m); } private int GetSortOrderInt(System.Windows.Forms.SortOrder sortOrder) { if(sortOrder== System.Windows.Forms.SortOrder.None) { return 0; } else if (sortOrder == System.Windows.Forms.SortOrder.Ascending) { return 1; } else if (sortOrder == System.Windows.Forms.SortOrder.Descending) { return -1; } return 0; } private System.Windows.Forms.SortOrder GetSortOrder(int sortOrder) { if (sortOrder ==0) { return System.Windows.Forms.SortOrder.None; } else if (sortOrder == 1) { return System.Windows.Forms.SortOrder.Ascending; } else if (sortOrder == -1) { return System.Windows.Forms.SortOrder.Descending; } return System.Windows.Forms.SortOrder.None; } /// /// 保存软件状态 /// private void SaveState() { last_save = DateTime.Now; JObject jo = new JObject(); var opens = Application.OpenForms; JArray jarr_workarea = new JArray(); JArray jarr_editor = new JArray(); JArray jarr_ftp = new JArray(); for (int i = 0; i < opens.Count; i++) { if (opens[i] is FrmFileBrowser_New frm_file) { var selected_item = (MyFileSystemInfo)frm_file.olvFiles.SelectedObject; var jo_item = new JObject { { "mode", "file" }, { "text", frm_file.Text }, { "folder", frm_file.CurFolderPath }, { "selected_path", selected_item == null ? "" : selected_item.FullName }, { "visible", frm_file.Visible }, { "SplitterDistance", frm_file.splitContainer1.SplitterDistance }, }; if (frm_file.olvFiles.PrimarySortColumn != null) { jo_item.Add("PrimarySortColumn", frm_file.olvFiles.PrimarySortColumn.AspectName); jo_item.Add("PrimarySortOrder", GetSortOrderInt(frm_file.olvFiles.PrimarySortOrder)); } if (frm_file.olvFiles.SecondarySortColumn != null) { jo_item.Add("SecondarySortColumn", frm_file.olvFiles.SecondarySortColumn.AspectName); jo_item.Add("SecondarySortOrder", GetSortOrderInt(frm_file.olvFiles.SecondarySortOrder)); } for (int c = 0; c < frm_file.olvFiles.AllColumns.Count; c++) { var column = frm_file.olvFiles.AllColumns[c]; jo_item.Add(column.AspectName + "_width", column.Width); jo_item.Add(column.AspectName + "_visible", column.IsVisible ? 1 : 0); } jarr_workarea.Add(jo_item); } } jo.Add("workarea",jarr_workarea); jo.Add("editor_area", jarr_editor); jo.Add("ftp_area", jarr_ftp); jo.Add("DockRightPortion", this.dockPanel.DockRightPortion); jo.Add("DockLeftPortion", this.dockPanel.DockLeftPortion); if (this.WindowState == FormWindowState.Normal) { jo.Add("width", this.Width); jo.Add("height", this.Height); jo.Add("top", this.Top); jo.Add("left", this.Left); } else { jo.Add("width", this.RestoreBounds.Width); jo.Add("height", this.RestoreBounds.Height); jo.Add("top", this.RestoreBounds.Top); jo.Add("left", this.RestoreBounds.Left); } jo.Add("topmost", this.TopMost); Itrycn_Db.SetSetting("EditorState",jo.ToString()); } string EditorState = ""; /// /// 加载软件状态 /// private int LoadState(bool OnlySetUISize=false) { try { if (EditorState.Length == 0) { EditorState =Itrycn_Db.GetSetting("EditorState", ""); } if (EditorState.Length == 0) { return 0; } JObject jo = EditorState.Length == 0 ? new JObject() : JObject.Parse(EditorState); if (OnlySetUISize) { var width = jo["width"].ToInt(); var height = jo["height"].ToInt(); var top = jo["top"].ToInt(); var left = jo["left"].ToInt(); if (width <= 100) { width = 800; } if (height < 100) { height = 500; } var screen = Screen.FromPoint(MousePosition); if (top < screen.WorkingArea.Top || top > screen.WorkingArea.Bottom) { top = screen.WorkingArea.Top + (screen.WorkingArea.Height - height) / 2; } if (left < screen.WorkingArea.Left || left > screen.WorkingArea.Right) { left = screen.WorkingArea.Left + (screen.WorkingArea.Width - width) / 2; } this.Location = new Point(left, top); this.Size = new Size(width, height); this.TopMost = jo["topmost"].ToBool(); } if (!OnlySetUISize) { 置顶显示ToolStripMenuItem.Checked = this.TopMost; menuStrip1.Refresh(); toolStrip1.Refresh(); statusStrip1.Refresh(); //dockPanel.SuspendLayout(); this.SuspendLayout(); dockPanel.DockLeftPortion = jo["DockLeftPortion"].ToDouble(250); dockPanel.DockRightPortion = jo["DockRightPortion"].ToDouble(300); ProcUse = true; if (jo["workarea"] != null) { JArray jarr_workarea = JArray.Parse(jo["workarea"].ToString()); Form def_form = null; for (int i = 0; i < jarr_workarea.Count; i++) { var item = jarr_workarea[i]; var mode = item.GetJsonValue("mode", ""); if (mode == "file") { FrmFileBrowser_New frm = new FrmFileBrowser_New { Text = item["text"].ToString() }; var PrimarySortColumn = item.GetJsonValue("PrimarySortColumn",""); var SecondarySortColumn = item.GetJsonValue("SecondarySortColumn", ""); for (int c = 0; c < frm.olvFiles.AllColumns.Count; c++) { var column = frm.olvFiles.AllColumns[c]; column.Width = item[column.AspectName + "_width"].ToInt(column.Width); column.IsVisible = item[column.AspectName + "_visible"].ToInt(1) == 1; if (column.AspectName == PrimarySortColumn) { frm.olvFiles.PrimarySortColumn = column; frm.olvFiles.PrimarySortOrder = GetSortOrder(item["PrimarySortOrder"].ToInt()); } else if (column.AspectName == SecondarySortColumn) { frm.olvFiles.SecondarySortColumn = column; frm.olvFiles.SecondarySortOrder = GetSortOrder(item["SecondarySortOrder"].ToInt()); } } frm.olvFiles.RebuildColumns(); frm.Show(dockPanel, DockState.DockLeft); frm.splitContainer1.SplitterDistance = item.GetJsonValue("SplitterDistance", "280").ToInt(22, 4000, 280); frm.InitPath = item.GetJsonValue("folder", ""); frm.Init_Selected_Path = item.GetJsonValue("selected_path", ""); frm.CurFolderPath = item.GetJsonValue("folder", ""); //frm.GotoPath(item.GetValue("folder", ""), item.GetValue("selected_path", "")); if (item["visible"].ToBool()) { def_form = frm; } } } if (def_form != null) { var file_frm = (DockContent)def_form; file_frm.Show(dockPanel, DockState.DockLeft); if (file_frm is FrmFileBrowser_New frm1) { frm1.GotoPath(frm1.InitPath, frm1.Init_Selected_Path); frm1.InitPath = ""; frm1.Init_Selected_Path = ""; } } } ProcUse = false; //dockPanel.ResumeLayout(true); this.ResumeLayout(true); } return 1; } catch (Exception ex) { dockPanel.ResumeLayout(true); this.ResumeLayout(true); MessageBox.Show(ex.Message, "状态加载失败", MessageBoxButtons.OK, MessageBoxIcon.Information); return 0; } } private void 置顶显示ToolStripMenuItem_Click(object sender, EventArgs e) { 置顶显示ToolStripMenuItem.Checked = !置顶显示ToolStripMenuItem.Checked; this.TopMost = 置顶显示ToolStripMenuItem.Checked; } private DateTime last_save = DateTime.Now.AddSeconds(-50); private void FrmMainEditor_Deactivate(object sender, EventArgs e) { if (last_save <= DateTime.Now.AddMinutes(-1)) { SaveState(); } } private void 文件浏览器ToolStripMenuItem_Click(object sender, EventArgs e) { var index = 0; var opens = Application.OpenForms; for (int i = 0; i < opens.Count; i++) { if (opens[i] is FrmFileBrowser_New) { index++; } } FrmFileBrowser_New frm = new FrmFileBrowser_New { Text = "文件浏览" + (index == 0 ? "" : index.ToString()) }; frm.Show(dockPanel, DockState.DockLeft); } public string ConvertJsonString(string str) { //格式化json字符串 try { JsonSerializer serializer = new JsonSerializer(); TextReader tr = new StringReader(str); JsonTextReader jtr = new JsonTextReader(tr); object obj = serializer.Deserialize(jtr); if (obj != null) { StringWriter textWriter = new StringWriter(); JsonTextWriter jsonWriter = new JsonTextWriter(textWriter) { Formatting = Formatting.Indented, Indentation = 4, IndentChar = ' ' }; serializer.Serialize(jsonWriter, obj); return textWriter.ToString(); } else { return str; } } catch { return str; } } private string ReplaceRegex(string input,string from,string to) { Regex regex = new Regex(from); return regex.Replace(input, to); } private void FrmMainEditor_Shown(object sender, EventArgs e) { PnlLoad.Dock = DockStyle.Fill; PnlLoad.Parent = this; PnlLoad.Visible = true; PnlLoad.BringToFront(); label1.BringToFront(); Application.DoEvents(); Text = "文本智能编辑器V" + RySoft.VersionStr; QuickMsg.RyMemoryShare.WriteToMemory(this.Handle.ToInt64(), "SmartEditor"); if (LoadState() == 0) { } PnlLoad.Visible = false; } private void FrmMainEditor_Load(object sender, EventArgs e) { LoadState(true); } } }