X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fkitchenalertmainwindow.cpp;h=4fc1c18331720cf39e4a2bf94ca6e5689ae5ac53;hb=bf54bc695f809c9ee99a3be1eedee2a503936f3a;hp=ff4c78a50b3138514ba3c177a63eb4c100cbb9d3;hpb=a28224400b03dc7e6efadc7277470a58a10ace3c;p=kitchenalert diff --git a/src/kitchenalertmainwindow.cpp b/src/kitchenalertmainwindow.cpp index ff4c78a..4fc1c18 100644 --- a/src/kitchenalertmainwindow.cpp +++ b/src/kitchenalertmainwindow.cpp @@ -2,7 +2,7 @@ KitchenAlert - Copyright (C) 2010 Heli Hyvättinen + Copyright (C) 2010-2011 Heli Hyvättinen This file is part of KitchenAlert. @@ -42,8 +42,7 @@ #include #include #include -#include -#include +#include @@ -53,6 +52,13 @@ KitchenAlertMainWindow::KitchenAlertMainWindow(QWidget *parent) : { ui->setupUi(this); + setWindowIcon(QIcon(":/kitchenalert.png")); + + + + + connect(ui->CreateNewScheduleButton, SIGNAL (pressed()), this, SLOT (newTimerSequence())); + //alerts' tableview setup @@ -60,36 +66,29 @@ KitchenAlertMainWindow::KitchenAlertMainWindow(QWidget *parent) : ui->ComingAlertsTableView->setModel(&model_); ui->ComingAlertsTableView->setSelectionMode(QAbstractItemView::SingleSelection); ui->ComingAlertsTableView->setSelectionBehavior(QAbstractItemView::SelectRows); + + ui->ComingAlertsTableView->horizontalHeader()->hide(); +// ui->ComingAlertsTableView->verticalHeader()->setVisible(true); + ui->ComingAlertsTableView->horizontalHeader()->setResizeMode(QHeaderView::Fixed); - ui->ComingAlertsTableView->horizontalHeader()->resizeSection(0,460); + ui->ComingAlertsTableView->horizontalHeader()->resizeSection(0,535); ui->ComingAlertsTableView->horizontalHeader()->resizeSection(1,140); ui->ComingAlertsTableView->horizontalHeader()->resizeSection(2,100); ui->ComingAlertsTableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); -// ui->ComingAlertsTableView->verticalHeader()->setDefaultSectionSize(40); //Needed with fixed cell heght only - - - - - ui->ComingAlertsTableView->horizontalHeader()->hide(); - ui->ComingAlertsTableView->setWordWrap(true); - //Buttons used when a timer is selected are disabled by default and enabled upon selection + //Buttons used to reacting an alarm are hidden by default 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())); - connect(ui->SaveButton,SIGNAL(clicked()),this,SLOT(saveTimer())); - connect(ui->loadButton,SIGNAL(clicked()),this,SLOT(loadTimer())); - // menu setup QAction * p_SelectSoundAction = new QAction(tr("Select alert sound"),this); @@ -129,37 +128,33 @@ void KitchenAlertMainWindow::newTimerSequence() if (createdialog.exec() == QDialog::Accepted) //if user pressed OK { - //get user input from the dialog - - - QList alltimers = createdialog.getTimers(); - - // take first timer (currently the only one!) + QList alltimers = createdialog.getTimers(); //get user input from the dialog - Timer* timer1 = alltimers.at(0); + Timer* timer1 = alltimers.at(0); // take first timer (currently the only one!) - //connect alert - 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(); + connect(this,SIGNAL(defaultSoundEnabled()),timer1,SLOT(enableDefaultSound())); + connect(this,SIGNAL(soundChanged(QString)),timer1,SLOT(changeAlertSound(QString))); + - // give timers to the model + model_.addTimers(alltimers); // give timers to the model, they are started automatically by default - model_.addTimers(alltimers); + // ui->ComingAlertsTableView->resizeColumnsToContents(); - //start the timer when it's safely in the model (consider moving this to the model's addTimers function) + //Disable buttons, as selection is cleared when view is refreshed to show the new timer + //But only if the timer has not already alerted and thus been selected + if (!selectedRow().isValid()) + disableSelectionDependentButtons(); - timer1->start(); } @@ -178,35 +173,39 @@ void KitchenAlertMainWindow::alert(QModelIndex indexOfAlerter) // The program is brought to front and activated when alerted - raise(); + activateWindow(); +// removing everything below does not solve the bug #6752! + + raise(); //this may be unnecessary + // The alerting timer is selected ui->ComingAlertsTableView->selectionModel()->select(QItemSelection(indexOfAlerter,indexOfAlerter),QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows ); -// qDebug() << "Should be selected now"; + //Scrolls the view so that the alerting timer is visible + ui->ComingAlertsTableView->scrollTo(indexOfAlerter); - //Snooze button is enabled + // qDebug() << "Should be selected now"; - ui->SnoozeButton->setEnabled(true); + //Snooze button is enabled - //The alert sound is played (consider moving this operation inside timer, as now stopping one alert will silence all alerting alerts) - alertSound_.play(); + ui->SnoozeButton->setEnabled(true); +//qDebug ("Snooze on when alerting"); } -void KitchenAlertMainWindow::timerSelected(QItemSelection selected,QItemSelection deselected) +void KitchenAlertMainWindow::timerSelected(QItemSelection selected,QItemSelection) { ui->DoneButton->setEnabled(true); ui->RestartButton->setEnabled(true); ui->RemoveButton->setEnabled(true); - ui->SaveButton->setEnabled(true); - //enabled only when alerting + //snooze button 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 @@ -216,8 +215,13 @@ void KitchenAlertMainWindow::timerSelected(QItemSelection selected,QItemSelectio if (model_.isThisTimerAlerting(index) == true) { ui->SnoozeButton->setEnabled(true); +//qDebug() << "Snooze on"; + } + else + { + ui->SnoozeButton->setDisabled(true); +//qDebug() << "Snooze off"; } - else ui->SnoozeButton->setDisabled(true); } } @@ -230,7 +234,7 @@ void KitchenAlertMainWindow::snooze() model_.snoozeTimer(row); } ui->SnoozeButton->setDisabled(true); - alertSound_.stop(); + } @@ -242,8 +246,14 @@ void KitchenAlertMainWindow::restart() model_.startTimer(row); } - ui->SnoozeButton->setDisabled(true); - alertSound_.stop(); + + + if (model_.isThisTimerAlerting(row) == false) //This has to be checked, because 00:00:00 alerts alert *before* the program execution reaches here + { + ui->SnoozeButton->setDisabled(true); + } + // qDebug () << "disabled snooze because of restart"; + } @@ -255,61 +265,79 @@ void KitchenAlertMainWindow::stop() model_.stopTimer(row); } ui->SnoozeButton->setDisabled(true); - alertSound_.stop(); - qDebug() << "Stopped."; + } QModelIndex KitchenAlertMainWindow::selectedRow() { + //Returns the cells in row 0 that have the whole row selected (the selection mode used allows only selecting whole rows + 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 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 { + QSettings settings ("KitchenAlert","KitchenAlert"); + if (dialog.isDefaultSoundChecked() == true) - alertSound_.setDefaultSound(); - else - alertSound_.setSound(dialog.getSoundFileName()); + { + + settings.setValue("UseDefaultSound",true); + emit defaultSoundEnabled(); + } + else + { + QString filename = dialog.getSoundFileName(); + settings.setValue("UseDefaultSound",false); + settings.setValue("soundfile",filename); + emit soundChanged(filename); + } - //opening a dialog clears the selection so the selection dependen buttons must be disabled } - disableSelectionDependentButtons(); + } void KitchenAlertMainWindow::openAbout() { - QMessageBox::about(this,tr("About KitchenAlert"),tr("

