Gav Wood
10 years ago
21 changed files with 969 additions and 0 deletions
@ -0,0 +1 @@ |
|||||
|
*.pro |
@ -0,0 +1,36 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file ApplicationCtx.cpp
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Provide an access to the current QQmlApplicationEngine which is used to add QML file on the fly. |
||||
|
* In the future this class can be extended to add more variable related to the context of the application. |
||||
|
*/ |
||||
|
|
||||
|
#include <QQmlApplicationEngine> |
||||
|
#include "ApplicationCtx.h" |
||||
|
using namespace dev::mix; |
||||
|
|
||||
|
ApplicationCtx* ApplicationCtx::Instance = nullptr; |
||||
|
|
||||
|
QQmlApplicationEngine* ApplicationCtx::appEngine() |
||||
|
{ |
||||
|
return m_applicationEngine; |
||||
|
} |
||||
|
|
||||
|
void ApplicationCtx::setApplicationContext(QQmlApplicationEngine* _engine) |
||||
|
{ |
||||
|
if (Instance == nullptr) |
||||
|
Instance = new ApplicationCtx(_engine); |
||||
|
} |
@ -0,0 +1,55 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file ApplicationCtx.h
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Provide an access to the current QQmlApplicationEngine which is used to add QML file on the fly. |
||||
|
* In the future this class can be extended to add more variable related to the context of the application. |
||||
|
*/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <QQmlApplicationEngine> |
||||
|
|
||||
|
namespace dev |
||||
|
{ |
||||
|
|
||||
|
namespace mix |
||||
|
{ |
||||
|
|
||||
|
class ApplicationCtx: public QObject |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
public: |
||||
|
ApplicationCtx(QQmlApplicationEngine* _engine) { m_applicationEngine = _engine; } |
||||
|
~ApplicationCtx() { delete m_applicationEngine; } |
||||
|
static ApplicationCtx* getInstance() { return Instance; } |
||||
|
static void setApplicationContext(QQmlApplicationEngine* _engine); |
||||
|
QQmlApplicationEngine* appEngine(); |
||||
|
|
||||
|
private: |
||||
|
static ApplicationCtx* Instance; |
||||
|
QQmlApplicationEngine* m_applicationEngine; |
||||
|
|
||||
|
public slots: |
||||
|
void quitApplication() { delete Instance; } |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,94 @@ |
|||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON) |
||||
|
aux_source_directory(. SRC_LIST) |
||||
|
include_directories(..) |
||||
|
|
||||
|
|
||||
|
if (APPLE) |
||||
|
# Add homebrew path for qt5 |
||||
|
set(CMAKE_PREFIX_PATH /usr/local/opt/qt5) |
||||
|
include_directories(/usr/local/opt/qt5/include /usr/local/include) |
||||
|
elseif ("${TARGET_PLATFORM}" STREQUAL "w64") |
||||
|
set(SRC_LIST ${SRC_LIST} ../windows/qt_plugin_import.cpp) |
||||
|
include_directories(/usr/x86_64-w64-mingw32/include /usr/x86_64-w64-mingw32/include/QtCore /usr/x86_64-w64-mingw32/include/QtGui /usr/x86_64-w64-mingw32/include/QtQuick /usr/x86_64-w64-mingw32/include/QtQml /usr/x86_64-w64-mingw32/include/QtNetwork /usr/x86_64-w64-mingw32/include/QtWidgets /usr/x86_64-w64-mingw32/include/QtWebKit /usr/x86_64-w64-mingw32/include/QtWebKitWidgets) |
||||
|
elseif (UNIX) |
||||
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ";$ENV{QTDIR}/lib/cmake") |
||||
|
endif () |
||||
|
|
||||
|
find_package(Qt5Core REQUIRED) |
||||
|
find_package(Qt5Gui REQUIRED) |
||||
|
find_package(Qt5Quick REQUIRED) |
||||
|
find_package(Qt5Qml REQUIRED) |
||||
|
find_package(Qt5Network REQUIRED) |
||||
|
find_package(Qt5Widgets REQUIRED) |
||||
|
find_package(Qt5WebKit REQUIRED) |
||||
|
find_package(Qt5WebKitWidgets REQUIRED) |
||||
|
|
||||
|
#qt5_wrap_ui(ui_Main.h Main.ui) |
||||
|
|
||||
|
qt5_add_resources(UI_RESOURCES qml.qrc) |
||||
|
|
||||
|
# Set name of binary and add_executable() |
||||
|
file(GLOB HEADERS "*.h") |
||||
|
if (APPLE) |
||||
|
set(EXECUTEABLE mix) |
||||
|
set(BIN_INSTALL_DIR ".") |
||||
|
set(DOC_INSTALL_DIR ".") |
||||
|
|
||||
|
set(PROJECT_VERSION "${ETH_VERSION}") |
||||
|
set(MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME} ${PROJECT_VERSION}") |
||||
|
set(MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_NAME} ${PROJECT_VERSION}") |
||||
|
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_NAME} ${PROJECT_VERSION}") |
||||
|
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}") |
||||
|
set(MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT_YEAR} ${PROJECT_VENDOR}") |
||||
|
set(MACOSX_BUNDLE_GUI_IDENTIFIER "${PROJECT_DOMAIN_SECOND}.${PROJECT_DOMAIN_FIRST}") |
||||
|
set(MACOSX_BUNDLE_BUNDLE_NAME ${EXECUTEABLE}) |
||||
|
set(MACOSX_BUNDLE_ICON_FILE mix) |
||||
|
include(BundleUtilities) |
||||
|
|
||||
|
add_executable(${EXECUTEABLE} MACOSX_BUNDLE ${SRC_LIST} ${HEADERS} ${UI_RESOURCES}) |
||||
|
set_target_properties(${EXECUTEABLE} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/EthereumMacOSXBundleInfo.plist.in") |
||||
|
SET_SOURCE_FILES_PROPERTIES(${EXECUTEABLE} PROPERTIES MACOSX_PACKAGE_LOCATION MacOS) |
||||
|
SET_SOURCE_FILES_PROPERTIES(${MACOSX_BUNDLE_ICON_FILE}.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") |
||||
|
|
||||
|
else () |
||||
|
set(EXECUTEABLE mix) |
||||
|
add_executable(${EXECUTEABLE} ${SRC_LIST} ${HEADERS} ${UI_RESOURCES}) |
||||
|
endif () |
||||
|
|
||||
|
qt5_use_modules(${EXECUTEABLE} Core)# Gui Widgets Network WebKit WebKitWidgets) |
||||
|
target_link_libraries(${EXECUTEABLE} webthree qethereum ethereum evm ethcore devcrypto secp256k1 gmp ${CRYPTOPP_LS} serpent lll solidity evmcore devcore web3jsonrpc jsqrc) |
||||
|
|
||||
|
if (APPLE) |
||||
|
# First have qt5 install plugins and frameworks |
||||
|
add_custom_command(TARGET ${EXECUTEABLE} POST_BUILD |
||||
|
COMMAND /usr/local/opt/qt5/bin/macdeployqt ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${EXECUTEABLE}.app |
||||
|
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) |
||||
|
|
||||
|
# This tool and next will inspect linked libraries in order to determine which dependencies are required |
||||
|
if (${CMAKE_CFG_INTDIR} STREQUAL ".") |
||||
|
set(APP_BUNDLE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTEABLE}.app") |
||||
|
else () |
||||
|
set(APP_BUNDLE_PATH "${CMAKE_CURRENT_BINARY_DIR}/\$ENV{CONFIGURATION}/${EXECUTEABLE}.app") |
||||
|
endif () |
||||
|
install(CODE " |
||||
|
include(BundleUtilities) |
||||
|
set(BU_CHMOD_BUNDLE_ITEMS 1) |
||||
|
fixup_bundle(\"${APP_BUNDLE_PATH}\" \"${BUNDLELIBS}\" \"../libqethereum ../libethereum ../secp256k1\") |
||||
|
" COMPONENT RUNTIME ) |
||||
|
# Cleanup duplicate libs from macdeployqt |
||||
|
install(CODE " |
||||
|
file(GLOB LINGER_RM \"${APP_BUNDLE_PATH}/Contents/Frameworks/*.dylib\") |
||||
|
if (LINGER_RM) |
||||
|
file(REMOVE \${LINGER_RM}) |
||||
|
endif () |
||||
|
") |
||||
|
elseif (UNIX) |
||||
|
else () |
||||
|
target_link_libraries(${EXECUTEABLE} boost_system) |
||||
|
target_link_libraries(${EXECUTEABLE} boost_filesystem) |
||||
|
find_package(Threads REQUIRED) |
||||
|
target_link_libraries(${EXECUTEABLE} ${CMAKE_THREAD_LIBS_INIT}) |
||||
|
install( TARGETS ${EXECUTEABLE} RUNTIME DESTINATION bin ) |
||||
|
endif () |
||||
|
|
||||
|
qt5_use_modules(${EXECUTEABLE} Core Gui) |
@ -0,0 +1,89 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file CodeEditorExtensionMan.cpp
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#include <QQuickItem> |
||||
|
#include <QGraphicsObject> |
||||
|
#include <QQmlEngine> |
||||
|
#include <QQmlComponent> |
||||
|
#include <QQuickTextDocument> |
||||
|
#include <libevm/VM.h> |
||||
|
#include "ConstantCompilationCtrl.h" |
||||
|
#include "features.h" |
||||
|
#include "ApplicationCtx.h" |
||||
|
#include "CodeEditorExtensionManager.h" |
||||
|
using namespace dev::mix; |
||||
|
|
||||
|
CodeEditorExtensionManager::~CodeEditorExtensionManager() |
||||
|
{ |
||||
|
m_features.clear(); |
||||
|
} |
||||
|
|
||||
|
void CodeEditorExtensionManager::loadEditor(QQuickItem* _editor) |
||||
|
{ |
||||
|
if (!_editor) |
||||
|
return; |
||||
|
try |
||||
|
{ |
||||
|
QVariant doc = _editor->property("textDocument"); |
||||
|
if (doc.canConvert<QQuickTextDocument*>()) |
||||
|
{ |
||||
|
QQuickTextDocument* qqdoc = doc.value<QQuickTextDocument*>(); |
||||
|
if (qqdoc) |
||||
|
m_doc = qqdoc->textDocument(); |
||||
|
} |
||||
|
} |
||||
|
catch (...) |
||||
|
{ |
||||
|
qDebug() << "unable to load editor: "; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void CodeEditorExtensionManager::initExtensions() |
||||
|
{ |
||||
|
//only one for now
|
||||
|
std::shared_ptr<ConstantCompilationCtrl> constantCompilation = std::make_shared<ConstantCompilationCtrl>(m_doc); |
||||
|
if (constantCompilation.get()->contentUrl() != "") |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
constantCompilation.get()->addContentOn(m_tabView); |
||||
|
} |
||||
|
catch (...) |
||||
|
{ |
||||
|
qDebug() << "Exception when adding content into view."; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
constantCompilation.get()->start(); |
||||
|
m_features.append(constantCompilation); |
||||
|
} |
||||
|
|
||||
|
void CodeEditorExtensionManager::setEditor(QQuickItem* _editor) |
||||
|
{ |
||||
|
this->loadEditor(_editor); |
||||
|
this->initExtensions(); |
||||
|
} |
||||
|
|
||||
|
void CodeEditorExtensionManager::setTabView(QQuickItem* _tabView) |
||||
|
{ |
||||
|
m_tabView = _tabView; |
||||
|
} |
@ -0,0 +1,61 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file CodeEditorExtensionMan.h
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "memory" |
||||
|
#include <QQuickItem> |
||||
|
#include <QTextDocument> |
||||
|
#include <QVector> |
||||
|
#include "ConstantCompilationCtrl.h" |
||||
|
|
||||
|
namespace dev |
||||
|
{ |
||||
|
|
||||
|
namespace mix |
||||
|
{ |
||||
|
|
||||
|
class CodeEditorExtensionManager: public QObject |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
Q_PROPERTY(QQuickItem* editor MEMBER m_editor WRITE setEditor) |
||||
|
Q_PROPERTY(QQuickItem* tabView MEMBER m_tabView WRITE setTabView) |
||||
|
|
||||
|
public: |
||||
|
CodeEditorExtensionManager() {} |
||||
|
~CodeEditorExtensionManager(); |
||||
|
void initExtensions(); |
||||
|
void setEditor(QQuickItem*); |
||||
|
void setTabView(QQuickItem*); |
||||
|
|
||||
|
private: |
||||
|
QQuickItem* m_editor; |
||||
|
QVector<std::shared_ptr<ConstantCompilationCtrl>> m_features; |
||||
|
QQuickItem* m_tabView; |
||||
|
QTextDocument* m_doc; |
||||
|
void loadEditor(QQuickItem*); |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,97 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file ConstantCompilation.cpp
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#include <QQuickItem> |
||||
|
#include <QtCore/QFileInfo> |
||||
|
#include <QApplication> |
||||
|
#include <QQmlApplicationEngine> |
||||
|
#include <QtCore/QtCore> |
||||
|
#include <QDebug> |
||||
|
#include "ConstantCompilationCtrl.h" |
||||
|
#include "ConstantCompilationModel.h" |
||||
|
using namespace dev::mix; |
||||
|
|
||||
|
ConstantCompilationCtrl::ConstantCompilationCtrl(QTextDocument* _doc) |
||||
|
{ |
||||
|
m_editor = _doc; |
||||
|
m_compilationModel = new ConstantCompilationModel(); |
||||
|
} |
||||
|
|
||||
|
ConstantCompilationCtrl::~ConstantCompilationCtrl() |
||||
|
{ |
||||
|
delete m_compilationModel; |
||||
|
} |
||||
|
|
||||
|
QString ConstantCompilationCtrl::contentUrl() const |
||||
|
{ |
||||
|
return QStringLiteral("qrc:/qml/BasicContent.qml"); |
||||
|
} |
||||
|
|
||||
|
QString ConstantCompilationCtrl::title() const |
||||
|
{ |
||||
|
return "compiler"; |
||||
|
} |
||||
|
|
||||
|
void ConstantCompilationCtrl::start() const |
||||
|
{ |
||||
|
connect(m_editor, SIGNAL(contentsChange(int,int,int)), this, SLOT(compile())); |
||||
|
} |
||||
|
|
||||
|
void ConstantCompilationCtrl::compile() |
||||
|
{ |
||||
|
QString codeContent = m_editor->toPlainText().replace("\n", ""); |
||||
|
if (codeContent.isEmpty()) |
||||
|
{ |
||||
|
resetOutPut(); |
||||
|
return; |
||||
|
} |
||||
|
CompilerResult res = m_compilationModel->compile(m_editor->toPlainText()); |
||||
|
writeOutPut(res); |
||||
|
} |
||||
|
|
||||
|
void ConstantCompilationCtrl::resetOutPut() |
||||
|
{ |
||||
|
QObject* status = m_view->findChild<QObject*>("status", Qt::FindChildrenRecursively); |
||||
|
QObject* content = m_view->findChild<QObject*>("content", Qt::FindChildrenRecursively); |
||||
|
status->setProperty("text", ""); |
||||
|
content->setProperty("text", ""); |
||||
|
} |
||||
|
|
||||
|
void ConstantCompilationCtrl::writeOutPut(CompilerResult const& _res) |
||||
|
{ |
||||
|
QObject* status = m_view->findChild<QObject*>("status", Qt::FindChildrenRecursively); |
||||
|
QObject* content = m_view->findChild<QObject*>("content", Qt::FindChildrenRecursively); |
||||
|
if (_res.success) |
||||
|
{ |
||||
|
status->setProperty("text", "succeeded"); |
||||
|
status->setProperty("color", "green"); |
||||
|
content->setProperty("text", _res.hexCode); |
||||
|
qDebug() << QString("compile succeeded " + _res.hexCode); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
status->setProperty("text", "failure"); |
||||
|
status->setProperty("color", "red"); |
||||
|
content->setProperty("text", _res.comment); |
||||
|
qDebug() << QString("compile failed " + _res.comment); |
||||
|
} |
||||
|
} |
@ -0,0 +1,55 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file ConstantCompilation.h
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <QTextDocument> |
||||
|
#include "ConstantCompilationModel.h" |
||||
|
#include "Extension.h" |
||||
|
|
||||
|
namespace dev |
||||
|
{ |
||||
|
|
||||
|
namespace mix |
||||
|
{ |
||||
|
|
||||
|
class ConstantCompilationCtrl: public Extension |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
public: |
||||
|
ConstantCompilationCtrl(QTextDocument*); |
||||
|
~ConstantCompilationCtrl(); |
||||
|
void start() const override; |
||||
|
QString title() const override; |
||||
|
QString contentUrl() const override; |
||||
|
|
||||
|
private: |
||||
|
QTextDocument* m_editor; |
||||
|
ConstantCompilationModel* m_compilationModel; |
||||
|
void writeOutPut(CompilerResult const&); |
||||
|
void resetOutPut(); |
||||
|
|
||||
|
public Q_SLOTS: |
||||
|
void compile(); |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,61 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file ApplicationCtx.h
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#include <QObject> |
||||
|
#include <libevm/VM.h> |
||||
|
#include <libsolidity/Scanner.h> |
||||
|
#include <libsolidity/CompilerStack.h> |
||||
|
#include <libsolidity/SourceReferenceFormatter.h> |
||||
|
#include "ConstantCompilationModel.h" |
||||
|
using namespace std; |
||||
|
using namespace dev; |
||||
|
using namespace dev::eth; |
||||
|
using namespace dev::mix; |
||||
|
|
||||
|
CompilerResult ConstantCompilationModel::compile(QString _code) |
||||
|
{ |
||||
|
dev::solidity::CompilerStack compiler; |
||||
|
dev::bytes m_data; |
||||
|
CompilerResult res; |
||||
|
try |
||||
|
{ |
||||
|
m_data = compiler.compile(_code.toStdString(), true); |
||||
|
res.success = true; |
||||
|
res.comment = "ok"; |
||||
|
res.hexCode = QString::fromStdString(dev::eth::disassemble(m_data)); |
||||
|
} |
||||
|
catch (dev::Exception const& _exception) |
||||
|
{ |
||||
|
ostringstream error; |
||||
|
solidity::SourceReferenceFormatter::printExceptionInformation(error, _exception, "Error", compiler.getScanner()); |
||||
|
res.success = false; |
||||
|
res.comment = QString::fromStdString(error.str()).toHtmlEscaped(); |
||||
|
res.hexCode = ""; |
||||
|
} |
||||
|
catch (...) |
||||
|
{ |
||||
|
res.success = false; |
||||
|
res.comment = "Uncaught exception."; |
||||
|
res.hexCode = ""; |
||||
|
} |
||||
|
return res; |
||||
|
} |
@ -0,0 +1,51 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file ApplicationCtx.h
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <QObject> |
||||
|
|
||||
|
namespace dev |
||||
|
{ |
||||
|
|
||||
|
namespace mix |
||||
|
{ |
||||
|
|
||||
|
struct CompilerResult |
||||
|
{ |
||||
|
QString hexCode; |
||||
|
QString comment; |
||||
|
bool success; |
||||
|
}; |
||||
|
|
||||
|
class ConstantCompilationModel |
||||
|
{ |
||||
|
|
||||
|
public: |
||||
|
ConstantCompilationModel() {} |
||||
|
~ConstantCompilationModel() {} |
||||
|
CompilerResult compile(QString code); |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,44 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file Feature.cpp
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#include <QMessageBox> |
||||
|
#include <QDebug> |
||||
|
#include <libevm/VM.h> |
||||
|
#include "Extension.h" |
||||
|
#include "ApplicationCtx.h" |
||||
|
using namespace dev; |
||||
|
using namespace dev::mix; |
||||
|
|
||||
|
void Extension::addContentOn(QObject* _tabView) |
||||
|
{ |
||||
|
if (contentUrl() == "") |
||||
|
return; |
||||
|
|
||||
|
QVariant returnValue; |
||||
|
QQmlComponent* component = new QQmlComponent( |
||||
|
ApplicationCtx::getInstance()->appEngine(), |
||||
|
QUrl(this->contentUrl()), _tabView); |
||||
|
|
||||
|
QMetaObject::invokeMethod(_tabView, "addTab", |
||||
|
Q_RETURN_ARG(QVariant, returnValue), |
||||
|
Q_ARG(QVariant, this->title()), |
||||
|
Q_ARG(QVariant, QVariant::fromValue(component))); |
||||
|
|
||||
|
m_view = qvariant_cast<QObject*>(returnValue); |
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file Feature.h
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <QApplication> |
||||
|
#include <QQmlComponent> |
||||
|
|
||||
|
namespace dev |
||||
|
{ |
||||
|
|
||||
|
namespace mix |
||||
|
{ |
||||
|
|
||||
|
class Extension: public QObject |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
public: |
||||
|
Extension() {} |
||||
|
virtual QString contentUrl() const { return ""; } |
||||
|
virtual QString title() const { return ""; } |
||||
|
virtual void start() const {} |
||||
|
void addContentOn(QObject* tabView); |
||||
|
|
||||
|
protected: |
||||
|
QObject* m_view; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file main.cpp
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
*/ |
||||
|
|
||||
|
#include <QDebug> |
||||
|
#include "MixApplication.h" |
||||
|
using namespace dev::mix; |
||||
|
|
||||
|
MixApplication::MixApplication(int _argc, char *_argv[]): QApplication(_argc, _argv) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
bool MixApplication::notify(QObject* _receiver, QEvent* _event) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
return MixApplication::notify(_receiver, _event); |
||||
|
} |
||||
|
catch (std::exception& _ex) |
||||
|
{ |
||||
|
qDebug() << "std::exception was caught " << _ex.what(); |
||||
|
} |
||||
|
catch (...) |
||||
|
{ |
||||
|
qDebug() << "uncaught exception "; |
||||
|
} |
||||
|
return false; |
||||
|
} |
@ -0,0 +1,46 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file main.cpp
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* This class will be use instead of QApplication to launch the application. the method 'notify' allows to catch all exceptions. |
||||
|
* Not use for now: TODO. |
||||
|
*/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <QApplication> |
||||
|
|
||||
|
namespace dev |
||||
|
{ |
||||
|
|
||||
|
namespace mix |
||||
|
{ |
||||
|
|
||||
|
class MixApplication: public QApplication |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
public: |
||||
|
MixApplication(int _argc, char* _argv[]); |
||||
|
virtual ~MixApplication() {} |
||||
|
virtual bool notify(QObject* _receiver, QEvent* _event); |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,40 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file main.cpp
|
||||
|
* @author Yann yann@ethdev.com |
||||
|
* @date 2014 |
||||
|
* Ethereum IDE client. |
||||
|
*/ |
||||
|
|
||||
|
#include <QApplication> |
||||
|
#include <QQmlApplicationEngine> |
||||
|
#include <QQuickItem> |
||||
|
#include "CodeEditorExtensionManager.h" |
||||
|
#include "ApplicationCtx.h" |
||||
|
#include "MixApplication.h" |
||||
|
using namespace dev::mix; |
||||
|
|
||||
|
int main(int _argc, char *_argv[]) |
||||
|
{ |
||||
|
QApplication app(_argc, _argv); |
||||
|
qmlRegisterType<CodeEditorExtensionManager>("CodeEditorExtensionManager", 1, 0, "CodeEditorExtensionManager"); |
||||
|
QQmlApplicationEngine* engine = new QQmlApplicationEngine(); |
||||
|
ApplicationCtx::setApplicationContext(engine); |
||||
|
QObject::connect(&app, SIGNAL(lastWindowClosed()), ApplicationCtx::getInstance(), SLOT(quitApplication())); //use to kill ApplicationContext and other stuff
|
||||
|
engine->load(QUrl(QStringLiteral("qrc:/qml/main.qml"))); |
||||
|
return app.exec(); |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
<RCC> |
||||
|
<qresource prefix="/"> |
||||
|
<file>qml/BasicContent.qml</file> |
||||
|
<file>qml/main.qml</file> |
||||
|
<file>qml/MainContent.qml</file> |
||||
|
<file>qml/TabStyle.qml</file> |
||||
|
</qresource> |
||||
|
</RCC> |
@ -0,0 +1,35 @@ |
|||||
|
import QtQuick 2.3 |
||||
|
import QtQuick.Controls 1.2 |
||||
|
|
||||
|
Rectangle { |
||||
|
anchors.fill: parent |
||||
|
width: parent.width |
||||
|
height: parent.height |
||||
|
color: "lightgray" |
||||
|
Text { |
||||
|
font.pointSize: 7 |
||||
|
anchors.left: parent.left |
||||
|
anchors.top: parent.top |
||||
|
anchors.topMargin: 3 |
||||
|
anchors.leftMargin: 3 |
||||
|
height: 9 |
||||
|
font.family: "Sego UI light" |
||||
|
objectName: "status" |
||||
|
id: status |
||||
|
} |
||||
|
TextArea { |
||||
|
readOnly: true |
||||
|
anchors.left: parent.left |
||||
|
anchors.leftMargin: 10 |
||||
|
anchors.top: status.bottom |
||||
|
anchors.topMargin: 3 |
||||
|
font.pointSize: 7 |
||||
|
font.family: "Sego UI light" |
||||
|
height: parent.height * 0.8 |
||||
|
width: parent.width - 20 |
||||
|
wrapMode: Text.Wrap |
||||
|
backgroundVisible: false |
||||
|
objectName: "content" |
||||
|
id: content |
||||
|
} |
||||
|
} |
@ -0,0 +1,54 @@ |
|||||
|
import QtQuick 2.3 |
||||
|
import QtQuick.Controls 1.2 |
||||
|
import QtQuick.Layouts 1.0 |
||||
|
import QtQuick.Controls.Styles 1.2 |
||||
|
import CodeEditorExtensionManager 1.0 |
||||
|
|
||||
|
Rectangle { |
||||
|
anchors.fill: parent |
||||
|
height: parent.height |
||||
|
width: parent.width; |
||||
|
id:root |
||||
|
SplitView { |
||||
|
anchors.fill: parent |
||||
|
orientation: Qt.Vertical |
||||
|
Rectangle { |
||||
|
anchors.top: parent.top |
||||
|
id: contentView |
||||
|
width: parent.width |
||||
|
height: parent.height * 0.7 |
||||
|
TextArea { |
||||
|
id: codeEditor |
||||
|
height: parent.height |
||||
|
font.family: "Verdana" |
||||
|
font.pointSize: 9 |
||||
|
width: parent.width |
||||
|
anchors.centerIn: parent |
||||
|
tabChangesFocus: false |
||||
|
Keys.onPressed: { |
||||
|
if (event.key === Qt.Key_Tab) { |
||||
|
codeEditor.insert(codeEditor.cursorPosition, "\t"); |
||||
|
event.accepted = true; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
Rectangle { |
||||
|
anchors.bottom: parent.bottom |
||||
|
id: contextualView |
||||
|
width: parent.width |
||||
|
Layout.minimumHeight: 20 |
||||
|
height: parent.height * 0.3 |
||||
|
TabView { |
||||
|
id: contextualTabs |
||||
|
antialiasing: true |
||||
|
anchors.fill: parent |
||||
|
style: TabStyle {} |
||||
|
} |
||||
|
} |
||||
|
CodeEditorExtensionManager{ |
||||
|
tabView: contextualTabs |
||||
|
editor: codeEditor |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
import QtQuick 2.3 |
||||
|
import QtQuick.Controls 1.2 |
||||
|
import QtQuick.Controls.Styles 1.2 |
||||
|
|
||||
|
TabViewStyle { |
||||
|
frameOverlap: 1 |
||||
|
tabBar: Rectangle { |
||||
|
color: "lightgray" |
||||
|
} |
||||
|
tab: Rectangle { |
||||
|
color: "lightsteelblue" |
||||
|
implicitWidth: Math.max(text.width + 4, 80) |
||||
|
implicitHeight: 20 |
||||
|
radius: 2 |
||||
|
Text { |
||||
|
id: text |
||||
|
anchors.centerIn: parent |
||||
|
text: styleData.title |
||||
|
color: styleData.selected ? "white" : "black" |
||||
|
} |
||||
|
} |
||||
|
frame: Rectangle { color: "steelblue" } |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
import QtQuick 2.3 |
||||
|
import QtQuick.Controls 1.2 |
||||
|
import QtQuick.Controls.Styles 1.2 |
||||
|
import CodeEditorExtensionManager 1.0 |
||||
|
|
||||
|
ApplicationWindow { |
||||
|
visible: true |
||||
|
width: 1000 |
||||
|
height: 480 |
||||
|
minimumWidth: 400 |
||||
|
minimumHeight: 300 |
||||
|
title: qsTr("mix") |
||||
|
menuBar: MenuBar { |
||||
|
Menu { |
||||
|
title: qsTr("File") |
||||
|
MenuItem { |
||||
|
text: qsTr("Exit") |
||||
|
onTriggered: Qt.quit(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
MainContent{ |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue