• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdenetwork API Reference
  • KDE Home
  • Contact Us
 

kget

  • sources
  • kde-4.12
  • kdenetwork
  • kget
  • core
transfertreemodel.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2 
3  Copyright (C) 2006 Dario Massarin <nekkar@libero.it>
4  Copyright (C) 2009 Lukas Appelhans <l.appelhans@gmx.de>
5  Copyright (C) 2010 Matthias Fuchs <mat69@gmx.net>
6 
7  This program is free software; you can redistribute it and/or
8  modify it under the terms of the GNU General Public
9  License as published by the Free Software Foundation; either
10  version 2 of the License, or (at your option) any later version.
11 */
12 
13 #include "core/transfertreemodel.h"
14 
15 #include "core/kget.h"
16 #include "core/transfertreeselectionmodel.h"
17 #include "core/transfergrouphandler.h"
18 #include "core/transfergroup.h"
19 #include "core/transferhandler.h"
20 #include "core/transfer.h"
21 #include "transferadaptor.h"
22 #include "dbus/dbustransferwrapper.h"
23 #include "settings.h"
24 #include "transfergroupscheduler.h"
25 
26 #include <kdebug.h>
27 #include <klocale.h>
28 #include <KMimeType>
29 
30 ItemMimeData::ItemMimeData()
31  : QMimeData()
32 {
33 }
34 
35 ItemMimeData::~ItemMimeData()
36 {
37 }
38 
39 void ItemMimeData::appendTransfer(const QWeakPointer<TransferHandler> &transfer)
40 {
41  m_transfers.append(transfer);
42 }
43 
44 QList<QWeakPointer<TransferHandler> > ItemMimeData::transfers() const
45 {
46  return m_transfers;
47 }
48 
49 ModelItem::ModelItem(Handler * handler)
50  : QStandardItem(),
51  m_handler(handler)
52 {
53 }
54 
55 ModelItem::~ModelItem()
56 {
57 }
58 
59 void ModelItem::emitDataChanged()
60 {
61  QStandardItem::emitDataChanged();
62 }
63 
64 Handler * ModelItem::handler()
65 {
66  return m_handler;
67 }
68 
69 bool ModelItem::isGroup()
70 {
71  return false;
72 }
73 
74 GroupModelItem * ModelItem::asGroup()
75 {
76  return dynamic_cast<GroupModelItem*>(this);
77 }
78 
79 TransferModelItem * ModelItem::asTransfer()
80 {
81  return dynamic_cast<TransferModelItem*>(this);
82 }
83 
84 
85 TransferModelItem::TransferModelItem(TransferHandler *handler)
86  : ModelItem(handler),
87  m_transferHandler(handler)
88 {
89 }
90 
91 TransferModelItem::~TransferModelItem()
92 {
93 }
94 
95 QVariant TransferModelItem::data(int role) const
96 {
97  if (role == Qt::DisplayRole)
98  return m_transferHandler->data(column());
99  else if (role == Qt::DecorationRole)
100  {
101  switch (column())
102  {
103  case 0: {
104  //store the icon for speed improvements, KIconLoader should make sure, that
105  //the icon data gets shared
106  if (m_mimeType.isNull()) {
107  m_mimeType = KIcon(KMimeType::iconNameForUrl(m_transferHandler->dest().url()));
108  }
109 
110  return m_mimeType;
111  }
112  case 1:
113  return m_transferHandler->statusPixmap();
114  }
115  }
116  if (role == Qt::TextAlignmentRole)
117  {
118  switch (column())
119  {
120  case 0: // name
121  return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
122  default:
123  return Qt::AlignCenter;
124  }
125  }
126  // KextendableItemDelegate::ShowExtensionIndicatorRole
127  // tells the KExtendableItemDelegate which column contains the extender icon
128  if (role == Qt::UserRole + 200)
129  {
130  if (column() == 0)
131  return true;
132  else
133  return false;
134  }
135  return QVariant();
136 }
137 
138 TransferHandler * TransferModelItem::transferHandler()
139 {
140  return m_transferHandler;
141 }
142 
143 
144 GroupModelItem::GroupModelItem(TransferGroupHandler *handler)
145  : ModelItem(handler),
146  m_groupHandler(handler)
147 {
148 }
149 
150 GroupModelItem::~GroupModelItem()
151 {
152 }
153 
154 QVariant GroupModelItem::data(int role) const
155 {
156  if (role == Qt::DisplayRole) {
157  return m_groupHandler->data(column());
158  }
159  if (role == Qt::TextAlignmentRole)
160  {
161  switch (column())
162  {
163  case 0: // name
164  return Qt::AlignVCenter;
165  case 2: // size
166  case 3: // speed
167  case 4: //progress
168  return Qt::AlignCenter;
169  default:
170  return QVariant(Qt::AlignLeft | Qt::AlignBottom);
171  }
172  }
173  if (role == Qt::DecorationRole && column() == 0)
174  return m_groupHandler->pixmap();
175  return QVariant();
176 }
177 
178 TransferGroupHandler * GroupModelItem::groupHandler()
179 {
180  //kDebug() << m_groupHandler->name();
181  return m_groupHandler;
182 }
183 
184 bool GroupModelItem::isGroup()
185 {
186  return true;
187 }
188 
189 
190 TransferTreeModel::TransferTreeModel(Scheduler * scheduler)
191  : QStandardItemModel(),
192  m_scheduler(scheduler),
193  m_timerId(-1)
194 {
195  m_transferGroups.clear();
196  m_transfers.clear();
197 }
198 
199 TransferTreeModel::~TransferTreeModel()
200 {
201 
202 }
203 
204 void TransferTreeModel::addGroup(TransferGroup * group)
205 {
206  QList<QStandardItem*> items;
207  for (int i = 0; i != group->handler()->columnCount(); i++)
208  items << new GroupModelItem(group->handler());
209 
210  appendRow(items);
211 
212  m_transferGroups.append(static_cast<GroupModelItem*>(items.first()));
213 
214  emit groupAddedEvent(group->handler());
215 
216  KGet::m_scheduler->addQueue(group);
217 }
218 
219 void TransferTreeModel::delGroup(TransferGroup * group)
220 {
221  if (m_transferGroups.count() <= 1) //If there is only one group left, we should not remove it
222  return;
223  GroupModelItem *item = itemFromTransferGroupHandler(group->handler());
224  if (!item) {
225  return;
226  }
227 
228  QList<Transfer*> transfers;
229  JobQueue::iterator it;
230  JobQueue::iterator itEnd = group->end();
231  for (it = group->begin(); it != itEnd; ++it) {
232  transfers << static_cast<Transfer*>(*it);
233  }
234  delTransfers(transfers);
235 
236  m_transferGroups.removeAll(item);
237  removeRow(item->row());
238 
239  m_changedGroups.removeAll(group->handler());
240 
241  emit groupRemovedEvent(group->handler());
242 
243  KGet::m_scheduler->delQueue(group);
244 }
245 
246 void TransferTreeModel::addTransfers(const QList<Transfer*> &transfers, TransferGroup *group)
247 {
248  ModelItem *parentItem = itemFromTransferGroupHandler(group->handler());
249  const QModelIndex parentIndex = parentItem->index();
250  beginInsertRows(parentItem->index(), parentItem->rowCount(), parentItem->rowCount() + transfers.count() - 1);
251 
252  //HACK blocks all signals from the model when adding multiple items,
253  //that way rowsInserted gets only emitted once, and not constantly when doing appendRow
254  //change this once there is a better way to append many transfers at once
255  blockSignals(true);
256 
257  //now create and add the new items
258  QList<TransferHandler*> handlers;
259  group->append(transfers);
260  foreach (Transfer *transfer, transfers) {
261  TransferHandler *handler = transfer->handler();
262  handlers << handler;
263 
264  QList<QStandardItem*> items;
265  for (int i = 0; i != handler->columnCount(); ++i) {
266  items << new TransferModelItem(handler);
267  }
268 
269  parentItem->appendRow(items);
270 
271  m_transfers.append(static_cast<TransferModelItem*>(items.first()));
272 
273  DBusTransferWrapper * wrapper = new DBusTransferWrapper(handler);
274  new TransferAdaptor(wrapper);
275  QDBusConnection::sessionBus().registerObject(handler->dBusObjectPath(), wrapper);
276  }
277 
278  //notify the rest of the changes
279  blockSignals(false);
280  endInsertRows();
281  emit transfersAddedEvent(handlers);
282 }
283 
284 void TransferTreeModel::delTransfers(const QList<Transfer*> &t)
285 {
286  QList<Transfer*> transfers = t;
287  QList<TransferHandler*> handlers;
288 
289  //find all valid items and sort them according to their groups
290  QHash<TransferGroup*, QList<TransferModelItem*> > groups;
291  QHash<TransferGroup*, QList<Transfer*> > groupsTransfer;
292  {
293  QList<Transfer*>::iterator it;
294  QList<Transfer*>::iterator itEnd = transfers.end();
295  for (it = transfers.begin(); it != itEnd; ) {
296  TransferModelItem *item = itemFromTransferHandler((*it)->handler());
297  if (item) {
298  handlers << (*it)->handler();
299  groups[(*it)->group()] << item;
300  groupsTransfer[(*it)->group()] << *it;
301  ++it;
302  } else {
303  it = transfers.erase(it);
304  }
305  }
306  }
307 
308  emit transfersAboutToBeRemovedEvent(handlers);
309 
310  //remove the items from the model
311  {
312  QHash<TransferGroup*, QList<TransferModelItem*> >::iterator it;
313  QHash<TransferGroup*, QList<TransferModelItem*> >::iterator itEnd = groups.end();
314  for (it = groups.begin(); it != itEnd; ++it) {
315  const int numItems = (*it).count();
316  QStandardItem *parentItem = (*it).first()->parent();
317  QModelIndex parentIndex = parentItem->index();
318  if (numItems == parentItem->rowCount()) {
319  for (int i = 0; i < numItems; ++i) {
320  m_transfers.removeAll((*it)[i]);
321  }
322  removeRows(0, numItems, parentIndex);
323  continue;
324  }
325 
326  int rowStart = (*it).first()->row();
327  int numRows = 1;
328  m_transfers.removeAll((*it).first());
329  for (int i = 1; i < numItems; ++i) {
330  //previous item is neighbour
331  if (rowStart + numRows == (*it)[i]->row()) {
332  ++numRows;
333  //no neighbour, so start again
334  } else {
335  removeRows(rowStart, numRows, parentIndex);
336  rowStart = (*it)[i]->row();
337  numRows = 1;
338  }
339  m_transfers.removeAll((*it)[i]);
340  }
341  //remove last items
342  removeRows(rowStart, numRows, parentIndex);
343  }
344  }
345 
346  foreach(Transfer *transfer, transfers) {
347  QDBusConnection::sessionBus().unregisterObject(transfer->handler()->dBusObjectPath());
348  m_changedTransfers.removeAll(transfer->handler());
349  }
350 
351  {
352  QHash<TransferGroup*, QList<Transfer*> >::iterator it;
353  QHash<TransferGroup*, QList<Transfer*> >::iterator itEnd = groupsTransfer.end();
354  for (it = groupsTransfer.begin(); it != itEnd; ++it) {
355  it.key()->remove(it.value());
356  }
357  }
358 
359  emit transfersRemovedEvent(handlers);
360 }
361 
362 TransferModelItem * TransferTreeModel::itemFromTransferHandler(TransferHandler * handler)
363 {
364  foreach (TransferModelItem * item, m_transfers)
365  {
366  if (handler == item->transferHandler())
367  return item;
368  }
369  return 0;
370 }
371 
372 GroupModelItem * TransferTreeModel::itemFromTransferGroupHandler(TransferGroupHandler * handler)
373 {
374  foreach (GroupModelItem * item, m_transferGroups)
375  {
376  if (handler == item->groupHandler())
377  return item;
378  }
379  return 0;
380 }
381 
382 ModelItem * TransferTreeModel::itemFromHandler(Handler * handler)
383 {
384  TransferHandler *transfer = qobject_cast<TransferHandler*>(handler);
385  if (transfer) {
386  return itemFromTransferHandler(transfer);
387  }
388  return itemFromTransferGroupHandler(qobject_cast<TransferGroupHandler*>(handler));
389 }
390 
391 ModelItem * TransferTreeModel::itemFromIndex(const QModelIndex &index) const
392 {
393  QStandardItem *item = QStandardItemModel::itemFromIndex(index);
394  if (item)
395  return dynamic_cast<ModelItem*>(item);
396  return 0;
397 }
398 
399 void TransferTreeModel::moveTransfer(Transfer * transfer, TransferGroup * destGroup, Transfer * after)
400 {
401  if( (after) && (destGroup != after->group()) )
402  return;
403 
404  int position = transfer->group()->indexOf(transfer);
405 
406  TransferGroup * oldGroup = transfer->group();
407 
408  bool sameGroup = false;
409 
410  if (destGroup == transfer->group())
411  {
412  sameGroup = true;
413  if (after)
414  destGroup->move(transfer, after);
415  else
416  destGroup->move(transfer, 0);
417  }
418  else
419  {
420  transfer->group()->remove(transfer);
421 
422  if (after)
423  destGroup->insert(transfer, after);
424  else
425  destGroup->prepend(transfer);
426 
427  transfer->m_jobQueue = destGroup;
428  }
429  QList<QStandardItem*> items = itemFromHandler(oldGroup->handler())->takeRow(position);
430  itemFromHandler(destGroup->handler())->insertRow(destGroup->indexOf(transfer), items);
431 
432  if (!sameGroup)
433  emit transferMovedEvent(transfer->handler(), destGroup->handler());
434 
435  KGet::selectionModel()->clearSelection();
436 }
437 
438 void TransferTreeModel::moveTransfer(TransferHandler *transfer, TransferGroupHandler *destGroup, TransferHandler *after)
439 {
440  Transfer *afterTransfer = 0;
441  if (after) {
442  afterTransfer = after->m_transfer;
443  }
444  moveTransfer(transfer->m_transfer, destGroup->m_group, afterTransfer);
445 }
446 
447 QList<TransferGroup *> TransferTreeModel::transferGroups()
448 {
449  QList<TransferGroup*> transferGroups;
450  foreach (GroupModelItem * item, m_transferGroups) {
451  transferGroups << item->groupHandler()->m_group;
452  }
453 
454  return transferGroups;
455 }
456 
457 TransferGroup * TransferTreeModel::findGroup(const QString & groupName)
458 {
459  foreach (GroupModelItem * group, m_transferGroups)
460  {
461  if (group->groupHandler()->name() == groupName)
462  return group->groupHandler()->m_group;
463  }
464  return 0;
465 }
466 
467 Transfer * TransferTreeModel::findTransfer(const KUrl &src)
468 {
469  /*foreach (TransferGroup * group, transferGroups())
470  {
471  Transfer * t = group->findTransfer(src);
472  if (t)
473  return t;
474  }*/
475  foreach (TransferModelItem * transfer, m_transfers)
476  {
477  if (transfer->transferHandler()->source() == src)
478  return transfer->transferHandler()->m_transfer;
479  }
480  return 0;
481 }
482 
483 Transfer *TransferTreeModel::findTransferByDestination(const KUrl &dest)
484 {
485  /*foreach (TransferGroup * group, transferGroups())
486  {
487  Transfer * t = group->findTransferByDestination(dest);
488  if (t)
489  return t;
490  }*/
491  foreach (TransferModelItem * transfer, m_transfers)
492  {
493  if (transfer->transferHandler()->dest() == dest)
494  return transfer->transferHandler()->m_transfer;
495  }
496  return 0;
497 }
498 
499 Transfer * TransferTreeModel::findTransferByDBusObjectPath(const QString & dbusObjectPath)
500 {
501  foreach (TransferModelItem * transfer, m_transfers)
502  {
503  if (transfer->transferHandler()->dBusObjectPath() == dbusObjectPath)
504  return transfer->transferHandler()->m_transfer;
505  }
506  return 0;
507 }
508 
509 void TransferTreeModel::postDataChangedEvent(TransferHandler * transfer)
510 {
511  if(m_timerId == -1)
512  m_timerId = startTimer(500);
513 
514  m_changedTransfers.append(transfer);
515 }
516 
517 void TransferTreeModel::postDataChangedEvent(TransferGroupHandler * group)
518 {
519  if(m_timerId == -1)
520  m_timerId = startTimer(500);
521 
522  m_changedGroups.append(group);
523 }
524 
525 Qt::ItemFlags TransferTreeModel::flags (const QModelIndex & index) const
526 {
527 // kDebug(5001) << "TransferTreeModel::flags()";
528  if (!index.isValid())
529  return Qt::ItemIsEnabled;
530 
531  Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
532 
533  if (!index.parent().isValid())
534  {
535  if(index.column() == 0)
536  flags |= Qt::ItemIsDropEnabled;
537  }
538  else
539  flags |= Qt::ItemIsDragEnabled;
540 
541  //flags |= Qt::ItemIsDropEnabled;
542 
543  // We can edit all the groups but the default one
544  if(index.row() > 0) {
545  flags |= Qt::ItemIsEditable;
546  }
547 
548  return flags;
549 }
550 
551 QVariant TransferTreeModel::headerData(int section, Qt::Orientation orientation, int role) const
552 {
553  if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
554  {
555  return columnName(section);
556  }
557 
558  return QVariant();
559 }
560 
561 Qt::DropActions TransferTreeModel::supportedDropActions() const
562 {
563  return Qt::CopyAction | Qt::MoveAction;
564 }
565 
566 QStringList TransferTreeModel::mimeTypes() const
567 {
568  QStringList types;
569  types << "kget/transfer_pointer";
570  return types;
571 }
572 
573 QMimeData * TransferTreeModel::mimeData(const QModelIndexList &indexes) const
574 {
575  ItemMimeData *mimeData = new ItemMimeData();
576 
577  QModelIndexList sortedIndexes = indexes;
578  qSort(sortedIndexes.begin(), sortedIndexes.end(), qGreater<QModelIndex>());
579  foreach (const QModelIndex &index, sortedIndexes) {
580  if (index.isValid() && index.column() == 0 && index.parent().isValid()) {
581  ModelItem *item = itemFromIndex(index);
582  if (!item->isGroup()) {
583  mimeData->appendTransfer(QWeakPointer<TransferHandler>(item->asTransfer()->transferHandler()));
584  }
585  }
586  }
587 
588  mimeData->setData("kget/transfer_pointer", QByteArray());
589  return mimeData;
590 }
591 
592 bool TransferTreeModel::dropMimeData(const QMimeData * mdata, Qt::DropAction action, int row, int column, const QModelIndex &parent)
593 {
594  if (action == Qt::IgnoreAction)
595  return true;
596 
597  const ItemMimeData *itemData = qobject_cast<const ItemMimeData*>(mdata);
598  if (!itemData) {
599  kWarning(5001) << "Unsuported mime data dropped.";
600  return false;
601  }
602 
603  TransferGroup *destGroup = findGroup(data(parent, Qt::DisplayRole).toString());
604  if (!destGroup) {
605  kWarning(5001) << "No group could be found where the transfers should be inserted to.";
606  return false;
607  }
608 
609  if (parent.isValid())
610  kDebug(5001) << "TransferTreeModel::dropMimeData" << " " << row << " "
611  << column << endl;
612 
613  QList<QWeakPointer<TransferHandler> > transfers = itemData->transfers();
614  kDebug(5001) << "TransferTreeModel::dropMimeData:" << transfers.count() << "transfers.";
615 
616  const bool droppedInsideGroup = parent.isValid();
617  Transfer * after = 0;
618  for (int i = 0; i < transfers.count(); ++i) {
619  bool b = destGroup->size() > row && row - 1 >= 0;
620  if (b)
621  kDebug(5001) << "TRANSFER AFTER:" << destGroup->operator[](row - 1)->source();
622  else
623  kDebug(5001) << "TRANSFER AFTER NOT EXISTING";
624 
625  if (!after) {
626  bool rowValid = (row - 1 >= 0) && (destGroup->size() >= row);
627  if (droppedInsideGroup && rowValid) {
628  after = destGroup->operator[](row - 1);//insert at the correct position
629  }
630  }
631 
632  if (transfers[i].isNull()) {
633  kWarning() << "The moved transfer has been deleted inbetween.";
634  } else {
635  moveTransfer(transfers[i].data()->m_transfer, destGroup, after);
636  }
637  }
638  return true;
639 }
640 
641 QString TransferTreeModel::columnName(int column)
642 {
643  switch(column) {
644  case 0:
645  return i18nc("name of download", "Name");
646  case 1:
647  return i18nc("status of download", "Status");
648  case 2:
649  return i18nc("size of download", "Size");
650  case 3:
651  return i18nc("progress of download", "Progress");
652  case 4:
653  return i18nc("speed of download", "Speed");
654  case 5:
655  return i18nc("remaining time of download", "Remaining Time");
656  }
657  return QString();
658 }
659 
660 int TransferTreeModel::column(Transfer::TransferChange flag)
661 {
662  switch(flag) {
663  case Transfer::Tc_FileName:
664  return 0;
665  case Transfer::Tc_Status:
666  return 1;
667  case Transfer::Tc_TotalSize:
668  return 2;
669  case Transfer::Tc_Percent:
670  return 3;
671  case Transfer::Tc_DownloadSpeed:
672  return 4;
673  case Transfer::Tc_RemainingTime:
674  return 5;
675  default:
676  return -1;
677  }
678  return -1;
679 }
680 
681 int TransferTreeModel::column(TransferGroup::GroupChange flag)
682 {
683  switch(flag) {
684  case TransferGroup::Gc_GroupName:
685  return 0;
686  case TransferGroup::Gc_Status:
687  return 1;
688  case TransferGroup::Gc_TotalSize:
689  return 2;
690  case TransferGroup::Gc_Percent:
691  return 3;
692  case TransferGroup::Gc_DownloadSpeed:
693  return 4;
694  default:
695  return -1;
696  }
697  return -1;
698 }
699 
700 void TransferTreeModel::timerEvent(QTimerEvent *event)
701 {
702  Q_UNUSED(event)
703 // kDebug(5001) << "TransferTreeModel::timerEvent";
704 
705  QMap<TransferHandler *, Transfer::ChangesFlags> updatedTransfers;
706  QMap<TransferGroupHandler *, TransferGroup::ChangesFlags> updatedGroups;
707 
708  foreach (TransferHandler * transfer, m_changedTransfers)
709  {
710  if (!updatedTransfers.contains(transfer)) {
711  TransferGroupHandler * group = transfer->group();
712  ModelItem * item = itemFromHandler(group);
713  Transfer::ChangesFlags changesFlags = transfer->changesFlags();
714 
715  emit transfer->transferChangedEvent(transfer, changesFlags);
716 
717  int row = group->indexOf(transfer);
718 
719 // kDebug(5001) << "CHILD = " << item->child(row, column(Transfer::Tc_FileName));
720 
721  // Now, check that model child items already exist (there are some cases when the transfer
722  // can notify for changes before the gui has been correctly initialized)
723  if(item->child(row, 0)) {
724  if (changesFlags & Transfer::Tc_FileName)
725  static_cast<ModelItem*>(item->child(row, column(Transfer::Tc_FileName)))->emitDataChanged();
726  if (changesFlags & Transfer::Tc_Status)
727  static_cast<ModelItem*>(item->child(row, column(Transfer::Tc_Status)))->emitDataChanged();
728  if (changesFlags & Transfer::Tc_TotalSize)
729  static_cast<ModelItem*>(item->child(row, column(Transfer::Tc_TotalSize)))->emitDataChanged();
730  if (changesFlags & Transfer::Tc_Percent)
731  static_cast<ModelItem*>(item->child(row, column(Transfer::Tc_Percent)))->emitDataChanged();
732  if (changesFlags & Transfer::Tc_DownloadSpeed)
733  static_cast<ModelItem*>(item->child(row, column(Transfer::Tc_DownloadSpeed)))->emitDataChanged();
734  if (changesFlags & Transfer::Tc_RemainingTime)
735  static_cast<ModelItem*>(item->child(row, column(Transfer::Tc_RemainingTime)))->emitDataChanged();
736 
737  transfer->resetChangesFlags();
738  updatedTransfers.insert(transfer,changesFlags);
739  }
740  }
741  }
742 
743  if(!updatedTransfers.isEmpty())
744  emit transfersChangedEvent(updatedTransfers);
745 
746  foreach(TransferGroupHandler * group, m_changedGroups)
747  {
748  if(!updatedGroups.contains(group))
749  {
750  TransferGroup::ChangesFlags changesFlags = group->changesFlags();
751 
752  emit group->groupChangedEvent(group, changesFlags);
753 
754  int row = itemFromHandler(group)->row();
755 
756  if (changesFlags & TransferGroup::Gc_GroupName)
757  static_cast<ModelItem*>(item(row, column(TransferGroup::Gc_GroupName)))->emitDataChanged();
758  if (changesFlags & TransferGroup::Gc_Status)
759  static_cast<ModelItem*>(item(row, column(TransferGroup::Gc_Status)))->emitDataChanged();
760  if (changesFlags & TransferGroup::Gc_TotalSize)
761  static_cast<ModelItem*>(item(row, column(TransferGroup::Gc_TotalSize)))->emitDataChanged();
762  if (changesFlags & TransferGroup::Gc_Percent)
763  static_cast<ModelItem*>(item(row, column(TransferGroup::Gc_Percent)))->emitDataChanged();
764  if (changesFlags & TransferGroup::Gc_DownloadSpeed)
765  static_cast<ModelItem*>(item(row, column(TransferGroup::Gc_DownloadSpeed)))->emitDataChanged();
766 
767  /*for(int i=0; i<8; i++)
768  {
769  if(((changesFlags >> i) & 0x00000001))
770  {
771  QStandardItem *groupItem = itemFromHandler(group);
772  dynamic_cast<ModelItem*>(invisibleRootItem()->child(groupItem->row(), i))->emitDataChanged();
773  //QModelIndex index = createIndex(m_transferGroups.indexOf(group->m_group), i, group);
774  //emit dataChanged(index,index);
775  }
776  }*/
777 
778  group->resetChangesFlags();
779  updatedGroups.insert(group, changesFlags);
780  }
781  }
782 
783  if(!updatedGroups.isEmpty())
784  emit groupsChangedEvent(updatedGroups);
785 
786  m_changedTransfers.clear();
787  m_changedGroups.clear();
788 
789  killTimer(m_timerId);
790  m_timerId = -1;
791 }
792 
793 #include "transfertreemodel.moc"
TransferTreeModel::groupRemovedEvent
void groupRemovedEvent(TransferGroupHandler *)
TransferTreeModel::groupAddedEvent
void groupAddedEvent(TransferGroupHandler *)
ModelItem::ModelItem
ModelItem(Handler *handler)
Definition: transfertreemodel.cpp:49
TransferTreeModel::findTransfer
Transfer * findTransfer(const KUrl &src)
Definition: transfertreemodel.cpp:467
TransferGroupHandler::groupChangedEvent
void groupChangedEvent(TransferGroupHandler *transfer, TransferGroupHandler::ChangesFlags flags)
TransferGroup::move
void move(Transfer *transfer, Transfer *after)
Moves a transfer in the list.
Definition: transfergroup.cpp:153
Transfer::ChangesFlags
int ChangesFlags
Definition: transfer.h:100
TransferHandler
Class TransferHandler:
Definition: transferhandler.h:48
Transfer::Tc_FileName
Definition: transfer.h:52
TransferGroup
class TransferGroup:
Definition: transfergroup.h:46
Scheduler
Scheduler class: what handle all the jobs in kget.
Definition: scheduler.h:32
TransferGroupHandler::changesFlags
ChangesFlags changesFlags()
Definition: transfergrouphandler.cpp:119
TransferGroupHandler
Definition: transfergrouphandler.h:30
Scheduler::delQueue
void delQueue(JobQueue *queue)
Deletes a queue from the scheduler.
Definition: scheduler.cpp:79
TransferTreeModel::flags
Qt::ItemFlags flags(const QModelIndex &index) const
Definition: transfertreemodel.cpp:525
ItemMimeData::ItemMimeData
ItemMimeData()
Definition: transfertreemodel.cpp:30
TransferTreeModel::groupsChangedEvent
void groupsChangedEvent(QMap< TransferGroupHandler *, TransferGroup::ChangesFlags >)
TransferTreeModel::findTransferByDBusObjectPath
Transfer * findTransferByDBusObjectPath(const QString &dbusObjectPath)
Definition: transfertreemodel.cpp:499
transfertreemodel.h
TransferGroup::Gc_TotalSize
Definition: transfergroup.h:56
ModelItem::asGroup
GroupModelItem * asGroup()
Definition: transfertreemodel.cpp:74
GroupModelItem::GroupModelItem
GroupModelItem(TransferGroupHandler *handler)
Definition: transfertreemodel.cpp:144
TransferTreeModel::mimeData
QMimeData * mimeData(const QModelIndexList &indexes) const
Definition: transfertreemodel.cpp:573
ItemMimeData
Definition: transfertreemodel.h:36
TransferTreeModel::transfersAboutToBeRemovedEvent
void transfersAboutToBeRemovedEvent(const QList< TransferHandler * > &transfers)
TransferGroup::remove
void remove(Transfer *transfer)
Removes the given transfer from the list of the transfers.
Definition: transfergroup.cpp:135
JobQueue::size
int size() const
Definition: jobqueue.h:72
Transfer::Tc_RemainingTime
Definition: transfer.h:57
GroupModelItem::~GroupModelItem
virtual ~GroupModelItem()
Definition: transfertreemodel.cpp:150
TransferTreeModel::findGroup
TransferGroup * findGroup(const QString &groupName)
Definition: transfertreemodel.cpp:457
TransferTreeModel::transfersRemovedEvent
void transfersRemovedEvent(const QList< TransferHandler * > &transfers)
ModelItem::handler
Handler * handler()
Definition: transfertreemodel.cpp:64
TransferTreeModel::TransferTreeModel
TransferTreeModel(Scheduler *scheduler)
Definition: transfertreemodel.cpp:190
QStandardItemModel
Transfer::group
TransferGroup * group() const
The owner group.
Definition: transfer.h:257
TransferTreeModel::postDataChangedEvent
void postDataChangedEvent(TransferHandler *transfer)
Definition: transfertreemodel.cpp:509
ModelItem::emitDataChanged
void emitDataChanged()
Definition: transfertreemodel.cpp:59
TransferTreeModel::transferGroups
QList< TransferGroup * > transferGroups()
Definition: transfertreemodel.cpp:447
TransferGroup::append
void append(Transfer *transfer)
Appends a new transfer to the list of the transfers.
Definition: transfergroup.cpp:102
TransferTreeModel::transferMovedEvent
void transferMovedEvent(TransferHandler *, TransferGroupHandler *)
TransferGroupHandler::indexOf
int indexOf(TransferHandler *transfer)
Definition: transfergrouphandler.cpp:129
transfergroupscheduler.h
TransferHandler::statusPixmap
QPixmap statusPixmap() const
Definition: transferhandler.h:215
Transfer::Tc_Status
Definition: transfer.h:53
TransferTreeModel::itemFromIndex
ModelItem * itemFromIndex(const QModelIndex &index) const
Definition: transfertreemodel.cpp:391
TransferTreeModel::supportedDropActions
Qt::DropActions supportedDropActions() const
Definition: transfertreemodel.cpp:561
ItemMimeData::appendTransfer
void appendTransfer(const QWeakPointer< TransferHandler > &transfer)
Appends a transfer to the list of transfers.
Definition: transfertreemodel.cpp:39
Transfer::TransferChange
TransferChange
Here we define the flags that should be shared by all the transfers.
Definition: transfer.h:47
TransferGroup::prepend
void prepend(Transfer *transfer)
Prepends a new transfer to the list of the transfers.
Definition: transfergroup.cpp:121
TransferGroupHandler::data
QVariant data(int column)
Definition: transfergrouphandler.cpp:83
TransferTreeModel::headerData
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
Definition: transfertreemodel.cpp:551
TransferHandler::dest
const KUrl & dest() const
Definition: transferhandler.h:98
Scheduler::addQueue
void addQueue(JobQueue *queue)
Adds a queue to the scheduler.
Definition: scheduler.cpp:73
DBusTransferWrapper
Definition: dbustransferwrapper.h:20
TransferGroupHandler::name
const QString & name()
Definition: transfergrouphandler.h:83
KGet::selectionModel
static TransferTreeSelectionModel * selectionModel()
Definition: kget.cpp:492
transfergrouphandler.h
TransferTreeModel::addTransfers
void addTransfers(const QList< Transfer * > &transfers, TransferGroup *group)
Definition: transfertreemodel.cpp:246
TransferModelItem::data
virtual QVariant data(int role=Qt::UserRole+1) const
Definition: transfertreemodel.cpp:95
TransferTreeModel::delTransfers
void delTransfers(const QList< Transfer * > &transfers)
Definition: transfertreemodel.cpp:284
transfertreeselectionmodel.h
JobQueue::begin
iterator begin()
Definition: jobqueue.h:57
TransferHandler::source
const KUrl & source() const
Definition: transferhandler.h:93
TransferTreeModel::transfersChangedEvent
void transfersChangedEvent(QMap< TransferHandler *, Transfer::ChangesFlags >)
TransferTreeModel::columnName
static QString columnName(int column)
Definition: transfertreemodel.cpp:641
GroupModelItem::groupHandler
TransferGroupHandler * groupHandler()
Definition: transfertreemodel.cpp:178
transfergroup.h
QMimeData
TransferHandler::dBusObjectPath
QString dBusObjectPath()
Definition: transferhandler.h:262
Handler
Definition: handler.h:17
TransferGroup::Gc_Percent
Definition: transfergroup.h:57
TransferGroupHandler::columnCount
int columnCount() const
Definition: transfergrouphandler.h:209
TransferModelItem::~TransferModelItem
virtual ~TransferModelItem()
Definition: transfertreemodel.cpp:91
TransferTreeModel::delGroup
void delGroup(TransferGroup *group)
Definition: transfertreemodel.cpp:219
Transfer::Tc_DownloadSpeed
Definition: transfer.h:56
TransferGroup::GroupChange
GroupChange
Definition: transfergroup.h:50
TransferTreeModel::~TransferTreeModel
~TransferTreeModel()
Definition: transfertreemodel.cpp:199
transferhandler.h
ModelItem
Definition: transfertreemodel.h:59
TransferHandler::data
QVariant data(int column)
Definition: transferhandler.cpp:121
TransferGroup::Gc_DownloadSpeed
Definition: transfergroup.h:59
ModelItem::~ModelItem
virtual ~ModelItem()
Definition: transfertreemodel.cpp:55
TransferTreeModel::itemFromTransferHandler
TransferModelItem * itemFromTransferHandler(TransferHandler *handler)
Definition: transfertreemodel.cpp:362
TransferTreeModel::column
static int column(Transfer::TransferChange flag)
Definition: transfertreemodel.cpp:660
GroupModelItem::data
virtual QVariant data(int role=Qt::UserRole+1) const
Definition: transfertreemodel.cpp:154
TransferTreeModel::addGroup
void addGroup(TransferGroup *group)
Definition: transfertreemodel.cpp:204
settings.h
Transfer::handler
TransferHandler * handler()
Definition: transfer.cpp:217
TransferTreeModel::findTransferByDestination
Transfer * findTransferByDestination(const KUrl &dest)
Definition: transfertreemodel.cpp:483
TransferTreeModel::moveTransfer
void moveTransfer(Transfer *transfer, TransferGroup *destGroup, Transfer *after=0)
Definition: transfertreemodel.cpp:399
TransferGroup::handler
TransferGroupHandler * handler() const
Definition: transfergroup.h:283
TransferModelItem
Definition: transfertreemodel.h:77
TransferGroup::insert
void insert(Transfer *transfer, Transfer *after)
inserts a transfer to the current group after the given transfer
Definition: transfergroup.cpp:128
dbustransferwrapper.h
TransferGroup::Gc_Status
Definition: transfergroup.h:55
kget.h
Transfer::Tc_TotalSize
Definition: transfer.h:54
ModelItem::asTransfer
TransferModelItem * asTransfer()
Definition: transfertreemodel.cpp:79
transfer.h
TransferGroup::ChangesFlags
int ChangesFlags
Definition: transfergroup.h:64
TransferTreeModel::itemFromHandler
ModelItem * itemFromHandler(Handler *handler)
Definition: transfertreemodel.cpp:382
Transfer::Tc_Percent
Definition: transfer.h:55
JobQueue::end
iterator end()
Definition: jobqueue.h:62
ItemMimeData::transfers
QList< QWeakPointer< TransferHandler > > transfers() const
Returns all appended transfers The weakpointer is there to check later on, that the transfer still ex...
Definition: transfertreemodel.cpp:44
GroupModelItem::isGroup
virtual bool isGroup()
Definition: transfertreemodel.cpp:184
QStandardItem
ItemMimeData::~ItemMimeData
~ItemMimeData()
Definition: transfertreemodel.cpp:35
TransferModelItem::TransferModelItem
TransferModelItem(TransferHandler *handler)
Definition: transfertreemodel.cpp:85
Job::m_jobQueue
JobQueue * m_jobQueue
Definition: job.h:118
TransferTreeModel::transfersAddedEvent
void transfersAddedEvent(QList< TransferHandler * > transfers)
JobQueue::indexOf
int indexOf(Job *job) const
Definition: jobqueue.h:80
GroupModelItem
Definition: transfertreemodel.h:92
TransferModelItem::transferHandler
TransferHandler * transferHandler()
Definition: transfertreemodel.cpp:138
TransferGroupHandler::pixmap
QPixmap pixmap()
Definition: transfergrouphandler.h:198
TransferGroup::Gc_GroupName
Definition: transfergroup.h:54
TransferTreeModel::mimeTypes
QStringList mimeTypes() const
Definition: transfertreemodel.cpp:566
TransferTreeModel::dropMimeData
bool dropMimeData(const QMimeData *mdata, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Definition: transfertreemodel.cpp:592
TransferTreeModel::itemFromTransferGroupHandler
GroupModelItem * itemFromTransferGroupHandler(TransferGroupHandler *handler)
Definition: transfertreemodel.cpp:372
ModelItem::isGroup
virtual bool isGroup()
Definition: transfertreemodel.cpp:69
Transfer
Definition: transfer.h:36
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:53:18 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kget

Skip menu "kget"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdenetwork API Reference

Skip menu "kdenetwork API Reference"
  • kget
  • kopete
  •   kopete
  •   libkopete
  • krdc
  • krfb

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal