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