summaryrefslogtreecommitdiff
path: root/src/modinfodialognexus.h
blob: 2e328c6d4e5b94eeaf5051efa6f24d9fa53c10ca (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
#ifndef MODINFODIALOGNEXUS_H
#define MODINFODIALOGNEXUS_H

#include "modinfodialogtab.h"

class NexusTabWebpage : public QWebEnginePage
{
  Q_OBJECT

public:
  NexusTabWebpage(QObject* parent = 0)
    : QWebEnginePage(parent)
  {
  }

  bool acceptNavigationRequest(
    const QUrl & url, QWebEnginePage::NavigationType type, bool) override
  {
    if (type == QWebEnginePage::NavigationTypeLinkClicked)
    {
      emit linkClicked(url);
      return false;
    }

    return true;
  }

signals:
  void linkClicked(const QUrl&);
};


class NexusTab : public ModInfoDialogTab
{
public:
  NexusTab(
    OrganizerCore& oc, PluginContainer& plugin,
    QWidget* parent, Ui::ModInfoDialog* ui);

  ~NexusTab();

  void clear() override;
  void update() override;
  void setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin) override;

private:
  QMetaObject::Connection m_modConnection;
  bool m_requestStarted;

  void cleanup();
  void updateVersionColor();
  void updateWebpage();

  void refreshData(int modID);
  bool tryRefreshData(int modID);

  void onModChanged();
  void onOpenLink();
  void onModIDChanged();
  void onSourceGameChanged();
  void onVersionChanged();
  void onRefreshBrowser();
  void onEndorse();
  void onUrlChanged();
};

#endif // MODINFODIALOGNEXUS_H