~jocave/checkbox/hybrid-amd-gpu-mods

« back to all changes in this revision

Viewing changes to checkbox-gui/checkbox-gui/listmodel.cpp

  • Committer: Zygmunt Krynicki
  • Date: 2015-09-17 13:32:37 UTC
  • mto: This revision was merged to the branch mainline in revision 4014.
  • Revision ID: zygmunt.krynicki@canonical.com-20150917133237-7d4mdzlgpin1na9g
checkbox-gui: remove checkbox gui entirely

This patch removes all of checkbox-gui. This was long in the making but
it's now done. We cannot maintain this codebase effectively. Keeping it
around slows us down as we are unable to make feature-parity changes
here with the same simplicity that we can make them elsewhere, most
notably in checkbox-converged.

The code has served us well but it is the time to let go and make
checkbox-converged the only application that we use across all of Ubuntu
releases and across different environments (phone, table and desktop).

Signed-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Author: Christophe Dumez <dchris@gmail.com>
3
 
 * License: Public domain (No attribution required)
4
 
 * Website: http://cdumez.blogspot.com/
5
 
 * Version: 1.0
6
 
 */
7
 
 
8
 
#include <qdebug.h>
9
 
#include "listmodel.h"
10
 
 
11
 
ListModel::ListModel(ListItem* prototype, QObject *parent) :
12
 
    QAbstractListModel(parent), m_prototype(prototype)
13
 
{
14
 
}
15
 
 
16
 
int ListModel::rowCount(const QModelIndex &parent) const
17
 
{
18
 
  Q_UNUSED(parent);
19
 
  return m_list.size();
20
 
}
21
 
 
22
 
QVariant ListModel::data(const QModelIndex &index, int role) const
23
 
{
24
 
  if(index.row() < 0 || index.row() >= m_list.size())
25
 
    return QVariant();
26
 
  return m_list.at(index.row())->data(role);
27
 
}
28
 
 
29
 
bool ListModel::setData(const QModelIndex & index, const QVariant & value, int role){
30
 
    if(index.row() < 0 || index.row() >= m_list.size())
31
 
      return false;
32
 
    m_list.at(index.row())->setData(value, role);
33
 
    return true;
34
 
}
35
 
 
36
 
Qt::ItemFlags ListModel::flags(const QModelIndex &index) const
37
 
{
38
 
    if (index.isValid())
39
 
        return (QAbstractListModel::flags(index)|Qt::ItemIsSelectable);
40
 
 
41
 
    return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
42
 
}
43
 
 
44
 
ListModel::~ListModel() {
45
 
  delete m_prototype;
46
 
  clear();
47
 
}
48
 
 
49
 
void ListModel::appendRow(ListItem *item)
50
 
{
51
 
  appendRows(QList<ListItem*>() << item);
52
 
}
53
 
 
54
 
void ListModel::appendRows(const QList<ListItem *> &items)
55
 
{
56
 
  beginInsertRows(QModelIndex(), rowCount(), rowCount()+items.size()-1);
57
 
  foreach(ListItem *item, items) {
58
 
    connect(item, SIGNAL(dataChanged()), SLOT(handleItemChange()));
59
 
    m_list.append(item);
60
 
  }
61
 
  endInsertRows();
62
 
}
63
 
 
64
 
void ListModel::insertRow(int row, ListItem *item)
65
 
{
66
 
  beginInsertRows(QModelIndex(), row, row);
67
 
  connect(item, SIGNAL(dataChanged()), SLOT(handleItemChange()));
68
 
  m_list.insert(row, item);
69
 
  endInsertRows();
70
 
}
71
 
 
72
 
void ListModel::handleItemChange()
73
 
{
74
 
  ListItem* item = static_cast<ListItem*>(sender());
75
 
  QModelIndex index = indexFromItem(item);
76
 
  if(index.isValid())
77
 
    emit dataChanged(index, index);
78
 
 
79
 
}
80
 
 
81
 
ListItem * ListModel::find(const QString &id) const
82
 
{
83
 
  foreach(ListItem* item, m_list) {
84
 
    if(item->id() == id) return item;
85
 
  }
86
 
  return 0;
87
 
}
88
 
 
89
 
QModelIndex ListModel::indexFromItem(const ListItem *item) const
90
 
{
91
 
  Q_ASSERT(item);
92
 
  for(int row=0; row<m_list.size(); ++row) {
93
 
    if(m_list.at(row) == item) return index(row);
94
 
  }
95
 
  return QModelIndex();
96
 
}
97
 
 
98
 
void ListModel::clear()
99
 
{
100
 
  qDeleteAll(m_list);
101
 
  m_list.clear();
102
 
}
103
 
 
104
 
bool ListModel::removeRow(int row, const QModelIndex &parent)
105
 
{
106
 
  Q_UNUSED(parent);
107
 
  if(row < 0 || row >= m_list.size()) return false;
108
 
  beginRemoveRows(QModelIndex(), row, row);
109
 
  delete m_list.takeAt(row);
110
 
  endRemoveRows();
111
 
  return true;
112
 
}
113
 
 
114
 
bool ListModel::removeRows(int row, int count, const QModelIndex &parent)
115
 
{
116
 
  Q_UNUSED(parent);
117
 
  if(row < 0 || (row+count) >= m_list.size()) return false;
118
 
  beginRemoveRows(QModelIndex(), row, row+count-1);
119
 
  for(int i=0; i<count; ++i) {
120
 
    delete m_list.takeAt(row);
121
 
  }
122
 
  endRemoveRows();
123
 
  return true;
124
 
}
125
 
 
126
 
ListItem * ListModel::takeRow(int row)
127
 
{
128
 
  beginRemoveRows(QModelIndex(), row, row);
129
 
  ListItem* item = m_list.takeAt(row);
130
 
  endRemoveRows();
131
 
  return item;
132
 
}
133
 
 
134
 
QHash<int, QByteArray> ListModel::roleNames() const{
135
 
    return m_prototype->roleNames();
136
 
}
137
 
 
138
 
QVariant ListModel::get(int row)
139
 
{
140
 
    ListItem * item = m_list.at(row);
141
 
    QMap<QString, QVariant> itemData;
142
 
    QHashIterator<int, QByteArray> hashItr(item->roleNames());
143
 
    while(hashItr.hasNext()){
144
 
        hashItr.next();
145
 
        itemData.insert(hashItr.value(),item->data(hashItr.key()).toString());
146
 
    }
147
 
 
148
 
    return QVariant(itemData);
149
 
}
150
 
 
151
 
void ListModel::setProperty(int idx, const QString& property, const QVariant& value)
152
 
{
153
 
    if (rowCount() == 0 || idx >= rowCount() || idx < 0) {
154
 
        return;
155
 
    }
156
 
 
157
 
    QHashIterator<int, QByteArray> hashItr(roleNames());
158
 
 
159
 
    if ( hashItr.findNext(property.toUtf8()) ){
160
 
        m_list[idx]->setData(value, hashItr.key());
161
 
    }
162
 
}