File indexing completed on 2024-04-21 04:57:25

0001 /* This file is part of the KDE project
0002 
0003    Copyright (C) 2002 by Patrick Charbonnier <pch@freeshell.org>
0004    Based On Caitoo v.0.7.3 (c) 1998 - 2000, Matej Koss
0005    Copyright (C) 2006 Dario Massarin <nekkar@libero.it>
0006    Copyright (C) 2009 - 2010 Matthias Fuchs <mat69@gmx.net>
0007 
0008    This program is free software; you can redistribute it and/or
0009    modify it under the terms of the GNU General Public
0010    License as published by the Free Software Foundation; either
0011    version 2 of the License, or (at your option) any later version.
0012 */
0013 
0014 #ifndef MAINWINDOW_H
0015 #define MAINWINDOW_H
0016 
0017 #include <KStatusNotifierItem>
0018 #include <KToggleAction>
0019 #include <KXmlGuiWindow>
0020 
0021 #include "core/transfer.h"
0022 #include "core/transfergroup.h"
0023 #include "ui/tray.h"
0024 
0025 class ViewsContainer;
0026 class DropTarget;
0027 class DBusKgetWrapper;
0028 class HttpServer;
0029 class KGet;
0030 
0031 /**
0032  * The main window of KGet.
0033  *
0034  * Can be collapsed or expanded.
0035  */
0036 class MainWindow : public KXmlGuiWindow
0037 {
0038     friend class DBusKGetWrapper;
0039 
0040     Q_OBJECT
0041 public:
0042     explicit MainWindow(bool showMainwindow = true, bool startWithoutAnimation = false, bool doTesting = false, QWidget *parent = nullptr);
0043     ~MainWindow() override;
0044 
0045     virtual void setSystemTrayDownloading(bool running);
0046 
0047     // no slot, to make sure that MainWindow is correctly initialized before any transfers get added
0048     void init();
0049 
0050 public Q_SLOTS:
0051     void slotQuit();
0052     void slotImportUrl(const QString &url);
0053     void slotUpdateTitlePercent();
0054 
0055 protected:
0056     // ignore/accept quit events
0057     void closeEvent(QCloseEvent *) override;
0058     void hideEvent(QHideEvent *) override;
0059     void showEvent(QShowEvent *) override;
0060 
0061     // drag and drop
0062     void dragEnterEvent(QDragEnterEvent *) override;
0063     void dropEvent(QDropEvent *) override;
0064 
0065     // set sensitive initial size
0066     QSize sizeHint() const override;
0067 
0068 private Q_SLOTS:
0069     // slots connected to actions
0070     void slotToggleDropTarget();
0071     void slotNewTransfer();
0072     void slotImportTransfers();
0073     void slotExportTransfers();
0074     void slotPreferences();
0075     void slotDeleteGroup();
0076     void slotRenameGroup();
0077     void slotSetIconGroup();
0078     void slotStartDownload();
0079     void slotStopDownload();
0080     void slotConfigureNotifications();
0081     void slotToggleAutoPaste();
0082     void slotTrayKonquerorIntegration(bool);
0083     void slotKonquerorIntegration(bool);
0084     void slotShowMenubar();
0085     void slotTransferGroupSettings();
0086     void slotTransferSettings();
0087     void slotCreateMetalink();
0088     void slotPriorityTop();
0089     void slotPriorityBottom();
0090     void slotPriorityUp();
0091     void slotPriorityDown();
0092     void slotDownloadFinishedActions();
0093 
0094     // transfers slots
0095     void slotStopAllDownload();
0096     void slotStopSelectedDownload();
0097     void slotStartAllDownload();
0098     void slotStartSelectedDownload();
0099     void slotDeleteSelected();
0100     void slotDeleteSelectedIncludingFiles();
0101     void slotRedownloadSelected();
0102     void slotTransfersOpenDest();
0103     void slotTransfersOpenFile();
0104     void slotTransfersShowDetails();
0105     void slotTransfersCopySourceUrl();
0106     void slotDeleteFinished();
0107 
0108     // misc slots
0109     void slotSaveMyself();
0110     void slotNewToolbarConfig();
0111     void slotNewConfig();
0112     void slotCheckClipboard();
0113     void slotTransferHistory();
0114 
0115     // import links slots
0116     void slotShowListLinks();
0117 
0118     // Model changes
0119     void slotTransfersChanged(QMap<TransferHandler *, Transfer::ChangesFlags> transfers);
0120     void slotGroupsChanged(QMap<TransferGroupHandler *, TransferGroup::ChangesFlags> groups);
0121 
0122 private:
0123     /**
0124      * Returns the completed percents of all active transfers
0125      */
0126     int transfersPercent();
0127 
0128     // one-time functions
0129     void setupActions();
0130 
0131     KGet *m_kget = nullptr;
0132 
0133     // internal widgets
0134     ViewsContainer *m_viewsContainer = nullptr;
0135 
0136     // separated widgets
0137     DropTarget *m_drop = nullptr;
0138     Tray *m_dock = nullptr;
0139 
0140     // actions
0141     KToggleAction *m_autoPasteAction = nullptr;
0142     KToggleAction *m_menubarAction = nullptr;
0143     KToggleAction *m_konquerorIntegration = nullptr;
0144 
0145     // for autopaste function
0146     QString lastClipboard;
0147     // timer for checking clipboard - autopaste function
0148     QTimer *clipboardTimer = nullptr;
0149 
0150     bool m_startWithoutAnimation;
0151     bool m_doTesting; // UnitTest flag
0152 
0153     // HttpServer *m_webinterface;
0154 };
0155 
0156 #endif