1 /*
2 * This file is part of bino, a 3D video player.
3 *
4 * Copyright (C) 2010, 2011, 2012, 2013, 2014
5 * Martin Lambers <marlam@marlam.de>
6 * Frédéric Devernay <Frederic.Devernay@inrialpes.fr>
7 * Joe <cuchac@email.cz>
8 * Daniel Schaal <farbing@web.de>
9 * D. Matz <bandregent@yahoo.de>
10 * Binocle <http://binocle.com> (author: Olivier Letz <oletz@binocle.com>)
11 * Frédéric Bour <frederic.bour@lakaban.net>
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 */
26
27 #include "config.h"
28
29 #include <QGridLayout>
30 #include <QLabel>
31 #include <QComboBox>
32 #include <QSettings>
33 #include <QCheckBox>
34 #include <QStandardItemModel>
35
36 #include "inoutwidget.h"
37
38 #include "gui_common.h"
39 #include "media_input.h"
40 #include "video_output.h"
41
in_out_widget(QSettings * settings,QWidget * parent)42 in_out_widget::in_out_widget(QSettings *settings, QWidget *parent) :
43 QWidget(parent), _settings(settings), _lock(false)
44 {
45 QGridLayout *layout0 = new QGridLayout;
46 QLabel *video_label = new QLabel(_("Video:"));
47 video_label->setToolTip(_("<p>Select the video stream.</p>"));
48 layout0->addWidget(video_label, 0, 0);
49 _video_combobox = new QComboBox(this);
50 _video_combobox->setToolTip(video_label->toolTip());
51 connect(_video_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(video_changed()));
52 layout0->addWidget(_video_combobox, 0, 1);
53 QLabel *audio_label = new QLabel(_("Audio:"));
54 audio_label->setToolTip(_("<p>Select the audio stream.</p>"));
55 layout0->addWidget(audio_label, 0, 2);
56 _audio_combobox = new QComboBox(this);
57 _audio_combobox->setToolTip(audio_label->toolTip());
58 connect(_audio_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(audio_changed()));
59 layout0->addWidget(_audio_combobox, 0, 3);
60 QLabel *subtitle_label = new QLabel(_("Subtitle:"));
61 subtitle_label->setToolTip(_("<p>Select the subtitle stream.</p>"));
62 layout0->addWidget(subtitle_label, 0, 4);
63 _subtitle_combobox = new QComboBox(this);
64 _subtitle_combobox->setToolTip(subtitle_label->toolTip());
65 connect(_subtitle_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(subtitle_changed()));
66 layout0->addWidget(_subtitle_combobox, 0, 5);
67 layout0->setColumnStretch(1, 1);
68 layout0->setColumnStretch(3, 1);
69 layout0->setColumnStretch(5, 1);
70
71 QGridLayout *layout1 = new QGridLayout;
72 QLabel *input_label = new QLabel(_("Input:"));
73 input_label->setToolTip(_("<p>Set the 3D layout of the video stream.</p>"));
74 layout1->addWidget(input_label, 0, 0);
75 _input_combobox = new QComboBox(this);
76 _input_combobox->setToolTip(input_label->toolTip());
77 _input_combobox->addItem(QIcon(":icons-local/input-layout-mono.png"), _("2D"));
78 _input_combobox->addItem(QIcon(":icons-local/input-layout-separate-left-right.png"), _("Separate streams, left first"));
79 _input_combobox->addItem(QIcon(":icons-local/input-layout-separate-right-left.png"), _("Separate streams, right first"));
80 _input_combobox->addItem(QIcon(":icons-local/input-layout-alternating-left-right.png"), _("Alternating, left first"));
81 _input_combobox->addItem(QIcon(":icons-local/input-layout-alternating-right-left.png"), _("Alternating, right first"));
82 _input_combobox->addItem(QIcon(":icons-local/input-layout-top-bottom.png"), _("Top/bottom"));
83 _input_combobox->addItem(QIcon(":icons-local/input-layout-top-bottom-half.png"), _("Top/bottom, half height"));
84 _input_combobox->addItem(QIcon(":icons-local/input-layout-bottom-top.png"), _("Bottom/top"));
85 _input_combobox->addItem(QIcon(":icons-local/input-layout-bottom-top-half.png"), _("Bottom/top, half height"));
86 _input_combobox->addItem(QIcon(":icons-local/input-layout-left-right.png"), _("Left/right"));
87 _input_combobox->addItem(QIcon(":icons-local/input-layout-left-right-half.png"), _("Left/right, half width"));
88 _input_combobox->addItem(QIcon(":icons-local/input-layout-right-left.png"), _("Right/left"));
89 _input_combobox->addItem(QIcon(":icons-local/input-layout-right-left-half.png"), _("Right/left, half width"));
90 _input_combobox->addItem(QIcon(":icons-local/input-layout-even-odd-rows.png"), _("Even/odd rows"));
91 _input_combobox->addItem(QIcon(":icons-local/input-layout-odd-even-rows.png"), _("Odd/even rows"));
92 connect(_input_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(input_changed()));
93 layout1->addWidget(_input_combobox, 0, 1);
94 layout1->setColumnStretch(1, 1);
95
96 QGridLayout *layout2 = new QGridLayout;
97 QLabel *output_label = new QLabel(_("Output:"));
98 output_label->setToolTip(_("<p>Set the 3D output type for your display.</p>"));
99 layout2->addWidget(output_label, 0, 0);
100 _output_combobox = new QComboBox(this);
101 _output_combobox->setToolTip(output_label->toolTip());
102 _output_combobox->addItem(QIcon(":icons-local/output-type-mono-left.png"), _("Left view"));
103 _output_combobox->addItem(QIcon(":icons-local/output-type-mono-right.png"), _("Right view"));
104 _output_combobox->addItem(QIcon(":icons-local/output-type-stereo.png"), _("OpenGL stereo"));
105 _output_combobox->addItem(QIcon(":icons-local/output-type-alternating.png"), _("Left/right alternating"));
106 _output_combobox->addItem(QIcon(":icons-local/output-type-top-bottom.png"), _("Top/bottom"));
107 _output_combobox->addItem(QIcon(":icons-local/output-type-top-bottom-half.png"), _("Top/bottom, half height"));
108 _output_combobox->addItem(QIcon(":icons-local/output-type-left-right.png"), _("Left/right"));
109 _output_combobox->addItem(QIcon(":icons-local/output-type-left-right-half.png"), _("Left/right, half width"));
110 _output_combobox->addItem(QIcon(":icons-local/output-type-even-odd-rows.png"), _("Even/odd rows"));
111 _output_combobox->addItem(QIcon(":icons-local/output-type-even-odd-columns.png"), _("Even/odd columns"));
112 _output_combobox->addItem(QIcon(":icons-local/output-type-checkerboard.png"), _("Checkerboard pattern"));
113 _output_combobox->addItem(QIcon(":icons-local/output-type-hdmi-frame-pack.png"), _("HDMI frame packing mode"));
114 _output_combobox->addItem(QIcon(":icons-local/output-type-red-cyan.png"), _("Red/cyan glasses, monochrome"));
115 _output_combobox->addItem(QIcon(":icons-local/output-type-red-cyan.png"), _("Red/cyan glasses, half color"));
116 _output_combobox->addItem(QIcon(":icons-local/output-type-red-cyan.png"), _("Red/cyan glasses, full color"));
117 _output_combobox->addItem(QIcon(":icons-local/output-type-red-cyan.png"), _("Red/cyan glasses, Dubois"));
118 _output_combobox->addItem(QIcon(":icons-local/output-type-green-magenta.png"), _("Green/magenta glasses, monochrome"));
119 _output_combobox->addItem(QIcon(":icons-local/output-type-green-magenta.png"), _("Green/magenta glasses, half color"));
120 _output_combobox->addItem(QIcon(":icons-local/output-type-green-magenta.png"), _("Green/magenta glasses, full color"));
121 _output_combobox->addItem(QIcon(":icons-local/output-type-green-magenta.png"), _("Green/magenta glasses, Dubois"));
122 _output_combobox->addItem(QIcon(":icons-local/output-type-amber-blue.png"), _("Amber/blue glasses, monochrome"));
123 _output_combobox->addItem(QIcon(":icons-local/output-type-amber-blue.png"), _("Amber/blue glasses, half color"));
124 _output_combobox->addItem(QIcon(":icons-local/output-type-amber-blue.png"), _("Amber/blue glasses, full color"));
125 _output_combobox->addItem(QIcon(":icons-local/output-type-amber-blue.png"), _("Amber/blue glasses, Dubois"));
126 _output_combobox->addItem(QIcon(":icons-local/output-type-red-green.png"), _("Red/green glasses, monochrome"));
127 _output_combobox->addItem(QIcon(":icons-local/output-type-red-blue.png"), _("Red/blue glasses, monochrome"));
128 connect(_output_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(output_changed()));
129 layout2->addWidget(_output_combobox, 0, 1);
130 layout2->setColumnStretch(1, 1);
131 _swap_checkbox = new QCheckBox(_("Swap left/right"));
132 _swap_checkbox->setToolTip(_("<p>Swap the left and right view. "
133 "Use this if the 3D effect seems wrong.</p>"));
134 connect(_swap_checkbox, SIGNAL(stateChanged(int)), this, SLOT(swap_changed()));
135 layout2->addWidget(_swap_checkbox, 0, 2);
136
137 QGridLayout *layout = new QGridLayout;
138 layout->addLayout(layout0, 0, 0);
139 layout->addLayout(layout1, 1, 0);
140 layout->addLayout(layout2, 2, 0);
141 setLayout(layout);
142
143 // Align the labels
144 int minw = input_label->minimumSizeHint().width();
145 if (output_label->minimumSizeHint().width() > minw)
146 {
147 minw = output_label->minimumSizeHint().width();
148 }
149 if (video_label->minimumSizeHint().width() > minw)
150 {
151 minw = video_label->minimumSizeHint().width();
152 }
153 if (audio_label->minimumSizeHint().width() > minw)
154 {
155 minw = audio_label->minimumSizeHint().width();
156 }
157 if (subtitle_label->minimumSizeHint().width() > minw)
158 {
159 minw = subtitle_label->minimumSizeHint().width();
160 }
161 input_label->setMinimumSize(QSize(minw, input_label->minimumSizeHint().height()));
162 output_label->setMinimumSize(QSize(minw, output_label->minimumSizeHint().height()));
163 video_label->setMinimumSize(QSize(minw, video_label->minimumSizeHint().height()));
164 audio_label->setMinimumSize(QSize(minw, audio_label->minimumSizeHint().height()));
165 subtitle_label->setMinimumSize(QSize(minw, subtitle_label->minimumSizeHint().height()));
166
167 _video_combobox->setEnabled(false);
168 _audio_combobox->setEnabled(false);
169 _subtitle_combobox->setEnabled(false);
170 _input_combobox->setEnabled(false);
171 _output_combobox->setEnabled(false);
172 _swap_checkbox->setEnabled(false);
173
174 update();
175 }
176
set_stereo_layout(parameters::stereo_layout_t stereo_layout,bool stereo_layout_swap)177 void in_out_widget::set_stereo_layout(parameters::stereo_layout_t stereo_layout, bool stereo_layout_swap)
178 {
179 switch (stereo_layout)
180 {
181 case parameters::layout_mono:
182 _input_combobox->setCurrentIndex(0);
183 break;
184 case parameters::layout_separate:
185 _input_combobox->setCurrentIndex(stereo_layout_swap ? 2 : 1);
186 break;
187 case parameters::layout_alternating:
188 _input_combobox->setCurrentIndex(stereo_layout_swap ? 4 : 3);
189 break;
190 case parameters::layout_top_bottom:
191 _input_combobox->setCurrentIndex(stereo_layout_swap ? 7 : 5);
192 break;
193 case parameters::layout_top_bottom_half:
194 _input_combobox->setCurrentIndex(stereo_layout_swap ? 8 : 6);
195 break;
196 case parameters::layout_left_right:
197 _input_combobox->setCurrentIndex(stereo_layout_swap ? 11: 9);
198 break;
199 case parameters::layout_left_right_half:
200 _input_combobox->setCurrentIndex(stereo_layout_swap ? 12 : 10);
201 break;
202 case parameters::layout_even_odd_rows:
203 _input_combobox->setCurrentIndex(stereo_layout_swap ? 14 : 13);
204 break;
205 }
206 _video_combobox->setEnabled(stereo_layout != parameters::layout_separate);
207 }
208
set_stereo_mode(parameters::stereo_mode_t stereo_mode,bool stereo_mode_swap)209 void in_out_widget::set_stereo_mode(parameters::stereo_mode_t stereo_mode, bool stereo_mode_swap)
210 {
211 switch (stereo_mode)
212 {
213 default:
214 case parameters::mode_mono_left:
215 _output_combobox->setCurrentIndex(0);
216 break;
217 case parameters::mode_mono_right:
218 _output_combobox->setCurrentIndex(1);
219 break;
220 case parameters::mode_stereo:
221 _output_combobox->setCurrentIndex(2);
222 break;
223 case parameters::mode_alternating:
224 _output_combobox->setCurrentIndex(3);
225 break;
226 case parameters::mode_top_bottom:
227 _output_combobox->setCurrentIndex(4);
228 break;
229 case parameters::mode_top_bottom_half:
230 _output_combobox->setCurrentIndex(5);
231 break;
232 case parameters::mode_left_right:
233 _output_combobox->setCurrentIndex(6);
234 break;
235 case parameters::mode_left_right_half:
236 _output_combobox->setCurrentIndex(7);
237 break;
238 case parameters::mode_even_odd_rows:
239 _output_combobox->setCurrentIndex(8);
240 break;
241 case parameters::mode_even_odd_columns:
242 _output_combobox->setCurrentIndex(9);
243 break;
244 case parameters::mode_checkerboard:
245 _output_combobox->setCurrentIndex(10);
246 break;
247 case parameters::mode_hdmi_frame_pack:
248 _output_combobox->setCurrentIndex(11);
249 break;
250 case parameters::mode_red_cyan_monochrome:
251 _output_combobox->setCurrentIndex(12);
252 break;
253 case parameters::mode_red_cyan_half_color:
254 _output_combobox->setCurrentIndex(13);
255 break;
256 case parameters::mode_red_cyan_full_color:
257 _output_combobox->setCurrentIndex(14);
258 break;
259 case parameters::mode_red_cyan_dubois:
260 _output_combobox->setCurrentIndex(15);
261 break;
262 case parameters::mode_green_magenta_monochrome:
263 _output_combobox->setCurrentIndex(16);
264 break;
265 case parameters::mode_green_magenta_half_color:
266 _output_combobox->setCurrentIndex(17);
267 break;
268 case parameters::mode_green_magenta_full_color:
269 _output_combobox->setCurrentIndex(18);
270 break;
271 case parameters::mode_green_magenta_dubois:
272 _output_combobox->setCurrentIndex(19);
273 break;
274 case parameters::mode_amber_blue_monochrome:
275 _output_combobox->setCurrentIndex(20);
276 break;
277 case parameters::mode_amber_blue_half_color:
278 _output_combobox->setCurrentIndex(21);
279 break;
280 case parameters::mode_amber_blue_full_color:
281 _output_combobox->setCurrentIndex(22);
282 break;
283 case parameters::mode_amber_blue_dubois:
284 _output_combobox->setCurrentIndex(23);
285 break;
286 case parameters::mode_red_green_monochrome:
287 _output_combobox->setCurrentIndex(24);
288 break;
289 case parameters::mode_red_blue_monochrome:
290 _output_combobox->setCurrentIndex(25);
291 break;
292 }
293 _swap_checkbox->setChecked(stereo_mode_swap);
294 }
295
video_changed()296 void in_out_widget::video_changed()
297 {
298 if (!_lock)
299 {
300 parameters::stereo_layout_t stereo_layout;
301 bool stereo_layout_swap;
302 get_stereo_layout(stereo_layout, stereo_layout_swap);
303 send_cmd(command::set_video_stream, _video_combobox->currentIndex());
304 }
305 }
306
audio_changed()307 void in_out_widget::audio_changed()
308 {
309 if (!_lock)
310 {
311 send_cmd(command::set_audio_stream, _audio_combobox->currentIndex());
312 }
313 }
314
subtitle_changed()315 void in_out_widget::subtitle_changed()
316 {
317 if (!_lock)
318 {
319 send_cmd(command::set_subtitle_stream, _subtitle_combobox->currentIndex() - 1);
320 }
321 }
322
input_changed()323 void in_out_widget::input_changed()
324 {
325 if (!_lock)
326 {
327 parameters::stereo_layout_t stereo_layout;
328 bool stereo_layout_swap;
329 get_stereo_layout(stereo_layout, stereo_layout_swap);
330 if (stereo_layout == parameters::layout_separate)
331 {
332 _lock = true;
333 _video_combobox->setCurrentIndex(0);
334 _video_combobox->setEnabled(false);
335 _lock = false;
336 }
337 else
338 {
339 _video_combobox->setEnabled(true);
340 }
341 send_cmd(command::set_stereo_layout, static_cast<int>(stereo_layout));
342 send_cmd(command::set_stereo_layout_swap, stereo_layout_swap);
343 parameters::stereo_mode_t stereo_mode;
344 bool stereo_mode_swap;
345 get_stereo_mode(stereo_mode, stereo_mode_swap);
346 if (stereo_layout == parameters::layout_mono
347 && !(stereo_mode == parameters::mode_mono_left || stereo_mode == parameters::mode_mono_right))
348 {
349 QString s = _settings->value("Session/2d-stereo-mode", "").toString();
350 parameters::stereo_mode_from_string(s.toStdString(), stereo_mode, stereo_mode_swap);
351 _lock = true;
352 set_stereo_mode(stereo_mode, stereo_mode_swap);
353 _lock = false;
354 }
355 else if (stereo_layout != parameters::layout_mono
356 && (stereo_mode == parameters::mode_mono_left || stereo_mode == parameters::mode_mono_right))
357 {
358 QString s = _settings->value("Session/3d-stereo-mode", "").toString();
359 parameters::stereo_mode_from_string(s.toStdString(), stereo_mode, stereo_mode_swap);
360 _lock = true;
361 set_stereo_mode(stereo_mode, stereo_mode_swap);
362 _lock = false;
363 }
364 }
365 }
366
output_changed()367 void in_out_widget::output_changed()
368 {
369 if (!_lock)
370 {
371 parameters::stereo_mode_t stereo_mode;
372 bool stereo_mode_swap;
373 get_stereo_mode(stereo_mode, stereo_mode_swap);
374 send_cmd(command::set_stereo_mode, static_cast<int>(stereo_mode));
375 send_cmd(command::set_stereo_mode_swap, stereo_mode_swap);
376 }
377 }
378
swap_changed()379 void in_out_widget::swap_changed()
380 {
381 if (!_lock)
382 {
383 send_cmd(command::toggle_stereo_mode_swap);
384 }
385 }
386
update()387 void in_out_widget::update()
388 {
389 const media_input *mi = dispatch::media_input();
390 _lock = true;
391 _video_combobox->setEnabled(mi);
392 _audio_combobox->setEnabled(mi);
393 _subtitle_combobox->setEnabled(mi);
394 _input_combobox->setEnabled(mi);
395 _output_combobox->setEnabled(mi);
396 _swap_checkbox->setEnabled(mi);
397 _video_combobox->clear();
398 _audio_combobox->clear();
399 _subtitle_combobox->clear();
400 if (mi)
401 {
402 for (int i = 0; i < mi->video_streams(); i++)
403 {
404 _video_combobox->addItem(mi->video_stream_name(i).c_str());
405 }
406 for (int i = 0; i < mi->audio_streams(); i++)
407 {
408 _audio_combobox->addItem(mi->audio_stream_name(i).c_str());
409 }
410 _subtitle_combobox->addItem(_("Off"));
411 for (int i = 0; i < mi->subtitle_streams(); i++)
412 {
413 _subtitle_combobox->addItem(mi->subtitle_stream_name(i).c_str());
414 }
415 _video_combobox->setCurrentIndex(dispatch::parameters().video_stream());
416 _audio_combobox->setCurrentIndex(dispatch::parameters().audio_stream());
417 _subtitle_combobox->setCurrentIndex(dispatch::parameters().subtitle_stream() + 1);
418 // Disable unsupported input modes
419 for (int i = 0; i < _input_combobox->count(); i++)
420 {
421 _input_combobox->setCurrentIndex(i);
422 parameters::stereo_layout_t layout;
423 bool swap;
424 get_stereo_layout(layout, swap);
425 qobject_cast<QStandardItemModel *>(_input_combobox->model())->item(i)->setEnabled(
426 mi->stereo_layout_is_supported(layout, swap));
427 }
428 // Disable unsupported output modes
429 if (!dispatch::video_output() || !dispatch::video_output()->supports_stereo())
430 {
431 set_stereo_mode(parameters::mode_stereo, false);
432 qobject_cast<QStandardItemModel *>(_output_combobox->model())->item(_output_combobox->currentIndex())->setEnabled(false);
433 }
434 set_stereo_layout(dispatch::parameters().stereo_layout(), dispatch::parameters().stereo_layout_swap());
435 set_stereo_mode(dispatch::parameters().stereo_mode(), dispatch::parameters().stereo_mode_swap());
436 }
437 _lock = false;
438 }
439
get_video_stream()440 int in_out_widget::get_video_stream()
441 {
442 return _video_combobox->currentIndex();
443 }
444
get_audio_stream()445 int in_out_widget::get_audio_stream()
446 {
447 return _audio_combobox->currentIndex();
448 }
449
get_subtitle_stream()450 int in_out_widget::get_subtitle_stream()
451 {
452 return _subtitle_combobox->currentIndex() - 1;
453 }
454
get_stereo_layout(parameters::stereo_layout_t & stereo_layout,bool & stereo_layout_swap)455 void in_out_widget::get_stereo_layout(parameters::stereo_layout_t &stereo_layout, bool &stereo_layout_swap)
456 {
457 switch (_input_combobox->currentIndex())
458 {
459 case 0:
460 stereo_layout = parameters::layout_mono;
461 stereo_layout_swap = false;
462 break;
463 case 1:
464 stereo_layout = parameters::layout_separate;
465 stereo_layout_swap = false;
466 break;
467 case 2:
468 stereo_layout = parameters::layout_separate;
469 stereo_layout_swap = true;
470 break;
471 case 3:
472 stereo_layout = parameters::layout_alternating;
473 stereo_layout_swap = false;
474 break;
475 case 4:
476 stereo_layout = parameters::layout_alternating;
477 stereo_layout_swap = true;
478 break;
479 case 5:
480 stereo_layout = parameters::layout_top_bottom;
481 stereo_layout_swap = false;
482 break;
483 case 6:
484 stereo_layout = parameters::layout_top_bottom_half;
485 stereo_layout_swap = false;
486 break;
487 case 7:
488 stereo_layout = parameters::layout_top_bottom;
489 stereo_layout_swap = true;
490 break;
491 case 8:
492 stereo_layout = parameters::layout_top_bottom_half;
493 stereo_layout_swap = true;
494 break;
495 case 9:
496 stereo_layout = parameters::layout_left_right;
497 stereo_layout_swap = false;
498 break;
499 case 10:
500 stereo_layout = parameters::layout_left_right_half;
501 stereo_layout_swap = false;
502 break;
503 case 11:
504 stereo_layout = parameters::layout_left_right;
505 stereo_layout_swap = true;
506 break;
507 case 12:
508 stereo_layout = parameters::layout_left_right_half;
509 stereo_layout_swap = true;
510 break;
511 case 13:
512 stereo_layout = parameters::layout_even_odd_rows;
513 stereo_layout_swap = false;
514 break;
515 case 14:
516 stereo_layout = parameters::layout_even_odd_rows;
517 stereo_layout_swap = true;
518 break;
519 }
520 }
521
get_stereo_mode(parameters::stereo_mode_t & stereo_mode,bool & stereo_mode_swap)522 void in_out_widget::get_stereo_mode(parameters::stereo_mode_t &stereo_mode, bool &stereo_mode_swap)
523 {
524 switch (_output_combobox->currentIndex())
525 {
526 case 0:
527 stereo_mode = parameters::mode_mono_left;
528 break;
529 case 1:
530 stereo_mode = parameters::mode_mono_right;
531 break;
532 case 2:
533 stereo_mode = parameters::mode_stereo;
534 break;
535 case 3:
536 stereo_mode = parameters::mode_alternating;
537 break;
538 case 4:
539 stereo_mode = parameters::mode_top_bottom;
540 break;
541 case 5:
542 stereo_mode = parameters::mode_top_bottom_half;
543 break;
544 case 6:
545 stereo_mode = parameters::mode_left_right;
546 break;
547 case 7:
548 stereo_mode = parameters::mode_left_right_half;
549 break;
550 case 8:
551 stereo_mode = parameters::mode_even_odd_rows;
552 break;
553 case 9:
554 stereo_mode = parameters::mode_even_odd_columns;
555 break;
556 case 10:
557 stereo_mode = parameters::mode_checkerboard;
558 break;
559 case 11:
560 stereo_mode = parameters::mode_hdmi_frame_pack;
561 break;
562 case 12:
563 stereo_mode = parameters::mode_red_cyan_monochrome;
564 break;
565 case 13:
566 stereo_mode = parameters::mode_red_cyan_half_color;
567 break;
568 case 14:
569 stereo_mode = parameters::mode_red_cyan_full_color;
570 break;
571 case 15:
572 stereo_mode = parameters::mode_red_cyan_dubois;
573 break;
574 case 16:
575 stereo_mode = parameters::mode_green_magenta_monochrome;
576 break;
577 case 17:
578 stereo_mode = parameters::mode_green_magenta_half_color;
579 break;
580 case 18:
581 stereo_mode = parameters::mode_green_magenta_full_color;
582 break;
583 case 19:
584 stereo_mode = parameters::mode_green_magenta_dubois;
585 break;
586 case 20:
587 stereo_mode = parameters::mode_amber_blue_monochrome;
588 break;
589 case 21:
590 stereo_mode = parameters::mode_amber_blue_half_color;
591 break;
592 case 22:
593 stereo_mode = parameters::mode_amber_blue_full_color;
594 break;
595 case 23:
596 stereo_mode = parameters::mode_amber_blue_dubois;
597 break;
598 case 24:
599 stereo_mode = parameters::mode_red_green_monochrome;
600 break;
601 case 25:
602 stereo_mode = parameters::mode_red_blue_monochrome;
603 break;
604 }
605 stereo_mode_swap = _swap_checkbox->isChecked();
606 }
607
receive_notification(const notification & note)608 void in_out_widget::receive_notification(const notification ¬e)
609 {
610 _lock = true;
611 switch (note.type)
612 {
613 case notification::open:
614 case notification::play:
615 update();
616 break;
617 case notification::video_stream:
618 _video_combobox->setCurrentIndex(dispatch::parameters().video_stream());
619 break;
620 case notification::audio_stream:
621 _audio_combobox->setCurrentIndex(dispatch::parameters().audio_stream());
622 break;
623 case notification::subtitle_stream:
624 _subtitle_combobox->setCurrentIndex(dispatch::parameters().subtitle_stream() + 1);
625 break;
626 case notification::stereo_mode_swap:
627 _swap_checkbox->setChecked(dispatch::parameters().stereo_mode_swap());
628 break;
629 default:
630 break;
631 }
632 _lock = false;
633 }
634