4 #include "channeledit.h"
5 #include "channelpicker.h"
6 #include "chantables.h"
10 #include "mwindowgui.h"
13 #include "recordgui.h"
15 #include "videodevice.h"
19 ChannelEditThread::ChannelEditThread(MWindow *mwindow,
20 ChannelPicker *channel_picker,
25 this->channel_picker = channel_picker;
26 this->mwindow = mwindow;
27 this->channeldb = channeldb;
28 this->record = record;
31 new_channels = new ChannelDB;
32 completion = new Condition(1, "ChannelEditThread::completion");
34 ChannelEditThread::~ChannelEditThread()
40 void ChannelEditThread::run()
48 window->lock_window("ChannelEditThread::run");
49 window->raise_window(1);
50 window->unlock_window();
55 completion->lock("ChannelEditThread::run");
57 // Copy master channel list to temporary.
58 new_channels->copy_from(channel_picker->channeldb);
59 current_channel = channel_picker->get_current_channel_number();
60 //printf("ChannelEditThread::run 1 %d\n", current_channel);
62 // Run the channel list window using the temporary list.
63 ChannelEditWindow window(mwindow, this, channel_picker);
64 window.create_objects();
65 this->window = &window;
66 int result = window.run_window();
71 // Copy new channels to master list
72 channel_picker->channeldb->clear();
74 channel_picker->channeldb->copy_from(new_channels);
75 channel_picker->update_channel_list();
79 record->record_gui->lock_window("ChannelEditThread::run");
80 record->record_gui->update_batch_sources();
82 //printf("ChannelEditThread::run 10 %d\n", current_channel);
83 record->set_channel(current_channel);
84 record->record_gui->unlock_window();
85 record->save_defaults();
86 record->channeldb->save(record->get_channeldb_prefix());
88 mwindow->save_defaults();
95 record->set_channel(record->get_editing_batch()->channel);
99 window.edit_thread->close_threads();
100 window.picture_thread->close_threads();
102 completion->unlock();
107 int ChannelEditThread::close_threads()
109 if(in_progress && window)
111 window->edit_thread->close_threads();
112 window->picture_thread->close_threads();
114 completion->lock("ChannelEditThread::close_threads");
115 completion->unlock();
120 ChannelEditWindow::ChannelEditWindow(MWindow *mwindow,
121 ChannelEditThread *thread,
122 ChannelPicker *channel_picker)
123 : BC_Window(PROGRAM_NAME ": Channels",
124 mwindow->gui->get_abs_cursor_x(1) - 330,
125 mwindow->gui->get_abs_cursor_y(1),
134 this->thread = thread;
135 this->channel_picker = channel_picker;
136 this->mwindow = mwindow;
138 ChannelEditWindow::~ChannelEditWindow()
141 for(i = 0; i < channel_list.total; i++)
143 delete channel_list.values[i];
145 channel_list.remove_all();
147 delete picture_thread;
150 int ChannelEditWindow::create_objects()
152 int x = 10, y = 10, i;
155 // Create channel list
156 for(i = 0; i < thread->new_channels->size(); i++)
158 channel_list.append(new BC_ListBoxItem(thread->new_channels->get(i)->title));
161 add_subwindow(list_box = new ChannelEditList(mwindow, this, x, y));
165 add_subwindow(new ChannelEditSelect(mwindow, this, x, y));
168 add_subwindow(new ChannelEditAdd(mwindow, this, x, y));
170 add_subwindow(new ChannelEdit(mwindow, this, x, y));
172 add_subwindow(new ChannelEditMoveUp(mwindow, this, x, y));
174 add_subwindow(new ChannelEditMoveDown(mwindow, this, x, y));
176 add_subwindow(new ChannelEditDel(mwindow, this, x, y));
178 add_subwindow(new ChannelEditPicture(mwindow, this, x, y));
181 add_subwindow(new BC_OKButton(this));
183 add_subwindow(new BC_CancelButton(this));
186 edit_thread = new ChannelEditEditThread(this,
189 picture_thread = new ChannelEditPictureThread(channel_picker, this);
194 int ChannelEditWindow::close_event()
199 int ChannelEditWindow::add_channel()
201 Channel *new_channel;
202 Channel *prev_channel = 0;
204 // Create new channel
205 new_channel = new Channel;
207 // Reuse parameters from previous channel
208 if(thread->new_channels->size())
210 prev_channel = thread->new_channels->get(
211 thread->new_channels->size() - 1);
212 new_channel->copy_settings(prev_channel);
215 // Use default channel parameters
218 new_channel->copy_settings(thread->record->master_channel);
221 // Copy device usage. Need the same thing for playback.
224 new_channel->copy_usage(thread->record->master_channel);
227 // Add to channel table
228 channel_list.append(new BC_ListBoxItem(new_channel->title));
229 thread->new_channels->append(new_channel);
232 // Start common routing
233 edit_thread->edit_channel(new_channel, 0);
237 int ChannelEditWindow::update_list()
239 list_box->update(&channel_list, 0, 0, 1, list_box->get_yposition());
242 int ChannelEditWindow::update_list(Channel *channel)
245 for(i = 0; i < thread->new_channels->size(); i++)
246 if(thread->new_channels->get(i) == channel) break;
248 if(i < thread->new_channels->size())
250 channel_list.values[i]->set_text(channel->title);
257 int ChannelEditWindow::edit_channel()
259 if(list_box->get_selection_number(0, 0) > -1)
261 thread->current_channel = list_box->get_selection_number(0, 0);
262 edit_thread->edit_channel(
263 thread->new_channels->get(
264 list_box->get_selection_number(0, 0)),
269 int ChannelEditWindow::edit_picture()
271 picture_thread->edit_picture();
274 int ChannelEditWindow::delete_channel(int number)
276 delete thread->new_channels->get(number);
277 channel_list.remove_number(number);
278 thread->new_channels->remove_number(number);
282 int ChannelEditWindow::delete_channel(Channel *channel)
285 for(i = 0; i < thread->new_channels->size(); i++)
287 if(thread->new_channels->get(i) == channel)
292 if(i < thread->new_channels->size()) delete_channel(i);
296 int ChannelEditWindow::move_channel_up()
298 if(list_box->get_selection_number(0, 0) > -1)
300 int number2 = list_box->get_selection_number(0, 0);
301 int number1 = number2 - 1;
303 BC_ListBoxItem *temp_text;
305 if(number1 < 0) number1 = thread->new_channels->size() - 1;
307 temp = thread->new_channels->get(number1);
308 thread->new_channels->set(number1, thread->new_channels->get(number2));
309 thread->new_channels->set(number2, temp);
311 temp_text = channel_list.values[number1];
312 channel_list.values[number1] = channel_list.values[number2];
313 channel_list.values[number2] = temp_text;
314 list_box->update(&channel_list,
318 list_box->get_xposition(),
319 list_box->get_yposition(),
326 int ChannelEditWindow::move_channel_down()
328 if(list_box->get_selection_number(0, 0) > -1)
330 int number2 = list_box->get_selection_number(0, 0);
331 int number1 = number2 + 1;
333 BC_ListBoxItem *temp_text;
335 if(number1 > thread->new_channels->size() - 1) number1 = 0;
337 temp = thread->new_channels->get(number1);
338 thread->new_channels->set(number1, thread->new_channels->get(number2));
339 thread->new_channels->set(number2, temp);
340 temp_text = channel_list.values[number1];
341 channel_list.values[number1] = channel_list.values[number2];
342 channel_list.values[number2] = temp_text;
343 list_box->update(&channel_list,
347 list_box->get_xposition(),
348 list_box->get_yposition(),
355 int ChannelEditWindow::change_channel_from_list(int channel_number)
358 if(channel_number > -1 && channel_number < thread->new_channels->size())
360 thread->current_channel = channel_number;
361 channel_picker->set_channel(thread->new_channels->get(channel_number));
365 ChannelEditSelect::ChannelEditSelect(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
366 : BC_GenericButton(x, y, _("Select"))
368 this->window = window;
370 ChannelEditSelect::~ChannelEditSelect()
373 int ChannelEditSelect::handle_event()
375 window->change_channel_from_list(
376 window->list_box->get_selection_number(0, 0));
379 ChannelEditAdd::ChannelEditAdd(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
380 : BC_GenericButton(x, y, _("Add..."))
382 this->window = window;
384 ChannelEditAdd::~ChannelEditAdd()
387 int ChannelEditAdd::handle_event()
389 window->add_channel();
392 ChannelEditList::ChannelEditList(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
398 &(window->channel_list))
400 this->window = window;
402 ChannelEditList::~ChannelEditList()
405 int ChannelEditList::handle_event()
407 window->edit_channel();
410 ChannelEditMoveUp::ChannelEditMoveUp(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
411 : BC_GenericButton(x, y, _("Move up"))
413 this->window = window;
415 ChannelEditMoveUp::~ChannelEditMoveUp()
418 int ChannelEditMoveUp::handle_event()
420 lock_window("ChannelEditMoveUp::handle_event");
421 window->move_channel_up();
425 ChannelEditMoveDown::ChannelEditMoveDown(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
426 : BC_GenericButton(x, y, _("Move down"))
428 this->window = window;
430 ChannelEditMoveDown::~ChannelEditMoveDown()
433 int ChannelEditMoveDown::handle_event()
435 lock_window("ChannelEditMoveDown::handle_event");
436 window->move_channel_down();
440 ChannelEditDel::ChannelEditDel(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
441 : BC_GenericButton(x, y, _("Delete"))
443 this->window = window;
445 ChannelEditDel::~ChannelEditDel()
448 int ChannelEditDel::handle_event()
450 if(window->list_box->get_selection_number(0, 0) > -1) window->delete_channel(window->list_box->get_selection_number(0, 0));
453 ChannelEdit::ChannelEdit(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
454 : BC_GenericButton(x, y, _("Edit..."))
456 this->window = window;
458 ChannelEdit::~ChannelEdit()
461 int ChannelEdit::handle_event()
463 window->edit_channel();
466 ChannelEditPicture::ChannelEditPicture(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
467 : BC_GenericButton(x, y, _("Picture..."))
469 this->window = window;
471 ChannelEditPicture::~ChannelEditPicture()
474 int ChannelEditPicture::handle_event()
476 window->edit_picture();
481 // ================================= Edit a single channel
485 ChannelEditEditThread::ChannelEditEditThread(ChannelEditWindow *window,
486 ChannelPicker *channel_picker,
490 this->window = window;
491 this->channel_picker = channel_picker;
492 this->record = record;
496 completion = new Condition(1, "ChannelEditEditThread::completion");
499 ChannelEditEditThread::~ChannelEditEditThread()
504 int ChannelEditEditThread::close_threads()
508 edit_window->set_done(1);
509 completion->lock("ChannelEditEditThread::close_threads");
510 completion->unlock();
514 int ChannelEditEditThread::edit_channel(Channel *channel, int editing)
518 edit_window->lock_window("ChannelEditEditThread::edit_channel");
519 edit_window->raise_window(1);
520 edit_window->unlock_window();
525 // Copy the channel to edit into a temporary
526 completion->lock("ChannelEditEditThread::edit_channel");
527 this->editing = editing;
528 this->output_channel = channel;
529 new_channel.copy_settings(output_channel);
530 new_channel.copy_usage(output_channel);
532 if(editing && new_channel.title[0])
540 char *ChannelEditEditThread::value_to_freqtable(int value)
545 return _("NTSC_BCAST");
548 return _("NTSC_CABLE");
551 return _("NTSC_HRC");
554 return _("NTSC_BCAST_JP");
557 return _("NTSC_CABLE_JP");
560 return _("PAL_AUSTRALIA");
563 return _("PAL_EUROPE");
566 return _("PAL_E_EUROPE");
569 return _("PAL_ITALY");
572 return _("PAL_IRELAND");
575 return _("PAL_NEWZEALAND");
580 char* ChannelEditEditThread::value_to_norm(int value)
596 char* ChannelEditEditThread::value_to_input(int value)
598 if(channel_picker->get_video_inputs()->total > value)
599 return channel_picker->get_video_inputs()->values[value]->device_name;
604 void ChannelEditEditThread::set_device()
606 channel_picker->set_channel(&new_channel);
609 int ChannelEditEditThread::change_source(char *source_name)
612 for(i = 0; i < chanlists[new_channel.freqtable].count; i++)
614 if(!strcasecmp(chanlists[new_channel.freqtable].list[i].name, source_name))
616 new_channel.entry = i;
617 i = chanlists[new_channel.freqtable].count;
623 strcpy(new_channel.title, source_name);
624 if(edit_window->title_text)
626 edit_window->title_text->update(source_name);
631 int ChannelEditEditThread::source_up()
634 if(new_channel.entry > chanlists[new_channel.freqtable].count - 1) new_channel.entry = 0;
635 source_text->update(chanlists[new_channel.freqtable].list[new_channel.entry].name);
639 int ChannelEditEditThread::source_down()
642 if(new_channel.entry < 0) new_channel.entry = chanlists[new_channel.freqtable].count - 1;
643 source_text->update(chanlists[new_channel.freqtable].list[new_channel.entry].name);
647 int ChannelEditEditThread::set_input(int value)
649 new_channel.input = value;
653 int ChannelEditEditThread::set_norm(int value)
655 new_channel.norm = value;
659 int ChannelEditEditThread::set_freqtable(int value)
661 new_channel.freqtable = value;
662 if(new_channel.entry > chanlists[new_channel.freqtable].count - 1) new_channel.entry = 0;
663 source_text->update(chanlists[new_channel.freqtable].list[new_channel.entry].name);
667 void ChannelEditEditThread::run()
669 ChannelEditEditWindow edit_window(this, window, channel_picker);
670 edit_window.create_objects(&new_channel);
671 this->edit_window = &edit_window;
672 int result = edit_window.run_window();
673 this->edit_window = 0;
675 // Done editing channel. Keep channel.
678 output_channel->copy_settings(&new_channel);
679 window->lock_window();
680 window->update_list(output_channel);
681 window->unlock_window();
688 window->lock_window();
689 window->delete_channel(output_channel);
690 window->unlock_window();
694 completion->unlock();
698 ChannelEditEditWindow::ChannelEditEditWindow(ChannelEditEditThread *thread,
699 ChannelEditWindow *window,
700 ChannelPicker *channel_picker)
701 : BC_Window(PROGRAM_NAME ": Edit Channel",
702 channel_picker->mwindow->gui->get_abs_cursor_x(1),
703 channel_picker->mwindow->gui->get_abs_cursor_y(1),
712 this->channel_picker = channel_picker;
713 this->window = window;
714 this->thread = thread;
716 ChannelEditEditWindow::~ChannelEditEditWindow()
719 int ChannelEditEditWindow::create_objects(Channel *channel)
721 this->new_channel = channel;
722 Channel *channel_usage = channel_picker->get_channel_usage();
727 (!channel_usage->use_frequency &&
728 !channel_usage->use_fine &&
729 !channel_usage->use_norm &&
730 !channel_usage->use_input))
732 add_subwindow(new BC_Title(x, y, "Device has no input selection."));
737 add_subwindow(new BC_Title(x, y, _("Title:")));
738 add_subwindow(title_text = new ChannelEditEditTitle(x, y + 20, thread));
742 if(channel_usage->use_frequency)
744 add_subwindow(new BC_Title(x, y, _("Channel:")));
746 add_subwindow(thread->source_text = new ChannelEditEditSource(x, y, thread));
747 add_subwindow(new ChannelEditEditSourceTumbler(x + 160, y, thread));
750 add_subwindow(new BC_Title(x, y, _("Frequency table:")));
751 ChannelEditEditFreqtable *table;
752 add_subwindow(table = new ChannelEditEditFreqtable(x + 130, y, thread));
757 if(channel_usage->use_fine)
759 add_subwindow(new BC_Title(x, y, _("Fine:")));
760 add_subwindow(new ChannelEditEditFine(x + 130, y, thread));
764 if(channel_usage->use_norm)
766 add_subwindow(new BC_Title(x, y, _("Norm:")));
767 ChannelEditEditNorm *norm;
768 add_subwindow(norm = new ChannelEditEditNorm(x + 130, y, thread));
773 if(channel_usage->use_input)
775 add_subwindow(new BC_Title(x, y, _("Input:")));
776 ChannelEditEditInput *input;
777 add_subwindow(input = new ChannelEditEditInput(x + 130, y, thread, thread->record));
782 add_subwindow(new BC_OKButton(x, y));
784 add_subwindow(new BC_CancelButton(x, y));
789 ChannelEditEditTitle::ChannelEditEditTitle(int x,
791 ChannelEditEditThread *thread)
792 : BC_TextBox(x, y, 150, 1, thread->new_channel.title)
794 this->thread = thread;
796 ChannelEditEditTitle::~ChannelEditEditTitle()
799 int ChannelEditEditTitle::handle_event()
801 if(strlen(get_text()) < 1024)
803 strcpy(thread->new_channel.title, get_text());
806 thread->user_title = 1;
808 thread->user_title = 0;
813 ChannelEditEditSource::ChannelEditEditSource(int x, int y, ChannelEditEditThread *thread)
814 : BC_TextBox(x, y, 150, 1, chanlists[thread->new_channel.freqtable].list[thread->new_channel.entry].name)
816 this->thread = thread;
819 ChannelEditEditSource::~ChannelEditEditSource()
822 int ChannelEditEditSource::handle_event()
824 thread->change_source(get_text());
828 ChannelEditEditSourceTumbler::ChannelEditEditSourceTumbler(int x, int y, ChannelEditEditThread *thread)
831 this->thread = thread;
833 ChannelEditEditSourceTumbler::~ChannelEditEditSourceTumbler()
836 int ChannelEditEditSourceTumbler::handle_up_event()
840 int ChannelEditEditSourceTumbler::handle_down_event()
842 thread->source_down();
845 ChannelEditEditInput::ChannelEditEditInput(int x, int y, ChannelEditEditThread *thread, Record *record)
846 : BC_PopupMenu(x, y, 150, thread->value_to_input(thread->new_channel.input))
848 this->thread = thread;
849 this->record = record;
851 ChannelEditEditInput::~ChannelEditEditInput()
854 int ChannelEditEditInput::add_items()
856 ArrayList<Channel*> *inputs;
857 inputs = thread->channel_picker->get_video_inputs();
860 for(int i = 0; i < inputs->total; i++)
862 add_item(new ChannelEditEditInputItem(thread, inputs->values[i]->device_name, i));
865 int ChannelEditEditInput::handle_event()
870 ChannelEditEditInputItem::ChannelEditEditInputItem(ChannelEditEditThread *thread, char *text, int value)
873 this->thread = thread;
876 ChannelEditEditInputItem::~ChannelEditEditInputItem()
879 int ChannelEditEditInputItem::handle_event()
881 get_popup_menu()->set_text(get_text());
882 if(!thread->user_title)
884 strcpy(thread->new_channel.title, get_text());
885 if(thread->edit_window->title_text)
887 thread->edit_window->title_text->update(get_text());
890 thread->set_input(value);
893 ChannelEditEditNorm::ChannelEditEditNorm(int x, int y, ChannelEditEditThread *thread)
894 : BC_PopupMenu(x, y, 100, thread->value_to_norm(thread->new_channel.norm))
896 this->thread = thread;
898 ChannelEditEditNorm::~ChannelEditEditNorm()
901 int ChannelEditEditNorm::add_items()
903 add_item(new ChannelEditEditNormItem(thread, thread->value_to_norm(NTSC), NTSC));
904 add_item(new ChannelEditEditNormItem(thread, thread->value_to_norm(PAL), PAL));
905 add_item(new ChannelEditEditNormItem(thread, thread->value_to_norm(SECAM), SECAM));
910 ChannelEditEditNormItem::ChannelEditEditNormItem(ChannelEditEditThread *thread, char *text, int value)
914 this->thread = thread;
916 ChannelEditEditNormItem::~ChannelEditEditNormItem()
919 int ChannelEditEditNormItem::handle_event()
921 get_popup_menu()->set_text(get_text());
922 thread->set_norm(value);
926 ChannelEditEditFreqtable::ChannelEditEditFreqtable(int x, int y, ChannelEditEditThread *thread)
927 : BC_PopupMenu(x, y, 150, thread->value_to_freqtable(thread->new_channel.freqtable))
929 this->thread = thread;
931 ChannelEditEditFreqtable::~ChannelEditEditFreqtable()
934 int ChannelEditEditFreqtable::add_items()
936 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(NTSC_BCAST), NTSC_BCAST));
937 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(NTSC_CABLE), NTSC_CABLE));
938 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(NTSC_HRC), NTSC_HRC));
939 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(NTSC_BCAST_JP), NTSC_BCAST_JP));
940 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(NTSC_CABLE_JP), NTSC_CABLE_JP));
941 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(PAL_AUSTRALIA), PAL_AUSTRALIA));
942 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(PAL_EUROPE), PAL_EUROPE));
943 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(PAL_E_EUROPE), PAL_E_EUROPE));
944 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(PAL_ITALY), PAL_ITALY));
945 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(PAL_IRELAND), PAL_IRELAND));
946 add_item(new ChannelEditEditFreqItem(thread, thread->value_to_freqtable(PAL_NEWZEALAND), PAL_NEWZEALAND));
950 ChannelEditEditFreqItem::ChannelEditEditFreqItem(ChannelEditEditThread *thread, char *text, int value)
954 this->thread = thread;
956 ChannelEditEditFreqItem::~ChannelEditEditFreqItem()
959 int ChannelEditEditFreqItem::handle_event()
961 get_popup_menu()->set_text(get_text());
962 thread->set_freqtable(value);
967 ChannelEditEditFine::ChannelEditEditFine(int x, int y, ChannelEditEditThread *thread)
975 thread->new_channel.fine_tune)
977 this->thread = thread;
979 ChannelEditEditFine::~ChannelEditEditFine()
982 int ChannelEditEditFine::handle_event()
984 thread->new_channel.fine_tune = get_value();
985 thread->set_device();
989 // ========================== picture quality
991 ChannelEditPictureThread::ChannelEditPictureThread(ChannelPicker *channel_picker, ChannelEditWindow *window)
994 this->channel_picker = channel_picker;
995 this->window = window;
998 completion = new Condition(1, "ChannelEditPictureThread::completion");
1000 ChannelEditPictureThread::~ChannelEditPictureThread()
1005 int ChannelEditPictureThread::edit_picture()
1009 edit_window->lock_window("ChannelEditPictureThread::edit_picture");
1010 edit_window->raise_window(1);
1011 edit_window->unlock_window();
1015 completion->lock("ChannelEditPictureThread::edit_picture");
1020 void ChannelEditPictureThread::run()
1022 ChannelEditPictureWindow edit_window(this, channel_picker);
1023 edit_window.create_objects();
1024 this->edit_window = &edit_window;
1025 int result = edit_window.run_window();
1026 this->edit_window = 0;
1027 completion->unlock();
1031 int ChannelEditPictureThread::close_threads()
1035 edit_window->set_done(1);
1036 completion->lock("ChannelEditPictureThread::close_threads");
1037 completion->unlock();
1042 ChannelEditPictureWindow::ChannelEditPictureWindow(ChannelEditPictureThread *thread, ChannelPicker *channel_picker)
1043 : BC_Window(PROGRAM_NAME ": Picture",
1044 channel_picker->mwindow->gui->get_abs_cursor_x(1) - 200,
1045 channel_picker->mwindow->gui->get_abs_cursor_y(1) - 220,
1051 this->thread = thread;
1052 this->channel_picker = channel_picker;
1054 ChannelEditPictureWindow::~ChannelEditPictureWindow()
1057 int ChannelEditPictureWindow::create_objects()
1060 int x1 = 110, x2 = 145;
1061 #define SWAP_X x1 ^= x2; x2 ^= x1; x1 ^= x2;
1063 Picture *picture_usage = channel_picker->get_picture_usage();
1065 if(!picture_usage ||
1066 (!picture_usage->use_brightness &&
1067 !picture_usage->use_contrast &&
1068 !picture_usage->use_color &&
1069 !picture_usage->use_hue &&
1070 !picture_usage->use_whiteness &&
1071 !channel_picker->get_controls()))
1073 add_subwindow(new BC_Title(x, y, "Device has no picture controls."));
1077 if(picture_usage->use_brightness)
1079 add_subwindow(new BC_Title(x, y + 10, _("Brightness:")));
1080 add_subwindow(new ChannelEditBright(x1, y, channel_picker, channel_picker->get_brightness()));
1086 if(picture_usage->use_contrast)
1088 add_subwindow(new BC_Title(x, y + 10, _("Contrast:")));
1089 add_subwindow(new ChannelEditContrast(x1, y, channel_picker, channel_picker->get_contrast()));
1094 if(picture_usage->use_color)
1096 add_subwindow(new BC_Title(x, y + 10, _("Color:")));
1097 add_subwindow(new ChannelEditColor(x1, y, channel_picker, channel_picker->get_color()));
1102 if(picture_usage->use_hue)
1104 add_subwindow(new BC_Title(x, y + 10, _("Hue:")));
1105 add_subwindow(new ChannelEditHue(x1, y, channel_picker, channel_picker->get_hue()));
1110 if(picture_usage->use_whiteness)
1112 add_subwindow(new BC_Title(x, y + 10, _("Whiteness:")));
1113 add_subwindow(new ChannelEditWhiteness(x1, y, channel_picker, channel_picker->get_whiteness()));
1118 for(int i = 0; i < channel_picker->get_controls(); i++)
1120 add_subwindow(new BC_Title(x,
1122 _(channel_picker->get_control(i)->name)));
1123 add_subwindow(new ChannelEditCommon(x1,
1126 channel_picker->get_control(i)));
1133 add_subwindow(new BC_OKButton(x + 70, y));
1139 ChannelEditBright::ChannelEditBright(int x, int y, ChannelPicker *channel_picker, int value)
1146 this->channel_picker = channel_picker;
1148 ChannelEditBright::~ChannelEditBright() {}
1149 int ChannelEditBright::handle_event()
1153 int ChannelEditBright::button_release_event()
1155 if(BC_Pot::button_release_event())
1157 channel_picker->set_brightness(get_value());
1163 ChannelEditContrast::ChannelEditContrast(int x, int y, ChannelPicker *channel_picker, int value)
1170 this->channel_picker = channel_picker;
1172 ChannelEditContrast::~ChannelEditContrast() {}
1173 int ChannelEditContrast::handle_event()
1177 int ChannelEditContrast::button_release_event()
1179 if(BC_Pot::button_release_event())
1181 channel_picker->set_contrast(get_value());
1188 ChannelEditColor::ChannelEditColor(int x, int y, ChannelPicker *channel_picker, int value)
1195 this->channel_picker = channel_picker;
1197 ChannelEditColor::~ChannelEditColor() {}
1198 int ChannelEditColor::handle_event()
1202 int ChannelEditColor::button_release_event()
1204 if(BC_Pot::button_release_event())
1206 channel_picker->set_color(get_value());
1212 ChannelEditHue::ChannelEditHue(int x, int y, ChannelPicker *channel_picker, int value)
1219 this->channel_picker = channel_picker;
1221 ChannelEditHue::~ChannelEditHue() {}
1222 int ChannelEditHue::handle_event()
1226 int ChannelEditHue::button_release_event()
1228 if(BC_Pot::button_release_event())
1230 channel_picker->set_hue(get_value());
1236 ChannelEditWhiteness::ChannelEditWhiteness(int x, int y, ChannelPicker *channel_picker, int value)
1243 this->channel_picker = channel_picker;
1245 ChannelEditWhiteness::~ChannelEditWhiteness()
1248 int ChannelEditWhiteness::handle_event()
1252 int ChannelEditWhiteness::button_release_event()
1254 if(BC_Pot::button_release_event())
1256 channel_picker->set_whiteness(get_value());
1264 ChannelEditCommon::ChannelEditCommon(int x,
1266 ChannelPicker *channel_picker,
1274 this->channel_picker = channel_picker;
1275 this->device_id = item->device_id;
1278 ChannelEditCommon::~ChannelEditCommon()
1282 int ChannelEditCommon::handle_event()
1287 int ChannelEditCommon::button_release_event()
1289 if(BC_Pot::button_release_event())
1291 channel_picker->set_picture(device_id, get_value());