public static TjsArray ScaleButton(TjsDict dict, string name, double scaleX, double scaleY) { TjsValue v = null; if (dict.val.TryGetValue(name, out v)) { // 按钮上多记录了一个是否显示: x, y, shown TjsArray xys = v as TjsArray; if (xys != null && xys.val.Count == 3) { TjsNumber x = xys.val[0] as TjsNumber; TjsNumber y = xys.val[1] as TjsNumber; TjsNumber s = xys.val[2] as TjsNumber; if (x != null && y != null && s != null) { TjsArray xysnew = CreatePos((int)(x.val * scaleX), (int)(y.val * scaleY)); xysnew.val.Add(new TjsNumber(s.val)); dict.val[name] = xysnew; return(xysnew); } else { Debug.Assert(false, "invalid element in button struct"); } } else { Debug.Assert(false, "invalid button struct"); } } return(null); }
// 修改字典文件 static void ModifyDict(TjsDict dict, int sw, int sh, int dw, int dh) { double scaleX = (double)dw / sw; double scaleY = (double)dh / sh; TjsHelper.ScaleInteger(dict, "left", scaleX); TjsHelper.ScaleInteger(dict, "x", scaleX); TjsHelper.ScaleInteger(dict, "marginr", scaleX); TjsHelper.ScaleInteger(dict, "marginl", scaleX); TjsHelper.ScaleInteger(dict, "top", scaleY); TjsHelper.ScaleInteger(dict, "y", scaleY); TjsHelper.ScaleInteger(dict, "margint", scaleY); TjsHelper.ScaleInteger(dict, "marginb", scaleY); // 修改locate数组 TjsHelper.ScalePosArray(dict, "locate", scaleX, scaleY); foreach (KeyValuePair <string, TjsValue> kv in dict.val) { TjsDict inner = kv.Value as TjsDict; if (inner != null) { ModifyDict(inner, sw, sh, dw, dh); } } }
public static TjsArray ScalePosArray(TjsDict dict, string name, double scaleX, double scaleY) { TjsValue v = null; if (dict.val.TryGetValue(name, out v)) { // 检查是不是数组 TjsArray arr = v as TjsArray; if (arr != null) { // 从中读取两个元素的坐标数组 List <TjsValue> arraynew = new List <TjsValue>(); foreach (TjsValue pos in arr.val) { Point p = Point.Empty; if (TryGetPos(pos, out p)) { // 按比例缩放 TjsArray posnew = CreatePos((int)(p.X * scaleX), (int)(p.Y * scaleY)); arraynew.Add(posnew); } else { Debug.Assert(false, "invalid struct in pos array"); } } dict.val[name] = new TjsArray(arraynew); return(arr); } } return(null); }
// 修改setting.tjs static void ModifySetting(string dataPath, string title, int sw, int sh, int dh, int dw) { // 更新setting string settingFile = Path.Combine(dataPath, WizardConfig.UI_SETTING); // 临时创建一个属性对象用于读取setting ProjectProperty info = new ProjectProperty(); info.LoadSetting(settingFile); TjsDict setting = info.setting; if (setting != null) { setting.SetString("title", title); setting.SetNumber("width", dw); setting.SetNumber("height", dh); // 修正缩略图宽度 int tw = info.thumbnailwidth; if (tw > 0) { tw = tw * dw / sw; setting.SetValue("savedata/thumbnailwidth", new TjsString(tw.ToString())); } setting.Save(settingFile, Encoding.Unicode); } }
// 修改UI布局文件 static void ModifyLayout(string dataPath, int sw, int sh, int dh, int dw) { // 更新layout string[] layouts = Directory.GetFiles(dataPath, WizardConfig.UI_LAYOUT); foreach (string layout in layouts) { TjsDict setting = TjsValue.Load(layout) as TjsDict; if (setting != null) { ModifyDict(setting, sw, sh, dw, dh); // 对这个文件里的按钮作特殊处理 if (layout.ToLower().EndsWith("uislpos.tjs")) { double scaleX = (double)dw / sw; double scaleY = (double)dh / sh; TjsHelper.ScaleButton(setting, "back", scaleX, scaleY); TjsHelper.ScaleButton(setting, "up", scaleX, scaleY); TjsHelper.ScaleButton(setting, "down", scaleX, scaleY); } } setting.Save(layout, Encoding.Unicode); } }
public void LoadSetting(string file) { setting = null; if (File.Exists(file)) { setting = TjsValue.Load(file) as TjsDict; } }
public static double ScaleInteger(TjsDict dict, string name, double scale) { TjsValue val = dict.GetValue(name); double num = (val != null) ? val.ToDouble() : double.NaN; if (!double.IsNaN(num)) { num = num * scale; dict.SetNumber(name, Math.Floor(num)); return(num); } string str = dict.GetString(name); if (double.TryParse(str, out num)) { num = num * scale; dict.SetString(name, Math.Floor(num).ToString()); return(num); } return(double.NaN); }