changeset 978:f14e4aa1a7bd draft

more improvements
author Wladimir J. van der Laan <laanwj@gmail.com>
date Fri, 13 May 2011 22:00:27 +0200
parents f2e9aa339c70
children bff681797991
files addressbookdialog.cpp addressbookdialog.h addressbookdialog.ui addresstablemodel.cpp bitcoin.pro bitcoinaddressvalidator.cpp bitcoinaddressvalidator.h bitcoingui.h optionsdialog.cpp optionsdialog.h sendcoinsdialog.cpp sendcoinsdialog.h sendcoinsdialog.ui
diffstat 13 files changed, 178 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/addressbookdialog.cpp
+++ b/addressbookdialog.cpp
@@ -5,6 +5,7 @@
 #include "editaddressdialog.h"
 
 #include <QSortFilterProxyModel>
+#include <QDebug>
 
 AddressBookDialog::AddressBookDialog(QWidget *parent) :
     QDialog(parent),
@@ -62,14 +63,23 @@
     ui->tabWidget->setCurrentIndex(tab);
 }
 
-void AddressBookDialog::on_OKButton_clicked()
+QTableView *AddressBookDialog::getCurrentTable()
 {
-    accept();
+    switch(ui->tabWidget->currentIndex())
+    {
+    case SendingTab:
+        return ui->sendTableView;
+    case ReceivingTab:
+        return ui->receiveTableView;
+    default:
+        return 0;
+    }
 }
 
 void AddressBookDialog::on_copyToClipboard_clicked()
 {
-   /* Copy currently selected address to clipboard */
+    /* Copy currently selected address to clipboard */
+
 }
 
 void AddressBookDialog::on_editButton_clicked()
@@ -84,3 +94,39 @@
     EditAddressDialog dlg;
     dlg.exec();
 }
+
+void AddressBookDialog::on_tabWidget_currentChanged(int index)
+{
+    switch(index)
+    {
+    case SendingTab:
+        ui->deleteButton->show();
+        break;
+    case ReceivingTab:
+        ui->deleteButton->hide();
+        break;
+    }
+}
+
+void AddressBookDialog::on_deleteButton_clicked()
+{
+    QTableView *table = getCurrentTable();
+    QModelIndexList indexes = table->selectionModel()->selectedRows();
+
+    foreach (QModelIndex index, indexes) {
+        table->model()->removeRow(index.row());
+    }
+}
+
+void AddressBookDialog::on_buttonBox_accepted()
+{
+    QTableView *table = getCurrentTable();
+    QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
+
+    foreach (QModelIndex index, indexes) {
+        QVariant address = table->model()->data(index);
+        returnValue = address.toString();
+    }
+
+    accept();
+}
--- a/addressbookdialog.h
+++ b/addressbookdialog.h
@@ -8,6 +8,10 @@
 }
 class AddressTableModel;
 
+QT_BEGIN_NAMESPACE
+class QTableView;
+QT_END_NAMESPACE
+
 class AddressBookDialog : public QDialog
 {
     Q_OBJECT
@@ -23,15 +27,21 @@
 
     void setModel(AddressTableModel *model);
     void setTab(int tab);
+    const QString &getReturnValue() const { return returnValue; }
 private:
     Ui::AddressBookDialog *ui;
     AddressTableModel *model;
+    QString returnValue;
+
+    QTableView *getCurrentTable();
 
 private slots:
+    void on_buttonBox_accepted();
+    void on_deleteButton_clicked();
+    void on_tabWidget_currentChanged(int index);
     void on_newAddressButton_clicked();
     void on_editButton_clicked();
     void on_copyToClipboard_clicked();
-    void on_OKButton_clicked();
 };
 
 #endif // ADDRESSBOOKDIALOG_H
--- a/addressbookdialog.ui
+++ b/addressbookdialog.ui
@@ -26,6 +26,9 @@
       <layout class="QVBoxLayout" name="verticalLayout_2">
        <item>
         <widget class="QTableView" name="sendTableView">
