基线:全量源码首提(D1 版本控制落地,含第一轮优化 B1-B4/A1/A4/缩放修复)

This commit is contained in:
dqb-dev
2026-10-01 22:15:22 +08:00
commit 1e65792b09
499 changed files with 204579 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
# -*- 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, "处")