/* * TOPPERS ECHONET Lite Communication Middleware * * Copyright (C) 2015 Cores Co., Ltd. Japan * * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー * スコード中に含まれていること. * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 * の無保証規定を掲載すること. * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ * と. * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 * 作権表示,この利用条件および下記の無保証規定を掲載すること. * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに * 報告すること. * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを * 免責すること. * * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ * の責任を負わない. * * @(#) $Id: Control.cs 101 2015-06-02 15:37:23Z coas-nagasima $ */ using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Html; using System.Linq; using System.Net.WebSockets; using System.Serialization; using System.Text; using System.Text.RegularExpressions; using System.Web; using System.Xml; using control; using ctrlui; using jQueryApi; using Kadecot; namespace control { public static class UI { public static DeviceController.DeviceInfo GetDeviceInfo(this JsonClassInfo dc, WebApiObjectInfo dev, WampApiKadecotDevice device) { DeviceController.DeviceInfo di = new DeviceController.DeviceInfo(dc, dev); di.Data = device; if (dc != null) { foreach (WebApiPropertyInfo prop in dev.properties) { JsonPropertyInfo epi = dc.properties.FirstOrDefault(p => p.propertyCode == prop.epc); if (epi == null) continue; di.Properties.Add(new DeviceController.DevicePropertyInfo(epi, prop)); } } return di; } public static List GetAllDevices(this object args) { dynamic[] devs = (dynamic[])(((dynamic[])args)[4]).deviceList; List alldevs = new List(); var nodes = new Dictionary>(); foreach (dynamic dev in devs) { WampApiKadecotDevice device = new WampApiKadecotDevice(dev); List devices; if (nodes.TryGetValue(device.ip_addr, out devices)) { devices.Add(device); } else { devices = new List(); devices.Add(device); nodes[device.ip_addr] = devices; } alldevs.Add(device); } return alldevs; } /// /// jsonファイルをリストに変換します /// /// /// public static List ToJSClassGroupInfoList(this object data) { dynamic[] _classGroups = (dynamic[])((data.GetType() == typeof(string)) ? jQuery.ParseJson((string)data) : data); List classGroups = new List(); foreach (var _item in _classGroups) { var item = new JsonClassGroupInfo(_item); classGroups.Add(item); } return classGroups; } /// /// jsonファイルをリストに変換します /// /// /// クラス /// public static List ToJSClassInfoList(this object data, JsonClassGroupInfo classGroup) { dynamic[] _classes = (dynamic[])((data.GetType() == typeof(string)) ? jQuery.ParseJson((string)data) : data); List classes = new List(); JsonClassInfo eclass; foreach (var _item in _classes) { eclass = new JsonClassInfo(_item); eclass.classGroup = classGroup; classes.Add(eclass); } return classes; } /// /// jsonファイルをプロパティリストに変換します /// /// /// public static List ToJSPropertyInfoList(this object data) { var _properties = (dynamic[])((data.GetType() == typeof(string)) ? jQuery.ParseJson((string)data) : data); var properties = new List(); foreach (var _item in _properties) { var item = new JsonPropertyInfo(_item); properties.Add(item); } return properties; } /// /// disabledをタグに追加します /// /// /// true: disabledをタグに追加 false: disabledをタグから削除 /// public static jQueryObject Disable(this jQueryObject obj, bool flag) { if (flag) { obj.Attribute("disabled", "disabled"); } else { obj.RemoveAttr("disabled"); } return obj; } /// /// クラスを入れ替えます /// /// /// 削除するクラス /// 追加するクラス /// public static jQueryObject ToggleClass(this jQueryObject obj, string deleteClass, string addClass) { obj.ToggleClass(deleteClass, false); obj.ToggleClass(addClass, true); return obj; } public static jQueryObject GetDeviceBtn(this DeviceController.DeviceInfo di) { return di.GetDeviceLi().Children("a"); } public static jQueryObject GetDeviceLi(this DeviceController.DeviceInfo di) { return jQuery.Select("#li_device_" + di.GetObjectID()); } /// /// 書き込み可であるかどうかしらべます /// /// true:書き込み可,false:書き込み不可 public static bool IsRULE_SET(this DeviceController.DevicePropertyInfo dpi) { return (dpi.PropertyInfo == null) ? false : dpi.PropertyInfo.access.Contains("RULE_SET"); } } public class UIObject { public jQueryObject Object; public Element Element { get { return Object.GetElement(0); } } public UIObject() { } public UIObject(UIObject uiobject) { this.Object = uiobject.Object; } public UIObject(jQueryObject @object) { this.Object = @object; } public UIObject(string html) { this.Object = jQuery.FromHtml(html); } public UIObject Change() { this.Object.Change(); return this; } public void Change(jQueryEventHandlerWithContext eventHandler) { Object.Change(eventHandler); } public void Keypress(jQueryEventHandlerWithContext eventHandler) { Object.Keypress(eventHandler); } public jQueryObject Toggle(bool showOrHide) { return this.Object.Toggle(showOrHide); } public void Attribute(string attributeName, string value) { this.Object.Attribute(attributeName, value); } public void RemoveAttr(string attributeName) { this.Object.RemoveAttr(attributeName); } public string GetAttribute(string attributeName) { return Object.GetAttribute(attributeName); } public jQueryObject Find(string selector) { return this.Object.Find(selector); } public UIObject RemoveClass(string className) { this.Object.RemoveClass(className); return this; } public UIObject ToggleClass(string className, bool add) { this.Object.ToggleClass(className, add); return this; } public UIObject ToggleClass(string deleteClass, string addClass) { this.Object.ToggleClass(deleteClass, addClass); return this; } public UIObject One(string eventName, jQueryEventHandlerWithContext eventHandler) { this.Object.One(eventName, eventHandler); return this; } public UIObject Attribute(JsDictionary nameValueMap) { this.Object.Attribute(nameValueMap); return this; } public UIObject Click(jQueryEventHandlerWithContext eventHandler) { this.Object.Click(eventHandler); return this; } public UIObject Click(jQueryEventHandler eventHandler) { this.Object.Click(eventHandler); return this; } public string Text { get { return Object.GetText(); } set { Object.Text(value); } } public string Id { get { return Object.GetAttribute("id"); } set { Object.Attribute("id", value); } } public string For { get { return Object.GetAttribute("for"); } set { Object.Attribute("for", value); } } public string Name { get { return Object.GetAttribute("name"); } set { Object.Attribute("name", value); } } public string DataRole { get { return Object.GetAttribute("data-role"); } set { Object.Attribute("data-role", value); } } public string DataType { get { return Object.GetAttribute("data-type"); } set { Object.Attribute("data-type", value); } } public string Title { get { return Object.GetAttribute("title"); } set { Object.Attribute("title", value); } } public string Value { get { if (Object.Is("fieldset")) return Object.Find("input[type='radio']:checked").GetValue(); return Object.GetValue(); } set { if (Object.Is("fieldset")) { Object.Find("input[type=\"radio\"]").Each((j, elem) => { if (jQuery.Select(elem).GetValue() == value) { jQuery.Select(elem).Prop("checked", true); } else { jQuery.Select(elem).Prop("checked", false); } }); Object.Find("input[type=\"radio\"]").CheckboxRadio().CheckboxRadio("refresh"); } else { Object.Value(value); if (DataRole == "flipswitch") Object.Value(value).FlipSwitch("refresh"); } } } public int Maxlength { get { return int.Parse(GetAttribute("maxlength")); } set { Attribute("maxlength", value.ToString()); } } public int Min { get { return int.Parse(Object.GetAttribute("min")); } set { Object.Attribute("min", value.ToString()); } } public int Max { get { return int.Parse(Object.GetAttribute("max")); } set { Object.Attribute("max", value.ToString()); } } public int TabIndex { get { return int.Parse(Object.GetAttribute("tabindex")); } set { Object.Attribute("tabindex", value.ToString()); } } public string Type { get { return Object.GetAttribute("type"); } set { Object.Attribute("type", value); } } public void Append(UIObject uiobject) { this.Object.Append(uiobject.Object); } public jQueryObject Append(jQueryObject @object) { return this.Object.Append(@object); } public UIObject Disable(bool flag) { if (flag) { this.Attribute("disabled", "disabled"); } else { this.RemoveAttr("disabled"); } return this; } public jQueryObject Children() { return this.Object.Children(); } public UIObject AddClass(string className) { this.Object.AddClass(className); return this; } /// /// /// /// false:イベント不可 /// public UIObject PointerEvents(bool flag) { if (!flag) { this.Object.CSS("pointer-events", "none"); } return this; } public UIObject Hide() { this.Object.Hide(); return this; } public UIObject Show() { this.Object.Show(); return this; } private EcnlClass ecnlclass; public EcnlClass Class { get { return ecnlclass; } set { ecnlclass = value; this.AddClass(EcnlClassString(value)); } } public enum EcnlClass { ecnl_pink, ecnl_violet, ecnl_light_green, ecnl_light_blue, } private string EcnlClassString(EcnlClass @class) { if (@class == EcnlClass.ecnl_pink) { return "ecnl_pink"; } else if (@class == EcnlClass.ecnl_violet) { return "ecnl_violet"; } else if (@class == EcnlClass.ecnl_light_green) { return "ecnl_light_green"; } else if (@class == EcnlClass.ecnl_light_blue) { return "ecnl_light_blue"; } else { return ""; } } } public class UIGrpBox : UIListviewItem { UILabel Label; public UIGrpBox() : base() { LiAside = new UIP("", "ui-li-aside"); base.Append(LiAside); base.Change(GrpBoxChange); } public UIGrpBox(DeviceController.DevicePropertyInfo dpi) : this() { this.dpi = dpi; Label = new UILabel(dpi); this.dpi.PrepareInputInfo(); if (dpi.PropertyCode == 0x00) { } else if (dpi.PropertyCode == 0x97) { SetTimebox(); } else if (dpi.PropertyCode == 0x98) { SetCalBox(); } else if (this.dpi.InputTypes.Count == 0) { SetTextInput(); } else if (dpi.PropertyCode == 0x80 && dpi.InputTypes.Count == 1 && dpi.InputTypes[0].Mode == PropertyInputMode.Select) { SetFlipSwitch(); } else { foreach (PropertyInputInfo pii in dpi.InputTypes) { switch (pii.Mode) { case PropertyInputMode.Select: { SetFieldSet(pii); } break; case PropertyInputMode.Range: { SetRange(pii); } break; default: { SetDefault(); } break; } } } } public void SetFlipSwitch() { PropertySelectInput psi = (PropertySelectInput)dpi.InputTypes[0]; // OFF var off = psi.Option.First((kvp) => { return kvp.Key == 0x31; }); // ON var on = psi.Option.First((kvp) => { return kvp.Key == 0x30; }); UIOption OFF = new UIOption(off.Value, off.Key.ToString("X2")); UIOption ON = new UIOption(on.Value, on.Key.ToString("X2")); UIFlipSwitch Flipswitch = new UIFlipSwitch(OFF, ON); Flipswitch.Change(this.flip_Change); Flipswitch.Disable(!dpi.IsRULE_SET()); FieldContain = new UIFieldContain(Label, Flipswitch); //FieldContain.Object.Trigger("create"); Append(FieldContain); } public void SetDefault() { UITextInput Textbox = new UITextInput(); Textbox.Change(text_Change); var value = ""/*.ToString("X")*/; Textbox.Value = value; FieldContain = new UIFieldContain(Label, Textbox); Append(FieldContain); } public void SetRange(PropertyInputInfo pii) { UIRangeInput range = new UIRangeInput(); range.Change(range_Change); FieldContain = new UIFieldContain(Label, range); var value = ((PropertyRangeInput)pii).Minimum; range.Value = value; range.Min = ((PropertyRangeInput)pii).Minimum; range.Max = ((PropertyRangeInput)pii).Maximum; Append(FieldContain.Object).Trigger("create"); } private void range_Change(Element elem, jQueryEvent ev) { if (!CheckValiable()) { return; }; if (!CheckHex()) { return; }; byte[] data = ByteValue; dpi.InputData = data; KadecotSet(dpi, data); } private void SetCalBox() { UICalBox Textbox = new UICalBox(); Textbox.Change(calbox_Change); JsonPropertyInfo epi = dpi.PropertyInfo; FieldContain = new UIFieldContain(Label, Textbox); int len = dpi.GetMaxLength(); string valueDescription = ""; foreach (JsonFieldInfo jfi in epi.fields) { valueDescription += "【" + jfi.description + ":" + jfi.valueDescription + "】"; } Textbox.Placeholder = dpi.GetText(); Textbox.Value = ""; //Textbox.Disable(!dpi.IsRULE_SET()); Textbox.ReadOnly = !dpi.IsRULE_SET(); Textbox.Title = valueDescription; One("dateboxcreate", calbox_Create); Append(FieldContain.Object); } private void calbox_Create(Element ele, jQueryEvent ev) { var textinput = jQuery.Select(ev.Target).Parent(".ui-input-datebox"); textinput.Append(BackButton.Object); BackButton.Click(BackButtonClick); } private void calbox_Change(Element elem, jQueryEvent ev) { UICalBox Calbox = (UICalBox)FieldContain.Input; byte[] data = new byte[4]; RemoveClass(); if (!((Calbox.dY >= 1 && Calbox.dY < 9999) && ((Calbox.dM >= 1 && Calbox.dM <= 12) && (Calbox.dD >= 1 && Calbox.dD <= 31)))) { ToggleClass(true ? "ecnl_pink" : "ecnl_violet", true); } else { data[0] = Byte.Parse(Calbox.xY.Substring(0, 2), 16); data[1] = Byte.Parse(Calbox.xY.Substring(2, 2), 16); data[2] = Byte.Parse(Calbox.xM, 16); data[3] = Byte.Parse(Calbox.xD, 16); dpi.InputData = data; dpi.IsWaitRes = true; this.Class = EcnlClass.ecnl_light_green; } } private void flip_Change(Element elem, jQueryEvent ev) { byte[] data = ByteValue; dpi.InputData = data; KadecotSet(dpi, data); } private void SetTextInput() { UITextInput Textbox = new UITextInput(); Textbox.Change(text_Change); Textbox.Keypress(text_KeyPress); Textbox.Keyup(text_Keyup); Textbox.On("textinputcreate", this.text_Create); JsonPropertyInfo epi = dpi.PropertyInfo; string valueDescription = ""; foreach (JsonFieldInfo jfi in epi.fields) { valueDescription += "【" + jfi.description + ":" + jfi.valueDescription + "】"; } Textbox.Value = ""; //Textbox.Disable(!dpi.IsRULE_SET()); Textbox.ReadOnly = !dpi.IsRULE_SET(); Textbox.Maxlength = dpi.GetMaxLength(); Textbox.Title = valueDescription; FieldContain = new UIFieldContain(Label, Textbox); base.Append(FieldContain.Object); } private void SetTimebox() { UITimeBox Textbox = new UITimeBox(); Textbox.Change(timebox_Change); JsonPropertyInfo epi = dpi.PropertyInfo; FieldContain = new UIFieldContain(Label, Textbox); int len = dpi.GetMaxLength(); string valueDescription = ""; foreach (JsonFieldInfo jfi in epi.fields) { valueDescription += "【" + jfi.description + ":" + jfi.valueDescription + "】"; } Textbox.Placeholder = dpi.GetText(); Textbox.Value = ""; Textbox.Title = valueDescription; //Textbox.Disable(!dpi.IsRULE_SET()); Textbox.ReadOnly = !dpi.IsRULE_SET(); this.Append(FieldContain); this.One("dateboxcreate", timebox_Create); } private void SetFieldSet(PropertyInputInfo pii) { UIFieldSet FieldSet = new UIFieldSet(); UILabel Label = new UILabel(); Label.Text = dpi.GetText(); FieldSet.Horizontal = true; FieldSet.Change(select_Change); FieldContain = new UIFieldContain(Label, FieldSet); foreach (KeyValuePair opt in ((PropertySelectInput)pii).Option) { UIRadioInput Radio = new UIRadioInput(opt.Key.ToString("X")); FieldSet.Append(new UIFieldSet.RadioInput(new UILabel(opt.Value), Radio)); } Append(FieldContain.Object); } private void select_Change(Element elem, jQueryEvent ev) { byte[] data = ByteValue; dpi.InputData = data; KadecotSet(dpi, data); } /// /// 時刻入力フォームの入力値が変更された場合 /// /// /// private void timebox_Change(Element ele, jQueryEvent ev) { RemoveClass(); if (Changed) { timebox_Change(); } } private void timebox_Change() { string value = FieldContain.Input.Value; string[] val = value.Split(":"); Byte[] data = new Byte[2]; data[0] = byte.Parse(val[0], 10); data[1] = byte.Parse(val[1], 10); string hex = data[0].ToString("X2") + data[1].ToString("X2"); RemoveClass(); dpi.InputData = data; dpi.IsWaitRes = true; ToggleClass(true ? "ecnl_light_green" : "ecnl_light_blue", true); } private void timebox_Create(Element ele, jQueryEvent ev) { var textinput = jQuery.Select(ev.Target).Parent(".ui-input-datebox"); textinput.Append(BackButton.Object); BackButton.Click(BackButtonClick); } private void text_Keyup(Element elem, jQueryEvent ev) { jQuery.Select(elem).Change(); } private void text_Create(Element elem, jQueryEvent ev) { var textinput = jQuery.Select(ev.Target).Parent(".ui-input-text"); textinput.Append(BackButton.Object); BackButton.Click(BackButtonClick); } private void text_KeyPress(Element elem, jQueryEvent ev) { bool number = (ev.Which >= (int)KeyPress._0 && ev.Which <= (int)KeyPress._9); bool lower = (ev.Which >= (int)KeyPress.a && ev.Which <= (int)KeyPress.f); bool upper = (ev.Which >= (int)KeyPress.A && ev.Which <= (int)KeyPress.F); bool BackSpace = (ev.Which == (int)KeyPress.BackSpace); bool Delete = (ev.Which == (int)KeyPress.Delete); bool flag = (!number && !lower) && (!BackSpace && !Delete) && !upper; if (flag) ev.PreventDefault(); } private void BackButtonClick(Element elem, jQueryEvent ev) { FieldContain.Input.Value = ToText(GetValue); FieldContain.Input.Object.Change(); } private void text_Change(Element elem, jQueryEvent ev) { if (Changed) { RemoveClass(); if (!CheckValiable()) { return; }; if (!CheckHex()) { return; }; SetDpi(); } } private Type InputType { get { return FieldContain.Input.GetType(); } } private byte[] ToByteValue() { string Value = FieldContain.Input.Value; byte[] data = new byte[Value.Length / 2]; for (int i = 0, j = 0; j < Value.Length; j += 2) { data[i++] = Byte.Parse(Value.Substring(j, 2), 16); } return data; } private void SetDpi() { dpi.InputData = ByteValue; dpi.IsWaitRes = true; ErrorText = ""; ToggleClass(user ? "ecnl_light_green" : "ecnl_light_blue", true); } bool user = true; private byte[] ByteValue { get { return ToByteValue(); } } private DeviceController.DevicePropertyInfo dpi; private UIP LiAside; public string ErrorText { get { return LiAside.Text; } set { LiAside.Text = value; } } public byte[] GetValue; public UIFieldContain FieldContain; public void RemoveClass() { ErrorText = ""; BackButton.Hide(); RemoveClass("ecnl_pink"); RemoveClass("ecnl_violet"); RemoveClass("ecnl_light_green"); RemoveClass("ecnl_light_blue"); } public void SetName(string nameid) { string name = nameid; if (InputType == typeof(UICalBox)) { name = "cal_" + nameid; } else if (InputType == typeof(UITimeBox)) { name = "tmb_" + nameid; } else if (InputType == typeof(UITextInput)) { name = "txt_" + nameid; } else if (InputType == typeof(UIRadioInput)) { name = "rng_" + nameid; } else if (InputType == typeof(UIFlipSwitch)) { name = "flp_" + nameid; UIFlipSwitch Flipswitch = (UIFlipSwitch)FieldContain.Input; string val0 = Flipswitch.OFF.Value; string val1 = Flipswitch.ON.Value; Flipswitch.OFF.Id = name + val0; Flipswitch.ON.Id = name + val1; } else if (InputType == typeof(UIFieldSet)) { name = "sel_" + nameid; UIFieldSet FieldSet = (UIFieldSet)FieldContain.Input; FieldSet.Id = name; for (int i = 0; i < FieldSet.RadioList.Count; i++) { var id = name + FieldSet.RadioList[i].Radio.Value; FieldSet.RadioList[i].Radio.Name = name; FieldSet.RadioList[i].Radio.Id = id; FieldSet.RadioList[i].Label.For = id; } } FieldContain.Label.For = name; FieldContain.Input.Id = name; FieldContain.Input.Name = name; } public bool CheckHex() { string Value = FieldContain.Input.Value; if (!new Regex("^([0-9A-Fa-f][0-9A-Fa-f])+$").Test(Value)) { ErrorText = "16進数で入力してください"; ToggleClass(true ? "ecnl_pink" : "ecnl_violet", true); return false; } return true; } public bool CheckValiable() { JsonPropertyInfo epi = dpi.PropertyInfo; //可変長データの場合 bool valiable = dpi.IsValiable(); int len = dpi.GetMaxLength(); string Value = FieldContain.Input.Value; bool length = (Value.Length != len) && (!valiable || (Value.Length > len)); if ((Value.Length != len) && (!valiable || (Value.Length > len))) { ErrorText = len.ToString() + "文字で入力してください"; ToggleClass(user ? "ecnl_pink" : "ecnl_violet", true); return false; } return true; } public string ToTextDefault(byte[] data) { string value = ""; if (data == null) { return ""; } for (int i = 0; i < data.Length; i++) { value += data[i].ToString("X2"); } return value; } public string ToTextTimeBox(byte[] data) { string str = ToTextDefault(data); if (str.Length == 4) { int h = int.Parse("0x" + str.Substr(0, 2)); int m = int.Parse("0x" + str.Substr(2, 2)); return h.ToString("D2") + ":" + m.ToString("D2"); } else { return ""; } } public string ToTextCal(byte[] data) { string str = ToText(data); if (str.Length == 8) { int y = int.Parse("0x" + str.Substr(0, 4)); int m = int.Parse("0x" + str.Substr(4, 2)); int d = int.Parse("0x" + str.Substr(6, 2)); if ((y < 1 || m < 1) || d < 1) { return y.ToString("D4") + "/" + m.ToString("D2") + "/" + m.ToString("D2"); } DateTime date = new DateTime(y, m, d); return date.ToString("yyyy/MM/dd"); } else { return ""; } } public string ToText(byte[] data) { if (data == null) { return ""; } if (FieldContain.Input.GetType().Equals(typeof(UITimeBox))) { return ToTextTimeBox(data); } else if (FieldContain.Input.GetType().Equals(typeof(UICalBox))) { return ToTextCal(data); } else { return ToTextDefault(data); } } /// /// 値が変わった時true /// public bool Changed { get { return !FieldContain.Input.Value.Equals(ToText(GetValue)); } } public void GrpBoxChange(Element ele, jQueryEvent ev) { BackButton.Toggle(Changed); if (!Changed) { dpi.IsWaitRes = false; dpi.InputData = null; RemoveClass(); } } public EventHandlerDevicePropertyInfo KadecotSet; public void SetGetValue(byte[] data) { RemoveClass(); GetValue = data; FieldContain.Input.Value = ToText(data); FieldContain.Input.Change(); } public UIBackButton BackButton = new UIBackButton(); } public class UIBackButton : UIButton { public UIBackButton() : base() { base.ButtonIcon = Icon.back; base.Title = "元に戻す"; base.TabIndex = -1; base.AddClass("text_backButton"); base.Object.Hide(); } } public class UIDiv : UIObject { public UIDiv() : base("
") { } } public class UILabel : UIObject { public UILabel() : base("