File indexing completed on 2024-05-05 05:40:58
0001 /************************************************************************* 0002 * Copyright (C) 2014 by Renaud Guezennec * 0003 * * 0004 * https://rolisteam.org/ * 0005 * * 0006 * rolisteam is free software; you can redistribute it and/or modify * 0007 * it under the terms of the GNU General Public License as published * 0008 * by the Free Software Foundation; either version 2 of the License, * 0009 * or (at your option) any later version. * 0010 * * 0011 * This program is distributed in the hope that it will be useful, * 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0014 * GNU General Public License for more details. * 0015 * * 0016 * You should have received a copy of the GNU General Public License * 0017 * along with this program; if not, write to the * 0018 * Free Software Foundation, Inc., * 0019 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0020 *************************************************************************/ 0021 0022 #include "preferencesdialog.h" 0023 0024 #include "controller/preferencescontroller.h" 0025 #include "model/palettemodel.h" 0026 0027 #include <QComboBox> 0028 #include <QDebug> 0029 #include <QDialogButtonBox> 0030 #include <QFileDialog> 0031 #include <QFontDatabase> 0032 #include <QFormLayout> 0033 #include <QHBoxLayout> 0034 #include <QImageReader> 0035 #include <QInputDialog> 0036 #include <QItemEditorCreatorBase> 0037 #include <QJsonDocument> 0038 #include <QPainter> 0039 #include <QPushButton> 0040 #include <QStringListModel> 0041 #include <QStyleFactory> 0042 #include <QVBoxLayout> 0043 0044 #ifdef HAVE_SOUND 0045 #include <QMediaPlayer> 0046 #endif 0047 0048 #include "diceparser/diceparser.h" 0049 #include "media/mediatype.h" 0050 #include "model/thememodel.h" 0051 0052 #include "ui_preferencesdialogbox.h" 0053 0054 inline uint qHash(PreferencesDialog::PreferenceTab type, uint seed) 0055 { 0056 return ::qHash(static_cast<uint>(type), seed); 0057 } 0058 0059 /********************* 0060 * PreferencesDialog * 0061 *********************/ 0062 0063 PreferencesDialog::PreferencesDialog(PreferencesController* controller, QWidget* parent, Qt::WindowFlags f) 0064 : QDialog(parent, f), ui(new Ui::PreferencesDialogBox()), m_ctrl(controller) 0065 { 0066 ui->setupUi(this); 0067 m_currentThemeIsEditable= false; 0068 0069 // create empty directories list 0070 m_musicDirectories.append(new QStringListModel(QStringList())); 0071 m_musicDirectories.append(new QStringListModel(QStringList())); 0072 m_musicDirectories.append(new QStringListModel(QStringList())); 0073 0074 ui->m_directoriesList1->setModel(m_musicDirectories[0]); 0075 ui->m_directoriesList2->setModel(m_musicDirectories[1]); 0076 ui->m_directoriesList3->setModel(m_musicDirectories[2]); 0077 0078 // TODO Fix this line 0079 // ui->m_defaultMapModeCombo->addItems(); 0080 m_preferences= PreferencesManager::getInstance(); 0081 0082 ui->m_themeComboBox->setModel(m_ctrl->themeModel()); 0083 connect(ui->m_themeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, 0084 [this](int pos) { m_ctrl->setCurrentThemeIndex(static_cast<std::size_t>(pos)); }); 0085 // m_paletteModel->setPalette(palette()); 0086 connect(m_ctrl, &PreferencesController::currentThemeIndexChanged, this, [this]() { 0087 if(m_ctrl->currentTheme()) 0088 ui->m_paletteTableView->setModel(m_ctrl->currentTheme()->paletteModel()); 0089 }); 0090 0091 if(m_ctrl->currentTheme()) 0092 { 0093 ui->m_paletteTableView->setModel(m_ctrl->currentTheme()->paletteModel()); 0094 auto horizontalHeader= ui->m_paletteTableView->horizontalHeader(); 0095 horizontalHeader->setSectionResizeMode(0, QHeaderView::Stretch); 0096 } 0097 0098 connect(this, &PreferencesDialog::accepted, m_ctrl, &PreferencesController::savePreferences); 0099 0100 connect(ui->m_startDiag, &QPushButton::clicked, this, &PreferencesDialog::performDiag); 0101 // i18n 0102 connect(ui->m_systemTranslation, &QCheckBox::clicked, this, &PreferencesDialog::updateTranslationPref); 0103 connect(ui->m_customTranslation, &QCheckBox::clicked, this, &PreferencesDialog::updateTranslationPref); 0104 0105 connect(ui->m_systemTranslation, &QCheckBox::toggled, m_ctrl, &PreferencesController::setSystemLang); 0106 connect(ui->m_customTranslation, &QCheckBox::toggled, m_ctrl, &PreferencesController::setHasCustomFile); 0107 connect(ui->m_translationSelector, QOverload<int>::of(&QComboBox::currentIndexChanged), m_ctrl, 0108 &PreferencesController::setCurrentLangIndex); 0109 connect(ui->m_translationFileEdit, &FileDirChooser::pathChanged, m_ctrl, &PreferencesController::setCustomFile); 0110 0111 ui->m_translationSelector->setModel(m_ctrl->languageModel()); 0112 // set general panel as default. 0113 ui->tabWidget->setCurrentIndex(0); 0114 connect(ui->m_highLightPenWidth, QOverload<int>::of(&QSpinBox::valueChanged), this, 0115 [=]() { m_preferences->registerValue("VMAP::highlightPenWidth", ui->m_highLightPenWidth->value(), true); }); 0116 connect(ui->m_mapItemHighlightColor, &ColorButton::colorChanged, this, [=]() { 0117 m_preferences->registerValue("VMAP::highlightColor", ui->m_mapItemHighlightColor->color(), true); 0118 }); 0119 0120 connect(ui->m_hideTipsOfTheDay, &QCheckBox::clicked, this, [this]() { 0121 m_preferences->registerValue("MainWindow::neverDisplayTips", ui->m_hideTipsOfTheDay->isChecked(), false); 0122 }); 0123 // Misc 0124 setSizeGripEnabled(true); 0125 setWindowTitle( 0126 QString("%1 - %2").arg(m_preferences->value("Application_Name", "rolisteam").toString(), tr("Preferences"))); 0127 setWindowModality(Qt::ApplicationModal); 0128 0129 connect(ui->m_heartBeat, SIGNAL(clicked(bool)), this, SLOT(manageHeartBeat())); 0130 connect(ui->m_hbFrequency, SIGNAL(valueChanged(int)), this, SLOT(manageHeartBeat())); 0131 connect(ui->m_displayTimePage, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, 0132 [=](int val) { m_preferences->registerValue("waitingTimeBetweenPage", val, true); }); 0133 // Messaging 0134 connect(ui->m_showTimeCheckBox, SIGNAL(clicked(bool)), this, SLOT(manageMessagingPref())); 0135 connect(ui->m_timeColorBtn, SIGNAL(clicked(bool)), this, SLOT(manageMessagingPref())); 0136 connect(ui->m_maxLenghtCommand, SIGNAL(valueChanged(int)), this, SLOT(manageMessagingPref())); 0137 connect(ui->m_hideLongCommand, SIGNAL(toggled(bool)), this, SLOT(manageMessagingPref())); 0138 0139 // background 0140 connect(ui->m_positioningComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(backgroundChanged())); 0141 connect(ui->m_bgColorPush, SIGNAL(colorChanged(QColor)), this, SLOT(backgroundChanged())); 0142 connect(ui->m_backgroundImage, &FileDirChooser::pathChanged, this, &PreferencesDialog::backgroundChanged); 0143 connect(ui->m_diceHighlightColorBtn, &ColorButton::colorChanged, m_ctrl, 0144 &PreferencesController::setDiceHighLightColor); 0145 // connect(ui->m_backgroundImage,รง) 0146 0147 // themes 0148 connect(ui->m_copyThemeButton, SIGNAL(clicked()), this, SLOT(dupplicateTheme())); 0149 connect(ui->m_themeNameLineEdit, SIGNAL(textEdited(QString)), this, SLOT(setTitleAtCurrentTheme())); 0150 0151 connect(ui->m_paletteTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(editColor(QModelIndex))); 0152 0153 connect(ui->m_cssEdit, SIGNAL(clicked()), this, SLOT(editCss())); 0154 connect(ui->m_exportBtn, SIGNAL(clicked()), this, SLOT(exportTheme())); 0155 connect(ui->m_importBtn, SIGNAL(clicked()), this, SLOT(importTheme())); 0156 connect(ui->m_deleteTheme, SIGNAL(clicked()), this, SLOT(deleteTheme())); 0157 0158 connect(m_ctrl, &PreferencesController::currentLangIndexChanged, this, 0159 [this]() { ui->m_translationSelector->setCurrentIndex(m_ctrl->currentLangIndex()); }); 0160 0161 ui->m_ap1Add->setData(PreferencesDialog::First); 0162 ui->m_ap2Add->setData(PreferencesDialog::Second); 0163 ui->m_ap3Add->setData(PreferencesDialog::Third); 0164 0165 ui->m_ap1Delete->setData(PreferencesDialog::First); 0166 ui->m_ap2Delete->setData(PreferencesDialog::Second); 0167 ui->m_ap3Delete->setData(PreferencesDialog::Third); 0168 0169 ui->m_ap1upAct->setData(PreferencesDialog::First); 0170 ui->m_ap2upAct->setData(PreferencesDialog::Second); 0171 ui->m_ap3upAct->setData(PreferencesDialog::Third); 0172 0173 ui->m_ap1downAct->setData(PreferencesDialog::First); 0174 ui->m_ap2downAct->setData(PreferencesDialog::Second); 0175 ui->m_ap3downAct->setData(PreferencesDialog::Third); 0176 0177 ui->m_add1Btn->setDefaultAction(ui->m_ap1Add); 0178 ui->m_add2Btn->setDefaultAction(ui->m_ap2Add); 0179 ui->m_add3Btn->setDefaultAction(ui->m_ap3Add); 0180 0181 ui->m_delete1Btn->setDefaultAction(ui->m_ap1Delete); 0182 ui->m_delete2Btn->setDefaultAction(ui->m_ap2Delete); 0183 ui->m_delete3Btn->setDefaultAction(ui->m_ap3Delete); 0184 0185 ui->m_up1Btn->setDefaultAction(ui->m_ap1upAct); 0186 ui->m_up2Btn->setDefaultAction(ui->m_ap2upAct); 0187 ui->m_up3Btn->setDefaultAction(ui->m_ap3upAct); 0188 0189 ui->m_down1Btn->setDefaultAction(ui->m_ap1downAct); 0190 ui->m_down2Btn->setDefaultAction(ui->m_ap2downAct); 0191 ui->m_down3Btn->setDefaultAction(ui->m_ap3downAct); 0192 0193 connect(ui->m_ap1Add, &QAction::triggered, this, &PreferencesDialog::addDirectory); 0194 connect(ui->m_ap2Add, &QAction::triggered, this, &PreferencesDialog::addDirectory); 0195 connect(ui->m_ap3Add, &QAction::triggered, this, &PreferencesDialog::addDirectory); 0196 0197 connect(ui->m_ap1Delete, &QAction::triggered, this, &PreferencesDialog::removeDirectory); 0198 connect(ui->m_ap2Delete, &QAction::triggered, this, &PreferencesDialog::removeDirectory); 0199 connect(ui->m_ap3Delete, &QAction::triggered, this, &PreferencesDialog::removeDirectory); 0200 0201 connect(ui->m_ap1upAct, &QAction::triggered, this, &PreferencesDialog::upDirectory); 0202 connect(ui->m_ap2upAct, &QAction::triggered, this, &PreferencesDialog::upDirectory); 0203 connect(ui->m_ap3upAct, &QAction::triggered, this, &PreferencesDialog::upDirectory); 0204 0205 connect(ui->m_ap1downAct, &QAction::triggered, this, &PreferencesDialog::downDirectory); 0206 connect(ui->m_ap2downAct, &QAction::triggered, this, &PreferencesDialog::downDirectory); 0207 connect(ui->m_ap3downAct, &QAction::triggered, this, &PreferencesDialog::downDirectory); 0208 0209 connect(ui->m_directoriesList1, &QListView::clicked, this, [this]() { 0210 auto current= ui->m_directoriesList1->currentIndex(); 0211 0212 auto isValid= current.isValid(); 0213 0214 ui->m_ap1Delete->setEnabled(isValid); 0215 ui->m_ap1upAct->setEnabled(isValid); 0216 ui->m_ap1downAct->setEnabled(isValid); 0217 }); 0218 0219 connect(ui->m_directoriesList2, &QListView::clicked, this, [this]() { 0220 auto current= ui->m_directoriesList2->currentIndex(); 0221 0222 auto isValid= current.isValid(); 0223 0224 ui->m_ap2Delete->setEnabled(isValid); 0225 ui->m_ap2upAct->setEnabled(isValid); 0226 ui->m_ap2downAct->setEnabled(isValid); 0227 }); 0228 0229 connect(ui->m_directoriesList3, &QListView::clicked, this, [this]() { 0230 auto current= ui->m_directoriesList3->currentIndex(); 0231 0232 auto isValid= current.isValid(); 0233 0234 ui->m_ap3Delete->setEnabled(isValid); 0235 ui->m_ap3upAct->setEnabled(isValid); 0236 ui->m_ap3downAct->setEnabled(isValid); 0237 }); 0238 0239 updateTranslationPref(); 0240 } 0241 0242 PreferencesDialog::~PreferencesDialog() {} 0243 0244 void PreferencesDialog::manageHeartBeat() 0245 { 0246 m_preferences->registerValue("HeartBeatStatus", ui->m_heartBeat->isChecked()); 0247 m_preferences->registerValue("HbFrequency", ui->m_hbFrequency->value()); 0248 } 0249 void PreferencesDialog::manageMessagingPref() 0250 { 0251 m_preferences->registerValue("MessagingShowTime", ui->m_showTimeCheckBox->isChecked()); 0252 m_preferences->registerValue("MessagingColorTime", ui->m_timeColorBtn->color()); 0253 m_preferences->registerValue("maxSizeForCuttingDiceCmd", ui->m_maxLenghtCommand->value()); 0254 m_preferences->registerValue("hideLongCommand", ui->m_hideLongCommand->isChecked()); 0255 } 0256 0257 void PreferencesDialog::updateTranslationPref() 0258 { 0259 auto systemTrans= m_ctrl->systemLang(); 0260 auto customTrans= m_ctrl->hasCustomFile(); 0261 0262 ui->m_customTranslation->setEnabled(!systemTrans); 0263 0264 ui->m_availablesTranslationLbl->setEnabled(!systemTrans && !customTrans); 0265 ui->m_translationSelector->setEnabled(!systemTrans && !customTrans); 0266 0267 ui->m_translationFileLbl->setEnabled(!systemTrans && customTrans); 0268 ui->m_translationFileEdit->setEnabled(!systemTrans && customTrans); 0269 } 0270 0271 void PreferencesDialog::show(PreferenceTab tab) 0272 { 0273 static QHash<PreferenceTab, int> tabData{{PreferenceTab::General, 0}, 0274 {PreferenceTab::Player, 1}, 0275 {PreferenceTab::Themes, 2}, 0276 {PreferenceTab::Diagnostic, 3}}; 0277 ui->tabWidget->setCurrentIndex(tabData.value(tab)); 0278 load(); 0279 QDialog::show(); 0280 } 0281 void PreferencesDialog::save() const 0282 { 0283 m_preferences->registerValue("MainWindow::MustBeChecked", ui->m_checkUpdate->isChecked()); 0284 m_preferences->registerValue("defaultPermissionMap", ui->m_defaultMapModeCombo->currentIndex()); 0285 0286 // messaging 0287 m_preferences->registerValue("MessagingShowTime", ui->m_showTimeCheckBox->isChecked()); 0288 m_preferences->registerValue("MessagingColorTime", ui->m_timeColorBtn->color()); 0289 0290 // General 0291 QColor color; 0292 int opacity= ui->m_opacitySlider->value(); 0293 color.setRgb(opacity, opacity, opacity); 0294 m_preferences->registerValue("Fog_color", color); 0295 m_preferences->registerValue("Mask_color", ui->m_fogColor->color()); 0296 m_preferences->registerValue("PictureAdjust", ui->m_pictureAdjust->isChecked()); 0297 m_preferences->registerValue("FullScreenAtStarting", ui->m_fullScreenCheckbox->isChecked()); 0298 m_preferences->registerValue("maxSizeForCuttingDiceCmd", ui->m_maxLenghtCommand->value()); 0299 m_preferences->registerValue("hideLongCommand", ui->m_hideLongCommand->isChecked()); 0300 m_preferences->registerValue("shortNameInTabMode", ui->m_shortNameCb->isChecked()); 0301 m_preferences->registerValue("MaxLengthTabName", ui->m_tabTitleLength->value()); 0302 0303 m_preferences->registerValue("waitingTimeBetweenPage", ui->m_displayTimePage->value()); 0304 0305 // theme 0306 m_preferences->registerValue("currentTheme", ui->m_themeComboBox->currentText()); 0307 0308 m_preferences->registerValue(QStringLiteral("LogDebug"), ui->m_debugLogInfo->isChecked()); 0309 m_preferences->registerValue(QStringLiteral("LogResearch"), ui->m_logUniversityResearch->isChecked()); 0310 m_preferences->registerValue(QStringLiteral("dataCollection"), ui->m_enableDataCollection->isChecked()); 0311 0312 qDebug() << "list" << m_musicDirectories[0]->stringList(); 0313 m_preferences->registerValue(Core::preferences::KEY_DIRECTORY_AP1, m_musicDirectories[0]->stringList()); 0314 m_preferences->registerValue(Core::preferences::KEY_DIRECTORY_AP2, m_musicDirectories[1]->stringList()); 0315 m_preferences->registerValue(Core::preferences::KEY_DIRECTORY_AP3, m_musicDirectories[2]->stringList()); 0316 0317 m_ctrl->savePreferences(); 0318 } 0319 void PreferencesDialog::load() 0320 { 0321 // Direcotry PATH 0322 ui->m_translationFileEdit->setMode(false); 0323 ui->m_translationFileEdit->setFilter("Translation File: (*.qm)"); 0324 0325 ui->m_translationFileEdit->setPath(m_preferences->value("currentTranslationFile", "").toString()); 0326 ui->m_checkUpdate->setChecked(m_preferences->value("MainWindow::MustBeChecked", true).toBool()); 0327 0328 ui->m_hideTipsOfTheDay->setChecked(m_preferences->value("MainWindow::neverDisplayTips", false).toBool()); 0329 0330 ui->m_heartBeat->setChecked(m_preferences->value("HeartBeatStatus", false).toBool()); 0331 ui->m_hbFrequency->setValue(m_preferences->value("HbFrequency", 60).toInt()); 0332 0333 ui->m_shortNameCb->setChecked(m_preferences->value("shortNameInTabMode", false).toBool()); 0334 ui->m_tabTitleLength->setValue(m_preferences->value("MaxLengthTabName", 10).toInt()); 0335 0336 ui->m_displayTimePage->setValue(m_preferences->value("waitingTimeBetweenPage", 300).toInt()); 0337 0338 ui->m_highLightPenWidth->setValue(m_preferences->value("VMAP::highlightPenWidth", 6).toInt()); 0339 ui->m_mapItemHighlightColor->setColor( 0340 m_preferences->value("VMAP::highlightColor", QColor(Qt::red)).value<QColor>()); 0341 0342 ui->m_systemTranslation->setChecked(m_ctrl->systemLang()); 0343 ui->m_customTranslation->setChecked(m_ctrl->hasCustomFile()); 0344 ui->m_translationSelector->setCurrentIndex(m_ctrl->currentLangIndex()); 0345 ui->m_translationFileEdit->setPath(m_ctrl->customFilePath()); 0346 0347 //////////////////////// 0348 // MAP 0349 /////////////////////// 0350 // Fog of WAR 0351 QColor fog= m_preferences->value("Fog_color", QColor(Qt::black)).value<QColor>(); 0352 ui->m_opacitySlider->setValue(m_preferences->value("Fog_opacity", fog.red()).toInt()); 0353 ui->m_opacitySpin->setValue(m_preferences->value("Fog_opacity", fog.red()).toInt()); 0354 ui->m_fogColor->setColor(m_preferences->value("Mask_color", QColor(Qt::darkMagenta)).value<QColor>()); 0355 ui->m_fullScreenCheckbox->setChecked(m_preferences->value("FullScreenAtStarting", true).toBool()); 0356 ui->m_maxLenghtCommand->setValue(m_preferences->value("maxSizeForCuttingDiceCmd", 100).toInt()); 0357 ui->m_hideLongCommand->setChecked(m_preferences->value("hideLongCommand", false).toBool()); 0358 0359 // Default Permission 0360 ui->m_defaultMapModeCombo->setCurrentIndex(m_preferences->value("defaultPermissionMap", 0).toInt()); 0361 ui->m_pictureAdjust->setChecked(m_preferences->value("PictureAdjust", true).toBool()); 0362 0363 // theme 0364 // initializeStyle(); 0365 ui->m_backgroundImage->setMode(false); 0366 ui->m_backgroundImage->setFilter(tr("Images (*.png *.xpm *.jpg *.gif *.bmp)")); 0367 0368 // Messaging 0369 ui->m_showTimeCheckBox->setChecked(m_preferences->value("MessagingShowTime", false).toBool()); 0370 ui->m_timeColorBtn->setColor(m_preferences->value("MessagingColorTime", QColor(Qt::darkGreen)).value<QColor>()); 0371 0372 // LOG 0373 ui->m_debugLogInfo->setChecked(m_preferences->value(QStringLiteral("LogDebug"), false).toBool()); 0374 ui->m_logUniversityResearch->setChecked(m_preferences->value(QStringLiteral("LogResearch"), false).toBool()); 0375 ui->m_enableDataCollection->setChecked(m_preferences->value(QStringLiteral("dataCollection"), false).toBool()); 0376 0377 // music directory 0378 qDebug() << "list " << m_preferences->value(Core::preferences::KEY_DIRECTORY_AP1, {}).toStringList(); 0379 m_musicDirectories[0]->setStringList(m_preferences->value(Core::preferences::KEY_DIRECTORY_AP1, {}).toStringList()); 0380 m_musicDirectories[1]->setStringList(m_preferences->value(Core::preferences::KEY_DIRECTORY_AP2, {}).toStringList()); 0381 m_musicDirectories[2]->setStringList(m_preferences->value(Core::preferences::KEY_DIRECTORY_AP3, {}).toStringList()); 0382 0383 // m_ctrl->loadPreferences(); 0384 updateTheme(); 0385 } 0386 0387 void PreferencesDialog::editColor(QModelIndex index) 0388 { 0389 QColor color= QColorDialog::getColor(index.data(Qt::DecorationRole).value<QColor>(), this); 0390 if(!color.isValid()) 0391 return; 0392 0393 m_ctrl->setColorCurrentTheme(color, index.row()); 0394 0395 auto theme= m_ctrl->currentTheme(); 0396 if(nullptr == theme) 0397 return; 0398 // TODO 0399 } 0400 0401 void PreferencesDialog::updateTheme() 0402 { 0403 RolisteamTheme* theme= m_ctrl->currentTheme(); 0404 0405 ui->m_themeNameLineEdit->setText(theme->getName()); 0406 ui->m_backgroundImage->setPath(theme->getBackgroundImage()); 0407 0408 ui->m_bgColorPush->blockSignals(true); 0409 ui->m_bgColorPush->setColor(theme->getBackgroundColor()); 0410 ui->m_bgColorPush->blockSignals(false); 0411 0412 ui->m_positioningComboBox->blockSignals(true); 0413 ui->m_positioningComboBox->setCurrentIndex(theme->getBackgroundPosition()); 0414 ui->m_positioningComboBox->blockSignals(false); 0415 0416 QString defaultStyle= theme->getStyleName(); 0417 0418 ui->m_styleCombo->blockSignals(true); 0419 ui->m_styleCombo->setCurrentIndex(ui->m_styleCombo->findText(defaultStyle.toUpper(), Qt::MatchContains)); 0420 ui->m_styleCombo->blockSignals(false); 0421 0422 ui->m_diceHighlightColorBtn->setColor(theme->getDiceHighlightColor()); 0423 0424 // qApp->setStyle(theme->getStyle()); 0425 // qApp->setPalette(theme->getPalette()); 0426 // applyBackground(); 0427 // qApp->setStyleSheet(theme->getCss()); 0428 } 0429 void PreferencesDialog::setStyle() 0430 { 0431 auto style= QStyleFactory::create(ui->m_styleCombo->currentText()); 0432 m_ctrl->setCurrentThemeStyle(style); 0433 // qApp->setStyle(style); 0434 } 0435 void PreferencesDialog::editCss() 0436 { 0437 auto theme= m_ctrl->currentTheme(); 0438 0439 if(nullptr == theme) 0440 return; 0441 0442 bool ok= false; 0443 QString text= QInputDialog::getMultiLineText(this, tr("Css Editor"), tr("Css"), theme->getCss(), &ok); 0444 if(ok) 0445 { 0446 m_ctrl->setCurrentThemeCss(text); 0447 // qApp->setStyleSheet(theme->getCss()); 0448 } 0449 } 0450 0451 void PreferencesDialog::dupplicateTheme(bool selectNew) 0452 { 0453 int i= ui->m_themeComboBox->currentIndex(); 0454 m_ctrl->dupplicateTheme(i, selectNew); 0455 } 0456 void PreferencesDialog::setTitleAtCurrentTheme() 0457 { 0458 m_ctrl->setCurrentThemeTitle(ui->m_themeNameLineEdit->text()); 0459 } 0460 void PreferencesDialog::backgroundChanged() 0461 { 0462 m_ctrl->setCurrentThemeBackground(ui->m_backgroundImage->path(), ui->m_positioningComboBox->currentIndex(), 0463 ui->m_bgColorPush->color()); 0464 // applyBackground();setCurrentThemeBackground 0465 } 0466 0467 void PreferencesDialog::performDiag() 0468 { 0469 ui->m_diagDisplay->clear(); 0470 0471 QList<QByteArray> format(QImageReader::supportedImageFormats()); 0472 0473 QString htmlResult; 0474 QString linePattern= tr("<li>Image Format : %1 value %2</li>"); 0475 htmlResult= tr("<h2>Supported Image Formats:</h2><ul>"); 0476 QString result= ""; 0477 for(int i= 0; i < format.size(); ++i) 0478 { 0479 result+= linePattern.arg(i).arg(QString(format.at(i))); 0480 } 0481 htmlResult+= result; 0482 htmlResult+= tr("</ul>End of Image Format"); 0483 result= ""; 0484 QFontDatabase database; 0485 htmlResult+= tr("<h2>Font families:</h2><ul>"); 0486 linePattern= "<li>%1</li>"; 0487 for(auto& family : database.families()) 0488 { 0489 result+= linePattern.arg(family); 0490 } 0491 htmlResult+= result; 0492 htmlResult+= tr("</ul>End of Font families"); 0493 #ifdef HAVE_SOUND 0494 result= ""; 0495 htmlResult+= tr("<h2>Audio file formats Support:</h2><ul>"); 0496 QStringList commonAudioMimeType; 0497 commonAudioMimeType << "audio/basic" 0498 << "audio/L24" 0499 << "audio/mid" 0500 << "audio/mpeg" 0501 << "audio/mp4" 0502 << "audio/x-aiff" 0503 << "audio/x-mpegurl" 0504 << "audio/vnd.rn-realaudio" 0505 << "audio/ogg" 0506 << "audio/vorbis" 0507 << "audio/vnd.wav" 0508 << "audio/x-ms-wma" 0509 << "audio/x-wav" 0510 << "audio/wav" 0511 << "audio/webm" 0512 << "audio/flac"; // 0513 /* for(const QString &type : commonAudioMimeType) 0514 { 0515 switch (QMediaPlayer::hasSupport(type)) 0516 { 0517 case QMultimedia::NotSupported: 0518 result+=tr("<li>Unsupported format: %1</li>").arg(type); 0519 break; 0520 case QMultimedia::MaybeSupported: 0521 result+=tr("<li>Maybe supported format: %1</li>").arg(type); 0522 break; 0523 case QMultimedia::ProbablySupported: 0524 case QMultimedia::PreferredService: 0525 result+= tr("<li>Supported format: %1</li>").arg(type); 0526 break; 0527 } 0528 }*/ 0529 htmlResult+= result; 0530 htmlResult+= tr("</ul>End of Supported Audio file formats"); 0531 0532 #endif 0533 ui->m_diagDisplay->setHtml(htmlResult); 0534 } 0535 0536 void PreferencesDialog::testAliasCommand() 0537 { 0538 // ui->m_convertedCmdEdit->setText(m_ctrl->convertAlias(ui->m_cmdDiceEdit->text())); 0539 } 0540 0541 void PreferencesDialog::exportTheme() 0542 { 0543 int i= ui->m_themeComboBox->currentIndex(); 0544 auto name= m_ctrl->themeName(i); 0545 0546 QString pathExport= QFileDialog::getSaveFileName( 0547 this, tr("Export Rolisteam Theme"), 0548 m_preferences->value("ThemeDirectory", QDir::homePath()).toString().append("/%1.rskin").arg(name), 0549 tr("Rolisteam Theme: %1").arg("*.rskin")); 0550 0551 m_ctrl->exportTheme(pathExport, i); 0552 } 0553 0554 bool PreferencesDialog::importTheme() 0555 { 0556 QString pathImport= QFileDialog::getOpenFileName( 0557 this, tr("Import Rolisteam Theme"), m_preferences->value("ThemeDirectory", QDir::homePath()).toString(), 0558 tr("Rolisteam Theme: %1").arg("*.rskin")); 0559 0560 updateTheme(); 0561 ui->m_themeComboBox->setCurrentIndex(ui->m_themeComboBox->count() - 1); 0562 0563 return false; 0564 } 0565 0566 void PreferencesDialog::deleteTheme() 0567 { 0568 m_ctrl->removeTheme(ui->m_themeComboBox->currentIndex()); 0569 } 0570 0571 void PreferencesDialog::addDirectory() 0572 { 0573 auto act= qobject_cast<QAction*>(sender()); 0574 if(!act) 0575 return; 0576 0577 auto id= act->data().toInt(); 0578 0579 auto dir= QFileDialog::getExistingDirectory(this, tr("Add new directory"), QDir::homePath()); 0580 0581 if(dir.isEmpty()) 0582 return; 0583 0584 auto list= m_musicDirectories[id]->stringList(); 0585 list.append(dir); 0586 m_musicDirectories[id]->setStringList(list); 0587 save(); 0588 } 0589 0590 QModelIndex PreferencesDialog::currentIndexFromCurrentList(int i) 0591 { 0592 QModelIndex index; 0593 switch(i) 0594 { 0595 case First: 0596 index= ui->m_directoriesList1->currentIndex(); 0597 break; 0598 case Second: 0599 index= ui->m_directoriesList2->currentIndex(); 0600 break; 0601 case Third: 0602 index= ui->m_directoriesList3->currentIndex(); 0603 break; 0604 } 0605 return index; 0606 } 0607 0608 void PreferencesDialog::removeDirectory() 0609 { 0610 auto act= qobject_cast<QAction*>(sender()); 0611 if(!act) 0612 return; 0613 0614 auto id= act->data().toInt(); 0615 auto idx= currentIndexFromCurrentList(id); 0616 if(!idx.isValid()) 0617 return; 0618 0619 m_musicDirectories[id]->removeRows(idx.row(), 1); 0620 save(); 0621 } 0622 0623 void PreferencesDialog::upDirectory() 0624 { 0625 auto act= qobject_cast<QAction*>(sender()); 0626 if(!act) 0627 return; 0628 0629 auto id= act->data().toInt(); 0630 auto idx= currentIndexFromCurrentList(id); 0631 if(!idx.isValid()) 0632 return; 0633 auto src= idx.row(); 0634 auto dest= src - 1; 0635 auto list= m_musicDirectories[id]->stringList(); 0636 0637 if(dest < 0 || src >= list.size()) 0638 return; 0639 0640 list.swapItemsAt(src, dest); 0641 m_musicDirectories[id]->setStringList(list); 0642 save(); 0643 } 0644 0645 void PreferencesDialog::downDirectory() 0646 { 0647 auto act= qobject_cast<QAction*>(sender()); 0648 if(!act) 0649 return; 0650 0651 auto id= act->data().toInt(); 0652 auto idx= currentIndexFromCurrentList(id); 0653 if(!idx.isValid()) 0654 return; 0655 0656 auto src= idx.row(); 0657 auto dest= src + 1; 0658 auto list= m_musicDirectories[id]->stringList(); 0659 0660 if(src < 0 || dest >= list.size()) 0661 return; 0662 0663 list.swapItemsAt(src, dest); 0664 m_musicDirectories[id]->setStringList(list); 0665 save(); 0666 }