void ItemSelected(LayoutFarm.UI.UIEventArgs e) { //some item is selected WebDom.Impl.HtmlElement srcElem = e.SourceHitElement as WebDom.Impl.HtmlElement; if (srcElem != null) { var domElem = e.SourceHitElement as WebDom.Impl.HtmlElement; if (domElem != null) { //selected value _span_textLabel.ClearAllElements(); _span_textLabel.AddTextContent(domElem.GetInnerText()); } else { #if DEBUG _span_textLabel.ClearAllElements(); _span_textLabel.AddTextContent("???"); #endif } NeedUpdateDom = true; //} } e.StopPropagation(); CloseHinge(); }
CssBox CreateSelectBox(HtmlElement htmlElem, CssBox parentBox, BoxSpec spec, HtmlHost host) { //https://www.w3schools.com/html/html_form_elements.asp //1. as drop-down list //2. as list-box htmlElem.HasSpecialPresentation = true; // LayoutFarm.HtmlWidgets.HingeBox hingeBox = new LayoutFarm.HtmlWidgets.HingeBox(100, 30); //actual controller foreach (DomNode childNode in htmlElem.GetChildNodeIterForward()) { WebDom.Impl.HtmlElement childElem = childNode as WebDom.Impl.HtmlElement; if (childElem != null) { //find a value //if (childElem.WellknownElementName == WellKnownDomNodeName.option) //{ // WebDom.IHtmlOptionElement option = childElem as WebDom.IHtmlOptionElement; // if (option != null) // { // } // //DomAttribute domAttr = childElem.FindAttribute("value"); // //if (domAttr != null) // //{ // // childElem.Tag = domAttr.Value; // //} //} hingeBox.AddItem(childElem); } } HtmlElement hingeBoxDom = hingeBox.GetPresentationDomNode(htmlElem); CssBox cssHingeBox = host.CreateCssBox(parentBox, hingeBoxDom, true); //create and append to the parentBox // hingeBoxDom.SetSubParentNode(htmlElem); cssHingeBox.IsReplacement = true; htmlElem.SpecialPresentationUpdate = (o) => { if (hingeBox.NeedUpdateDom) { cssHingeBox.Clear(); host.UpdateChildBoxes(hingeBoxDom, false); } }; #if DEBUG //cssHingeBox.dbugMark1 = 1; #endif return(cssHingeBox); }
public CssBox CreateBox2(CssBox parentBox, WebDom.Impl.HtmlElement childElement, bool fullmode) { return(CreateBox(parentBox, (HtmlElement)childElement, fullmode)); }
CssBox CreateInputBox(DomElement domE, CssBox parentBox, BoxSpec spec, LayoutFarm.RootGraphic rootgfx, HtmlHost host) { //https://www.w3schools.com/tags/tag_input.asp //button //checkbox //color //date //datetime - local //email //file //hidden //image //month //number //password //radio //range //reset //search //submit //tel //text //time //url //week var typeAttr = domE.FindAttribute("type"); if (typeAttr != null) { switch (typeAttr.Value) { case "password": { var textbox = new LayoutFarm.CustomWidgets.TextBoxContainer(100, 20, false, true); CssBox wrapperBox = CreateWrapper( host, textbox, textbox.GetPrimaryRenderElement(rootgfx), spec, true); //place holder support DomAttribute placeHolderAttr = domE.FindAttribute("placeholder"); if (placeHolderAttr != null) { textbox.PlaceHolderText = placeHolderAttr.Value; } parentBox.AppendChild(wrapperBox); return(wrapperBox); } case "text": { // user can specific width of textbox //var textbox = new LayoutFarm.CustomWidgets.TextBox(100, 17, false); var textbox = new LayoutFarm.CustomWidgets.TextBoxContainer(100, 20, false); CssBox wrapperBox = CreateWrapper( host, textbox, textbox.GetPrimaryRenderElement(rootgfx), spec, true); //place holder support DomAttribute placeHolderAttr = domE.FindAttribute("placeholder"); if (placeHolderAttr != null) { textbox.PlaceHolderText = placeHolderAttr.Value; } parentBox.AppendChild(wrapperBox); return(wrapperBox); } case "button": { //use subdom technique *** //todo: review the technique here var button = new HtmlWidgets.Button(60, 30); var ihtmlElement = domE as LayoutFarm.WebDom.IHtmlElement; if (ihtmlElement != null) { button.Text = ihtmlElement.innerHTML; } else { button.Text = "testButton"; } WebDom.Impl.HtmlElement buttonDom = (WebDom.Impl.HtmlElement)button.GetPresentationDomNode((HtmlDocument)domE.OwnerDocument); buttonDom.SetAttribute("style", "width:20px;height:20px;background-color:white;cursor:pointer"); CssBox buttonCssBox = host.CreateBox(parentBox, buttonDom, true); parentBox.AppendChild(buttonCssBox); return(buttonCssBox); } case "checkbox": { //implement with choice box + multiple value var button = new HtmlWidgets.ChoiceBox(10, 10); button.OnlyOne = false; //*** show as checked box var ihtmlElement = domE as LayoutFarm.WebDom.IHtmlElement; WebDom.Impl.HtmlElement buttonDom = (WebDom.Impl.HtmlElement)button.GetPresentationDomNode((HtmlDocument)domE.OwnerDocument); //buttonDom.SetAttribute("style", "width:20px;height:20px;background-color:red;cursor:pointer"); CssBox buttonCssBox = host.CreateBox(parentBox, buttonDom, true); //create and append to the parentBox #if DEBUG buttonCssBox.dbugMark1 = 1; #endif return(buttonCssBox); } case "radio": { var button = new HtmlWidgets.ChoiceBox(10, 10); button.OnlyOne = true; // show as option box var ihtmlElement = domE as LayoutFarm.WebDom.IHtmlElement; //if (ihtmlElement != null) //{ // button.Text = ihtmlElement.innerHTML; //} //else //{ // button.Text = "testButton"; //} //button.Text = "C"; WebDom.Impl.HtmlElement buttonDom = (WebDom.Impl.HtmlElement)button.GetPresentationDomNode((HtmlDocument)domE.OwnerDocument); //buttonDom.SetAttribute("style", "width:20px;height:20px;background-color:red;cursor:pointer"); CssBox buttonCssBox = host.CreateBox(parentBox, buttonDom, true); //create and append to the parentBox #if DEBUG buttonCssBox.dbugMark1 = 1; #endif return(buttonCssBox); } case "your_box": { //tempfix -> just copy the Button code, //TODO: review here, use proper radio button var box = new LayoutFarm.CustomWidgets.Box(20, 20); CssBox wrapperBox = CreateWrapper( host, box, box.GetPrimaryRenderElement(rootgfx), spec, true); parentBox.AppendChild(wrapperBox); return(wrapperBox); } } } return(null); }