You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
C#
68 lines
2.0 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
|
|
namespace SymbolLibManager
|
|
{
|
|
/// <summary>
|
|
/// 符号管理
|
|
/// 要点:
|
|
/// 1、用户多次点击 -> 不应该弹出多个窗口
|
|
/// 2、窗口被最小化、置后 -> 再点时要“恢复 + 激活“
|
|
/// 3、窗口被关闭/句柄销毁 -> 静态引用要清理
|
|
/// </summary>
|
|
public class SymbolManager : SymbolLibInterface.ISymbolManager
|
|
{
|
|
private static FrmMarkMain frmMain;
|
|
|
|
public void ShowSymbolEditor(string symbolPath)
|
|
{
|
|
ShowSymbolEditor(null, symbolPath);
|
|
}
|
|
public void ShowSymbolEditor(object sender, string symbolPath)
|
|
{
|
|
if (frmMain == null)
|
|
{
|
|
if (!(sender is GeoSigma.UCDraw.MainView view) || view.ViewControl.Geo == null)
|
|
{
|
|
frmMain = new FrmMarkMain(symbolPath);
|
|
}
|
|
else
|
|
{
|
|
frmMain = new FrmMarkMain(view.ViewControl.Geo, symbolPath);
|
|
}
|
|
|
|
frmMain.HandleDestroyed += FrmMain_HandleDestroyed;
|
|
frmMain.Show();
|
|
}
|
|
else
|
|
{
|
|
if (frmMain.WindowState == FormWindowState.Minimized)
|
|
{
|
|
frmMain.WindowState = FormWindowState.Normal;
|
|
}
|
|
|
|
frmMain.Activate();
|
|
frmMain.BringToFront();
|
|
}
|
|
}
|
|
|
|
private void FrmMain_HandleDestroyed(object sender, EventArgs e)
|
|
{
|
|
frmMain = null;
|
|
}
|
|
|
|
private string selectedSymbolName;
|
|
public Form CreateSymbolSelectForm(GeoSigmaDrawLib.GeoSigmaXY geo,
|
|
string symbolPath,
|
|
Func<string, string> acceptSymbolName)
|
|
{
|
|
FrmSymbolSelect frm = new FrmSymbolSelect(geo, symbolPath, ref selectedSymbolName);
|
|
frm.FormClosed += (sender, arg) =>
|
|
{
|
|
acceptSymbolName?.Invoke(frm.SelectedSymbolName);
|
|
};
|
|
return frm;
|
|
}
|
|
}
|
|
}
|