aboutsummaryrefslogtreecommitdiffstats
path: root/ethereal/assets/qml/webapp.qml
blob: c34e0dc55cbb173fda9045c7ff618f1ab66847c1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import QtQuick 2.0
import QtWebKit 3.0
import QtWebKit.experimental 1.0
import QtQuick.Controls 1.0;
import QtQuick.Layouts 1.0;
import QtQuick.Window 2.1;
import Ethereum 1.0

ApplicationWindow {
        id: window
        title: "Ethereum"
        width: 900
        height: 600
        minimumHeight: 300

        property alias url: webview.url
        property alias webView: webview

        Item {
                objectName: "root"
                id: root
                anchors.fill: parent
                state: "inspectorShown"

                WebView {
                        objectName: "webView"
                        id: webview
            anchors.fill: parent
            /*
                        anchors {
                                left: parent.left
                                right: parent.right
                                bottom: sizeGrip.top
                                top: parent.top
                        }
            */

                        onTitleChanged: { window.title = title }
                        experimental.preferences.javascriptEnabled: true
                        experimental.preferences.navigatorQtObjectEnabled: true
                        experimental.preferences.developerExtrasEnabled: true
                        experimental.userScripts: [ui.assetPath("ethereum.js")]
                        experimental.onMessageReceived: {
                                //console.log("[onMessageReceived]: ", message.data)
                                var data = JSON.parse(message.data)

                switch(data.call) {
                case "getBlockByNumber":
                    var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")    
                    postData(data._seed, block)
                    break
                case "getBlockByHash":
                    var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")    
                    postData(data._seed, block)
                    break
                case "createTx":
                    if(data.args.length < 5) {
                        postData(data._seed, null)
                    } else {
                        var tx = eth.createTx(data.args[0], data.args[1],data.args[2],data.args[3],data.args[4])
                        postData(data._seed, tx)
                    }
                    break
                case "getStorage":
                    if(data.args.length < 2) {
                        postData(data._seed, null)
                    } else {
                        var stateObject = eth.getStateObject(data.args[0])
                        var storage = stateObject.getStorage(data.args[1])
                        postData(data._seed, storage)
                    }
                    break
                case "getKey":
                    var keys = eth.getKey()
                    postData(data._seed, keys)
                    break
                case "watch":
                    if(data.args.length > 0) {
                        eth.watch(data.args[0]);
                    }
                }
                        }
            function postData(seed, data) {
                webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed}))
            }
            function postEvent(event, data) {
                webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
            }

            function onNewBlockCb(block) {
                postEvent("block:new", block)
            }
            function onObjectChangeCb(stateObject) {
                postEvent("object:change", stateObject)
            }
                }

                Rectangle {
                        id: sizeGrip
                        color: "gray"
                        visible: false
                        height: 10
                        anchors {
                                left: root.left
                                right: root.right
                        }
                        y: Math.round(root.height * 2 / 3)

                        MouseArea {
                                anchors.fill: parent
                                drag.target: sizeGrip
                                drag.minimumY: 0
                                drag.maximumY: root.height
                                drag.axis: Drag.YAxis
                        }
                }

                WebView {
                        id: inspector
                        visible: false
                        url: webview.experimental.remoteInspectorUrl
                        anchors {
                                left: root.left
                                right: root.right
                                top: sizeGrip.bottom
                                bottom: root.bottom
                        }
                }

                states: [
                        State {
                                name: "inspectorShown"
                                PropertyChanges {
                                        target: inspector
                                        url: webview.experimental.remoteInspectorUrl
                                }
                        }
                ]
        }
}