1 #include <QtGui>
2 #include <QFileDialog>
3 #include <QMessageBox>
4 #include <QStyleFactory>
5 
6 #include "preferencesdialog.h"
7 #include "ui_preferencesdialog.h"
8 #include "mainwindow.h"
9 #include "macros.h"
10 #include "qchdmansettings.h"
11 
12 extern QtChdmanGuiSettings *globalConfig;
13 extern MainWindow *mainWindow;
14 
PreferencesDialog(QWidget * parent)15 PreferencesDialog::PreferencesDialog(QWidget *parent) :
16 	QDialog(parent),
17 	ui(new Ui::PreferencesDialog)
18 {
19 	ui->setupUi(this);
20 	setModal(true);
21 	ui->comboBoxStyle->addItems(QStyleFactory::keys());
22 	restoreSettings();
23 }
24 
~PreferencesDialog()25 PreferencesDialog::~PreferencesDialog()
26 {
27 	delete ui;
28 }
29 
initialSetup()30 void PreferencesDialog::initialSetup()
31 {
32 	ui->tabWidget->setCurrentWidget(ui->tabPaths);
33 	ui->lineEditChdmanBinary->setFocus();
34 	exec();
35 }
36 
applySettings()37 void PreferencesDialog::applySettings()
38 {
39 	// GUI
40 	QString lang = ui->comboBoxLanguage->currentText();
41 	globalConfig->setPreferencesLanguage(lang.mid(lang.indexOf("(") + 1, 2));
42 	globalConfig->setPreferencesGuiStyle(ui->comboBoxStyle->currentText());
43 	qApp->setStyle(globalConfig->preferencesGuiStyle());
44 	globalConfig->setPreferencesAppFont(ui->fontComboBoxAppFont->currentFont().toString());
45 	globalConfig->setPreferencesAppFontSize(ui->spinBoxAppFontSize->value());
46 	QFont f;
47 	f.fromString(globalConfig->preferencesAppFont());
48 	f.setPointSize(globalConfig->preferencesAppFontSize());
49 	qApp->setFont(f);
50 	globalConfig->setPreferencesLogFont(ui->fontComboBoxLogFont->currentFont().toString());
51 	globalConfig->setPreferencesLogFontSize(ui->spinBoxLogFontSize->value());
52 	globalConfig->setPreferencesEditorFont(ui->fontComboBoxEditorFont->currentFont().toString());
53 	globalConfig->setPreferencesEditorFontSize(ui->spinBoxEditorFontSize->value());
54 	globalConfig->setPreferencesShowHelpTexts(ui->checkBoxShowProjectHelp->isChecked());
55 	globalConfig->setPreferencesMaximizeWindows(ui->checkBoxMaximizeWindows->isChecked());
56 	globalConfig->setPreferencesNativeFileDialogs(ui->checkBoxNativeFileDialogs->isChecked());
57 	globalConfig->setPreferencesLogChannelNames(ui->checkBoxLogChannelNames->isChecked());
58 
59 	// Paths
60 	globalConfig->setPreferencesChdmanBinary(ui->lineEditChdmanBinary->text());
61 	QFileInfo chdmanInfo(ui->lineEditChdmanBinary->text());
62 	if ( chdmanInfo.exists() && chdmanInfo.isExecutable() )
63 		ui->labelChdmanWarningPixmap->hide();
64 	else
65 		ui->labelChdmanWarningPixmap->show();
66 	globalConfig->setPreferencesPreferredCHDInputPath(ui->lineEditPreferredCHDInputPath->text());
67 	globalConfig->setPreferencesPreferredInputPath(ui->lineEditPreferredInputPath->text());
68 	globalConfig->setPreferencesPreferredCHDOutputPath(ui->lineEditPreferredCHDOutputPath->text());
69 	globalConfig->setPreferencesPreferredOutputPath(ui->lineEditPreferredOutputPath->text());
70 
71 	mainWindow->applySettings();
72 }
73 
on_pushButtonOk_clicked()74 void PreferencesDialog::on_pushButtonOk_clicked()
75 {
76 	applySettings();
77 }
78 
on_pushButtonApply_clicked()79 void PreferencesDialog::on_pushButtonApply_clicked()
80 {
81 	applySettings();
82 	adjustSize();
83 }
84 
on_pushButtonCancel_clicked()85 void PreferencesDialog::on_pushButtonCancel_clicked()
86 {
87 	restoreSettings();
88 }
89 
on_toolButtonBrowseChdmanBinary_clicked()90 void PreferencesDialog::on_toolButtonBrowseChdmanBinary_clicked()
91 {
92 	QString s = QFileDialog::getOpenFileName(this, tr("Choose CHDMAN binary"), ui->lineEditChdmanBinary->text(), tr("All files (*)"), 0, globalConfig->preferencesNativeFileDialogs() ? (QFileDialog::Options)0 : QFileDialog::DontUseNativeDialog);
93 	if ( !s.isNull() )
94 		ui->lineEditChdmanBinary->setText(s);
95 }
96 
on_toolButtonBrowsePreferredCHDInputPath_clicked()97 void PreferencesDialog::on_toolButtonBrowsePreferredCHDInputPath_clicked()
98 {
99 	QString s = QFileDialog::getExistingDirectory(this, tr("Choose preferred CHD input path"), ui->lineEditPreferredCHDInputPath->text(), globalConfig->preferencesNativeFileDialogs() ? (QFileDialog::Options)0 : QFileDialog::DontUseNativeDialog);
100 	if ( !s.isNull() )
101 		ui->lineEditPreferredCHDInputPath->setText(s);
102 }
103 
on_toolButtonBrowsePreferredInputPath_clicked()104 void PreferencesDialog::on_toolButtonBrowsePreferredInputPath_clicked()
105 {
106 	QString s = QFileDialog::getExistingDirectory(this, tr("Choose preferred non-CHD input path"), ui->lineEditPreferredInputPath->text(), globalConfig->preferencesNativeFileDialogs() ? (QFileDialog::Options)0 : QFileDialog::DontUseNativeDialog);
107 	if ( !s.isNull() )
108 		ui->lineEditPreferredInputPath->setText(s);
109 }
110 
on_toolButtonBrowsePreferredCHDOutputPath_clicked()111 void PreferencesDialog::on_toolButtonBrowsePreferredCHDOutputPath_clicked()
112 {
113 	QString s = QFileDialog::getExistingDirectory(this, tr("Choose preferred CHD output path"), ui->lineEditPreferredCHDOutputPath->text(), globalConfig->preferencesNativeFileDialogs() ? (QFileDialog::Options)0 : QFileDialog::DontUseNativeDialog);
114 	if ( !s.isNull() )
115 		ui->lineEditPreferredCHDOutputPath->setText(s);
116 }
117 
on_toolButtonBrowsePreferredOutputPath_clicked()118 void PreferencesDialog::on_toolButtonBrowsePreferredOutputPath_clicked()
119 {
120 	QString s = QFileDialog::getExistingDirectory(this, tr("Choose preferred non-CHD output path"), ui->lineEditPreferredOutputPath->text(), globalConfig->preferencesNativeFileDialogs() ? (QFileDialog::Options)0 : QFileDialog::DontUseNativeDialog);
121 	if ( !s.isNull() )
122 		ui->lineEditPreferredOutputPath->setText(s);
123 }
124 
restoreSettings()125 void PreferencesDialog::restoreSettings()
126 {
127 	// GUI
128 	QString lang = globalConfig->preferencesLanguage();
129 	int i = ui->comboBoxLanguage->findText("(" + lang + ")", Qt::MatchEndsWith);
130 	if ( i >= 0 )
131 		ui->comboBoxLanguage->setCurrentIndex(i);
132 	else
133 		ui->comboBoxLanguage->setCurrentIndex(ui->comboBoxLanguage->findText("(us)", Qt::MatchEndsWith));
134 
135 	i = ui->comboBoxStyle->findText(globalConfig->preferencesGuiStyle());
136 	if ( i >= 0 )
137 		ui->comboBoxStyle->setCurrentIndex(i);
138 	QFont f;
139 	if ( !f.fromString(globalConfig->preferencesAppFont()) )
140 		f = qApp->font();
141 	ui->fontComboBoxAppFont->setCurrentFont(f);
142 	ui->spinBoxAppFontSize->setValue(globalConfig->preferencesAppFontSize());
143 	if ( !f.fromString(globalConfig->preferencesLogFont()) )
144 		f = qApp->font();
145 	ui->fontComboBoxLogFont->setCurrentFont(f);
146 	ui->spinBoxLogFontSize->setValue(globalConfig->preferencesLogFontSize());
147 	if ( !f.fromString(globalConfig->preferencesEditorFont()) )
148 		f = qApp->font();
149 	ui->fontComboBoxEditorFont->setCurrentFont(f);
150 	ui->spinBoxEditorFontSize->setValue(globalConfig->preferencesEditorFontSize());
151 	ui->checkBoxShowProjectHelp->setChecked(globalConfig->preferencesShowHelpTexts());
152 	ui->checkBoxMaximizeWindows->setChecked(globalConfig->preferencesMaximizeWindows());
153 	ui->checkBoxNativeFileDialogs->setChecked(globalConfig->preferencesNativeFileDialogs());
154 	ui->checkBoxLogChannelNames->setChecked(globalConfig->preferencesLogChannelNames());
155 
156 	// Paths
157 	ui->lineEditChdmanBinary->setText(globalConfig->preferencesChdmanBinary());
158 	QFileInfo chdmanInfo(ui->lineEditChdmanBinary->text());
159 	if ( chdmanInfo.exists() && chdmanInfo.isExecutable() )
160 		ui->labelChdmanWarningPixmap->hide();
161 	else
162 		ui->labelChdmanWarningPixmap->show();
163 	ui->lineEditPreferredCHDInputPath->setText(globalConfig->preferencesPreferredCHDInputPath());
164 	ui->lineEditPreferredInputPath->setText(globalConfig->preferencesPreferredInputPath());
165 	ui->lineEditPreferredCHDOutputPath->setText(globalConfig->preferencesPreferredCHDOutputPath());
166 	ui->lineEditPreferredOutputPath->setText(globalConfig->preferencesPreferredOutputPath());
167 }
168 
showEvent(QShowEvent * e)169 void PreferencesDialog::showEvent(QShowEvent *e)
170 {
171 	adjustSize();
172 	QDialog::showEvent(e);
173 }
174