+         <property name="selectionMode">
+          <enum>QAbstractItemView::SingleSelection</enum>
+         </property>
          <property name="selectionBehavior">
           <enum>QAbstractItemView::SelectRows</enum>
          </property>
@@ -56,6 +59,9 @@
        </item>
        <item>
         <widget class="QTableView" name="receiveTableView">
+         <property name="selectionMode">
+          <enum>QAbstractItemView::SingleSelection</enum>
+         </property>
          <property name="selectionBehavior">
           <enum>QAbstractItemView::SelectRows</enum>
          </property>
@@ -84,30 +90,43 @@
       </spacer>
      </item>
      <item>
+      <widget class="QPushButton" name="newAddressButton">
+       <property name="text">
+        <string>&amp;New Address...</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QPushButton" name="copyToClipboard">
        <property name="text">
-        <string>Copy to Clipboard</string>
+        <string>&amp;Copy to Clipboard</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QPushButton" name="editButton">
        <property name="text">
-        <string>Edit...</string>
+        <string>&amp;Edit...</string>
        </property>
       </widget>
      </item>
      <item>
-      <widget class="QPushButton" name="newAddressButton">
+      <widget class="QPushButton" name="deleteButton">
        <property name="text">
-        <string>New Address...</string>
+        <string>&amp;Delete</string>
        </property>
       </widget>
      </item>
      <item>
-      <widget class="QPushButton" name="OKButton">
-       <property name="text">
-        <string>OK</string>
+      <widget class="QDialogButtonBox" name="buttonBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Ok</set>
        </property>
       </widget>
      </item>
--- a/addresstablemodel.cpp
+++ b/addresstablemodel.cpp
@@ -29,7 +29,7 @@
         /* index.row(), index.column() */
         /* Return QString */
         if(index.column() == Address)
-            return "1PC9aZC4hNX2rmmrt7uHTfYAS3hRbph4UN";
+            return "1PC9aZC4hNX2rmmrt7uHTfYAS3hRbph4UN" + QString::number(index.row());
         else
             return "Description";
     } else if (role == Qt::UserRole)
--- a/bitcoin.pro
+++ b/bitcoin.pro
@@ -16,7 +16,8 @@
     sendcoinsdialog.h \
     addressbookdialog.h \
     aboutdialog.h \
-    editaddressdialog.h
+    editaddressdialog.h \
+    bitcoinaddressvalidator.h
 SOURCES += bitcoin.cpp bitcoingui.cpp \
     transactiontablemodel.cpp \
     addresstablemodel.cpp \
@@ -25,7 +26,8 @@
     sendcoinsdialog.cpp \
     addressbookdialog.cpp \
     aboutdialog.cpp \
-    editaddressdialog.cpp
+    editaddressdialog.cpp \
+    bitcoinaddressvalidator.cpp
 
 RESOURCES += \
     bitcoin.qrc
new file mode 100644
--- /dev/null
+++ b/bitcoinaddressvalidator.cpp
@@ -0,0 +1,8 @@
+#include "bitcoinaddressvalidator.h"
+
+const QString BitcoinAddressValidator::valid_chars = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
+
+BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) :
+    QRegExpValidator(QRegExp("^["+valid_chars+"]+"), parent)
+{
+}
new file mode 100644
--- /dev/null
+++ b/bitcoinaddressvalidator.h
@@ -0,0 +1,19 @@
+#ifndef BITCOINADDRESSVALIDATOR_H
+#define BITCOINADDRESSVALIDATOR_H
+
+#include <QRegExpValidator>
+
+class BitcoinAddressValidator : public QRegExpValidator
+{
+    Q_OBJECT
+public:
+    explicit BitcoinAddressValidator(QObject *parent = 0);
+
+    static const QString valid_chars;
+signals:
+
+public slots:
+
+};
+
+#endif // BITCOINADDRESSVALIDATOR_H
--- a/bitcoingui.h
+++ b/bitcoingui.h
@@ -6,8 +6,11 @@
 
 /* Forward declarations */
 class TransactionTableModel;
+
+QT_BEGIN_NAMESPACE
 class QLabel;
 class QLineEdit;
