X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fkitchenalertmainwindow.cpp;h=49add3bd4f8f1c0084d55201f878e63635d84f73;hb=981f6e1b3c110aa5128f08a139c47a4c2a5854cd;hp=36b11425cf99a1a841b1d6e4b10284106e49586c;hpb=d703fb607c0291912211a5d43cdd04b60b6e87c6;p=kitchenalert diff --git a/src/kitchenalertmainwindow.cpp b/src/kitchenalertmainwindow.cpp index 36b1142..49add3b 100644 --- a/src/kitchenalertmainwindow.cpp +++ b/src/kitchenalertmainwindow.cpp @@ -31,12 +31,16 @@ #include #include -#include "choosetimersequencedialog.h" + #include "createtimersequencedialog.h" +#include "selectsounddialog.h" #include + +#include +#include #include @@ -47,28 +51,50 @@ KitchenAlertMainWindow::KitchenAlertMainWindow(QWidget *parent) : { ui->setupUi(this); - connect(ui->LoadTimerScheduleButton, SIGNAL (pressed()), this, SLOT (openTimerSequence())); - 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::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); - //Buttons used to reacting an alarm are hidden by default - ui->DoneButton->setDisabled(true); - ui->SnoozeButton->setDisabled(true); - ui->RestartButton->setDisabled(true); + ui->ComingAlertsTableView->horizontalHeader()->hide(); + ui->ComingAlertsTableView->setWordWrap(true); + + + //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 + QAction * p_SelectSoundAction = new QAction(tr("Select alert sound"),this); + connect(p_SelectSoundAction, SIGNAL(triggered()), this, SLOT(openSelectSoundDialog())); + menuBar()->addAction(p_SelectSoundAction); + + QAction * p_AboutAction = new QAction(tr("About"),this); + connect(p_AboutAction,SIGNAL(triggered()),this,SLOT(openAbout())); + menuBar()->addAction(p_AboutAction); } KitchenAlertMainWindow::~KitchenAlertMainWindow() @@ -90,14 +116,6 @@ void KitchenAlertMainWindow::changeEvent(QEvent *e) } -void KitchenAlertMainWindow::openTimerSequence() -{ - ChooseTimerSequenceDialog opendialog; - opendialog.exec(); - - - -} void KitchenAlertMainWindow::newTimerSequence() { @@ -107,50 +125,52 @@ 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); -// ui->nextAlertText->setText( timer1->getAlertText()); + + //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 - model_.addTimers(alltimers); // give timers to the model -// ui->ComingAlertsTableView->update(); + disableSelectionDependentButtons(); + // give timers to the model - } - // if cancelled, do nothing - + model_.addTimers(alltimers); -} + //start the timer when it's safely in the model (consider moving this to the model's addTimers function) -void KitchenAlertMainWindow::updateTime(int seconds) -{ + timer1->start(); -// ui->hoursLcdNumber->display(seconds/360); -// ui->minutesLcdNumber->display((seconds%360)/60); -// ui->secondsLcdNumber->display((seconds%60)); + } + // if cancelled, do nothing } + + + + void KitchenAlertMainWindow::alert(QModelIndex indexOfAlerter) { - // QMessageBox::information ( NULL, "KitchenAlert","Alert!!!"); // The program is brought to front and activated when alerted @@ -159,8 +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,29 +187,43 @@ void KitchenAlertMainWindow::alert(QModelIndex indexOfAlerter) ui->SnoozeButton->setEnabled(true); - //The alert sound is played - - - - - //TODO + //The alert sound is played (consider moving this operation inside timer, as now stopping one alert will silence all alerting alerts) alertSound_.play(); } -void KitchenAlertMainWindow::timerSelected(QItemSelection,QItemSelection) +void KitchenAlertMainWindow::timerSelected(QItemSelection selected,QItemSelection deselected) { ui->DoneButton->setEnabled(true); ui->RestartButton->setEnabled(true); + ui->RemoveButton->setEnabled(true); + + + //enabled only when alerting + QModelIndexList indexes = selected.indexes(); + + //the selection model only allows selecting one row at the time & we only need to know the row, so we can just take the first one + QModelIndex index = indexes.value(0); + if (index.isValid()) + { + if (model_.isThisTimerAlerting(index) == true) + { + ui->SnoozeButton->setEnabled(true); + } + else ui->SnoozeButton->setDisabled(true); + } } void KitchenAlertMainWindow::snooze() { - - model_.snoozeTimer(selectedRow()); + QModelIndex row = selectedRow(); + if (row.isValid()) //If there was no row selected invalid row was returned + { + model_.snoozeTimer(row); + } ui->SnoozeButton->setDisabled(true); alertSound_.stop(); @@ -198,8 +231,12 @@ void KitchenAlertMainWindow::snooze() void KitchenAlertMainWindow::restart() { + QModelIndex row = selectedRow(); //If there was no row selected invalid row was returned + if (row.isValid()) + { - model_.startTimer(selectedRow()); + model_.startTimer(row); + } ui->SnoozeButton->setDisabled(true); alertSound_.stop(); @@ -207,9 +244,14 @@ void KitchenAlertMainWindow::restart() void KitchenAlertMainWindow::stop() { - model_.stopTimer(selectedRow()); + QModelIndex row = selectedRow(); + if (row.isValid()) //If there was no row selected invalid row was returned + { + model_.stopTimer(row); + } ui->SnoozeButton->setDisabled(true); alertSound_.stop(); + qDebug() << "Stopped."; } QModelIndex KitchenAlertMainWindow::selectedRow() @@ -217,7 +259,70 @@ QModelIndex KitchenAlertMainWindow::selectedRow() QModelIndexList chosenRows = ui->ComingAlertsTableView->selectionModel()->selectedRows(); //The selection mode used allows only one row to be selected at time, so we just take the first - //There are indexes for all coloumns in the row in the list, but as we only use the row, it does not matter which one we take + //There are indexes for all columns in the row in the list, but as we only use the row, it does not matter which one we take + + return chosenRows.value(0); //gives an invalid QModelIndex if the list is empty +} + +void KitchenAlertMainWindow::openSelectSoundDialog() +{ + SelectSoundDialog dialog; + if ( dialog.exec() == QDialog::Accepted) //if user pressed OK + { + if (dialog.isDefaultSoundChecked() == true) + alertSound_.setDefaultSound(); + else + alertSound_.setSound(dialog.getSoundFileName()); + + //opening a dialog clears the selection so the selection dependen buttons must be disabled + } + disableSelectionDependentButtons(); +} - return chosenRows.takeFirst(); +void KitchenAlertMainWindow::openAbout() +{ + 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/")); +} + +bool KitchenAlertMainWindow::event(QEvent *event) +{ + QMainWindow::event(event); + + switch (event->type()) + { + case QEvent::WindowActivate: + + model_.setUpdateViewOnChanges(true); + break; + + case QEvent::WindowDeactivate: + model_.setUpdateViewOnChanges(false); + break; + + default: + break; + } +} + +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(); + } }