Add context menu for address book page (implements part 1 of issue #648)
This commit is contained in:
parent
e073457191
commit
c4a4a4b886
|
@ -4,11 +4,13 @@
|
||||||
#include "addresstablemodel.h"
|
#include "addresstablemodel.h"
|
||||||
#include "editaddressdialog.h"
|
#include "editaddressdialog.h"
|
||||||
#include "csvmodelwriter.h"
|
#include "csvmodelwriter.h"
|
||||||
|
#include "guiutil.h"
|
||||||
|
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
#ifdef USE_QRCODE
|
#ifdef USE_QRCODE
|
||||||
#include "qrcodedialog.h"
|
#include "qrcodedialog.h"
|
||||||
|
@ -53,7 +55,28 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ui->tableView->setTabKeyNavigation(false);
|
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()));
|
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,18 +131,29 @@ void AddressBookPage::setModel(AddressTableModel *model)
|
||||||
|
|
||||||
void AddressBookPage::on_copyToClipboard_clicked()
|
void AddressBookPage::on_copyToClipboard_clicked()
|
||||||
{
|
{
|
||||||
// Copy currently selected address to clipboard
|
GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Address);
|
||||||
// (or nothing, if nothing selected)
|
}
|
||||||
QTableView *table = ui->tableView;
|
void AddressBookPage::onCopyLabelAction()
|
||||||
if(!table->selectionModel())
|
{
|
||||||
return;
|
GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Label);
|
||||||
QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
|
}
|
||||||
|
|
||||||
foreach (QModelIndex index, indexes)
|
void AddressBookPage::onEditAction()
|
||||||
{
|
{
|
||||||
QVariant address = index.data();
|
if(!ui->tableView->selectionModel())
|
||||||
QApplication::clipboard()->setText(address.toString());
|
return;
|
||||||
}
|
QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows();
|
||||||
|
if(indexes.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
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()
|
void AddressBookPage::on_newAddressButton_clicked()
|
||||||
|
@ -170,10 +204,14 @@ void AddressBookPage::selectionChanged()
|
||||||
switch(tab)
|
switch(tab)
|
||||||
{
|
{
|
||||||
case SendingTab:
|
case SendingTab:
|
||||||
|
// In sending tab, allow deletion of selection
|
||||||
ui->deleteButton->setEnabled(true);
|
ui->deleteButton->setEnabled(true);
|
||||||
|
deleteAction->setEnabled(true);
|
||||||
break;
|
break;
|
||||||
case ReceivingTab:
|
case ReceivingTab:
|
||||||
|
// Deleting receiving addresses, however, is not allowed
|
||||||
ui->deleteButton->setEnabled(false);
|
ui->deleteButton->setEnabled(false);
|
||||||
|
deleteAction->setEnabled(false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ui->copyToClipboard->setEnabled(true);
|
ui->copyToClipboard->setEnabled(true);
|
||||||
|
@ -207,6 +245,7 @@ void AddressBookPage::done(int retval)
|
||||||
|
|
||||||
if(returnValue.isEmpty())
|
if(returnValue.isEmpty())
|
||||||
{
|
{
|
||||||
|
// If no address entry selected, return rejected
|
||||||
retval = Rejected;
|
retval = Rejected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,3 +296,12 @@ void AddressBookPage::on_showQRCode_clicked()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddressBookPage::contextualMenu(const QPoint &point)
|
||||||
|
{
|
||||||
|
QModelIndex index = ui->tableView->indexAt(point);
|
||||||
|
if(index.isValid())
|
||||||
|
{
|
||||||
|
contextMenu->exec(QCursor::pos());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ QT_BEGIN_NAMESPACE
|
||||||
class QTableView;
|
class QTableView;
|
||||||
class QItemSelection;
|
class QItemSelection;
|
||||||
class QSortFilterProxyModel;
|
class QSortFilterProxyModel;
|
||||||
|
class QMenu;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
/** Widget that shows a list of sending or receiving addresses.
|
/** Widget that shows a list of sending or receiving addresses.
|
||||||
|
@ -48,13 +49,23 @@ private:
|
||||||
Tabs tab;
|
Tabs tab;
|
||||||
QString returnValue;
|
QString returnValue;
|
||||||
QSortFilterProxyModel *proxyModel;
|
QSortFilterProxyModel *proxyModel;
|
||||||
|
QMenu *contextMenu;
|
||||||
|
QAction *deleteAction;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_deleteButton_clicked();
|
void on_deleteButton_clicked();
|
||||||
void on_newAddressButton_clicked();
|
void on_newAddressButton_clicked();
|
||||||
|
/** Copy address of currently selected address entry to clipboard */
|
||||||
void on_copyToClipboard_clicked();
|
void on_copyToClipboard_clicked();
|
||||||
void selectionChanged();
|
void selectionChanged();
|
||||||
void on_showQRCode_clicked();
|
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
|
#endif // ADDRESSBOOKDIALOG_H
|
||||||
|
|
Loading…
Reference in New Issue