Merge pull request #120 from fsb4000/CoinControl
authorCryptoManiac <CryptoManiac@users.noreply.github.com>
Fri, 23 Jan 2015 13:17:09 +0000 (16:17 +0300)
committerCryptoManiac <CryptoManiac@users.noreply.github.com>
Fri, 23 Jan 2015 13:17:09 +0000 (16:17 +0300)
Coin control

src/qt/coincontroldialog.cpp
src/qt/coincontroldialog.h
src/qt/coincontroltreewidget.cpp
src/qt/forms/coincontroldialog.ui
src/qt/sendcoinsdialog.cpp
src/qt/sendcoinsdialog.h

index f5a8c6a..e79392d 100644 (file)
 #include <QString>
 #include <QTreeWidget>
 #include <QTreeWidgetItem>
+#include <QKeyEvent>
 
 using namespace std;
 QList<qint64> CoinControlDialog::payAmounts;
 CCoinControl* CoinControlDialog::coinControl = new CCoinControl();
 
 CoinControlDialog::CoinControlDialog(QWidget *parent) :
-    QDialog(parent, DIALOGWINDOWHINTS),
+    QWidget(parent, DIALOGWINDOWHINTS),
     ui(new Ui::CoinControlDialog),
     model(0)
 {
@@ -153,10 +154,9 @@ QString CoinControlDialog::strPad(QString s, int nPadLength, QString sPadding)
 }
 
 // ok button
-void CoinControlDialog::buttonBoxClicked(QAbstractButton* button)
+void CoinControlDialog::on_buttonBox_accepted()
 {
-    if (ui->buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole)
-        done(QDialog::Accepted); // closes the dialog
+    close(); // closes the dialog
 }
 
 // (un)select all
@@ -416,7 +416,7 @@ QString CoinControlDialog::getPriorityLabel(double dPriority)
     else ui->labelLocked->setVisible(false);
 }*/
 
-void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
+void CoinControlDialog::updateLabels(WalletModel *model, QWidget* dialog)
 {
     if (!model) return;
 
@@ -737,3 +737,24 @@ void CoinControlDialog::updateView()
     sortView(sortColumn, sortOrder);
     ui->treeWidget->setEnabled(true);
 }
+
+void CoinControlDialog::keyPressEvent(QKeyEvent *event)
+{
+#ifdef ANDROID
+    if(event->key() == Qt::Key_Back)
+    {
+        close();
+    }
+#else
+    if(event->key() == Qt::Key_Escape)
+    {
+        close();
+    }
+#endif
+}
+
+void CoinControlDialog::closeEvent(QCloseEvent* e)
+{
+    QWidget::closeEvent(e);
+    emit beforeClose();
+}
\ No newline at end of file
index 28d8f4a..17d73c6 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <QAbstractButton>
 #include <QAction>
-#include <QDialog>
+#include <QWidget>
 #include <QList>
 #include <QMenu>
 #include <QPoint>
