2 * Common Source Project/ Qt
3 * (C) 2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
4 * Qt: Menu->Adjust Volume.
5 * History: Jul 28, 2015 : Initial
8 //#include "menuclasses.h"
9 #include "sound_dialog.h"
11 #include "menu_flags.h"
13 //extern USING_FLAGS *using_flags;
15 Ui_SndSliderObject::Ui_SndSliderObject(USING_FLAGS *p, EMU *_emu, Qt::Orientation orientation, QWidget *parent, int num)
16 : QSlider(orientation, parent)
21 parent_widget = parent;
24 Ui_SndSliderObject::~Ui_SndSliderObject()
28 void Ui_SndSliderObject::setValue(int level)
30 if(bind_num < 0) return;
34 if(level < -32768) level = -32678;
35 if(level > 32767) level = 32767;
36 config.general_sound_level = level;
38 tmps = QApplication::translate("Ui_SoundDialog", "Set Volume", 0);
39 n = (float)(((level + 32768) * 1000) / 65535) / 10.0;
40 s_val.setNum(n, 'f', 1);
41 tmps = tmps + QString::fromUtf8(" (") + s_val + QString::fromUtf8("%)");
42 parent_widget->setWindowTitle(tmps);
43 emit sig_update_master_volume(level);
44 emit sig_emu_update_config();
46 QSlider::setValue(level);
49 void Ui_SndSliderObject::setLevelValue(int level)
53 } else if(using_flags->get_use_sound_volume() > 0) {
54 if(level < -60) level = -60;
55 if(level > 3) level = 3;
56 if(bind_num <= using_flags->get_use_sound_volume()) {
57 emit sig_emu_update_volume_label(bind_num - 1, level);
58 emit sig_emu_update_volume_level(bind_num - 1, level);
61 QSlider::setValue(level);
64 void Ui_SndSliderObject::setBalanceValue(int level)
68 } else if(using_flags->get_use_sound_volume() > 0) {
69 if(level < -20) level = -20;
70 if(level > 20) level = 20;
71 if(bind_num <= using_flags->get_use_sound_volume()) {
72 emit sig_emu_update_volume_balance(bind_num - 1, level);
75 QSlider::setValue(level);
78 void Ui_SndSliderObject::resetVolumeValue()
84 this->setLevelValue(-20);
87 void Ui_SndSliderObject::resetBalanceValue()
93 this->setLevelValue(0);
96 Ui_SoundDialog::Ui_SoundDialog(USING_FLAGS *p, EMU *_emu, QWidget *parent) : QWidget(0)
101 parent_widget = parent;
103 parent_widget = this;
105 MasterLayout = new QGridLayout;
107 this->setMinimumWidth(620);
108 sliderMasterVolume = new Ui_SndSliderObject(using_flags, _emu, Qt::Horizontal, this, 0);
109 boxMasterVolume = new QGroupBox(QApplication::translate("Ui_SoundDialog", "Main", 0));
111 connect(sliderMasterVolume, SIGNAL(sig_emu_update_config()),
112 parent_widget, SLOT(do_emu_update_config()));
114 sliderMasterVolume->setMinimum(-32768);
115 sliderMasterVolume->setMaximum(32768);
116 sliderMasterVolume->setSingleStep(256);
117 sliderMasterVolume->setPageStep(4096);
118 sliderMasterVolume->setValue(config.general_sound_level);
119 sliderMasterVolume->connect(sliderMasterVolume, SIGNAL(valueChanged(int)),
120 sliderMasterVolume, SLOT(setValue(int)));
121 VBoxMasterVolume = new QVBoxLayout;
122 VBoxMasterVolume->addWidget(sliderMasterVolume);
123 boxMasterVolume->setLayout(VBoxMasterVolume);
124 connect(sliderMasterVolume, SIGNAL(sig_update_master_volume(int)), parent_widget, SLOT(do_update_volume(int)));
126 if(using_flags->get_use_sound_volume() > 0) {
127 MasterLayout->addWidget(boxMasterVolume, 0, 0, 1, 2);
129 MasterLayout->addWidget(boxMasterVolume, 0, 0, 1, 2);
132 if(using_flags->get_use_sound_volume() > 0) {
135 for(ii = 0; ii < using_flags->get_use_sound_volume(); ii++) {
136 QString lbl = QApplication::translate("Ui_SoundDialog", using_flags->get_sound_device_caption(ii), 0);
137 int l_val = config.sound_volume_l[ii];
138 int r_val = config.sound_volume_r[ii];
142 s_lvl = (l_val + r_val) / 2;
143 s_balance = -(l_val - r_val) / 2;
146 sliderDeviceVolume[ij] = new Ui_SndSliderObject(using_flags, _emu, Qt::Horizontal, this, ii + 1);
147 sliderDeviceVolume[ij]->setMinimum(-40);
148 sliderDeviceVolume[ij]->setMaximum(0);
149 sliderDeviceVolume[ij]->setSingleStep(1);
150 sliderDeviceVolume[ij]->setPageStep(4);
152 sliderDeviceVolume[ij]->setValue(s_lvl);
153 sliderDeviceVolume[ij]->connect(sliderDeviceVolume[ij], SIGNAL(valueChanged(int)),
154 sliderDeviceVolume[ij], SLOT(setLevelValue(int)));
155 connect(sliderDeviceVolume[ij], SIGNAL(sig_emu_update_volume_level(int, int)),
156 parent_widget, SLOT(do_emu_update_volume_level(int, int)));
157 connect(sliderDeviceVolume[ij], SIGNAL(sig_emu_update_volume_label(int, int)),
158 this, SLOT(do_update_volume_label(int, int)));
160 sliderDeviceVolume[ij + 1] = new Ui_SndSliderObject(using_flags, _emu, Qt::Horizontal, this, ii + 1);
161 sliderDeviceVolume[ij + 1]->setMinimum(-20);
162 sliderDeviceVolume[ij + 1]->setMaximum(20);
163 sliderDeviceVolume[ij + 1]->setSingleStep(1);
164 sliderDeviceVolume[ij + 1]->setPageStep(4);
166 sliderDeviceVolume[ij + 1]->setValue(s_balance);
167 sliderDeviceVolume[ij + 1]->connect(sliderDeviceVolume[ij + 1], SIGNAL(valueChanged(int)),
168 sliderDeviceVolume[ij + 1], SLOT(setBalanceValue(int)));
169 connect(sliderDeviceVolume[ij + 1], SIGNAL(sig_emu_update_volume_balance(int, int)),
170 parent_widget, SLOT(do_emu_update_volume_balance(int, int)));
172 ResetBalance[ii] = new QPushButton(QApplication::style()->standardIcon(QStyle::SP_DialogResetButton), "");
173 ResetBalance[ii]->setFlat(true);
174 ResetBalance[ii]->setToolTip(QApplication::translate("Ui_SoundDialog", "Reset to center.", 0));
176 LabelVolume[ii] = new QLabel(QApplication::translate("Ui_SoundDialog", "Volume", 0));
177 LabelBalance[ii] = new QLabel(QApplication::translate("Ui_SoundDialog", "Balance", 0));
178 LabelLevel[ii] = new QLabel(QString::fromUtf8(" 0db"));
179 LabelLevel[ii]->setMinimumWidth(48);
180 LabelLevel[ii]->setAlignment(Qt::AlignRight);
181 do_update_volume_label(ii, s_lvl);
182 connect(ResetBalance[ii], SIGNAL(pressed()), sliderDeviceVolume[ij + 1] ,SLOT(resetBalanceValue()));
184 boxDeviceVolume[ii] = new QGroupBox(lbl);
185 LayoutDeviceVolume[ii] = new QGridLayout;
187 LayoutDeviceVolume[ii]->addWidget(LabelVolume[ii], 0, 0);
188 LayoutDeviceVolume[ii]->addWidget(LabelBalance[ii], 1, 0);
189 LayoutDeviceVolume[ii]->addWidget(LabelLevel[ii], 0, 2);
190 LayoutDeviceVolume[ii]->addWidget(ResetBalance[ii], 1, 2);
191 LayoutDeviceVolume[ii]->addWidget(sliderDeviceVolume[ij], 0, 1);
192 LayoutDeviceVolume[ii]->addWidget(sliderDeviceVolume[ij + 1], 1, 1);
194 boxDeviceVolume[ii]->setLayout(LayoutDeviceVolume[ii]);
195 if(using_flags->get_use_sound_volume() >= 2) {
196 MasterLayout->addWidget(boxDeviceVolume[ii], ii / 2 + 1, ii % 2);
198 MasterLayout->addWidget(boxDeviceVolume[ii], ii + 1, 0);
203 this->setLayout(MasterLayout);
206 Ui_SoundDialog::~Ui_SoundDialog()
210 void Ui_SoundDialog::do_update_volume_label(int num, int level)
212 if(using_flags->get_use_sound_volume() > 0) {
214 if(LabelLevel[num] != NULL) {
217 tmps = s_val + QString::fromUtf8("db");
218 LabelLevel[num]->setText(tmps);
224 void Ui_SoundDialog::setDeviceLabel(int num, QString s)
228 boxMasterVolume->setTitle(s);
233 void Ui_SoundDialog::setSliderVisible(int num, bool visible)