OSDN Git Service

[VM][SOUND][Qt] Remove USE_MULTIPLE_SPEAKER, using upstream's APIs.
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / sound_dialog.cpp
1 /*
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
6  */
7
8 #include "menuclasses.h"
9 #include "sound_dialog.h"
10 #include "vm.h"
11
12 Ui_SndSliderObject::Ui_SndSliderObject(EMU *_emu, Qt::Orientation orientation, QWidget *parent, int num)
13         : QSlider(orientation, parent)
14 {
15         p_emu = emu;
16         bind_num = num;
17         parent_widget = parent;
18 }
19
20 Ui_SndSliderObject::~Ui_SndSliderObject()
21 {
22 }
23
24 void Ui_SndSliderObject::setValue(int level)
25 {
26         if(bind_num < 0) return;
27         if(bind_num == 0) {
28                 if(level < -32768) level = -32678;
29                 if(level > 32768)  level = 32768;
30
31                 config.general_sound_level = level;
32                 emit sig_emu_update_config();
33                 QSlider::setValue(level);
34         }
35
36 }               
37
38 void Ui_SndSliderObject::setLevelValue(int level)
39 {
40         if(bind_num <= 0) {
41                 return;
42         }
43 #ifdef USE_SOUND_VOLUME 
44         else {
45                 if(level < -60) level = -60;
46                 if(level > 3)  level = 3;
47                 if(bind_num <= USE_SOUND_VOLUME) {
48                         emit sig_emu_update_volume_level(bind_num - 1, level);
49                 }
50         }
51 #endif  
52         QSlider::setValue(level);
53 }               
54
55 void Ui_SndSliderObject::setBalanceValue(int level)
56 {
57         if(bind_num <= 0) {
58                 return;
59         }
60 #ifdef USE_SOUND_VOLUME 
61         else {
62                 if(level < -20) level = -20;
63                 if(level > 20)  level = 20;
64                 if(bind_num <= USE_SOUND_VOLUME) {
65                         emit sig_emu_update_volume_balance(bind_num - 1, level);
66                 }
67         }
68 #endif
69         QSlider::setValue(level);
70 }               
71
72 Ui_SoundDialog::Ui_SoundDialog(EMU *_emu, QWidget *parent) : QWidget(0)
73 {
74         p_emu = _emu;
75         if(parent != NULL) {
76                 parent_widget = parent;
77         } else {
78                 parent_widget = this;
79         }
80         VBoxWindow = new QVBoxLayout;
81         HBoxWindow = new QHBoxLayout;
82         
83         sliderMasterVolume = new Ui_SndSliderObject(_emu, Qt::Vertical, this, 0);
84         boxMasterVolume = new QGroupBox(QApplication::translate("Ui_SoundDialog", "Main", 0));
85
86         connect(sliderMasterVolume, SIGNAL(sig_emu_update_config()),
87                         parent_widget, SLOT(do_emu_update_config()));
88
89         sliderMasterVolume->setMinimum(-32768);
90         sliderMasterVolume->setMaximum(32768);
91         sliderMasterVolume->setSingleStep(256);
92         sliderMasterVolume->setPageStep(4096);
93         sliderMasterVolume->setValue(config.general_sound_level);
94         sliderMasterVolume->connect(sliderMasterVolume, SIGNAL(valueChanged(int)),
95                                                                 sliderMasterVolume, SLOT(setValue(int)));
96         
97         HBoxMasterVolume = new QHBoxLayout;
98         HBoxMasterVolume->addWidget(sliderMasterVolume);
99         boxMasterVolume->setLayout(HBoxMasterVolume);
100
101         HBoxWindow->addWidget(boxMasterVolume);
102 #ifdef USE_SOUND_VOLUME
103         {
104                 int ii;
105                 int ij = 0;
106                 for(ii = 0; ii < USE_SOUND_VOLUME; ii++) {
107                         QString lbl = QApplication::translate("Ui_SoundDialog", sound_device_caption[ii], 0);
108                         //QString n_s;
109                         //n_s.setNum(ii + 1);
110                         lbl = lbl;
111                         
112                         sliderDeviceVolume[ij] = new Ui_SndSliderObject(_emu, Qt::Vertical, this, ii + 1);
113                         sliderDeviceVolume[ij]->setMinimum(-60);
114                         sliderDeviceVolume[ij]->setMaximum(3);
115                         sliderDeviceVolume[ij]->setSingleStep(1);
116                         sliderDeviceVolume[ij]->setPageStep(4);
117
118                         sliderDeviceVolume[ij]->setValue((config.sound_volume_l[ii] + config.sound_volume_r[ii]) / 2);
119                         sliderDeviceVolume[ij]->connect(sliderDeviceVolume[ij], SIGNAL(valueChanged(int)),
120                                                                                         sliderDeviceVolume[ij], SLOT(setLevelValue(int)));
121                         connect(sliderDeviceVolume[ij], SIGNAL(sig_emu_update_volume_level(int, int)),
122                                         parent_widget, SLOT(do_emu_update_volume_level(int, int)));
123                         
124                         if(!sound_device_monophonic[ii]) {
125                                 sliderDeviceVolume[ij + 1] = new Ui_SndSliderObject(_emu, Qt::Vertical, this, ii + 1);
126                                 sliderDeviceVolume[ij + 1]->setMinimum(-20);
127                                 sliderDeviceVolume[ij + 1]->setMaximum(20);
128                                 sliderDeviceVolume[ij + 1]->setSingleStep(1);
129                                 sliderDeviceVolume[ij + 1]->setPageStep(4);
130
131                                 sliderDeviceVolume[ij + 1]->setValue((config.sound_volume_r[ii] - config.sound_volume_l[ii]) / 2);
132                                 sliderDeviceVolume[ij + 1]->connect(sliderDeviceVolume[ij + 1], SIGNAL(valueChanged(int)),
133                                                                                                 sliderDeviceVolume[ij + 1], SLOT(setBalanceValue(int)));
134                                 connect(sliderDeviceVolume[ij + 1], SIGNAL(sig_emu_update_volume_balance(int, int)),
135                                                 parent_widget, SLOT(do_emu_update_volume_balance(int, int)));
136                         }
137                         boxDeviceVolume[ii] = new QGroupBox(lbl);
138                         HBoxDeviceVolume[ii] = new QHBoxLayout;
139                         HBoxDeviceVolume[ii]->addWidget(sliderDeviceVolume[ij]);
140                         if(!sound_device_monophonic[ii]) {
141                                 HBoxDeviceVolume[ii]->addWidget(sliderDeviceVolume[ij + 1]);
142                         }                       
143                         boxDeviceVolume[ii]->setLayout(HBoxDeviceVolume[ii]);
144                         HBoxWindow->addWidget(boxDeviceVolume[ii]);
145                         ij += 2;
146                 }
147         }
148 #endif
149         this->setLayout(HBoxWindow);
150 }
151
152 Ui_SoundDialog::~Ui_SoundDialog()
153 {
154 }
155
156 void Ui_SoundDialog::do_emu_update_config()
157 {
158         if(p_emu != NULL) {
159                 p_emu->lock_vm();
160                 p_emu->update_config();
161                 p_emu->unlock_vm();
162         }
163 }
164
165 void Ui_SoundDialog::setDeviceLabel(int num, QString s)
166 {
167         if(num >= 0) {
168                 if(num == 0) {
169                         boxMasterVolume->setTitle(s);
170                 }
171         }
172 }
173
174 void Ui_SoundDialog::setSliderVisible(int num, bool visible)
175 {
176         if(num > 0) {
177         }
178 }