SettingsDialog.cc 7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*=====================================================================
 
 QGroundControl Open Source Ground Control Station
 
 (c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 
 This file is part of the QGROUNDCONTROL project
 
 QGROUNDCONTROL 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, either version 3 of the License, or
 (at your option) any later version.
 
 QGROUNDCONTROL 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 QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
 
 ======================================================================*/

24
#include <QSettings>
25
#include <QDesktopWidget>
26

Don Gagne's avatar
Don Gagne committed
27
#include "SettingsDialog.h"
28
#include "MainWindow.h"
Don Gagne's avatar
Don Gagne committed
29
#include "ui_SettingsDialog.h"
lm's avatar
lm committed
30

31
#include "JoystickWidget.h"
32 33 34
#include "LinkManager.h"
#include "MAVLinkProtocol.h"
#include "MAVLinkSettingsWidget.h"
35
#include "GAudioOutput.h"
Don Gagne's avatar
Don Gagne committed
36
#include "QGCApplication.h"
Don Gagne's avatar
Don Gagne committed
37
#include "QGCFileDialog.h"
Don Gagne's avatar
Don Gagne committed
38
#include "QGCMessageBox.h"
39

40 41 42 43
SettingsDialog::SettingsDialog(JoystickInput *joystick, QWidget *parent, Qt::WindowFlags flags) :
QDialog(parent, flags),
_mainWindow(MainWindow::instance()),
_ui(new Ui::SettingsDialog)
lm's avatar
lm committed
44
{
45 46
    _ui->setupUi(this);
    
47 48
    // Center the window on the screen.
    QRect position = frameGeometry();
49
    position.moveCenter(QApplication::desktop()->availableGeometry().center());
50
    move(position.topLeft());
51
    
52
    // Add the joystick settings pane
53 54
    _ui->tabWidget->addTab(new JoystickWidget(joystick, this), "Controllers");
    
55 56
    // Add all protocols
    QList<ProtocolInterface*> protocols = LinkManager::instance()->getProtocols();
57
    foreach (ProtocolInterface* protocol, protocols) {
58
        MAVLinkProtocol* mavlink = dynamic_cast<MAVLinkProtocol*>(protocol);
59
        if (mavlink) {
60
            MAVLinkSettingsWidget* msettings = new MAVLinkSettingsWidget(mavlink, this);
61
            _ui->tabWidget->addTab(msettings, "MAVLink");
62 63
        }
    }
64
    
65
    this->window()->setWindowTitle(tr("QGroundControl Settings"));
66
    
67
    // Audio preferences
68 69 70 71
    _ui->audioMuteCheckBox->setChecked(GAudioOutput::instance()->isMuted());
    connect(_ui->audioMuteCheckBox, SIGNAL(toggled(bool)), GAudioOutput::instance(), SLOT(mute(bool)));
    connect(GAudioOutput::instance(), SIGNAL(mutedChanged(bool)), _ui->audioMuteCheckBox, SLOT(setChecked(bool)));
    
72
    // Reconnect
73 74 75
    _ui->reconnectCheckBox->setChecked(_mainWindow->autoReconnectEnabled());
    connect(_ui->reconnectCheckBox, SIGNAL(clicked(bool)), _mainWindow, SLOT(enableAutoReconnect(bool)));
    
76
    // Low power mode
77 78 79
    _ui->lowPowerCheckBox->setChecked(_mainWindow->lowPowerModeEnabled());
    connect(_ui->lowPowerCheckBox, SIGNAL(clicked(bool)), _mainWindow, SLOT(enableLowPowerMode(bool)));
    
80
    // Dock widget title bars
81 82 83 84
    _ui->titleBarCheckBox->setChecked(_mainWindow->dockWidgetTitleBarsEnabled());
    connect(_ui->titleBarCheckBox,SIGNAL(clicked(bool)),_mainWindow,SLOT(enableDockWidgetTitleBars(bool)));
    
    connect(_ui->deleteSettings, &QAbstractButton::toggled, this, &SettingsDialog::_deleteSettingsToggled);
85
    
86
    // Custom mode
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
    
    _ui->customModeComboBox->addItem(tr("Default: Generic MAVLink and serial links"), MainWindow::CUSTOM_MODE_NONE);
    _ui->customModeComboBox->addItem(tr("Wifi: Generic MAVLink, wifi or serial links"), MainWindow::CUSTOM_MODE_WIFI);
    _ui->customModeComboBox->addItem(tr("PX4: Optimized for PX4 Autopilot Users"), MainWindow::CUSTOM_MODE_PX4);
    
    _ui->customModeComboBox->setCurrentIndex(_ui->customModeComboBox->findData(_mainWindow->getCustomMode()));
    connect(_ui->customModeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectCustomMode(int)));
    
    // Application color style
    MainWindow::QGC_MAINWINDOW_STYLE style = _mainWindow->getStyle();
    _ui->styleChooser->setCurrentIndex(style);
    
    _ui->savedFilesLocation->setText(qgcApp()->savedFilesLocation());
    _ui->promptFlightDataSave->setChecked(qgcApp()->promptFlightDataSave());
    
    // Connect signals
    connect(_ui->styleChooser, SIGNAL(currentIndexChanged(int)), this, SLOT(styleChanged(int)));
    connect(_ui->browseSavedFilesLocation, &QPushButton::clicked, this, &SettingsDialog::_selectSavedFilesDirectory);
    connect(_ui->buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialog::_validateBeforeClose);
lm's avatar
lm committed
106 107
}

