#include <QtWidgets>
#include <qorganizer.h>
#include "todoeditor.h"
TodoEditor::TodoEditor()
{
setupGui();
}
void TodoEditor::editTodo(const QOrganizerTodo &newTodo)
{
todo = newTodo;
subjectLineEdit->setText(todo.displayLabel());
startDateEdit->setDateTime(todo.startDateTime());
dueDateEdit->setDateTime(todo.dueDateTime());
priorityCombo->setCurrentIndex(
priorityCombo->findData(QVariant(todo.priority())));
statusCombo->setCurrentIndex(
statusCombo->findData(QVariant(todo.status())));
descriptionTextEdit->setText(todo.description());
if (!todo.details(QOrganizerItemDetail::TypeVisualReminder).isEmpty()){
QOrganizerItemVisualReminder reminder =
todo.detail(QOrganizerItemDetail::TypeVisualReminder);
int seconds = reminder.secondsBeforeStart();
alarmCombo->setCurrentIndex(seconds/(15*60));
} else
alarmCombo->setCurrentIndex(0);
}
void TodoEditor::updateSubject()
{
todo.setDisplayLabel(subjectLineEdit->text());
}
void TodoEditor::updateDescription()
{
todo.setDescription(descriptionTextEdit->toPlainText());
}
void TodoEditor::updateDates()
{
QDateTime startTime = startDateEdit->dateTime();
QDateTime dueDateTime = dueDateEdit->dateTime();
todo.setStartDateTime(startTime);
todo.setDueDateTime(dueDateTime);
updateAlarm(alarmCombo->currentIndex());
}
void TodoEditor::updateStatus(int index)
{
QOrganizerTodoProgress::Status status =
(QOrganizerTodoProgress::Status) statusCombo->itemData(index).toInt();
todo.setStatus(status);
}
void TodoEditor::updatePriority(int index)
{
QOrganizerItemPriority::Priority priority =
(QOrganizerItemPriority::Priority)
priorityCombo->itemData(index).toInt();
todo.setPriority(priority);
}
void TodoEditor::updateAlarm(int index)
{
int seconds = index * (15*60);
QDateTime dueDate = todo.dueDateTime();
QOrganizerItemVisualReminder oldReminder =
todo.detail(QOrganizerItemDetail::TypeVisualReminder);
todo.removeDetail(&oldReminder);
if (seconds == 0)
return;
QOrganizerItemVisualReminder reminder;
reminder.setSecondsBeforeStart(seconds);
todo.saveDetail(&reminder);
}
void TodoEditor::finishEditing()
{
emit editingFinished(todo);
}
void TodoEditor::setupGui()
{
startDateEdit = new QDateTimeEdit;
dueDateEdit = new QDateTimeEdit;
subjectLineEdit = new QLineEdit;
descriptionTextEdit = new QTextEdit;
doneButton = new QPushButton(tr("Done"));
setupCombos();
connect(startDateEdit, SIGNAL(editingFinished()),
this, SLOT(updateDates()));
connect(dueDateEdit, SIGNAL(editingFinished()), this, SLOT(updateDates()));
connect(subjectLineEdit, SIGNAL(editingFinished()),
this, SLOT(updateSubject()));
connect(descriptionTextEdit, SIGNAL(textChanged()),
this, SLOT(updateDescription()));
connect(statusCombo, SIGNAL(activated(int)), this, SLOT(updateStatus(int)));
connect(priorityCombo, SIGNAL(activated(int)),
this, SLOT(updatePriority(int)));
connect(alarmCombo, SIGNAL(activated(int)), this, SLOT(updateAlarm(int)));
connect(doneButton, SIGNAL(clicked()), this, SLOT(finishEditing()));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(new QLabel(tr("Subject:")));
layout->addWidget(subjectLineEdit);
layout->addWidget(new QLabel(tr("Start Date:")));
layout->addWidget(startDateEdit);
layout->addWidget(new QLabel(tr("Due Date:")));
layout->addWidget(dueDateEdit);
layout->addWidget(new QLabel(tr("Status:")));
layout->addWidget(statusCombo);
layout->addWidget(new QLabel(tr("Priority:")));
layout->addWidget(priorityCombo);
layout->addWidget(new QLabel(tr("Alarm:")));
layout->addWidget(alarmCombo);
layout->addWidget(new QLabel(tr("Description")));
layout->addWidget(descriptionTextEdit);
layout->addWidget(doneButton);
setLayout(layout);
}
void TodoEditor::setupCombos()
{
priorityCombo = new QComboBox;
priorityCombo->addItem("Unknown", QOrganizerItemPriority::UnknownPriority);
priorityCombo->addItem("Highest", QOrganizerItemPriority::HighestPriority);
priorityCombo->addItem("Extremely high",
QOrganizerItemPriority::ExtremelyHighPriority);
priorityCombo->addItem("Very high",
QOrganizerItemPriority::VeryHighPriority);
priorityCombo->addItem("High", QOrganizerItemPriority::HighPriority);
priorityCombo->addItem("Medium", QOrganizerItemPriority::MediumPriority);
priorityCombo->addItem("Low", QOrganizerItemPriority::LowPriority);
priorityCombo->addItem("Very low", QOrganizerItemPriority::VeryLowPriority);
priorityCombo->addItem("Extremely low",
QOrganizerItemPriority::ExtremelyLowPriority);
priorityCombo->addItem("Lowest", QOrganizerItemPriority::LowestPriority);
statusCombo = new QComboBox;
statusCombo->addItem("Not started",
QOrganizerTodoProgress::StatusNotStarted);
statusCombo->addItem("In progress", QOrganizerTodoProgress::StatusInProgress);
statusCombo->addItem("Complete",
QOrganizerTodoProgress::StatusComplete);
alarmCombo = new QComboBox;
QStringList alarmList;
alarmList << "None" << "15 minutes" << "30 minutes" << "45 minutes"
<< "1 hour";
alarmCombo->addItems(alarmList);
}