1 /* This file is part of the KDE project
3 Copyright (C) 2002 by Patrick Charbonnier <pch@freeshell.org>
4 Based On Caitoo v.0.7.3 (c) 1998 - 2000, Matej Koss
5 Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
6 Copyright (C) 2006 - 2008 Urs Wolfer <uwolfer @ kde.org>
7 Copyright (C) 2006 Dario Massarin <nekkar@libero.it>
8 Copyright (C) 2008 Lukas Appelhans <l.appelhans@gmx.de>
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public
12 License as published by the Free Software Foundation; either
13 version 2 of the License, or (at your option) any later version.
16 #include "mainwindow.h"
18 #include "core/kget.h"
19 #include "core/transferhandler.h"
20 #include "core/transfergrouphandler.h"
21 #include "core/transfertreeselectionmodel.h"
22 #include "dbus/dbusmodelobserver.h"
24 #include "conf/preferencesdialog.h"
25 #include "ui/viewscontainer.h"
27 #include "ui/droptarget.h"
28 #include "ui/newtransferdialog.h"
29 #include "ui/history/transferhistory.h"
30 #include "ui/groupsettingsdialog.h"
31 #include "ui/transfersettingsdialog.h"
32 #include "ui/linkview/kget_linkview.h"
33 #include "extensions/webinterface/httpserver.h"
35 #include <kapplication.h>
36 #include <kstandarddirs.h>
37 #include <KInputDialog>
38 #include <kmessagebox.h>
39 #include <kshortcutsdialog.h>
40 #include <kedittoolbar.h>
41 #include <knotifyconfigwidget.h>
42 #include <kfiledialog.h>
43 #include <ktoolinvocation.h>
45 #include <kiconloader.h>
46 #include <kstandardaction.h>
49 #include <kactionmenu.h>
51 #include <kicondialog.h>
56 MainWindow::MainWindow(bool showMainwindow
, bool startWithoutAnimation
, QWidget
*parent
)
57 : KXmlGuiWindow( parent
),
60 m_startWithoutAnimation(startWithoutAnimation
),
63 // do not quit the app when it has been minimized to system tray and a new transfer dialog
64 // gets opened and closed again.
65 qApp
->setQuitOnLastWindowClosed(false);
66 setAttribute(Qt::WA_DeleteOnClose
, false);
74 createGUI("kgetui.rc");
76 m_viewsContainer
= new ViewsContainer(this);
77 // initialize the model observer to export percents over dbus
78 m_dbusModelObserver
= new DBusModelObserver();
80 setCentralWidget(m_viewsContainer
);
82 // restore position, size and visibility
83 move( Settings::mainPosition() );
84 setAutoSaveSettings();
85 setPlainCaption(i18n("KGet"));
87 if ( Settings::showMain() && showMainwindow
)
92 //Some of the widgets are initialized in slotDelayedInit()
93 QTimer::singleShot( 0, this, SLOT(slotDelayedInit()) );
95 // Update the title with the active transfers percent using the mainwindowmodelobserver
96 KGet::addObserver(new MainWindowModelObserver(this));
99 MainWindow::~MainWindow()
101 //Save the user's transfers
105 delete clipboardTimer
;
108 // reset konqueror integration (necessary if user enabled / disabled temporarily integration from tray)
109 slotKonquerorIntegration( Settings::konquerorIntegration() );
110 // the following call saves options set in above dtors
111 Settings::self()->writeConfig();
114 QSize
MainWindow::sizeHint() const
116 return QSize(720, 380);
119 int MainWindow::transfersPercent()
122 int activeTransfers
= 0;
123 foreach (const TransferHandler
*handler
, KGet::allTransfers()) {
124 if (handler
->status() == Job::Running
) {
126 percent
+= handler
->percent();
130 if (activeTransfers
> 0) {
131 return percent
/activeTransfers
;
138 void MainWindow::exportTransfers(bool plain
)
142 filter
= "*.kgt|" + i18n("KGet Transfer List") + " (*.kgt)";
145 QString filename
= KFileDialog::getSaveFileName
149 i18n("Export Transfers")
152 if(!filename
.isEmpty())
153 KGet::save(filename
, plain
);
156 void MainWindow::setupActions()
158 KAction
*newDownloadAction
= actionCollection()->addAction("new_download");
159 newDownloadAction
->setText(i18n("&New Download..."));
160 newDownloadAction
->setIcon(KIcon("document-new"));
161 newDownloadAction
->setShortcuts(KShortcut("Ctrl+N"));
162 connect(newDownloadAction
, SIGNAL(triggered()), SLOT(slotNewTransfer()));
164 KAction
*openAction
= actionCollection()->addAction("import_transfers");
165 openAction
->setText(i18n("&Import Transfers..."));
166 openAction
->setIcon(KIcon("document-open"));
167 openAction
->setShortcuts(KShortcut("Ctrl+I"));
168 connect(openAction
, SIGNAL(triggered()), SLOT(slotImportTransfers()));
170 KAction
*exportAction
= actionCollection()->addAction("export_transfers");
171 exportAction
->setText(i18n("&Export Transfers List..."));
172 exportAction
->setIcon(KIcon("document-export"));
173 exportAction
->setShortcuts(KShortcut("Ctrl+E"));
174 connect(exportAction
, SIGNAL(triggered()), SLOT(slotExportTransfers()));
176 KAction
*exportPlainAction
= actionCollection()->addAction("export_plain_transfers");
177 exportPlainAction
->setText(i18n("&Export Transfers as Plain Text"));
178 exportPlainAction
->setIcon(KIcon("document-export"));
179 exportPlainAction
->setShortcuts(KShortcut("Ctrl+P"));
180 connect(exportPlainAction
, SIGNAL(triggered()), SLOT(slotExportPlainTransfers()));
182 KAction
*deleteGroupAction
= actionCollection()->addAction("delete_groups");
183 deleteGroupAction
->setText(i18n("Delete Group"));
184 deleteGroupAction
->setIcon(KIcon("edit-delete"));
185 connect(deleteGroupAction
, SIGNAL(triggered()), SLOT(slotDeleteGroup()));
187 KAction
*renameGroupAction
= actionCollection()->addAction("rename_groups");
188 renameGroupAction
->setText(i18n("Rename Group"));
189 renameGroupAction
->setIcon(KIcon("edit-rename"));
190 connect(renameGroupAction
, SIGNAL(triggered()), SLOT(slotRenameGroup()));
192 KAction
*setIconGroupAction
= actionCollection()->addAction("seticon_groups");
193 setIconGroupAction
->setText(i18n("Set Icon"));
194 setIconGroupAction
->setIcon(KIcon("preferences-desktop-icons"));
195 connect(setIconGroupAction
, SIGNAL(triggered()), SLOT(slotSetIconGroup()));
197 m_autoPasteAction
= new KToggleAction(KIcon("edit-paste"),
198 i18n("Auto-Paste Mode"), actionCollection());
199 actionCollection()->addAction("auto_paste", m_autoPasteAction
);
200 m_autoPasteAction
->setChecked(Settings::autoPaste());
201 m_autoPasteAction
->setWhatsThis(i18n("<b>Auto paste</b> button toggles the auto-paste mode "
202 "on and off.\nWhen set, KGet will periodically scan "
203 "the clipboard for URLs and paste them automatically."));
204 connect(m_autoPasteAction
, SIGNAL(triggered()), SLOT(slotToggleAutoPaste()));
206 m_konquerorIntegration
= new KToggleAction(KIcon("konqueror"),
207 i18n("Use KGet as Konqueror Download Manager"), actionCollection());
208 actionCollection()->addAction("konqueror_integration", m_konquerorIntegration
);
209 connect(m_konquerorIntegration
, SIGNAL(triggered(bool)), SLOT(slotTrayKonquerorIntegration(bool)));
210 m_konquerorIntegration
->setChecked(Settings::konquerorIntegration());
212 // local - Destroys all sub-windows and exits
213 KStandardAction::quit(this, SLOT(slotQuit()), actionCollection());
214 // local - Standard configure actions
215 KStandardAction::preferences(this, SLOT(slotPreferences()), actionCollection());
216 KStandardAction::configureToolbars(this, SLOT(slotConfigureToolbars()), actionCollection());
217 KStandardAction::keyBindings(this, SLOT(slotConfigureKeys()), actionCollection());
219 KStandardAction::configureNotifications(this, SLOT(slotConfigureNotifications()), actionCollection());
220 m_menubarAction
= KStandardAction::showMenubar(this, SLOT(slotShowMenubar()), actionCollection());
221 m_menubarAction
->setChecked(!menuBar()->isHidden());
223 // Transfer related actions
224 KAction
*deleteSelectedAction
= actionCollection()->addAction("delete_selected_download");
225 deleteSelectedAction
->setText(i18nc("delete selected transfer item", "Delete Selected"));
226 deleteSelectedAction
->setIcon(KIcon("edit-delete"));
227 deleteSelectedAction
->setShortcuts(KShortcut("Del"));
228 connect(deleteSelectedAction
, SIGNAL(triggered()), SLOT(slotDeleteSelected()));
230 KAction
*deleteAllFinishedAction
= actionCollection()->addAction("delete_all_finished");
231 deleteAllFinishedAction
->setText(i18nc("delete all finished transfers", "Delete all finished"));
232 deleteAllFinishedAction
->setIcon(KIcon("edit-clear-list"));
233 connect(deleteAllFinishedAction
, SIGNAL(triggered()), SLOT(slotDeleteFinished()));
235 KAction
*redownloadSelectedAction
= actionCollection()->addAction("redownload_selected_download");
236 redownloadSelectedAction
->setText(i18nc("redownload selected transfer item", "Redownload Selected"));
237 redownloadSelectedAction
->setIcon(KIcon("view-refresh"));
238 connect(redownloadSelectedAction
, SIGNAL(triggered()), SLOT(slotRedownloadSelected()));
240 KAction
*startAllAction
= actionCollection()->addAction("start_all_download");
241 startAllAction
->setText(i18n("Start / Resume All"));
242 startAllAction
->setIcon(KIcon("media-seek-forward"));
243 startAllAction
->setShortcuts(KShortcut("Ctrl+R"));
244 connect(startAllAction
, SIGNAL(triggered()), SLOT(slotStartAllDownload()));
246 KAction
*startSelectedAction
= actionCollection()->addAction("start_selected_download");
247 startSelectedAction
->setText(i18n("Start / Resume Selected"));
248 startSelectedAction
->setIcon(KIcon("media-playback-start"));
249 connect(startSelectedAction
, SIGNAL(triggered()), SLOT(slotStartSelectedDownload()));
251 KAction
*stopAllAction
= actionCollection()->addAction("stop_all_download");
252 stopAllAction
->setText(i18n("Stop All"));
253 stopAllAction
->setIcon(KIcon("media-playback-pause"));
254 stopAllAction
->setShortcuts(KShortcut("Ctrl+P"));
255 connect(stopAllAction
, SIGNAL(triggered()), SLOT(slotStopAllDownload()));
257 KAction
*stopSelectedAction
= actionCollection()->addAction("stop_selected_download");
258 stopSelectedAction
->setText(i18n("Stop Selected"));
259 stopSelectedAction
->setIcon(KIcon("media-playback-pause"));
260 connect(stopSelectedAction
, SIGNAL(triggered()), SLOT(slotStopSelectedDownload()));
262 KActionMenu
*startActionMenu
= new KActionMenu(KIcon("media-playback-start"), i18n("Start / Resume"),
264 actionCollection()->addAction("start_menu", startActionMenu
);
265 startActionMenu
->setDelayed(true);
266 startActionMenu
->addAction(startAllAction
);
267 startActionMenu
->addAction(startSelectedAction
);
268 connect(startActionMenu
, SIGNAL(triggered()), SLOT(slotStartDownload()));
270 KActionMenu
*stopActionMenu
= new KActionMenu(KIcon("media-playback-pause"), i18n("Stop"),
272 actionCollection()->addAction("stop_menu", stopActionMenu
);
273 stopActionMenu
->setDelayed(true);
274 stopActionMenu
->addAction(stopAllAction
);
275 stopActionMenu
->addAction(stopSelectedAction
);
276 connect(stopActionMenu
, SIGNAL(triggered()), SLOT(slotStopDownload()));
278 KAction
*openDestAction
= actionCollection()->addAction("transfer_open_dest");
279 openDestAction
->setText(i18n("Open Destination"));
280 openDestAction
->setIcon(KIcon("document-open"));
281 connect(openDestAction
, SIGNAL(triggered()), SLOT(slotTransfersOpenDest()));
283 KAction
*openFileAction
= actionCollection()->addAction("transfer_open_file");
284 openFileAction
->setText(i18n("Open File"));
285 openFileAction
->setIcon(KIcon("document-open"));
286 connect(openFileAction
, SIGNAL(triggered()), SLOT(slotTransfersOpenFile()));
288 KAction
*showDetailsAction
= actionCollection()->addAction("transfer_show_details");
289 showDetailsAction
->setText(i18n("Show Details"));
290 showDetailsAction
->setIcon(KIcon("document-properties"));
291 connect(showDetailsAction
, SIGNAL(triggered()), SLOT(slotTransfersShowDetails()));
293 KAction
*copyUrlAction
= actionCollection()->addAction("transfer_copy_source_url");
294 copyUrlAction
->setText(i18n("Copy URL to Clipboard"));
295 copyUrlAction
->setIcon(KIcon("edit-copy"));
296 connect(copyUrlAction
, SIGNAL(triggered()), SLOT(slotTransfersCopySourceUrl()));
298 KToggleAction
*showDropTargetAction
= new KToggleAction(KIcon("kget"),
299 i18n("Show Drop Target"), actionCollection());
300 actionCollection()->addAction("show_drop_target", showDropTargetAction
);
301 showDropTargetAction
->setChecked(Settings::showDropTarget());
302 connect(showDropTargetAction
, SIGNAL(triggered()), SLOT(slotToggleDropTarget()));
304 KAction
*transferHistoryAction
= actionCollection()->addAction("transfer_history");
305 transferHistoryAction
->setText(i18n("&Transfer History..."));
306 transferHistoryAction
->setIcon(KIcon("view-history"));
307 transferHistoryAction
->setShortcuts(KShortcut("Ctrl+H"));
308 connect(transferHistoryAction
, SIGNAL(triggered()), SLOT(slotTransferHistory()));
310 KAction
*transferGroupSettingsAction
= actionCollection()->addAction("transfer_group_settings");
311 transferGroupSettingsAction
->setText(i18n("&Group Settings..."));
312 transferGroupSettingsAction
->setIcon(KIcon("preferences-system"));
313 transferGroupSettingsAction
->setShortcuts(KShortcut("Ctrl+G"));
314 connect(transferGroupSettingsAction
, SIGNAL(triggered()), SLOT(slotTransferGroupSettings()));
316 KAction
*transferSettingsAction
= actionCollection()->addAction("transfer_settings");
317 transferSettingsAction
->setText(i18n("&Transfer Settings..."));
318 transferSettingsAction
->setIcon(KIcon("preferences-system"));
319 transferSettingsAction
->setShortcuts(KShortcut("Ctrl+T"));
320 connect(transferSettingsAction
, SIGNAL(triggered()), SLOT(slotTransferSettings()));
322 KAction
*listLinksAction
= actionCollection()->addAction("import_links");
323 listLinksAction
->setText(i18n("Import &Links..."));
324 listLinksAction
->setIcon(KIcon("view-list-text"));
325 listLinksAction
->setShortcuts(KShortcut("Ctrl+L"));
326 connect(listLinksAction
, SIGNAL(triggered()), SLOT(slotShowListLinks()));
329 void MainWindow::slotDelayedInit()
331 //Here we import the user's transfers.
332 KGet::load( KStandardDirs::locateLocal("appdata", "transfers.kgt") );
334 m_dock
= new Tray(this);
336 if(Settings::enableSystemTray()) {
342 setAcceptDrops(true);
344 // enable hide toolbar
345 setStandardToolBarMenuEnabled(true);
347 // session management stuff
348 connect(kapp
, SIGNAL(saveYourself()), SLOT(slotSaveMyself()));
350 // set auto-resume in kioslaverc (is there a cleaner way?)
351 KConfig
cfg("kioslaverc", KConfig::NoGlobals
);
352 cfg
.group(QString()).writeEntry("AutoResume", true);
356 m_drop
= new DropTarget(this);
358 if (Settings::firstRun()) {
359 if (KMessageBox::questionYesNoCancel(this ,i18n("This is the first time you have run KGet.\n"
360 "Would you like to enable KGet as the download manager for Konqueror?"),
361 i18n("Konqueror Integration"), KGuiItem(i18n("Enable")),
362 KGuiItem(i18n("Do Not Enable")))
363 == KMessageBox::Yes
) {
364 Settings::setKonquerorIntegration(true);
365 slotKonquerorIntegration(true);
368 m_drop
->setDropTargetVisible(true);
370 // reset the FirstRun config option
371 Settings::setFirstRun(false);
374 if (Settings::showDropTarget() && !m_startWithoutAnimation
)
375 m_drop
->setDropTargetVisible(true);
378 lastClipboard
= QApplication::clipboard()->text( QClipboard::Clipboard
).trimmed();
379 clipboardTimer
= new QTimer(this);
380 connect(clipboardTimer
, SIGNAL(timeout()), SLOT(slotCheckClipboard()));
381 if ( Settings::autoPaste() )
382 clipboardTimer
->start(1000);
384 // kget kuiserver integration
387 if (Settings::webinterfaceEnabled())
388 m_webinterface
= new HttpServer(this);
390 if (Settings::speedLimit())
392 KGet::setGlobalDownloadLimit(Settings::globalDownloadLimit());
393 KGet::setGlobalUploadLimit(Settings::globalUploadLimit());
397 KGet::setGlobalDownloadLimit(0);
398 KGet::setGlobalUploadLimit(0);
402 void MainWindow::slotToggleDropTarget()
404 actionCollection()->action("show_drop_target")->setChecked(!m_drop
->isVisible());
406 m_drop
->setDropTargetVisible(!m_drop
->isVisible());
409 void MainWindow::slotNewTransfer()
411 NewTransferDialog::instance(this)->showDialog();
414 void MainWindow::slotImportTransfers()
416 QString filename
= KFileDialog::getOpenFileName(KUrl(),
417 "*.kgt *.metalink *.torrent|" + i18n("All Openable Files") +
418 " (*.kgt *.metalink *.torrent)", this, i18n("Open File"));
420 if(filename
.endsWith(".kgt"))
422 KGet::load(filename
);
426 if(!filename
.isEmpty())
427 KGet::addTransfer( KUrl( filename
) );
430 void MainWindow::slotUpdateTitlePercent()
432 int percent
= transfersPercent();
434 setPlainCaption(i18nc("window title including overall download progress in percent", "KGet - %1%", percent
));
436 setPlainCaption(i18n("KGet"));
440 void MainWindow::slotQuit()
442 if (KGet::schedulerRunning()) {
443 if (KMessageBox::warningYesNoCancel(this,
444 i18n("Some transfers are still running.\n"
445 "Are you sure you want to close KGet?"),
446 i18n("Confirm Quit"),
447 KStandardGuiItem::yes(), KStandardGuiItem::no(), KStandardGuiItem::cancel(),
448 "ExitWithActiveTransfers") != KMessageBox::Yes
)
451 KGet::setSchedulerRunning(false);
454 Settings::self()->writeConfig();
458 void MainWindow::slotPreferences()
460 // an instance the dialog could be already created and could be cached,
461 // in which case you want to display the cached dialog
462 if ( PreferencesDialog::showDialog( "preferences" ) )
465 // we didn't find an instance of this dialog, so lets create it
466 PreferencesDialog
* dialog
= new PreferencesDialog( this, Settings::self() );
468 // keep us informed when the user changes settings
469 connect( dialog
, SIGNAL(settingsChanged(const QString
&)),
470 this, SLOT(slotNewConfig()) );
475 void MainWindow::slotExportTransfers()
477 exportTransfers(false);
480 void MainWindow::slotExportPlainTransfers()
482 exportTransfers(true);
485 void MainWindow::slotDeleteGroup()
487 foreach(TransferGroupHandler
* it
, KGet::selectedTransferGroups())
490 KGet::delGroup(it
->name());
494 void MainWindow::slotRenameGroup()
499 foreach(TransferGroupHandler
* it
, KGet::selectedTransferGroups())
501 groupName
= KInputDialog::getText(i18n("Enter Group Name"),
502 i18n("Group name:"), it
->name(), &ok
, this);
504 it
->setName(groupName
);
508 void MainWindow::slotSetIconGroup()
510 KIconDialog
dialog(this);
511 QString iconName
= dialog
.getIcon();
512 TransferTreeSelectionModel
*selModel
= KGet::selectionModel();
514 QModelIndexList indexList
= selModel
->selectedRows();
516 if (!iconName
.isEmpty())
518 foreach (TransferGroupHandler
*group
, KGet::selectedTransferGroups())
520 group
->setIconName(iconName
);
523 //emit dataChanged(indexList.first(),indexList.last());
526 void MainWindow::slotStartDownload()
528 if(KGet::selectedTransfers().size() == 0)
529 slotStartAllDownload();
531 slotStartSelectedDownload();
534 void MainWindow::slotStartAllDownload()
536 KGet::setSchedulerRunning(true);
539 void MainWindow::slotStartSelectedDownload()
541 foreach(TransferHandler
* it
, KGet::selectedTransfers())
545 void MainWindow::slotStopDownload()
547 if(KGet::selectedTransfers().size() == 0)
548 slotStopAllDownload();
550 slotStopSelectedDownload();
553 void MainWindow::slotStopAllDownload()
555 KGet::setSchedulerRunning(false);
558 void MainWindow::slotStopSelectedDownload()
560 foreach (TransferHandler
* it
, KGet::selectedTransfers())
564 void MainWindow::slotDeleteSelected()
566 foreach(TransferHandler
* it
, KGet::selectedTransfers())
569 m_viewsContainer
->closeTransferDetails(it
);
570 KGet::delTransfer(it
);
574 void MainWindow::slotRedownloadSelected()
576 foreach(TransferHandler
* it
, KGet::selectedTransfers())
578 KGet::redownloadTransfer(it
);
582 void MainWindow::slotTransfersOpenDest()
584 QStringList openedDirs
;
585 foreach(TransferHandler
* it
, KGet::selectedTransfers())
587 QString directory
= it
->dest().directory();
588 if( !openedDirs
.contains( directory
) )
590 new KRun(directory
, this, 0, true, false);
591 openedDirs
.append( directory
);
596 void MainWindow::slotTransfersOpenFile()
598 foreach(TransferHandler
* it
, KGet::selectedTransfers())
600 new KRun(it
->dest(), this, 0, true, false);
604 void MainWindow::slotTransfersShowDetails()
606 foreach(TransferHandler
* it
, KGet::selectedTransfers())
608 m_viewsContainer
->showTransferDetails(it
);
612 void MainWindow::slotTransfersCopySourceUrl()
614 foreach(TransferHandler
* it
, KGet::selectedTransfers())
616 QString sourceurl
= it
->source().url();
617 QClipboard
*cb
= QApplication::clipboard();
618 cb
->setText(sourceurl
, QClipboard::Selection
);
619 cb
->setText(sourceurl
, QClipboard::Clipboard
);
623 void MainWindow::slotDeleteFinished()
625 foreach(TransferHandler
* it
, KGet::finishedTransfers())
628 m_viewsContainer
->closeTransferDetails(it
);
629 KGet::delTransfer(it
);
633 void MainWindow::slotConfigureNotifications()
635 KNotifyConfigWidget::configure(this);
638 void MainWindow::slotConfigureKeys()
640 KShortcutsDialog::configure(actionCollection());
643 void MainWindow::slotConfigureToolbars()
645 KEditToolBar
edit( actionCollection() );
646 connect(&edit
, SIGNAL( newToolbarConfig() ), this, SLOT( slotNewToolbarConfig() ));
651 void MainWindow::slotSaveMyself()
653 // save last parameters ..
654 Settings::setMainPosition( pos() );
655 // .. and write config to disk
656 Settings::self()->writeConfig();
659 void MainWindow::slotNewToolbarConfig()
664 void MainWindow::slotNewConfig()
666 // Update here properties modified in the config dialog and not
667 // parsed often by the code. When clicking Ok or Apply of
668 // PreferencesDialog, this function is called.
670 m_viewsContainer
->setExpandableDetails(Settings::showExpandableTransferDetails());
671 m_drop
->setDropTargetVisible(Settings::showDropTarget(), false);
672 m_dock
->setVisible(Settings::enableSystemTray());
674 if(!Settings::enableSystemTray())
677 slotKonquerorIntegration(Settings::konquerorIntegration());
678 m_konquerorIntegration
->setChecked(Settings::konquerorIntegration());
682 if (Settings::autoPaste())
683 clipboardTimer
->start(1000);
685 clipboardTimer
->stop();
686 m_autoPasteAction
->setChecked(Settings::autoPaste());
688 if (Settings::webinterfaceEnabled() && !m_webinterface
) {
689 m_webinterface
= new HttpServer(this);
690 } else if (m_webinterface
&& !Settings::webinterfaceEnabled()) {
691 delete m_webinterface
;
695 if (Settings::speedLimit())
697 KGet::setGlobalDownloadLimit(Settings::globalDownloadLimit());
698 KGet::setGlobalUploadLimit(Settings::globalUploadLimit());
702 KGet::setGlobalDownloadLimit(0);
703 KGet::setGlobalUploadLimit(0);
706 KGet::settingsChanged();
709 void MainWindow::slotToggleAutoPaste()
711 bool autoPaste
= !Settings::autoPaste();
712 Settings::setAutoPaste( autoPaste
);
715 clipboardTimer
->start(1000);
717 clipboardTimer
->stop();
718 m_autoPasteAction
->setChecked(autoPaste
);
721 void MainWindow::slotCheckClipboard()
723 QString clipData
= QApplication::clipboard()->text( QClipboard::Clipboard
).trimmed();
725 if (clipData
!= lastClipboard
)
727 lastClipboard
= clipData
;
728 if (lastClipboard
.isEmpty())
731 KUrl url
= KUrl(lastClipboard
);
733 if (url
.isValid() && !url
.isLocalFile())
734 KGet::addTransfer( url
);
738 void MainWindow::slotTrayKonquerorIntegration(bool enable
)
740 slotKonquerorIntegration(enable
);
741 if (!enable
&& Settings::konquerorIntegration() && !Settings::expertMode())
743 KGet::showNotification(this, KNotification::Notification
,
744 i18n("KGet has been temporarily disabled as download manager for Konqueror. "
745 "If you want to disable it forever, go to Settings->Advanced and disable \"Use "
746 "as download manager for Konqueror\"."),
748 /*KMessageBox::information(this,
749 i18n("KGet has been temporarily disabled as download manager for Konqueror. "
750 "If you want to disable it forever, go to Settings->Advanced and disable \"Use "
751 "as download manager for Konqueror\"."),
752 i18n("Konqueror Integration disabled"),
753 "KonquerorIntegrationDisabled");*/
757 void MainWindow::slotKonquerorIntegration(bool konquerorIntegration
)
759 KConfig
cfgKonqueror("konquerorrc", KConfig::NoGlobals
);
760 cfgKonqueror
.group("HTML Settings").writeEntry("DownloadManager",
761 QString(konquerorIntegration
? "kget" : QString()));
765 void MainWindow::slotShowMenubar()
767 if (m_menubarAction
->isChecked())
773 void MainWindow::setSystemTrayDownloading(bool running
)
777 m_dock
->setDownloading(running
);
780 void MainWindow::importLinks(const QList
<QString
> &links
)
782 KGetLinkView
*link_view
= new KGetLinkView(this);
783 link_view
->setLinks(links
);
787 void MainWindow::slotTransferHistory()
789 TransferHistory
*history
= new TransferHistory();
793 void MainWindow::slotTransferGroupSettings()
796 QList
<TransferGroupHandler
*> list
= KGet::selectedTransferGroups();
797 foreach(TransferGroupHandler
* group
, list
)
799 GroupSettingsDialog
*settings
= new GroupSettingsDialog(this, group
);
804 void MainWindow::slotTransferSettings()
807 QList
<TransferHandler
*> list
= KGet::selectedTransfers();
808 foreach(TransferHandler
* transfer
, list
)
810 TransferSettingsDialog
*settings
= new TransferSettingsDialog(this, transfer
);
815 /** slots for link list **/
816 void MainWindow::slotShowListLinks()
818 KGetLinkView
*link_view
= new KGetLinkView(this);
819 link_view
->importUrl();
823 void MainWindow::slotImportUrl(const QString
&url
)
825 KGetLinkView
*link_view
= new KGetLinkView(this);
826 link_view
->importUrl(url
);
831 void MainWindow::closeEvent( QCloseEvent
* e
)
833 // if the event comes from out the application (close event) we decide between close or hide
834 // if the event comes from the application (system shutdown) we say goodbye
835 if(e
->spontaneous()) {
837 if(!Settings::enableSystemTray()) {
846 void MainWindow::dragEnterEvent(QDragEnterEvent
* event
)
848 event
->setAccepted(KUrl::List::canDecode(event
->mimeData())
849 || event
->mimeData()->hasText());
852 void MainWindow::dropEvent(QDropEvent
* event
)
854 KUrl::List list
= KUrl::List::fromMimeData(event
->mimeData());
859 if (list
.count() == 1 && list
.first().url().endsWith(".kgt"))
861 int msgBoxResult
= KMessageBox::questionYesNoCancel(this, i18n("The dropped file is a KGet-Transferlist"), "KGet",
862 KGuiItem(i18n("&Download"), KIcon("document-save")),
863 KGuiItem(i18n("&Load transferlist"), KIcon("list-add")), KStandardGuiItem::cancel());
865 if (msgBoxResult
== 3) //Download
866 NewTransferDialog::instance(this)->showDialog(list
.first().url());
867 if (msgBoxResult
== 4) //Load
868 KGet::load(list
.first().url());
872 if (list
.count() == 1)
874 str
= event
->mimeData()->text();
875 NewTransferDialog::instance(this)->showDialog(str
);
878 NewTransferDialog::instance(this)->showDialog(list
);
883 NewTransferDialog::instance(this)->showDialog();
888 /** DBUS interface */
890 void MainWindow::addTransfer(const QString
& src
, const QString
& dest
, bool start
)
892 // split src for the case it is a QStringList (e.g. from konqueror plugin)
893 KGet::addTransfer(src
.split(';'), dest
, QString(), start
);
896 void MainWindow::showNewTransferDialog(const QStringList
&urls
)
898 NewTransferDialog::instance(this)->showDialog(urls
);
901 bool MainWindow::dropTargetVisible() const
903 return m_drop
->isVisible();
906 void MainWindow::setDropTargetVisible( bool setVisible
)
908 if ( setVisible
!= Settings::showDropTarget() )
909 m_drop
->setDropTargetVisible( setVisible
);
912 void MainWindow::setOfflineMode( bool offline
)
914 KGet::setSchedulerRunning(offline
);
917 bool MainWindow::offlineMode() const
919 return !KGet::schedulerRunning();
922 QVariantMap
MainWindow::transfers() const
924 return m_dbusModelObserver
->transfers();
927 int MainWindow::transfersSpeed() const
929 return m_dbusModelObserver
->transfersSpeed();
932 MainWindowModelObserver::MainWindowModelObserver(MainWindow
*window
)
936 m_groupObserver
= new MainWindowGroupObserver(window
);
939 void MainWindowModelObserver::addedTransferGroupEvent(TransferGroupHandler
*group
)
941 group
->addObserver(m_groupObserver
);
944 void MainWindowModelObserver::removedTransferGroupEvent(TransferGroupHandler
*group
)
946 group
->delObserver(m_groupObserver
);
949 MainWindowGroupObserver::MainWindowGroupObserver(MainWindow
*window
)
955 void MainWindowGroupObserver::groupChangedEvent(TransferGroupHandler
* group
)
957 TransferGroupHandler::ChangesFlags transferFlags
= group
->changesFlags(this);
958 if (transferFlags
& TransferGroup::Gc_Percent
) {
959 m_window
->slotUpdateTitlePercent();
961 group
->resetChangesFlags(this);
964 /**void MainWindowGroupObserver::addedTransferEvent(TransferHandler * transfer, TransferHandler * after)
970 void MainWindowGroupObserver::removedTransferEvent(TransferHandler * transfer)
975 void MainWindowGroupObserver::movedTransferEvent(TransferHandler * transfer, TransferHandler * after)
981 #include "mainwindow.moc"