aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2011-12-04 18:01:53 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2011-12-23 12:07:23 +0100
commitc4a4a4b886b3bd8933cf96c0d66d647a2b32a68b (patch)
tree1758227059c8a6bb095d273f2022f0e4355e899a
parente0734571912736356839fde75fd10993b0df81d5 (diff)
downloadbitcoin-c4a4a4b886b3bd8933cf96c0d66d647a2b32a68b.tar.xz
Add context menu for address book page (implements part 1 of issue #648)
-rw-r--r--src/qt/addressbookpage.cpp68
-rw-r--r--src/qt/addressbookpage.h11
2 files changed, 69 insertions, 10 deletions
diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp
index d207fe30fa..91412fcc18 100644
--- a/src/qt/addressbookpage.cpp
+++ b/src/qt/addressbookpage.cpp
@@ -4,11 +4,13 @@
#include "addresstablemodel.h"
#include "editaddressdialog.h"
#include "csvmodelwriter.h"
+#include "guiutil.h"
#include <QSortFilterProxyModel>
#include <QClipboard>
#include <QFileDialog>
#include <QMessageBox>
+#include <QMenu>
#ifdef USE_QRCODE
#include "qrcodedialog.h"
@@ -53,7 +55,28 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
break;
}
ui->tableView->setTabKeyNavigation(false);
+ ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);
+ // Context menu actions
+ QAction *copyAddressAction = new QAction(tr("Copy address"), this);
+ QAction *copyLabelAction = new QAction(tr("Copy label"), this);
+ QAction *editAction = new QAction(tr("Edit"), this);
+ deleteAction = new QAction(tr("Delete"), this);
+
+ contextMenu = new QMenu();
+ contextMenu->addAction(copyAddressAction);
+ contextMenu->addAction(copyLabelAction);
+ contextMenu->addAction(editAction);
+ contextMenu->addAction(deleteAction);
+
+ connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(on_copyToClipboard_clicked()));
+ connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(onCopyLabelAction()));
+ connect(editAction, SIGNAL(triggered()), this, SLOT(onEditAction()));
+ connect(deleteAction, SIGNAL(triggered()), this, SLOT(on_deleteButton_clicked()));
+
+ connect(ui->tableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint)));
+
+ // Pass through accept action from button box
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
}
@@ -108,18 +131,29 @@ void AddressBookPage::setModel(AddressTableModel *model)
void AddressBookPage::on_copyToClipboard_clicked()
{
- // Copy currently selected address to clipboard
- // (or nothing, if nothing selected)
- QTableView *table = ui->tableView;
- if(!table->selectionModel())
+ GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Address);
+}
+void AddressBookPage::onCopyLabelAction()
+{
+ GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Label);
+}
+
+void AddressBookPage::onEditAction()
+{
+ if(!ui->tableView->selectionModel())
+ return;
+ QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows();
+ if(indexes.isEmpty())
return;
- QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
- foreach (QModelIndex index, indexes)
- {
- QVariant address = index.data();
- QApplication::clipboard()->setText(address.toString());
- }
+ EditAddressDialog dlg(
+ tab == SendingTab ?
+ EditAddressDialog::EditSendingAddress :
+ EditAddressDialog::EditReceivingAddress);
+ dlg.setModel(model);
+ QModelIndex origIndex = proxyModel->mapToSource(indexes.at(0));
+ dlg.loadRow(origIndex.row());
+ dlg.exec();
}
void AddressBookPage::on_newAddressButton_clicked()
@@ -170,10 +204,14 @@ void AddressBookPage::selectionChanged()
switch(tab)
{
case SendingTab:
+ // In sending tab, allow deletion of selection
ui->deleteButton->setEnabled(true);
+ deleteAction->setEnabled(true);
break;
case ReceivingTab:
+ // Deleting receiving addresses, however, is not allowed
ui->deleteButton->setEnabled(false);
+ deleteAction->setEnabled(false);
break;
}
ui->copyToClipboard->setEnabled(true);
@@ -207,6 +245,7 @@ void AddressBookPage::done(int retval)
if(returnValue.isEmpty())
{
+ // If no address entry selected, return rejected
retval = Rejected;
}
@@ -257,3 +296,12 @@ void AddressBookPage::on_showQRCode_clicked()
}
#endif
}
+
+void AddressBookPage::contextualMenu(const QPoint &point)
+{
+ QModelIndex index = ui->tableView->indexAt(point);
+ if(index.isValid())
+ {
+ contextMenu->exec(QCursor::pos());
+ }
+}
diff --git a/src/qt/addressbookpage.h b/src/qt/addressbookpage.h
index 2538f319dd..6b08f8415b 100644
--- a/src/qt/addressbookpage.h
+++ b/src/qt/addressbookpage.h
@@ -12,6 +12,7 @@ QT_BEGIN_NAMESPACE
class QTableView;
class QItemSelection;
class QSortFilterProxyModel;
+class QMenu;
QT_END_NAMESPACE
/** Widget that shows a list of sending or receiving addresses.
@@ -48,13 +49,23 @@ private:
Tabs tab;
QString returnValue;
QSortFilterProxyModel *proxyModel;
+ QMenu *contextMenu;
+ QAction *deleteAction;
private slots:
void on_deleteButton_clicked();
void on_newAddressButton_clicked();
+ /** Copy address of currently selected address entry to clipboard */
void on_copyToClipboard_clicked();
void selectionChanged();
void on_showQRCode_clicked();
+ /** Spawn contextual menu (right mouse menu) for address book entry */
+ void contextualMenu(const QPoint &point);
+
+ /** Copy label of currently selected address entry to clipboard */
+ void onCopyLabelAction();
+ /** Edit currently selected address entry */
+ void onEditAction();
};
#endif // ADDRESSBOOKDIALOG_H