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