appearancepane.cpp 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. #include "appearancepane.h"
  2. #include "../mainwindow.h"
  3. void AppearancePane::setPaneContents() {
  4. mContentsWidget = new QWidget();
  5. QVBoxLayout* contentsLayout = new QVBoxLayout(mContentsWidget);
  6. mContentsWidget->setObjectName("innerPane");
  7. QString comboBoxStyle = QString("QComboBox::item:selected { "
  8. "background-color: %1; color: #ffffff; "
  9. "};").arg(getConfigValue("accent").toString());
  10. QString fontComboBoxStyle = QString("QListView::item:selected { "
  11. "background-color: %1; color: #ffffff; "
  12. "};").arg(getConfigValue("accent").toString());
  13. // Adding widgets
  14. QFormLayout* iconThemeLayout = new QFormLayout();
  15. QLabel* iconThemeLabel = new QLabel(tr("Icon Theme"));
  16. iconThemeLabel->setFont(mTitleFont);
  17. QComboBox* iconThemeComboBox = new QComboBox();
  18. iconThemeComboBox->setFont(mFont);
  19. iconThemeComboBox->setStyleSheet(comboBoxStyle);
  20. QDir iconThemesDir("/usr/share/icons");
  21. QStringList iconThemesList = iconThemesDir.entryList(QDir::Dirs |
  22. QDir::NoDotAndDotDot);
  23. foreach (QString iconTheme, iconThemesList) {
  24. iconThemeComboBox->addItem(iconTheme);
  25. }
  26. iconThemeLayout->addRow(iconThemeLabel, iconThemeComboBox);
  27. contentsLayout->addLayout(iconThemeLayout);
  28. QLabel* fontLabel = new QLabel("\n" + tr("Font"));
  29. fontLabel->setFont(mTitleFont);
  30. contentsLayout->addWidget(fontLabel);
  31. QFormLayout* fontLayout = new QFormLayout();
  32. fontLayout->setContentsMargins(10, 1, 1, 1);
  33. QLabel* familyLabel = new QLabel(tr("Family"));
  34. familyLabel->setFont(mTitleFont);
  35. QFontComboBox* fontComboBox = new QFontComboBox();
  36. fontComboBox->setFont(mFont);
  37. fontComboBox->setStyleSheet(fontComboBoxStyle);
  38. fontLayout->addRow(familyLabel, fontComboBox);
  39. QLabel* sizeLabel = new QLabel(tr("Size"));
  40. sizeLabel->setFont(mTitleFont);
  41. QSpinBox* sizeSpinBox = new QSpinBox();
  42. sizeSpinBox->setFont(mFont);
  43. fontLayout->addRow(sizeLabel, sizeSpinBox);
  44. contentsLayout->addLayout(fontLayout);
  45. QLabel* themeLabel = new QLabel("\n" + tr("Theme"));
  46. themeLabel->setFont(mTitleFont);
  47. contentsLayout->addWidget(themeLabel);
  48. QComboBox* themeComboBox = new QComboBox();
  49. themeComboBox->setFont(mFont);
  50. themeComboBox->setStyleSheet(comboBoxStyle);
  51. QDir themesDir("/usr/share/plainDE/styles");
  52. QStringList themesList = themesDir.entryList(QDir::Files |
  53. QDir::NoDotAndDotDot);
  54. foreach (QString theme, themesList) {
  55. themeComboBox->addItem(theme);
  56. }
  57. contentsLayout->addWidget(themeComboBox);
  58. QLabel* themeTipLabel = new QLabel(tr("Themes can be found at "
  59. "/usr/share/plainDE/styles"));
  60. themeTipLabel->setFont(mFont);
  61. contentsLayout->addWidget(themeTipLabel);
  62. QColorDialog* accentColorDialog = new QColorDialog();
  63. QLabel* accentLabel = new QLabel("\n" + tr("Accent"));
  64. accentLabel->setFont(mTitleFont);
  65. contentsLayout->addWidget(accentLabel);
  66. QHBoxLayout* accentLayout = new QHBoxLayout();
  67. QLineEdit* accentLineEdit = new QLineEdit();
  68. accentLineEdit->setFont(mFont);
  69. accentLayout->addWidget(accentLineEdit);
  70. QPushButton* chooseAccentButton = new QPushButton("...");
  71. chooseAccentButton->setFont(mFont);
  72. accentLayout->addWidget(chooseAccentButton);
  73. accentLayout->addSpacerItem(new QSpacerItem(0, 0,
  74. QSizePolicy::MinimumExpanding,
  75. QSizePolicy::Ignored));
  76. contentsLayout->addLayout(accentLayout);
  77. QColorDialog* ipColorDialog = new QColorDialog();
  78. QLabel* ipColorLabel = new QLabel("\n" + tr("IP Address Color"));
  79. ipColorLabel->setFont(mTitleFont);
  80. contentsLayout->addWidget(ipColorLabel);
  81. QHBoxLayout* ipColorLayout = new QHBoxLayout();
  82. QLineEdit* ipColorLineEdit = new QLineEdit();
  83. ipColorLineEdit->setFont(mFont);
  84. ipColorLayout->addWidget(ipColorLineEdit);
  85. QPushButton* chooseIPColorButton = new QPushButton("...");
  86. chooseIPColorButton->setFont(mFont);
  87. ipColorLayout->addWidget(chooseIPColorButton);
  88. ipColorLayout->addSpacerItem(new QSpacerItem(0, 0,
  89. QSizePolicy::MinimumExpanding,
  90. QSizePolicy::Ignored));
  91. contentsLayout->addLayout(ipColorLayout);
  92. contentsLayout->addSpacerItem(new QSpacerItem(0, 0,
  93. QSizePolicy::Ignored,
  94. QSizePolicy::MinimumExpanding));
  95. QPushButton* saveButton = new QPushButton(tr("Save settings"));
  96. saveButton->setFont(mFont);
  97. contentsLayout->addWidget(saveButton);
  98. saveButton->setVisible(false);
  99. // Setting current settings
  100. QString iconTheme = getConfigValue("iconTheme").toString();
  101. if (!iconTheme.isEmpty()) {
  102. int i = iconThemeComboBox->findText(iconTheme);
  103. if (i != -1) {
  104. iconThemeComboBox->setCurrentIndex(i);
  105. }
  106. }
  107. fontComboBox->setCurrentFont(mFont);
  108. sizeSpinBox->setValue(mFont.pointSize());
  109. QString theme = getConfigValue("theme").toString();
  110. int i = themeComboBox->findText(theme);
  111. if (i != -1) {
  112. themeComboBox->setCurrentIndex(i);
  113. }
  114. accentLineEdit->setText(getConfigValue("accent").toString());
  115. ipColorLineEdit->setText(getConfigValue("ipColor").toString());
  116. // Making connections
  117. connect(iconThemeComboBox, &QComboBox::currentTextChanged,
  118. saveButton, &QPushButton::show);
  119. connect(fontComboBox, &QFontComboBox::currentFontChanged,
  120. saveButton, &QPushButton::show);
  121. connect(sizeSpinBox, static_cast<void(QSpinBox::*)(int)>(
  122. &QSpinBox::valueChanged),
  123. saveButton, &QPushButton::show);
  124. connect(themeComboBox, &QComboBox::currentTextChanged,
  125. saveButton, &QPushButton::show);
  126. connect(accentLineEdit, &QLineEdit::textChanged,
  127. saveButton, &QPushButton::show);
  128. connect(ipColorLineEdit, &QLineEdit::textChanged,
  129. saveButton, &QPushButton::show);
  130. connect(chooseAccentButton, &QPushButton::clicked, this, [accentColorDialog,
  131. accentLineEdit]() {
  132. if (accentColorDialog->exec() == QColorDialog::Accepted) {
  133. QString color = QVariant(accentColorDialog->currentColor()).toString();
  134. accentLineEdit->setText(color);
  135. }
  136. });
  137. connect(chooseIPColorButton, &QPushButton::clicked, this, [ipColorDialog,
  138. ipColorLineEdit]() {
  139. if (ipColorDialog->exec() == QColorDialog::Accepted) {
  140. QString color = QVariant(ipColorDialog->currentColor()).toString();
  141. ipColorLineEdit->setText(color);
  142. }
  143. });
  144. connect(saveButton, &QPushButton::clicked, this, [this, iconThemeComboBox,
  145. fontComboBox, sizeSpinBox,
  146. themeComboBox, accentLineEdit,
  147. ipColorLineEdit, saveButton]() {
  148. prepareToSave(iconThemeComboBox, fontComboBox, sizeSpinBox, themeComboBox,
  149. accentLineEdit, ipColorLineEdit);
  150. saveConfig();
  151. saveButton->setVisible(false);
  152. static_cast<MainWindow*>(mParent)->setAppearance();
  153. });
  154. finalizeUI();
  155. }
  156. void AppearancePane::prepareToSave(QComboBox* iconThemeComboBox,
  157. QFontComboBox* fontComboBox,
  158. QSpinBox* fontSizeSpinBox,
  159. QComboBox* themeComboBox,
  160. QLineEdit* accentLineEdit,
  161. QLineEdit* ipColorLineEdit) {
  162. setEntry("iconTheme", QJsonValue(iconThemeComboBox->currentText()));
  163. setEntry("fontFamily", QJsonValue(fontComboBox->currentFont().family()));
  164. setEntry("fontSize", QJsonValue(fontSizeSpinBox->value()));
  165. setEntry("theme", QJsonValue(themeComboBox->currentText()));
  166. setEntry("accent", QJsonValue(accentLineEdit->text()));
  167. setEntry("ipColor", QJsonValue(ipColorLineEdit->text()));
  168. }
  169. AppearancePane::AppearancePane(QJsonObject* cfgObj,
  170. QWidget* parent) : Pane(nullptr,
  171. cfgObj,
  172. tr("Appearance"),
  173. "cs-themes") {
  174. mParent = parent;
  175. }