arkpar
10 years ago
9 changed files with 567 additions and 36 deletions
@ -0,0 +1,397 @@ |
|||||
|
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 QtQuick.Window 2.1 |
||||
|
import QtQuick.PrivateWidgets 1.1 |
||||
|
import Qt.labs.settings 1.0 |
||||
|
import org.ethereum.qml.QEther 1.0 |
||||
|
import org.ethereum.qml.CodeModel 1.0 |
||||
|
import org.ethereum.qml.ClientModel 1.0 |
||||
|
import org.ethereum.qml.FileIo 1.0 |
||||
|
import org.ethereum.qml.Clipboard 1.0 |
||||
|
import org.ethereum.qml.ApplicationService 1.0 |
||||
|
|
||||
|
ApplicationWindow { |
||||
|
|
||||
|
id: mainApplication |
||||
|
signal loaded; |
||||
|
visible: true |
||||
|
width: 1200 |
||||
|
height: 800 |
||||
|
minimumWidth: 400 |
||||
|
minimumHeight: 300 |
||||
|
title: qsTr("Mix") |
||||
|
property alias systemPointSize: appService.systemPointSize; |
||||
|
property alias mainContent: mainContent; |
||||
|
property alias codeModel: codeModel; |
||||
|
property alias clientModel: clientModel; |
||||
|
property alias projectModel: projectModel; |
||||
|
property alias appService: appService; |
||||
|
|
||||
|
ApplicationService { |
||||
|
id: appService |
||||
|
} |
||||
|
|
||||
|
CodeModel { |
||||
|
id: codeModel |
||||
|
} |
||||
|
|
||||
|
ClientModel { |
||||
|
id: clientModel |
||||
|
codeModel: codeModel |
||||
|
} |
||||
|
|
||||
|
ProjectModel { |
||||
|
id: projectModel |
||||
|
} |
||||
|
|
||||
|
FileIo { |
||||
|
id: fileIo |
||||
|
} |
||||
|
|
||||
|
Clipboard { |
||||
|
id: clipboard |
||||
|
} |
||||
|
|
||||
|
Connections { |
||||
|
target: mainApplication |
||||
|
onClosing: |
||||
|
{ |
||||
|
mainApplication.close(); |
||||
|
close.accepted = false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Component.onCompleted: { |
||||
|
loaded(); |
||||
|
} |
||||
|
|
||||
|
function close() { |
||||
|
projectModel.appIsClosing = true; |
||||
|
if (projectModel.projectPath !== "") |
||||
|
projectModel.closeProject(function() { Qt.quit(); }) |
||||
|
else |
||||
|
Qt.quit(); |
||||
|
} |
||||
|
|
||||
|
menuBar: MenuBar { |
||||
|
Menu { |
||||
|
title: qsTr("File") |
||||
|
MenuItem { action: createProjectAction } |
||||
|
MenuItem { action: openProjectAction } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: saveAllFilesAction } |
||||
|
MenuItem { action: saveCurrentDocument } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: addExistingFileAction } |
||||
|
MenuItem { action: addNewJsFileAction } |
||||
|
MenuItem { action: addNewHtmlFileAction } |
||||
|
MenuItem { action: addNewCssFileAction } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: addNewContractAction } |
||||
|
MenuItem { action: closeProjectAction } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: exitAppAction } |
||||
|
} |
||||
|
Menu { |
||||
|
title: qsTr("Deploy") |
||||
|
MenuItem { action: mineAction } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: editStatesAction } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: deployViaRpcAction } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: toggleRunOnLoadAction } |
||||
|
} |
||||
|
Menu { |
||||
|
title: qsTr("Debug") |
||||
|
MenuItem { action: debugRunAction } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: toggleAssemblyDebuggingAction } |
||||
|
} |
||||
|
Menu { |
||||
|
title: qsTr("Windows") |
||||
|
MenuItem { action: openNextDocumentAction } |
||||
|
MenuItem { action: openPrevDocumentAction } |
||||
|
MenuSeparator {} |
||||
|
MenuItem { action: toggleProjectNavigatorAction } |
||||
|
MenuItem { action: showHideRightPanelAction } |
||||
|
MenuItem { action: toggleTransactionLogAction } |
||||
|
MenuItem { action: toggleWebPreviewAction } |
||||
|
MenuItem { action: toggleWebPreviewOrientationAction } |
||||
|
//MenuItem { action: toggleCallsInLog } |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
MainContent { |
||||
|
id: mainContent; |
||||
|
anchors.fill: parent |
||||
|
} |
||||
|
|
||||
|
ModalDialog { |
||||
|
objectName: "dialog" |
||||
|
id: dialog |
||||
|
} |
||||
|
|
||||
|
AlertMessageDialog { |
||||
|
objectName: "alertMessageDialog" |
||||
|
id: messageDialog |
||||
|
} |
||||
|
|
||||
|
Settings { |
||||
|
id: mainWindowSettings |
||||
|
property alias mainWidth: mainApplication.width |
||||
|
property alias mainHeight: mainApplication.height |
||||
|
property alias mainX: mainApplication.x |
||||
|
property alias mainY: mainApplication.y |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: exitAppAction |
||||
|
text: qsTr("Exit") |
||||
|
shortcut: "Ctrl+Q" |
||||
|
onTriggered: |
||||
|
{ |
||||
|
mainApplication.close(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: mineAction |
||||
|
text: qsTr("New Block") |
||||
|
shortcut: "Ctrl+M" |
||||
|
onTriggered: clientModel.mine(); |
||||
|
enabled: codeModel.hasContract && !clientModel.running && !clientModel.mining |
||||
|
} |
||||
|
|
||||
|
StateList { |
||||
|
id: stateList |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: editStatesAction |
||||
|
text: qsTr("Edit States") |
||||
|
shortcut: "Ctrl+Alt+E" |
||||
|
onTriggered: stateList.show(); |
||||
|
} |
||||
|
|
||||
|
Connections { |
||||
|
target: projectModel.stateListModel |
||||
|
|
||||
|
function updateRunLabel() |
||||
|
{ |
||||
|
debugRunAction.text = qsTr("Deploy") + " \"" + projectModel.stateListModel.defaultStateName() + "\""; |
||||
|
} |
||||
|
|
||||
|
onDefaultStateChanged: updateRunLabel() |
||||
|
onStateListModelReady: updateRunLabel() |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: debugRunAction |
||||
|
text: qsTr("Deploy") |
||||
|
shortcut: "F5" |
||||
|
onTriggered: mainContent.startQuickDebugging() |
||||
|
enabled: codeModel.hasContract && !clientModel.running |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: toggleAssemblyDebuggingAction |
||||
|
text: qsTr("Show VM Code") |
||||
|
shortcut: "Ctrl+Alt+V" |
||||
|
onTriggered: mainContent.rightPane.assemblyMode = !mainContent.rightPane.assemblyMode; |
||||
|
checked: mainContent.rightPane.assemblyMode; |
||||
|
enabled: true |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: toggleWebPreviewAction |
||||
|
text: qsTr("Show Web View") |
||||
|
shortcut: "F2" |
||||
|
checkable: true |
||||
|
checked: mainContent.webViewVisible |
||||
|
onTriggered: mainContent.toggleWebPreview(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: toggleTransactionLogAction |
||||
|
text: qsTr("Show States and Transactions") |
||||
|
shortcut: "Alt+1" |
||||
|
checkable: true |
||||
|
checked: mainContent.rightPane.transactionLog.visible |
||||
|
onTriggered: mainContent.rightPane.transactionLog.visible = !mainContent.rightPane.transactionLog.visible |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: toggleProjectNavigatorAction |
||||
|
text: qsTr("Show Project Navigator") |
||||
|
shortcut: "Alt+0" |
||||
|
checkable: true |
||||
|
checked: mainContent.projectViewVisible |
||||
|
onTriggered: mainContent.toggleProjectView(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: toggleWebPreviewOrientationAction |
||||
|
text: qsTr("Horizontal Web View") |
||||
|
shortcut: "" |
||||
|
checkable: true |
||||
|
checked: mainContent.webViewHorizontal |
||||
|
onTriggered: mainContent.toggleWebPreviewOrientation(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: toggleRunOnLoadAction |
||||
|
text: qsTr("Load State on Startup") |
||||
|
shortcut: "" |
||||
|
checkable: true |
||||
|
checked: mainContent.runOnProjectLoad |
||||
|
onTriggered: mainContent.runOnProjectLoad = !mainContent.runOnProjectLoad |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: showHideRightPanelAction |
||||
|
text: qsTr("Show Right View") |
||||
|
shortcut: "F7" |
||||
|
checkable: true |
||||
|
checked: mainContent.rightViewVisible |
||||
|
onTriggered: mainContent.toggleRightView(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: createProjectAction |
||||
|
text: qsTr("&New Project") |
||||
|
shortcut: "Ctrl+N" |
||||
|
enabled: true; |
||||
|
onTriggered: projectModel.createProject(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: openProjectAction |
||||
|
text: qsTr("&Open Project") |
||||
|
shortcut: "Ctrl+O" |
||||
|
enabled: true; |
||||
|
onTriggered: openProjectFileDialog.open() |
||||
|
} |
||||
|
|
||||
|
FileDialog { |
||||
|
id: openProjectFileDialog |
||||
|
visible: false |
||||
|
title: qsTr("Open a Project") |
||||
|
selectFolder: true |
||||
|
onAccepted: { |
||||
|
var path = openProjectFileDialog.fileUrl.toString(); |
||||
|
path += "/"; |
||||
|
projectModel.loadProject(path); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: addNewJsFileAction |
||||
|
text: qsTr("New JavaScript File") |
||||
|
shortcut: "Ctrl+Alt+J" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.newJsFile(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: addNewHtmlFileAction |
||||
|
text: qsTr("New HTML File") |
||||
|
shortcut: "Ctrl+Alt+H" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.newHtmlFile(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: addNewCssFileAction |
||||
|
text: qsTr("New CSS File") |
||||
|
shortcut: "Ctrl+Alt+S" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.newCssFile(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: addNewContractAction |
||||
|
text: qsTr("New Contract") |
||||
|
shortcut: "Ctrl+Alt+C" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.newContract(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: addExistingFileAction |
||||
|
text: qsTr("Add Existing File") |
||||
|
shortcut: "Ctrl+Alt+A" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: addExistingFileDialog.open() |
||||
|
} |
||||
|
|
||||
|
FileDialog { |
||||
|
id: addExistingFileDialog |
||||
|
visible: false |
||||
|
title: qsTr("Add a File") |
||||
|
selectFolder: false |
||||
|
onAccepted: { |
||||
|
var paths = addExistingFileDialog.fileUrls; |
||||
|
projectModel.addExistingFiles(paths); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: saveAllFilesAction |
||||
|
text: qsTr("Save All") |
||||
|
shortcut: "Ctrl+Shift+A" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.saveAll(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: saveCurrentDocument |
||||
|
text: qsTr("Save Current Document") |
||||
|
shortcut: "Ctrl+S" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.saveCurrentDocument(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: closeProjectAction |
||||
|
text: qsTr("Close Project") |
||||
|
shortcut: "Ctrl+W" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.closeProject(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: openNextDocumentAction |
||||
|
text: qsTr("Next Document") |
||||
|
shortcut: "Ctrl+Tab" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.openNextDocument(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: openPrevDocumentAction |
||||
|
text: qsTr("Previous Document") |
||||
|
shortcut: "Ctrl+Shift+Tab" |
||||
|
enabled: !projectModel.isEmpty |
||||
|
onTriggered: projectModel.openPrevDocument(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: toggleBreakpointAction |
||||
|
text: qsTr("Toggle Breakpoint") |
||||
|
shortcut: "F9" |
||||
|
enabled: mainContent.codeEditor.editingContract(); |
||||
|
onTriggered: mainContent.toggleBreakpoint(); |
||||
|
} |
||||
|
|
||||
|
Action { |
||||
|
id: deployViaRpcAction |
||||
|
text: qsTr("Deploy to Network") |
||||
|
shortcut: "Ctrl+Shift+D" |
||||
|
enabled: !projectModel.isEmpty && codeModel.hasContract |
||||
|
onTriggered: projectModel.deployProject(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,6 @@ |
|||||
|
<RCC> |
||||
|
<qresource prefix="/"> |
||||
|
<file>test/TestMain.qml</file> |
||||
|
<file>test/TestTransactionDebug.qml</file> |
||||
|
</qresource> |
||||
|
</RCC> |
@ -0,0 +1,51 @@ |
|||||
|
import QtQuick 2.2 |
||||
|
import QtTest 1.1 |
||||
|
//import Qt.test.qtestroot 1.0 |
||||
|
import "../qml" |
||||
|
|
||||
|
|
||||
|
TestCase |
||||
|
{ |
||||
|
|
||||
|
Item |
||||
|
{ |
||||
|
id: helper |
||||
|
function findChild(item, childId) { |
||||
|
if (item.children) { |
||||
|
var searchString = "button" |
||||
|
|
||||
|
for (var idx in item.children) { |
||||
|
var currentItem = item.children[idx] |
||||
|
|
||||
|
if (currentItem.id.match("^"+childId) === childId) |
||||
|
return currentItem; |
||||
|
|
||||
|
return findChild(currentItem, childId); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
function test_t1() |
||||
|
{ |
||||
|
waitForRendering(mainApplication.mainContent, 10000); |
||||
|
mainApplication.projectModel.createProject(); |
||||
|
var projectDlg = helper.findChild(mainApplication, "newProjectDialog"); |
||||
|
|
||||
|
if (mainApplication.appService.waitForSignal(mainApplication.codeModel, "compilationComplete()", 5000)) |
||||
|
console.log("compiled"); |
||||
|
} |
||||
|
|
||||
|
function runTest() |
||||
|
{ |
||||
|
waitForRendering(mainApplication.mainContent, 10000); |
||||
|
console.log("runtest"); |
||||
|
mousePress(mainApplication, 10, 10); |
||||
|
} |
||||
|
|
||||
|
Application { |
||||
|
id: mainApplication |
||||
|
} |
||||
|
|
||||
|
} |
Loading…
Reference in new issue