[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[vidalia-svn] r1511: Add an option to the circuit context menu to zoom in on a ci (trunk/src/gui/network)



Author: edmanm
Date: 2006-12-09 22:57:08 -0500 (Sat, 09 Dec 2006)
New Revision: 1511

Modified:
   trunk/src/gui/network/circuitlistwidget.cpp
   trunk/src/gui/network/circuitlistwidget.h
   trunk/src/gui/network/netviewer.cpp
   trunk/src/gui/network/tormapwidget.cpp
   trunk/src/gui/network/tormapwidget.h
Log:
Add an option to the circuit context menu to zoom in on a circuit, like we do
for servers in the server list.


Modified: trunk/src/gui/network/circuitlistwidget.cpp
===================================================================
--- trunk/src/gui/network/circuitlistwidget.cpp	2006-12-09 21:37:59 UTC (rev 1510)
+++ trunk/src/gui/network/circuitlistwidget.cpp	2006-12-10 03:57:08 UTC (rev 1511)
@@ -31,6 +31,7 @@
 #include "circuitlistwidget.h"
 
 #define IMG_CLOSE   ":/images/16x16/network-offline.png"
+#define IMG_ZOOM    ":/images/16x16/zoom.png"
 
 #define CLOSED_CIRCUIT_REMOVE_DELAY     3000
 #define FAILED_CIRCUIT_REMOVE_DELAY     5000
@@ -51,7 +52,10 @@
 
   /* Set up the circuit item context menu */
   _circuitContextMenu = new QMenu(this);
+  _zoomCircuitAct = new QAction(QIcon(IMG_ZOOM), tr("Zoom to Circuit"), this);
   _closeCircuitAct = new QAction(QIcon(IMG_CLOSE), tr("Close Circuit"), this);
+  _circuitContextMenu->addAction(_zoomCircuitAct);
+  _circuitContextMenu->addSeparator();
   _circuitContextMenu->addAction(_closeCircuitAct);
   /* Set up the stream item context menu */
   _streamContextMenu = new QMenu(this);
@@ -75,10 +79,15 @@
     QPoint pos = e->globalPos();
     if (!item->parent()) {
       /* Circuit was right-clicked */
-      quint64 circid = ((CircuitItem *)item)->id();
+      Circuit circ   = ((CircuitItem *)item)->circuit();
+      quint64 circid = circ.id();
+      _zoomCircuitAct->setEnabled((circ.status() == Circuit::Built));
+      
       QAction* action = _circuitContextMenu->exec(pos);
       if (action == _closeCircuitAct) {
         emit closeCircuit(circid);
+      } else if (action == _zoomCircuitAct) {
+        emit zoomToCircuit(circid);
       }
     } else {
       /* Stream was right-clicked */

Modified: trunk/src/gui/network/circuitlistwidget.h
===================================================================
--- trunk/src/gui/network/circuitlistwidget.h	2006-12-09 21:37:59 UTC (rev 1510)
+++ trunk/src/gui/network/circuitlistwidget.h	2006-12-10 03:57:08 UTC (rev 1511)
@@ -71,7 +71,9 @@
   void closeCircuit(quint64 circid);
   /** Emitted when the user selects a stream to be closed. */
   void closeStream(quint64 streamid);
-
+  /** Emitted when the user selects a circuit to zoom to. */
+  void zoomToCircuit(quint64 circid);
+  
 public slots:
   /** Clears all circuits and streams from the list. */
   void clearCircuits();
@@ -105,6 +107,7 @@
   /* Circuit and stream context menus and items */
   QMenu* _circuitContextMenu; /**< Context menu for circuit items. */
   QAction* _closeCircuitAct;  /**< Closes a circuit. */
+  QAction* _zoomCircuitAct;   /**< Zoom to a circuit. */
   QMenu* _streamContextMenu;  /**< Context menu for stream items. */
   QAction* _closeStreamAct;   /**< Closes a stream. */
 

Modified: trunk/src/gui/network/netviewer.cpp
===================================================================
--- trunk/src/gui/network/netviewer.cpp	2006-12-09 21:37:59 UTC (rev 1510)
+++ trunk/src/gui/network/netviewer.cpp	2006-12-10 03:57:08 UTC (rev 1511)
@@ -107,6 +107,8 @@
           this, SLOT(circuitSelected(Circuit)));
   connect(ui.treeCircuitList, SIGNAL(circuitRemoved(quint64)),
           _map, SLOT(removeCircuit(quint64)));
+  connect(ui.treeCircuitList, SIGNAL(zoomToCircuit(quint64)),
+          _map, SLOT(zoomToCircuit(quint64)));
   connect(ui.treeCircuitList, SIGNAL(closeCircuit(quint64)),
           this, SLOT(closeCircuit(quint64)));
   connect(ui.treeCircuitList, SIGNAL(closeStream(quint64)),

Modified: trunk/src/gui/network/tormapwidget.cpp
===================================================================
--- trunk/src/gui/network/tormapwidget.cpp	2006-12-09 21:37:59 UTC (rev 1510)
+++ trunk/src/gui/network/tormapwidget.cpp	2006-12-10 03:57:08 UTC (rev 1511)
@@ -284,6 +284,22 @@
   }
 }
 
+/** Zoom to the circuit on the map with the given <b>circid</b>. */
+void
+TorMapWidget::zoomToCircuit(quint64 circid)
+{
+  if (_circuits.contains(circid)) {
+    QPair<QPainterPath*,bool> *pair = _circuits.value(circid);
+    QRectF rect = ((QPainterPath *)pair->first)->boundingRect();
+    if (!rect.isNull()) {
+      float zoomLevel = 1.0 - qMax(rect.height()/float(MAP_HEIGHT),
+                                   rect.width()/float(MAP_WIDTH));
+
+      zoom(rect.center().toPoint(), zoomLevel+0.2);
+    }
+  }
+}
+
 /** Zooms in on the router with the given <b>id</b>. */
 void
 TorMapWidget::zoomToRouter(QString id)

Modified: trunk/src/gui/network/tormapwidget.h
===================================================================
--- trunk/src/gui/network/tormapwidget.h	2006-12-09 21:37:59 UTC (rev 1510)
+++ trunk/src/gui/network/tormapwidget.h	2006-12-10 03:57:08 UTC (rev 1511)
@@ -68,6 +68,8 @@
   void zoomToFit();
   /** Zoom to a particular router on the map. */
   void zoomToRouter(QString id);
+  /** Zoom to the circuit on the map with the given <b>circid</b>. */
+  void zoomToCircuit(quint64 circid);
 
 protected:
   /** Paints the current circuits and streams on the image. */