diff options
author | Jerome Pasion <jerome.pasion@digia.com> | 2012-09-21 18:08:54 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-25 14:08:19 +0200 |
commit | 165eadd858660f316ee16d4f31847a584f129b1d (patch) | |
tree | 8d087b393e442727b5f7113de616512080d4e598 /examples/organizer/todo/window.cpp | |
parent | d2361e079a48735223aa9f8783c1464204183554 (diff) |
Qt Versit: Modularized documentation
-added depends in qdocconf to Qt Contacts and Qt Organizer
-moved snippets
-moved documentation (including vCard information)
-removed examples in examples.pro
Change-Id: I9411dadef23f2631b02dc015a49c8eb0f73890fa
Reviewed-by: Geir Vattekar <geir.vattekar@digia.com>
Diffstat (limited to 'examples/organizer/todo/window.cpp')
-rw-r--r-- | examples/organizer/todo/window.cpp | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/examples/organizer/todo/window.cpp b/examples/organizer/todo/window.cpp new file mode 100644 index 000000000..0eab1be1c --- /dev/null +++ b/examples/organizer/todo/window.cpp @@ -0,0 +1,204 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> + +#include <qorganizer.h> + +#include "window.h" +#include "todoeditor.h" + +//! [0] +Window::Window() +{ + setupGui(); + + manager = new QOrganizerManager("memory"); + + setWindowTitle(tr("ToDo Example")); + refreshList(); +} +//! [0] + +Window::~Window() +{ + delete manager; +} + +//! [1] +void Window::editNewTodo() +{ + QOrganizerTodo newTodo; + newTodo.setPriority(QOrganizerItemPriority::HighPriority); + newTodo.setStatus(QOrganizerTodoProgress::StatusNotStarted); + QDateTime currentDateTime(calendarWidget->selectedDate(), + QTime::currentTime()); + newTodo.setStartDateTime(currentDateTime); + newTodo.setDueDateTime(currentDateTime.addSecs(60*60)); + + todoEditor->editTodo(newTodo); + + stackedWidget->setCurrentWidget(todoEditor); +} +//! [1] + +//! [2] +Q_DECLARE_METATYPE(QOrganizerTodo) + +void Window::editTodo(QListWidgetItem *item) +{ + QVariant variant = item->data(Qt::UserRole); + if (!variant.canConvert<QOrganizerTodo>()) + return; + + QOrganizerTodo todo = variant.value<QOrganizerTodo>(); + todoEditor->editTodo(todo); + stackedWidget->setCurrentWidget(todoEditor); +} +//! [2] + +//! [3] +void Window::saveTodo(QOrganizerTodo &todo) +{ + manager->saveItem(&todo); + + stackedWidget->setCurrentIndex(0); + refreshList(); +} +//! [3] + +//! [4] +void Window::deleteTodo() +{ + QList<QListWidgetItem *> items = listWidget->selectedItems(); + if (!items.isEmpty()) { + QVariant variant = items.at(0)->data(Qt::UserRole); + if (variant.canConvert<QOrganizerTodo>()) { + QOrganizerTodo theTodo = variant.value<QOrganizerTodo>(); + manager->removeItem(theTodo.id()); + refreshList(); + } + } +} +//! [4] + +//! [5] +void Window::refreshList() +{ + listWidget->clear(); + + QOrganizerItemSortOrder sortOrder; + sortOrder.setDetail(QOrganizerItemDetail::TypeTodoTime, QOrganizerTodoTime::FieldDueDateTime); + + QList<QOrganizerItem> items = + manager->items(QDateTime(), QDateTime(), QOrganizerItemFilter(), -1, QList<QOrganizerItemSortOrder>() << sortOrder); +//! [5] + if (items.isEmpty()) { + new QListWidgetItem("<No Todos>", listWidget); + } +//! [6] + foreach(QOrganizerItem item, items) { + if (item.type() == QOrganizerItemType::TypeTodo) { + QOrganizerTodo todo = static_cast<QOrganizerTodo>(item); + if (todo.startDateTime() > + QDateTime(calendarWidget->selectedDate(), QTime(23,59)) || + todo.dueDateTime() < + QDateTime(calendarWidget->selectedDate(), QTime(0, 0))) + continue; + + QString display = todo.startDateTime().toString("yy/MM/dd hh:mm") + + "-" + todo.dueDateTime().toString("yy/MM/dd hh:mm") + + " - "+ todo.displayLabel(); + + QListWidgetItem *listItem = + new QListWidgetItem(display, listWidget); + listItem->setData(Qt::UserRole, QVariant::fromValue(todo)); + } + } +} +//! [6] + +void Window::setupGui() +{ + todoEditor = new TodoEditor; + + listWidget = new QListWidget; + stackedWidget = new QStackedWidget; + newTodoButton = new QPushButton(tr("New Todo")); + deletTodoButton = new QPushButton(tr("Delete Todo")); + calendarWidget = new QCalendarWidget; + + connect(newTodoButton, SIGNAL(clicked()), this, SLOT(editNewTodo())); + connect(todoEditor, SIGNAL(editingFinished(QOrganizerTodo &)), + this, SLOT(saveTodo(QOrganizerTodo &))); + connect(listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), + this, SLOT(editTodo(QListWidgetItem*))); + connect(calendarWidget, SIGNAL(selectionChanged()), + this, SLOT(refreshList())); + connect(deletTodoButton, SIGNAL(clicked()), this, SLOT(deleteTodo())); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(calendarWidget); + mainLayout->addWidget(listWidget); + + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addWidget(newTodoButton); + buttonLayout->addWidget(deletTodoButton); + mainLayout->addLayout(buttonLayout); + + QWidget *frontPage = new QWidget; + frontPage->setLayout(mainLayout); + + stackedWidget->addWidget(frontPage); + stackedWidget->addWidget(todoEditor); + + // Adding a scroll area to allow proper rendering of the UI on small screens + QScrollArea *scrollArea = new QScrollArea; + scrollArea->setWidgetResizable(true); + scrollArea->setWidget(stackedWidget); + QSize suggestedSize; + suggestedSize = stackedWidget->sizeHint(); + stackedWidget->setMinimumSize(suggestedSize); + + QGridLayout *layout = new QGridLayout; + layout->addWidget(scrollArea); + + setLayout(layout); +} |