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").passTo!((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").passTo!((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()
101     {
102         this.activity.to!SDLPopupActivity.popupChildRight(new PopupMenu(this.id), 10);
103     }
104 }