Version 0.1.1" - "

Copyright © Heli Hyvättinen 2010" + QMessageBox::about(this,tr("About KitchenAlert"),tr("

Version %1" + "

Copyright © Heli Hyvättinen 2010-2011" "

License: General Public License v3" - "

Bugtracker and project page: https://garage.maemo.org/projects/kitchenalert/")); + "

Web page: http://kitchenalert.garage.maemo.org/" + "

Bugtracker: https://garage.maemo.org/projects/kitchenalert/").arg(QApplication::applicationVersion())); } bool KitchenAlertMainWindow::event(QEvent *event) { - QMainWindow::event(event); + switch (event->type()) { case QEvent::WindowActivate: model_.setUpdateViewOnChanges(true); - break; +// ui->debugLabel->setText("Returned to the application!"); + break; case QEvent::WindowDeactivate: model_.setUpdateViewOnChanges(false); +// ui->debugLabel->setText(""); break; default: break; + } + + return QMainWindow::event(event); // Send the event to the base class implementation (also when handling the event in this function): necessary for the program to work! } void KitchenAlertMainWindow::disableSelectionDependentButtons() @@ -318,132 +346,46 @@ void KitchenAlertMainWindow::disableSelectionDependentButtons() ui->SnoozeButton->setDisabled(true); ui->RestartButton->setDisabled(true); ui->RemoveButton->setDisabled(true); - ui->SaveButton->setDisabled(true); -} -void KitchenAlertMainWindow::remove() -{ - QModelIndex row = selectedRow(); - if (row.isValid()) - { - model_.removeTimer(row); - alertSound_.stop(); - ui->ComingAlertsTableView->clearSelection(); - disableSelectionDependentButtons(); - } } -void KitchenAlertMainWindow::saveTimer() +void KitchenAlertMainWindow::initializeAlertSound() { + QSettings settings; - QModelIndex row = selectedRow(); - - if (row.isValid() == false) //If there was no row selected invalid row was returned - return; - - - //file name is asked. As the filename will be appended, there's no point in confirming owerwrite here - QString filename = QFileDialog::getSaveFileName(this, "", "", "*.kitchenalert",NULL,QFileDialog::DontConfirmOverwrite); + bool useDefaultSound = settings.value("UseDefaultSound",true).toBool(); + QString filename = settings.value("soundfile","").toString(); - disableSelectionDependentButtons(); - - qDebug() << filename; - - if (filename.isEmpty()) //user cancelled the dialog (or gave an empty name) + if (useDefaultSound == true) { - return; + openSelectSoundDialog(); } - - if (!filename.endsWith(".kitchenalert")) - { - filename.append(".kitchenalert"); - - } - - qDebug() << "filename appended to " << filename; - - - //MANUAL CONFIRMATION OF OWERWRITE - - if ( QFile::exists(filename)) + else if (filename.isEmpty()) { - //ASK FOR CONFIRMATION - - QString overwriteQuestion ("File "); - overwriteQuestion.append(filename); - overwriteQuestion.append(" already exists. Do you want to overwrite it?"); - if (QMessageBox::question(this,"Confirm overwrite?", overwriteQuestion,QMessageBox::Yes | QMessageBox::No,QMessageBox::No) != QMessageBox::Yes) - { - return; - } + openSelectSoundDialog(); } + QString currentFilename = settings.value("soundfile","").toString(); + if (currentFilename.isEmpty()) + { + ui->debugLabel->setText("No alert sound file set. Alert sound will not be played!"); - - - QString errorMessage(tr("Cannot write to file ")); - errorMessage.append(filename); - - if (!model_.saveTimer(row,filename)) //Save the file, if not successful give an error message - { - QMessageBox::critical(this,tr("Save timer failed!"), errorMessage); - } - + } } -void KitchenAlertMainWindow::loadTimer() +void KitchenAlertMainWindow::remove() { - QString filename = QFileDialog::getOpenFileName(this,"","",tr("KitchenAlert timer files (*.kitchenalert)")); - if (!filename.isEmpty()) + QModelIndex row = selectedRow(); + if (row.isValid()) //If there was no row selected invalid row was returned { - -// if (!filename.endsWith(".kitchenalert")) //not needed, the dialog won't let the user to select files not ending with ".kitchenalert" -// { -// filename.append(".kitchenalert"); -// } - - QString errorTitle(tr("Failed to load file ")); - errorTitle.append(filename); - - Timer * p_timer = new Timer(); - if (!p_timer->load(filename)) + QString text = tr("Are you sure you want to remove this timer from the list:\n"); + text.append((row.data().toString())); + if (QMessageBox::question(this,tr("Confirm timer removal"),text,QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { - QMessageBox::critical(this,errorTitle,tr("Unable to open file or not a valid KitchenAlert timer file.")); - delete p_timer; - return; + model_.removeTimer(row); } - - initializeTimer(p_timer); } -} - - -void KitchenAlertMainWindow::initializeTimer(Timer *p_timer) -{ - -//connect alert - - -connect(p_timer,SIGNAL(alert(QModelIndex)),this,SLOT(alert(QModelIndex))); - - -//Disable buttons, as selection is cleared when view is refreshed to show the new timer - -disableSelectionDependentButtons(); - - -// give timers to the model (model wants list of timers now..) - -QList timerList; - -timerList.append(p_timer); -model_.addTimers(timerList); - - -//start the timer when it's safely in the model (consider moving this to the model's addTimers function) - - -p_timer->start(); + ui->SnoozeButton->setDisabled(true); }