settings.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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/panel.h"
  17. #include "panes/applets.h"
  18. QJsonObject config;
  19. QFont controlCenterFont;
  20. struct Entry {
  21. QString name;
  22. QIcon icon;
  23. };
  24. void 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 createUI() {
  36. QWidget* controlCenter = new QWidget;
  37. controlCenter->setObjectName("controlCenter");
  38. // Geometry
  39. short width = 400, height = 500;
  40. controlCenter->setGeometry(250, 250, width, height);
  41. // Style
  42. if (config["theme"] == "light") {
  43. QFile stylesheetReader(":/styles/general-light.qss");
  44. stylesheetReader.open(QIODevice::ReadOnly | QIODevice::Text);
  45. QTextStream styleSheet(&stylesheetReader);
  46. controlCenter->setStyleSheet(styleSheet.readAll());
  47. }
  48. else {
  49. QFile stylesheetReader(":/styles/general-dark.qss");
  50. stylesheetReader.open(QIODevice::ReadOnly | QIODevice::Text);
  51. QTextStream styleSheet(&stylesheetReader);
  52. controlCenter->setStyleSheet(styleSheet.readAll());
  53. }
  54. // Set font
  55. controlCenterFont.setFamily(config["fontFamily"].toString());
  56. controlCenterFont.setPointSize(config["fontSize"].toInt());
  57. controlCenter->setFont(controlCenterFont);
  58. // UI
  59. QVBoxLayout* layout = new QVBoxLayout;
  60. layout->setContentsMargins(4, 4, 4, 4);
  61. controlCenter->setLayout(layout);
  62. QListWidget* entriesListWidget = new QListWidget;
  63. entriesListWidget->setStyleSheet("QListView::item:selected { background-color: " + \
  64. config["accent"].toString() + \
  65. "; color: #ffffff };");
  66. // Sound - play startup sound, alsa, pulseaudio
  67. Entry entries[12] = {
  68. //{"Network", QIcon::fromTheme("preferences-system-network")},
  69. {"Appearance", QIcon::fromTheme("preferences-desktop-theme")},
  70. //{"Sound", QIcon::fromTheme("audio-volume-high")},
  71. //{"Display", QIcon::fromTheme("video-display")},
  72. //{"Keyboard", QIcon::fromTheme("preferences-desktop-keyboard")},
  73. //{"Date & Time", QIcon::fromTheme("x-office-calendar")},
  74. //{"Language", QIcon::fromTheme("preferences-desktop-locale")},
  75. {"Autostart", QIcon::fromTheme("applications-utilities")},
  76. {"Panel", QIcon::fromTheme("panel")},
  77. {"Applets", QIcon::fromTheme("panel-applets")}, // cs-extensions
  78. //{"Developer settings", QIcon::fromTheme("utilities-terminal")},
  79. //{"Default applications", QIcon::fromTheme("emblem-default")},
  80. {"About", QIcon("/usr/share/plainDE/menuIcon.png")}
  81. };
  82. for (short i = 0; i < 4; ++i) {
  83. entriesListWidget->addItem(entries[i].name);
  84. entriesListWidget->item(i)->setIcon(entries[i].icon);
  85. }
  86. // Widgets
  87. AppearancePane* appearancePane = new AppearancePane;
  88. AutostartPane* autostartPane = new AutostartPane;
  89. PanelPane* panelPane = new PanelPane;
  90. AppletsPane* appletsPane = new AppletsPane;
  91. QWidget* appearanceWidget = appearancePane->createUI(controlCenter);
  92. QWidget* autostartWidget = autostartPane->createUI(controlCenter);
  93. QWidget* panelWidget = panelPane->createUI(controlCenter);
  94. QWidget* appletsWidget = appletsPane->createUI(controlCenter);
  95. QProcess* process = new QProcess(controlCenter);
  96. // Make connections
  97. controlCenter->connect(entriesListWidget, &QListWidget::itemDoubleClicked, controlCenter,
  98. [entriesListWidget, process, controlCenter,
  99. appearanceWidget, appearancePane,
  100. autostartWidget, autostartPane,
  101. panelWidget, panelPane,
  102. appletsWidget, appletsPane]()mutable {
  103. if (entriesListWidget->selectedItems()[0]->text() == "Appearance") {
  104. appearanceWidget = appearancePane->createUI(controlCenter);
  105. appearanceWidget->show();
  106. controlCenter->hide();
  107. }
  108. else if (entriesListWidget->selectedItems()[0]->text() == "Autostart") {
  109. autostartWidget = autostartPane->createUI(controlCenter);
  110. autostartWidget->show();
  111. controlCenter->hide();
  112. }
  113. else if (entriesListWidget->selectedItems()[0]->text() == "Panel") {
  114. panelWidget = panelPane->createUI(controlCenter);
  115. panelWidget->show();
  116. controlCenter->hide();
  117. }
  118. else if (entriesListWidget->selectedItems()[0]->text() == "Applets") {
  119. appletsWidget = appletsPane->createUI(controlCenter);
  120. appletsWidget->show();
  121. controlCenter->hide();
  122. }
  123. else if (entriesListWidget->selectedItems()[0]->text() == "About") {
  124. process->start("plainAbout");
  125. }
  126. });
  127. controlCenter->layout()->addWidget(entriesListWidget);
  128. controlCenter->show();
  129. }
  130. settings::settings(QWidget *parent): QWidget(parent) {
  131. readConfig();
  132. QIcon::setThemeName(config["iconTheme"].toString());
  133. createUI();
  134. }
  135. settings::~settings() {
  136. }