aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_omod/src/OMODFrameworkWrapper.h
blob: 50251f0fc667bb89a5af0fe8ef897a4f2161cee9 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#pragma once

#include <QCoreApplication>
#include <QProgressDialog>
#include <QStack>

#include <uibase/iplugininstaller.h>

#include "implementations/CodeProgress.h"
#include "QObject_unique_ptr.h"

// define this here as it's going to be used a lot by things using this class' message box wrappers.
template<class T>
T& unused_out(T&& t) { return t; }

class OMODFrameworkWrapper : public QObject
{
  Q_OBJECT

public:
  using EInstallResult = MOBase::IPluginInstaller::EInstallResult;

  OMODFrameworkWrapper(MOBase::IOrganizer* organizer, QWidget* parentWidget = nullptr);

  EInstallResult installInAnotherThread(MOBase::GuessedValue<QString>& modName, QString gameName, const QString& archiveName, const QString& version, int nexusID);

  EInstallResult install(MOBase::GuessedValue<QString>& modName, QString gameName, const QString& archiveName, const QString& version, int nexusID);

  void setParentWidget(QWidget* parentWidget);

  void onInstallationEnd(EInstallResult status, MOBase::IModInterface* mod);

protected:
  void initFrameworkSettings();

  void refreshFrameworkSettings();

  void pushTempPath(const QString& tempPath);

  void popTempPath();

signals:
  void pickModName(bool& successOut, MOBase::GuessedValue<QString>& modName);

  void createMod(MOBase::IModInterface*& modInterfaceOut, MOBase::GuessedValue<QString>& modName);

  void displayReadme(const QString& modName, const QString& readme);

  void showWaitDialog(QString message);
  void hideWaitDialog();

protected slots:
  void pickModNameSlot(bool& successOut, MOBase::GuessedValue<QString>& modName);
  void createModSlot(MOBase::IModInterface*& modInterfaceOut, MOBase::GuessedValue<QString>& modName);
  void displayReadmeSlot(const QString& modName, const QString& readme);

  void showWaitDialogSlot(QString message);
  void hideWaitDialogSlot();

private:
  __declspec(noinline) void constructorHelper();

  MOBase::IOrganizer* mMoInfo;
  QWidget* mParentWidget;

  QStack<QString> mTempPathStack;

  QObject_unique_ptr<QProgressDialog> mWaitDialog;
};