]> git.sven.stormbind.net Git - sven/vym.git/blob - findresultmodel.cpp
Import Upstream version 2.6.11
[sven/vym.git] / findresultmodel.cpp
1 #include <QtGui>
2
3 #include "findresultitem.h"
4 #include "findresultmodel.h"
5 #include "settings.h"
6 #include "treeitem.h"
7
8 extern Settings settings;
9
10 FindResultModel::FindResultModel( QObject *parent)
11     : QAbstractItemModel(parent)
12 {
13     QVector<QVariant> rootData;
14     rootData << "Heading";
15     rootItem = new FindResultItem(rootData);
16     showParentsLevel = settings.value("/satellite/findResults/showParentsLevel", 1).toInt();
17 }
18
19 FindResultModel::~FindResultModel()
20 {
21     delete rootItem;
22 }
23
24 void FindResultModel::clear()
25 {
26     if (rootItem->childCount()>0)
27         removeRows (0,rowCount (QModelIndex ()));
28 }
29
30 int FindResultModel::columnCount(const QModelIndex & /* parent */) const
31 {
32     return rootItem->columnCount();
33 }
34
35 QVariant FindResultModel::data(const QModelIndex &index, int role) const
36 {
37     if (!index.isValid())
38         return QVariant();
39
40     if (role != Qt::DisplayRole && role != Qt::EditRole)
41         return QVariant();
42
43     FindResultItem *item = getItem(index);
44
45     return item->data(index.column());
46 }
47
48 Qt::ItemFlags FindResultModel::flags(const QModelIndex &index) const
49 {
50     if (!index.isValid())
51         return 0;
52
53     return Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
54 }
55
56 QVariant FindResultModel::headerData(int section, Qt::Orientation orientation,
57                                int role) const
58 {
59     if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
60         return rootItem->data(section);
61
62     return QVariant();
63 }
64
65 QModelIndex FindResultModel::index (FindResultItem *fri)
66 {
67     if (!fri->parent())
68         return QModelIndex();
69     else    
70         return createIndex (fri->row(),0,fri);
71 }
72
73
74 QModelIndex FindResultModel::index(int row, int column, const QModelIndex &parent) const
75 {
76     if (parent.isValid() && parent.column() != 0)
77         return QModelIndex();
78
79     FindResultItem *parentItem = getItem(parent);
80
81     FindResultItem *childItem = parentItem->child(row);
82     if (childItem)
83         return createIndex(row, column, childItem);
84     else
85         return QModelIndex();
86 }
87
88 bool FindResultModel::insertColumns(int position, int columns, const QModelIndex &parent)
89 {
90     bool success;
91
92     beginInsertColumns(parent, position, position + columns - 1);
93     success = rootItem->insertColumns(position, columns);
94     endInsertColumns();
95
96     return success;
97 }
98
99 bool FindResultModel::insertRows(int position, int rows, const QModelIndex &parent)
100 {
101     FindResultItem *parentItem = getItem(parent);
102     bool success;
103
104     beginInsertRows(parent, position, position + rows - 1);
105     success = parentItem->insertChildren(position, rows, rootItem->columnCount());
106     endInsertRows();
107
108     return success;
109 }
110
111 QModelIndex FindResultModel::parent(const QModelIndex &index) const
112 {
113     if (!index.isValid())
114         return QModelIndex();
115
116     FindResultItem *childItem = getItem(index);
117     FindResultItem *parentItem = childItem->parent();
118
119     if (parentItem == rootItem)
120         return QModelIndex();
121
122     return createIndex(parentItem->childNumber(), 0, parentItem);
123 }
124
125 bool FindResultModel::removeColumns(int position, int columns, const QModelIndex &parent)
126 {
127     bool success;
128
129     beginRemoveColumns(parent, position, position + columns - 1);
130     success = rootItem->removeColumns(position, columns);
131     endRemoveColumns();
132
133     if (rootItem->columnCount() == 0)
134         removeRows(0, rowCount());
135
136     return success;
137 }
138
139 bool FindResultModel::removeRows(int position, int rows, const QModelIndex &parent)
140 {
141     FindResultItem *parentItem = getItem(parent);
142     bool success = true;
143
144     beginRemoveRows(parent, position, position + rows - 1);
145     success = parentItem->removeChildren(position, rows);
146     endRemoveRows();
147
148     return success;
149 }
150
151 int FindResultModel::rowCount(const QModelIndex &parent) const
152 {
153     FindResultItem *parentItem = getItem(parent);
154
155     return parentItem->childCount();
156 }
157
158 bool FindResultModel::setData(const QModelIndex &index, const QVariant &value,
159                         int role)
160 {
161     if (role != Qt::EditRole)
162         return false;
163
164     FindResultItem *item = getItem(index);
165     bool result = item->setData(index.column(), value);
166
167     if (result)
168         emit dataChanged(index, index);
169
170     return result;
171 }
172
173 bool FindResultModel::setHeaderData(int section, Qt::Orientation orientation,
174                               const QVariant &value, int role)
175 {
176     if (role != Qt::EditRole || orientation != Qt::Horizontal)
177         return false;
178
179     bool result = rootItem->setData(section, value);
180
181     if (result)
182         emit headerDataChanged(orientation, section, section);
183
184     return result;
185 }
186
187 FindResultItem* FindResultModel::getItem(const QModelIndex &index) const
188 {
189     if (index.isValid()) {
190         FindResultItem *item = static_cast<FindResultItem*>(index.internalPointer());
191         if (item) return item;
192     }
193     return rootItem;
194 }
195
196 FindResultItem*  FindResultModel::addItem (TreeItem *ti)
197 {
198     FindResultItem *ni=NULL;
199     if (ti)
200     {
201         QModelIndex parix (index (rootItem));
202         
203         emit (layoutAboutToBeChanged() );
204
205         int n=rowCount (parix);
206         beginInsertRows (parix,n,n);
207         if (rootItem->insertChildren (n,1,0) )
208         {
209             QString h=ti->getHeadingPlainWithParents( showParentsLevel );
210             QModelIndex ix=index(n,0,QModelIndex());
211             setData (ix,QVariant(h),Qt::EditRole);
212             ni=getItem(ix);
213             ni->setOriginal (ti);
214         }
215         endInsertRows ();
216
217         emit (layoutChanged() );
218     }
219     return ni;
220 }
221
222 FindResultItem*  FindResultModel::addSubItem (FindResultItem *parent,const QString &s, TreeItem *pi, int i)
223 {
224     FindResultItem *ni=NULL;
225     if (pi && parent)
226     {
227         QModelIndex parix ( index (parent));
228         
229         emit (layoutAboutToBeChanged() );
230
231         int n=rowCount (parix);
232         beginInsertRows (parix,n,n);
233
234         QModelIndex ix;
235         if (parent->insertChildren (n,1,0))
236         {
237             ix=index(n,0,parix);
238             setData (ix,QVariant(s),Qt::EditRole);
239             ni=getItem(ix);
240             ni->setOriginal (pi);
241             ni->setOriginalIndex (i);
242         }
243         endInsertRows ();
244         emit (layoutChanged() );
245     }
246     return ni;
247 }
248
249 void FindResultModel::setSearchString( const QString &s)
250 {
251     searchString=s;
252 }
253
254 QString FindResultModel::getSearchString()
255 {
256     return searchString;
257 }
258
259 void FindResultModel::setSearchFlags( QTextDocument::FindFlags f)
260 {
261     searchFlags=f;
262 }
263
264 QTextDocument::FindFlags FindResultModel::getSearchFlags()
265 {
266     return searchFlags;
267 }
268
269 void FindResultModel::setShowParentsLevel(uint i)
270 {
271     showParentsLevel = i;
272     settings.setValue("/findResults/showParentsLevel", showParentsLevel);
273 }
274
275 uint FindResultModel::getShowParentsLevel()
276 {
277     return showParentsLevel;
278 }
279