1 #include "adeviceprefs.h"
3 #include "audiodevice.inc"
7 #include "playbackconfig.h"
8 #include "preferences.h"
9 #include "preferencesthread.h"
10 #include "recordconfig.h"
15 ADevicePrefs::ADevicePrefs(int x,
17 PreferencesWindow *pwindow,
18 PreferencesDialog *dialog,
19 AudioOutConfig *out_config,
20 AudioInConfig *in_config,
24 this->pwindow = pwindow;
25 this->dialog = dialog;
28 this->out_config = out_config;
29 this->in_config = in_config;
34 ADevicePrefs::~ADevicePrefs()
40 void ADevicePrefs::reset()
56 int ADevicePrefs::initialize(int creation)
64 driver = &out_config->driver;
67 driver = &in_config->driver;
70 driver = &out_config->driver;
73 this->driver = *driver;
77 dialog->add_subwindow(menu = new ADriverMenu(x,
82 menu->create_objects();
88 case AUDIO_OSS_ENVY24:
100 create_firewire_objs();
106 int ADevicePrefs::get_h(int recording)
109 return DEVICE_H + 30;
114 int ADevicePrefs::delete_objects()
119 case AUDIO_OSS_ENVY24:
126 delete_esound_objs();
131 delete_firewire_objs();
139 int ADevicePrefs::delete_oss_objs()
144 for(int i = 0; i < MAXDEVICES; i++)
152 int ADevicePrefs::delete_esound_objs()
156 delete esound_server;
161 int ADevicePrefs::delete_firewire_objs()
164 delete channel_title;
165 delete firewire_port;
166 delete firewire_channel;
170 delete firewire_path;
182 int ADevicePrefs::delete_alsa_objs()
185 alsa_drivers->remove_all_objects();
191 delete alsa_workaround;
197 int ADevicePrefs::create_oss_objs()
202 BC_Resources *resources = BC_WindowBase::get_resources();
204 for(int i = 0; i < MAXDEVICES; i++)
206 int x1 = x + menu->get_w() + 5;
210 // output_int = &out_config->oss_enable[i];
213 // output_int = &in_config->oss_enable[i];
216 // output_int = &out_config->oss_enable[i];
219 // dialog->add_subwindow(oss_enable[i] = new OSSEnable(x1, y1 + 20, output_int));
220 // x1 += oss_enable[i]->get_w() + 5;
224 output_char = out_config->oss_out_device[i];
227 output_char = in_config->oss_in_device[i];
230 output_char = out_config->oss_out_device[i];
233 if(i == 0) dialog->add_subwindow(path_title = new BC_Title(x1,
237 resources->text_default));
238 dialog->add_subwindow(oss_path[i] = new ADeviceTextBox(x1,
242 x1 += oss_path[i]->get_w() + 5;
248 output_int = &out_config->oss_out_bits;
251 output_int = &in_config->oss_in_bits;
254 output_int = &out_config->oss_out_bits;
257 if(i == 0) dialog->add_subwindow(bits_title = new BC_Title(x1, y, _("Bits:"), MEDIUMFONT, resources->text_default));
258 oss_bits = new BitsPopup(dialog,
267 oss_bits->create_objects();
270 x1 += oss_bits->get_w() + 5;
278 int ADevicePrefs::create_alsa_objs()
284 BC_Resources *resources = BC_WindowBase::get_resources();
286 int x1 = x + menu->get_w() + 5;
288 ArrayList<char*> *alsa_titles = new ArrayList<char*>;
289 AudioALSA::list_devices(alsa_titles, 0, mode);
291 alsa_drivers = new ArrayList<BC_ListBoxItem*>;
292 for(int i = 0; i < alsa_titles->total; i++)
293 alsa_drivers->append(new BC_ListBoxItem(alsa_titles->values[i]));
294 alsa_titles->remove_all_objects();
300 output_char = out_config->alsa_out_device;
303 output_char = in_config->alsa_in_device;
306 output_char = out_config->alsa_out_device;
309 dialog->add_subwindow(path_title = new BC_Title(x1, y, _("Device:"), MEDIUMFONT, resources->text_default));
310 alsa_device = new ALSADevice(dialog,
315 alsa_device->create_objects();
318 x1 += alsa_device->get_w() + 5;
322 output_int = &out_config->alsa_out_bits;
325 output_int = &in_config->alsa_in_bits;
328 output_int = &out_config->alsa_out_bits;
331 dialog->add_subwindow(bits_title = new BC_Title(x1, y, _("Bits:"), MEDIUMFONT, resources->text_default));
332 alsa_bits = new BitsPopup(dialog,
341 alsa_bits->create_objects();
343 y1 += alsa_bits->get_h() + 20 + 5;
348 dialog->add_subwindow(alsa_workaround =
351 &out_config->interrupt_workaround,
352 _("Stop playback locks up.")));
361 int ADevicePrefs::create_esound_objs()
363 int x1 = x + menu->get_w() + 5;
366 BC_Resources *resources = BC_WindowBase::get_resources();
371 output_char = out_config->esound_out_server;
374 output_char = in_config->esound_in_server;
377 output_char = out_config->esound_out_server;
380 dialog->add_subwindow(server_title = new BC_Title(x1, y, _("Server:"), MEDIUMFONT, resources->text_default));
381 dialog->add_subwindow(esound_server = new ADeviceTextBox(x1, y + 20, output_char));
386 output_int = &out_config->esound_out_port;
389 output_int = &in_config->esound_in_port;
392 output_int = &out_config->esound_out_port;
395 x1 += esound_server->get_w() + 5;
396 dialog->add_subwindow(port_title = new BC_Title(x1, y, _("Port:"), MEDIUMFONT, resources->text_default));
397 dialog->add_subwindow(esound_port = new ADeviceIntBox(x1, y + 20, output_int));
401 int ADevicePrefs::create_firewire_objs()
403 int x1 = x + menu->get_w() + 5;
405 char *output_char = 0;
406 BC_Resources *resources = BC_WindowBase::get_resources();
412 if(driver == AUDIO_DV1394)
413 output_char = out_config->dv1394_path;
415 if(driver == AUDIO_1394)
416 output_char = out_config->firewire_path;
419 if(driver == AUDIO_DV1394 || driver == AUDIO_1394)
420 output_char = in_config->firewire_path;
426 dialog->add_subwindow(path_title = new BC_Title(x1, y, _("Device Path:"), MEDIUMFONT, resources->text_default));
427 dialog->add_subwindow(firewire_path = new ADeviceTextBox(x1, y + 20, output_char));
428 x1 += firewire_path->get_w() + 5;
435 if(driver == AUDIO_DV1394)
436 output_int = &out_config->dv1394_port;
438 output_int = &out_config->firewire_port;
441 output_int = &in_config->firewire_port;
444 // output_int = &out_config->afirewire_out_port;
447 dialog->add_subwindow(port_title = new BC_Title(x1, y, _("Port:"), MEDIUMFONT, resources->text_default));
448 dialog->add_subwindow(firewire_port = new ADeviceIntBox(x1, y + 20, output_int));
450 x1 += firewire_port->get_w() + 5;
456 if(driver == AUDIO_DV1394)
457 output_int = &out_config->dv1394_channel;
459 output_int = &out_config->firewire_channel;
462 output_int = &in_config->firewire_channel;
465 dialog->add_subwindow(channel_title = new BC_Title(x1, y, _("Channel:"), MEDIUMFONT, resources->text_default));
466 dialog->add_subwindow(firewire_channel = new ADeviceIntBox(x1, y + 20, output_int));
467 x1 += firewire_channel->get_w() + 5;
473 if(driver == AUDIO_DV1394)
474 output_int = &out_config->dv1394_syt;
476 if(driver == AUDIO_1394)
477 output_int = &out_config->firewire_syt;
488 dialog->add_subwindow(syt_title = new BC_Title(x1, y, _("Syt Offset:"), MEDIUMFONT, resources->text_default));
489 dialog->add_subwindow(firewire_syt = new ADeviceIntBox(x1, y + 20, output_int));
490 x1 += firewire_syt->get_w() + 5;
496 ADriverMenu::ADriverMenu(int x,
498 ADevicePrefs *device_prefs,
501 : BC_PopupMenu(x, y, 125, adriver_to_string(*output), 1)
503 this->output = output;
504 this->do_input = do_input;
505 this->device_prefs = device_prefs;
508 ADriverMenu::~ADriverMenu()
512 void ADriverMenu::create_objects()
514 add_item(new ADriverItem(this, AUDIO_OSS_TITLE, AUDIO_OSS));
515 add_item(new ADriverItem(this, AUDIO_OSS_ENVY24_TITLE, AUDIO_OSS_ENVY24));
518 add_item(new ADriverItem(this, AUDIO_ALSA_TITLE, AUDIO_ALSA));
521 if(!do_input) add_item(new ADriverItem(this, AUDIO_ESOUND_TITLE, AUDIO_ESOUND));
522 // add_item(new ADriverItem(this, AUDIO_NAS_TITLE, AUDIO_NAS));
524 if(!do_input) add_item(new ADriverItem(this, AUDIO_1394_TITLE, AUDIO_1394));
525 add_item(new ADriverItem(this, AUDIO_DV1394_TITLE, AUDIO_DV1394));
526 add_item(new ADriverItem(this, AUDIO_IEC61883_TITLE, AUDIO_IEC61883));
530 char* ADriverMenu::adriver_to_string(int driver)
535 sprintf(string, AUDIO_OSS_TITLE);
537 case AUDIO_OSS_ENVY24:
538 sprintf(string, AUDIO_OSS_ENVY24_TITLE);
541 sprintf(string, AUDIO_ESOUND_TITLE);
544 sprintf(string, AUDIO_NAS_TITLE);
547 sprintf(string, AUDIO_ALSA_TITLE);
551 sprintf(string, AUDIO_1394_TITLE);
554 sprintf(string, AUDIO_DV1394_TITLE);
557 sprintf(string, AUDIO_IEC61883_TITLE);
564 ADriverItem::ADriverItem(ADriverMenu *popup, char *text, int driver)
568 this->driver = driver;
571 ADriverItem::~ADriverItem()
575 int ADriverItem::handle_event()
577 popup->set_text(get_text());
578 *(popup->output) = driver;
579 popup->device_prefs->initialize();
586 OSSEnable::OSSEnable(int x, int y, int *output)
587 : BC_CheckBox(x, y, *output)
589 this->output = output;
591 int OSSEnable::handle_event()
593 *output = get_value();
600 ADeviceTextBox::ADeviceTextBox(int x, int y, char *output)
601 : BC_TextBox(x, y, 150, 1, output)
603 this->output = output;
606 int ADeviceTextBox::handle_event()
608 strcpy(output, get_text());
612 ADeviceIntBox::ADeviceIntBox(int x, int y, int *output)
613 : BC_TextBox(x, y, 80, 1, *output)
615 this->output = output;
618 int ADeviceIntBox::handle_event()
620 *output = atol(get_text());
625 ALSADevice::ALSADevice(PreferencesDialog *dialog,
629 ArrayList<BC_ListBoxItem*> *devices)
630 : BC_PopupTextBox(dialog,
638 this->output = output;
641 ALSADevice::~ALSADevice()
645 int ALSADevice::handle_event()
647 strcpy(output, get_text());