• 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
  • ui
  • history
transferhistory.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2 
3  Copyright (C) 2007 by Lukas Appelhans <l.appelhans@gmx.de>
4 
5  This program is free software; you can redistribute it and/or
6  modify it under the terms of the GNU General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 */
10 
11 #include "transferhistory.h"
12 #include "ui/newtransferdialog.h"
13 #include "settings.h"
14 #include "ui/history/transferhistorycategorizedview.h"
15 #include "ui/history/transferhistorycategorizeddelegate.h"
16 #include "ui/history/rangetreewidget.h"
17 #include "core/transferhistorystore.h"
18 #include "core/job.h"
19 
20 #include <QDateTime>
21 #include <QFile>
22 #include <QFileSystemWatcher>
23 #include <QFontMetrics>
24 #include <QLineEdit>
25 #include <QMenu>
26 #include <QModelIndex>
27 #include <QProgressBar>
28 #include <QStandardItem>
29 #include <QVariant>
30 
31 #include <KDebug>
32 #include <KStandardDirs>
33 #include <KMessageBox>
34 #include <KToolBar>
35 #include <KTreeWidgetSearchLine>
36 #include <KRun>
37 #include <KGlobalSettings>
38 #include <kio/global.h>
39 #include <KPushButton>
40 #include <KIcon>
41 
42 TransferHistory::TransferHistory(QWidget *parent)
43  : KGetSaveSizeDialog("TransferHistory", parent),
44  m_rangeType(TransferHistory::Date),
45  m_progressBar(new QProgressBar(this)),
46  m_iconModeEnabled(true)
47 {
48  setAttribute(Qt::WA_DeleteOnClose);
49  setCaption(i18n("Transfer History"));
50  setButtons(KDialog::Close);
51  //Setup Ui-Parts from Designer
52  QWidget *mainWidget = new QWidget(this);
53 
54  Ui::TransferHistory widget;
55  widget.setupUi(mainWidget);
56 
57  m_view = new TransferHistoryCategorizedView(this);
58 
59  // list icon view
60  m_iconView = widget.bt_iconview;
61  m_listView = widget.bt_listview;
62 
63  m_listView->setIcon(KIcon("view-list-details"));
64  m_iconView->setIcon(KIcon("view-list-icons"));
65 
66  connect(m_listView, SIGNAL(clicked()), SLOT(slotSetListMode()));
67  connect(m_iconView, SIGNAL(clicked()), SLOT(slotSetIconMode()));
68 
69  // range type
70  m_rangeTypeCombobox = widget.rangeType;
71 
72  m_verticalLayout = widget.vboxLayout;
73  m_hboxLayout = widget.hboxLayout;
74  m_searchBar = widget.searchBar;
75  //m_searchBar->setTreeWidget(m_treeWidget);
76  m_clearButton = widget.clearButton;
77  m_clearButton->setIcon(KIcon("edit-clear-history"));
78  m_actionDelete_Selected = widget.actionDelete_Selected;
79  m_actionDelete_Selected->setIcon(KIcon("edit-delete"));
80  m_actionDownload = widget.actionDownload;
81  m_actionDownload->setIcon(KIcon("document-new"));
82  m_openFile = new QAction(KIcon("document-open"), i18n("&Open File"), this);
83  setMainWidget(mainWidget);
84 
85  m_verticalLayout->addWidget(m_view);
86  m_verticalLayout->addWidget(m_progressBar);
87 
88  watcher = new QFileSystemWatcher();
89  watcher->addPath(KStandardDirs::locateLocal("appdata", QString()));
90  kDebug(5001) << watcher->directories();
91 
92  m_store = TransferHistoryStore::getStore();
93 
94  connect(m_actionDelete_Selected, SIGNAL(triggered()), this, SLOT(slotDeleteTransfer()));
95  connect(m_actionDownload, SIGNAL(triggered()), this, SLOT(slotDownload()));
96  connect(m_openFile, SIGNAL(triggered()), this, SLOT(slotOpenFile()));
97  connect(m_clearButton, SIGNAL(clicked()), this, SLOT(slotClear()));
98  connect(m_rangeTypeCombobox, SIGNAL(activated(int)), this, SLOT(slotLoadRangeType(int)));
99  connect(m_view, SIGNAL(deletedTransfer(QString,QModelIndex)),
100  SLOT(slotDeleteTransfer(QString,QModelIndex)));
101  connect(m_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(slotOpenFile(QModelIndex)));
102  connect(m_store, SIGNAL(loadFinished()), SLOT(slotLoadFinished()));
103  connect(m_store, SIGNAL(elementLoaded(int,int,TransferHistoryItem)),
104  SLOT(slotElementLoaded(int,int,TransferHistoryItem)));
105  connect(m_searchBar, SIGNAL(textChanged(QString)), m_view, SLOT(setFilterRegExp(QString)));
106  slotAddTransfers();
107 }
108 
109 TransferHistory::~TransferHistory()
110 {
111  delete m_store;
112 }
113 
114 QSize TransferHistory::sizeHint() const
115 {
116  QSize sh(800,600);
117  return sh;
118 }
119 
120 void TransferHistory::slotDeleteTransfer()
121 {
122  if (!m_iconModeEnabled) {
123  RangeTreeWidget *range_view = qobject_cast <RangeTreeWidget *> (m_view);
124 
125  slotDeleteTransfer(range_view->currentItem(0)->text());
126 
127  slotLoadRangeType(m_rangeType);
128  }
129 }
130 
131 void TransferHistory::slotDeleteTransfer(const QString &transferName, const QModelIndex &index)
132 {
133  Q_UNUSED(index)
134 
135  TransferHistoryItem item;
136  item.setSource(transferName);
137  m_store->deleteItem(item);
138 
139  slotLoadRangeType(m_rangeType);
140 }
141 
142 void TransferHistory::slotAddTransfers()
143 {
144  m_progressBar->show();
145  m_store->load();
146 }
147 
148 void TransferHistory::slotClear()
149 {
150  m_store->clear();
151 
152  slotLoadRangeType(m_rangeType);
153 }
154 
155 void TransferHistory::slotWriteDefault()
156 {
157  // not neded ??
158 }
159 
160 void TransferHistory::slotDownload()
161 {
162  if (!m_iconModeEnabled) {
163  NewTransferDialogHandler::showNewTransferDialog(((RangeTreeWidget *) m_view)->currentItem(0)->text());
164  }
165 }
166 
167 void TransferHistory::contextMenuEvent(QContextMenuEvent *event)
168 {
169  Q_UNUSED(event)
170 
171  if (!m_iconModeEnabled) {
172  RangeTreeWidget *range_view = qobject_cast <RangeTreeWidget *> (m_view);
173  if(range_view->currentIndex().parent().isValid()) {
174  QMenu *contextMenu = new QMenu(this);
175  contextMenu->addAction(m_actionDownload);
176  contextMenu->addAction(m_actionDelete_Selected);
177 
178  if (range_view->currentItem(4)->data().toInt() == Job::Finished)
179  contextMenu->addAction(m_openFile);
180  contextMenu->exec(QCursor::pos());
181  }
182  }
183 }
184 
185 void TransferHistory::slotOpenFile(const QModelIndex &index)
186 {
187  QString file;
188 
189  if (!m_iconModeEnabled) {
190  RangeTreeWidget *range_view = qobject_cast <RangeTreeWidget *> (m_view);
191  file = range_view->currentItem(1)->text();
192  }
193  else {
194  TransferHistoryCategorizedView *categorized_view = qobject_cast <TransferHistoryCategorizedView *> (m_view);
195  file = categorized_view->data(index, TransferHistoryCategorizedDelegate::RoleDest).toString();
196  }
197 
198  kDebug() << "Try to open the file : " << file;
199  if (!file.isEmpty()) {
200  new KRun(file, this, true, false);
201  }
202 }
203 
204 void TransferHistory::hideEvent(QHideEvent *event)
205 {
206  Q_UNUSED(event)
207  disconnect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(slotAddTransfers()));//Prevent reloading of TransferHistory when saving
208  deleteLater();
209 }
210 
211 QString TransferHistory::statusText(int status) const
212 {
213  switch (status)
214  {
215  case Job::Running:
216  return i18nc("The transfer is running", "Running");
217  case Job::Stopped:
218  return i18nc("The transfer is stopped", "Stopped");
219  case Job::Aborted:
220  return i18nc("The transfer is aborted", "Aborted");
221  case Job::Finished:
222  return i18nc("The transfer is finished", "Finished");
223  default:
224  return QString();
225  }
226 }
227 
228 void TransferHistory::slotLoadRangeType(int type)
229 {
230  m_rangeType = type;
231  if (m_iconModeEnabled) {
232  TransferHistoryCategorizedView *cat_view = qobject_cast <TransferHistoryCategorizedView *> (m_view);
233  cat_view->clear();
234  switch(type)
235  {
236  case TransferHistory::Size :
237  cat_view->setCategorizedDelegate(new SizeCategorizedDelegate());
238  break;
239  case TransferHistory::Date :
240  cat_view->setCategorizedDelegate(new DateCategorizedDelegate());
241  break;
242  default:
243  cat_view->setCategorizedDelegate(new HostCategorizedDelegate());
244  }
245  } else {
246  RangeTreeWidget *range_view = qobject_cast <RangeTreeWidget *> (m_view);
247  QFontMetrics *font = new QFontMetrics(KGlobalSettings::generalFont());
248  range_view->clear();
249 
250  range_view->setLabels(QStringList() << i18n("Source File") << i18n("Destination") << i18n("Time") << i18n("File Size") << i18n("Status"));
251  range_view->setRangeDelegate(0);
252 
253  switch(m_rangeType)
254  {
255  case TransferHistory::Host :
256  range_view->setRangeDelegate(new HostRangeDelegate(this));
257  break;
258  case TransferHistory::Size :
259  range_view->addRange(QVariant(0), QVariant(1024 * 1024),
260  i18n("Less than 1MiB"));
261  range_view->addRange(QVariant(1024 * 1024), QVariant(1024 * 1024 * 10),
262  i18n("Between 1MiB-10MiB"));
263  range_view->addRange(QVariant(1024 * 1024 * 10), QVariant(1024 * 1024 * 100),
264  i18n("Between 10MiB-100MiB"));
265  range_view->addRange(QVariant(1024 * 1024 * 100), QVariant(1024 * 1024 *1024),
266  i18n("Between 100MiB-1GiB"));
267  range_view->addRange(QVariant((double) 1024 * 1024 * 1024), QVariant((double) 1024 * 1024 * 1024 * 10),
268  i18n("More than 1GiB"));
269  break;
270  default:
271  range_view->addRange(QVariant(0), QVariant(1), i18n("Today"));
272  range_view->addRange(QVariant(1), QVariant(7), i18n("Last week"));
273  range_view->addRange(QVariant(7), QVariant(30), i18n("Last month"));
274  range_view->addRange(QVariant(30), QVariant(-1), i18n("A long time ago"));
275  }
276 
277  QList<int> list = Settings::historyColumnWidths();
278 
279  if (!list.isEmpty())
280  {
281  int j = 0;
282  foreach (int i, list)
283  {
284  range_view->setColumnWidth(j, i);
285  j++;
286  }
287  }
288  else
289  {
290  range_view->setColumnWidth(0, 200);
291  range_view->setColumnWidth(1, 250);
292  range_view->setColumnWidth(2, font->width(QDate::currentDate().toString()));
293  range_view->setColumnWidth(3, font->width("1500000 KiB"));
294  range_view->setColumnWidth(4, font->width(i18nc("the transfer has been finished", "Finished")));
295  }
296  }
297 
298  slotAddTransfers();
299 }
300 
301 void TransferHistory::slotSetListMode()
302 {
303  m_iconModeEnabled = false;
304  delete m_view;
305  m_view = new RangeTreeWidget(this);
306  m_verticalLayout->insertWidget(1, m_view);
307  slotLoadRangeType(m_rangeType);
308 
309  connect(m_searchBar, SIGNAL(textChanged(QString)), m_view, SLOT(setFilterRegExp(QString)));
310  // we connect the doubleClicked signal over an item to the open file action
311  connect(m_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(slotOpenFile(QModelIndex)));
312 }
313 
314 void TransferHistory::slotSetIconMode()
315 {
316  m_iconModeEnabled = true;
317  delete m_view;
318  m_view = new TransferHistoryCategorizedView(this);
319  m_verticalLayout->insertWidget(1, m_view);
320  slotLoadRangeType(m_rangeType);
321 
322  connect(m_searchBar, SIGNAL(textChanged(QString)), m_view, SLOT(setFilterRegExp(QString)));
323  connect(m_view, SIGNAL(deletedTransfer(QString,QModelIndex)),
324  SLOT(slotDeleteTransfer(QString,QModelIndex)));
325  connect(m_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(slotOpenFile(QModelIndex)));
326 }
327 
328 void TransferHistory::slotElementLoaded(int number, int total, const TransferHistoryItem &item)
329 {
330  m_progressBar->setValue(number*100/total);
331 
332  if (m_iconModeEnabled) {
333  ((TransferHistoryCategorizedView *) m_view)->addData(
334  item.dateTime().date(), item.source(), item.dest(), item.size());
335  }
336  else {
337  QVariantList attributeList;
338  attributeList.append(item.source());
339  attributeList.append(item.dest());
340  attributeList.append(item.dateTime().date().toString());
341  attributeList.append(KIO::convertSize(item.size()));
342  attributeList.append(statusText(item.state()));
343 
344  QVariant data;
345  if(m_rangeType == TransferHistory::Date) {
346  QDate date = item.dateTime().date();
347  data = QVariant(date.daysTo(QDate::currentDate()));
348  }
349  else if(m_rangeType == TransferHistory::Host) {
350  data = QVariant(item.source());
351  }
352  else {
353  data = QVariant(item.size());
354  }
355  ((RangeTreeWidget *) m_view)->add(data, attributeList);
356  }
357 }
358 
359 void TransferHistory::slotLoadFinished()
360 {
361  m_progressBar->hide();
362 }
TransferHistoryStore::load
virtual void load()
Definition: transferhistorystore.h:71
SizeCategorizedDelegate
Categorzes the transfers in size ranges.
Definition: transferhistorycategorizeddelegate.h:49
TransferHistoryStore::clear
virtual void clear()
Definition: transferhistorystore.h:72
TransferHistoryCategorizedView::clear
void clear()
Definition: transferhistorycategorizedview.cpp:84
Job::Finished
The job is stopped, but this also indicates that it stopped because an error occurred.
Definition: job.h:47
RangeTreeWidget::setRangeDelegate
void setRangeDelegate(RangeDelegate *delegate)
Set a delegate in case you want to create the ranges dinamically Ej, the host ranges delegate...
Definition: rangetreewidget.cpp:187
TransferHistory::sizeHint
virtual QSize sizeHint() const
Definition: transferhistory.cpp:114
TransferHistoryItem
Definition: transferhistorystore.h:23
transferhistorystore.h
RangeTreeWidget::setLabels
void setLabels(const QStringList &labels)
Definition: rangetreewidget.cpp:178
rangetreewidget.h
TransferHistoryItem::state
int state() const
Definition: transferhistorystore.cpp:105
QWidget
TransferHistoryItem::dateTime
QDateTime dateTime() const
Definition: transferhistorystore.cpp:115
TransferHistoryCategorizedDelegate::RoleDest
Definition: transferhistorycategorizeddelegate.h:26
HostCategorizedDelegate
Categorizes the transfer by source host.
Definition: transferhistorycategorizeddelegate.h:59
Settings::historyColumnWidths
static QList< int > historyColumnWidths()
Get The width of the columns in the history view.
Definition: settings.h:1000
transferhistorycategorizedview.h
transferhistory.h
TransferHistoryCategorizedView::data
QVariant data(const QModelIndex &index, TransferHistoryCategorizedDelegate::AlternativeRoles role) const
Definition: transferhistorycategorizedview.cpp:78
TransferGroupHandler::status
JobQueue::Status status() const
Definition: transfergrouphandler.h:45
TransferGroupHandler::data
QVariant data(int column)
Definition: transfergrouphandler.cpp:83
TransferHistoryItem::dest
QString dest() const
Definition: transferhistorystore.cpp:95
Job::Running
Definition: job.h:43
TransferHistory
Definition: transferhistory.h:27
newtransferdialog.h
HostRangeDelegate
Creates a ragen based on the host of the transfer.
Definition: rangetreewidget.h:113
TransferHistory::slotDeleteTransfer
void slotDeleteTransfer(const QString &url, const QModelIndex &index=QModelIndex())
Definition: transferhistory.cpp:131
RangeTreeWidget::currentItem
QStandardItem * currentItem(int column=-1)
Definition: rangetreewidget.cpp:212
transferhistorycategorizeddelegate.h
TransferHistoryItem::setSource
void setSource(const QString &source)
Definition: transferhistorystore.cpp:75
KGetSaveSizeDialog
Subclass to make sure that the size of the dialog is automatically stored and restored.
Definition: basedialog.h:32
TransferHistoryCategorizedView
Definition: transferhistorycategorizedview.h:25
Job::Aborted
The job is stopped.
Definition: job.h:45
DateCategorizedDelegate
Categorizes the transfers in date ranges.
Definition: transferhistorycategorizeddelegate.h:39
Job::Stopped
The job is being executed.
Definition: job.h:44
job.h
settings.h
NewTransferDialogHandler::showNewTransferDialog
static void showNewTransferDialog(const KUrl &url=KUrl())
Definition: newtransferdialog.cpp:493
RangeTreeWidget::addRange
int addRange(const QVariant &min, const QVariant &max, const QString &title)
Creates a range with a title between two values.
Definition: rangetreewidget.cpp:117
RangeTreeWidget::clear
void clear()
Definition: rangetreewidget.cpp:141
TransferHistoryStore::getStore
static TransferHistoryStore * getStore()
Definition: transferhistorystore.cpp:150
RangeTreeWidget
Definition: rangetreewidget.h:40
TransferHistory::TransferHistory
TransferHistory(QWidget *parent=0)
Definition: transferhistory.cpp:42
TransferHistoryCategorizedView::setCategorizedDelegate
void setCategorizedDelegate(TransferHistoryCategorizedDelegate *m_delegate)
Definition: transferhistorycategorizedview.cpp:94
TransferHistory::~TransferHistory
~TransferHistory()
Definition: transferhistory.cpp:109
TransferHistoryItem::size
int size() const
Definition: transferhistorystore.cpp:110
TransferHistoryStore::deleteItem
virtual void deleteItem(const TransferHistoryItem &item)
Definition: transferhistorystore.h:84
TransferHistoryItem::source
QString source() const
Definition: transferhistorystore.cpp:100
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:53:17 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