1 #include "slidemodel.h"
7 #include <QItemSelectionModel>
10 SlideModel::SlideModel( VymModel *vm)
11 : QAbstractItemModel(NULL)
13 QVector<QVariant> rootData;
15 rootItem = new SlideItem(rootData, NULL,this);
19 SlideModel::~SlideModel()
24 void SlideModel::clear()
26 if (rootItem->childCount()>0)
27 removeRows (0,rowCount (QModelIndex ()));
30 VymModel* SlideModel::getVymModel()
35 int SlideModel::columnCount(const QModelIndex & /* parent */) const
37 return rootItem->columnCount();
40 QVariant SlideModel::data(const QModelIndex &index, int role) const
45 if (role != Qt::DisplayRole && role != Qt::EditRole)
48 SlideItem *item = getItem(index);
50 return item->data(index.column());
53 Qt::ItemFlags SlideModel::flags(const QModelIndex &index) const
58 return Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
61 QVariant SlideModel::headerData(int section, Qt::Orientation orientation,
64 if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
65 return rootItem->data(section);
70 QModelIndex SlideModel::index (SlideItem *fri)
72 if (!fri || !fri->parent())
75 return createIndex (fri->row(),0,fri);
79 QModelIndex SlideModel::index(int row, int column, const QModelIndex &parent) const
81 if (parent.isValid() && parent.column() != 0)
84 SlideItem *parentItem = getItem(parent);
86 SlideItem *childItem = parentItem->child(row);
88 return createIndex(row, column, childItem);
93 bool SlideModel::insertColumns(int position, int columns, const QModelIndex &parent)
97 beginInsertColumns(parent, position, position + columns - 1);
98 success = rootItem->insertColumns(position, columns);
104 bool SlideModel::insertRows(int position, int rows, const QModelIndex &parent)
106 SlideItem *parentItem = getItem(parent);
109 beginInsertRows(parent, position, position + rows - 1);
110 success = parentItem->insertChildren(position, rows, rootItem->columnCount());
116 QModelIndex SlideModel::parent(const QModelIndex &index) const
118 if (!index.isValid())
119 return QModelIndex();
121 SlideItem *childItem = getItem(index);
122 SlideItem *parentItem = childItem->parent();
124 if (parentItem == rootItem)
125 return QModelIndex();
127 return createIndex(parentItem->childNumber(), 0, parentItem);
130 bool SlideModel::removeColumns(int position, int columns, const QModelIndex &parent)
134 beginRemoveColumns(parent, position, position + columns - 1);
135 success = rootItem->removeColumns(position, columns);
138 if (rootItem->columnCount() == 0)
139 removeRows(0, rowCount());
144 bool SlideModel::removeRows(int position, int rows, const QModelIndex &parent)
146 SlideItem *parentItem = getItem(parent);
149 beginRemoveRows(parent, position, position + rows - 1);
150 success = parentItem->removeChildren(position, rows);
156 int SlideModel::count()
158 return rootItem->childCount();
161 int SlideModel::rowCount(const QModelIndex &parent) const
163 SlideItem *parentItem = getItem(parent);
165 return parentItem->childCount();
168 bool SlideModel::setData(const QModelIndex &index, const QVariant &value,
171 if (role != Qt::EditRole)
174 SlideItem *item = getItem(index);
175 bool result = item->setData(index.column(), value);
178 emit dataChanged(index, index);
183 bool SlideModel::setHeaderData(int section, Qt::Orientation orientation,
184 const QVariant &value, int role)
186 if (role != Qt::EditRole || orientation != Qt::Horizontal)
189 bool result = rootItem->setData(section, value);
192 emit headerDataChanged(orientation, section, section);
197 SlideItem* SlideModel::addSlide(SlideItem *dst, int n)
200 if (!dst) dst=rootItem;
202 emit (layoutAboutToBeChanged() );
204 QModelIndex parix=index (dst);
205 if (n<0) n=dst->childCount();
206 beginInsertRows (parix,n,n);
207 if (rootItem->insertChildren (n,1,0) )
209 QModelIndex ix=index(n,0,QModelIndex());
213 emit (layoutChanged() );
218 void SlideModel::deleteSlide(SlideItem *si)
220 QModelIndex ix=index(si);
223 QModelIndex px=ix.parent();
224 int n=si->childNumber();
229 bool SlideModel::relinkSlide(
236 emit (layoutAboutToBeChanged() );
237 SlideItem *pi=si->parent();
239 // Remove at current position
240 int n=si->childNumber();
242 beginRemoveRows (index(pi),n,n);
246 if (pos<0 ||pos>dst->childCount() ) pos=dst->childCount();
248 // Insert at new position
249 beginInsertRows (index(dst),pos,pos);
250 dst->insertItem (pos, si);
253 emit (layoutChanged() );
255 selModel->select (index (si),QItemSelectionModel::ClearAndSelect );
262 SlideItem* SlideModel::getItem (const QModelIndex &index) const
264 if (index.isValid()) {
265 SlideItem *item = static_cast<SlideItem*>(index.internalPointer());
266 if (item) return item;
271 SlideItem* SlideModel::getSlide (int n)
273 if (n>=count() || n<0) return NULL;
274 return getItem (index (n, 0, QModelIndex() ));
277 SlideItem* SlideModel::findSlideID (uint n)
279 for (int i=0; i<rootItem->childCount(); i++)
280 if (rootItem->child(i)->getID()==n)
281 return rootItem->child(i);
285 QString SlideModel::saveToDir()
288 for (int i=0; i<rootItem->childCount(); i++)
289 s+=rootItem->child(i)->saveToDir();
293 void SlideModel::setSearchString( const QString &s)
298 QString SlideModel::getSearchString()
303 void SlideModel::setSearchFlags( QTextDocument::FindFlags f)
308 QTextDocument::FindFlags SlideModel::getSearchFlags()
313 void SlideModel::setSelectionModel(QItemSelectionModel *sm)
318 QItemSelectionModel* SlideModel::getSelectionModel()
323 QModelIndex SlideModel::getSelectedIndex()
327 qDebug ()<<"SlideModel: No selection model!";
328 return QModelIndex();
330 QModelIndexList list=selModel->selectedIndexes();
331 if (!list.isEmpty() ) return list.first();
332 return QModelIndex();
335 SlideItem* SlideModel::getSelectedItem ()
337 QModelIndex ix=getSelectedIndex();
338 if (ix.isValid() ) return getItem (ix);