diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-01-29 14:43:37 +0100 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-01-29 14:43:48 +0100 |
commit | e16ee005ec7ed97c41ef1ebb6270b2c8dd6fb178 (patch) | |
tree | 67e69856c314e5ef8bcf31d975eaa7ced7a11c7a /src/qt | |
parent | 624154114f30b73662a01dbc8de734dc423a3d51 (diff) | |
parent | 69d03bc6e2c97d19b4e23a36205db3fe72bb7c8a (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.cpp | 3 | ||||
-rw-r--r-- | src/qt/forms/receivecoinsdialog.ui | 82 | ||||
-rw-r--r-- | src/qt/forms/sendcoinsdialog.ui | 84 | ||||
-rw-r--r-- | src/qt/receivecoinsdialog.cpp | 78 | ||||
-rw-r--r-- | src/qt/receivecoinsdialog.h | 12 | ||||
-rw-r--r-- | src/qt/recentrequeststablemodel.cpp | 5 | ||||
-rw-r--r-- | src/qt/sendcoinsdialog.cpp | 7 |
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>&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>&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>&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>&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>&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 &Recipient</string> + <string>S&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 &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&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) |