[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/base/plasma/applets/rememberthemilk-kinetic
From: Andrew Stromme <astromme () chatonka ! com>
Date: 2009-03-31 22:06:11
Message-ID: 1238537171.553191.1951.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 947625 by astromme:
Attempt at a QGraphicsWidget based task view
M +4 -1 CMakeLists.txt
A listwidget.cpp [License: LGPL (v2+)]
A listwidget.h [License: LGPL (v2+)]
M +78 -21 structure-plasmoid.cpp
M +18 -0 structure-plasmoid.h
M +1 -0 taskeditor.cpp
M +1 -1 taskitem.h
M +26 -2 taskitemdelegate.cpp
M +7 -0 taskitemdelegate.h
A tasklistwidget.cpp [License: UNKNOWN]
A tasklistwidget.h [License: UNKNOWN]
M +6 -5 taskmodel.cpp
M +1 -1 taskmodel.h
A taskwidget.cpp [License: LGPL (v2+)]
A taskwidget.h [License: LGPL (v2)]
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/CMakeLists.txt \
#947624:947625 @@ -15,12 +15,15 @@
)
set(rememberthemilk-plasmoid_SRCS
+ listwidget.cpp
+ tasklistwidget.cpp
structure-plasmoid.cpp
taskitem.cpp
taskitemdelegate.cpp
taskeditor.cpp
taskmodel.cpp
- tasksortfilter.cpp)
+ tasksortfilter.cpp
+ taskwidget.cpp)
set(rememberthemilk-testview_SRCS
rememberthemilk-testview.cpp
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/structure-plasmoid.cpp \
#947624:947625 @@ -59,6 +59,11 @@
#include "taskitem.h"
#include "taskmodel.h"
#include "tasksortfilter.h"
+#include <QGraphicsScene>
+#include <QGraphicsView>
+#include "taskwidget.h"
+#include "tasklistwidget.h"
+
StructurePlasmoid::StructurePlasmoid(QObject *parent, const QVariantList &args)
: Plasma::PopupApplet(parent, args),
@@ -157,12 +162,14 @@
void StructurePlasmoid::showTaskEditor(QModelIndex index) {
if (!index.parent().isValid()) // We have a header rather than a task.
return;
- m_taskEditor->setModelIndex(index);
- m_taskEditor->hide();
- m_taskEditor->show();
- m_tasksView->nativeWidget()->setEnabled(false);
- m_taskEditor->setEnabled(true);
- m_taskEditor->startAnimation(m_tasksView->size());
+// m_taskEditor->setModelIndex(index);
+// m_taskEditor->hide();
+// m_taskEditor->show();
+// m_tasksView->nativeWidget()->setEnabled(false);
+// m_taskEditor->setEnabled(true);
+// m_taskEditor->startAnimation(m_tasksView->size());
+ closeTaskAnimation(m_openingTask);
+ openTaskAnimation(index);
m_priorityLabel->setText(i18n("Editing Task: ") + \
index.data(Qt::RTMTaskRole).value<RTM::Task>().getName());
geometryChanged();
@@ -200,14 +207,16 @@
if (source == "Lists" || source == "DummyLists") {
while (m_categoriesBar->count() != 0)
- m_categoriesBar->removeTab(0);
+ m_categoriesBar->removeTab(0);
m_model->clearLists();
foreach(QString listId, data.keys()) {
- m_categoriesBar->addTab(data.value(listId).value<QString>());
- m_model->addList(listId.toLong());
+ m_categoriesBar->addTab(data.value(listId).value<QString>());
+ m_model->addList(listId.toLong());
+ m_list->insertList(listId.toLong());
}
+
m_engine->connectSource("DummyTasks", this);
m_engine->connectSource("Tasks", this); // Set update interval?
//updateData();
@@ -215,18 +224,20 @@
} else if (source == "Tasks" || source == "DummyTasks") {
m_model->clear();
foreach(QVariant variant, data.values()) {
- RTM::Task task = variant.value<RTM::Task>();
- m_model->addTask(task);
+ RTM::Task task = variant.value<RTM::Task>();
+ m_model->addTask(task);
+ m_list->insertTask(task);
}
+
if (m_model->getLists()->isEmpty()) // We must wait for the lists.
- return;
+ return;
else
- updateData();
+ updateData();
} else if (source.startsWith("Error")) {
QString desc = data["description"].toString();
- kDebug() << desc;
+ kDebug() << desc;
if (desc == "Authentication required"){
- //setAuthRequired(true); //TODO Fix when token is invalid.
+ //setAuthRequired(true); //TODO Fix when token is invalid.
}
}
//updateGeometry();
@@ -239,6 +250,49 @@
}
+
+void StructurePlasmoid::openTaskAnimation(QModelIndex& index) {
+ m_openingTask = index;
+ m_delegate->setOpeningTaskHeight(m_openingTask, 0);
+ Plasma::Animator::self()->customAnimation(10, 100, Plasma::Animator::EaseInCurve, \
this, "openTaskAnimationStep"); +}
+
+void StructurePlasmoid::openTaskAnimationStep(qreal value) {
+ if (value == 1.0) {
+ openTaskAnimationFinished();
+ return;
+ }
+ m_delegate->setOpeningTaskHeight(m_openingTask, 100*value);
+ m_tasksView->update();
+}
+
+void StructurePlasmoid::openTaskAnimationFinished() {
+
+ m_delegate->setOpeningTaskHeight(m_openingTask, 100);
+ m_tasksView->update();
+}
+
+void StructurePlasmoid::closeTaskAnimation(QPersistentModelIndex& index) {
+ m_closingTask = index;
+ m_delegate->setClosingTaskHeight(m_closingTask, 100);
+ Plasma::Animator::self()->customAnimation(10, 100, Plasma::Animator::EaseOutCurve, \
this, "closeTaskAnimationStep"); +}
+
+void StructurePlasmoid::closeTaskAnimationStep(qreal value) {
+ if (value == 1.0) {
+ closeTaskAnimationFinished();
+ return;
+ }
+ m_delegate->setClosingTaskHeight(m_closingTask, 100*(1-value));
+ m_tasksView->update();
+}
+
+void StructurePlasmoid::closeTaskAnimationFinished() {
+ m_delegate->setClosingTaskHeight(m_closingTask, 0);
+ m_tasksView->update();
+}
+
+
QGraphicsWidget* StructurePlasmoid::graphicsWidget() {
if (m_graphicsWidget)
return m_graphicsWidget;
@@ -260,7 +314,7 @@
palette.setBrush(QPalette::Text, \
Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor));
- TaskItemDelegate *delegate = new TaskItemDelegate(this);
+ m_delegate = new TaskItemDelegate(this);
m_filterModel = new TaskSortFilter(this);
m_filterModel->setDynamicSortFilter(true);
@@ -268,9 +322,9 @@
m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
m_tasksView = new Plasma::TreeView(this);
- m_tasksView->installEventFilter(delegate);
+ m_tasksView->nativeWidget()->installEventFilter(m_delegate);
m_tasksView->setModel(m_filterModel);
- m_tasksView->nativeWidget()->setItemDelegate(delegate);
+ m_tasksView->nativeWidget()->setItemDelegate(m_delegate);
m_tasksView->nativeWidget()->header()->setHidden(true);
m_tasksView->nativeWidget()->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
m_tasksView->nativeWidget()->setRootIsDecorated(false);
@@ -281,8 +335,8 @@
m_tasksView->nativeWidget()->setSelectionMode(QAbstractItemView::SingleSelection);
m_tasksView->nativeWidget()->setDragEnabled(true);
m_tasksView->nativeWidget()->setAcceptDrops(true);
- m_tasksView->nativeWidget()->viewport()->setAcceptDrops(true);
- m_tasksView->nativeWidget()->setDropIndicatorShown(false);
+ //m_tasksView->nativeWidget()->viewport()->setAcceptDrops(true);
+ m_tasksView->nativeWidget()->setDropIndicatorShown(true);
m_tasksView->nativeWidget()->setDragDropMode(QAbstractItemView::DragDrop);
//m_tasksView->nativeWidget()->setDropIndicatorShown(true);
@@ -309,14 +363,17 @@
m_mainLayout = new QGraphicsLinearLayout(Qt::Vertical, m_graphicsWidget);
+ m_list = new TaskListWidget(this);
+ connect(m_categoriesBar, SIGNAL(currentChanged(int)), m_list, \
SLOT(animateToColumn(int))); +
m_mainLayout->addItem(m_priorityLabel);
m_mainLayout->addItem(m_categoriesBar);
m_mainLayout->addItem(m_searchLine);
+ m_mainLayout->addItem(m_list);
m_mainLayout->addItem(m_tasksView);
//m_mainLayout->addItem(m_taskEditor);
m_mainLayout->addItem(m_addTaskLine);
-
m_graphicsWidget->setLayout(m_mainLayout);
m_graphicsWidget->setMinimumSize(250, 300);
m_graphicsWidget->setPreferredSize(300, 500);
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/structure-plasmoid.h \
#947624:947625 @@ -49,12 +49,15 @@
class Label;
class LineEdit;
class TreeView;
+ class KineticArea;
}
class QSizeF;
class QSortFilterProxyModel;
class TaskModel;
class TaskSortFilter;
+class TaskWidget;
+class TaskListWidget;
class StructurePlasmoid : public Plasma::PopupApplet
{
@@ -75,6 +78,14 @@
void showTaskEditor(QModelIndex index);
void onTaskEditorHide();
+ void openTaskAnimation(QModelIndex& index);
+ void openTaskAnimationStep(qreal value);
+ void openTaskAnimationFinished();
+
+ void closeTaskAnimation(QPersistentModelIndex& index);
+ void closeTaskAnimationStep(qreal value);
+ void closeTaskAnimationFinished();
+
public slots:
void createConfigurationInterface(KConfigDialog *parent);
void configAccepted();
@@ -95,6 +106,13 @@
Plasma::LineEdit *m_searchLine;
TaskSortFilter *m_filterModel;
RTM::Session *session;
+
+ bool openingTask;
+ TaskItemDelegate* m_delegate;
+ QPersistentModelIndex m_openingTask;
+ QPersistentModelIndex m_closingTask;
+ TaskListWidget* m_list;
+ Plasma::KineticArea *m_scrollWidget;
};
// This links the .desktop file to the applet
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/taskeditor.cpp \
#947624:947625 @@ -216,6 +216,7 @@
opacity = (1-value)*.9;
+ setOpacity(value);
// Old code for sliding/resizing in from the right. Not working because of \
minimumSize issues. /*
if (value > .3 && appearing) {
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/taskitem.h \
#947624:947625 @@ -27,7 +27,7 @@
namespace Qt
{
- enum ItemUserDataRole { SortRole = 64, IdRole = 65, RTMTaskRole = 66, \
RTMPriorityRole = 67 }; + enum ItemUserDataRole { SortRole = 64, IdRole = 65, \
RTMTaskRole = 66, RTMPriorityRole = 67, HeightRole=68 }; };
class TaskItem : public QStandardItem
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/taskitemdelegate.cpp \
#947624:947625 @@ -51,7 +51,8 @@
dragging = true;
if (event->type() == QEvent::Drop || QEvent::DragLeave)
dragging = false;
- return QStyledItemDelegate::eventFilter(object, event);
+ return false;
+ //return QStyledItemDelegate::eventFilter(object, event);
}
@@ -85,6 +86,11 @@
painter->setBrush(gradient);
painter->drawRect(option.rect);
+// if (index.data(Qt::SelectedRole).toBool()) {
+//
+//
+// }
+
if (!index.parent().isValid()) { //Priority header
QString priority = index.data(Qt::DisplayRole).toString();
painter->restore();
@@ -171,6 +177,19 @@
//TODO: Create overlay when dragging.
}
+void TaskItemDelegate::setOpeningTaskHeight(QPersistentModelIndex& index, int \
height) { + m_openingTaskHeight = height;
+ m_openingTask = index;
+ sizeHintChanged(index);
+}
+
+void TaskItemDelegate::setClosingTaskHeight(QPersistentModelIndex& index, int \
height) { + m_closingTaskHeight = height;
+ m_closingTask = index;
+ sizeHintChanged(index);
+}
+
+
QSize TaskItemDelegate::sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
@@ -196,7 +215,12 @@
//QSize size = QStyledItemDelegate::sizeHint(option, index);
QSize size;
- size.setHeight(MARGINH + MARGINH + QApplication::fontMetrics().height()*2);
+ if (index == m_openingTask)
+ size.setHeight(MARGINH + MARGINH + QApplication::fontMetrics().height()*2 + \
m_openingTaskHeight); + else if (index == m_closingTask)
+ size.setHeight(MARGINH + MARGINH + QApplication::fontMetrics().height()*2 + \
m_closingTaskHeight); + else
+ size.setHeight(MARGINH + MARGINH + QApplication::fontMetrics().height()*2);
size.setWidth(MARGIN + MARGIN + QApplication::fontMetrics().width(task+due));
return size;
}
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/taskitemdelegate.h \
#947624:947625 @@ -39,6 +39,9 @@
virtual bool eventFilter(QObject* object, QEvent* event);
+ void setOpeningTaskHeight(QPersistentModelIndex& index, int height);
+ void setClosingTaskHeight(QPersistentModelIndex& index, int height);
+
static const qreal CONFIG_ICON_WIDTH;
static const qreal SINGLE_TRACK_ALBUM_WIDTH;
static const qreal MARGIN;
@@ -49,6 +52,10 @@
protected:
bool dragging;
+ int m_closingTaskHeight;
+ QPersistentModelIndex m_closingTask;
+ int m_openingTaskHeight;
+ QPersistentModelIndex m_openingTask;
};
#endif // TASKITEMDELEGATE_H
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/taskmodel.cpp \
#947624:947625 @@ -61,7 +61,7 @@
}
}
QFlags< Qt::DropAction > TaskModel::supportedDropActions() const {
- //qDebug() << "TaskModel::supportedDropActions()";
+ kDebug();
return Qt::MoveAction;
}
@@ -75,8 +75,9 @@
}
QStringList TaskModel::mimeTypes() const {
- QStringList types;
+ QStringList types = QAbstractItemModel::mimeTypes();
types << "application/vnd.text.list";
+ kDebug() << types;
return types;
}
@@ -182,7 +183,7 @@
}
-void TaskModel::insertTask(RTM::Task task)
+void TaskModel::insertTask(RTM::Task task, int height)
{
if (!task.getCompleted().isValid() && m_listIds->at(currentListIndex) == \
task.getListId()) { QStringList taskInfo;
@@ -202,7 +203,7 @@
}
else
taskInfo << "No Tags";
-
+
//kDebug() << "Task Appended" << task.name;
TaskItem *item = new TaskItem();
QVariant var;
@@ -216,6 +217,7 @@
item->setData(INT_MAX, Qt::SortRole);
item->setData(task.getPriority(), Qt::RTMPriorityRole);
item->setData((qint64) task.getId(), Qt::IdRole);
+ item->setData(height, Qt::HeightRole);
m_priorityItems.at(task.getPriority()-1)->insertRow(m_priorityItems.at(task.getPriority()-1)->rowCount(), \
item); }
sort();
@@ -227,7 +229,6 @@
return true;
}
-
TaskModel::~TaskModel() {
delete m_listIds;
delete m_tasks;
--- trunk/playground/base/plasma/applets/rememberthemilk-kinetic/taskmodel.h \
#947624:947625 @@ -53,7 +53,7 @@
protected:
void refreshToplevel();
void sort();
- void insertTask(RTM::Task task);
+ void insertTask(RTM::Task task, int height=0);
QMap<RTM::TaskId, RTM::Task> *m_tasks;
QList<RTM::ListId> *m_listIds;
int currentListIndex;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic