ui improvements: allow inline editing of labels/addresses in address book table,...
authorWladimir J. van der Laan <laanwj@gmail.com>
Sat, 2 Jul 2011 15:31:27 +0000 (17:31 +0200)
committerWladimir J. van der Laan <laanwj@gmail.com>
Sat, 2 Jul 2011 15:31:27 +0000 (17:31 +0200)
src/qt/addressbookdialog.cpp
src/qt/addressbookdialog.h
src/qt/addresstablemodel.cpp
src/qt/addresstablemodel.h
src/qt/forms/sendcoinsdialog.ui

index 5eb60b7..5a744ae 100644 (file)
 AddressBookDialog::AddressBookDialog(Mode mode, QWidget *parent) :
     QDialog(parent),
     ui(new Ui::AddressBookDialog),
-    model(0)
+    model(0),
+    mode(mode)
 {
     ui->setupUi(this);
-
     switch(mode)
     {
     case ForSending:
         connect(ui->receiveTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_buttonBox_accepted()));
         connect(ui->sendTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_buttonBox_accepted()));
-        break;
-    case ForEditing:
-        connect(ui->receiveTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_editButton_clicked()));
-        connect(ui->sendTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_editButton_clicked()));
+        ui->sendTableView->setFocus();
         break;
     }
 }
@@ -66,6 +63,12 @@ void AddressBookDialog::setModel(AddressTableModel *model)
             AddressTableModel::Address, 320);
     ui->sendTableView->horizontalHeader()->setResizeMode(
             AddressTableModel::Label, QHeaderView::Stretch);
+
+    if(mode == ForSending)
+    {
+        // Auto-select first row when in sending mode
+        ui->sendTableView->selectRow(0);
+    }
 }
 
 void AddressBookDialog::setTab(int tab)
index 25b8839..b032e55 100644 (file)
@@ -36,6 +36,7 @@ public:
 private:
     Ui::AddressBookDialog *ui;
     AddressTableModel *model;
+    Mode mode;
     QString returnValue;
 
     QTableView *getCurrentTable();
index 6829fea..e375ff8 100644 (file)
@@ -109,7 +109,7 @@ QVariant AddressTableModel::data(const QModelIndex &index, int role) const
         switch(index.column())
         {
         case Label:
-            if(rec->label.isEmpty())
+            if(rec->label.isEmpty() && role == Qt::DisplayRole)
             {
                 return tr("(no label)");
             }
@@ -159,6 +159,9 @@ bool AddressTableModel::setData(const QModelIndex & index, const QVariant & valu
             rec->label = value.toString();
             break;
         case Address:
+            // Refuse to set invalid address
+            if(!validateAddress(value.toString()))
+                return false;
             // Double-check that we're not overwriting receiving address
             if(rec->type == AddressTableEntry::Sending)
             {
@@ -190,6 +193,23 @@ QVariant AddressTableModel::headerData(int section, Qt::Orientation orientation,
     return QVariant();
 }
 
+Qt::ItemFlags AddressTableModel::flags(const QModelIndex & index) const
+{
+    if(!index.isValid())
+        return 0;
+    AddressTableEntry *rec = static_cast<AddressTableEntry*>(index.internalPointer());
+
+    Qt::ItemFlags retval = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
+    // Can edit address and label for sending addresses,
+    // and only label for receiving addresses.
+    if(rec->type == AddressTableEntry::Sending ||
+      (rec->type == AddressTableEntry::Receiving && index.column()==Label))
+    {
+        retval |= Qt::ItemIsEditable;
+    }
+    return retval;
+}
+
 QModelIndex AddressTableModel::index(int row, int column, const QModelIndex & parent) const
 {
     Q_UNUSED(parent);
index b509481..6f34a60 100644 (file)
@@ -34,6 +34,7 @@ public:
     QVariant headerData(int section, Qt::Orientation orientation, int role) const;
     QModelIndex index(int row, int column, const QModelIndex & parent) const;
     bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
+    Qt::ItemFlags flags(const QModelIndex & index) const;
 
     /* Add an address to the model.
        Returns the added address on success, and an empty string otherwise.
index 73a42b6..26de3d2 100644 (file)
  </customwidgets>
  <tabstops>
   <tabstop>payTo</tabstop>
-  <tabstop>addAsLabel</tabstop>
-  <tabstop>payAmount</tabstop>
   <tabstop>addressBookButton</tabstop>
   <tabstop>pasteButton</tabstop>
+  <tabstop>addAsLabel</tabstop>
+  <tabstop>payAmount</tabstop>
   <tabstop>sendButton</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>