25#include <QCoreApplication>
27#define IMG_MOVE ":/images/22x22/move-map.png"
28#define IMG_ZOOMIN ":/images/22x22/zoom-in.png"
29#define IMG_ZOOMOUT ":/images/22x22/zoom-out.png"
35#define MIN_RESOLVE_QUEUE_DELAY (10*1000)
38#define MAX_RESOLVE_QUEUE_DELAY (30*1000)
51 ui.actionHelp->setShortcut(QString(
"Ctrl+?"));
82 ui.treeRouterList->header()->
84 ui.treeRouterList->header()->
86 ui.treeCircuitList->header()->
90#if defined(USE_MARBLE)
94 connect(
ui.actionZoomFullScreen, SIGNAL(triggered()),
99 ui.actionZoomFullScreen->setVisible(
false);
101 ui.gridLayout->addWidget(
_map);
106 connect(
ui.actionZoomToFit, SIGNAL(triggered()),
_map, SLOT(zoomToFit()));
115 connect(
ui.actionHelp, SIGNAL(triggered()),
this, SLOT(
help()));
119 connect(
ui.treeRouterList, SIGNAL(zoomToRouter(QString)),
120 _map, SLOT(zoomToRouter(QString)));
131 connect(
ui.lineRouterSearch, SIGNAL(returnPressed()),
133 connect(
ui.lineRouterSearch, SIGNAL(textChanged(QString)),
138 QToolBar *tb =
new QToolBar();
139 tb->addAction(
ui.actionRefresh);
140 tb->addAction(
ui.actionHelp);
141 tb->addAction(
ui.actionZoomIn);
142 tb->addAction(
ui.actionZoomOut);
143 tb->addAction(
ui.actionZoomToFit);
144 tb->addAction(
ui.actionZoomFullScreen);
146 tb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
147 ui.horizontalLayout->addWidget(tb);
154 ui.retranslateUi(
this);
156 ui.treeRouterList->retranslateUi();
157 ui.treeCircuitList->retranslateUi();
159 if (
ui.treeRouterList->selectedItems().size()) {
160 QList<RouterDescriptor> routers;
161 foreach (QTreeWidgetItem *item,
ui.treeRouterList->selectedItems()) {
162 routers << dynamic_cast<RouterListItem *>(item)->descriptor();
164 ui.textRouterInfo->display(routers);
165 }
else if (
ui.treeCircuitList->selectedItems().size()) {
166 QList<RouterDescriptor> routers;
167 QTreeWidgetItem *item =
ui.treeCircuitList->selectedItems()[0];
169 foreach (QString
id, circuit.
routerIDs()) {
174 ui.textRouterInfo->display(routers);
183#if defined(USE_GEOIP)
186 if (! databaseFile.isEmpty()) {
189 vInfo(
"Using local database file for relay mapping: %1")
195 vInfo(
"Using Tor's GeoIP database for country-level relay mapping.");
205 ui.actionRefresh->setEnabled(
true);
214 ui.actionRefresh->setEnabled(
false);
222 ui.actionRefresh->setEnabled(
false);
235 ui.actionRefresh->setEnabled(
true);
248 ui.treeRouterList->clearRouters();
249 ui.treeCircuitList->clearCircuits();
250 ui.textRouterInfo->clear();
258 ui.treeRouterList->searchNextRouter(
ui.lineRouterSearch->text());
276 foreach (
Circuit circuit, circuits) {
281 foreach (
Stream stream, streams) {
294 ui.treeCircuitList->addCircuit(circuit);
310 ui.treeCircuitList->addStream(
315 ui.treeCircuitList->addStream(stream);
321 const QDateTime &expires)
347 QCoreApplication::processEvents();
379 foreach (QString
id, ids) {
392 ui.treeRouterList->deselectAll();
393 ui.textRouterInfo->clear();
399 QList<RouterDescriptor> routers;
401 foreach (QString
id, circuit.
routerIDs()) {
408 ui.textRouterInfo->display(routers);
416 ui.textRouterInfo->clear();
417 ui.textRouterInfo->display(routers);
423 if (routers.size() == 1)
434 :
static_cast<QWidget*
>(
this));
440 tr(
"No details on the selected relay are available."),
471#if defined(USE_MARBLE)
472 _map->zoomViewBy(40);
482#if defined(USE_MARBLE)
483 _map->zoomViewBy(-40);
494 if (
_map->isFullScreen()) {
496 ui.gridLayout->addWidget(
_map);
497 _map->setWindowState(
_map->windowState() & ~Qt::WindowFullScreen);
502 _map->setWindowState(
_map->windowState() | Qt::WindowFullScreen);
QList< Circuit > CircuitList
QList< RouterStatus > NetworkStatus
QList< Stream > StreamList
stop errmsg connect(const QHostAddress &address, quint16 port)
void add(const QString &from, const QString &to, const QDateTime &expires)
QString mappedTo(const QString &addr) const
bool isMapped(const QString &addr) const
AddressMap reverse() const
QStringList routerIDs() const
void setUseLocalDatabase(bool useLocalDatabase)
bool setLocalDatabase(const QString &databaseFile)
GeoIpRecord resolve(const QHostAddress &ip)
void displayRouterInfo(const QString &id)
void routerSelected(const QList< RouterDescriptor > &routers)
void addressMapped(const QString &from, const QString &to, const QDateTime &expires)
void addStream(const Stream &stream)
void newDescriptors(const QStringList &ids)
NetViewer(QWidget *parent=0)
void addRouter(const RouterDescriptor &rd)
void setupGeoIpResolver()
void circuitSelected(const Circuit &circuit)
void addCircuit(const Circuit &circuit)
void setLocation(const QString &location)
void setRouterInfo(const QStringList &desc, const RouterStatus &status)
RouterDescriptor descriptor() const
void setLocation(const GeoIpRecord &geoip)
GeoIpRecord location() const
CircuitId circuitId() const
quint16 targetPort() const
QString targetAddress() const
RouterStatus getRouterStatus(const QString &id, QString *errmsg=0)
AddressMap getAddressMap(AddressMap::AddressMapType type=AddressMap::AddressMapAll, QString *errmsg=0)
NetworkStatus getNetworkStatus(QString *errmsg=0)
QStringList getRouterDescriptorText(const QString &id, QString *errmsg=0)
CircuitList getCircuits(QString *errmsg=0)
bool setEvent(TorEvents::Event e, bool add=true, bool set=true, QString *errmsg=0)
RouterDescriptor getRouterDescriptor(const QString &id, QString *errmsg=0)
StreamList getStreams(QString *errmsg=0)
void selectCircuit(const CircuitId &circid)
void addCircuit(const CircuitId &circid, const QStringList &path)
void addRouter(const RouterDescriptor &desc, const GeoIpRecord &geoip)
void selectRouter(const QString &id)
static int warning(QWidget *parent, QString caption, QString text, int button0, int button1=NoButton, int button2=NoButton)
static void createShortcut(const QKeySequence &key, QWidget *sender, QObject *receiver, const char *slot)
static TorControl * torControl()
bool useLocalGeoIpDatabase() const
QString localGeoIpDatabase() const
void helpRequested(const QString &topic)
void setTitle(const QString &title)