369 lines
7.9 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 Qt.labs.settings 1.0
import "js/Debugger.js" as Debugger
import "js/ErrorLocationFormater.js" as ErrorLocationFormater
import "."
ColumnLayout
{
10 years ago
id: root
property variant transactions
property string status
property int number
property int blockWidth: Layout.preferredWidth - statusWidth - horizontalMargin
property int horizontalMargin: 10
10 years ago
property int trHeight: 35
10 years ago
spacing: 0
property int openedTr: 0
property int blockIndex
property variant scenario
property string labelColor: "#414141"
property int scenarioIndex
signal txSelected(var txIndex)
10 years ago
function calculateHeight()
{
if (transactions)
{
if (index >= 0)
10 years ago
return trHeight + trHeight * transactions.count + openedTr
10 years ago
else
10 years ago
return trHeight
10 years ago
}
else
10 years ago
return trHeight
10 years ago
}
function editTx(txIndex)
{
transactionDialog.stateAccounts = scenario.accounts
transactionDialog.execute = false
10 years ago
transactionDialog.editMode = true
transactionDialog.open(txIndex, blockIndex, transactions.get(txIndex))
}
function select(txIndex)
{
transactionRepeater.itemAt(txIndex).select()
}
10 years ago
onOpenedTrChanged:
{
Layout.preferredHeight = calculateHeight()
height = calculateHeight()
}
10 years ago
DebuggerPaneStyle {
id: dbgStyle
}
10 years ago
Rectangle
{
id: top
Layout.preferredWidth: blockWidth
height: 10
anchors.bottom: rowHeader.top
color: "#DEDCDC"
radius: 15
anchors.left: parent.left
anchors.leftMargin: statusWidth
anchors.bottomMargin: -5
}
10 years ago
RowLayout
{
Layout.preferredHeight: trHeight
Layout.preferredWidth: blockWidth
id: rowHeader
spacing: 0
10 years ago
Rectangle
{
Layout.preferredWidth: blockWidth
Layout.preferredHeight: trHeight
color: "#DEDCDC"
10 years ago
anchors.left: parent.left
anchors.leftMargin: statusWidth
10 years ago
Label {
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: horizontalMargin
10 years ago
font.pointSize: dbgStyle.absoluteSize(1)
color: "#adadad"
10 years ago
text:
{
if (number === -2)
10 years ago
return qsTr("GENESIS PARAMETERS")
else if (status === "mined")
10 years ago
return qsTr("BLOCK") + " " + number
else
return qsTr("PENDING TRANSACTIONS")
}
}
Label
{
text: qsTr("EDIT")
color: "#1397da"
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: 14
visible: number === -2
MouseArea
{
anchors.fill: parent
onClicked:
{
// load edit block panel
projectModel.stateListModel.editState(scenarioIndex)
}
10 years ago
}
}
}
}
10 years ago
Repeater // List of transactions
{
id: transactionRepeater
model: transactions
RowLayout
{
id: rowTransaction
Layout.preferredHeight: trHeight
spacing: 0
function select()
{
rowContentTr.select()
}
10 years ago
function displayContent()
{
logsText.text = ""
if (index >= 0 && transactions.get(index).logs && transactions.get(index).logs.count)
{
for (var k = 0; k < transactions.get(index).logs.count; k++)
{
var log = transactions.get(index).logs.get(k)
if (log.name)
logsText.text += log.name + ":\n"
else
logsText.text += "log:\n"
10 years ago
if (log.param)
for (var i = 0; i < log.param.count; i++)
{
var p = log.param.get(i)
logsText.text += p.name + " = " + p.value + " - indexed:" + p.indexed + "\n"
}
else {
10 years ago
logsText.text += "From : " + log.address + "\n"
}
}
logsText.text += "\n\n"
}
rowDetailedContent.visible = !rowDetailedContent.visible
}
10 years ago
Rectangle
{
id: trSaveStatus
Layout.preferredWidth: statusWidth
Layout.preferredHeight: parent.height
10 years ago
color: "transparent"
anchors.top: parent.top
property bool saveStatus
Image {
anchors.top: parent.top
10 years ago
anchors.left: parent.left
10 years ago
anchors.leftMargin: -4
anchors.topMargin: 0
10 years ago
id: saveStatusImage
source: "qrc:/qml/img/recyclediscard@2x.png"
10 years ago
width: statusWidth + 10
10 years ago
fillMode: Image.PreserveAspectFit
}
10 years ago
Component.onCompleted:
{
if (index >= 0)
saveStatus = transactions.get(index).saveStatus
}
10 years ago
onSaveStatusChanged:
{
if (saveStatus)
saveStatusImage.source = "qrc:/qml/img/recyclekeep@2x.png"
else
saveStatusImage.source = "qrc:/qml/img/recyclediscard@2x.png"
10 years ago
if (index >= 0)
transactions.get(index).saveStatus = saveStatus
}
10 years ago
MouseArea {
id: statusMouseArea
anchors.fill: parent
onClicked:
{
parent.saveStatus = !parent.saveStatus
}
}
}
10 years ago
Rectangle
{
Layout.preferredWidth: blockWidth
Layout.preferredHeight: trHeight
height: trHeight
10 years ago
color: "#DEDCDC"
id: rowContentTr
anchors.top: parent.top
property bool selected: false
Connections
{
target: blockChainPanel
onTxSelected: {
if (root.blockIndex !== blockIndex || index !== txIndex)
rowContentTr.deselect()
}
}
function select()
{
rowContentTr.selected = true
rowContentTr.color = "#4F4F4F"
hash.color = "#EAB920"
func.color = "#EAB920"
txSelected(index)
}
function deselect()
{
rowContentTr.selected = false
rowContentTr.color = "#DEDCDC"
hash.color = labelColor
func.color = labelColor
}
MouseArea
{
anchors.fill: parent
onClicked: {
if (!rowContentTr.selected)
rowContentTr.select()
else
rowContentTr.deselect()
}
onDoubleClicked:
{
root.editTx(index)
}
}
RowLayout
10 years ago
{
Layout.fillWidth: true
Layout.preferredHeight: trHeight - 10
anchors.verticalCenter: parent.verticalCenter
Rectangle
10 years ago
{
Layout.preferredWidth: fromWidth
anchors.left: parent.left
anchors.leftMargin: horizontalMargin
Text
10 years ago
{
id: hash
width: parent.width - 30
elide: Text.ElideRight
anchors.verticalCenter: parent.verticalCenter
maximumLineCount: 1
color: labelColor
font.pointSize: dbgStyle.absoluteSize(1)
font.bold: true
text: {
if (index >= 0)
return clientModel.resolveAddress(transactions.get(index).sender)
10 years ago
else
return ""
10 years ago
}
}
}
Rectangle
{
Layout.preferredWidth: toWidth
Text
10 years ago
{
id: func
text: {
if (index >= 0)
parent.parent.userFrienldyToken(transactions.get(index).label)
else
return ""
10 years ago
}
elide: Text.ElideRight
anchors.verticalCenter: parent.verticalCenter
color: labelColor
font.pointSize: dbgStyle.absoluteSize(1)
font.bold: true
maximumLineCount: 1
width: parent.width
10 years ago
}
}
function userFrienldyToken(value)
10 years ago
{
if (value && value.indexOf("<") === 0)
10 years ago
{
if (value.split("> ")[1] === " - ")
return value.split(" - ")[0].replace("<", "")
10 years ago
else
return value.split(" - ")[0].replace("<", "") + "." + value.split("> ")[1] + "()";
10 years ago
}
else
return value
}
10 years ago
}
}
Rectangle
{
width: debugActionWidth
10 years ago
height: trHeight - 10
anchors.right: rowContentTr.right
anchors.top: rowContentTr.top
10 years ago
anchors.rightMargin: 10
color: "transparent"
Image {
id: debugImg
source: "qrc:/qml/img/rightarrow@2x.png"
width: debugActionWidth
fillMode: Image.PreserveAspectFit
anchors.horizontalCenter: parent.horizontalCenter
visible: transactions.get(index).recordIndex !== undefined
}
MouseArea
{
anchors.fill: parent
onClicked:
{
if (transactions.get(index).recordIndex !== undefined)
{
debugTrRequested = [ blockIndex, index ]
clientModel.debugRecord(transactions.get(index).recordIndex);
}
}
}
}
10 years ago
}
}
}