import { FairyGUI, FairyEditor, System } from 'csharp'; import { genCodeTs } from './GenCode_TypeScript'; import { genCodeCS } from './GenCode_CSharp'; const App = FairyEditor.App; App.pluginManager.LoadUIPackage(App.pluginManager.basePath + "/" + eval("__dirname") + '/CustomInspector') class ExportCodeFlagInspector extends FairyEditor.View.PluginInspector { // 是否生成代码按钮 private combo: FairyGUI.GButton; private ctrl_ref: FairyGUI.Controller; // UIType下拉框 private uitypeBox: FairyGUI.GComboBox; // UILayer下拉框 private uilayerBox: FairyGUI.GComboBox; private genCodeKey = "gencode"; private genuitypeKey = "genuitype"; private genuilayerKey = "genuilayer"; public constructor() { super(); this.panel = FairyGUI.UIPackage.CreateObject("CustomInspector", "ExportCodeFlag").asCom; this.ctrl_ref = this.panel.GetController("ref") this.combo = this.panel.GetChild("check").asButton; this.uitypeBox = this.panel.GetChild("UITypeBox").asComboBox; this.uilayerBox = this.panel.GetChild("UILayerBox").asComboBox; //生成代码开关 this.combo.onChanged.Add(() => { let obj = App.activeDoc.inspectingTarget //use obj.docElement.SetProperty('xxx',..) instead of obj.xxx = ... to enable undo/redo mechanism // obj.docElement.SetProperty("customData", this.combo.value) // console.log("set gencode:" + obj._res.packageItem.id) this.SetScriptData(obj, this.genCodeKey, this.combo.selected ? "1" : "0"); // if (obj.docElement.isRoot) { // obj.docElement.SetScriptData("gencode" + obj._res.packageItem.id, this.combo.selected ? "1" : "0") // } else { // obj.parent.docElement.SetScriptData("gencode" + obj._res.packageItem.id, this.combo.selected ? "1" : "0") // } }); //选择UIType this.uitypeBox.onChanged.Add(() => { App.consoleView.Log(`uitypeBox onChanged index:${this.uitypeBox.selectedIndex}`); let obj = App.activeDoc.inspectingTarget; this.SetScriptData(obj, this.genuitypeKey, this.uitypeBox.selectedIndex.toString()); }); //选择UILayer this.uilayerBox.onChanged.Add(() => { App.consoleView.Log(`uilayerBox onChanged index:${this.uilayerBox.selectedIndex}`); let obj = App.activeDoc.inspectingTarget; this.SetScriptData(obj, this.genuilayerKey, this.uilayerBox.selectedIndex.toString()); }); this.updateAction = () => { return this.updateUI(); }; } private updateUI(): boolean { let sels = App.activeDoc.inspectingTargets let obj = sels.get_Item(0) as FairyEditor.FComponent this.ctrl_ref.SetSelectedPage("false") this.uitypeBox.selectedIndex = 0; // 默认UIPanel if (obj.docElement.isRoot) { this.combo.selected = this.GetAttribute(obj, this.genCodeKey) == "1"; //TODO 初始化赋值 this.uitypeBox.selectedIndex = Number(this.GetAttribute(obj, this.genuitypeKey)); let genuilayer = this.GetAttribute(obj, this.genuilayerKey); if (genuilayer == null || genuilayer == "") genuilayer = "1"; // 默认为Normal this.uilayerBox.selectedIndex = Number(genuilayer); } else { this.combo.selected = this.GetAttribute(obj.parent, this.genCodeKey) == "1"; this.uitypeBox.selectedIndex = Number(this.GetAttribute(obj.parent, this.genuitypeKey)); let genuilayer = this.GetAttribute(obj.parent, this.genuilayerKey); if (genuilayer == null || genuilayer == "") genuilayer = "1"; // 默认为Normal this.uilayerBox.selectedIndex = Number(genuilayer); this.ctrl_ref.SetSelectedPage("true") // if (obj._pkg.name != obj.parent.pkg.name) { // this.ctrl_ref.SetSelectedPage("true") // } else { // this.ctrl_ref.SetSelectedPage("false") // } } // console.log("current gencode " + obj._res.packageItem.id + " : " + this.combo.selected) return true; //if everything is ok, return false to hide the inspector } private SetScriptData(obj: FairyEditor.FObject, key: string, value: string) { if (!obj.docElement.isRoot) { obj = obj.parent; } obj.docElement.SetScriptData(key + obj._res.packageItem.id, value); } private GetAttribute(obj: FairyEditor.FComponent, key: string): string { return obj.scriptData.GetAttribute(key + obj._res.packageItem.id); } } //Register a inspector App.inspectorView.AddInspector(() => new ExportCodeFlagInspector(), "GenCodeFlag", "标记是否生成代码"); //Condition to show it //App.docFactory.ConnectInspector("GenCodeFlag", "mixed", true, false); App.docFactory.ConnectInspector("GenCodeFlag", "component", false, false); App.docFactory.ConnectInspector("GenCodeFlag", "component", true, false); class LangFlagInspector extends FairyEditor.View.PluginInspector { private combo: FairyGUI.GButton; public constructor() { super(); this.panel = FairyGUI.UIPackage.CreateObject("CustomInspector", "LangFlag").asCom; this.combo = this.panel.GetChild("check").asButton; this.combo.onChanged.Add(() => { let obj = App.activeDoc.inspectingTarget //use obj.docElement.SetProperty('xxx',..) instead of obj.xxx = ... to enable undo/redo mechanism // obj.docElement.SetProperty("customData", this.combo.value) console.log("set lang:" + obj.id) if (obj.docElement.isRoot) { obj.docElement.SetScriptData("lang" + obj.id, this.combo.selected ? "1" : "0") } else { obj.parent.docElement.SetScriptData("lang" + obj.id, this.combo.selected ? "1" : "0") } }); this.updateAction = () => { return this.updateUI(); }; } private updateUI(): boolean { let sels = App.activeDoc.inspectingTargets let obj = sels.get_Item(0) as FairyEditor.FComponent // console.log(obj.objectType) if (obj.objectType == "component") { let ext = checkOtherPackageItemSuperClassType(obj._res.packageItem) // console.log(ext) if(!(ext == "Button" || ext == "Label")) { return false } } else if (!(obj.objectType == "loader" || obj.objectType == "text" || obj.objectType == "richtext")) { return false } console.log("lang" + obj.id) if (obj.docElement.isRoot) { this.combo.selected = obj.scriptData.GetAttribute("lang" + obj.id) == "1" } else { this.combo.selected = obj.parent.scriptData.GetAttribute("lang" + obj.id) == "1" } return true; //if everything is ok, return false to hide the inspector } } function checkOtherPackageItemSuperClassType(pkgItem: FairyEditor.FPackageItem) { let file = System.IO.File.ReadAllText(pkgItem.file) let xml = new FairyGUI.Utils.XML(file) let ext = xml?.GetAttribute("extention") return ext } //Register a inspector App.inspectorView.AddInspector(() => new LangFlagInspector(), "LangFlag", "标记是否多语言对象"); //Condition to show it App.docFactory.ConnectInspector("LangFlag", "mixed", false, false); App.docFactory.ConnectInspector("LangFlag", "loader", false, false); App.docFactory.ConnectInspector("LangFlag", "text", false, false); App.docFactory.ConnectInspector("LangFlag", "richtext", false, false); // -------------------开始生成代码---------------------------- function onPublish(handler: FairyEditor.PublishHandler) { if (!handler.genCode) return; handler.genCode = false; //prevent default output console.log('开始生成CS代码'); // genCodeTs(handler); genCodeCS(handler); } function onDestroy() { //do cleanup here } export { onPublish, onDestroy };