From b2d3c47a18c56cf69b0f3c4f89b8964c76bdee1a Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Fri, 7 Feb 2014 15:11:50 +0000 Subject: [PATCH] UI Improvements. --- CMakeLists.txt | 4 ++- alethzero/MainWin.cpp | 58 ++++++++++++++++++++++++------------------- alethzero/MainWin.h | 8 ++++-- libethereum/Common.h | 5 ++-- 4 files changed, 44 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56928928e..a72659e5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,8 +5,10 @@ set(CMAKE_AUTOMOC ON) cmake_policy(SET CMP0015 NEW) +set(ETH_VERSION 0.1.1) + # Initialize CXXFLAGS. -set(CMAKE_CXX_FLAGS "-Wall -std=c++11") +set(CMAKE_CXX_FLAGS "-Wall -std=c++11 -DETH_VERSION=${ETH_VERSION}") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG") diff --git a/alethzero/MainWin.cpp b/alethzero/MainWin.cpp index 3e9612b7b..d4949e74b 100644 --- a/alethzero/MainWin.cpp +++ b/alethzero/MainWin.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "MainWin.h" #include "ui_Main.h" using namespace std; @@ -14,15 +15,18 @@ static void initUnits(QComboBox* _b) _b->setCurrentIndex(6); } +#define ETH_QUOTED(A) #A + Main::Main(QWidget *parent) : QMainWindow(parent), - ui(new Ui::Main), - m_client("AlethZero/v0.1.1") + ui(new Ui::Main) { setWindowFlags(Qt::Window); ui->setupUi(this); initUnits(ui->valueUnits); initUnits(ui->feeUnits); + g_logPost = [=](std::string const& s, char const*) { ui->log->addItem(QString::fromStdString(s)); }; + m_client = new Client("AlethZero/v" ETH_QUOTED(ETH_VERSION)); readSettings(); refresh(); @@ -44,7 +48,9 @@ Main::Main(QWidget *parent) : srand(time(0)); #endif - g_logPost = [=](std::string const& s, char const*) { ui->log->addItem(QString::fromStdString(s)); }; + statusBar()->addPermanentWidget(ui->balance); + statusBar()->addPermanentWidget(ui->peerCount); + statusBar()->addPermanentWidget(ui->blockChain); } Main::~Main() @@ -89,7 +95,7 @@ void Main::readSettings() m_myKeys.append(KeyPair(k)); } } - m_client.setAddress(m_myKeys.back().address()); + m_client->setAddress(m_myKeys.back().address()); writeSettings(); @@ -102,25 +108,25 @@ void Main::readSettings() void Main::refresh() { - m_client.lock(); - if (m_client.changed()) + m_client->lock(); + if (m_client->changed()) { - ui->peerCount->setText(QString::fromStdString(toString(m_client.peerCount())) + " peer(s)"); + ui->peerCount->setText(QString::fromStdString(toString(m_client->peerCount())) + " peer(s)"); ui->peers->clear(); - for (PeerInfo const& i: m_client.peers()) + for (PeerInfo const& i: m_client->peers()) ui->peers->addItem(QString("%3 ms - %1:%2 - %4").arg(i.host.c_str()).arg(i.port).arg(chrono::duration_cast(i.lastPing).count()).arg(i.clientVersion.c_str())); - auto d = m_client.blockChain().details(); - auto diff = BlockInfo(m_client.blockChain().block()).difficulty; + auto d = m_client->blockChain().details(); + auto diff = BlockInfo(m_client->blockChain().block()).difficulty; ui->blockChain->setText(QString("#%1 @%3 T%2").arg(d.number).arg(toLog2(d.totalDifficulty)).arg(toLog2(diff))); - auto acs = m_client.state().addresses(); + auto acs = m_client->state().addresses(); ui->accounts->clear(); for (auto i: acs) ui->accounts->addItem(QString("%1 @ %2").arg(formatBalance(i.second).c_str()).arg(asHex(i.first.asArray()).c_str())); ui->transactionQueue->clear(); - for (pair const& i: m_client.transactionQueue().transactions()) + for (pair const& i: m_client->transactionQueue().transactions()) { Transaction t(i.second); ui->transactionQueue->addItem(QString("%1 (%2 fee) @ %3 <- %4") @@ -131,7 +137,7 @@ void Main::refresh() } ui->transactions->clear(); - auto const& bc = m_client.blockChain(); + auto const& bc = m_client->blockChain(); for (auto h = bc.currentHash(); h != bc.genesisHash(); h = bc.details(h).parent) { auto d = bc.details(h); @@ -152,12 +158,12 @@ void Main::refresh() u256 totalBalance = 0; for (auto i: m_myKeys) { - u256 b = m_client.state().balance(i.address()); + u256 b = m_client->state().balance(i.address()); ui->ourAccounts->addItem(QString("%1 @ %2").arg(formatBalance(b).c_str()).arg(asHex(i.address().asArray()).c_str())); totalBalance += b; } ui->balance->setText(QString::fromStdString(formatBalance(totalBalance))); - m_client.unlock(); + m_client->unlock(); } void Main::on_ourAccounts_doubleClicked() @@ -174,9 +180,9 @@ void Main::on_net_triggered() { ui->port->setEnabled(!ui->net->isChecked()); if (ui->net->isChecked()) - m_client.startNetwork(ui->port->value(), string(), 0, NodeMode::Full, 5, std::string(), ui->upnp->isChecked()); + m_client->startNetwork(ui->port->value(), string(), 0, NodeMode::Full, 5, std::string(), ui->upnp->isChecked()); else - m_client.stopNetwork(); + m_client->stopNetwork(); } void Main::on_connect_triggered() @@ -189,7 +195,7 @@ void Main::on_connect_triggered() { string host = s.section(":", 0, 0).toStdString(); short port = s.section(":", 1).toInt(); - m_client.connect(host, port); + m_client->connect(host, port); } } @@ -197,11 +203,11 @@ void Main::on_mine_triggered() { if (ui->mine->isChecked()) { - m_client.setAddress(m_myKeys.last().address()); - m_client.startMining(); + m_client->setAddress(m_myKeys.last().address()); + m_client->startMining(); } else - m_client.stopMining(); + m_client->stopMining(); } void Main::on_send_clicked() @@ -209,11 +215,11 @@ void Main::on_send_clicked() u256 value = ui->value->value() * units()[units().size() - 1 - ui->valueUnits->currentIndex()].first; u256 fee = ui->fee->value() * units()[units().size() - 1 - ui->feeUnits->currentIndex()].first; u256 totalReq = value + fee; - m_client.lock(); + m_client->lock(); for (auto i: m_myKeys) - if (m_client.state().balance(i.address()) >= totalReq) + if (m_client->state().balance(i.address()) >= totalReq) { - m_client.unlock(); + m_client->unlock(); Secret s = m_myKeys.front().secret(); Address r = Address(fromUserHex(ui->destination->text().toStdString())); auto ds = ui->data->toPlainText().split(QRegExp("[^0-9a-fA-Fx]+")); @@ -221,11 +227,11 @@ void Main::on_send_clicked() data.reserve(ds.size()); for (QString const& i: ds) data.push_back(u256(i.toStdString())); - m_client.transact(s, r, value, fee, data); + m_client->transact(s, r, value, fee, data); refresh(); return; } - m_client.unlock(); + m_client->unlock(); statusBar()->showMessage("Couldn't make transaction: no single account contains at least the required amount."); } diff --git a/alethzero/MainWin.h b/alethzero/MainWin.h index 6df549e18..23a78c835 100644 --- a/alethzero/MainWin.h +++ b/alethzero/MainWin.h @@ -5,12 +5,16 @@ #include #include #include -#include +#include namespace Ui { class Main; } +namespace eth { +class Client; +} + class Main : public QMainWindow { Q_OBJECT @@ -37,7 +41,7 @@ private: Ui::Main *ui; - eth::Client m_client; + eth::Client* m_client; QMutex m_guiLock; QTimer* m_refresh; diff --git a/libethereum/Common.h b/libethereum/Common.h index bd64fadc5..e7ecabf35 100644 --- a/libethereum/Common.h +++ b/libethereum/Common.h @@ -29,7 +29,6 @@ #endif #include -#include #include #include #include @@ -179,7 +178,9 @@ public: if ((it != g_logOverride.end() && it->second == true) || (it == g_logOverride.end() && Id::verbosity <= g_logVerbosity)) { time_t rawTime = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); - sstr << Id::name << " [ " << rawTime /*put_time("%T", std::localtime(&rawTime)) */<< " | " << t_logThreadName << (_term ? " ] " : ""); + char buf[9]; + strftime(buf, 9, "%X", localtime(&rawTime)); + sstr << Id::name << " [ " << buf << " | " << t_logThreadName << (_term ? " ] " : ""); } } ~LogOutputStream() { if (Id::verbosity <= g_logVerbosity) g_logPost(sstr.str(), Id::name); }