22 #include <QMessageBox>
24 #include <QHeaderView>
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."),
448 dlg.setRouterInfo(rd, rs);
455 dlg.setLocation(tr(
"Unknown"));
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);
bool isMapped(const QString &addr) const
void displayRouterInfo(const QString &id)
void setUseLocalDatabase(bool useLocalDatabase)
void addressMapped(const QString &from, const QString &to, const QDateTime &expires)
StreamList getStreams(QString *errmsg=0)
NetworkStatus getNetworkStatus(QString *errmsg=0)
GeoIpRecord location() const
void add(const QString &from, const QString &to, const QDateTime &expires)
void addCircuit(const CircuitId &circid, const QStringList &path)
bool setLocalDatabase(const QString &databaseFile)
void addCircuit(const Circuit &circuit)
void selectRouter(const QString &id)
bool setEvent(TorEvents::Event e, bool add=true, bool set=true, QString *errmsg=0)
void circuitSelected(const Circuit &circuit)
QStringList getRouterDescriptorText(const QString &id, QString *errmsg=0)
AddressMap getAddressMap(AddressMap::AddressMapType type=AddressMap::AddressMapAll, QString *errmsg=0)
QList< Stream > StreamList
QString localGeoIpDatabase() const
void newDescriptors(const QStringList &ids)
void addStream(const Stream &stream)
CircuitId circuitId() const
RouterDescriptor getRouterDescriptor(const QString &id, QString *errmsg=0)
RouterStatus getRouterStatus(const QString &id, QString *errmsg=0)
static TorControl * torControl()
QString mappedTo(const QString &addr) const
void setupGeoIpResolver()
QString targetAddress() const
stop errmsg connect(const QHostAddress &address, quint16 port)
void setLocation(const GeoIpRecord &geoip)
void selectCircuit(const CircuitId &circid)
void routerSelected(const QList< RouterDescriptor > &routers)
bool useLocalGeoIpDatabase() const
static int warning(QWidget *parent, QString caption, QString text, int button0, int button1=NoButton, int button2=NoButton)
GeoIpRecord resolve(const QHostAddress &ip)
quint16 targetPort() const
QList< Circuit > CircuitList
RouterDescriptor descriptor() const
CircuitList getCircuits(QString *errmsg=0)
void addRouter(const RouterDescriptor &desc, const GeoIpRecord &geoip)
void setTitle(const QString &title)
NetViewer(QWidget *parent=0)
void helpRequested(const QString &topic)
QList< RouterStatus > NetworkStatus
void addRouter(const RouterDescriptor &rd)
AddressMap reverse() const
QStringList routerIDs() const
static void createShortcut(const QKeySequence &key, QWidget *sender, QObject *receiver, const char *slot)