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