1 module button_page; 2 3 import awebview.gui.html; 4 import awebview.wrapper; 5 import awebview.gui.widgets.button; 6 import awebview.gui.activity; 7 import awebview.gui.application; 8 import awebview.gui.contextmenu; 9 import std.conv; 10 import core.time; 11 12 import carbon.utils; 13 import carbon.nonametype; 14 import carbon.functional; 15 16 class ButtonPage : TemplateHTMLPage!(import(`button_page.html`)) 17 { 18 this() 19 { 20 super("buttonPage", null); 21 22 this ~= (new InputButton!()("input_button")).observe!((a){ 23 a.staticProps["value"] = "Click me!"; 24 a.onClick.connect!"onClickInputButton"(this); 25 }); 26 27 this ~= (new GenericButton!(`<div id="%[id%]">Click me!</div>`)("div_button")).observe!((a){ 28 a.onClick.connect!"onClickDiv"(this); 29 }); 30 31 _menu = new PopupMenu("PopupMenuPage"); 32 } 33 34 35 void onClickInputButton(FiredContext ctx, WeakRef!(const(JSArrayCpp)) args) 36 { 37 auto popup = application.to!SDLApplication.popupActivity; 38 popup.popup(_menu, this.activity.to!SDLActivity); 39 } 40 41 42 void onClickDiv(FiredContext ctx, WeakRef!(const(JSArrayCpp)) args) 43 { 44 class Menu : DeclareHoverSignal!(TemplateHTMLElement!(`<div id="%[id%]">Click me!</div>`)) 45 { 46 this(string id) { super(id, true); } 47 48 override 49 void onHover(bool bOver, Duration d) 50 { 51 auto thisAct = this.activity.to!SDLPopupActivity; 52 if(bOver){ 53 if(d > 300.msecs && (thisAct.childPopup is null || thisAct.childPopup.isDetached)){ 54 auto innerH = thisAct.nowPage.to!ContextMenuListPage.offsetTop(2); 55 thisAct.popupChildRight(_menu, innerH); 56 } 57 } 58 } 59 } 60 61 auto popup = application.to!SDLApplication.popupActivity; 62 auto page = new ContextMenuListPage( 63 "fooo", 64 "foooo000", 65 '-', 66 new Menu("div_button2") 67 ); 68 popup.popup(page, this.activity.to!SDLActivity); 69 } 70 71 72 void onMouseOverMenuItemDiv(FiredContext ctx, WeakRef!(const(JSArrayCpp)) args) 73 { 74 auto popup = application.to!SDLApplication.popupActivity; 75 auto innerH = popup.nowPage.to!ContextMenuListPage.offsetTop(2); 76 popup.popupChildRight(_menu, innerH); 77 } 78 79 80 private: 81 PopupMenu _menu; 82 } 83 84 85 class PopupMenu : TemplateHTMLPage!(import(`button_page_menu.html`)) 86 { 87 this(string id) 88 { 89 super(id, null); 90 91 this ~= (){ 92 auto btn = new InputButton!(["style": "width:150px;height:50px;margin:0px;padding:0px"])("btnOpenNewMenuChild"); 93 btn.staticProps["value"] = "Open new menu!"; 94 btn.onClick.connect!"onClickOpenNewMenuChild"(this); 95 return btn; 96 }(); 97 } 98 99 100 void onClickOpenNewMenuChild(FiredContext ctx, WeakRef!(const(JSArrayCpp)) args) 101 { 102 this.activity.to!SDLPopupActivity.popupChildRight(new PopupMenu(this.id), 10); 103 } 104 }