[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