108
SettingsDialog::~SettingsDialog()
lm's avatar
lm committed
109
{
110
    delete _ui;
lm's avatar
lm committed
111
}
112

113
void SettingsDialog::styleChanged(int index)
114
{
115
    _mainWindow->loadStyle((index == 1) ? MainWindow::QGC_MAINWINDOW_STYLE_LIGHT : MainWindow::QGC_MAINWINDOW_STYLE_DARK);
116
}
117

118
void SettingsDialog::selectCustomMode(int mode)
119
{
120
    _mainWindow->setCustomMode(static_cast<enum MainWindow::CUSTOM_MODE>(_ui->customModeComboBox->itemData(mode).toInt()));
121
}
122

123
void SettingsDialog::_deleteSettingsToggled(bool checked)
124 125
{
    if (checked){
Don Gagne's avatar
Don Gagne committed
126 127 128 129
        QGCMessageBox::StandardButton answer = QGCMessageBox::question(tr("Delete Settings"),
                                                                       tr("All saved settings will be deleted the next time you start QGroundControl. Is this really what you want?"),
                                                                       QMessageBox::Yes | QMessageBox::No,
                                                                       QMessageBox::No);
130
        if (answer == QMessageBox::Yes) {
131
            qgcApp()->deleteAllSettingsNextBoot();
132
        } else {
133
            _ui->deleteSettings->setChecked(false);
134
        }
135 136 137 138 139 140 141 142 143 144 145 146 147 148
    } else {
        qgcApp()->clearDeleteAllSettingsNextBoot();
    }
}

/// @brief Validates the settings before closing
void SettingsDialog::_validateBeforeClose(void)
{
    QGCApplication* app = qgcApp();
    
    // Validate the saved file location
    
    QString saveLocation = _ui->savedFilesLocation->text();
    if (!app->validatePossibleSavedFilesLocation(saveLocation)) {
Don Gagne's avatar
Don Gagne committed
149 150
        QGCMessageBox::warning(tr("Bad save location"),
                               tr("The location to save files to is invalid, or cannot be written to. Please provide a valid directory."));
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
        return;
    }
    
    // Locations is valid, save
    app->setSavedFilesLocation(saveLocation);
    
    qgcApp()->setPromptFlightDataSave(_ui->promptFlightDataSave->checkState() == Qt::Checked);
    
    // Close dialog
    accept();
}

/// @brief Displays a directory picker dialog to allow the user to select a saved file location
void SettingsDialog::_selectSavedFilesDirectory(void)
{
Don Gagne's avatar
Don Gagne committed
166
    QString newLocation = QGCFileDialog::getExistingDirectory(this,
167 168 169 170
                                                            tr("Select the directory where you want to save files to."),
                                                            _ui->savedFilesLocation->text());
    if (!newLocation.isEmpty()) {
        _ui->savedFilesLocation->setText(newLocation);
171 172
    }
}