------ #### OnLineUpgradeConfig V1.0.2501.0601 - *.[修复]修复用户管理列表无法默认勾选已选择用户的BUG。 #### RaUI V4.0.2501.0601 - *.[新增]RyFiles类新增SetFileDate、SetFileCreationTime、SetFileLastWriteTime方法。 - *.[新增]RyFiles.CopyBigFile方法现在会同步来源文件的创建和修改时间。 - *.[新增]ryQuickSQL类新增GetPostData函数,将数据快速转成Post数据。 - *.[改进]执行MySQL下的ExecuteNonQuery时,如果遇到连接关闭错误,允许重连并重新执行。 - *.[改进]IDbInterface在执行新的SQL语句前,自动清空最后错误。 - *.[修复]修复LayeredForm窗体以正常窗体打开的时候,文本框无法编辑的BUG。 - *.[修复]修复ApkOp获取apk权限时可能带乱码的BUG。 - *.[修复]修复WeifenLuo.WinFormsUI.Docking的ResourceManager.GetString路径不对导致报错的BUG。
459 lines
19 KiB
C#
459 lines
19 KiB
C#
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 更新列表中的文件信息
|
|
/// </summary>
|
|
/// <param name="path"></param>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 保存软件状态
|
|
/// </summary>
|
|
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 = "";
|
|
/// <summary>
|
|
/// 加载软件状态
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
}
|