2014-05-27 11:42:37 +03:00
|
|
|
import QtQuick 2.0
|
|
|
|
import QtQuick.Controls 1.0;
|
|
|
|
import QtQuick.Layouts 1.0;
|
|
|
|
import QtQuick.Dialogs 1.0;
|
|
|
|
import QtQuick.Window 2.1;
|
|
|
|
import QtQuick.Controls.Styles 1.1
|
|
|
|
import Ethereum 1.0
|
|
|
|
|
|
|
|
ApplicationWindow {
|
2014-05-29 00:14:23 +03:00
|
|
|
visible: false
|
2014-05-30 12:50:30 +03:00
|
|
|
title: "IceCREAM"
|
2014-05-29 00:14:23 +03:00
|
|
|
minimumWidth: 1280
|
2014-06-26 13:10:11 +03:00
|
|
|
minimumHeight: 700
|
2014-05-29 00:14:23 +03:00
|
|
|
width: 1290
|
2014-06-26 13:10:11 +03:00
|
|
|
height: 700
|
2014-05-27 14:09:47 +03:00
|
|
|
|
2014-05-28 14:00:45 +03:00
|
|
|
property alias codeText: codeEditor.text
|
|
|
|
property alias dataText: rawDataField.text
|
|
|
|
|
2014-05-27 17:23:53 +03:00
|
|
|
MenuBar {
|
|
|
|
Menu {
|
|
|
|
title: "Debugger"
|
|
|
|
MenuItem {
|
|
|
|
text: "Run"
|
|
|
|
shortcut: "Ctrl+r"
|
|
|
|
onTriggered: debugCurrent()
|
|
|
|
}
|
|
|
|
|
|
|
|
MenuItem {
|
|
|
|
text: "Next"
|
|
|
|
shortcut: "Ctrl+n"
|
|
|
|
onTriggered: dbg.next()
|
|
|
|
}
|
|
|
|
}
|
2014-05-29 00:14:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
SplitView {
|
|
|
|
anchors.fill: parent
|
|
|
|
property var asmModel: ListModel {
|
|
|
|
id: asmModel
|
|
|
|
}
|
|
|
|
TableView {
|
|
|
|
id: asmTableView
|
|
|
|
width: 200
|
2014-06-26 19:58:37 +03:00
|
|
|
TableViewColumn{ role: "value" ; title: "" ; width: 200 }
|
2014-05-29 00:14:23 +03:00
|
|
|
model: asmModel
|
|
|
|
}
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
color: "#00000000"
|
|
|
|
anchors.left: asmTableView.right
|
|
|
|
anchors.right: parent.right
|
|
|
|
SplitView {
|
|
|
|
orientation: Qt.Vertical
|
|
|
|
anchors.fill: parent
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
color: "#00000000"
|
2014-06-26 13:10:11 +03:00
|
|
|
height: 330
|
2014-05-29 00:14:23 +03:00
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
|
|
|
TextArea {
|
|
|
|
id: codeEditor
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.right: settings.left
|
|
|
|
}
|
|
|
|
|
|
|
|
Column {
|
|
|
|
id: settings
|
|
|
|
spacing: 5
|
|
|
|
width: 300
|
|
|
|
height: parent.height
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
|
|
|
Label {
|
|
|
|
text: "Arbitrary data"
|
|
|
|
}
|
|
|
|
TextArea {
|
|
|
|
id: rawDataField
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.right: parent.right
|
|
|
|
height: 150
|
|
|
|
}
|
|
|
|
|
|
|
|
Label {
|
|
|
|
text: "Amount"
|
|
|
|
}
|
|
|
|
TextField {
|
|
|
|
id: txValue
|
|
|
|
width: 200
|
|
|
|
placeholderText: "Amount"
|
|
|
|
validator: RegExpValidator { regExp: /\d*/ }
|
|
|
|
}
|
|
|
|
Label {
|
|
|
|
text: "Amount of gas"
|
|
|
|
}
|
|
|
|
TextField {
|
|
|
|
id: txGas
|
|
|
|
width: 200
|
|
|
|
validator: RegExpValidator { regExp: /\d*/ }
|
|
|
|
text: "10000"
|
|
|
|
placeholderText: "Gas"
|
|
|
|
}
|
|
|
|
Label {
|
|
|
|
text: "Gas price"
|
|
|
|
}
|
|
|
|
TextField {
|
|
|
|
id: txGasPrice
|
|
|
|
width: 200
|
|
|
|
placeholderText: "Gas price"
|
|
|
|
text: "1000000000000"
|
|
|
|
validator: RegExpValidator { regExp: /\d*/ }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SplitView {
|
|
|
|
orientation: Qt.Vertical
|
|
|
|
id: inspectorPane
|
|
|
|
height: 500
|
|
|
|
|
|
|
|
SplitView {
|
|
|
|
orientation: Qt.Horizontal
|
|
|
|
height: 150
|
|
|
|
|
|
|
|
TableView {
|
|
|
|
id: stackTableView
|
|
|
|
property var stackModel: ListModel {
|
|
|
|
id: stackModel
|
|
|
|
}
|
|
|
|
height: parent.height
|
|
|
|
width: 300
|
2014-06-14 16:44:32 +03:00
|
|
|
TableViewColumn{ role: "value" ; title: "Temp" ; width: 200 }
|
2014-05-29 00:14:23 +03:00
|
|
|
model: stackModel
|
|
|
|
}
|
|
|
|
|
|
|
|
TableView {
|
|
|
|
id: memoryTableView
|
|
|
|
property var memModel: ListModel {
|
|
|
|
id: memModel
|
|
|
|
}
|
|
|
|
height: parent.height
|
|
|
|
width: parent.width - stackTableView.width
|
|
|
|
TableViewColumn{ id:mnumColmn ; role: "num" ; title: "#" ; width: 50}
|
|
|
|
TableViewColumn{ role: "value" ; title: "Memory" ; width: 750}
|
|
|
|
model: memModel
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
height: 100
|
|
|
|
width: parent.width
|
|
|
|
TableView {
|
|
|
|
id: storageTableView
|
|
|
|
property var memModel: ListModel {
|
|
|
|
id: storageModel
|
|
|
|
}
|
|
|
|
height: parent.height
|
|
|
|
width: parent.width
|
|
|
|
TableViewColumn{ id: key ; role: "key" ; title: "#" ; width: storageTableView.width / 2}
|
2014-06-09 23:04:16 +03:00
|
|
|
TableViewColumn{ role: "value" ; title: "Storage" ; width: storageTableView.width / 2}
|
2014-05-29 00:14:23 +03:00
|
|
|
model: storageModel
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
height: 200
|
|
|
|
width: parent.width
|
|
|
|
TableView {
|
|
|
|
id: logTableView
|
|
|
|
property var logModel: ListModel {
|
|
|
|
id: logModel
|
|
|
|
}
|
|
|
|
height: parent.height
|
|
|
|
width: parent.width
|
|
|
|
TableViewColumn{ id: message ; role: "message" ; title: "log" ; width: logTableView.width }
|
|
|
|
model: logModel
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
toolBar: ToolBar {
|
|
|
|
RowLayout {
|
|
|
|
spacing: 5
|
|
|
|
|
|
|
|
Button {
|
|
|
|
property var enabled: true
|
|
|
|
id: debugStart
|
|
|
|
onClicked: {
|
|
|
|
debugCurrent()
|
|
|
|
}
|
|
|
|
text: "Debug"
|
|
|
|
}
|
|
|
|
|
|
|
|
Button {
|
|
|
|
property var enabled: true
|
|
|
|
id: debugNextButton
|
|
|
|
onClicked: {
|
|
|
|
dbg.next()
|
|
|
|
}
|
|
|
|
text: "Next"
|
|
|
|
}
|
2014-06-26 11:37:48 +03:00
|
|
|
CheckBox {
|
|
|
|
id: breakEachLine
|
|
|
|
objectName: "breakEachLine"
|
|
|
|
text: "Break each instruction"
|
|
|
|
checked: true
|
|
|
|
}
|
2014-05-29 00:14:23 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function debugCurrent() {
|
|
|
|
dbg.debug(txValue.text, txGas.text, txGasPrice.text, codeEditor.text, rawDataField.text)
|
|
|
|
}
|
|
|
|
|
|
|
|
function setAsm(asm) {
|
|
|
|
asmModel.append({asm: asm})
|
|
|
|
}
|
|
|
|
|
|
|
|
function clearAsm() {
|
|
|
|
asmModel.clear()
|
|
|
|
}
|
|
|
|
|
|
|
|
function setInstruction(num) {
|
2014-06-14 16:44:32 +03:00
|
|
|
asmTableView.selection.clear()
|
|
|
|
asmTableView.selection.select(num)
|
2014-05-29 00:14:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function setMem(mem) {
|
|
|
|
memModel.append({num: mem.num, value: mem.value})
|
|
|
|
}
|
|
|
|
function clearMem(){
|
|
|
|
memModel.clear()
|
|
|
|
}
|
|
|
|
|
|
|
|
function setStack(stack) {
|
|
|
|
stackModel.append({value: stack})
|
|
|
|
}
|
|
|
|
function addDebugMessage(message){
|
|
|
|
debuggerLog.append({value: message})
|
|
|
|
}
|
|
|
|
|
|
|
|
function clearStack() {
|
|
|
|
stackModel.clear()
|
|
|
|
}
|
|
|
|
|
|
|
|
function clearStorage() {
|
|
|
|
storageModel.clear()
|
|
|
|
}
|
|
|
|
|
|
|
|
function setStorage(storage) {
|
|
|
|
storageModel.append({key: storage.key, value: storage.value})
|
|
|
|
}
|
|
|
|
|
|
|
|
function setLog(msg) {
|
2014-05-29 13:24:14 +03:00
|
|
|
logModel.insert(0, {message: msg})
|
|
|
|
}
|
|
|
|
|
|
|
|
function clearLog() {
|
|
|
|
logModel.clear()
|
2014-05-29 00:14:23 +03:00
|
|
|
}
|
2014-05-27 11:42:37 +03:00
|
|
|
}
|