OSDN Git Service

124ec669b362039740ccf89719d1c7a80c4716be
[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 #include "menu_flags.h"
12
13 //extern USING_FLAGS *using_flags;
14
15 Ui_SndSliderObject::Ui_SndSliderObject(USING_FLAGS *p, EMU *_emu, Qt::Orientation orientation, QWidget *parent, int num)
16         : QSlider(orientation, parent)
17 {
18         using_flags = p;
19         p_emu = emu;
20         bind_num = num;
21         parent_widget = parent;
22 }
23
24 Ui_SndSliderObject::~Ui_SndSliderObject()
25 {
26 }
27
28 void Ui_SndSliderObject::setValue(int level)
29 {
30         if(bind_num < 0) return;
31         if(bind_num == 0) {
32                 QString tmps, s_val;
33                 float n;
34                 if(level < -32768) level = -32678;
35                 if(level > 32767)  level = 32767;
36                 config.general_sound_level = level;
37                 
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();
45         }
46         QSlider::setValue(level);
47 }               
48
49 void Ui_SndSliderObject::setLevelValue(int level)
50 {
51         if(bind_num <= 0) {
52                 return;
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);
59                 }
60         }
61         QSlider::setValue(level);
62 }               
63
64 void Ui_SndSliderObject::setBalanceValue(int level)
65 {
66         if(bind_num <= 0) {
67                 return;
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);
73                 }
74         }
75         QSlider::setValue(level);
76 }
77
78 void Ui_SndSliderObject::resetVolumeValue()
79 {
80         if(bind_num <= 0) {
81                 return;
82         }
83         this->setValue(-20);
84         this->setLevelValue(-20);
85 }
86
87 void Ui_SndSliderObject::resetBalanceValue()
88 {
89         if(bind_num <= 0) {
90                 return;
91         }
92         this->setValue(0);
93         this->setLevelValue(0);
94 }
95
96 Ui_SoundDialog::Ui_SoundDialog(USING_FLAGS *p, EMU *_emu, QWidget *parent) : QWidget(0)
97 {
98         p_emu = _emu;
99         using_flags = p;
100         if(parent != NULL) {
101                 parent_widget = parent;
102         } else {
103                 parent_widget = this;
104         }
105         MasterLayout = new QGridLayout;
106         
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));
110         
111         connect(sliderMasterVolume, SIGNAL(sig_emu_update_config()),
112                         parent_widget, SLOT(do_emu_update_config()));
113
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)));
125
126         if(using_flags->get_use_sound_volume() > 0) {
127                 MasterLayout->addWidget(boxMasterVolume, 0, 0, 1, 2);
128         } else {
129                 MasterLayout->addWidget(boxMasterVolume, 0, 0, 1, 2);
130         }
131
132         if(using_flags->get_use_sound_volume() > 0) {
133                 int ii;
134                 int ij = 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];
139                         
140                         int s_lvl;
141                         int s_balance;
142                         s_lvl = (l_val + r_val) / 2;
143                         s_balance = -(l_val - r_val) / 2;
144                         lbl = lbl;
145                         
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);
151
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)));
159                                                 
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);
165                         
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)));
171
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));
175                                                                                            
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()));
183                         
184                         boxDeviceVolume[ii] = new QGroupBox(lbl);
185                         LayoutDeviceVolume[ii] = new QGridLayout;
186                         
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);
193
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);
197                         } else {
198                                 MasterLayout->addWidget(boxDeviceVolume[ii], ii + 1, 0);
199                         }
200                         ij += 2;
201                 }
202         }
203         this->setLayout(MasterLayout);
204 }
205
206 Ui_SoundDialog::~Ui_SoundDialog()
207 {
208 }
209
210 void Ui_SoundDialog::do_update_volume_label(int num, int level)
211 {
212         if(using_flags->get_use_sound_volume() > 0) {
213                 QString tmps;
214                 if(LabelLevel[num] != NULL) {
215                         QString s_val;
216                         s_val.setNum(level);
217                         tmps = s_val + QString::fromUtf8("db");
218                         LabelLevel[num]->setText(tmps);
219                 }
220         }
221 }
222
223
224 void Ui_SoundDialog::setDeviceLabel(int num, QString s)
225 {
226         if(num >= 0) {
227                 if(num == 0) {
228                         boxMasterVolume->setTitle(s);
229                 }
230         }
231 }
232
233 void Ui_SoundDialog::setSliderVisible(int num, bool visible)
234 {
235         if(num > 0) {
236         }
237 }