Implemented remove rows.
authorMikko Keinänen <mikko.keinanen@gmail.com>
Thu, 2 Dec 2010 22:11:44 +0000 (00:11 +0200)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Thu, 2 Dec 2010 22:11:44 +0000 (00:11 +0200)
src/db/emufrontfileobjectmodel.cpp
src/db/emufrontfileobjectmodel.h
src/dialogs/emufrontdatadialog.cpp
src/dialogs/emufrontdatadialog.h

index 48c1a6f..f287ca1 100644 (file)
@@ -105,5 +105,31 @@ bool EmuFrontFileObjectModel::insertRows(int row, int count, const QModelIndex &
         q.exec();
     }
     endInsertRows();
+    refresh();
+    return true;
+}
+
+bool EmuFrontFileObjectModel::removeRows(int row, int count, const QModelIndex &parent)
+{
+     if (parent.isValid()) {
+        return false; // This is a flat model
+    }
+    if (rowCount() < row + count - 1)
+        return false;
+
+    QSqlQuery q;
+    q.prepare(QString("DELETE FROM %1 WHERE id=:id").arg(tableName));
+    QModelIndex primaryIndex;
+    int id = -1;
+    beginRemoveRows(QModelIndex(), row, row + count - 1);
+    for(int i = 0; i < count; ++i) {
+        primaryIndex = QSqlQueryModel::index(row + i, EmuFrontFileObject_Id);
+        id = data(primaryIndex).toInt();
+        qDebug() << "Removing data item with id " << id;
+        q.bindValue(":id", id);
+        q.exec();
+    }
+    endRemoveRows();
+    refresh();
     return true;
 }
index f29235f..3a8a4f5 100644 (file)
@@ -30,6 +30,7 @@ public:
     Qt::ItemFlags flags(const QModelIndex &index) const;
     bool setData(const QModelIndex &index, const QVariant &value, int role);
     bool insertRows(int row, int count, const QModelIndex &parent);
+    bool removeRows(int row, int count, const QModelIndex &parent);
     enum {
         EmuFrontFileObject_Id,
         EmuFrontFileObject_Name,
index 61d2557..0d54504 100644 (file)
@@ -62,8 +62,8 @@ void EmuFrontDataDialog::hideColumns()
 void EmuFrontDataDialog::connectSignals()
 {
     connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
-    /*connect(objectList, SIGNAL(clicked(const QModelIndex &)),
-        this, SLOT(listObjectClicked(const QModelIndex &)));*/
+    connect(objectList, SIGNAL(clicked(const QModelIndex &)),
+        this, SLOT(listObjectClicked(const QModelIndex &)));
     connect(editButton, SIGNAL(clicked()), this, SLOT(editButtonClicked()));
     connect(addButton, SIGNAL(clicked()), this, SLOT(addButtonClicked()));
     connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteButtonClicked()));
@@ -71,14 +71,22 @@ void EmuFrontDataDialog::connectSignals()
 
 void EmuFrontDataDialog::editButtonClicked()
 {
+    setButtonsEnabled(false);
     qDebug() << "Edit button clicked";
 }
 
 void EmuFrontDataDialog::deleteButtonClicked()
 {
-    qDebug() << "Delete button clicked";
+    setButtonsEnabled(false);
+    if (!objectList->currentIndex().isValid())
+        return;
+    int row = objectList->currentIndex().row();
+    if ( !model->removeRows(row, 1) ) {
+        errorMessage->showMessage(tr("Failed removing selected item."));
+    }
 }
 
+
 void EmuFrontDataDialog::addButtonClicked()
 {
     int row = objectList->currentIndex().isValid() ?
@@ -91,3 +99,14 @@ void EmuFrontDataDialog::addButtonClicked()
     objectList->setCurrentIndex(ind);
     objectList->edit(ind);
 }
+
+void EmuFrontDataDialog::listObjectClicked(const QModelIndex &index)
+{
+    setButtonsEnabled(index.isValid());
+}
+
+void EmuFrontDataDialog::setButtonsEnabled(bool b)
+{
+    editButton->setEnabled(b);
+    deleteButton->setEnabled(b);
+}
index ede863a..1809dd0 100644 (file)
@@ -36,6 +36,7 @@ private slots:
     void editButtonClicked();
     void addButtonClicked();
     void deleteButtonClicked();
+    void listObjectClicked(const QModelIndex &);
 
 protected:
     EmuFrontQueryModel *model;
@@ -52,6 +53,7 @@ private:
     virtual void setHiddenColumns() = 0;
     void hideColumns();
     virtual void connectSignals();
+    void setButtonsEnabled(bool);
 
 };