~mixxxdevelopers/mixxx/trunk

« back to all changes in this revision

Viewing changes to mixxx/src/library/treeitemmodel.cpp

  • Committer: Raffitea
  • Date: 2011-01-07 00:44:11 UTC
  • mfrom: (2616.1.25 traktor_library)
  • Revision ID: raffitea-20110107004411-lz9m8mnny3sf86rq
Merging from lp:~mixxxdevelopers/mixxx/traktor_library
* support for n-level childmodels in sidebar
* M3U and PLS playlist import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <QtGui>
 
2
 
 
3
 #include "treeitem.h"
 
4
 #include "treeitemmodel.h"
 
5
 
 
6
  TreeItemModel::TreeItemModel(QObject *parent)
 
7
     : QAbstractItemModel(parent)
 
8
 {
 
9
    
 
10
     m_rootItem = new TreeItem("$root","$root");
 
11
     
 
12
 }
 
13
 
 
14
 TreeItemModel::~TreeItemModel()
 
15
 {
 
16
     delete m_rootItem;
 
17
 }
 
18
//Our Treeview Model supports exactly a single column
 
19
 int TreeItemModel::columnCount(const QModelIndex &parent) const
 
20
 {
 
21
     return 1;
 
22
 }
 
23
 
 
24
 QVariant TreeItemModel::data(const QModelIndex &index, int role) const
 
25
 {
 
26
     if (!index.isValid())
 
27
         return QVariant();
 
28
 
 
29
     if (role != Qt::DisplayRole)
 
30
         return QVariant();
 
31
 
 
32
     TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
 
33
 
 
34
     return item->data();
 
35
 }
 
36
 
 
37
 Qt::ItemFlags TreeItemModel::flags(const QModelIndex &index) const
 
38
 {
 
39
     if (!index.isValid())
 
40
         return 0;
 
41
 
 
42
     return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
 
43
 }
 
44
 
 
45
 QVariant TreeItemModel::headerData(int section, Qt::Orientation orientation, int role) const
 
46
 {
 
47
     return QVariant();
 
48
 }
 
49
 
 
50
 QModelIndex TreeItemModel::index(int row, int column, const QModelIndex &parent)
 
51
             const
 
52
 {
 
53
     if (!hasIndex(row, column, parent))
 
54
         return QModelIndex();
 
55
 
 
56
     TreeItem *parentItem = NULL;
 
57
 
 
58
     if (!parent.isValid())
 
59
         parentItem = m_rootItem;
 
60
     else
 
61
         parentItem = static_cast<TreeItem*>(parent.internalPointer());
 
62
 
 
63
     TreeItem *childItem = parentItem->child(row);
 
64
     if (childItem)
 
65
         return createIndex(row, column, childItem);
 
66
     else
 
67
         return QModelIndex();
 
68
 }
 
69
 
 
70
 QModelIndex TreeItemModel::parent(const QModelIndex &index) const
 
71
 {
 
72
     if (!index.isValid())
 
73
         return QModelIndex();
 
74
 
 
75
     TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
 
76
     TreeItem *parentItem = childItem->parent();
 
77
 
 
78
     if (parentItem == m_rootItem)
 
79
         return QModelIndex();
 
80
 
 
81
     return createIndex(parentItem->row(), 0, parentItem);
 
82
 }
 
83
 
 
84
 int TreeItemModel::rowCount(const QModelIndex &parent) const
 
85
 {
 
86
    if (parent.column() > 0)
 
87
         return 0;
 
88
 
 
89
 
 
90
    TreeItem *parentItem = NULL;
 
91
    //qDebug() << "parent data: " << parent.data();
 
92
     if (!parent.isValid()){
 
93
         parentItem = m_rootItem;
 
94
    }
 
95
     else{
 
96
         parentItem = static_cast<TreeItem*>(parent.internalPointer());
 
97
 
 
98
    }
 
99
 
 
100
    //qDebug() << "TreeItem data: " << parent.internalPointer();
 
101
 
 
102
     return parentItem->childCount();
 
103
 }
 
104
/**
 
105
  * Populates the model and notifies the view.
 
106
  * Call this method first, before you do call any other methods.
 
107
*/
 
108
 void TreeItemModel::setRootItem(TreeItem *item)
 
109
 {
 
110
    if(m_rootItem) delete m_rootItem;
 
111
        
 
112
    m_rootItem = item;
 
113
    reset();
 
114
 }
 
115
/**
 
116
  * Before you can resize the data model dynamically by using 'insertRows' and 'removeRows' 
 
117
  * make sure you have initialized 
 
118
  */ 
 
119
bool TreeItemModel::insertRows(QList<QString>& data, int position, int rows, const QModelIndex &parent)
 
120
 {  
 
121
     TreeItem *parentItem = getItem(parent);
 
122
     bool success;
 
123
 
 
124
     beginInsertRows(parent, position, position + rows - 1);
 
125
     success = parentItem->insertChildren(data, position, rows);
 
126
     endInsertRows();
 
127
 
 
128
     return success;
 
129
 }
 
130
 bool TreeItemModel::removeRows(int position, int rows, const QModelIndex &parent)
 
131
 {
 
132
     TreeItem *parentItem = getItem(parent);
 
133
     bool success = true;
 
134
 
 
135
     beginRemoveRows(parent, position, position + rows - 1);
 
136
     success = parentItem->removeChildren(position, rows);
 
137
     endRemoveRows();
 
138
 
 
139
     return success;
 
140
 }
 
141
TreeItem* TreeItemModel::getItem(const QModelIndex &index) const
 
142
 {
 
143
     if (index.isValid()) {
 
144
         TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
 
145
         if (item) return item;
 
146
     }
 
147
     return m_rootItem;
 
148
 }
 
149
 
 
150
 
 
151