From 981f6e1b3c110aa5128f08a139c47a4c2a5854cd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Heli=20Hyv=C3=A4ttinen?= Date: Sat, 14 Aug 2010 06:33:37 +0300 Subject: [PATCH] Remove button, fixed column width, limited text & fixed 00:00:00 --- src/KitchenAlert.pro.user | 2 +- src/createtimersequencedialog.cpp | 1 + src/createtimersequencedialog.h | 4 +-- src/currentalertstablemodel.cpp | 39 +++++++++++++++------ src/currentalertstablemodel.h | 6 ++-- src/icon26.png | Bin 0 -> 1428 bytes src/icon64.png | Bin 0 -> 7511 bytes src/kitchenalert.qrc | 4 +-- src/kitchenalert.xcf | Bin 0 -> 88610 bytes src/kitchenalertmainwindow.cpp | 69 +++++++++++++++++++++++++++---------- src/kitchenalertmainwindow.h | 5 +-- src/kitchenalertmainwindow.ui | 15 +++++--- src/timer.cpp | 12 +++++-- src/timer.h | 4 +-- 14 files changed, 114 insertions(+), 47 deletions(-) create mode 100644 src/icon26.png create mode 100644 src/icon64.png create mode 100644 src/kitchenalert.xcf diff --git a/src/KitchenAlert.pro.user b/src/KitchenAlert.pro.user index 028ee78..337e0f2 100644 --- a/src/KitchenAlert.pro.user +++ b/src/KitchenAlert.pro.user @@ -200,7 +200,7 @@ 17 - 2010-07-19T23:08:40 + 2010-08-12T23:08:10 1 diff --git a/src/createtimersequencedialog.cpp b/src/createtimersequencedialog.cpp index d7b696c..a2ae8ce 100644 --- a/src/createtimersequencedialog.cpp +++ b/src/createtimersequencedialog.cpp @@ -32,6 +32,7 @@ CreateTimerSequenceDialog::CreateTimerSequenceDialog(QWidget *parent) : ui(new Ui::CreateTimerSequenceDialog) { ui->setupUi(this); + ui->timer1AlertText->setMaxLength(40); } CreateTimerSequenceDialog::~CreateTimerSequenceDialog() diff --git a/src/createtimersequencedialog.h b/src/createtimersequencedialog.h index 4765387..d53ac38 100644 --- a/src/createtimersequencedialog.h +++ b/src/createtimersequencedialog.h @@ -39,8 +39,8 @@ namespace Ui { /*! Class for the dialog for creating timers' @author Heli Hyvättinen - @date 2010-07-20 - @version 0.1 + @date 2010-08-12 + @version 0.1.1 Class for the dialog for creating timers diff --git a/src/currentalertstablemodel.cpp b/src/currentalertstablemodel.cpp index c4dadcc..ca4b463 100644 --- a/src/currentalertstablemodel.cpp +++ b/src/currentalertstablemodel.cpp @@ -45,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(); } @@ -138,9 +138,9 @@ QVariant CurrentAlertsTableModel::data(const QModelIndex &index, int role) const - qDebug () << timeAsText; +// qDebug () << timeAsText; - return timeAsText; + return timeAsText; case statusColumnNumber_: @@ -171,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())->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: @@ -200,12 +200,17 @@ void CurrentAlertsTableModel::addTimers(QList 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(); } @@ -214,7 +219,7 @@ void CurrentAlertsTableModel::refreshTimeColumn() 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"; +// qDebug() << "Refresh time column"; } @@ -291,3 +296,15 @@ bool CurrentAlertsTableModel::isThisTimerAlerting(QModelIndex index) } 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; + } +} diff --git a/src/currentalertstablemodel.h b/src/currentalertstablemodel.h index 062bc11..d147c38 100644 --- a/src/currentalertstablemodel.h +++ b/src/currentalertstablemodel.h @@ -35,8 +35,8 @@ /*! Class that contains the model that holds the timers' @author Heli Hyvättinen - @date 2010-07-20 - @version 0.1 + @date 2010-08-08 + @version 0.1.1 Class that contains the model that holds the timers @@ -76,6 +76,8 @@ public slots: void setUpdateViewOnChanges(bool update); + void removeTimer(QModelIndex index); + private: QList currentTimers_; diff --git a/src/icon26.png b/src/icon26.png new file mode 100644 index 0000000000000000000000000000000000000000..17413e58deb7e6d917cceccd1cc971259a1df6f7 GIT binary patch literal 1428 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 hwgW^>)CluS{(s|- - - Tonitrus.wav - + diff --git a/src/kitchenalert.xcf b/src/kitchenalert.xcf new file mode 100644 index 0000000000000000000000000000000000000000..ac8c067351cdae2b9b758daf8d7a66b62859107d GIT binary patch literal 88610 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 - - - connect(ui->CreateNewScheduleButton, SIGNAL (pressed()), this, SLOT (newTimerSequence())); - - //alerts' tableview setup ui->ComingAlertsTableView->setModel(&model_); ui->ComingAlertsTableView->setSelectionMode(QAbstractItemView::SingleSelection); ui->ComingAlertsTableView->setSelectionBehavior(QAbstractItemView::SelectRows); - ui->ComingAlertsTableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); + ui->ComingAlertsTableView->horizontalHeader()->setResizeMode(QHeaderView::Fixed); + ui->ComingAlertsTableView->horizontalHeader()->resizeSection(0,460); + ui->ComingAlertsTableView->horizontalHeader()->resizeSection(1,140); + ui->ComingAlertsTableView->horizontalHeader()->resizeSection(2,100); + + ui->ComingAlertsTableView->verticalHeader()->setResizeMode(QHeaderView::Fixed); + ui->ComingAlertsTableView->verticalHeader()->setDefaultSectionSize(40); + + + + ui->ComingAlertsTableView->horizontalHeader()->hide(); + ui->ComingAlertsTableView->setWordWrap(true); - //Buttons used to reacting an alarm are hidden by default + //Buttons used when a timer is selected are disabled by default and enabled upon selection disableSelectionDependentButtons(); - connect(ui->ComingAlertsTableView->selectionModel(),SIGNAL(selectionChanged(QItemSelection,QItemSelection)),this,SLOT(timerSelected(QItemSelection,QItemSelection))); + //connect buttons to respective functions + connect(ui->CreateNewScheduleButton, SIGNAL (pressed()), this, SLOT (newTimerSequence())); connect(ui->DoneButton,SIGNAL(clicked()),this,SLOT(stop())); connect(ui->RestartButton,SIGNAL(clicked()),this,SLOT(restart())); connect(ui->SnoozeButton,SIGNAL(clicked()),this, SLOT(snooze())); + connect(ui->RemoveButton,SIGNAL(clicked()),this,SLOT(remove())); // menu setup @@ -117,27 +125,38 @@ void KitchenAlertMainWindow::newTimerSequence() if (createdialog.exec() == QDialog::Accepted) //if user pressed OK { + //get user input from the dialog - QList alltimers = createdialog.getTimers(); //get user input from the dialog - Timer* timer1 = alltimers.at(0); // take first timer (currently the only one!) + QList alltimers = createdialog.getTimers(); + + // take first timer (currently the only one!) + + + Timer* timer1 = alltimers.at(0); + + + //connect alert - timer1->start(); connect(timer1,SIGNAL(alert(QModelIndex)),this,SLOT(alert(QModelIndex))); + //Disable buttons, as selection is cleared when view is refreshed to show the new timer + + disableSelectionDependentButtons(); - model_.addTimers(alltimers); // give timers to the model - // ui->ComingAlertsTableView->resizeColumnsToContents(); + // give timers to the model + model_.addTimers(alltimers); - //Disable buttons, as selection is cleared when view is refreshed to show the new timer - disableSelectionDependentButtons(); + //start the timer when it's safely in the model (consider moving this to the model's addTimers function) + timer1->start(); + } // if cancelled, do nothing @@ -160,7 +179,7 @@ void KitchenAlertMainWindow::alert(QModelIndex indexOfAlerter) // The alerting timer is selected ui->ComingAlertsTableView->selectionModel()->select(QItemSelection(indexOfAlerter,indexOfAlerter),QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows ); - qDebug() << "Should be selected now"; +// qDebug() << "Should be selected now"; //Snooze button is enabled @@ -168,7 +187,7 @@ void KitchenAlertMainWindow::alert(QModelIndex indexOfAlerter) ui->SnoozeButton->setEnabled(true); - //The alert sound is played + //The alert sound is played (consider moving this operation inside timer, as now stopping one alert will silence all alerting alerts) alertSound_.play(); @@ -179,6 +198,7 @@ void KitchenAlertMainWindow::timerSelected(QItemSelection selected,QItemSelectio { ui->DoneButton->setEnabled(true); ui->RestartButton->setEnabled(true); + ui->RemoveButton->setEnabled(true); //enabled only when alerting @@ -231,6 +251,7 @@ void KitchenAlertMainWindow::stop() } ui->SnoozeButton->setDisabled(true); alertSound_.stop(); + qDebug() << "Stopped."; } QModelIndex KitchenAlertMainWindow::selectedRow() @@ -260,7 +281,7 @@ void KitchenAlertMainWindow::openSelectSoundDialog() void KitchenAlertMainWindow::openAbout() { - QMessageBox::about(this,tr("About KitchenAlert"),tr("

Version 0.1" + QMessageBox::about(this,tr("About KitchenAlert"),tr("

Version 0.1.1" "

Copyright © Heli Hyvättinen 2010" "

License: General Public License v3" "

Bugtracker and project page: https://garage.maemo.org/projects/kitchenalert/")); @@ -291,5 +312,17 @@ void KitchenAlertMainWindow::disableSelectionDependentButtons() ui->DoneButton->setDisabled(true); ui->SnoozeButton->setDisabled(true); ui->RestartButton->setDisabled(true); + ui->RemoveButton->setDisabled(true); +} +void KitchenAlertMainWindow::remove() +{ + QModelIndex row = selectedRow(); + if (row.isValid()) + { + model_.removeTimer(row); + alertSound_.stop(); + ui->ComingAlertsTableView->clearSelection(); + disableSelectionDependentButtons(); + } } diff --git a/src/kitchenalertmainwindow.h b/src/kitchenalertmainwindow.h index cf151f0..9ae6a8d 100644 --- a/src/kitchenalertmainwindow.h +++ b/src/kitchenalertmainwindow.h @@ -40,8 +40,8 @@ namespace Ui { /*! The main window class of KitchenAlert' @author Heli Hyvättinen - @date 2010-07-20 - @version 0.1 + @date 2010-08-08 + @version 0.1.1 Operates the UI. @@ -70,6 +70,7 @@ public slots: void snooze(); void restart(); void stop(); + void remove(); protected: diff --git a/src/kitchenalertmainwindow.ui b/src/kitchenalertmainwindow.ui index 4cb1893..5aa6b80 100644 --- a/src/kitchenalertmainwindow.ui +++ b/src/kitchenalertmainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 718 - 385 + 736 + 403 @@ -40,8 +40,8 @@ 350 0 - 711 - 381 + 721 + 391 @@ -96,6 +96,13 @@ + + + Remove + + + + Qt::Horizontal diff --git a/src/timer.cpp b/src/timer.cpp index 3593008..e1dba54 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -40,6 +40,7 @@ Timer::Timer(QObject *parent) : } + int Timer::getOriginalTimeInSeconds() { return _originalTime; @@ -74,7 +75,7 @@ void Timer::secondPassed() { alerting_ = true; emit alert(whereAmI()); - qDebug() << "alerting"; + qDebug() << "alerted"; } emit remainingTimeChanged(); //after alerting in case of alert so that status gets updated immediately @@ -87,13 +88,20 @@ void Timer::start() alerting_ = false; + if (_originalTime == 0) //has to be checked here, since 00:00:00 alert will already be negative when checked next time + //THIS ALERTS EVERY SECOND TIME THE TIMER IS STARTED! //This bug disappeared without explanation... + { + alerting_ = true; + emit alert(whereAmI()); + qDebug () << "Alerted for 00:00:00 alert"; + } } void Timer::stop() { _actualTimer.stop(); - _remainingTime = 0; //Stopped timer shows 00:00:00 (which unfortunately makes it red...) + _remainingTime = 0; //Stopped timer shows 00:00:00 alerting_ = false; } diff --git a/src/timer.h b/src/timer.h index abe6666..543e956 100644 --- a/src/timer.h +++ b/src/timer.h @@ -39,8 +39,8 @@ /*! The timer class of KitchenAlert' @author Heli Hyvättinen - @date 2010-07-20 - @version 0.1 + @date 2010-08-12 + @version 0.1.1 The timer class of KitchenAlert. -- 1.7.9.5