From 63f6e98d596cd011078a775b1eac9e9d9fa06a0e Mon Sep 17 00:00:00 2001 From: arkpar Date: Fri, 14 Aug 2015 14:35:44 +0200 Subject: [PATCH] moved export state dialog to plugin --- alethzero/CMakeLists.txt | 3 +- alethzero/Main.ui | 6 -- alethzero/MainWin.cpp | 7 -- alethzero/MainWin.h | 1 - .../{ => plugins/blockchain}/ExportState.cpp | 91 +++++++++++-------- .../{ => plugins/blockchain}/ExportState.h | 15 +-- .../{ => plugins/blockchain}/ExportState.ui | 0 7 files changed, 61 insertions(+), 62 deletions(-) rename alethzero/{ => plugins/blockchain}/ExportState.cpp (66%) rename alethzero/{ => plugins/blockchain}/ExportState.h (84%) rename alethzero/{ => plugins/blockchain}/ExportState.ui (100%) diff --git a/alethzero/CMakeLists.txt b/alethzero/CMakeLists.txt index e4dfabc5f..a9b2e3233 100644 --- a/alethzero/CMakeLists.txt +++ b/alethzero/CMakeLists.txt @@ -42,7 +42,6 @@ qt5_wrap_ui(ui_Main.h Main.ui) qt5_wrap_ui(ui_Connect.h Connect.ui) qt5_wrap_ui(ui_Debugger.h Debugger.ui) qt5_wrap_ui(ui_Transact.h Transact.ui) -qt5_wrap_ui(ui_ExportState.h ExportState.ui) qt5_wrap_ui(ui_GetPassword.h GetPassword.ui) qt5_wrap_ui(ui_GasPricing.h GasPricing.ui) @@ -60,7 +59,7 @@ endif () # eth_add_executable is defined in cmake/EthExecutableHelper.cmake eth_add_executable(${EXECUTABLE} ICON alethzero - UI_RESOURCES ${PLUGIN_UI} alethzero.icns Main.ui Connect.ui Debugger.ui Transact.ui ExportState.ui GetPassword.ui GasPricing.ui + UI_RESOURCES ${PLUGIN_UI} alethzero.icns Main.ui Connect.ui Debugger.ui Transact.ui GetPassword.ui GasPricing.ui WIN_RESOURCES alethzero.rc ) diff --git a/alethzero/Main.ui b/alethzero/Main.ui index fe3eadb16..deb6a035c 100644 --- a/alethzero/Main.ui +++ b/alethzero/Main.ui @@ -173,7 +173,6 @@ - @@ -1098,11 +1097,6 @@ font-size: 14pt &Load Javascript... - - - &Export State... - - false diff --git a/alethzero/MainWin.cpp b/alethzero/MainWin.cpp index 7327f63a5..102c7143d 100644 --- a/alethzero/MainWin.cpp +++ b/alethzero/MainWin.cpp @@ -73,7 +73,6 @@ #include "DappLoader.h" #include "DappHost.h" #include "WebPage.h" -#include "ExportState.h" #include "ui_Main.h" #include "ui_GetPassword.h" #include "ui_GasPricing.h" @@ -1029,12 +1028,6 @@ void Main::on_exportKey_triggered() } } -void Main::on_exportState_triggered() -{ - ExportStateDialog dialog(this); - dialog.exec(); -} - void Main::on_usePrivate_triggered() { QString pc; diff --git a/alethzero/MainWin.h b/alethzero/MainWin.h index ef4e81056..84d94d66d 100644 --- a/alethzero/MainWin.h +++ b/alethzero/MainWin.h @@ -163,7 +163,6 @@ private slots: // Tools void on_newTransaction_triggered(); void on_loadJS_triggered(); - void on_exportState_triggered(); // Stuff concerning the blocks/transactions/accounts panels void on_ourAccounts_itemClicked(QListWidgetItem* _i); diff --git a/alethzero/ExportState.cpp b/alethzero/plugins/blockchain/ExportState.cpp similarity index 66% rename from alethzero/ExportState.cpp rename to alethzero/plugins/blockchain/ExportState.cpp index 1e243f5d5..c0f45c0e8 100644 --- a/alethzero/ExportState.cpp +++ b/alethzero/plugins/blockchain/ExportState.cpp @@ -19,77 +19,86 @@ * @date 2015 */ +#if ETH_FATDB + #include "ExportState.h" +#include #include #include #include -#include "MainWin.h" #include "ui_ExportState.h" using namespace std; using namespace dev; using namespace az; using namespace eth; -ExportStateDialog::ExportStateDialog(Main* _parent): - QDialog(_parent), - ui(new Ui::ExportState), - m_main(_parent) +DEV_AZ_NOTE_PLUGIN(ExportStateDialog); + +ExportStateDialog::ExportStateDialog(MainFace* _m): + QDialog(_m), + Plugin(_m, "Export State"), + m_ui(new Ui::ExportState) { - ui->setupUi(this); - connect(ui->close, &QPushButton::clicked, this, &ExportStateDialog::close); - connect(ui->accounts, &QListWidget::itemSelectionChanged, this, &ExportStateDialog::generateJSON); - connect(ui->contracts, &QListWidget::itemSelectionChanged, this, &ExportStateDialog::generateJSON); + m_ui->setupUi(this); + connect(m_ui->close, &QPushButton::clicked, this, &ExportStateDialog::close); + connect(m_ui->accounts, &QListWidget::itemSelectionChanged, this, &ExportStateDialog::generateJSON); + connect(m_ui->contracts, &QListWidget::itemSelectionChanged, this, &ExportStateDialog::generateJSON); fillBlocks(); + connect(addMenuItem("Export State...", "menuTools", true), SIGNAL(triggered()), SLOT(exec())); } ExportStateDialog::~ExportStateDialog() { -} -Client* ExportStateDialog::ethereum() const +} +void ExportStateDialog::showEvent(QShowEvent*) { - return m_main->ethereum(); + m_ui->block->clear(); + m_ui->block->clearEditText(); + m_ui->accounts->clear(); + m_ui->contracts->clear(); + fillBlocks(); } void ExportStateDialog::on_block_editTextChanged() { - QString text = ui->block->currentText(); - int i = ui->block->count(); + QString text = m_ui->block->currentText(); + int i = m_ui->block->count(); while (i-- >= 0) - if (ui->block->itemText(i) == text) + if (m_ui->block->itemText(i) == text) return; fillBlocks(); } void ExportStateDialog::on_block_currentIndexChanged(int _index) { - m_block = ui->block->itemData(_index).toUInt(); + m_block = m_ui->block->itemData(_index).toUInt(); fillContracts(); } void ExportStateDialog::fillBlocks() { BlockChain const& bc = ethereum()->blockChain(); - QStringList filters = ui->block->currentText().toLower().split(QRegExp("\\s+"), QString::SkipEmptyParts); + QStringList filters = m_ui->block->currentText().toLower().split(QRegExp("\\s+"), QString::SkipEmptyParts); const unsigned numLastBlocks = 10; - if (ui->block->count() == 0) + if (m_ui->block->count() == 0) { unsigned i = numLastBlocks; for (auto h = bc.currentHash(); bc.details(h) && i; h = bc.details(h).parent, --i) { auto d = bc.details(h); - ui->block->addItem(QString("#%1 %2").arg(d.number).arg(h.abridged().c_str()), d.number); + m_ui->block->addItem(QString("#%1 %2").arg(d.number).arg(h.abridged().c_str()), d.number); if (h == bc.genesisHash()) break; } - if (ui->block->currentIndex() < 0) - ui->block->setCurrentIndex(0); + if (m_ui->block->currentIndex() < 0) + m_ui->block->setCurrentIndex(0); m_recentBlocks = numLastBlocks - i; } - int i = ui->block->count(); + int i = m_ui->block->count(); while (i > 0 && i >= m_recentBlocks) - ui->block->removeItem(i--); + m_ui->block->removeItem(i--); h256Hash blocks; for (QString f: filters) @@ -117,31 +126,31 @@ void ExportStateDialog::fillBlocks() for (auto const& h: blocks) { auto d = bc.details(h); - ui->block->addItem(QString("#%1 %2").arg(d.number).arg(h.abridged().c_str()), d.number); + m_ui->block->addItem(QString("#%1 %2").arg(d.number).arg(h.abridged().c_str()), d.number); } } void ExportStateDialog::fillContracts() { - ui->accounts->clear(); - ui->contracts->clear(); - ui->accounts->setEnabled(true); - ui->contracts->setEnabled(true); + m_ui->accounts->clear(); + m_ui->contracts->clear(); + m_ui->accounts->setEnabled(true); + m_ui->contracts->setEnabled(true); try { for (auto i: ethereum()->addresses(m_block)) { - string r = m_main->render(i); - (new QListWidgetItem(QString("%2: %1 [%3]").arg(formatBalance(ethereum()->balanceAt(i)).c_str()).arg(QString::fromStdString(r)).arg((unsigned)ethereum()->countAt(i)), ethereum()->codeAt(i).empty() ? ui->accounts : ui->contracts)) + string r = main()->render(i); + (new QListWidgetItem(QString("%2: %1 [%3]").arg(formatBalance(ethereum()->balanceAt(i)).c_str()).arg(QString::fromStdString(r)).arg((unsigned)ethereum()->countAt(i)), ethereum()->codeAt(i).empty() ? m_ui->accounts : m_ui->contracts)) ->setData(Qt::UserRole, QByteArray((char const*)i.data(), Address::size)); } } catch (InterfaceNotSupported const&) { - ui->accounts->setEnabled(false); - ui->contracts->setEnabled(false); - ui->json->setEnabled(false); - ui->json->setText(QString("This feature requires compilation with FATDB support.")); + m_ui->accounts->setEnabled(false); + m_ui->contracts->setEnabled(false); + m_ui->json->setEnabled(false); + m_ui->json->setText(QString("This feature requires compilation with FATDB support.")); } } @@ -150,14 +159,14 @@ void ExportStateDialog::generateJSON() std::stringstream json; json << "{\n"; std::string prefix; - for(QListWidgetItem* item: ui->accounts->selectedItems()) + for(QListWidgetItem* item: m_ui->accounts->selectedItems()) { auto hba = item->data(Qt::UserRole).toByteArray(); auto address = Address((byte const*)hba.data(), Address::ConstructFromPointer); json << prefix << "\t\"" << toHex(address.ref()) << "\": { \"wei\": \"" << ethereum()->balanceAt(address, m_block) << "\" }"; prefix = ",\n"; } - for(QListWidgetItem* item: ui->contracts->selectedItems()) + for(QListWidgetItem* item: m_ui->contracts->selectedItems()) { auto hba = item->data(Qt::UserRole).toByteArray(); auto address = Address((byte const*)hba.data(), Address::ConstructFromPointer); @@ -181,9 +190,9 @@ void ExportStateDialog::generateJSON() json << "\n}"; json.flush(); - ui->json->setEnabled(true); - ui->json->setText(QString::fromStdString(json.str())); - ui->saveButton->setEnabled(true); + m_ui->json->setEnabled(true); + m_ui->json->setText(QString::fromStdString(json.str())); + m_ui->saveButton->setEnabled(true); } void ExportStateDialog::on_saveButton_clicked() @@ -193,5 +202,7 @@ void ExportStateDialog::on_saveButton_clicked() fn = fn.append(".json"); ofstream file(fn.toStdString()); if (file.is_open()) - file << ui->json->toPlainText().toStdString(); + file << m_ui->json->toPlainText().toStdString(); } + +#endif //ETH_FATDB diff --git a/alethzero/ExportState.h b/alethzero/plugins/blockchain/ExportState.h similarity index 84% rename from alethzero/ExportState.h rename to alethzero/plugins/blockchain/ExportState.h index 2dbe507d1..b7c012356 100644 --- a/alethzero/ExportState.h +++ b/alethzero/plugins/blockchain/ExportState.h @@ -21,9 +21,12 @@ #pragma once +#if ETH_FATDB + #include #include #include +#include "MainFace.h" namespace Ui { class ExportState; } @@ -35,14 +38,13 @@ namespace eth { class Client; } namespace az { -class Main; -class ExportStateDialog: public QDialog +class ExportStateDialog: public QDialog, public Plugin { Q_OBJECT public: - explicit ExportStateDialog(Main* _parent = 0); + ExportStateDialog(MainFace* _m); virtual ~ExportStateDialog(); private slots: @@ -51,17 +53,18 @@ private slots: void on_saveButton_clicked(); private: - eth::Client* ethereum() const; + void showEvent(QShowEvent* _event) override; void fillBlocks(); void fillContracts(); void generateJSON(); private: - std::unique_ptr ui; - Main* m_main; + std::unique_ptr m_ui; int m_recentBlocks = 0; eth::BlockNumber m_block = eth::LatestBlock; }; } } + +#endif //ETH_FATDB diff --git a/alethzero/ExportState.ui b/alethzero/plugins/blockchain/ExportState.ui similarity index 100% rename from alethzero/ExportState.ui rename to alethzero/plugins/blockchain/ExportState.ui