22 #include <QFileSystemWatcher>
23 #include <QFontMetrics>
26 #include <QModelIndex>
27 #include <QProgressBar>
28 #include <QStandardItem>
32 #include <KStandardDirs>
33 #include <KMessageBox>
35 #include <KTreeWidgetSearchLine>
37 #include <KGlobalSettings>
38 #include <kio/global.h>
39 #include <KPushButton>
45 m_progressBar(new QProgressBar(this)),
46 m_iconModeEnabled(true)
48 setAttribute(Qt::WA_DeleteOnClose);
49 setCaption(i18n(
"Transfer History"));
50 setButtons(KDialog::Close);
54 Ui::TransferHistory widget;
55 widget.setupUi(mainWidget);
60 m_iconView = widget.bt_iconview;
61 m_listView = widget.bt_listview;
63 m_listView->setIcon(KIcon(
"view-list-details"));
64 m_iconView->setIcon(KIcon(
"view-list-icons"));
66 connect(m_listView, SIGNAL(clicked()), SLOT(slotSetListMode()));
67 connect(m_iconView, SIGNAL(clicked()), SLOT(slotSetIconMode()));
70 m_rangeTypeCombobox = widget.rangeType;
72 m_verticalLayout = widget.vboxLayout;
73 m_hboxLayout = widget.hboxLayout;
74 m_searchBar = widget.searchBar;
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);
85 m_verticalLayout->addWidget(m_view);
86 m_verticalLayout->addWidget(m_progressBar);
88 watcher =
new QFileSystemWatcher();
89 watcher->addPath(KStandardDirs::locateLocal(
"appdata", QString()));
90 kDebug(5001) << watcher->directories();
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)),
101 connect(m_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(slotOpenFile(QModelIndex)));
102 connect(m_store, SIGNAL(loadFinished()), SLOT(slotLoadFinished()));
105 connect(m_searchBar, SIGNAL(textChanged(QString)), m_view, SLOT(setFilterRegExp(QString)));
120 void TransferHistory::slotDeleteTransfer()
122 if (!m_iconModeEnabled) {
125 slotDeleteTransfer(range_view->
currentItem(0)->text());
127 slotLoadRangeType(m_rangeType);
139 slotLoadRangeType(m_rangeType);
142 void TransferHistory::slotAddTransfers()
144 m_progressBar->show();
148 void TransferHistory::slotClear()
152 slotLoadRangeType(m_rangeType);
155 void TransferHistory::slotWriteDefault()
160 void TransferHistory::slotDownload()
162 if (!m_iconModeEnabled) {
167 void TransferHistory::contextMenuEvent(QContextMenuEvent *event)
171 if (!m_iconModeEnabled) {
173 if(range_view->currentIndex().parent().isValid()) {
174 QMenu *contextMenu =
new QMenu(
this);
175 contextMenu->addAction(m_actionDownload);
176 contextMenu->addAction(m_actionDelete_Selected);
179 contextMenu->addAction(m_openFile);
180 contextMenu->exec(QCursor::pos());
185 void TransferHistory::slotOpenFile(
const QModelIndex &index)
189 if (!m_iconModeEnabled) {
198 kDebug() <<
"Try to open the file : " << file;
199 if (!file.isEmpty()) {
200 new KRun(file,
this,
true,
false);
204 void TransferHistory::hideEvent(QHideEvent *event)
207 disconnect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(slotAddTransfers()));
216 return i18nc(
"The transfer is running",
"Running");
218 return i18nc(
"The transfer is stopped",
"Stopped");
220 return i18nc(
"The transfer is aborted",
"Aborted");
222 return i18nc(
"The transfer is finished",
"Finished");
228 void TransferHistory::slotLoadRangeType(
int type)
231 if (m_iconModeEnabled) {
236 case TransferHistory::Size :
239 case TransferHistory::Date :
247 QFontMetrics *font =
new QFontMetrics(KGlobalSettings::generalFont());
250 range_view->
setLabels(QStringList() << i18n(
"Source File") << i18n(
"Destination") << i18n(
"Time") << i18n(
"File Size") << i18n(
"Status"));
255 case TransferHistory::Host :
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"));
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"));
282 foreach (
int i, list)
284 range_view->setColumnWidth(j, i);
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")));
301 void TransferHistory::slotSetListMode()
303 m_iconModeEnabled =
false;
306 m_verticalLayout->insertWidget(1, m_view);
307 slotLoadRangeType(m_rangeType);
309 connect(m_searchBar, SIGNAL(textChanged(QString)), m_view, SLOT(setFilterRegExp(QString)));
311 connect(m_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(slotOpenFile(QModelIndex)));
314 void TransferHistory::slotSetIconMode()
316 m_iconModeEnabled =
true;
319 m_verticalLayout->insertWidget(1, m_view);
320 slotLoadRangeType(m_rangeType);
322 connect(m_searchBar, SIGNAL(textChanged(QString)), m_view, SLOT(setFilterRegExp(QString)));
323 connect(m_view, SIGNAL(deletedTransfer(QString,QModelIndex)),
325 connect(m_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(slotOpenFile(QModelIndex)));
328 void TransferHistory::slotElementLoaded(
int number,
int total,
const TransferHistoryItem &item)
330 m_progressBar->setValue(number*100/total);
332 if (m_iconModeEnabled) {
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()));
345 if(m_rangeType == TransferHistory::Date) {
346 QDate date = item.
dateTime().date();
347 data = QVariant(date.daysTo(QDate::currentDate()));
349 else if(m_rangeType == TransferHistory::Host) {
350 data = QVariant(item.
source());
353 data = QVariant(item.
size());
359 void TransferHistory::slotLoadFinished()
361 m_progressBar->hide();
Categorzes the transfers in size ranges.
The job is stopped, but this also indicates that it stopped because an error occurred.
virtual QSize sizeHint() const
QDateTime dateTime() const
Categorizes the transfer by source host.
static QList< int > historyColumnWidths()
Get The width of the columns in the history view.
QVariant data(const QModelIndex &index, TransferHistoryCategorizedDelegate::AlternativeRoles role) const
JobQueue::Status status() const
QVariant data(int column)
Creates a ragen based on the host of the transfer.
void slotDeleteTransfer(const QString &url, const QModelIndex &index=QModelIndex())
void setSource(const QString &source)
Subclass to make sure that the size of the dialog is automatically stored and restored.
Categorizes the transfers in date ranges.
The job is being executed.
static void showNewTransferDialog(const KUrl &url=KUrl())
static TransferHistoryStore * getStore()
TransferHistory(QWidget *parent=0)
void setCategorizedDelegate(TransferHistoryCategorizedDelegate *m_delegate)
virtual void deleteItem(const TransferHistoryItem &item)