aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/dialogs/ResourceDownloadDialog.h
blob: d6b3938b2d1b01c5e5ee28c5e0069086f2a16bc5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#pragma once

#include <QDialog>
#include <QDialogButtonBox>
#include <QLayout>

#include "ui/pages/BasePageProvider.h"

class ResourceDownloadTask;
class ResourcePage;
class ResourceFolderModel;
class PageContainer;
class QVBoxLayout;
class QDialogButtonBox;

class ResourceDownloadDialog : public QDialog, public BasePageProvider {
    Q_OBJECT

   public:
    ResourceDownloadDialog(QWidget* parent, const std::shared_ptr<ResourceFolderModel> base_model);

    void initializeContainer();
    void connectButtons();

    //: String that gets appended to the download dialog title ("Download " + resourcesString())
    [[nodiscard]] virtual QString resourceString() const { return tr("resources"); }

    QString dialogTitle() override { return tr("Download %1").arg(resourceString()); };

    bool selectPage(QString pageId);
    ResourcePage* getSelectedPage();

    void addResource(QString name, ResourceDownloadTask* task);
    void removeResource(QString name);
    [[nodiscard]] bool isSelected(QString name, QString filename = "") const;

    const QList<ResourceDownloadTask*> getTasks();
    [[nodiscard]] const std::shared_ptr<ResourceFolderModel> getBaseModel() const { return m_base_model; }

   protected slots:
    void selectedPageChanged(BasePage* previous, BasePage* selected);

    virtual void confirm();

   protected:
    const std::shared_ptr<ResourceFolderModel> m_base_model;

    PageContainer* m_container = nullptr;
    ResourcePage* m_selectedPage = nullptr;

    QDialogButtonBox m_buttons;
    QVBoxLayout m_vertical_layout;

    QHash<QString, ResourceDownloadTask*> m_selected;
};