100 lines
5.2 KiB
Python
100 lines
5.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""6 个 Fak* handler 数据源切换:fak.db → 方案窗口当前打开的方案文件。
|
|
替换各 handler 内的路径定义为 方案数据源路径(),并把"方案库不存在"提示改为"请先打开方案"。
|
|
另:恢复三组右键菜单挂接(完整功能),并加 方案数据源路径() helper。幂等。"""
|
|
import io
|
|
import re
|
|
|
|
P = r"C:\Users\099978\Documents\SharpDevelop Projects\成套报价软件\成套报价软件\主窗口.菜单与库.cs"
|
|
s = io.open(P, encoding="utf-8-sig").read()
|
|
n = 0
|
|
|
|
# 0) helper 方法(挂在 ReloadFakData 后)
|
|
helper = ''' /// <summary>方案窗口当前打开的方案文件路径(未打开返回 null)。</summary>
|
|
private string 方案数据源路径()
|
|
{
|
|
return (this.w8 != null) ? this.w8.当前方案文件 : null;
|
|
}
|
|
|
|
'''
|
|
if "方案数据源路径()" not in s:
|
|
anchor = " /// <summary>读方案库\"项目信息\"表第一行为字典(无表/无行返回空字典)。</summary>"
|
|
assert anchor in s, "helper 锚点缺失"
|
|
s = s.replace(anchor, helper + anchor, 1)
|
|
n += 1
|
|
|
|
# 1) 6 个 handler 的路径定义+紧邻的存在校验/提示 → 方案数据源路径()+打开提示
|
|
# 模式:string xxx = GetDbFullPath(@"sjk\fak.db");\n if (!File.Exists(xxx)) { 提示 return; }
|
|
pat = re.compile(
|
|
r"([ \t]+)string (fakDbPath|srcDbPath) = GetDbFullPath\(@\"sjk\\\\fak\.db\"\);\r?\n"
|
|
r"[ \t]+if \(!System\.IO\.File\.Exists\(\2\)\)\r?\n"
|
|
r"[ \t]+\{\r?\n"
|
|
r"[ \t]+MessageBox\.Show\(this, \"([^\"]*)\",\r?\n"
|
|
r"[ \t]+\"([^\"]*)\", MessageBoxButtons\.OK, MessageBoxIcon\.(Warning|Information)\);\r?\n"
|
|
r"[ \t]+return;\r?\n"
|
|
r"[ \t]+\}")
|
|
|
|
def sub_fn(m):
|
|
global n
|
|
n += 1
|
|
ind, var, oldmsg, title, icon = m.group(1), m.group(2), m.group(3), m.group(4), m.group(5)
|
|
return (
|
|
ind + "string " + var + " = 方案数据源路径();\n" +
|
|
ind + "if (string.IsNullOrEmpty(" + var + ") || !System.IO.File.Exists(" + var + "))\n" +
|
|
ind + "{\n" +
|
|
ind + " MessageBox.Show(this, \"请先在方案窗口的项目页双击打开一个方案,再进行此操作。\",\n" +
|
|
ind + " \"" + title + "\", MessageBoxButtons.OK, MessageBoxIcon.Information);\n" +
|
|
ind + " return;\n" +
|
|
ind + "}"
|
|
)
|
|
|
|
s, c = pat.subn(sub_fn, s)
|
|
print("路径切换", c, "处")
|
|
n += c
|
|
|
|
# 2) 恢复三组右键菜单挂接(若已被删)
|
|
anchor2 = ''' // ---- 方案窗口(advancedDataGridView图号/箱号/元件)右键菜单已由 DockWindow8 自治挂接
|
|
// (操作对象为当前打开的方案文件,不再是 fak.db)----'''
|
|
restore = ''' // ---- 方案窗口 三表右键菜单(操作当前打开的方案文件)----
|
|
_menuFakTuhao = new ContextMenuStrip();
|
|
_menuFakTuhao.Items.Add("删除图号", null, FakTuhao_Delete_Click);
|
|
_menuFakTuhao.Items.Add(MakeUndoMenuItem());
|
|
_menuFakTuhao.Items.Add(new ToolStripSeparator());
|
|
_menuFakTuhao.Items.Add("插入图号到当前项目", null, FakTuhao_Insert_Click);
|
|
this.advancedDataGridView图号.ContextMenuStrip = _menuFakTuhao;
|
|
Log(" 方案图号菜单已挂到 advancedDataGridView图号(删除/插入到当前项目)");
|
|
|
|
_menuFakXianghao = new ContextMenuStrip();
|
|
_menuFakXianghao.Items.Add("删除箱号", null, FakXianghao_Delete_Click);
|
|
_menuFakXianghao.Items.Add(MakeUndoMenuItem());
|
|
_menuFakXianghao.Items.Add(new ToolStripSeparator());
|
|
_menuFakXianghao.Items.Add("插入箱号到当前项目", null, FakXianghao_Insert_Click);
|
|
this.advancedDataGridView箱号.ContextMenuStrip = _menuFakXianghao;
|
|
Log(" 方案箱号菜单已挂到 advancedDataGridView箱号(删除/插入到当前项目)");
|
|
|
|
_menuFakYuanjian = new ContextMenuStrip();
|
|
_menuFakYuanjian.Items.Add("删除元件", null, FakYuanjian_Delete_Click);
|
|
_menuFakYuanjian.Items.Add(MakeUndoMenuItem());
|
|
_menuFakYuanjian.Items.Add(new ToolStripSeparator());
|
|
_menuFakYuanjian.Items.Add("插入元件到当前项目", null, FakYuanjian_Insert_Click);
|
|
this.advancedDataGridView元件.ContextMenuStrip = _menuFakYuanjian;
|
|
Log(" 方案元件菜单已挂到 advancedDataGridView元件(删除/插入到当前项目)");
|
|
|
|
// ---- 方案窗口(advancedDataGridView图号/箱号/元件)右键菜单已由 DockWindow8 自治挂接
|
|
// (操作对象为当前打开的方案文件,不再是 fak.db)----'''
|
|
if anchor2 in s:
|
|
s = s.replace(anchor2, restore, 1)
|
|
n += 1
|
|
print("菜单挂接已恢复")
|
|
else:
|
|
print("警告: 未找到方案窗口右键挂接注释锚点(可能此前未删除)")
|
|
# 恢复挂接直接追加在 元件菜单挂接 之后
|
|
anchor3 = 'Log(" 元件菜单已挂到 advancedDataGridView5(含「加入用户库」「加入柜体库」+ 行移动)");'
|
|
if anchor3 in s and "_menuFakTuhao = new ContextMenuStrip();" not in s:
|
|
s = s.replace(anchor3, anchor3 + "\n" + restore.split("\n", 2)[2], 1)
|
|
n += 1
|
|
print("挂接已追加到元件菜单后")
|
|
|
|
io.open(P, "w", encoding="utf-8-sig").write(s)
|
|
print("合计", n, "处")
|