+QT_END_NAMESPACE
 
 class BitcoinGUI : public QMainWindow
 {
--- a/optionsdialog.cpp
+++ b/optionsdialog.cpp
@@ -4,6 +4,8 @@
 #include <QHBoxLayout>
 #include <QVBoxLayout>
 #include <QPushButton>
+#include <QListWidget>
+#include <QStackedWidget>
 
 OptionsDialog::OptionsDialog(QWidget *parent) :
     QDialog(parent), contents_widget(0), pages_widget(0)
--- a/optionsdialog.h
+++ b/optionsdialog.h
@@ -2,8 +2,12 @@
 #define OPTIONSDIALOG_H
 
 #include <QDialog>
-#include <QStackedWidget>
-#include <QListWidget>
+
+QT_BEGIN_NAMESPACE
+class QStackedWidget;
+class QListWidget;
+class QListWidgetItem;
+QT_END_NAMESPACE
 
 class OptionsDialog : public QDialog
 {
--- a/sendcoinsdialog.cpp
+++ b/sendcoinsdialog.cpp
@@ -2,6 +2,7 @@
 #include "ui_sendcoinsdialog.h"
 
 #include "addressbookdialog.h"
+#include "bitcoinaddressvalidator.h"
 
 #include <QApplication>
 #include <QClipboard>
@@ -11,6 +12,8 @@
     ui(new Ui::SendCoinsDialog)
 {
     ui->setupUi(this);
+    ui->payTo->setValidator(new BitcoinAddressValidator(this));
+    ui->payAmount->setValidator(new QDoubleValidator(this));
 }
 
 SendCoinsDialog::~SendCoinsDialog()
@@ -23,11 +26,6 @@
     accept();
 }
 
-void SendCoinsDialog::on_cancelButton_clicked()
-{
-    reject();
-}
-
 void SendCoinsDialog::on_pasteButton_clicked()
 {
     /* Paste text from clipboard into recipient field */
@@ -38,4 +36,10 @@
 {
     AddressBookDialog dlg;
     dlg.exec();
+    ui->payTo->setText(dlg.getReturnValue());
 }
+
+void SendCoinsDialog::on_buttonBox_rejected()
+{
+    reject();
+}
--- a/sendcoinsdialog.h
+++ b/sendcoinsdialog.h
@@ -19,9 +19,9 @@
     Ui::SendCoinsDialog *ui;
 
 private slots:
+    void on_buttonBox_rejected();
     void on_addressBookButton_clicked();
     void on_pasteButton_clicked();
-    void on_cancelButton_clicked();
     void on_sendButton_clicked();
 };
 
--- a/sendcoinsdialog.ui
+++ b/sendcoinsdialog.ui
@@ -43,7 +43,11 @@
       </widget>
      </item>
      <item row="3" column="1">
-      <widget class="QLineEdit" name="payTo"/>
+      <widget class="QLineEdit" name="payTo">
+       <property name="maxLength">
+        <number>34</number>
+       </property>
+      </widget>
      </item>
      <item row="4" column="1">
       <widget class="QLineEdit" name="payAmount">
@@ -116,12 +120,22 @@
        <property name="text">
         <string>&amp;Send</string>
        </property>
+       <property name="icon">
+        <iconset resource="bitcoin.qrc">
+         <normaloff>:/icons/send</normaloff>:/icons/send</iconset>
+       </property>
       </widget>
      </item>
      <item>
-      <widget class="QPushButton" name="cancelButton">
-       <property name="text">
-        <string>Cancel</string>
+      <widget class="QDialogButtonBox" name="buttonBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Cancel</set>
        </property>
       </widget>
      </item>
@@ -129,6 +143,25 @@
    </item>
   </layout>
  </widget>
- <resources/>
- <connections/>
+ <resources>
+  <include location="bitcoin.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>payAmount</sender>
+   <signal>returnPressed()</signal>
+   <receiver>sendButton</receiver>
+   <slot>click()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>191</x>
+     <y>65</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>570</x>
+     <y>121</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
 </ui>