keyboardpane.cpp 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #include "keyboardpane.h"
  2. void KeyboardPane::setPaneContents() {
  3. mContentsWidget = new QWidget();
  4. QVBoxLayout* contentsLayout = new QVBoxLayout(mContentsWidget);
  5. mContentsWidget->setObjectName("innerPane");
  6. // Adding widgets
  7. QLabel* activeLayoutsLabel = new QLabel(tr("Active Keyboard Layouts"));
  8. activeLayoutsLabel->setFont(mTitleFont);
  9. contentsLayout->addWidget(activeLayoutsLabel);
  10. QHBoxLayout* layoutLayout = new QHBoxLayout();
  11. QListWidget* activeLayoutsListWidget = new QListWidget();
  12. activeLayoutsListWidget->setFont(mFont);
  13. QString style = QString("QListView::item:selected { "
  14. "background-color: %1; color: #ffffff; "
  15. "};").arg(getConfigValue("accent").toString());
  16. activeLayoutsListWidget->setStyleSheet(style);
  17. layoutLayout->addWidget(activeLayoutsListWidget);
  18. QVBoxLayout* manageLayoutsLayout = new QVBoxLayout();
  19. QPushButton* moveUpButton = new QPushButton("↑"); // U+2191 - Up arrow
  20. moveUpButton->setFont(mFont);
  21. manageLayoutsLayout->addWidget(moveUpButton);
  22. QPushButton* moveDownButton = new QPushButton("↓"); // U+2193 - Down arrow
  23. moveDownButton->setFont(mFont);
  24. manageLayoutsLayout->addWidget(moveDownButton);
  25. QPushButton* addButton = new QPushButton("+");
  26. addButton->setFont(mFont);
  27. manageLayoutsLayout->addWidget(addButton);
  28. QPushButton* removeButton = new QPushButton("-");
  29. removeButton->setFont(mFont);
  30. manageLayoutsLayout->addWidget(removeButton);
  31. layoutLayout->addLayout(manageLayoutsLayout);
  32. contentsLayout->addLayout(layoutLayout);
  33. QLabel* toggleMethodLabel = new QLabel("\n" + tr("Layout Toggle Method"));
  34. toggleMethodLabel->setFont(mTitleFont);
  35. contentsLayout->addWidget(toggleMethodLabel);
  36. QListWidget* toggleMethodsListWidget = new QListWidget();
  37. toggleMethodsListWidget->setFont(mFont);
  38. toggleMethodsListWidget->setStyleSheet(style);
  39. contentsLayout->addWidget(toggleMethodsListWidget);
  40. contentsLayout->addSpacerItem(new QSpacerItem(0, 0,
  41. QSizePolicy::Ignored,
  42. QSizePolicy::MinimumExpanding));
  43. QPushButton* saveButton = new QPushButton(tr("Save settings"));
  44. saveButton->setFont(mFont);
  45. contentsLayout->addWidget(saveButton);
  46. saveButton->setVisible(false);
  47. // Misc
  48. QFile layoutsFile("/usr/share/plainDE/layouts.json");
  49. layoutsFile.open(QIODevice::ReadOnly | QIODevice::Text);
  50. QString layoutsData = layoutsFile.readAll();
  51. layoutsFile.close();
  52. mLayoutCodes = QJsonDocument::fromJson(
  53. layoutsData.toUtf8()).object().toVariantMap();
  54. QFile toggleMethodsFile("/usr/share/plainDE/layoutSwitchMethods.json");
  55. toggleMethodsFile.open(QIODevice::ReadOnly | QIODevice::Text);
  56. QString togglesData = toggleMethodsFile.readAll();
  57. toggleMethodsFile.close();
  58. mToggleMethods = QJsonDocument::fromJson(
  59. togglesData.toUtf8()).object().toVariantMap();
  60. foreach (QVariant toggleMethod, mToggleMethods.values()) {
  61. toggleMethodsListWidget->addItem(toggleMethod.toString());
  62. }
  63. // Setting current settings
  64. foreach (QString layout, getConfigValue("kbLayouts").toString().split(',')) {
  65. QString flagPath = QString("/usr/share/flags/%1.png").arg(layout);
  66. QListWidgetItem* layoutItem = new QListWidgetItem(QIcon(flagPath),
  67. mLayoutCodes.key(layout));
  68. activeLayoutsListWidget->addItem(layoutItem);
  69. }
  70. QString toggleMethod = getConfigValue("kbLayoutToggle").toString();
  71. for (int i = 0; i < toggleMethodsListWidget->count(); ++i) {
  72. if (!toggleMethodsListWidget->item(i)->text().compare(mToggleMethods[toggleMethod].toString())) {
  73. toggleMethodsListWidget->setCurrentRow(i);
  74. break;
  75. }
  76. }
  77. // Making connections
  78. QAbstractItemModel* model = activeLayoutsListWidget->model();
  79. connect(model, &QAbstractItemModel::rowsInserted, saveButton, &QPushButton::show);
  80. connect(model, &QAbstractItemModel::rowsRemoved, saveButton, &QPushButton::show);
  81. connect(toggleMethodsListWidget, &QListWidget::itemSelectionChanged,
  82. saveButton, &QPushButton::show);
  83. connect(addButton, &QPushButton::clicked, this, [this, activeLayoutsListWidget]() {
  84. auto layoutAddDialog = new LayoutAddDialog(mCfgObj, activeLayoutsListWidget);
  85. layoutAddDialog->setPaneContents();
  86. layoutAddDialog->show();
  87. });
  88. connect(removeButton, &QPushButton::clicked, this, [activeLayoutsListWidget]() {
  89. if (!activeLayoutsListWidget->selectedItems().isEmpty()) {
  90. delete activeLayoutsListWidget->selectedItems()[0];
  91. }
  92. });
  93. connect(moveUpButton, &QPushButton::clicked, this, [activeLayoutsListWidget]() {
  94. if (!activeLayoutsListWidget->selectedItems().isEmpty()) {
  95. int currentPos = activeLayoutsListWidget->currentRow();
  96. if (currentPos > 0) {
  97. activeLayoutsListWidget->insertItem(currentPos - 1,
  98. activeLayoutsListWidget->takeItem(currentPos));
  99. activeLayoutsListWidget->setCurrentRow(currentPos - 1);
  100. }
  101. }
  102. });
  103. connect(moveDownButton, &QPushButton::clicked, this, [activeLayoutsListWidget]() {
  104. if (!activeLayoutsListWidget->selectedItems().isEmpty()) {
  105. int currentPos = activeLayoutsListWidget->currentRow();
  106. if (currentPos < activeLayoutsListWidget->count() - 1) {
  107. activeLayoutsListWidget->insertItem(currentPos + 1,
  108. activeLayoutsListWidget->takeItem(currentPos));
  109. activeLayoutsListWidget->setCurrentRow(currentPos + 1);
  110. }
  111. }
  112. });
  113. connect(saveButton, &QPushButton::clicked, this, [this,
  114. activeLayoutsListWidget,
  115. toggleMethodsListWidget,
  116. saveButton]() {
  117. prepareToSave(activeLayoutsListWidget, toggleMethodsListWidget);
  118. saveConfig();
  119. saveButton->setVisible(false);
  120. });
  121. finalizeUI();
  122. }
  123. void KeyboardPane::prepareToSave(QListWidget* activeLayoutsListWidget,
  124. QListWidget* toggleMethodsListWidget) {
  125. QString kbLayouts;
  126. for (int i = 0; i < activeLayoutsListWidget->count(); ++i) {
  127. kbLayouts += mLayoutCodes[activeLayoutsListWidget->item(i)->text()].toString();
  128. kbLayouts += ",";
  129. }
  130. kbLayouts.chop(1);
  131. setEntry("kbLayouts", kbLayouts);
  132. if (!toggleMethodsListWidget->selectedItems().isEmpty()) {
  133. QString toggleMethod = mToggleMethods.key(
  134. toggleMethodsListWidget->selectedItems()[0]->text());
  135. setEntry("kbLayoutToggle", toggleMethod);
  136. }
  137. }
  138. KeyboardPane::KeyboardPane(QJsonObject* cfgObj) : Pane(nullptr,
  139. cfgObj,
  140. tr("Keyboard"),
  141. "cs-keyboard") {
  142. }