lbajardsilogic@0
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
lbajardsilogic@0
|
2
|
lbajardsilogic@0
|
3 /*
|
lbajardsilogic@0
|
4 Sonic Visualiser
|
lbajardsilogic@0
|
5 An audio file viewer and annotation editor.
|
lbajardsilogic@0
|
6 Centre for Digital Music, Queen Mary, University of London.
|
lbajardsilogic@0
|
7 This file copyright 2006 Chris Cannam.
|
lbajardsilogic@0
|
8
|
lbajardsilogic@0
|
9 This program is free software; you can redistribute it and/or
|
lbajardsilogic@0
|
10 modify it under the terms of the GNU General Public License as
|
lbajardsilogic@0
|
11 published by the Free Software Foundation; either version 2 of the
|
lbajardsilogic@0
|
12 License, or (at your option) any later version. See the file
|
lbajardsilogic@0
|
13 COPYING included with this distribution for more information.
|
lbajardsilogic@0
|
14 */
|
lbajardsilogic@0
|
15
|
lbajardsilogic@0
|
16 #include "PreferencesDialog.h"
|
lbajardsilogic@0
|
17
|
lbajardsilogic@0
|
18 #include <QGridLayout>
|
lbajardsilogic@0
|
19 #include <QComboBox>
|
lbajardsilogic@0
|
20 #include <QCheckBox>
|
lbajardsilogic@0
|
21 #include <QGroupBox>
|
lbajardsilogic@0
|
22 #include <QDoubleSpinBox>
|
lbajardsilogic@0
|
23 #include <QLabel>
|
lbajardsilogic@0
|
24 #include <QPushButton>
|
lbajardsilogic@0
|
25 #include <QHBoxLayout>
|
lbajardsilogic@0
|
26 #include <QString>
|
lbajardsilogic@0
|
27
|
lbajardsilogic@0
|
28 #include "widgets/WindowTypeSelector.h"
|
lbajardsilogic@0
|
29 #include "base/Preferences.h"
|
lbajardsilogic@0
|
30
|
lbajardsilogic@0
|
31 PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WFlags flags) :
|
lbajardsilogic@0
|
32 QDialog(parent, flags)
|
lbajardsilogic@0
|
33 {
|
lbajardsilogic@0
|
34 setWindowTitle(tr("Application Preferences"));
|
lbajardsilogic@0
|
35
|
lbajardsilogic@0
|
36 Preferences *prefs = Preferences::getInstance();
|
lbajardsilogic@0
|
37
|
lbajardsilogic@0
|
38 QGridLayout *grid = new QGridLayout;
|
lbajardsilogic@0
|
39 setLayout(grid);
|
lbajardsilogic@0
|
40
|
lbajardsilogic@0
|
41 QGroupBox *groupBox = new QGroupBox;
|
lbajardsilogic@42
|
42 groupBox->setTitle(tr("Sound Access Application Preferences"));
|
lbajardsilogic@0
|
43 grid->addWidget(groupBox, 0, 0);
|
lbajardsilogic@0
|
44
|
lbajardsilogic@0
|
45 QGridLayout *subgrid = new QGridLayout;
|
lbajardsilogic@0
|
46 groupBox->setLayout(subgrid);
|
lbajardsilogic@0
|
47
|
lbajardsilogic@0
|
48 // Create this first, as slots that get called from the ctor will
|
lbajardsilogic@0
|
49 // refer to it
|
lbajardsilogic@0
|
50 m_applyButton = new QPushButton(tr("Apply"));
|
lbajardsilogic@0
|
51
|
lbajardsilogic@0
|
52 int min, max, deflt, i;
|
lbajardsilogic@0
|
53
|
lbajardsilogic@0
|
54 m_windowType = WindowType(prefs->getPropertyRangeAndValue
|
lbajardsilogic@0
|
55 ("Window Type", &min, &max, &deflt));
|
lbajardsilogic@0
|
56 m_windowTypeSelector = new WindowTypeSelector(m_windowType);
|
lbajardsilogic@0
|
57
|
lbajardsilogic@0
|
58 connect(m_windowTypeSelector, SIGNAL(windowTypeChanged(WindowType)),
|
lbajardsilogic@0
|
59 this, SLOT(windowTypeChanged(WindowType)));
|
lbajardsilogic@0
|
60
|
lbajardsilogic@0
|
61 QComboBox *smoothing = new QComboBox;
|
lbajardsilogic@0
|
62
|
lbajardsilogic@0
|
63 int sm = prefs->getPropertyRangeAndValue("Spectrogram Smoothing", &min, &max,
|
lbajardsilogic@0
|
64 &deflt);
|
lbajardsilogic@0
|
65 m_spectrogramSmoothing = sm;
|
lbajardsilogic@0
|
66
|
lbajardsilogic@0
|
67 for (i = min; i <= max; ++i) {
|
lbajardsilogic@0
|
68 smoothing->addItem(prefs->getPropertyValueLabel("Spectrogram Smoothing", i));
|
lbajardsilogic@0
|
69 }
|
lbajardsilogic@0
|
70
|
lbajardsilogic@0
|
71 smoothing->setCurrentIndex(sm);
|
lbajardsilogic@0
|
72
|
lbajardsilogic@0
|
73 connect(smoothing, SIGNAL(currentIndexChanged(int)),
|
lbajardsilogic@0
|
74 this, SLOT(spectrogramSmoothingChanged(int)));
|
lbajardsilogic@0
|
75
|
lbajardsilogic@0
|
76 m_tuningFrequency = prefs->getTuningFrequency();
|
lbajardsilogic@0
|
77
|
lbajardsilogic@0
|
78 QDoubleSpinBox *frequency = new QDoubleSpinBox;
|
lbajardsilogic@0
|
79 frequency->setMinimum(100.0);
|
lbajardsilogic@0
|
80 frequency->setMaximum(5000.0);
|
lbajardsilogic@0
|
81 frequency->setSuffix(" Hz");
|
lbajardsilogic@0
|
82 frequency->setSingleStep(1);
|
lbajardsilogic@0
|
83 frequency->setValue(m_tuningFrequency);
|
lbajardsilogic@0
|
84 frequency->setDecimals(2);
|
lbajardsilogic@0
|
85
|
lbajardsilogic@0
|
86 connect(frequency, SIGNAL(valueChanged(double)),
|
lbajardsilogic@0
|
87 this, SLOT(tuningFrequencyChanged(double)));
|
lbajardsilogic@0
|
88
|
lbajardsilogic@0
|
89 QComboBox *resampleQuality = new QComboBox;
|
lbajardsilogic@0
|
90
|
lbajardsilogic@0
|
91 int rsq = prefs->getPropertyRangeAndValue("Resample Quality", &min, &max,
|
lbajardsilogic@0
|
92 &deflt);
|
lbajardsilogic@0
|
93 m_resampleQuality = rsq;
|
lbajardsilogic@0
|
94
|
lbajardsilogic@0
|
95 for (i = min; i <= max; ++i) {
|
lbajardsilogic@0
|
96 resampleQuality->addItem(prefs->getPropertyValueLabel("Resample Quality", i));
|
lbajardsilogic@0
|
97 }
|
lbajardsilogic@0
|
98
|
lbajardsilogic@0
|
99 resampleQuality->setCurrentIndex(rsq);
|
lbajardsilogic@0
|
100
|
lbajardsilogic@0
|
101 connect(resampleQuality, SIGNAL(currentIndexChanged(int)),
|
lbajardsilogic@0
|
102 this, SLOT(resampleQualityChanged(int)));
|
lbajardsilogic@0
|
103
|
lbajardsilogic@0
|
104 int row = 0;
|
lbajardsilogic@0
|
105
|
lbajardsilogic@0
|
106 subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
|
lbajardsilogic@0
|
107 ("Tuning Frequency"))),
|
lbajardsilogic@0
|
108 row, 0);
|
lbajardsilogic@0
|
109 subgrid->addWidget(frequency, row++, 1, 1, 2);
|
lbajardsilogic@0
|
110
|
lbajardsilogic@0
|
111 subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
|
lbajardsilogic@0
|
112 ("Resample Quality"))),
|
lbajardsilogic@0
|
113 row, 0);
|
lbajardsilogic@0
|
114 subgrid->addWidget(resampleQuality, row++, 1, 1, 2);
|
lbajardsilogic@0
|
115
|
lbajardsilogic@0
|
116 subgrid->addWidget(new QLabel(prefs->getPropertyLabel
|
lbajardsilogic@0
|
117 ("Spectrogram Smoothing")),
|
lbajardsilogic@0
|
118 row, 0);
|
lbajardsilogic@0
|
119 subgrid->addWidget(smoothing, row++, 1, 1, 2);
|
lbajardsilogic@0
|
120
|
lbajardsilogic@0
|
121 subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
|
lbajardsilogic@0
|
122 ("Window Type"))),
|
lbajardsilogic@0
|
123 row, 0);
|
lbajardsilogic@0
|
124 subgrid->addWidget(m_windowTypeSelector, row++, 1, 2, 2);
|
lbajardsilogic@0
|
125 subgrid->setRowStretch(row, 10);
|
lbajardsilogic@0
|
126 row++;
|
lbajardsilogic@0
|
127
|
lbajardsilogic@0
|
128 QHBoxLayout *hbox = new QHBoxLayout;
|
lbajardsilogic@0
|
129 grid->addLayout(hbox, 1, 0);
|
lbajardsilogic@0
|
130
|
lbajardsilogic@0
|
131 QPushButton *ok = new QPushButton(tr("OK"));
|
lbajardsilogic@0
|
132 QPushButton *cancel = new QPushButton(tr("Cancel"));
|
lbajardsilogic@0
|
133 hbox->addStretch(10);
|
lbajardsilogic@0
|
134 hbox->addWidget(ok);
|
lbajardsilogic@0
|
135 hbox->addWidget(m_applyButton);
|
lbajardsilogic@0
|
136 hbox->addWidget(cancel);
|
lbajardsilogic@0
|
137 connect(ok, SIGNAL(clicked()), this, SLOT(okClicked()));
|
lbajardsilogic@0
|
138 connect(m_applyButton, SIGNAL(clicked()), this, SLOT(applyClicked()));
|
lbajardsilogic@0
|
139 connect(cancel, SIGNAL(clicked()), this, SLOT(cancelClicked()));
|
lbajardsilogic@0
|
140
|
lbajardsilogic@0
|
141 m_applyButton->setEnabled(false);
|
lbajardsilogic@0
|
142 }
|
lbajardsilogic@0
|
143
|
lbajardsilogic@0
|
144 PreferencesDialog::~PreferencesDialog()
|
lbajardsilogic@0
|
145 {
|
lbajardsilogic@0
|
146 std::cerr << "PreferencesDialog::~PreferencesDialog()" << std::endl;
|
lbajardsilogic@0
|
147 }
|
lbajardsilogic@0
|
148
|
lbajardsilogic@0
|
149 void
|
lbajardsilogic@0
|
150 PreferencesDialog::windowTypeChanged(WindowType type)
|
lbajardsilogic@0
|
151 {
|
lbajardsilogic@0
|
152 m_windowType = type;
|
lbajardsilogic@0
|
153 m_applyButton->setEnabled(true);
|
lbajardsilogic@0
|
154 }
|
lbajardsilogic@0
|
155
|
lbajardsilogic@0
|
156 void
|
lbajardsilogic@0
|
157 PreferencesDialog::spectrogramSmoothingChanged(int smoothing)
|
lbajardsilogic@0
|
158 {
|
lbajardsilogic@0
|
159 m_spectrogramSmoothing = smoothing;
|
lbajardsilogic@0
|
160 m_applyButton->setEnabled(true);
|
lbajardsilogic@0
|
161 }
|
lbajardsilogic@0
|
162
|
lbajardsilogic@0
|
163 void
|
lbajardsilogic@0
|
164 PreferencesDialog::tuningFrequencyChanged(double freq)
|
lbajardsilogic@0
|
165 {
|
lbajardsilogic@0
|
166 m_tuningFrequency = freq;
|
lbajardsilogic@0
|
167 m_applyButton->setEnabled(true);
|
lbajardsilogic@0
|
168 }
|
lbajardsilogic@0
|
169
|
lbajardsilogic@0
|
170 void
|
lbajardsilogic@0
|
171 PreferencesDialog::resampleQualityChanged(int q)
|
lbajardsilogic@0
|
172 {
|
lbajardsilogic@0
|
173 m_resampleQuality = q;
|
lbajardsilogic@0
|
174 m_applyButton->setEnabled(true);
|
lbajardsilogic@0
|
175 }
|
lbajardsilogic@0
|
176
|
lbajardsilogic@0
|
177 void
|
lbajardsilogic@0
|
178 PreferencesDialog::okClicked()
|
lbajardsilogic@0
|
179 {
|
lbajardsilogic@0
|
180 applyClicked();
|
lbajardsilogic@0
|
181 accept();
|
lbajardsilogic@0
|
182 }
|
lbajardsilogic@0
|
183
|
lbajardsilogic@0
|
184 void
|
lbajardsilogic@0
|
185 PreferencesDialog::applyClicked()
|
lbajardsilogic@0
|
186 {
|
lbajardsilogic@0
|
187 Preferences *prefs = Preferences::getInstance();
|
lbajardsilogic@0
|
188 prefs->setWindowType(WindowType(m_windowType));
|
lbajardsilogic@0
|
189 prefs->setSpectrogramSmoothing(Preferences::SpectrogramSmoothing
|
lbajardsilogic@0
|
190 (m_spectrogramSmoothing));
|
lbajardsilogic@0
|
191 prefs->setTuningFrequency(m_tuningFrequency);
|
lbajardsilogic@0
|
192 prefs->setResampleQuality(m_resampleQuality);
|
lbajardsilogic@0
|
193 m_applyButton->setEnabled(false);
|
lbajardsilogic@0
|
194 }
|
lbajardsilogic@0
|
195
|
lbajardsilogic@0
|
196 void
|
lbajardsilogic@0
|
197 PreferencesDialog::cancelClicked()
|
lbajardsilogic@0
|
198 {
|
lbajardsilogic@0
|
199 reject();
|
lbajardsilogic@0
|
200 }
|
lbajardsilogic@0
|
201
|