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()
43 firewire_channels = 0;
60 int ADevicePrefs::initialize()
68 driver = &out_config->driver;
71 driver = &in_config->driver;
74 driver = &out_config->driver;
77 this->driver = *driver;
81 dialog->add_subwindow(menu = new ADriverMenu(x,
86 menu->create_objects();
92 case AUDIO_OSS_ENVY24:
104 create_firewire_objs();
110 int ADevicePrefs::get_h()
112 return DEVICE_H + 25;
115 int ADevicePrefs::delete_objects()
120 case AUDIO_OSS_ENVY24:
127 delete_esound_objs();
132 delete_firewire_objs();
140 int ADevicePrefs::delete_oss_objs()
144 delete channels_title;
146 for(int i = 0; i < MAXDEVICES; i++)
148 // delete oss_enable[i];
150 delete oss_channels[i];
156 int ADevicePrefs::delete_esound_objs()
160 delete esound_server;
165 int ADevicePrefs::delete_firewire_objs()
168 delete channel_title;
169 delete firewire_port;
170 delete firewire_channel;
174 delete firewire_path;
183 if(firewire_channels)
185 delete firewire_channels;
186 delete channels_title;
188 firewire_channels = 0;
192 int ADevicePrefs::delete_alsa_objs()
195 alsa_drivers->remove_all_objects();
199 delete channels_title;
202 delete alsa_channels;
203 delete alsa_workaround;
209 int ADevicePrefs::create_oss_objs()
214 BC_Resources *resources = BC_WindowBase::get_resources();
216 for(int i = 0; i < MAXDEVICES; i++)
218 int x1 = x + menu->get_w() + 5;
222 // output_int = &out_config->oss_enable[i];
225 // output_int = &in_config->oss_enable[i];
228 // output_int = &out_config->oss_enable[i];
231 // dialog->add_subwindow(oss_enable[i] = new OSSEnable(x1, y1 + 20, output_int));
232 // x1 += oss_enable[i]->get_w() + 5;
236 output_char = out_config->oss_out_device[i];
239 output_char = in_config->oss_in_device[i];
242 output_char = out_config->oss_out_device[i];
245 if(i == 0) dialog->add_subwindow(path_title = new BC_Title(x1,
249 resources->text_default));
250 dialog->add_subwindow(oss_path[i] = new ADeviceTextBox(x1,
254 x1 += oss_path[i]->get_w() + 5;
260 output_int = &out_config->oss_out_bits;
263 output_int = &in_config->oss_in_bits;
266 output_int = &out_config->oss_out_bits;
269 if(i == 0) dialog->add_subwindow(bits_title = new BC_Title(x1, y, _("Bits:"), MEDIUMFONT, resources->text_default));
270 oss_bits = new BitsPopup(dialog,
279 oss_bits->create_objects();
282 x1 += oss_bits->get_w() + 5;
286 output_int = &out_config->oss_out_channels[i];
289 output_int = &in_config->oss_in_channels[i];
292 output_int = &out_config->oss_out_channels[i];
295 if(i == 0) dialog->add_subwindow(channels_title = new BC_Title(x1, y1, _("Channels:"), MEDIUMFONT, resources->text_default));
296 dialog->add_subwindow(oss_channels[i] = new ADeviceIntBox(x1, y1 + 20, output_int));
304 int ADevicePrefs::create_alsa_objs()
310 BC_Resources *resources = BC_WindowBase::get_resources();
312 int x1 = x + menu->get_w() + 5;
314 ArrayList<char*> *alsa_titles = new ArrayList<char*>;
315 AudioALSA::list_devices(alsa_titles);
317 alsa_drivers = new ArrayList<BC_ListBoxItem*>;
318 for(int i = 0; i < alsa_titles->total; i++)
319 alsa_drivers->append(new BC_ListBoxItem(alsa_titles->values[i]));
320 alsa_titles->remove_all_objects();
326 output_char = out_config->alsa_out_device;
329 output_char = in_config->alsa_in_device;
332 output_char = out_config->alsa_out_device;
335 dialog->add_subwindow(path_title = new BC_Title(x1, y, _("Device:"), MEDIUMFONT, resources->text_default));
336 alsa_device = new ALSADevice(dialog,
341 alsa_device->create_objects();
344 x1 += alsa_device->get_w() + 5;
348 output_int = &out_config->alsa_out_bits;
351 output_int = &in_config->alsa_in_bits;
354 output_int = &out_config->alsa_out_bits;
357 dialog->add_subwindow(bits_title = new BC_Title(x1, y, _("Bits:"), MEDIUMFONT, resources->text_default));
358 alsa_bits = new BitsPopup(dialog,
367 alsa_bits->create_objects();
369 x1 += alsa_bits->get_w() + 5;
373 output_int = &out_config->alsa_out_channels;
376 output_int = &in_config->alsa_in_channels;
379 output_int = &out_config->alsa_out_channels;
382 dialog->add_subwindow(channels_title = new BC_Title(x1, y, _("Channels:"), MEDIUMFONT, resources->text_default));
383 dialog->add_subwindow(alsa_channels = new ADeviceIntBox(x1, y1 + 20, output_int));
384 y1 += alsa_channels->get_h() + 20 + 5;
389 dialog->add_subwindow(alsa_workaround =
392 &out_config->interrupt_workaround,
393 _("Stop playback locks up.")));
402 int ADevicePrefs::create_esound_objs()
404 int x1 = x + menu->get_w() + 5;
407 BC_Resources *resources = BC_WindowBase::get_resources();
412 output_char = out_config->esound_out_server;
415 output_char = in_config->esound_in_server;
418 output_char = out_config->esound_out_server;
421 dialog->add_subwindow(server_title = new BC_Title(x1, y, _("Server:"), MEDIUMFONT, resources->text_default));
422 dialog->add_subwindow(esound_server = new ADeviceTextBox(x1, y + 20, output_char));
427 output_int = &out_config->esound_out_port;
430 output_int = &in_config->esound_in_port;
433 output_int = &out_config->esound_out_port;
436 x1 += esound_server->get_w() + 5;
437 dialog->add_subwindow(port_title = new BC_Title(x1, y, _("Port:"), MEDIUMFONT, resources->text_default));
438 dialog->add_subwindow(esound_port = new ADeviceIntBox(x1, y + 20, output_int));
442 int ADevicePrefs::create_firewire_objs()
444 int x1 = x + menu->get_w() + 5;
446 char *output_char = 0;
447 BC_Resources *resources = BC_WindowBase::get_resources();
453 if(driver == AUDIO_DV1394)
454 output_char = out_config->dv1394_path;
456 if(driver == AUDIO_1394)
457 output_char = out_config->firewire_path;
459 // Our version of raw1394 doesn't support changing the path
467 dialog->add_subwindow(path_title = new BC_Title(x1, y, _("Device Path:"), MEDIUMFONT, resources->text_default));
468 dialog->add_subwindow(firewire_path = new ADeviceTextBox(x1, y + 20, output_char));
469 x1 += firewire_path->get_w() + 5;
476 if(driver == AUDIO_DV1394)
477 output_int = &out_config->dv1394_port;
479 output_int = &out_config->firewire_port;
482 output_int = &in_config->firewire_port;
485 // output_int = &out_config->afirewire_out_port;
488 dialog->add_subwindow(port_title = new BC_Title(x1, y, _("Port:"), MEDIUMFONT, resources->text_default));
489 dialog->add_subwindow(firewire_port = new ADeviceIntBox(x1, y + 20, output_int));
491 x1 += firewire_port->get_w() + 5;
497 if(driver == AUDIO_DV1394)
498 output_int = &out_config->dv1394_channel;
500 output_int = &out_config->firewire_channel;
503 output_int = &in_config->firewire_channel;
506 dialog->add_subwindow(channel_title = new BC_Title(x1, y, _("Channel:"), MEDIUMFONT, resources->text_default));
507 dialog->add_subwindow(firewire_channel = new ADeviceIntBox(x1, y + 20, output_int));
508 x1 += firewire_channel->get_w() + 5;
514 if(driver == AUDIO_DV1394)
515 output_int = &out_config->dv1394_channels;
517 output_int = &out_config->firewire_channels;
526 dialog->add_subwindow(channels_title = new BC_Title(x1, y, _("Channels:"), MEDIUMFONT, resources->text_default));
527 dialog->add_subwindow(firewire_channels = new ADeviceIntBox(x1, y + 20, output_int));
528 x1 += firewire_channels->get_w() + 5;
535 if(driver == AUDIO_DV1394)
536 output_int = &out_config->dv1394_syt;
538 if(driver == AUDIO_1394)
539 output_int = &out_config->firewire_syt;
550 dialog->add_subwindow(syt_title = new BC_Title(x1, y, _("Syt Offset:"), MEDIUMFONT, resources->text_default));
551 dialog->add_subwindow(firewire_syt = new ADeviceIntBox(x1, y + 20, output_int));
552 x1 += firewire_syt->get_w() + 5;
558 ADriverMenu::ADriverMenu(int x,
560 ADevicePrefs *device_prefs,
563 : BC_PopupMenu(x, y, 125, adriver_to_string(*output), 1)
565 this->output = output;
566 this->do_input = do_input;
567 this->device_prefs = device_prefs;
570 ADriverMenu::~ADriverMenu()
574 void ADriverMenu::create_objects()
576 add_item(new ADriverItem(this, AUDIO_OSS_TITLE, AUDIO_OSS));
577 add_item(new ADriverItem(this, AUDIO_OSS_ENVY24_TITLE, AUDIO_OSS_ENVY24));
580 add_item(new ADriverItem(this, AUDIO_ALSA_TITLE, AUDIO_ALSA));
583 if(!do_input) add_item(new ADriverItem(this, AUDIO_ESOUND_TITLE, AUDIO_ESOUND));
584 // add_item(new ADriverItem(this, AUDIO_NAS_TITLE, AUDIO_NAS));
586 if(!do_input) add_item(new ADriverItem(this, AUDIO_1394_TITLE, AUDIO_1394));
587 add_item(new ADriverItem(this, AUDIO_DV1394_TITLE, AUDIO_DV1394));
588 add_item(new ADriverItem(this, AUDIO_IEC61883_TITLE, AUDIO_IEC61883));
592 char* ADriverMenu::adriver_to_string(int driver)
597 sprintf(string, AUDIO_OSS_TITLE);
599 case AUDIO_OSS_ENVY24:
600 sprintf(string, AUDIO_OSS_ENVY24_TITLE);
603 sprintf(string, AUDIO_ESOUND_TITLE);
606 sprintf(string, AUDIO_NAS_TITLE);
609 sprintf(string, AUDIO_ALSA_TITLE);
613 sprintf(string, AUDIO_1394_TITLE);
616 sprintf(string, AUDIO_DV1394_TITLE);
619 sprintf(string, AUDIO_IEC61883_TITLE);
626 ADriverItem::ADriverItem(ADriverMenu *popup, char *text, int driver)
630 this->driver = driver;
633 ADriverItem::~ADriverItem()
637 int ADriverItem::handle_event()
639 popup->set_text(get_text());
640 *(popup->output) = driver;
641 popup->device_prefs->initialize();
648 OSSEnable::OSSEnable(int x, int y, int *output)
649 : BC_CheckBox(x, y, *output)
651 this->output = output;
653 int OSSEnable::handle_event()
655 *output = get_value();
662 ADeviceTextBox::ADeviceTextBox(int x, int y, char *output)
663 : BC_TextBox(x, y, 150, 1, output)
665 this->output = output;
668 int ADeviceTextBox::handle_event()
670 strcpy(output, get_text());
674 ADeviceIntBox::ADeviceIntBox(int x, int y, int *output)
675 : BC_TextBox(x, y, 80, 1, *output)
677 this->output = output;
680 int ADeviceIntBox::handle_event()
682 *output = atol(get_text());
687 ALSADevice::ALSADevice(PreferencesDialog *dialog,
691 ArrayList<BC_ListBoxItem*> *devices)
692 : BC_PopupTextBox(dialog,
700 this->output = output;
703 ALSADevice::~ALSADevice()
707 int ALSADevice::handle_event()
709 strcpy(output, get_text());