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, 2007 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);
73 createGUI("kgetui.rc");
75 m_viewsContainer
= new ViewsContainer(this);
76 // initialize the model observer to export percents over dbus
77 m_dbusModelObserver
= new DBusModelObserver();
79 setCentralWidget(m_viewsContainer
);
81 // restore position, size and visibility
82 move( Settings::mainPosition() );
83 setAutoSaveSettings();
84 setPlainCaption(i18n("KGet"));
86 if ( Settings::showMain() && showMainwindow
)
91 //Some of the widgets are initialized in slotDelayedInit()
92 QTimer::singleShot( 0, this, SLOT(slotDelayedInit()) );
95 MainWindow::~MainWindow()
97 //Save the user's transfers
101 delete clipboardTimer
;
104 // reset konqueror integration (necessary if user enabled / disabled temporarily integration from tray)
105 slotKonquerorIntegration( Settings::konquerorIntegration() );
106 // the following call saves options set in above dtors
107 Settings::self()->writeConfig();
110 QSize
MainWindow::sizeHint() const
112 return QSize(720, 380);
115 void MainWindow::setupActions()
117 QAction
*newDownloadAction
= actionCollection()->addAction("new_download");
118 newDownloadAction
->setText(i18n("&New Download..."));
119 newDownloadAction
->setIcon(KIcon("document-new"));
120 newDownloadAction
->setShortcuts(KShortcut("Ctrl+N"));
121 connect(newDownloadAction
, SIGNAL(triggered()), SLOT(slotNewTransfer()));
123 QAction
*openAction
= actionCollection()->addAction("import_transfers");
124 openAction
->setText(i18n("&Import Transfers..."));
125 openAction
->setIcon(KIcon("document-open"));
126 openAction
->setShortcuts(KShortcut("Ctrl+I"));
127 connect(openAction
, SIGNAL(triggered()), SLOT(slotImportTransfers()));
129 QAction
*exportAction
= actionCollection()->addAction("export_transfers");
130 exportAction
->setText(i18n("&Export Transfers List..."));
131 exportAction
->setIcon(KIcon("document-export"));
132 exportAction
->setShortcuts(KShortcut("Ctrl+E"));
133 connect(exportAction
, SIGNAL(triggered()), SLOT(slotExportTransfers()));
135 QAction
*deleteGroupAction
= actionCollection()->addAction("delete_groups");
136 deleteGroupAction
->setText(i18n("Delete Group"));
137 deleteGroupAction
->setIcon(KIcon("edit-delete"));
138 connect(deleteGroupAction
, SIGNAL(triggered()), SLOT(slotDeleteGroup()));
140 QAction
*renameGroupAction
= actionCollection()->addAction("rename_groups");
141 renameGroupAction
->setText(i18n("Rename Group"));
142 renameGroupAction
->setIcon(KIcon("edit-rename"));
143 connect(renameGroupAction
, SIGNAL(triggered()), SLOT(slotRenameGroup()));
145 QAction
*setIconGroupAction
= actionCollection()->addAction("seticon_groups");
146 setIconGroupAction
->setText(i18n("Set Icon"));
147 setIconGroupAction
->setIcon(KIcon("preferences-desktop-icons"));
148 connect(setIconGroupAction
, SIGNAL(triggered()), SLOT(slotSetIconGroup()));
150 m_autoPasteAction
= new KToggleAction(KIcon("edit-paste"),
151 i18n("Auto-Paste Mode"), actionCollection());
152 actionCollection()->addAction("auto_paste", m_autoPasteAction
);
153 m_autoPasteAction
->setChecked(Settings::autoPaste());
154 m_autoPasteAction
->setWhatsThis(i18n("<b>Auto paste</b> button toggles the auto-paste mode "
155 "on and off.\nWhen set, KGet will periodically scan "
156 "the clipboard for URLs and paste them automatically."));
157 connect(m_autoPasteAction
, SIGNAL(triggered()), SLOT(slotToggleAutoPaste()));
159 m_konquerorIntegration
= new KToggleAction(KIcon("konqueror"),
160 i18n("Use KGet as Konqueror Download Manager"), actionCollection());
161 actionCollection()->addAction("konqueror_integration", m_konquerorIntegration
);
162 connect(m_konquerorIntegration
, SIGNAL(triggered(bool)), SLOT(slotTrayKonquerorIntegration(bool)));
163 m_konquerorIntegration
->setChecked(Settings::konquerorIntegration());
165 // local - Destroys all sub-windows and exits
166 QAction
*quitAction
= KStandardAction::quit(this, SLOT(slotQuit()), actionCollection());
167 actionCollection()->addAction("quit", quitAction
);
168 // local - Standard configure actions
169 QAction
*preferencesAction
= KStandardAction::preferences(this, SLOT(slotPreferences()), actionCollection());
170 actionCollection()->addAction("preferences", preferencesAction
);
171 QAction
*configToolbarAction
= KStandardAction::configureToolbars(this, SLOT(slotConfigureToolbars()), actionCollection());
172 actionCollection()->addAction("configure_toolbars", configToolbarAction
);
173 QAction
*keyBindingsAction
= KStandardAction::keyBindings(this, SLOT(slotConfigureKeys()), actionCollection());
174 actionCollection()->addAction("configure_keys", keyBindingsAction
);
175 QAction
*cinfigNotifyAction
= KStandardAction::configureNotifications(this, SLOT(slotConfigureNotifications()), actionCollection());
176 actionCollection()->addAction("configure_notifications", cinfigNotifyAction
);
177 m_menubarAction
= KStandardAction::showMenubar(this, SLOT(slotShowMenubar()), actionCollection());
178 m_menubarAction
->setChecked(!menuBar()->isHidden());
179 actionCollection()->addAction("settings_showmenubar", m_menubarAction
);
181 // Transfer related actions
182 QAction
*deleteSelectedAction
= actionCollection()->addAction("delete_selected_download");
183 deleteSelectedAction
->setText(i18nc("delete selected transfer item", "Delete Selected"));
184 deleteSelectedAction
->setIcon(KIcon("edit-delete"));
185 deleteSelectedAction
->setShortcuts(KShortcut("Del"));
186 connect(deleteSelectedAction
, SIGNAL(triggered()), SLOT(slotDeleteSelected()));
188 QAction
*deleteAllFinishedAction
= actionCollection()->addAction("delete_all_finished");
189 deleteAllFinishedAction
->setText(i18nc("delete all finished transfers", "Delete all finished"));
190 deleteAllFinishedAction
->setIcon(KIcon("edit-clear-list"));
191 connect(deleteAllFinishedAction
, SIGNAL(triggered()), SLOT(slotDeleteFinished()));
193 QAction
*redownloadSelectedAction
= actionCollection()->addAction("redownload_selected_download");
194 redownloadSelectedAction
->setText(i18nc("redownload selected transfer item", "Redownload Selected"));
195 redownloadSelectedAction
->setIcon(KIcon("view-refresh"));
196 connect(redownloadSelectedAction
, SIGNAL(triggered()), SLOT(slotRedownloadSelected()));
198 QAction
*startAllAction
= actionCollection()->addAction("start_all_download");
199 startAllAction
->setText(i18n("Start / Resume All"));
200 startAllAction
->setIcon(KIcon("media-seek-forward"));
201 startAllAction
->setShortcuts(KShortcut("Ctrl+R"));
202 connect(startAllAction
, SIGNAL(triggered()), SLOT(slotStartAllDownload()));
204 QAction
*startSelectedAction
= actionCollection()->addAction("start_selected_download");
205 startSelectedAction
->setText(i18n("Start / Resume Selected"));
206 startSelectedAction
->setIcon(KIcon("media-playback-start"));
207 connect(startSelectedAction
, SIGNAL(triggered()), SLOT(slotStartSelectedDownload()));
209 QAction
*stopAllAction
= actionCollection()->addAction("stop_all_download");
210 stopAllAction
->setText(i18n("Stop All"));
211 stopAllAction
->setIcon(KIcon("media-playback-pause"));
212 stopAllAction
->setShortcuts(KShortcut("Ctrl+P"));
213 connect(stopAllAction
, SIGNAL(triggered()), SLOT(slotStopAllDownload()));
215 QAction
*stopSelectedAction
= actionCollection()->addAction("stop_selected_download");
216 stopSelectedAction
->setText(i18n("Stop Selected"));
217 stopSelectedAction
->setIcon(KIcon("media-playback-pause"));
218 connect(stopSelectedAction
, SIGNAL(triggered()), SLOT(slotStopSelectedDownload()));
220 KActionMenu
*startActionMenu
= new KActionMenu(KIcon("media-playback-start"), i18n("Start / Resume"),
222 actionCollection()->addAction("start_menu", startActionMenu
);
223 startActionMenu
->setDelayed(true);
224 startActionMenu
->addAction(startAllAction
);
225 startActionMenu
->addAction(startSelectedAction
);
226 connect(startActionMenu
, SIGNAL(triggered()), SLOT(slotStartDownload()));
228 KActionMenu
*stopActionMenu
= new KActionMenu(KIcon("media-playback-pause"), i18n("Stop"),
230 actionCollection()->addAction("stop_menu", stopActionMenu
);
231 stopActionMenu
->setDelayed(true);
232 stopActionMenu
->addAction(stopAllAction
);
233 stopActionMenu
->addAction(stopSelectedAction
);
234 connect(stopActionMenu
, SIGNAL(triggered()), SLOT(slotStopDownload()));
236 QAction
*openDestAction
= actionCollection()->addAction("transfer_open_dest");
237 openDestAction
->setText(i18n("Open Destination"));
238 openDestAction
->setIcon(KIcon("document-open"));
239 connect(openDestAction
, SIGNAL(triggered()), SLOT(slotTransfersOpenDest()));
241 QAction
*openFileAction
= actionCollection()->addAction("transfer_open_file");
242 openFileAction
->setText(i18n("Open File"));
243 openFileAction
->setIcon(KIcon("document-open"));
244 connect(openFileAction
, SIGNAL(triggered()), SLOT(slotTransfersOpenFile()));
246 QAction
*showDetailsAction
= actionCollection()->addAction("transfer_show_details");
247 showDetailsAction
->setText(i18n("Show Details"));
248 showDetailsAction
->setIcon(KIcon("document-properties"));
249 connect(showDetailsAction
, SIGNAL(triggered()), SLOT(slotTransfersShowDetails()));
251 QAction
*copyUrlAction
= actionCollection()->addAction("transfer_copy_source_url");
252 copyUrlAction
->setText(i18n("Copy URL to Clipboard"));
253 copyUrlAction
->setIcon(KIcon("edit-copy"));
254 connect(copyUrlAction
, SIGNAL(triggered()), SLOT(slotTransfersCopySourceUrl()));
256 KToggleAction
*showDropTargetAction
= new KToggleAction(KIcon("kget"),
257 i18n("Show Drop Target"), actionCollection());
258 actionCollection()->addAction("show_drop_target", showDropTargetAction
);
259 showDropTargetAction
->setChecked(Settings::showDropTarget());
260 connect(showDropTargetAction
, SIGNAL(triggered()), SLOT(slotToggleDropTarget()));
262 QAction
*transferHistoryAction
= actionCollection()->addAction("Transfer History");
263 transferHistoryAction
->setText(i18n("&Transfer History"));
264 transferHistoryAction
->setIcon(KIcon("view-history"));
265 transferHistoryAction
->setShortcuts(KShortcut("Ctrl+H"));
266 connect(transferHistoryAction
, SIGNAL(triggered()), SLOT(slotTransferHistory()));
268 QAction
*transferGroupSettingsAction
= actionCollection()->addAction("transfer_group_settings");
269 transferGroupSettingsAction
->setText(i18n("&Group Settings"));
270 transferGroupSettingsAction
->setIcon(KIcon("preferences-system"));
271 transferGroupSettingsAction
->setShortcuts(KShortcut("Ctrl+G"));
272 connect(transferGroupSettingsAction
, SIGNAL(triggered()), SLOT(slotTransferGroupSettings()));
274 QAction
*transferSettingsAction
= actionCollection()->addAction("transfer_settings");
275 transferSettingsAction
->setText(i18n("&Transfer Settings"));
276 transferSettingsAction
->setIcon(KIcon("preferences-system"));
277 transferSettingsAction
->setShortcuts(KShortcut("Ctrl+T"));
278 connect(transferSettingsAction
, SIGNAL(triggered()), SLOT(slotTransferSettings()));
280 QAction
*listLinksAction
= actionCollection()->addAction("import_links");
281 listLinksAction
->setText(i18n("Import &Links"));
282 listLinksAction
->setIcon(KIcon("view-list-text"));
283 listLinksAction
->setShortcuts(KShortcut("Ctrl+L"));
284 connect(listLinksAction
, SIGNAL(triggered()), SLOT(slotShowListLinks()));
287 void MainWindow::slotDelayedInit()
289 //Here we import the user's transfers.
290 KGet::load( KStandardDirs::locateLocal("appdata", "transfers.kgt") );
292 m_dock
= new Tray(this);
293 if(Settings::enableSystemTray()) {
299 setAcceptDrops(true);
301 // enable hide toolbar
302 setStandardToolBarMenuEnabled(true);
304 // session management stuff
305 connect(kapp
, SIGNAL(saveYourself()), SLOT(slotSaveMyself()));
307 // set auto-resume in kioslaverc (is there a cleaner way?)
308 KConfig
cfg("kioslaverc", KConfig::NoGlobals
);
309 cfg
.group(QString()).writeEntry("AutoResume", true);
312 // immediately start downloading if configured this way
313 if ( Settings::downloadAtStartup() )
317 m_drop
= new DropTarget(this);
319 if (Settings::firstRun()) {
320 if (KMessageBox::questionYesNoCancel(this ,i18n("This is the first time you have run KGet.\n"
321 "Would you like to enable KGet as the download manager for Konqueror?"),
322 i18n("Konqueror Integration"), KGuiItem(i18n("Enable")),
323 KGuiItem(i18n("Do Not Enable")))
324 == KMessageBox::Yes
) {
325 Settings::setKonquerorIntegration(true);
326 slotKonquerorIntegration(true);
329 m_drop
->setDropTargetVisible(true);
331 // reset the FirstRun config option
332 Settings::setFirstRun(false);
335 if (Settings::showDropTarget() && !m_startWithoutAnimation
)
336 m_drop
->setDropTargetVisible(true);
339 lastClipboard
= QApplication::clipboard()->text( QClipboard::Clipboard
).trimmed();
340 clipboardTimer
= new QTimer(this);
341 connect(clipboardTimer
, SIGNAL(timeout()), SLOT(slotCheckClipboard()));
342 if ( Settings::autoPaste() )
343 clipboardTimer
->start(1000);
345 // kget kuiserver integration
348 if (Settings::webinterfaceEnabled())
349 m_webinterface
= new HttpServer(this);
351 if (Settings::speedLimit())
353 KGet::setGlobalDownloadLimit(Settings::globalDownloadLimit());
354 KGet::setGlobalUploadLimit(Settings::globalUploadLimit());
358 KGet::setGlobalDownloadLimit(0);
359 KGet::setGlobalUploadLimit(0);
363 void MainWindow::slotToggleDropTarget()
365 actionCollection()->action("show_drop_target")->setChecked(!m_drop
->isVisible());
367 m_drop
->setDropTargetVisible(!m_drop
->isVisible());
370 void MainWindow::slotNewTransfer()
372 NewTransferDialog::showNewTransferDialog();
375 void MainWindow::slotImportTransfers()
377 QString filename
= KFileDialog::getOpenFileName(KUrl(),
378 "*.kgt *.metalink *.torrent|" + i18n("All Openable Files") +
379 " (*.kgt *.metalink *.torrent)", this, i18n("Open File"));
381 if(filename
.endsWith(".kgt"))
383 KGet::load(filename
);
387 if(!filename
.isEmpty())
388 KGet::addTransfer( KUrl( filename
) );
391 void MainWindow::slotQuit()
393 if (KGet::schedulerRunning()) {
394 if (KMessageBox::warningYesNoCancel(this,
395 i18n("Some transfers are still running.\n"
396 "Are you sure you want to close KGet?"),
397 i18n("Confirm Quit"),
398 KStandardGuiItem::yes(), KStandardGuiItem::no(), KStandardGuiItem::cancel(),
399 "ExitWithActiveTransfers") != KMessageBox::Yes
)
402 KGet::setSchedulerRunning(false);
405 Settings::self()->writeConfig();
409 void MainWindow::slotPreferences()
411 // an instance the dialog could be already created and could be cached,
412 // in which case you want to display the cached dialog
413 if ( PreferencesDialog::showDialog( "preferences" ) )
416 // we didn't find an instance of this dialog, so lets create it
417 PreferencesDialog
* dialog
= new PreferencesDialog( this, Settings::self() );
418 KGet::setPluginsSettingsWidget( dialog
->pluginsWidget() );
419 // keep us informed when the user changes settings
420 connect( dialog
, SIGNAL(settingsChanged(const QString
&)),
421 this, SLOT(slotNewConfig()) );
426 void MainWindow::slotExportTransfers()
428 QString filename
= KFileDialog::getSaveFileName
430 "*.kgt|" + i18n("KGet Transfer List") + " (*.kgt)",
432 i18n("Export Transfers")
435 if(!filename
.isEmpty())
436 KGet::save(filename
);
439 void MainWindow::slotDeleteGroup()
441 foreach(TransferGroupHandler
* it
, KGet::selectedTransferGroups())
444 KGet::delGroup(it
->name());
448 void MainWindow::slotRenameGroup()
453 foreach(TransferGroupHandler
* it
, KGet::selectedTransferGroups())
455 groupName
= KInputDialog::getText(i18n("Enter Group Name"),
456 i18n("Group name:"), it
->name(), &ok
, this);
458 it
->setName(groupName
);
462 void MainWindow::slotSetIconGroup()
464 KIconDialog
dialog(this);
465 QString iconName
= dialog
.getIcon();
466 TransferTreeSelectionModel
*selModel
= KGet::selectionModel();
468 QModelIndexList indexList
= selModel
->selectedRows();
470 if (!iconName
.isEmpty())
472 foreach (TransferGroupHandler
*group
, KGet::selectedTransferGroups())
474 group
->setIconName(iconName
);
477 //emit dataChanged(indexList.first(),indexList.last());
480 void MainWindow::slotStartDownload()
482 if(KGet::selectedTransfers().size() == 0)
483 slotStartAllDownload();
485 slotStartSelectedDownload();
488 void MainWindow::slotStartAllDownload()
490 KGet::setSchedulerRunning(true);
493 void MainWindow::slotStartSelectedDownload()
495 foreach(TransferHandler
* it
, KGet::selectedTransfers())
499 void MainWindow::slotStopDownload()
501 if(KGet::selectedTransfers().size() == 0)
502 slotStopAllDownload();
504 slotStopSelectedDownload();
507 void MainWindow::slotStopAllDownload()
509 KGet::setSchedulerRunning(false);
512 void MainWindow::slotStopSelectedDownload()
514 foreach (TransferHandler
* it
, KGet::selectedTransfers())
518 void MainWindow::slotDeleteSelected()
520 foreach(TransferHandler
* it
, KGet::selectedTransfers())
523 m_viewsContainer
->closeTransferDetails(it
);
524 KGet::delTransfer(it
);
528 void MainWindow::slotRedownloadSelected()
530 foreach(TransferHandler
* it
, KGet::selectedTransfers())
532 KGet::redownloadTransfer(it
);
536 void MainWindow::slotTransfersOpenDest()
538 QStringList openedDirs
;
539 foreach(TransferHandler
* it
, KGet::selectedTransfers())
541 QString directory
= it
->dest().directory();
542 if( !openedDirs
.contains( directory
) )
544 new KRun(directory
, this, 0, true, false);
545 openedDirs
.append( directory
);
550 void MainWindow::slotTransfersOpenFile()
552 foreach(TransferHandler
* it
, KGet::selectedTransfers())
554 new KRun(it
->dest(), this, 0, true, false);
558 void MainWindow::slotTransfersShowDetails()
560 foreach(TransferHandler
* it
, KGet::selectedTransfers())
562 m_viewsContainer
->showTransferDetails(it
);
566 void MainWindow::slotTransfersCopySourceUrl()
568 foreach(TransferHandler
* it
, KGet::selectedTransfers())
570 QString sourceurl
= it
->source().url();
571 QClipboard
*cb
= QApplication::clipboard();
572 cb
->setText(sourceurl
, QClipboard::Selection
);
573 cb
->setText(sourceurl
, QClipboard::Clipboard
);
577 void MainWindow::slotDeleteFinished()
579 foreach(TransferHandler
* it
, KGet::finishedTransfers())
582 m_viewsContainer
->closeTransferDetails(it
);
583 KGet::delTransfer(it
);
587 void MainWindow::slotConfigureNotifications()
589 KNotifyConfigWidget::configure(this);
592 void MainWindow::slotConfigureKeys()
594 KShortcutsDialog::configure(actionCollection());
597 void MainWindow::slotConfigureToolbars()
599 KEditToolBar
edit( actionCollection() );
600 connect(&edit
, SIGNAL( newToolbarConfig() ), this, SLOT( slotNewToolbarConfig() ));
605 void MainWindow::slotSaveMyself()
607 // save last parameters ..
608 Settings::setMainPosition( pos() );
609 // .. and write config to disk
610 Settings::self()->writeConfig();
613 void MainWindow::slotNewToolbarConfig()
618 void MainWindow::slotNewConfig()
620 // Update here properties modified in the config dialog and not
621 // parsed often by the code. When clicking Ok or Apply of
622 // PreferencesDialog, this function is called.
624 m_viewsContainer
->setExpandableDetails(Settings::showExpandableTransferDetails());
625 m_drop
->setDropTargetVisible(Settings::showDropTarget(), false);
626 m_dock
->setVisible(Settings::enableSystemTray());
627 if(!Settings::enableSystemTray()) setVisible(true);
629 slotKonquerorIntegration(Settings::konquerorIntegration());
630 m_konquerorIntegration
->setChecked(Settings::konquerorIntegration());
634 if (Settings::autoPaste())
635 clipboardTimer
->start(1000);
637 clipboardTimer
->stop();
638 m_autoPasteAction
->setChecked(Settings::autoPaste());
640 if (Settings::webinterfaceEnabled() && !m_webinterface
) {
641 m_webinterface
= new HttpServer(this);
642 } else if (m_webinterface
&& !Settings::webinterfaceEnabled()) {
643 delete m_webinterface
;
647 if (Settings::speedLimit())
649 KGet::setGlobalDownloadLimit(Settings::globalDownloadLimit());
650 KGet::setGlobalUploadLimit(Settings::globalUploadLimit());
654 KGet::setGlobalDownloadLimit(0);
655 KGet::setGlobalUploadLimit(0);
658 KGet::settingsChanged();
661 void MainWindow::slotToggleAutoPaste()
663 bool autoPaste
= !Settings::autoPaste();
664 Settings::setAutoPaste( autoPaste
);
667 clipboardTimer
->start(1000);
669 clipboardTimer
->stop();
670 m_autoPasteAction
->setChecked(autoPaste
);
673 void MainWindow::slotCheckClipboard()
675 QString clipData
= QApplication::clipboard()->text( QClipboard::Clipboard
).trimmed();
677 if (clipData
!= lastClipboard
)
679 lastClipboard
= clipData
;
680 if (lastClipboard
.isEmpty())
683 KUrl url
= KUrl(lastClipboard
);
685 if (url
.isValid() && !url
.isLocalFile())
686 KGet::addTransfer( url
);
690 void MainWindow::slotTrayKonquerorIntegration(bool enable
)
692 slotKonquerorIntegration(enable
);
693 if (!enable
&& Settings::konquerorIntegration() && !Settings::expertMode())
695 KMessageBox::information(this,
696 i18n("KGet has been temporarily disabled as download manager for Konqueror. "
697 "If you want to disable it forever, go to Settings->Advanced and disable \"Use "
698 "as download manager for Konqueror\"."),
699 i18n("Konqueror Integration disabled"),
700 "KonquerorIntegrationDisabled");
704 void MainWindow::slotKonquerorIntegration(bool konquerorIntegration
)
706 KConfig
cfgKonqueror("konquerorrc", KConfig::NoGlobals
);
707 cfgKonqueror
.group("HTML Settings").writeEntry("DownloadManager",
708 QString(konquerorIntegration
? "kget" : QString()));
712 void MainWindow::slotShowMenubar()
714 if (m_menubarAction
->isChecked())
720 void MainWindow::setSystemTrayDownloading(bool running
)
724 m_dock
->setDownloading(running
);
727 void MainWindow::importLinks(const QList
<QString
> &links
)
729 KGetLinkView
*link_view
= new KGetLinkView(this);
730 link_view
->setLinks(links
);
734 void MainWindow::slotTransferHistory()
736 TransferHistory
*history
= new TransferHistory();
740 void MainWindow::slotTransferGroupSettings()
743 QList
<TransferGroupHandler
*> list
= KGet::selectedTransferGroups();
744 foreach(TransferGroupHandler
* group
, list
)
746 GroupSettingsDialog
*settings
= new GroupSettingsDialog(this, group
);
751 void MainWindow::slotTransferSettings()
754 QList
<TransferHandler
*> list
= KGet::selectedTransfers();
755 foreach(TransferHandler
* transfer
, list
)
757 TransferSettingsDialog
*settings
= new TransferSettingsDialog(this, transfer
);
762 /** slots for link list **/
763 void MainWindow::slotShowListLinks()
765 KGetLinkView
*link_view
= new KGetLinkView(this);
766 link_view
->importUrl();
770 void MainWindow::slotImportUrl(const QString
&url
)
772 KGetLinkView
*link_view
= new KGetLinkView(this);
773 link_view
->importUrl(url
);
779 void MainWindow::closeEvent( QCloseEvent
* e
)
782 if(!Settings::enableSystemTray()) {
790 void MainWindow::dragEnterEvent(QDragEnterEvent
* event
)
792 event
->setAccepted(KUrl::List::canDecode(event
->mimeData())
793 || event
->mimeData()->hasText());
796 void MainWindow::dropEvent(QDropEvent
* event
)
798 KUrl::List list
= KUrl::List::fromMimeData(event
->mimeData());
803 if (list
.count() == 1 && list
.first().url().endsWith(".kgt"))
805 int msgBoxResult
= KMessageBox::questionYesNoCancel(this, i18n("The dropped file is a KGet-Transferlist"), "KGet",
806 KGuiItem(i18n("&Download"), KIcon("document-save")),
807 KGuiItem(i18n("&Load transferlist"), KIcon("list-add")), KStandardGuiItem::cancel());
809 if (msgBoxResult
== 3) //Download
810 NewTransferDialog::showNewTransferDialog(list
.first().url());
811 if (msgBoxResult
== 4) //Load
812 KGet::load(list
.first().url());
816 if (list
.count() == 1)
818 str
= event
->mimeData()->text();
819 NewTransferDialog::showNewTransferDialog(str
);
822 NewTransferDialog::showNewTransferDialog(list
);
827 NewTransferDialog::showNewTransferDialog();
832 /** DBUS interface */
834 void MainWindow::addTransfers(const QString
& src
, const QString
& dest
, bool start
)
836 // split src for the case it is a QStringList (e.g. from konqueror plugin)
837 KGet::addTransfer(src
.split(";"), dest
, QString(), start
);
840 bool MainWindow::dropTargetVisible() const
842 return m_drop
->isVisible();
845 void MainWindow::setDropTargetVisible( bool setVisible
)
847 if ( setVisible
!= Settings::showDropTarget() )
848 m_drop
->setDropTargetVisible( setVisible
);
851 void MainWindow::setOfflineMode( bool offline
)
853 KGet::setSchedulerRunning(offline
);
856 bool MainWindow::offlineMode() const
858 return !KGet::schedulerRunning();
861 QVariantMap
MainWindow::transfers() const
863 return m_dbusModelObserver
->transfers();
866 int MainWindow::transfersSpeed() const
868 return m_dbusModelObserver
->transfersSpeed();
871 #include "mainwindow.moc"