1 /*
2 * barrier -- mouse and keyboard sharing utility
3 * Copyright (C) 2012-2016 Symless Ltd.
4 * Copyright (C) 2008 Volker Lanz (vl@fidra.de)
5 *
6 * This package is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * found in the file LICENSE that should have accompanied this file.
9 *
10 * This package is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #include "SettingsDialog.h"
20
21 #include "BarrierLocale.h"
22 #include "QBarrierApplication.h"
23 #include "QUtility.h"
24 #include "AppConfig.h"
25 #include "SslCertificate.h"
26 #include "MainWindow.h"
27
28 #include <QtCore>
29 #include <QtGui>
30 #include <QMessageBox>
31 #include <QFileDialog>
32 #include <QDir>
33
SettingsDialog(QWidget * parent,AppConfig & config)34 SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) :
35 QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
36 Ui::SettingsDialogBase(),
37 m_appConfig(config)
38 {
39 setupUi(this);
40
41 m_Locale.fillLanguageComboBox(m_pComboLanguage);
42
43 m_pLineEditScreenName->setText(appConfig().screenName());
44 m_pSpinBoxPort->setValue(appConfig().port());
45 m_pLineEditInterface->setText(appConfig().networkInterface());
46 m_pComboLogLevel->setCurrentIndex(appConfig().logLevel());
47 m_pCheckBoxLogToFile->setChecked(appConfig().logToFile());
48 m_pLineEditLogFilename->setText(appConfig().logFilename());
49 setIndexFromItemData(m_pComboLanguage, appConfig().language());
50 m_pCheckBoxAutoHide->setChecked(appConfig().getAutoHide());
51 m_pCheckBoxMinimizeToTray->setChecked(appConfig().getMinimizeToTray());
52 m_pCheckBoxEnableCrypto->setChecked(m_appConfig.getCryptoEnabled());
53
54 #if defined(Q_OS_WIN)
55 m_pComboElevate->setCurrentIndex(static_cast<int>(appConfig().elevateMode()));
56 #else
57 // elevate checkbox is only useful on ms windows.
58 m_pLabelElevate->hide();
59 m_pComboElevate->hide();
60 #endif
61 }
62
accept()63 void SettingsDialog::accept()
64 {
65 m_appConfig.setScreenName(m_pLineEditScreenName->text());
66 m_appConfig.setPort(m_pSpinBoxPort->value());
67 m_appConfig.setNetworkInterface(m_pLineEditInterface->text());
68 m_appConfig.setCryptoEnabled(m_pCheckBoxEnableCrypto->isChecked());
69 m_appConfig.setLogLevel(m_pComboLogLevel->currentIndex());
70 m_appConfig.setLogToFile(m_pCheckBoxLogToFile->isChecked());
71 m_appConfig.setLogFilename(m_pLineEditLogFilename->text());
72 m_appConfig.setLanguage(m_pComboLanguage->itemData(m_pComboLanguage->currentIndex()).toString());
73 m_appConfig.setElevateMode(static_cast<ElevateMode>(m_pComboElevate->currentIndex()));
74 m_appConfig.setAutoHide(m_pCheckBoxAutoHide->isChecked());
75 m_appConfig.setMinimizeToTray(m_pCheckBoxMinimizeToTray->isChecked());
76 m_appConfig.saveSettings();
77 QDialog::accept();
78 }
79
reject()80 void SettingsDialog::reject()
81 {
82 if (m_appConfig.language() != m_pComboLanguage->itemData(m_pComboLanguage->currentIndex()).toString()) {
83 QBarrierApplication::getInstance()->switchTranslator(m_appConfig.language());
84 }
85 QDialog::reject();
86 }
87
changeEvent(QEvent * event)88 void SettingsDialog::changeEvent(QEvent* event)
89 {
90 if (event != 0)
91 {
92 switch (event->type())
93 {
94 case QEvent::LanguageChange:
95 {
96 int logLevelIndex = m_pComboLogLevel->currentIndex();
97
98 m_pComboLanguage->blockSignals(true);
99 retranslateUi(this);
100 m_pComboLanguage->blockSignals(false);
101
102 m_pComboLogLevel->setCurrentIndex(logLevelIndex);
103 break;
104 }
105
106 default:
107 QDialog::changeEvent(event);
108 }
109 }
110 }
111
on_m_pCheckBoxLogToFile_stateChanged(int i)112 void SettingsDialog::on_m_pCheckBoxLogToFile_stateChanged(int i)
113 {
114 bool checked = i == 2;
115
116 m_pLineEditLogFilename->setEnabled(checked);
117 m_pButtonBrowseLog->setEnabled(checked);
118 }
119
on_m_pButtonBrowseLog_clicked()120 void SettingsDialog::on_m_pButtonBrowseLog_clicked()
121 {
122 QString fileName = QFileDialog::getSaveFileName(
123 this, tr("Save log file to..."),
124 m_pLineEditLogFilename->text(),
125 "Logs (*.log *.txt)");
126
127 if (!fileName.isEmpty())
128 {
129 m_pLineEditLogFilename->setText(fileName);
130 }
131 }
132
on_m_pComboLanguage_currentIndexChanged(int index)133 void SettingsDialog::on_m_pComboLanguage_currentIndexChanged(int index)
134 {
135 QString ietfCode = m_pComboLanguage->itemData(index).toString();
136 QBarrierApplication::getInstance()->switchTranslator(ietfCode);
137 }
138