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

[vidalia-svn] r3029: Add a context menu with a "copy" option to RouterDescriptorV (vidalia/trunk/src/vidalia/network)



Author: edmanm
Date: 2008-09-01 21:39:36 -0400 (Mon, 01 Sep 2008)
New Revision: 3029

Modified:
   vidalia/trunk/src/vidalia/network/netviewer.ui
   vidalia/trunk/src/vidalia/network/routerdescriptorview.cpp
   vidalia/trunk/src/vidalia/network/routerdescriptorview.h
Log:
Add a context menu with a "copy" option to RouterDescriptorView so users can
copy some text to the clipboard. Implements ticket #291.


Modified: vidalia/trunk/src/vidalia/network/netviewer.ui
===================================================================
--- vidalia/trunk/src/vidalia/network/netviewer.ui	2008-09-01 23:37:46 UTC (rev 3028)
+++ vidalia/trunk/src/vidalia/network/netviewer.ui	2008-09-02 01:39:36 UTC (rev 3029)
@@ -190,7 +190,7 @@
           </sizepolicy>
          </property>
          <property name="contextMenuPolicy" >
-          <enum>Qt::NoContextMenu</enum>
+          <enum>Qt::DefaultContextMenu</enum>
          </property>
          <property name="readOnly" >
           <bool>true</bool>

Modified: vidalia/trunk/src/vidalia/network/routerdescriptorview.cpp
===================================================================
--- vidalia/trunk/src/vidalia/network/routerdescriptorview.cpp	2008-09-01 23:37:46 UTC (rev 3028)
+++ vidalia/trunk/src/vidalia/network/routerdescriptorview.cpp	2008-09-02 01:39:36 UTC (rev 3029)
@@ -14,18 +14,58 @@
 ** \brief Formats and displays a router descriptor as HTML
 */
 
+#include <QMenu>
+#include <QIcon>
+#include <QTextCursor>
+#include <QClipboard>
+#include <QShortcut>
+#include <QTextDocumentFragment>
 #include <html.h>
+#include <vidalia.h>
 #include "routerdescriptorview.h"
 
 #define DATE_FORMAT   "yyyy-MM-dd HH:mm:ss"
+#define IMG_COPY      ":/images/22x22/edit-copy.png"
 
 
 /** Default constructor. */
 RouterDescriptorView::RouterDescriptorView(QWidget *parent)
 : QTextEdit(parent)
 {
+  /* Steal QTextEdit's default "Copy" shortcut, since we want to do some
+   * tweaking of the selected text before putting it on the clipboard. */
+  QShortcut *shortcut = new QShortcut(QKeySequence::Copy, this,
+                                      SLOT(copySelectedText()));
 }
 
+/** Displays a context menu for the user when they right-click on the
+ * widget. */
+void
+RouterDescriptorView::contextMenuEvent(QContextMenuEvent *event)
+{
+  QMenu *menu = new QMenu();
+
+  QAction *copyAction = new QAction(QIcon(IMG_COPY), tr("Copy"), menu);
+  copyAction->setShortcut(QKeySequence::Copy);
+  connect(copyAction, SIGNAL(triggered()), this, SLOT(copySelectedText()));
+
+  if (textCursor().selectedText().isEmpty())
+    copyAction->setEnabled(false);
+
+  menu->addAction(copyAction);
+  menu->exec(event->globalPos());
+  delete menu;
+}
+
+/** Copies any selected text to the clipboard. */
+void
+RouterDescriptorView::copySelectedText()
+{ 
+  QString selectedText = textCursor().selection().toPlainText();
+  selectedText.replace(":\n", ": ");
+  vApp->clipboard()->setText(selectedText);
+}
+
 /** Format the date the descriptor was published. */
 QString
 RouterDescriptorView::formatPublished(QDateTime date)

Modified: vidalia/trunk/src/vidalia/network/routerdescriptorview.h
===================================================================
--- vidalia/trunk/src/vidalia/network/routerdescriptorview.h	2008-09-01 23:37:46 UTC (rev 3028)
+++ vidalia/trunk/src/vidalia/network/routerdescriptorview.h	2008-09-02 01:39:36 UTC (rev 3029)
@@ -20,6 +20,7 @@
 #include <QObject>
 #include <QTextEdit>
 #include <QList>
+#include <QContextMenuEvent>
 
 #include <routerdescriptor.h>
 
@@ -37,7 +38,14 @@
   void display(RouterDescriptor rd);
   /** Shows all router descriptors in the given list. */
   void display(QList<RouterDescriptor> rdlist);
-  
+  /** Copies any selected text to the clipboard. */
+  void copySelectedText();
+
+protected:
+  /** Displays a context menu for the user when they right-click on the
+   * widget. */
+  virtual void contextMenuEvent(QContextMenuEvent *event);
+
 private:
   /** Adjusts the displayed uptime to include time since the
    * router's descriptor was last published. */