Browse Source

Merge branch 'develop' of github.com:ethereum/cpp-ethereum into develop

cl-refactor
Gav Wood 10 years ago
parent
commit
472e941647
  1. 4
      libethereum/State.cpp
  2. 5
      libtestutils/CMakeLists.txt
  3. 2
      mix/qml/CodeEditorView.qml
  4. 5
      mix/qml/ProjectModel.qml
  5. 2
      mix/qml/TransactionLog.qml
  6. 57
      mix/qml/WebCodeEditor.qml
  7. 15
      mix/qml/html/cm/errorannotation.js
  8. 79
      mix/qml/js/ProjectModel.js

4
libethereum/State.cpp

@ -421,9 +421,9 @@ TransactionReceipts State::sync(BlockChain const& _bc, TransactionQueue& _tq, Ga
{
try
{
Transaction t(i.second, CheckSignature::Sender);
if (t.gasPrice() >= _gp.ask(*this))
if (Transaction(i.second, CheckSignature::Range).gasPrice() >= _gp.ask(*this))
{
Transaction t(i.second, CheckSignature::Sender);
// don't have it yet! Execute it now.
uncommitToMine();
// boost::timer t;

5
libtestutils/CMakeLists.txt

@ -18,6 +18,11 @@ set(EXECUTABLE testutils)
file(GLOB HEADERS "*.h")
if (NOT JSONRPC)
list(REMOVE_ITEM SRC_LIST "./FixedWebThreeServer.cpp")
list(REMOVE_ITEM HEADERS "./FixedWebThreeServer.h")
endif()
if (ETH_STATIC)
add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS})
else()

2
mix/qml/CodeEditorView.qml

@ -139,7 +139,7 @@ Item {
}
onProjectSaved: {
if (projectModel.appIsClosing)
if (projectModel.appIsClosing || projectModel.projectIsClosing)
return;
for (var i = 0; i < editorListModel.count; i++)
{

5
mix/qml/ProjectModel.qml

@ -35,6 +35,7 @@ Item {
readonly property string projectFileName: ".mix"
property bool appIsClosing: false
property bool projectIsClosing: false
property string projectPath: ""
property string projectTitle: ""
property string currentDocumentId: ""
@ -121,13 +122,17 @@ Item {
icon: StandardIcon.Question
property var callBack;
onYes: {
projectIsClosing = true;
projectModel.saveAll();
unsavedFiles = [];
ProjectModelCode.doCloseProject();
if (callBack)
callBack();
}
onRejected: {}
onNo: {
projectIsClosing = true;
unsavedFiles = [];
ProjectModelCode.doCloseProject();
if (callBack)
callBack();

2
mix/qml/TransactionLog.qml

@ -44,7 +44,7 @@ Item {
target: projectModel
onProjectSaved:
{
if (projectModel.appIsClosing)
if (projectModel.appIsClosing || projectModel.projectIsClosing)
return;
if (compilationStatus.compilationComplete && codeModel.hasContract && !clientModel.running)
projectModel.stateListModel.debugDefaultState();

57
mix/qml/WebCodeEditor.qml

@ -18,7 +18,7 @@ Item {
function setText(text, mode) {
currentText = text;
currentMode = mode;
if (initialized) {
if (initialized && editorBrowser) {
editorBrowser.runJavaScript("setTextBase64(\"" + Qt.btoa(text) + "\")");
editorBrowser.runJavaScript("setMode(\"" + mode + "\")");
}
@ -26,7 +26,8 @@ Item {
}
function setFocus() {
editorBrowser.forceActiveFocus();
if (editorBrowser)
editorBrowser.forceActiveFocus();
}
function getText() {
@ -34,19 +35,19 @@ Item {
}
function syncClipboard() {
if (Qt.platform.os == "osx") {
if (Qt.platform.os == "osx" && editorBrowser) {
var text = clipboard.text;
editorBrowser.runJavaScript("setClipboardBase64(\"" + Qt.btoa(text) + "\")");
}
}
function highlightExecution(location) {
if (initialized)
if (initialized && editorBrowser)
editorBrowser.runJavaScript("highlightExecution(" + location.start + "," + location.end + ")");
}
function showWarning(content) {
if (initialized)
if (initialized && editorBrowser)
editorBrowser.runJavaScript("showWarning('" + content + "')");
}
@ -55,12 +56,12 @@ Item {
}
function toggleBreakpoint() {
if (initialized)
if (initialized && editorBrowser)
editorBrowser.runJavaScript("toggleBreakpoint()");
}
function changeGeneration() {
if (initialized)
if (initialized && editorBrowser)
editorBrowser.runJavaScript("changeGeneration()", function(result) {});
}
@ -81,9 +82,15 @@ Item {
console.log("editor: " + sourceID + ":" + lineNumber + ":" + message);
}
Component.onDestruction:
{
codeModel.onCompilationComplete.disconnect(compilationComplete);
codeModel.onCompilationError.disconnect(compilationError);
}
onLoadingChanged:
{
if (!loading) {
if (!loading && editorBrowser) {
initialized = true;
setText(currentText, currentMode);
runJavaScript("getTextChanged()", function(result) { });
@ -91,23 +98,31 @@ Item {
syncClipboard();
if (currentMode === "solidity")
{
codeModel.onCompilationComplete.connect(function(){
runJavaScript("compilationComplete()", function(result) { });
});
codeModel.onCompilationError.connect(function(error){
var errorInfo = ErrorLocationFormater.extractErrorInfo(error, false);
if (errorInfo.line && errorInfo.column)
runJavaScript("compilationError('" + errorInfo.line + "', '" + errorInfo.column + "', '" + errorInfo.errorDetail + "')", function(result) { });
else
runJavaScript("compilationComplete()", function(result) { });
});
codeModel.onCompilationComplete.connect(compilationComplete);
codeModel.onCompilationError.connect(compilationError);
}
parent.changeGeneration();
}
}
function compilationComplete()
{
if (editorBrowser)
editorBrowser.runJavaScript("compilationComplete()", function(result) { });
}
function compilationError(error)
{
if (!editorBrowser || !error)
return;
var errorInfo = ErrorLocationFormater.extractErrorInfo(error, false);
if (errorInfo.line && errorInfo.column)
editorBrowser.runJavaScript("compilationError('" + errorInfo.line + "', '" + errorInfo.column + "', '" + errorInfo.errorDetail + "')", function(result) { });
else
editorBrowser.runJavaScript("compilationComplete()", function(result) { });
}
Timer
{
id: pollTimer
@ -115,6 +130,8 @@ Item {
running: false
repeat: true
onTriggered: {
if (!editorBrowser)
return;
editorBrowser.runJavaScript("getTextChanged()", function(result) {
if (result === true) {
editorBrowser.runJavaScript("getText()" , function(textValue) {

15
mix/qml/html/cm/errorannotation.js

@ -23,12 +23,15 @@ ErrorAnnotation.prototype.init = function()
ErrorAnnotation.prototype.open = function()
{
var node = document.createElement("div");
node.id = "annotation"
node.innerHTML = this.content;
node.className = "CodeMirror-errorannotation-context";
this.lineWidget = this.editor.addLineWidget(this.errorMark.find().from.line, node, { coverGutter: false });
this.opened = true;
if (this.errorMark.find())
{
var node = document.createElement("div");
node.id = "annotation"
node.innerHTML = this.content;
node.className = "CodeMirror-errorannotation-context";
this.lineWidget = this.editor.addLineWidget(this.errorMark.find().from.line, node, { coverGutter: false });
this.opened = true;
}
}
ErrorAnnotation.prototype.close = function()

79
mix/qml/js/ProjectModel.js

@ -51,6 +51,7 @@ function closeProject(callBack) {
}
else
{
projectIsClosing = true;
doCloseProject();
if (callBack)
callBack();
@ -96,45 +97,45 @@ function saveProjectFile()
function loadProject(path) {
closeProject(function() {
console.log("Loading project at " + path);
var projectFile = path + projectFileName;
var json = fileIo.readFile(projectFile);
var projectData = JSON.parse(json);
if (projectData.deploymentDir)
projectModel.deploymentDir = projectData.deploymentDir
if (projectData.packageHash)
deploymentDialog.packageHash = projectData.packageHash
if (projectData.packageBase64)
deploymentDialog.packageBase64 = projectData.packageBase64
if (projectData.applicationUrlEth)
deploymentDialog.applicationUrlEth = projectData.applicationUrlEth
if (projectData.applicationUrlHttp)
deploymentDialog.applicationUrlHttp = projectData.applicationUrlHttp
if (!projectData.title) {
var parts = path.split("/");
projectData.title = parts[parts.length - 2];
}
deploymentAddresses = projectData.deploymentAddresses ? projectData.deploymentAddresses : [];
projectTitle = projectData.title;
projectPath = path;
if (!projectData.files)
projectData.files = [];
for(var i = 0; i < projectData.files.length; i++) {
addFile(projectData.files[i]);
}
projectSettings.lastProjectPath = path;
projectLoading(projectData);
projectLoaded()
//TODO: move this to codemodel
var contractSources = {};
for (var d = 0; d < listModel.count; d++) {
var doc = listModel.get(d);
if (doc.isContract)
contractSources[doc.documentId] = fileIo.readFile(doc.path);
}
codeModel.reset(contractSources);
console.log("Loading project at " + path);
var projectFile = path + projectFileName;
var json = fileIo.readFile(projectFile);
var projectData = JSON.parse(json);
if (projectData.deploymentDir)
projectModel.deploymentDir = projectData.deploymentDir
if (projectData.packageHash)
deploymentDialog.packageHash = projectData.packageHash
if (projectData.packageBase64)
deploymentDialog.packageBase64 = projectData.packageBase64
if (projectData.applicationUrlEth)
deploymentDialog.applicationUrlEth = projectData.applicationUrlEth
if (projectData.applicationUrlHttp)
deploymentDialog.applicationUrlHttp = projectData.applicationUrlHttp
if (!projectData.title) {
var parts = path.split("/");
projectData.title = parts[parts.length - 2];
}
deploymentAddresses = projectData.deploymentAddresses ? projectData.deploymentAddresses : [];
projectTitle = projectData.title;
projectPath = path;
if (!projectData.files)
projectData.files = [];
for(var i = 0; i < projectData.files.length; i++) {
addFile(projectData.files[i]);
}
projectSettings.lastProjectPath = path;
projectLoading(projectData);
projectLoaded()
//TODO: move this to codemodel
var contractSources = {};
for (var d = 0; d < listModel.count; d++) {
var doc = listModel.get(d);
if (doc.isContract)
contractSources[doc.documentId] = fileIo.readFile(doc.path);
}
codeModel.reset(contractSources);
});
}

Loading…
Cancel
Save