@@ -16,9 +16,11 @@ namespace Ui {
 class WalletModel;
 class CCoinControl;
 
-class CoinControlDialog : public QDialog
+class CoinControlDialog : public QWidget
 {
     Q_OBJECT
+signals:
+    void beforeClose();
 
 public:
     explicit CoinControlDialog(QWidget *parent = 0);
@@ -27,12 +29,15 @@ public:
     void setModel(WalletModel *model);
 
     // static because also called from sendcoinsdialog
-    static void updateLabels(WalletModel*, QDialog*);
+    static void updateLabels(WalletModel*, QWidget*);
     static QString getPriorityLabel(double);
 
     static QList<qint64> payAmounts;
     static CCoinControl *coinControl;
 
+protected:
+    void closeEvent(QCloseEvent* e);
+
 private:
     Ui::CoinControlDialog *ui;
     WalletModel *model;
@@ -49,6 +54,8 @@ private:
     void sortView(int, Qt::SortOrder);
     void updateView();
 
+    void keyPressEvent(QKeyEvent *);
+
     enum
     {
         COLUMN_CHECKBOX,
@@ -85,7 +92,7 @@ private slots:
     void radioListMode(bool);
     void viewItemChanged(QTreeWidgetItem*, int);
     void headerSectionClicked(int);
-    void buttonBoxClicked(QAbstractButton*);
+    void on_buttonBox_accepted();
     void buttonSelectAllClicked();
     //void updateLabelLocked();
 };
index aa75a49..f1f177e 100644 (file)
@@ -13,16 +13,21 @@ void CoinControlTreeWidget::keyPressEvent(QKeyEvent *event)
     {
         event->ignore();
         int COLUMN_CHECKBOX = 0;
-        this->currentItem()->setCheckState(COLUMN_CHECKBOX, ((this->currentItem()->checkState(COLUMN_CHECKBOX) == Qt::Checked) ? Qt::Unchecked : Qt::Checked));
+        if(this->currentItem())
+            this->currentItem()->setCheckState(COLUMN_CHECKBOX, ((this->currentItem()->checkState(COLUMN_CHECKBOX) == Qt::Checked) ? Qt::Unchecked : Qt::Checked));
     }
+#ifdef ANDROID
+    else if (event->key() == Qt::Key_Back) // press back -> close dialog
+#else
     else if (event->key() == Qt::Key_Escape) // press esc -> close dialog
+#endif
     {
         event->ignore();
         CoinControlDialog *coinControlDialog = (CoinControlDialog*)this->parentWidget();
-        coinControlDialog->done(QDialog::Accepted);
+        coinControlDialog->close();
     }
     else
     {
         this->QTreeWidget::keyPressEvent(event);
     }
-}
\ No newline at end of file
+}
index 0e5e999..b1cd268 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
  <class>CoinControlDialog</class>
- <widget class="QDialog" name="CoinControlDialog">
+ <widget class="QWidget" name="CoinControlDialog">
   <property name="geometry">
    <rect>
     <x>0</x>
index 5dee144..1da6c02 100644 (file)
@@ -26,7 +26,8 @@
 SendCoinsDialog::SendCoinsDialog(QWidget *parent) :
     QDialog(parent, DIALOGWINDOWHINTS),
     ui(new Ui::SendCoinsDialog),
-    model(0)
+    model(0),
+    coinControl(0)
 {
     ui->setupUi(this);
 
@@ -78,6 +79,9 @@ SendCoinsDialog::SendCoinsDialog(QWidget *parent) :
     ui->labelCoinControlChange->addAction(clipboardChangeAction);
 
     fNewRecipientAllowed = true;
+
+    coinControl = new CoinControlDialog(0);
+    connect(coinControl, SIGNAL(beforeClose()), this, SLOT(coinControlUpdateLabels()));
 }
 
 void SendCoinsDialog::setModel(WalletModel *model)
@@ -109,6 +113,7 @@ void SendCoinsDialog::setModel(WalletModel *model)
 
 SendCoinsDialog::~SendCoinsDialog()
 {
+    delete coinControl;
     delete ui;
 }
 
@@ -444,10 +449,9 @@ void SendCoinsDialog::coinControlFeatureChanged(bool checked)
 // Coin Control: button inputs -> show actual coin control dialog
 void SendCoinsDialog::coinControlButtonClicked()
 {
-    CoinControlDialog dlg;
-    dlg.setModel(model);
-    dlg.exec();
-    coinControlUpdateLabels();
+    coinControl->setModel(model);
+    coinControl->setWindowModality(Qt::ApplicationModal);
+    coinControl->show();
 }
 
 // Coin Control: checkbox custom change address
index 6810ff4..73e42e4 100644 (file)
@@ -10,6 +10,7 @@ namespace Ui {
 class WalletModel;
 class SendCoinsEntry;
 class SendCoinsRecipient;
+class CoinControlDialog;
 
 QT_BEGIN_NAMESPACE
 class QUrl;
@@ -48,6 +49,7 @@ private:
     Ui::SendCoinsDialog *ui;
     WalletModel *model;
     bool fNewRecipientAllowed;
+    CoinControlDialog *coinControl;
 
 private slots:
     void on_sendButton_clicked();