From 8eeaa24d56a1fe2461aab5c2c69f3ab6ec892613 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 2 Apr 2015 15:43:10 +0200 Subject: [PATCH 1/3] - Use QT5.4 dialog instead of Window control --- mix/qml/DeploymentDialog.qml | 515 +++++++++++++++++----------------- mix/qml/NewProjectDialog.qml | 94 ++++--- mix/qml/StateDialog.qml | 365 ++++++++++++------------ mix/qml/StateList.qml | 41 +-- mix/qml/TransactionDialog.qml | 347 +++++++++++------------ mix/qml/main.qml | 2 +- 6 files changed, 684 insertions(+), 680 deletions(-) diff --git a/mix/qml/DeploymentDialog.qml b/mix/qml/DeploymentDialog.qml index c194977cf..1c74d786b 100644 --- a/mix/qml/DeploymentDialog.qml +++ b/mix/qml/DeploymentDialog.qml @@ -2,7 +2,7 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 import QtQuick.Window 2.0 -import QtQuick.Dialogs 1.1 +import QtQuick.Dialogs 1.2 import QtQuick.Controls.Styles 1.3 import org.ethereum.qml.QEther 1.0 import "js/TransactionHelper.js" as TransactionHelper @@ -11,16 +11,11 @@ import "js/QEtherHelper.js" as QEtherHelper import "." -Window { - +Dialog { id: modalDeploymentDialog modality: Qt.ApplicationModal width: 735 height: 320 - maximumWidth: width - minimumWidth: width - maximumHeight: height - minimumHeight: height visible: false property alias applicationUrlEth: applicationUrlEth.text property alias applicationUrlHttp: applicationUrlHttp.text @@ -31,8 +26,6 @@ Window { property string currentAccount property alias gasToUse: gasToUseInput.text - color: Style.generic.layout.backgroundColor - function close() { visible = false; @@ -159,328 +152,332 @@ Window { id: lightFont } - Column - { - spacing: 5 + contentItem: Rectangle { + color: Style.generic.layout.backgroundColor anchors.fill: parent - anchors.margins: 10 - ColumnLayout + Column { - id: containerDeploy - Layout.fillWidth: true - Layout.preferredHeight: 500 - RowLayout + spacing: 5 + anchors.fill: parent + anchors.margins: 10 + ColumnLayout { - Rectangle + id: containerDeploy + Layout.fillWidth: true + Layout.preferredHeight: 500 + RowLayout { - Layout.preferredWidth: 357 - DefaultLabel + Rectangle { - text: qsTr("Deployment") - font.family: lightFont.name - font.underline: true - anchors.centerIn: parent + Layout.preferredWidth: 357 + DefaultLabel + { + text: qsTr("Deployment") + font.family: lightFont.name + font.underline: true + anchors.centerIn: parent + } } - } - Button - { - action: displayHelpAction - iconSource: "qrc:/qml/img/help.png" - } + Button + { + action: displayHelpAction + iconSource: "qrc:/qml/img/help.png" + } - Action { - id: displayHelpAction - tooltip: qsTr("Help") - onTriggered: { - Qt.openUrlExternally("https://github.com/ethereum/wiki/wiki/Mix:-The-DApp-IDE#deployment-to-network") + Action { + id: displayHelpAction + tooltip: qsTr("Help") + onTriggered: { + Qt.openUrlExternally("https://github.com/ethereum/wiki/wiki/Mix:-The-DApp-IDE#deployment-to-network") + } } - } - Button - { - action: openFolderAction - iconSource: "qrc:/qml/img/openedfolder.png" - } + Button + { + action: openFolderAction + iconSource: "qrc:/qml/img/openedfolder.png" + } - Action { - id: openFolderAction - enabled: deploymentDialog.packageBase64 !== "" - tooltip: qsTr("Open Package Folder") - onTriggered: { - fileIo.openFileBrowser(projectModel.deploymentDir); + Action { + id: openFolderAction + enabled: deploymentDialog.packageBase64 !== "" + tooltip: qsTr("Open Package Folder") + onTriggered: { + fileIo.openFileBrowser(projectModel.deploymentDir); + } } - } - Button - { - action: b64Action - iconSource: "qrc:/qml/img/b64.png" - } + Button + { + action: b64Action + iconSource: "qrc:/qml/img/b64.png" + } - Action { - id: b64Action - enabled: deploymentDialog.packageBase64 !== "" - tooltip: qsTr("Copy Base64 conversion to ClipBoard") - onTriggered: { - clipboard.text = deploymentDialog.packageBase64; + Action { + id: b64Action + enabled: deploymentDialog.packageBase64 !== "" + tooltip: qsTr("Copy Base64 conversion to ClipBoard") + onTriggered: { + clipboard.text = deploymentDialog.packageBase64; + } } - } - Button - { - action: exitAction - iconSource: "qrc:/qml/img/exit.png" - } + Button + { + action: exitAction + iconSource: "qrc:/qml/img/exit.png" + } - Action { - id: exitAction - tooltip: qsTr("Exit") - onTriggered: { - close() + Action { + id: exitAction + tooltip: qsTr("Exit") + onTriggered: { + close() + } } } - } - GridLayout - { - columns: 2 - width: parent.width - - DefaultLabel + GridLayout { - text: qsTr("Root Registrar address:") - } + columns: 2 + width: parent.width - DefaultTextField - { - Layout.preferredWidth: 350 - id: registrarAddr - } + DefaultLabel + { + text: qsTr("Root Registrar address:") + } - DefaultLabel - { - text: qsTr("Account used to deploy:") - } + DefaultTextField + { + Layout.preferredWidth: 350 + id: registrarAddr + } - Rectangle - { - width: 300 - height: 25 - color: "transparent" - ComboBox { - id: comboAccounts - property var balances: [] - onCurrentIndexChanged : { - if (modelAccounts.count > 0) - { - currentAccount = modelAccounts.get(currentIndex).id; - balance.text = balances[currentIndex]; + DefaultLabel + { + text: qsTr("Account used to deploy:") + } + + Rectangle + { + width: 300 + height: 25 + color: "transparent" + ComboBox { + id: comboAccounts + property var balances: [] + onCurrentIndexChanged : { + if (modelAccounts.count > 0) + { + currentAccount = modelAccounts.get(currentIndex).id; + balance.text = balances[currentIndex]; + } + } + model: ListModel { + id: modelAccounts } } - model: ListModel { - id: modelAccounts + + DefaultLabel + { + anchors.verticalCenter: parent.verticalCenter + anchors.left: comboAccounts.right + anchors.leftMargin: 20 + id: balance; } } DefaultLabel { - anchors.verticalCenter: parent.verticalCenter - anchors.left: comboAccounts.right - anchors.leftMargin: 20 - id: balance; + text: qsTr("Amount of gas to use for each contract deployment: ") } - } - - DefaultLabel - { - text: qsTr("Amount of gas to use for each contract deployment: ") - } - - DefaultTextField - { - text: "20000" - Layout.preferredWidth: 350 - id: gasToUseInput - } - - DefaultLabel - { - text: qsTr("Ethereum Application URL: ") - } - Rectangle - { - Layout.fillWidth: true - height: 25 - color: "transparent" DefaultTextField { - width: 200 - id: applicationUrlEth - onTextChanged: { - appUrlFormatted.text = ProjectModelCode.formatAppUrl(text).join('/'); - } + text: "20000" + Layout.preferredWidth: 350 + id: gasToUseInput } DefaultLabel { - id: appUrlFormatted - anchors.verticalCenter: parent.verticalCenter; - anchors.left: applicationUrlEth.right - font.italic: true - font.pointSize: Style.absoluteSize(-1) + text: qsTr("Ethereum Application URL: ") } - } - } - RowLayout - { - Layout.fillWidth: true - Rectangle - { - Layout.preferredWidth: 357 - color: "transparent" - } - - Button - { - id: deployButton - action: runAction - iconSource: "qrc:/qml/img/run.png" - } - - Action { - id: runAction - tooltip: qsTr("Deploy contract(s) and Package resources files.") - onTriggered: { - var inError = []; - var ethUrl = ProjectModelCode.formatAppUrl(applicationUrlEth.text); - for (var k in ethUrl) + Rectangle + { + Layout.fillWidth: true + height: 25 + color: "transparent" + DefaultTextField { - if (ethUrl[k].length > 32) - inError.push(qsTr("Member too long: " + ethUrl[k]) + "\n"); + width: 200 + id: applicationUrlEth + onTextChanged: { + appUrlFormatted.text = ProjectModelCode.formatAppUrl(text).join('/'); + } } - if (!stopForInputError(inError)) + + DefaultLabel { - if (contractRedeploy.checked) - deployWarningDialog.open(); - else - ProjectModelCode.startDeployProject(false); + id: appUrlFormatted + anchors.verticalCenter: parent.verticalCenter; + anchors.left: applicationUrlEth.right + font.italic: true + font.pointSize: Style.absoluteSize(-1) } } } - CheckBox + RowLayout { - anchors.left: deployButton.right - id: contractRedeploy - enabled: Object.keys(projectModel.deploymentAddresses).length > 0 - checked: Object.keys(projectModel.deploymentAddresses).length == 0 - text: qsTr("Deploy Contract(s)") - anchors.verticalCenter: parent.verticalCenter - } - } - } + Layout.fillWidth: true + Rectangle + { + Layout.preferredWidth: 357 + color: "transparent" + } - Rectangle - { - width: parent.width - height: 1 - color: "#5891d3" - } + Button + { + id: deployButton + action: runAction + iconSource: "qrc:/qml/img/run.png" + } - ColumnLayout - { - id: containerRegister - Layout.fillWidth: true - Layout.preferredHeight: 500 - RowLayout - { - Layout.preferredHeight: 25 - Rectangle - { - Layout.preferredWidth: 356 - DefaultLabel + Action { + id: runAction + tooltip: qsTr("Deploy contract(s) and Package resources files.") + onTriggered: { + var inError = []; + var ethUrl = ProjectModelCode.formatAppUrl(applicationUrlEth.text); + for (var k in ethUrl) + { + if (ethUrl[k].length > 32) + inError.push(qsTr("Member too long: " + ethUrl[k]) + "\n"); + } + if (!stopForInputError(inError)) + { + if (contractRedeploy.checked) + deployWarningDialog.open(); + else + ProjectModelCode.startDeployProject(false); + } + } + } + + CheckBox { - text: qsTr("Registration") - font.family: lightFont.name - font.underline: true - anchors.centerIn: parent + anchors.left: deployButton.right + id: contractRedeploy + enabled: Object.keys(projectModel.deploymentAddresses).length > 0 + checked: Object.keys(projectModel.deploymentAddresses).length == 0 + text: qsTr("Deploy Contract(s)") + anchors.verticalCenter: parent.verticalCenter } } } - GridLayout + Rectangle { - columns: 2 - Layout.fillWidth: true + width: parent.width + height: 1 + color: "#5891d3" + } - DefaultLabel + ColumnLayout + { + id: containerRegister + Layout.fillWidth: true + Layout.preferredHeight: 500 + RowLayout { - Layout.preferredWidth: 355 - text: qsTr("URL Hint contract address:") + Layout.preferredHeight: 25 + Rectangle + { + Layout.preferredWidth: 356 + DefaultLabel + { + text: qsTr("Registration") + font.family: lightFont.name + font.underline: true + anchors.centerIn: parent + } + } } - DefaultTextField + GridLayout { - Layout.preferredWidth: 350 - id: urlHintAddr - enabled: rowRegister.isOkToRegister() - } + columns: 2 + Layout.fillWidth: true - DefaultLabel - { - Layout.preferredWidth: 355 - text: qsTr("Web Application Resources URL: ") - } + DefaultLabel + { + Layout.preferredWidth: 355 + text: qsTr("URL Hint contract address:") + } - DefaultTextField - { - Layout.preferredWidth: 350 - id: applicationUrlHttp - enabled: rowRegister.isOkToRegister() - } - } + DefaultTextField + { + Layout.preferredWidth: 350 + id: urlHintAddr + enabled: rowRegister.isOkToRegister() + } - RowLayout - { - id: rowRegister - Layout.fillWidth: true + DefaultLabel + { + Layout.preferredWidth: 355 + text: qsTr("Web Application Resources URL: ") + } - Rectangle - { - Layout.preferredWidth: 357 - color: "transparent" + DefaultTextField + { + Layout.preferredWidth: 350 + id: applicationUrlHttp + enabled: rowRegister.isOkToRegister() + } } - function isOkToRegister() + RowLayout { - return Object.keys(projectModel.deploymentAddresses).length > 0 && deploymentDialog.packageHash !== ""; - } + id: rowRegister + Layout.fillWidth: true - Button { - action: registerAction - iconSource: "qrc:/qml/img/note.png" - } + Rectangle + { + Layout.preferredWidth: 357 + color: "transparent" + } - Action { - id: registerAction - enabled: rowRegister.isOkToRegister() - tooltip: qsTr("Register hosted Web Application.") - onTriggered: { - if (applicationUrlHttp.text === "" || deploymentDialog.packageHash === "") - { - deployDialog.title = text; - deployDialog.text = qsTr("Please provide the link where the resources are stored and ensure the package is aleary built using the deployment step.") - deployDialog.open(); - return; + function isOkToRegister() + { + return Object.keys(projectModel.deploymentAddresses).length > 0 && deploymentDialog.packageHash !== ""; + } + + Button { + action: registerAction + iconSource: "qrc:/qml/img/note.png" + } + + Action { + id: registerAction + enabled: rowRegister.isOkToRegister() + tooltip: qsTr("Register hosted Web Application.") + onTriggered: { + if (applicationUrlHttp.text === "" || deploymentDialog.packageHash === "") + { + deployDialog.title = text; + deployDialog.text = qsTr("Please provide the link where the resources are stored and ensure the package is aleary built using the deployment step.") + deployDialog.open(); + return; + } + var inError = []; + if (applicationUrlHttp.text.length > 32) + inError.push(qsTr(applicationUrlHttp.text)); + if (!stopForInputError(inError)) + ProjectModelCode.registerToUrlHint(); } - var inError = []; - if (applicationUrlHttp.text.length > 32) - inError.push(qsTr(applicationUrlHttp.text)); - if (!stopForInputError(inError)) - ProjectModelCode.registerToUrlHint(); } } } diff --git a/mix/qml/NewProjectDialog.qml b/mix/qml/NewProjectDialog.qml index 1ec53e1d9..ba0cecd8e 100644 --- a/mix/qml/NewProjectDialog.qml +++ b/mix/qml/NewProjectDialog.qml @@ -1,10 +1,11 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 +import QtQuick.Dialogs 1.2 import QtQuick.Window 2.0 import QtQuick.Dialogs 1.1 -Window { +Dialog { id: newProjectWin modality: Qt.ApplicationModal @@ -32,62 +33,65 @@ Window { close(); accepted(); } - - GridLayout { - id: dialogContent - columns: 2 + contentItem: Rectangle { anchors.fill: parent - anchors.margins: 10 - rowSpacing: 10 - columnSpacing: 10 + GridLayout + { + id: dialogContent + columns: 2 + anchors.fill: parent + anchors.margins: 10 + rowSpacing: 10 + columnSpacing: 10 - Label { - text: qsTr("Title") - } - TextField { - id: titleField - focus: true - Layout.fillWidth: true - Keys.onReturnPressed: { - if (okButton.enabled) - acceptAndClose(); + Label { + text: qsTr("Title") } - } - - Label { - text: qsTr("Path") - } - RowLayout { TextField { - id: pathField + id: titleField + focus: true Layout.fillWidth: true Keys.onReturnPressed: { if (okButton.enabled) acceptAndClose(); } } - Button { - text: qsTr("Browse") - onClicked: createProjectFileDialog.open() + + Label { + text: qsTr("Path") + } + RowLayout { + TextField { + id: pathField + Layout.fillWidth: true + Keys.onReturnPressed: { + if (okButton.enabled) + acceptAndClose(); + } + } + Button { + text: qsTr("Browse") + onClicked: createProjectFileDialog.open() + } } - } - RowLayout - { - anchors.bottom: parent.bottom - anchors.right: parent.right; + RowLayout + { + anchors.bottom: parent.bottom + anchors.right: parent.right; - Button { - id: okButton; - enabled: titleField.text != "" && pathField.text != "" - text: qsTr("OK"); - onClicked: { - acceptAndClose(); + Button { + id: okButton; + enabled: titleField.text != "" && pathField.text != "" + text: qsTr("OK"); + onClicked: { + acceptAndClose(); + } + } + Button { + text: qsTr("Cancel"); + onClicked: close(); } - } - Button { - text: qsTr("Cancel"); - onClicked: close(); } } } @@ -101,8 +105,8 @@ Window { var u = createProjectFileDialog.fileUrl.toString(); if (u.indexOf("file://") == 0) u = u.substring(7, u.length) - if (Qt.platform.os == "windows" && u.indexOf("/") == 0) - u = u.substring(1, u.length); + if (Qt.platform.os == "windows" && u.indexOf("/") == 0) + u = u.substring(1, u.length); pathField.text = u; } } diff --git a/mix/qml/StateDialog.qml b/mix/qml/StateDialog.qml index b229ed433..094ff016f 100644 --- a/mix/qml/StateDialog.qml +++ b/mix/qml/StateDialog.qml @@ -1,6 +1,6 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 -import QtQuick.Dialogs 1.1 +import QtQuick.Dialogs 1.2 import QtQuick.Layouts 1.1 import QtQuick.Window 2.0 import QtQuick.Controls.Styles 1.3 @@ -9,7 +9,7 @@ import "js/QEtherHelper.js" as QEtherHelper import "js/TransactionHelper.js" as TransactionHelper import "." -Window { +Dialog { id: modalStateDialog modality: Qt.ApplicationModal @@ -17,7 +17,6 @@ Window { height: 480 title: qsTr("Edit State") visible: false - color: StateDialogStyle.generic.backgroundColor property alias stateTitle: titleField.text property alias isDefault: defaultCheckBox.checked @@ -46,9 +45,6 @@ Window { stateAccounts.push(item.accounts[k]); } - modalStateDialog.setX((Screen.width - width) / 2); - modalStateDialog.setY((Screen.height - height) / 2); - visible = true; isDefault = setDefault; titleField.focus = true; @@ -70,235 +66,238 @@ Window { item.accounts = stateAccounts; return item; } - - ColumnLayout { + contentItem: + Rectangle { + color: StateDialogStyle.generic.backgroundColor anchors.fill: parent - anchors.margins: 10 ColumnLayout { - id: dialogContent - anchors.top: parent.top - - RowLayout - { - Layout.fillWidth: true - DefaultLabel { - Layout.preferredWidth: 75 - text: qsTr("Title") - } - DefaultTextField + anchors.fill: parent + anchors.margins: 10 + ColumnLayout { + id: dialogContent + anchors.top: parent.top + RowLayout { - id: titleField Layout.fillWidth: true - } - } - - CommonSeparator - { - Layout.fillWidth: true - } - - RowLayout - { - Layout.fillWidth: true - - Rectangle - { - Layout.preferredWidth: 75 DefaultLabel { - id: accountsLabel Layout.preferredWidth: 75 - text: qsTr("Accounts") + text: qsTr("Title") } - - Button + DefaultTextField { - anchors.top: accountsLabel.bottom - anchors.topMargin: 10 - iconSource: "qrc:/qml/img/plus.png" - action: newAccountAction - } - - Action { - id: newAccountAction - tooltip: qsTr("Add new Account") - onTriggered: - { - var account = stateListModel.newAccount("1000000", QEther.Ether); - stateAccounts.push(account); - accountsModel.append(account); - } + id: titleField + Layout.fillWidth: true } } - MessageDialog + CommonSeparator { - id: alertAlreadyUsed - text: qsTr("This account is in use. You cannot remove it. The first account is used to deploy config contract and cannot be removed.") - icon: StandardIcon.Warning - standardButtons: StandardButton.Ok + Layout.fillWidth: true } - TableView + RowLayout { - id: accountsView Layout.fillWidth: true - model: accountsModel - headerVisible: false - TableViewColumn { - role: "name" - title: qsTr("Name") - width: 150 - delegate: Item { - RowLayout + + Rectangle + { + Layout.preferredWidth: 75 + DefaultLabel { + id: accountsLabel + Layout.preferredWidth: 75 + text: qsTr("Accounts") + } + + Button + { + anchors.top: accountsLabel.bottom + anchors.topMargin: 10 + iconSource: "qrc:/qml/img/plus.png" + action: newAccountAction + } + + Action { + id: newAccountAction + tooltip: qsTr("Add new Account") + onTriggered: { - height: 25 - width: parent.width - Button - { - iconSource: "qrc:/qml/img/delete_sign.png" - action: deleteAccountAction - } + var account = stateListModel.newAccount("1000000", QEther.Ether); + stateAccounts.push(account); + accountsModel.append(account); + } + } + } + + MessageDialog + { + id: alertAlreadyUsed + text: qsTr("This account is in use. You cannot remove it. The first account is used to deploy config contract and cannot be removed.") + icon: StandardIcon.Warning + standardButtons: StandardButton.Ok + } - Action { - id: deleteAccountAction - tooltip: qsTr("Delete Account") - onTriggered: + TableView + { + id: accountsView + Layout.fillWidth: true + model: accountsModel + headerVisible: false + TableViewColumn { + role: "name" + title: qsTr("Name") + width: 150 + delegate: Item { + RowLayout + { + height: 25 + width: parent.width + Button { - if (transactionsModel.isUsed(stateAccounts[styleData.row].secret)) - alertAlreadyUsed.open(); - else + iconSource: "qrc:/qml/img/delete_sign.png" + action: deleteAccountAction + } + + Action { + id: deleteAccountAction + tooltip: qsTr("Delete Account") + onTriggered: { - stateAccounts.splice(styleData.row, 1); - accountsModel.remove(styleData.row); + if (transactionsModel.isUsed(stateAccounts[styleData.row].secret)) + alertAlreadyUsed.open(); + else + { + stateAccounts.splice(styleData.row, 1); + accountsModel.remove(styleData.row); + } } } - } - DefaultTextField { - anchors.verticalCenter: parent.verticalCenter - onTextChanged: { - if (styleData.row > -1) - stateAccounts[styleData.row].name = text; - } - text: { - return styleData.value + DefaultTextField { + anchors.verticalCenter: parent.verticalCenter + onTextChanged: { + if (styleData.row > -1) + stateAccounts[styleData.row].name = text; + } + text: { + return styleData.value + } } } } } - } - TableViewColumn { - role: "balance" - title: qsTr("Balance") - width: 200 - delegate: Item { - Ether { - id: balanceField - edit: true - displayFormattedValue: false - value: styleData.value + TableViewColumn { + role: "balance" + title: qsTr("Balance") + width: 200 + delegate: Item { + Ether { + id: balanceField + edit: true + displayFormattedValue: false + value: styleData.value + } } } - } - rowDelegate: - Rectangle { - color: styleData.alternate ? "transparent" : "#f0f0f0" - height: 30; + rowDelegate: + Rectangle { + color: styleData.alternate ? "transparent" : "#f0f0f0" + height: 30; + } } } - } - - CommonSeparator - { - Layout.fillWidth: true - } - RowLayout - { - Layout.fillWidth: true - DefaultLabel { - Layout.preferredWidth: 75 - text: qsTr("Default") - } - CheckBox { - id: defaultCheckBox + CommonSeparator + { Layout.fillWidth: true } - } - CommonSeparator - { - Layout.fillWidth: true - } - } - - ColumnLayout { - anchors.top: dialogContent.bottom - anchors.topMargin: 5 - spacing: 0 - RowLayout - { - Layout.preferredWidth: 150 - DefaultLabel { - text: qsTr("Transactions: ") + RowLayout + { + Layout.fillWidth: true + DefaultLabel { + Layout.preferredWidth: 75 + text: qsTr("Default") + } + CheckBox { + id: defaultCheckBox + Layout.fillWidth: true + } } - Button + CommonSeparator { - iconSource: "qrc:/qml/img/plus.png" - action: newTrAction - width: 10 - height: 10 - anchors.right: parent.right + Layout.fillWidth: true } + } - Action { - id: newTrAction - tooltip: qsTr("Create a new transaction") - onTriggered: transactionsModel.addTransaction() + ColumnLayout { + anchors.top: dialogContent.bottom + anchors.topMargin: 5 + spacing: 0 + RowLayout + { + Layout.preferredWidth: 150 + DefaultLabel { + text: qsTr("Transactions: ") + } + + Button + { + iconSource: "qrc:/qml/img/plus.png" + action: newTrAction + width: 10 + height: 10 + anchors.right: parent.right + } + + Action { + id: newTrAction + tooltip: qsTr("Create a new transaction") + onTriggered: transactionsModel.addTransaction() + } } - } - ScrollView - { - Layout.fillHeight: true - Layout.preferredWidth: 300 - Column + ScrollView { Layout.fillHeight: true - Repeater + Layout.preferredWidth: 300 + Column { - id: trRepeater - model: transactionsModel - delegate: transactionRenderDelegate - visible: transactionsModel.count > 0 - height: 20 * transactionsModel.count + Layout.fillHeight: true + Repeater + { + id: trRepeater + model: transactionsModel + delegate: transactionRenderDelegate + visible: transactionsModel.count > 0 + height: 20 * transactionsModel.count + } } } - } - CommonSeparator - { - Layout.fillWidth: true + CommonSeparator + { + Layout.fillWidth: true + } } - } - RowLayout - { - anchors.bottom: parent.bottom - anchors.right: parent.right; - - Button { - text: qsTr("OK"); - onClicked: { - close(); - accepted(); + RowLayout + { + anchors.bottom: parent.bottom + anchors.right: parent.right; + + Button { + text: qsTr("OK"); + onClicked: { + close(); + accepted(); + } + } + Button { + text: qsTr("Cancel"); + onClicked: close(); } - } - Button { - text: qsTr("Cancel"); - onClicked: close(); } } } diff --git a/mix/qml/StateList.qml b/mix/qml/StateList.qml index 2e1bb4a06..4756dbe8f 100644 --- a/mix/qml/StateList.qml +++ b/mix/qml/StateList.qml @@ -1,12 +1,12 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 -import QtQuick.Dialogs 1.1 +import QtQuick.Dialogs 1.2 import QtQuick.Layouts 1.1 import QtQuick.Window 2.0 import "." -Window { +Dialog { id: stateListContainer modality: Qt.WindowModal @@ -14,26 +14,29 @@ Window { height: 480 visible: false - ColumnLayout - { + contentItem: Rectangle { anchors.fill: parent - TableView { - id: list - Layout.fillHeight: true - Layout.fillWidth: true - model: projectModel.stateListModel - itemDelegate: renderDelegate - headerDelegate: null - TableViewColumn { - role: "title" - title: qsTr("State") - width: list.width + ColumnLayout + { + anchors.fill: parent + TableView { + id: list + Layout.fillHeight: true + Layout.fillWidth: true + model: projectModel.stateListModel + itemDelegate: renderDelegate + headerDelegate: null + TableViewColumn { + role: "title" + title: qsTr("State") + width: list.width + } } - } - Button { - anchors.bottom: parent.bottom - action: addStateAction + Button { + anchors.bottom: parent.bottom + action: addStateAction + } } } diff --git a/mix/qml/TransactionDialog.qml b/mix/qml/TransactionDialog.qml index 33ab8c5d0..a2c5e6292 100644 --- a/mix/qml/TransactionDialog.qml +++ b/mix/qml/TransactionDialog.qml @@ -1,19 +1,19 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 +import QtQuick.Dialogs 1.2 import QtQuick.Window 2.0 import QtQuick.Controls.Styles 1.3 import org.ethereum.qml.QEther 1.0 import "js/TransactionHelper.js" as TransactionHelper import "." -Window { +Dialog { id: modalTransactionDialog modality: Qt.ApplicationModal width: 520 - height: 500; + height: 500 visible: false - color: StateDialogStyle.generic.backgroundColor title: qsTr("Edit Transaction") property int transactionIndex property alias gas: gasValueEdit.gasValue; @@ -82,8 +82,6 @@ Window { } } initTypeLoader(); - modalTransactionDialog.setX((Screen.width - width) / 2); - modalTransactionDialog.setY((Screen.height - height) / 2); visible = true; valueField.focus = true; @@ -168,210 +166,213 @@ Window { item.parameters = paramValues; return item; } - - ColumnLayout { + contentItem: Rectangle { + color: StateDialogStyle.generic.backgroundColor anchors.fill: parent - anchors.margins: 10 - ColumnLayout { - id: dialogContent - anchors.top: parent.top - spacing: 10 - RowLayout - { - id: rowSender - Layout.fillWidth: true - height: 150 - DefaultLabel { - Layout.preferredWidth: 75 - text: qsTr("Sender") + anchors.fill: parent + anchors.margins: 10 + + ColumnLayout { + id: dialogContent + anchors.top: parent.top + spacing: 10 + RowLayout + { + id: rowSender + Layout.fillWidth: true + height: 150 + DefaultLabel { + Layout.preferredWidth: 75 + text: qsTr("Sender") + } + ComboBox { + + function select(secret) + { + for (var i in model) + if (model[i].secret === secret) + { + currentIndex = i; + break; + } + } + + id: senderComboBox + Layout.preferredWidth: 350 + currentIndex: 0 + textRole: "name" + editable: false + } } - ComboBox { - function select(secret) - { - for (var i in model) - if (model[i].secret === secret) - { - currentIndex = i; - break; - } + RowLayout + { + id: rowContract + Layout.fillWidth: true + height: 150 + DefaultLabel { + Layout.preferredWidth: 75 + text: qsTr("Contract") + } + ComboBox { + id: contractComboBox + function currentValue() { + return (currentIndex >=0 && currentIndex < contractsModel.count) ? contractsModel.get(currentIndex).cid : ""; + } + Layout.preferredWidth: 350 + currentIndex: -1 + textRole: "text" + editable: false + model: ListModel { + id: contractsModel + } + onCurrentIndexChanged: { + loadFunctions(currentValue()); + } } - - id: senderComboBox - Layout.preferredWidth: 350 - currentIndex: 0 - textRole: "name" - editable: false } - } - RowLayout - { - id: rowContract - Layout.fillWidth: true - height: 150 - DefaultLabel { - Layout.preferredWidth: 75 - text: qsTr("Contract") - } - ComboBox { - id: contractComboBox - function currentValue() { - return (currentIndex >=0 && currentIndex < contractsModel.count) ? contractsModel.get(currentIndex).cid : ""; - } - Layout.preferredWidth: 350 - currentIndex: -1 - textRole: "text" - editable: false - model: ListModel { - id: contractsModel + RowLayout + { + id: rowFunction + Layout.fillWidth: true + height: 150 + DefaultLabel { + Layout.preferredWidth: 75 + text: qsTr("Function") } - onCurrentIndexChanged: { - loadFunctions(currentValue()); + ComboBox { + id: functionComboBox + Layout.preferredWidth: 350 + currentIndex: -1 + textRole: "text" + editable: false + model: ListModel { + id: functionsModel + } + onCurrentIndexChanged: { + loadParameters(); + } } } - } - RowLayout - { - id: rowFunction - Layout.fillWidth: true - height: 150 - DefaultLabel { - Layout.preferredWidth: 75 - text: qsTr("Function") + CommonSeparator + { + Layout.fillWidth: true } - ComboBox { - id: functionComboBox - Layout.preferredWidth: 350 - currentIndex: -1 - textRole: "text" - editable: false - model: ListModel { - id: functionsModel + + RowLayout + { + id: rowValue + Layout.fillWidth: true + height: 150 + DefaultLabel { + Layout.preferredWidth: 75 + text: qsTr("Value") } - onCurrentIndexChanged: { - loadParameters(); + Ether { + id: valueField + edit: true + displayFormattedValue: true } } - } - - CommonSeparator - { - Layout.fillWidth: true - } - RowLayout - { - id: rowValue - Layout.fillWidth: true - height: 150 - DefaultLabel { - Layout.preferredWidth: 75 - text: qsTr("Value") - } - Ether { - id: valueField - edit: true - displayFormattedValue: true + CommonSeparator + { + Layout.fillWidth: true } - } - CommonSeparator - { - Layout.fillWidth: true - } + RowLayout + { + id: rowGas + Layout.fillWidth: true + height: 150 + DefaultLabel { + Layout.preferredWidth: 75 + text: qsTr("Gas") + } - RowLayout - { - id: rowGas - Layout.fillWidth: true - height: 150 - DefaultLabel { - Layout.preferredWidth: 75 - text: qsTr("Gas") + DefaultTextField + { + property variant gasValue + onGasValueChanged: text = gasValue.value(); + onTextChanged: gasValue.setValue(text); + implicitWidth: 200 + id: gasValueEdit; + } } - DefaultTextField + CommonSeparator { - property variant gasValue - onGasValueChanged: text = gasValue.value(); - onTextChanged: gasValue.setValue(text); - implicitWidth: 200 - id: gasValueEdit; + Layout.fillWidth: true } - } - CommonSeparator - { - Layout.fillWidth: true - } + RowLayout + { + id: rowGasPrice + Layout.fillWidth: true + height: 150 + DefaultLabel { + Layout.preferredWidth: 75 + text: qsTr("Gas Price") + } + Ether { + id: gasPriceField + edit: true + displayFormattedValue: true + } + } + + CommonSeparator + { + Layout.fillWidth: true + } - RowLayout - { - id: rowGasPrice - Layout.fillWidth: true - height: 150 DefaultLabel { + id: paramLabel + text: qsTr("Parameters:") Layout.preferredWidth: 75 - text: qsTr("Gas Price") - } - Ether { - id: gasPriceField - edit: true - displayFormattedValue: true } - } - - CommonSeparator - { - Layout.fillWidth: true - } - DefaultLabel { - id: paramLabel - text: qsTr("Parameters:") - Layout.preferredWidth: 75 - } + ScrollView + { + id: paramScroll + anchors.top: paramLabel.bottom + anchors.topMargin: 10 + Layout.fillWidth: true + Layout.fillHeight: true + StructView + { + id: typeLoader + Layout.preferredWidth: 150 + members: paramsModel; + } + } - ScrollView - { - id: paramScroll - anchors.top: paramLabel.bottom - anchors.topMargin: 10 - Layout.fillWidth: true - Layout.fillHeight: true - StructView + CommonSeparator { - id: typeLoader - Layout.preferredWidth: 150 - members: paramsModel; + Layout.fillWidth: true + visible: paramsModel.length > 0 } } - CommonSeparator + RowLayout { - Layout.fillWidth: true - visible: paramsModel.length > 0 - } - } - - RowLayout - { - anchors.bottom: parent.bottom - anchors.right: parent.right; - - Button { - text: qsTr("OK"); - onClicked: { - close(); - accepted(); + anchors.bottom: parent.bottom + anchors.right: parent.right; + + Button { + text: qsTr("OK"); + onClicked: { + close(); + accepted(); + } + } + Button { + text: qsTr("Cancel"); + onClicked: close(); } - } - Button { - text: qsTr("Cancel"); - onClicked: close(); } } } diff --git a/mix/qml/main.qml b/mix/qml/main.qml index 5544d4639..9dc466402 100644 --- a/mix/qml/main.qml +++ b/mix/qml/main.qml @@ -163,7 +163,7 @@ ApplicationWindow { id: editStatesAction text: qsTr("Edit States") shortcut: "Ctrl+Alt+E" - onTriggered: stateList.show(); + onTriggered: stateList.open(); } Connections { From 519502f70c5da8954a8ca49a2b24674d7f54bbfe Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 2 Apr 2015 16:53:37 +0200 Subject: [PATCH 2/3] Close button on StatesList --- mix/qml/StateList.qml | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/mix/qml/StateList.qml b/mix/qml/StateList.qml index 4756dbe8f..ab035ded4 100644 --- a/mix/qml/StateList.qml +++ b/mix/qml/StateList.qml @@ -9,11 +9,11 @@ import "." Dialog { id: stateListContainer modality: Qt.WindowModal - + standardButtons: StandardButton.Close width: 640 height: 480 - visible: false + onRejected: {} contentItem: Rectangle { anchors.fill: parent ColumnLayout @@ -26,6 +26,7 @@ Dialog { model: projectModel.stateListModel itemDelegate: renderDelegate headerDelegate: null + frameVisible: false TableViewColumn { role: "title" title: qsTr("State") @@ -33,9 +34,18 @@ Dialog { } } - Button { + Row{ + spacing: 5 anchors.bottom: parent.bottom - action: addStateAction + anchors.right: parent.right + anchors.rightMargin: 10 + Button { + action: addStateAction + } + + Button { + action: closeAction + } } } } @@ -72,12 +82,21 @@ Dialog { } } - Action { - id: addStateAction - text: "&Add State" - shortcut: "Ctrl+T" - enabled: codeModel.hasContract && !clientModel.running; - onTriggered: list.model.addState(); + Row + { + Action { + id: addStateAction + text: qsTr("Add State") + shortcut: "Ctrl+T" + enabled: codeModel.hasContract && !clientModel.running; + onTriggered: list.model.addState(); + } + + Action { + id: closeAction + text: qsTr("Close") + onTriggered: stateListContainer.close(); + } } } From 07bc9f6d489ebf742eb6e12c4877b57ed9f8caef Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 2 Apr 2015 16:57:01 +0200 Subject: [PATCH 3/3] small changes --- mix/qml/StateList.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/mix/qml/StateList.qml b/mix/qml/StateList.qml index ab035ded4..39567feac 100644 --- a/mix/qml/StateList.qml +++ b/mix/qml/StateList.qml @@ -9,11 +9,9 @@ import "." Dialog { id: stateListContainer modality: Qt.WindowModal - standardButtons: StandardButton.Close width: 640 height: 480 visible: false - onRejected: {} contentItem: Rectangle { anchors.fill: parent ColumnLayout