/* * Copyright (C) 2015-2016 Département de l'Instruction Publique (DIP-SEM) * * Copyright (C) 2013 Open Education Foundation * * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour * l'Education Numérique en Afrique (GIP ENA) * * This file is part of OpenBoard. * * OpenBoard is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3 of the License, * with a specific linking exception for the OpenSSL project's * "OpenSSL" library (or with modified versions of it that use the * same license as the "OpenSSL" library). * * OpenBoard is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenBoard. If not, see . */ #include "UBPreferencesController.h" #include "UBSettings.h" #include "UBApplication.h" #include "gui/UBCircleFrame.h" #include "core/UBSetting.h" #include "core/UBApplicationController.h" #include "core/UBDisplayManager.h" #include "board/UBBoardController.h" #include "board/UBDrawingController.h" #include "podcast/UBPodcastController.h" #include "ui_preferences.h" #include "core/memcheck.h" #include "qdesktopwidget.h" qreal UBPreferencesController::sSliderRatio = 10.0; qreal UBPreferencesController::sMinPenWidth = 0.5; qreal UBPreferencesController::sMaxPenWidth = 50.0; UBPreferencesDialog::UBPreferencesDialog(UBPreferencesController* prefController, QWidget* parent,Qt::WindowFlags f) :QDialog(parent,f) ,mPreferencesController(prefController) { } UBPreferencesDialog::~UBPreferencesDialog() { } void UBPreferencesDialog::closeEvent(QCloseEvent* e) { e->accept(); } UBPreferencesController::UBPreferencesController(QWidget *parent) : QObject(parent) , mPreferencesWindow(0) , mPreferencesUI(0) , mPenProperties(0) , mMarkerProperties(0) { mDesktop = qApp->desktop(); mPreferencesWindow = new UBPreferencesDialog(this,parent, Qt::Dialog); mPreferencesUI = new Ui::preferencesDialog(); // deleted in mPreferencesUI->setupUi(mPreferencesWindow); adjustScreens(1); connect(mDesktop, &QDesktopWidget::screenCountChanged, this, &UBPreferencesController::adjustScreens); wire(); } UBPreferencesController::~UBPreferencesController() { delete mPreferencesWindow; delete mPreferencesUI; delete mPenProperties; delete mMarkerProperties; } void UBPreferencesController::adjustScreens(int screen) { Q_UNUSED(screen); UBDisplayManager displayManager; mPreferencesUI->multiDisplayGroupBox->setEnabled(displayManager.numScreens() > 1); } void UBPreferencesController::show() { init(); mPreferencesWindow->exec(); } void UBPreferencesController::wire() { UBSettings* settings = UBSettings::settings(); // main tab mPreferencesUI->mainTabWidget->setCurrentWidget(mPreferencesUI->displayTab); mPreferencesUI->versionLabel->setText(tr("version: ") + UBApplication::applicationVersion()); connect(mPreferencesUI->closeButton, SIGNAL(released()), this, SLOT(close())); connect(mPreferencesUI->defaultSettingsButton, SIGNAL(released()), this, SLOT(defaultSettings())); // OSK preferences for(int i = 0; i < settings->supportedKeyboardSizes->size(); i++) mPreferencesUI->keyboardPaletteKeyButtonSize->addItem(settings->supportedKeyboardSizes->at(i)); connect(mPreferencesUI->useSystemOSKCheckBox, SIGNAL(clicked(bool)), settings->useSystemOnScreenKeyboard, SLOT(setBool(bool))); connect(mPreferencesUI->useSystemOSKCheckBox, SIGNAL(clicked(bool)), this, SLOT(systemOSKCheckBoxToggled(bool))); connect(mPreferencesUI->keyboardPaletteKeyButtonSize, SIGNAL(currentIndexChanged(const QString &)), settings->boardKeyboardPaletteKeyBtnSize, SLOT(setString(const QString &))); connect(mPreferencesUI->startModeComboBox, SIGNAL(currentIndexChanged(int)), settings->appStartMode, SLOT(setInt(int))); connect(mPreferencesUI->useExternalBrowserCheckBox, SIGNAL(clicked(bool)), settings->webUseExternalBrowser, SLOT(setBool(bool))); connect(mPreferencesUI->displayBrowserPageCheckBox, SIGNAL(clicked(bool)), settings->webShowPageImmediatelyOnMirroredScreen, SLOT(setBool(bool))); connect(mPreferencesUI->swapControlAndDisplayScreensCheckBox, SIGNAL(clicked(bool)), settings->swapControlAndDisplayScreens, SLOT(setBool(bool))); connect(mPreferencesUI->swapControlAndDisplayScreensCheckBox, SIGNAL(clicked(bool)), UBApplication::applicationController->displayManager(), SLOT(reinitScreens(bool))); connect(mPreferencesUI->toolbarAtTopRadioButton, SIGNAL(clicked(bool)), this, SLOT(toolbarPositionChanged(bool))); connect(mPreferencesUI->toolbarAtBottomRadioButton, SIGNAL(clicked(bool)), this, SLOT(toolbarPositionChanged(bool))); connect(mPreferencesUI->horizontalChoice, SIGNAL(clicked(bool)), this, SLOT(toolbarOrientationHorizontal(bool))); connect(mPreferencesUI->verticalChoice, SIGNAL(clicked(bool)), this, SLOT(toolbarOrientationVertical(bool))); connect(mPreferencesUI->toolbarDisplayTextCheckBox, SIGNAL(clicked(bool)), settings->appToolBarDisplayText, SLOT(setBool(bool))); // pen QList penLightBackgroundColors = settings->boardPenLightBackgroundColors->colors(); QList penDarkBackgroundColors = settings->boardPenDarkBackgroundColors->colors(); QList penLightBackgroundSelectedColors = settings->boardPenLightBackgroundSelectedColors->colors(); QList penDarkBackgroundSelectedColors = settings->boardPenDarkBackgroundSelectedColors->colors(); mPenProperties = new UBBrushPropertiesFrame(mPreferencesUI->penFrame, penLightBackgroundColors, penDarkBackgroundColors, penLightBackgroundSelectedColors, penDarkBackgroundSelectedColors, this); mPenProperties->opacityFrame->hide(); connect(mPenProperties->fineSlider, SIGNAL(valueChanged(int)), this, SLOT(widthSliderChanged(int))); connect(mPenProperties->mediumSlider, SIGNAL(valueChanged(int)), this, SLOT(widthSliderChanged(int))); connect(mPenProperties->strongSlider, SIGNAL(valueChanged(int)), this, SLOT(widthSliderChanged(int))); connect(mPenProperties->pressureSensitiveCheckBox, SIGNAL(clicked(bool)), settings, SLOT(setPenPressureSensitive(bool))); // marker QList markerLightBackgroundColors = settings->boardMarkerLightBackgroundColors->colors(); QList markerDarkBackgroundColors = settings->boardMarkerDarkBackgroundColors->colors(); QList markerLightBackgroundSelectedColors = settings->boardMarkerLightBackgroundSelectedColors->colors(); QList markerDarkBackgroundSelectedColors = settings->boardMarkerDarkBackgroundSelectedColors->colors(); mMarkerProperties = new UBBrushPropertiesFrame(mPreferencesUI->markerFrame, markerLightBackgroundColors, markerDarkBackgroundColors, markerLightBackgroundSelectedColors, markerDarkBackgroundSelectedColors, this); mMarkerProperties->pressureSensitiveCheckBox->setText(tr("Marker is pressure sensitive")); connect(mMarkerProperties->fineSlider, SIGNAL(valueChanged(int)), this, SLOT(widthSliderChanged(int))); connect(mMarkerProperties->mediumSlider, SIGNAL(valueChanged(int)), this, SLOT(widthSliderChanged(int))); connect(mMarkerProperties->strongSlider, SIGNAL(valueChanged(int)), this, SLOT(widthSliderChanged(int))); connect(mMarkerProperties->pressureSensitiveCheckBox, SIGNAL(clicked(bool)), settings, SLOT(setMarkerPressureSensitive(bool))); connect(mMarkerProperties->opacitySlider, SIGNAL(valueChanged(int)), this, SLOT(opacitySliderChanged(int))); // about tab connect(mPreferencesUI->checkSoftwareUpdateAtLaunchCheckBox, SIGNAL(clicked(bool)), settings->appEnableAutomaticSoftwareUpdates, SLOT(setBool(bool))); // As we (hopefully temporarily) don't have a website to check updates at, this setting is hidden for now mPreferencesUI->softwareUpdateGroupBox->setVisible(false); connect(mPreferencesUI->checkOpenSankoreAtStartup, SIGNAL(clicked(bool)), settings->appLookForOpenSankoreInstall, SLOT(setBool(bool))); } void UBPreferencesController::init() { UBSettings* settings = UBSettings::settings(); // about tab mPreferencesUI->checkSoftwareUpdateAtLaunchCheckBox->setChecked(settings->appEnableAutomaticSoftwareUpdates->get().toBool()); mPreferencesUI->checkOpenSankoreAtStartup->setChecked(settings->appLookForOpenSankoreInstall->get().toBool()); // display tab for(int i=0; ikeyboardPaletteKeyButtonSize->count(); i++) if (mPreferencesUI->keyboardPaletteKeyButtonSize->itemText(i) == settings->boardKeyboardPaletteKeyBtnSize->get().toString()) { mPreferencesUI->keyboardPaletteKeyButtonSize->setCurrentIndex(i); break; } mPreferencesUI->useSystemOSKCheckBox->setChecked(settings->useSystemOnScreenKeyboard->get().toBool()); this->systemOSKCheckBoxToggled(mPreferencesUI->useSystemOSKCheckBox->isChecked()); mPreferencesUI->startModeComboBox->setCurrentIndex(settings->appStartMode->get().toInt()); mPreferencesUI->useExternalBrowserCheckBox->setChecked(settings->webUseExternalBrowser->get().toBool()); mPreferencesUI->displayBrowserPageCheckBox->setChecked(settings->webShowPageImmediatelyOnMirroredScreen->get().toBool()); mPreferencesUI->swapControlAndDisplayScreensCheckBox->setChecked(settings->swapControlAndDisplayScreens->get().toBool()); mPreferencesUI->webHomePage->setText(settings->webHomePage->get().toString()); mPreferencesUI->proxyUsername->setText(settings->proxyUsername()); mPreferencesUI->proxyPassword->setText(settings->proxyPassword()); mPreferencesUI->toolbarAtTopRadioButton->setChecked(settings->appToolBarPositionedAtTop->get().toBool()); mPreferencesUI->toolbarAtBottomRadioButton->setChecked(!settings->appToolBarPositionedAtTop->get().toBool()); mPreferencesUI->toolbarDisplayTextCheckBox->setChecked(settings->appToolBarDisplayText->get().toBool()); mPreferencesUI->verticalChoice->setChecked(settings->appToolBarOrientationVertical->get().toBool()); mPreferencesUI->horizontalChoice->setChecked(!settings->appToolBarOrientationVertical->get().toBool()); // pen tab mPenProperties->fineSlider->setValue(settings->boardPenFineWidth->get().toDouble() * sSliderRatio); mPenProperties->mediumSlider->setValue(settings->boardPenMediumWidth->get().toDouble() * sSliderRatio); mPenProperties->strongSlider->setValue(settings->boardPenStrongWidth->get().toDouble() * sSliderRatio); mPenProperties->pressureSensitiveCheckBox->setChecked(settings->boardPenPressureSensitive->get().toBool()); // marker tab mMarkerProperties->fineSlider->setValue(settings->boardMarkerFineWidth->get().toDouble() * sSliderRatio); mMarkerProperties->mediumSlider->setValue(settings->boardMarkerMediumWidth->get().toDouble() * sSliderRatio); mMarkerProperties->strongSlider->setValue(settings->boardMarkerStrongWidth->get().toDouble() * sSliderRatio); mMarkerProperties->pressureSensitiveCheckBox->setChecked(settings->boardMarkerPressureSensitive->get().toBool()); mMarkerProperties->opacitySlider->setValue(settings->boardMarkerAlpha->get().toDouble() * 100); } void UBPreferencesController::close() { //web QString homePage = mPreferencesUI->webHomePage->text(); UBSettings::settings()->webHomePage->set(homePage); UBSettings::settings()->setProxyUsername(mPreferencesUI->proxyUsername->text()); UBSettings::settings()->setProxyPassword(mPreferencesUI->proxyPassword->text()); mPreferencesWindow->accept(); } void UBPreferencesController::defaultSettings() { UBSettings* settings = UBSettings::settings(); if (mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->displayTab) { bool defaultValue = settings->appToolBarPositionedAtTop->reset().toBool(); mPreferencesUI->toolbarAtTopRadioButton->setChecked(defaultValue); mPreferencesUI->toolbarAtBottomRadioButton->setChecked(!defaultValue); defaultValue = settings->appToolBarDisplayText->reset().toBool(); mPreferencesUI->toolbarDisplayTextCheckBox->setChecked(defaultValue); mPreferencesUI->verticalChoice->setChecked(settings->appToolBarOrientationVertical->reset().toBool()); mPreferencesUI->horizontalChoice->setChecked(!settings->appToolBarOrientationVertical->reset().toBool()); mPreferencesUI->startModeComboBox->setCurrentIndex(0); mPreferencesUI->useSystemOSKCheckBox->setChecked(settings->useSystemOnScreenKeyboard->reset().toBool()); } else if (mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->penTab) { mPenProperties->fineSlider->setValue(settings->boardPenFineWidth->reset().toDouble() * sSliderRatio); mPenProperties->mediumSlider->setValue(settings->boardPenMediumWidth->reset().toDouble() * sSliderRatio); mPenProperties->strongSlider->setValue(settings->boardPenStrongWidth->reset().toDouble() * sSliderRatio); mPenProperties->pressureSensitiveCheckBox->setChecked(settings->boardPenPressureSensitive->reset().toBool()); settings->boardPenLightBackgroundSelectedColors->reset(); QList lightBackgroundSelectedColors = settings->boardPenLightBackgroundSelectedColors->colors(); settings->boardPenDarkBackgroundSelectedColors->reset(); QList darkBackgroundSelectedColors = settings->boardPenDarkBackgroundSelectedColors->colors(); for (int i = 0 ; i < settings->colorPaletteSize ; i++) { mPenProperties->lightBackgroundColorPickers[i]->setSelectedColorIndex(lightBackgroundSelectedColors.indexOf(settings->penColors(false).at(i))); mPenProperties->darkBackgroundColorPickers[i]->setSelectedColorIndex(darkBackgroundSelectedColors.indexOf(settings->penColors(true).at(i))); } } else if (mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->markerTab) { mMarkerProperties->fineSlider->setValue(settings->boardMarkerFineWidth->reset().toDouble() * sSliderRatio); mMarkerProperties->mediumSlider->setValue(settings->boardMarkerMediumWidth->reset().toDouble() * sSliderRatio); mMarkerProperties->strongSlider->setValue(settings->boardMarkerStrongWidth->reset().toDouble() * sSliderRatio); mMarkerProperties->pressureSensitiveCheckBox->setChecked(settings->boardMarkerPressureSensitive->reset().toBool()); mMarkerProperties->opacitySlider->setValue(settings->boardMarkerAlpha->reset().toDouble() * 100); settings->boardMarkerLightBackgroundSelectedColors->reset(); QList lightBackgroundSelectedColors = settings->boardMarkerLightBackgroundSelectedColors->colors(); settings->boardMarkerDarkBackgroundSelectedColors->reset(); QList darkBackgroundSelectedColors = settings->boardMarkerDarkBackgroundSelectedColors->colors(); for (int i = 0 ; i < settings->colorPaletteSize ; i++) { mMarkerProperties->lightBackgroundColorPickers[i]->setSelectedColorIndex(lightBackgroundSelectedColors.indexOf(settings->markerColors(false).at(i))); mMarkerProperties->darkBackgroundColorPickers[i]->setSelectedColorIndex(darkBackgroundSelectedColors.indexOf(settings->markerColors(true).at(i))); } } else if (mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->aboutTab) { bool defaultValue = settings->appEnableAutomaticSoftwareUpdates->reset().toBool(); mPreferencesUI->checkSoftwareUpdateAtLaunchCheckBox->setChecked(defaultValue); defaultValue = settings->appLookForOpenSankoreInstall->reset().toBool(); mPreferencesUI->checkOpenSankoreAtStartup->setChecked(defaultValue); } else if(mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->networkTab){ bool defaultValue = settings->webUseExternalBrowser->reset().toBool(); mPreferencesUI->useExternalBrowserCheckBox->setChecked(defaultValue); defaultValue = settings->webShowPageImmediatelyOnMirroredScreen->reset().toBool(); mPreferencesUI->displayBrowserPageCheckBox->setChecked(defaultValue); mPreferencesUI->webHomePage->setText(settings->webHomePage->reset().toString()); } } void UBPreferencesController::widthSliderChanged(int value) { UBSettings* settings = UBSettings::settings(); qreal width = value / sSliderRatio; QObject *slider = sender(); UBCircleFrame* display = 0; if (slider == mPenProperties->fineSlider) { settings->boardPenFineWidth->set(width); display = mPenProperties->fineDisplayFrame; } else if (slider == mPenProperties->mediumSlider) { settings->boardPenMediumWidth->set(width); display = mPenProperties->mediumDisplayFrame; } else if (slider == mPenProperties->strongSlider) { settings->boardPenStrongWidth->set(width); display = mPenProperties->strongDisplayFrame; } else if (slider == mMarkerProperties->fineSlider) { settings->boardMarkerFineWidth->set(width); display = mMarkerProperties->fineDisplayFrame; } else if (slider == mMarkerProperties->mediumSlider) { settings->boardMarkerMediumWidth->set(width); display = mMarkerProperties->mediumDisplayFrame; } else if (slider == mMarkerProperties->strongSlider) { settings->boardMarkerStrongWidth->set(width); display = mMarkerProperties->strongDisplayFrame; } else { qDebug() << "widthSliderChanged : unknown sender ... ignoring event"; } if (display) { display->currentPenWidth = width; display->maxPenWidth = sMaxPenWidth; display->repaint(); } } void UBPreferencesController::opacitySliderChanged(int value) { qreal opacity = ((qreal)value) / 100; QObject *slider = sender(); if (slider == mMarkerProperties->opacitySlider) { UBDrawingController::drawingController()->setMarkerAlpha(opacity); } } void UBPreferencesController::colorSelected(const QColor& color) { UBColorPicker *colorPicker = qobject_cast(sender()); int index = mPenProperties->lightBackgroundColorPickers.indexOf(colorPicker); if (index >= 0) { UBDrawingController::drawingController()->setPenColor(false, color, index); return; } index = mPenProperties->darkBackgroundColorPickers.indexOf(colorPicker); if (index >= 0) { UBDrawingController::drawingController()->setPenColor(true, color, index); } index = mMarkerProperties->lightBackgroundColorPickers.indexOf(colorPicker); if (index >= 0) { UBDrawingController::drawingController()->setMarkerColor(false, color, index); } index = mMarkerProperties->darkBackgroundColorPickers.indexOf(colorPicker); if (index >= 0) { UBDrawingController::drawingController()->setMarkerColor(true, color, index); } } void UBPreferencesController::toolbarPositionChanged(bool checked) { Q_UNUSED(checked); UBSettings* settings = UBSettings::settings(); settings->appToolBarPositionedAtTop->set(mPreferencesUI->toolbarAtTopRadioButton->isChecked()); } void UBPreferencesController::toolbarOrientationVertical(bool checked) { UBSettings* settings = UBSettings::settings(); settings->appToolBarOrientationVertical->set(checked); } void UBPreferencesController::toolbarOrientationHorizontal(bool checked) { UBSettings* settings = UBSettings::settings(); settings->appToolBarOrientationVertical->set(!checked); } void UBPreferencesController::systemOSKCheckBoxToggled(bool checked) { mPreferencesUI->keyboardPaletteKeyButtonSize->setVisible(!checked); mPreferencesUI->keyboardPaletteKeyButtonSize_Label->setVisible(!checked); } UBBrushPropertiesFrame::UBBrushPropertiesFrame(QFrame* owner, const QList& lightBackgroundColors, const QList& darkBackgroundColors, const QList& lightBackgroundSelectedColors, const QList& darkBackgroundSelectedColors, UBPreferencesController* controller) { setupUi(owner); QPalette lightBackgroundPalette = QApplication::palette(); lightBackgroundPalette.setColor(QPalette::Window, Qt::white); lightBackgroundFrame->setAutoFillBackground(true); lightBackgroundFrame->setPalette(lightBackgroundPalette); QPalette darkBackgroundPalette = QApplication::palette(); darkBackgroundPalette.setColor(QPalette::Window, Qt::black); darkBackgroundPalette.setColor(QPalette::ButtonText, Qt::white); darkBackgroundPalette.setColor(QPalette::WindowText, Qt::white); darkBackgroundFrame->setAutoFillBackground(true); darkBackgroundFrame->setPalette(darkBackgroundPalette); darkBackgroundLabel->setPalette(darkBackgroundPalette); QList firstLightBackgroundColor; firstLightBackgroundColor.append(lightBackgroundColors[0]); lightBackgroundColorPicker0->setColors(firstLightBackgroundColor); lightBackgroundColorPicker0->setSelectedColorIndex(0); lightBackgroundColorPickers.append(lightBackgroundColorPicker0); for (int i = 1 ; i < UBSettings::settings()->colorPaletteSize ; i++) { UBColorPicker *picker = new UBColorPicker(lightBackgroundFrame); picker->setObjectName(QString::fromUtf8("penLightBackgroundColor") + i); picker->setMinimumSize(QSize(32, 32)); picker->setFrameShape(QFrame::StyledPanel); picker->setFrameShadow(QFrame::Raised); lightBackgroundLayout->addWidget(picker); picker->setColors(lightBackgroundColors); picker->setSelectedColorIndex(lightBackgroundColors.indexOf(lightBackgroundSelectedColors.at(i))); lightBackgroundColorPickers.append(picker); QObject::connect(picker, SIGNAL(colorSelected(const QColor&)), controller, SLOT(colorSelected(const QColor&))); } QList firstDarkBackgroundColor; firstDarkBackgroundColor.append(darkBackgroundColors[0]); darkBackgroundColorPicker0->setColors(firstDarkBackgroundColor); darkBackgroundColorPicker0->setSelectedColorIndex(0); darkBackgroundColorPickers.append(darkBackgroundColorPicker0); for (int i = 1 ; i < UBSettings::settings()->colorPaletteSize ; i++) { UBColorPicker *picker = new UBColorPicker(darkBackgroundFrame); picker->setObjectName(QString::fromUtf8("penDarkBackgroundColor") + i); picker->setMinimumSize(QSize(32, 32)); picker->setFrameShape(QFrame::StyledPanel); picker->setFrameShadow(QFrame::Raised); darkBackgroundLayout->addWidget(picker); picker->setColors(darkBackgroundColors); picker->setSelectedColorIndex(darkBackgroundColors.indexOf(darkBackgroundSelectedColors.at(i))); darkBackgroundColorPickers.append(picker); QObject::connect(picker, SIGNAL(colorSelected(const QColor&)), controller, SLOT(colorSelected(const QColor&))); } }