You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
4.5 KiB
200 lines
4.5 KiB
import QtQuick 2.2
|
|
import QtQuick.Controls 1.1
|
|
import QtQuick.Controls.Styles 1.1
|
|
import QtQuick.Dialogs 1.1
|
|
import QtQuick.Layouts 1.1
|
|
import org.ethereum.qml.RecordLogEntry 1.0
|
|
import org.ethereum.qml.InverseMouseArea 1.0
|
|
|
|
Item {
|
|
property ListModel fullModel: ListModel{}
|
|
property ListModel transactionModel: ListModel{}
|
|
property ListModel callModel: ListModel{}
|
|
property int selectedStateIndex: statesCombo.selectedIndex
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
RowLayout {
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
Connections
|
|
{
|
|
id: compilationStatus
|
|
target: codeModel
|
|
property bool compilationComplete: false
|
|
onCompilationComplete: compilationComplete = true
|
|
onCompilationError: compilationComplete = false
|
|
}
|
|
|
|
Connections
|
|
{
|
|
target: projectModel
|
|
onProjectSaved:
|
|
{
|
|
if (projectModel.appIsClosing || projectModel.projectIsClosing)
|
|
return;
|
|
if (compilationStatus.compilationComplete && codeModel.hasContract && !clientModel.running)
|
|
projectModel.stateListModel.debugDefaultState();
|
|
}
|
|
onProjectClosed:
|
|
{
|
|
fullModel.clear();
|
|
transactionModel.clear();
|
|
callModel.clear();
|
|
}
|
|
onContractSaved: {
|
|
if (compilationStatus.compilationComplete && codeModel.hasContract && !clientModel.running)
|
|
projectModel.stateListModel.debugDefaultState();
|
|
}
|
|
}
|
|
|
|
StatesComboBox
|
|
{
|
|
id: statesCombo
|
|
items: projectModel.stateListModel
|
|
onSelectCreate: projectModel.stateListModel.addState()
|
|
onEditItem: projectModel.stateListModel.editState(item)
|
|
colorItem: "#808080"
|
|
colorSelect: "#4a90e2"
|
|
color: "white"
|
|
Connections {
|
|
target: projectModel.stateListModel
|
|
onStateRun: {
|
|
if (statesCombo.selectedIndex !== index)
|
|
statesCombo.setSelectedIndex(index)
|
|
}
|
|
onStateListModelReady: {
|
|
statesCombo.setSelectedIndex(projectModel.stateListModel.defaultStateIndex)
|
|
}
|
|
onStateDeleted: {
|
|
if (index === statesCombo.selectedIndex)
|
|
statesCombo.setSelectedIndex(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
CheckBox
|
|
{
|
|
text: qsTr("Mine")
|
|
onCheckedChanged: {
|
|
mineAction.enabled = !checked;
|
|
mineTimer.running = checked;
|
|
}
|
|
}
|
|
|
|
Timer
|
|
{
|
|
id: mineTimer
|
|
repeat: true;
|
|
interval: 12000
|
|
running: false
|
|
onTriggered:
|
|
{
|
|
clientModel.mine();
|
|
}
|
|
}
|
|
|
|
Button
|
|
{
|
|
id: mineBtn
|
|
anchors.rightMargin: 9
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
action: mineAction
|
|
}
|
|
|
|
ComboBox {
|
|
id: itemFilter
|
|
|
|
function getCurrentModel()
|
|
{
|
|
return currentIndex === 0 ? fullModel : currentIndex === 1 ? transactionModel : currentIndex === 2 ? callModel : fullModel;
|
|
}
|
|
|
|
model: ListModel {
|
|
ListElement { text: qsTr("Calls and Transactions"); value: 0; }
|
|
ListElement { text: qsTr("Only Transactions"); value: 1; }
|
|
ListElement { text: qsTr("Only Calls"); value: 2; }
|
|
}
|
|
|
|
onCurrentIndexChanged:
|
|
{
|
|
logTable.model = itemFilter.getCurrentModel();
|
|
}
|
|
}
|
|
}
|
|
TableView {
|
|
id: logTable
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
model: fullModel
|
|
|
|
TableViewColumn {
|
|
role: "transactionIndex"
|
|
title: qsTr("#")
|
|
width: 40
|
|
}
|
|
TableViewColumn {
|
|
role: "contract"
|
|
title: qsTr("Contract")
|
|
width: 100
|
|
}
|
|
TableViewColumn {
|
|
role: "function"
|
|
title: qsTr("Function")
|
|
width: 120
|
|
}
|
|
TableViewColumn {
|
|
role: "value"
|
|
title: qsTr("Value")
|
|
width: 60
|
|
}
|
|
TableViewColumn {
|
|
role: "address"
|
|
title: qsTr("Destination")
|
|
width: 130
|
|
}
|
|
TableViewColumn {
|
|
role: "returned"
|
|
title: qsTr("Returned")
|
|
width: 120
|
|
}
|
|
TableViewColumn {
|
|
role: "gasUsed"
|
|
title: qsTr("Gas Used")
|
|
width: 120
|
|
}
|
|
onActivated: {
|
|
var item = logTable.model.get(row);
|
|
if (item.type === RecordLogEntry.Transaction)
|
|
clientModel.debugRecord(item.recordIndex);
|
|
else
|
|
clientModel.emptyRecord();
|
|
}
|
|
Keys.onPressed: {
|
|
if ((event.modifiers & Qt.ControlModifier) && event.key === Qt.Key_C && currentRow >=0 && currentRow < logTable.model.count) {
|
|
var item = logTable.model.get(currentRow);
|
|
clipboard.text = item.returned;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Connections {
|
|
target: clientModel
|
|
onStateCleared: {
|
|
fullModel.clear();
|
|
transactionModel.clear();
|
|
callModel.clear();
|
|
}
|
|
onNewRecord: {
|
|
fullModel.append(_r);
|
|
if (!_r.call)
|
|
transactionModel.append(_r);
|
|
else
|
|
callModel.append(_r);
|
|
}
|
|
onMiningComplete: {
|
|
fullModel.append(clientModel.lastBlock);
|
|
transactionModel.append(clientModel.lastBlock);
|
|
}
|
|
}
|
|
}
|
|
|