File indexing completed on 2023-05-30 11:38:30

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 #ifdef HAVE_QCA2
0026 #include <QtCrypto>
0027 #endif
0028 
0029 class ViewsContainer;
0030 class DropTarget;
0031 class DBusKgetWrapper;
0032 class HttpServer;
0033 class KGet;
0034 
0035 /**
0036  * The main window of KGet.
0037  *
0038  * Can be collapsed or expanded.
0039  */
0040 class MainWindow : public KXmlGuiWindow
0041 {
0042     friend class DBusKGetWrapper;
0043 
0044     Q_OBJECT
0045 public:
0046     explicit MainWindow(bool showMainwindow = true, bool startWithoutAnimation = false, bool doTesting = false, QWidget *parent = nullptr);
0047     ~MainWindow() override;
0048 
0049     virtual void setSystemTrayDownloading(bool running);
0050 
0051     // no slot, to make sure that MainWindow is correctly initialized before any transfers get added
0052     void init();
0053 
0054 public Q_SLOTS:
0055     void slotQuit();
0056     void slotImportUrl(const QString &url);
0057     void slotUpdateTitlePercent();
0058 
0059 protected:
0060     // ignore/accept quit events
0061     void closeEvent(QCloseEvent *) override;
0062     void hideEvent(QHideEvent *) override;
0063     void showEvent(QShowEvent *) override;
0064 
0065     // drag and drop
0066     void dragEnterEvent(QDragEnterEvent *) override;
0067     void dropEvent(QDropEvent *) override;
0068 
0069     // set sensitive initial size
0070     QSize sizeHint() const override;
0071 
0072 private Q_SLOTS:
0073     // slots connected to actions
0074     void slotToggleDropTarget();
0075     void slotNewTransfer();
0076     void slotImportTransfers();
0077     void slotExportTransfers();
0078     void slotPreferences();
0079     void slotDeleteGroup();
0080     void slotRenameGroup();
0081     void slotSetIconGroup();
0082     void slotStartDownload();
0083     void slotStopDownload();
0084     void slotConfigureNotifications();
0085     void slotToggleAutoPaste();
0086     void slotTrayKonquerorIntegration(bool);
0087     void slotKonquerorIntegration(bool);
0088     void slotShowMenubar();
0089     void slotTransferGroupSettings();
0090     void slotTransferSettings();
0091     void slotCreateMetalink();
0092     void slotPriorityTop();
0093     void slotPriorityBottom();
0094     void slotPriorityUp();
0095     void slotPriorityDown();
0096     void slotDownloadFinishedActions();
0097 
0098     // transfers slots
0099     void slotStopAllDownload();
0100     void slotStopSelectedDownload();
0101     void slotStartAllDownload();
0102     void slotStartSelectedDownload();
0103     void slotDeleteSelected();
0104     void slotDeleteSelectedIncludingFiles();
0105     void slotRedownloadSelected();
0106     void slotTransfersOpenDest();
0107     void slotTransfersOpenFile();
0108     void slotTransfersShowDetails();
0109     void slotTransfersCopySourceUrl();
0110     void slotDeleteFinished();
0111 
0112     // misc slots
0113     void slotSaveMyself();
0114     void slotNewToolbarConfig();
0115     void slotNewConfig();
0116     void slotCheckClipboard();
0117     void slotTransferHistory();
0118 
0119     // import links slots
0120     void slotShowListLinks();
0121 
0122     // Model changes
0123     void slotTransfersChanged(QMap<TransferHandler *, Transfer::ChangesFlags> transfers);
0124     void slotGroupsChanged(QMap<TransferGroupHandler *, TransferGroup::ChangesFlags> groups);
0125 
0126 private:
0127     /**
0128      * Returns the completed percents of all active transfers
0129      */
0130     int transfersPercent();
0131 
0132     // one-time functions
0133     void setupActions();
0134 
0135     KGet *m_kget = nullptr;
0136 
0137     // internal widgets
0138     ViewsContainer *m_viewsContainer = nullptr;
0139 
0140     // separated widgets
0141     DropTarget *m_drop = nullptr;
0142     Tray *m_dock = nullptr;
0143 
0144     // actions
0145     KToggleAction *m_autoPasteAction = nullptr;
0146     KToggleAction *m_menubarAction = nullptr;
0147     KToggleAction *m_konquerorIntegration = nullptr;
0148 
0149     // for autopaste function
0150     QString lastClipboard;
0151     // timer for checking clipboard - autopaste function
0152     QTimer *clipboardTimer = nullptr;
0153 
0154     bool m_startWithoutAnimation;
0155     bool m_doTesting; // UnitTest flag
0156 
0157     // HttpServer *m_webinterface;
0158 
0159 #ifdef HAVE_QCA2
0160     QCA::Initializer m_qcaInit;
0161 #endif // HAVE_QCA2
0162 };
0163 
0164 #endif