Remove button, fixed column width, limited text & fixed 00:00:00
[kitchenalert] / src / currentalertstablemodel.cpp
index b856739..ca4b463 100644 (file)
@@ -35,6 +35,8 @@
 CurrentAlertsTableModel::CurrentAlertsTableModel(QObject *parent) :
     QAbstractTableModel(parent)
 {
+
+    updateViewOnChanges_ = true;
 }
 
 
@@ -43,9 +45,9 @@ int CurrentAlertsTableModel::rowCount(const QModelIndex &parent) const
 
 //No need to mind about the parameter, it has no meaning for table models.
 
-    qDebug () << "rowCount asked";
+//    qDebug () << "rowCount asked";
 
-    qDebug () << currentTimers_.length();
+//    qDebug () << currentTimers_.length();
 
     return currentTimers_.length();
 }
@@ -136,14 +138,17 @@ QVariant CurrentAlertsTableModel::data(const QModelIndex &index, int role) const
 
 
 
-                    qDebug () << timeAsText;
+//                    qDebug () << timeAsText;
 
-                    return timeAsText;
+                   return timeAsText;
 
 
                 case statusColumnNumber_:
 
-                    return QVariant();  //TO BE REPLACED WITH SENDING STATUS !
+                    if (currentTimers_.at(index.row())->isAlerting() == true)
+                        return QString("ALERT!");
+
+                    else return QString();
 
 
             }
@@ -154,7 +159,7 @@ QVariant CurrentAlertsTableModel::data(const QModelIndex &index, int role) const
 
             //No need to care for the column number, all have the same color
 
-            if (currentTimers_.at(index.row())->getRemainingTimeInSeconds() > 0)
+            if (currentTimers_.at(index.row())->isAlerting() == false)
                 return QBrush (QColor(Qt::white));
             else return QBrush (QColor(Qt::red)); //change this to black if backgroundrole starts to work!
 
@@ -166,16 +171,16 @@ QVariant CurrentAlertsTableModel::data(const QModelIndex &index, int role) const
 
             //No need to care for the column number, all have the same color
 
-            qDebug() << "BackgroundRole asked";
+//            qDebug() << "BackgroundRole asked";
 
-            if (currentTimers_.at(index.row())->getRemainingTimeInSeconds() > 0)
+            if (currentTimers_.at(index.row())->isAlerting())
             {
-                qDebug() << "black background";
+//                qDebug() << "black background";
                 return QBrush (QColor(Qt::black));
             }
             else
             {
-                qDebug() << "red background";
+//                qDebug() << "red background";
                 return QBrush (QColor(Qt::red));
             }
         default:
@@ -195,52 +200,111 @@ void CurrentAlertsTableModel::addTimers(QList <Timer *> timers)
     foreach (Timer* timer, timers)
     {
         connect (timer,SIGNAL(remainingTimeChanged()),this,SLOT(refreshTimeColumn()));
-        qDebug() << "timer connected";
+//        qDebug() << "timer connected";
         timer->setParent(this); //The model becomes the timers parent giving the timer access to model
     }
+
+    int nextRow = rowCount(QModelIndex()); //As row numbering starts from zero, number of the rows is the row number of the row after current ones
+    int lastRow = nextRow + timers.length()-1;
+    beginInsertRows(QModelIndex(),nextRow,lastRow);
     currentTimers_.append(timers);
-    qDebug() << "Timers should be appended";
-    reset();
+    endInsertRows();
+//    qDebug() << "Timers should be appended";
+//    reset();
 }
 
 
 void CurrentAlertsTableModel::refreshTimeColumn()
 {
-    qDebug() << "Refresh time column";
-
+    if (updateViewOnChanges_ == true) //Only update GUI if active to save battery
+    {
+        emit dataChanged(createIndex(0,1),createIndex(rowCount(QModelIndex())-1,1));  //Entire time column refreshed
+//        qDebug() << "Refresh time column";
 
+    }
 
-    emit dataChanged(createIndex(0,1),createIndex(rowCount(QModelIndex())-1,1));  //Entire time column refreshed
 
 }
 
 
 void CurrentAlertsTableModel::startTimer(QModelIndex index)
 {
-    currentTimers_.at(index.row())->start();
-    refreshTimeColumn();
+    Timer * ptimer = currentTimers_.value(index.row());
+    if (ptimer != NULL)
+    {
+        ptimer->start();
+        refreshTimeColumn();
+    }
 }
 
 void CurrentAlertsTableModel::stopTimer(QModelIndex index)
 {
-  currentTimers_.at(index.row())->stop();
-   refreshTimeColumn();
+    Timer * ptimer = currentTimers_.value(index.row());
+    if (ptimer != NULL)
+    {
+        ptimer->stop();
+        refreshTimeColumn();
+    }
 }
 
 void CurrentAlertsTableModel::snoozeTimer(QModelIndex index)
 {
-
-    currentTimers_.at(index.row())->snooze();
-    refreshTimeColumn();
+    Timer * ptimer = currentTimers_.value(index.row());
+    if (ptimer != NULL)
+    {
+        ptimer->snooze();
+        refreshTimeColumn();
+    }
 }
 
 QModelIndex CurrentAlertsTableModel::giveIndexForTimer(Timer * ptimer)
 {
     int row = currentTimers_.indexOf(ptimer);
-    if (row < -1) // if not found
+    if (row <= -1) // if not found
         return QModelIndex(); //return invalid index
 
 
     return createIndex(row,0); //return index to the timer row's first column
 
 }
+
+
+QVariant CurrentAlertsTableModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+    //Reimplemented from QAbsractTableModel
+    //No headers wanted so we just return an empty QVariant
+    return QVariant();
+}
+
+
+void CurrentAlertsTableModel::setUpdateViewOnChanges(bool update)
+{
+    updateViewOnChanges_ = update;
+    if (update == true)
+        reset(); //Refresh view to catch up with past changes
+}
+
+bool CurrentAlertsTableModel::isThisTimerAlerting(QModelIndex index)
+{
+    if (index.isValid())
+    {
+        if (currentTimers_.at(index.row())->isAlerting())
+        {
+            return true;
+        }
+
+    }
+    return false;
+}
+
+void CurrentAlertsTableModel::removeTimer(QModelIndex index)
+{
+    if (index.isValid())
+    {
+        int row = index.row();
+        beginRemoveRows(QModelIndex(),row,row);
+        Timer* p_timer = currentTimers_.takeAt(row);
+        endRemoveRows();
+        delete p_timer;
+    }
+}