summaryrefslogtreecommitdiff
path: root/src/settingsdialogtheme.cpp
blob: 9b32773b43af6eb83a699f37467bd1aa11f6bb3f (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
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "settingsdialogtheme.h"
#include "ui_settingsdialog.h"
#include "shared/appconfig.h"
#include "categoriesdialog.h"
#include "colortable.h"
#include "modlist.h"
#include <utility.h>
#include <questionboxmemory.h>

using namespace MOBase;

ThemeSettingsTab::ThemeSettingsTab(Settings& s, SettingsDialog& d)
  : SettingsTab(s, d)
{
  // style
  addStyles();
  selectStyle();

  // colors
  ui->colorTable->load(s);

  QObject::connect(ui->resetColorsBtn, &QPushButton::clicked, [&] { ui->colorTable->resetColors(); });

  QObject::connect(ui->exploreStyles, &QPushButton::clicked, [&] { onExploreStyles(); });
}

void ThemeSettingsTab::update()
{
  // style
  const QString oldStyle = settings().interface().styleName().value_or("");
  const QString newStyle = ui->styleBox->itemData(
    ui->styleBox->currentIndex()).toString();

  if (oldStyle != newStyle) {
    settings().interface().setStyleName(newStyle);
    emit settings().styleChanged(newStyle);
  }

  // colors
  ui->colorTable->commitColors();
}

void ThemeSettingsTab::addStyles()
{
  ui->styleBox->addItem("None", "");
  for (auto&& key : QStyleFactory::keys()) {
    ui->styleBox->addItem(key, key);
  }

  ui->styleBox->insertSeparator(ui->styleBox->count());

  QDirIterator iter(
    QCoreApplication::applicationDirPath() + "/" +
    QString::fromStdWString(AppConfig::stylesheetsPath()),
    QStringList("*.qss"),
    QDir::Files);

  while (iter.hasNext()) {
    iter.next();

    ui->styleBox->addItem(
      iter.fileInfo().completeBaseName(),
      iter.fileName());
  }
}

void ThemeSettingsTab::selectStyle()
{
  const int currentID = ui->styleBox->findData(
    settings().interface().styleName().value_or(""));

  if (currentID != -1) {
    ui->styleBox->setCurrentIndex(currentID);
  }
}

void ThemeSettingsTab::onExploreStyles()
{
  QString ssPath = QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::stylesheetsPath());
  shell::Explore(ssPath);
}