[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. */