Browse Source

API for providing account namers.

cl-refactor
Gav Wood 10 years ago
parent
commit
801922e21a
  1. 13
      alethzero/MainFace.h
  2. 31
      alethzero/MainWin.cpp
  3. 7
      alethzero/MainWin.h

13
alethzero/MainFace.h

@ -47,6 +47,14 @@ class Plugin;
using WatchHandler = std::function<void(dev::eth::LocalisedLogEntries const&)>;
class AccountNamer
{
public:
virtual std::string toName(Address const&) const { return std::string(); }
virtual Address toAddress(std::string const&) const { return Address(); }
virtual Addresses knownAddresses() const { return Addresses(); }
};
class MainFace: public QMainWindow, public Context
{
public:
@ -66,6 +74,11 @@ public:
virtual unsigned installWatch(dev::eth::LogFilter const& _tf, WatchHandler const& _f) = 0;
virtual unsigned installWatch(dev::h256 const& _tf, WatchHandler const& _f) = 0;
// Account naming API
virtual void install(AccountNamer* _adopt) = 0;
virtual void uninstall(AccountNamer* _kill) = 0;
virtual void noteAddressesChanged() = 0;
protected:
template <class F> void forEach(F const& _f) { for (auto const& p: m_plugins) _f(p.second); }
std::shared_ptr<Plugin> takePlugin(std::string const& _name) { auto it = m_plugins.find(_name); std::shared_ptr<Plugin> ret; if (it != m_plugins.end()) { ret = it->second; m_plugins.erase(it); } return ret; }

31
alethzero/MainWin.cpp

@ -309,6 +309,25 @@ string Main::fromRaw(h256 const&_n, unsigned* _inc)
return string();
}
void Main::install(AccountNamer* _adopt)
{
m_namers.insert(_adopt);
refreshAll();
}
void Main::uninstall(AccountNamer* _kill)
{
auto it = m_namers.find(_kill);
if (it != m_namers.end())
m_namers.erase(it);
refreshAll();
}
void Main::noteAddressesChanged()
{
refreshAll();
}
bool Main::confirm() const
{
return ui->natSpec->isChecked();
@ -638,6 +657,13 @@ std::string Main::pretty(dev::Address const& _a) const
if (!n.empty())
return n;
}
for (auto i: m_namers)
{
auto n = i->toName(_a);
if (!n.empty())
return n;
}
return string();
}
@ -670,6 +696,11 @@ pair<Address, bytes> Main::fromString(std::string const& _n) const
if (a)
return make_pair(a, bytes());
}
for (auto i: m_namers)
if (auto a = i->toAddress(_n))
return make_pair(a, bytes());
if (n.size() == 40)
{
try

7
alethzero/MainWin.h

@ -106,6 +106,11 @@ public:
Secret retrieveSecret(Address const& _address) const override;
// Account naming API.
void install(AccountNamer* _adopt) override;
void uninstall(AccountNamer* _kill) override;
void noteAddressesChanged() override;
public slots:
void load(QString _file);
void note(QString _entry);
@ -292,6 +297,8 @@ private:
QWebEnginePage* m_webPage;
Connect m_connect;
std::unordered_set<AccountNamer*> m_namers;
};
}

Loading…
Cancel
Save