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

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);
}
}
}