aboutsummaryrefslogtreecommitdiff
path: root/src/qt
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2014-01-29 14:43:37 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2014-01-29 14:43:48 +0100
commite16ee005ec7ed97c41ef1ebb6270b2c8dd6fb178 (patch)
tree67e69856c314e5ef8bcf31d975eaa7ced7a11c7a /src/qt
parent624154114f30b73662a01dbc8de734dc423a3d51 (diff)
parent69d03bc6e2c97d19b4e23a36205db3fe72bb7c8a (diff)
Merge pull request #3598
69d03bc qt: Fix tab order in send and receive tab (Wladimir J. van der Laan) 79fb055 [Qt] minor receive tab improvements (Cozz Lovan)
Diffstat (limited to 'src/qt')
-rw-r--r--src/qt/bitcoinamountfield.cpp3
-rw-r--r--src/qt/forms/receivecoinsdialog.ui82
-rw-r--r--src/qt/forms/sendcoinsdialog.ui84
-rw-r--r--src/qt/receivecoinsdialog.cpp78
-rw-r--r--src/qt/receivecoinsdialog.h12
-rw-r--r--src/qt/recentrequeststablemodel.cpp5
-rw-r--r--src/qt/sendcoinsdialog.cpp7
7 files changed, 203 insertions, 68 deletions
diff --git a/src/qt/bitcoinamountfield.cpp b/src/qt/bitcoinamountfield.cpp
index 1698595188..c1f2f18d45 100644
--- a/src/qt/bitcoinamountfield.cpp
+++ b/src/qt/bitcoinamountfield.cpp
@@ -116,7 +116,8 @@ bool BitcoinAmountField::eventFilter(QObject *object, QEvent *event)
QWidget *BitcoinAmountField::setupTabChain(QWidget *prev)
{
QWidget::setTabOrder(prev, amount);
- return amount;
+ QWidget::setTabOrder(amount, unit);
+ return unit;
}
qint64 BitcoinAmountField::value(bool *valid_out) const
diff --git a/src/qt/forms/receivecoinsdialog.ui b/src/qt/forms/receivecoinsdialog.ui
index e93636ea5f..3e1a8bccc7 100644
--- a/src/qt/forms/receivecoinsdialog.ui
+++ b/src/qt/forms/receivecoinsdialog.ui
@@ -10,8 +10,23 @@
<height>364</height>
</rect>
</property>
- <layout class="QVBoxLayout" name="verticalLayout">
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1">
<item>
+ <widget class="QFrame" name="frame2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Sunken</enum>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
<layout class="QGridLayout" name="gridLayout">
<item row="7" column="2">
<widget class="QCheckBox" name="reuseAddress">
@@ -32,6 +47,9 @@
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_3">
+ <property name="toolTip">
+ <string>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network.</string>
+ </property>
<property name="text">
<string>&amp;Message:</string>
</property>
@@ -46,7 +64,7 @@
<item row="4" column="2">
<widget class="QLineEdit" name="reqLabel">
<property name="toolTip">
- <string>An optional label to associate with the new receiving address</string>
+ <string>An optional label to associate with the new receiving address.</string>
</property>
</widget>
</item>
@@ -66,6 +84,9 @@
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_2">
+ <property name="toolTip">
+ <string>An optional label to associate with the new receiving address.</string>
+ </property>
<property name="text">
<string>&amp;Label:</string>
</property>
@@ -79,6 +100,9 @@
</item>
<item row="5" column="0">
<widget class="QLabel" name="label">
+ <property name="toolTip">
+ <string>An optional amount to request. Leave this empty or zero to not request a specific amount.</string>
+ </property>
<property name="text">
<string>&amp;Amount:</string>
</property>
@@ -103,11 +127,26 @@
</property>
</widget>
</item>
- </layout>
- </item>
- <item>
+ <item row="8" column="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
+ <widget class="QPushButton" name="receiveButton">
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&amp;Request payment</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../bitcoin.qrc">
+ <normaloff>:/icons/receiving_addresses</normaloff>:/icons/receiving_addresses</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QPushButton" name="clearButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -146,25 +185,20 @@
</property>
</spacer>
</item>
- <item>
- <widget class="QPushButton" name="receiveButton">
- <property name="minimumSize">
- <size>
- <width>150</width>
- <height>0</height>
- </size>
- </property>
+ </layout>
+ </item>
+ <item row="8" column="0">
+ <widget class="QLabel" name="label_7">
<property name="text">
- <string>&amp;Request payment</string>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/receiving_addresses</normaloff>:/icons/receiving_addresses</iconset>
+ <string/>
</property>
</widget>
</item>
</layout>
</item>
+ </layout>
+ </widget>
+ </item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
@@ -173,7 +207,7 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>40</height>
+ <height>10</height>
</size>
</property>
</spacer>
@@ -202,12 +236,18 @@
</font>
</property>
<property name="text">
- <string>Requested payments</string>
+ <string>Requested payments history</string>
</property>
</widget>
</item>
<item>
<widget class="QTableView" name="recentRequestsView">
+ <property name="contextMenuPolicy">
+ <enum>Qt::CustomContextMenu</enum>
+ </property>
+ <property name="tabKeyNavigation">
+ <bool>false</bool>
+ </property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
@@ -275,8 +315,8 @@
<tabstop>reqAmount</tabstop>
<tabstop>reqMessage</tabstop>
<tabstop>reuseAddress</tabstop>
- <tabstop>clearButton</tabstop>
<tabstop>receiveButton</tabstop>
+ <tabstop>clearButton</tabstop>
<tabstop>recentRequestsView</tabstop>
<tabstop>showRequestButton</tabstop>
<tabstop>removeRequestButton</tabstop>
diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui
index db8271b016..95f3294adb 100644
--- a/src/qt/forms/sendcoinsdialog.ui
+++ b/src/qt/forms/sendcoinsdialog.ui
@@ -657,19 +657,25 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QPushButton" name="addButton">
+ <widget class="QPushButton" name="sendButton">
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="toolTip">
- <string>Send to multiple recipients at once</string>
+ <string>Confirm the send action</string>
</property>
<property name="text">
- <string>Add &amp;Recipient</string>
+ <string>S&amp;end</string>
</property>
<property name="icon">
<iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/add</normaloff>:/icons/add</iconset>
+ <normaloff>:/icons/send</normaloff>:/icons/send</iconset>
</property>
- <property name="autoDefault">
- <bool>false</bool>
+ <property name="default">
+ <bool>true</bool>
</property>
</widget>
</item>
@@ -700,6 +706,36 @@
</widget>
</item>
<item>
+ <widget class="QPushButton" name="addButton">
+ <property name="toolTip">
+ <string>Send to multiple recipients at once</string>
+ </property>
+ <property name="text">
+ <string>Add &amp;Recipient</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../bitcoin.qrc">
+ <normaloff>:/icons/add</normaloff>:/icons/add</iconset>
+ </property>
+ <property name="autoDefault">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>3</number>
@@ -726,42 +762,6 @@
</item>
</layout>
</item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="sendButton">
- <property name="minimumSize">
- <size>
- <width>150</width>
- <height>0</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Confirm the send action</string>
- </property>
- <property name="text">
- <string>S&amp;end</string>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/send</normaloff>:/icons/send</iconset>
- </property>
- <property name="default">
- <bool>true</bool>
- </property>
- </widget>
- </item>
</layout>
</item>
</layout>
diff --git a/src/qt/receivecoinsdialog.cpp b/src/qt/receivecoinsdialog.cpp
index 38dc88f63b..8ef80d32ea 100644
--- a/src/qt/receivecoinsdialog.cpp
+++ b/src/qt/receivecoinsdialog.cpp
@@ -14,6 +14,8 @@
#include "addresstablemodel.h"
#include "recentrequeststablemodel.h"
+#include <QAction>
+#include <QCursor>
#include <QMessageBox>
#include <QTextDocument>
#include <QScrollBar>
@@ -31,6 +33,24 @@ ReceiveCoinsDialog::ReceiveCoinsDialog(QWidget *parent) :
ui->showRequestButton->setIcon(QIcon());
ui->removeRequestButton->setIcon(QIcon());
#endif
+
+ // context menu actions
+ QAction *copyLabelAction = new QAction(tr("Copy label"), this);
+ QAction *copyMessageAction = new QAction(tr("Copy message"), this);
+ QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
+
+ // context menu
+ contextMenu = new QMenu();
+ contextMenu->addAction(copyLabelAction);
+ contextMenu->addAction(copyMessageAction);
+ contextMenu->addAction(copyAmountAction);
+
+ // context menu signals
+ connect(ui->recentRequestsView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showMenu(QPoint)));
+ connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel()));
+ connect(copyMessageAction, SIGNAL(triggered()), this, SLOT(copyMessage()));
+ connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount()));
+
connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear()));
}
@@ -164,3 +184,61 @@ void ReceiveCoinsDialog::on_removeRequestButton_clicked()
QModelIndex firstIndex = selection.at(0);
model->getRecentRequestsTableModel()->removeRows(firstIndex.row(), selection.length(), firstIndex.parent());
}
+
+void ReceiveCoinsDialog::keyPressEvent(QKeyEvent *event)
+{
+ if (event->key() == Qt::Key_Return)
+ {
+ // press return -> submit form
+ if (ui->reqLabel->hasFocus() || ui->reqAmount->hasFocus() || ui->reqMessage->hasFocus())
+ {
+ event->ignore();
+ on_receiveButton_clicked();
+ return;
+ }
+ }
+
+ this->QDialog::keyPressEvent(event);
+}
+
+// copy column of selected row to clipboard
+void ReceiveCoinsDialog::copyColumnToClipboard(int column)
+{
+ if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel())
+ return;
+ QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows();
+ if(selection.empty())
+ return;
+ // correct for selection mode ContiguousSelection
+ QModelIndex firstIndex = selection.at(0);
+ GUIUtil::setClipboard(model->getRecentRequestsTableModel()->data(firstIndex.child(firstIndex.row(), column), Qt::EditRole).toString());
+}
+
+// context menu
+void ReceiveCoinsDialog::showMenu(const QPoint &point)
+{
+ if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel())
+ return;
+ QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows();
+ if(selection.empty())
+ return;
+ contextMenu->exec(QCursor::pos());
+}
+
+// context menu action: copy label
+void ReceiveCoinsDialog::copyLabel()
+{
+ copyColumnToClipboard(RecentRequestsTableModel::Label);
+}
+
+// context menu action: copy message
+void ReceiveCoinsDialog::copyMessage()
+{
+ copyColumnToClipboard(RecentRequestsTableModel::Message);
+}
+
+// context menu action: copy amount
+void ReceiveCoinsDialog::copyAmount()
+{
+ copyColumnToClipboard(RecentRequestsTableModel::Amount);
+}
diff --git a/src/qt/receivecoinsdialog.h b/src/qt/receivecoinsdialog.h
index ed4b04d361..2c6de0cbca 100644
--- a/src/qt/receivecoinsdialog.h
+++ b/src/qt/receivecoinsdialog.h
@@ -6,6 +6,9 @@
#define RECEIVECOINSDIALOG_H
#include <QDialog>
+#include <QKeyEvent>
+#include <QMenu>
+#include <QPoint>
#include <QVariant>
namespace Ui {
@@ -34,9 +37,14 @@ public slots:
void reject();
void accept();
+protected:
+ virtual void keyPressEvent(QKeyEvent *event);
+
private:
Ui::ReceiveCoinsDialog *ui;
WalletModel *model;
+ QMenu *contextMenu;
+ void copyColumnToClipboard(int column);
private slots:
void on_receiveButton_clicked();
@@ -44,6 +52,10 @@ private slots:
void on_removeRequestButton_clicked();
void on_recentRequestsView_doubleClicked(const QModelIndex &index);
void updateDisplayUnit();
+ void showMenu(const QPoint &);
+ void copyLabel();
+ void copyMessage();
+ void copyAmount();
};
#endif // RECEIVECOINSDIALOG_H
diff --git a/src/qt/recentrequeststablemodel.cpp b/src/qt/recentrequeststablemodel.cpp
index 74b43f1d24..64f140bc86 100644
--- a/src/qt/recentrequeststablemodel.cpp
+++ b/src/qt/recentrequeststablemodel.cpp
@@ -75,7 +75,10 @@ QVariant RecentRequestsTableModel::data(const QModelIndex &index, int role) cons
return rec->recipient.message;
}
case Amount:
- return BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUnit(), rec->recipient.amount);
+ if (rec->recipient.amount == 0 && role == Qt::DisplayRole)
+ return tr("(no amount)");
+ else
+ return BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUnit(), rec->recipient.amount);
}
}
return QVariant();
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
index e2d7dc9bd3..c3a4e4a0db 100644
--- a/src/qt/sendcoinsdialog.cpp
+++ b/src/qt/sendcoinsdialog.cpp
@@ -325,9 +325,10 @@ QWidget *SendCoinsDialog::setupTabChain(QWidget *prev)
prev = entry->setupTabChain(prev);
}
}
- QWidget::setTabOrder(prev, ui->addButton);
- QWidget::setTabOrder(ui->addButton, ui->sendButton);
- return ui->sendButton;
+ QWidget::setTabOrder(prev, ui->sendButton);
+ QWidget::setTabOrder(ui->sendButton, ui->clearButton);
+ QWidget::setTabOrder(ui->clearButton, ui->addButton);
+ return ui->addButton;
}
void SendCoinsDialog::setAddress(const QString &address)