settings.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #include "settings.h"
  2. #include <QWidget>
  3. #include <QVBoxLayout>
  4. #include <QListWidget>
  5. #include <QJsonDocument>
  6. #include <QJsonObject>
  7. #include <QJsonValue>
  8. #include <QFile>
  9. #include <QString>
  10. #include <QIcon>
  11. #include <QFont>
  12. #include <QProcess>
  13. #include <QDebug>
  14. #include "panes/appearance.h"
  15. #include "panes/autostart.h"
  16. #include "panes/panels.h"
  17. #include "panes/keyboard/keyboard.h"
  18. QJsonObject config;
  19. QFont controlCenterFont;
  20. struct Entry {
  21. QString name;
  22. QIcon icon;
  23. };
  24. void Settings::readConfig() {
  25. // set globally readable variable for reading settings
  26. QString homeDirectory = getenv("HOME");
  27. QFile file;
  28. QString data;
  29. file.setFileName(homeDirectory + "/.config/plainDE/config.json");
  30. file.open(QIODevice::ReadOnly | QIODevice::Text);
  31. data = file.readAll();
  32. file.close();
  33. config = QJsonDocument::fromJson(data.toUtf8()).object();
  34. }
  35. void Settings::updateStyle() {
  36. readConfig();
  37. // Theme
  38. QFile stylesheetReader("/usr/share/plainDE/styles/" + config["theme"].toString());
  39. stylesheetReader.open(QIODevice::ReadOnly | QIODevice::Text);
  40. QTextStream styleSheet(&stylesheetReader);
  41. this->setStyleSheet(styleSheet.readAll());
  42. stylesheetReader.close();
  43. // Font
  44. controlCenterFont.setFamily(config["fontFamily"].toString());
  45. controlCenterFont.setPointSize(config["fontSize"].toInt());
  46. this->setFont(controlCenterFont);
  47. }
  48. void Settings::createUI() {
  49. this->setObjectName("controlCenter");
  50. this->setWindowTitle("plainControlCenter");
  51. // Geometry
  52. short width = 600, height = 500;
  53. this->setGeometry(250, 250, width, height);
  54. // Appearance
  55. updateStyle();
  56. // UI
  57. QHBoxLayout* mainLayout = new QHBoxLayout(this);
  58. mainLayout->setContentsMargins(4, 4, 4, 4);
  59. mainLayout->setSpacing(3);
  60. QListWidget* entriesListWidget = new QListWidget;
  61. entriesListWidget->setStyleSheet("QListView::item:selected { background-color: " + \
  62. config["accent"].toString() + \
  63. "; color: #ffffff };");
  64. Entry entries[12] = {
  65. {"Appearance", QIcon::fromTheme("preferences-desktop-theme")},
  66. {"Keyboard", QIcon::fromTheme("preferences-desktop-keyboard")},
  67. {"Autostart", QIcon::fromTheme("applications-utilities")},
  68. {"Panels", QIcon::fromTheme("panel")},
  69. {"About", QIcon("/usr/share/plainDE/menuIcon.png")}
  70. };
  71. for (short i = 0; i < 5; ++i) {
  72. entriesListWidget->addItem(entries[i].name);
  73. entriesListWidget->item(i)->setIcon(entries[i].icon);
  74. }
  75. QProcess* process = new QProcess(this);
  76. mainLayout->addWidget(entriesListWidget);
  77. this->show();
  78. // Make connections
  79. this->connect(entriesListWidget, &QListWidget::itemClicked, this,
  80. [this, mainLayout, entriesListWidget, process]() {
  81. if (entriesListWidget->selectedItems()[0]->text() == "Appearance") {
  82. if (!mAppearanceWidgetVisible) {
  83. mAppearanceWidgetVisible = true;
  84. AppearancePane* appearancePane = new AppearancePane;
  85. QWidget* appearanceWidget = appearancePane->createUI(this);
  86. mainLayout->addWidget(appearanceWidget);
  87. }
  88. }
  89. else if (entriesListWidget->selectedItems()[0]->text() == "Autostart") {
  90. if (!mAutostartWidgetVisible) {
  91. mAutostartWidgetVisible = true;
  92. AutostartPane* autostartPane = new AutostartPane;
  93. QWidget* autostartWidget = autostartPane->createUI(this);
  94. mainLayout->addWidget(autostartWidget);
  95. }
  96. }
  97. else if (entriesListWidget->selectedItems()[0]->text() == "Panels") {
  98. if (!mPanelsWidgetVisible) {
  99. mPanelsWidgetVisible = true;
  100. PanelsPane* panelsPane = new PanelsPane(nullptr, this);
  101. mainLayout->addWidget(panelsPane);
  102. }
  103. }
  104. else if (entriesListWidget->selectedItems()[0]->text() == "Keyboard") {
  105. if (!mKeyboardWidgetVisible) {
  106. mKeyboardWidgetVisible = true;
  107. KeyboardPane* keyboardPane = new KeyboardPane;
  108. QWidget* keyboardWidget = keyboardPane->createUI(this);
  109. mainLayout->addWidget(keyboardWidget);
  110. }
  111. }
  112. else if (entriesListWidget->selectedItems()[0]->text() == "About") {
  113. process->start("plainAbout --plainControlCenter");
  114. }
  115. });
  116. }
  117. Settings::Settings(QWidget *parent) : QWidget(parent) {
  118. readConfig();
  119. QIcon::setThemeName(config["iconTheme"].toString());
  120. createUI();
  121. }
  122. Settings::~Settings() {
  123. }