+++ /dev/null
-
-/*
- * CINELERRA
- * Copyright (C) 2011 Adam Williams <broadcast at earthling dot net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "batch.h"
-#include "bcsignals.h"
-#include "channel.h"
-#include "channeldb.h"
-#include "channeledit.h"
-#include "channelpicker.h"
-#include "chantables.h"
-#include "clip.h"
-#include "edl.h"
-#include "edlsession.h"
-#include "keys.h"
-#include "language.h"
-#include "mwindow.h"
-#include "picture.h"
-#include "playbackconfig.h"
-#include "preferencesthread.h"
-#include "record.h"
-#include "recordgui.h"
-#include "recordmonitor.h"
-#include "theme.h"
-#include "vdevicebuz.h"
-#include "vdeviceprefs.h"
-#include "videodevice.h"
-
-RecordChannelPicker::RecordChannelPicker(MWindow *mwindow,
- Record *record,
- RecordMonitor *record_monitor,
- BC_WindowBase *parent_window,
- ChannelDB *channeldb,
- int x,
- int y)
- : ChannelPicker(mwindow,
- channeldb,
- x,
- y,
- parent_window)
-{
- this->record = record;
- this->record_monitor = record_monitor;
-}
-
-RecordChannelPicker::~RecordChannelPicker()
-{
-}
-
-int RecordChannelPicker::use_select()
-{
- return 1;
-}
-
-Channel* RecordChannelPicker::get_master_channel()
-{
- return record->master_channel;
-}
-
-void RecordChannelPicker::handle_channel_edit(int result)
-{
- if(!result)
- {
- record->record_gui->lock_window("RecordChannelPicker::handle_channel_edit 1");
- record->record_gui->update_batch_sources();
- record->set_channel(get_master_channel());
- record->record_gui->unlock_window();
- record->save_defaults();
- VideoDevice::save_channeldb(record->channeldb,
- mwindow->edl->session->vconfig_in);
- }
- else
- {
- record->record_gui->lock_window("RecordChannelPicker::handle_channel_edit 2");
- record->set_channel(record->get_current_channel());
- record->record_gui->unlock_window();
- }
-
- mwindow->save_defaults();
-}
-
-void RecordChannelPicker::load_scan_defaults(Channel *scan_params)
-{
- scan_params->load_defaults(mwindow->defaults);
-}
-
-void RecordChannelPicker::save_scan_defaults(Channel *scan_params)
-{
- scan_params->save_defaults(mwindow->defaults);
-}
-
-BC_Theme* RecordChannelPicker::get_theme()
-{
- return mwindow->theme;
-}
-
-
-Channel* RecordChannelPicker::get_current_channel()
-{
- return record->get_current_channel();
-}
-
-Channel *RecordChannelPicker::get_editing_channel()
-{
- return record->get_editing_channel();
-}
-
-ArrayList<Channel*>* RecordChannelPicker::get_video_inputs()
-{
- return record->get_video_inputs();
-}
-
-Channel* RecordChannelPicker::get_channel_usage()
-{
- return record->master_channel;
-}
-
-void RecordChannelPicker::set_channel_number(int number)
-{
- if( number < 0 || number >= channeldb->size() ) return;
- Channel *channel = channeldb->get(number);
- if( channel ) record->set_channel(channel);
-}
-
-int RecordChannelPicker::set_brightness(int value)
-{
- if(record)
- {
- record->picture->brightness = value;
- record->set_video_picture();
- }
- return 0;
-}
-
-int RecordChannelPicker::set_hue(int value)
-{
- if(record)
- {
- record->picture->hue = value;
- record->set_video_picture();
- }
- return 0;
-}
-
-int RecordChannelPicker::set_color(int value)
-{
- if(record)
- {
- record->picture->color = value;
- record->set_video_picture();
- }
- return 0;
-}
-
-int RecordChannelPicker::set_contrast(int value)
-{
- if(record)
- {
- record->picture->contrast = value;
- record->set_video_picture();
- }
- return 0;
-}
-
-int RecordChannelPicker::set_whiteness(int value)
-{
- if(record)
- {
- record->picture->whiteness = value;
- record->set_video_picture();
- }
- return 0;
-}
-
-int RecordChannelPicker::set_picture(int device_id, int value)
-{
- if(record)
- {
- if(record->picture->set_item(device_id, value))
- record->set_video_picture();
- }
- return 0;
-}
-
-
-int RecordChannelPicker::get_brightness()
-{
- if(record) return record->picture->brightness;
- return 0;
-}
-
-int RecordChannelPicker::get_hue()
-{
- if(record) return record->picture->hue;
- return 0;
-}
-
-int RecordChannelPicker::get_color()
-{
- if(record) return record->picture->color;
- return 0;
-}
-
-int RecordChannelPicker::get_contrast()
-{
- if(record) return record->picture->contrast;
- return 0;
-}
-
-int RecordChannelPicker::get_whiteness()
-{
- if(record) return record->picture->whiteness;
- return 0;
-}
-
-int RecordChannelPicker::get_controls()
-{
- if(record) return record->picture->controls.total;
- return 0;
-}
-
-PictureItem* RecordChannelPicker::get_control(int i)
-{
- if(record) return record->picture->controls.values[i];
- return 0;
-}
-
-PictureConfig* RecordChannelPicker::get_picture_usage()
-{
- if(record) return record->picture;
- return 0;
-}
-
-
-
-void RecordChannelPicker::set_channel(Channel *channel)
-{
- record->set_channel(channel);
-}
-
-int RecordChannelPicker::has_signal()
-{
- return record->has_signal();
-}
-
-int RecordChannelPicker::create_channeldb(ArrayList<Channel*> *channeldb)
-{
- return record->create_channeldb(channeldb);
-}
-
-
-
-
-
-
-
-
-
-PrefsChannelPicker::PrefsChannelPicker(MWindow *mwindow,
- VDevicePrefs *prefs,
- ChannelDB *channeldb,
- int x,
- int y)
- : ChannelPicker(mwindow,
- channeldb,
- x,
- y,
- prefs->dialog)
-{
-// printf("PrefsChannelPicker::PrefsChannelPicker 1\n");
- this->prefs = prefs;
-
-#ifdef HAVE_VIDEO4LINUX
- VDeviceBUZ::get_inputs(&input_sources);
-#endif
-
-}
-
-PrefsChannelPicker::~PrefsChannelPicker()
-{
- input_sources.remove_all_objects();
-}
-
-void PrefsChannelPicker::load_scan_defaults(Channel *scan_params)
-{
- scan_params->load_defaults(mwindow->defaults);
-}
-
-void PrefsChannelPicker::save_scan_defaults(Channel *scan_params)
-{
- scan_params->save_defaults(mwindow->defaults);
-}
-
-void PrefsChannelPicker::handle_channel_edit(int result)
-{
- mwindow->save_defaults();
-}
-
-BC_Theme* PrefsChannelPicker::get_theme()
-{
- return mwindow->theme;
-}
-
-
-ArrayList<Channel*>* PrefsChannelPicker::get_video_inputs()
-{
- return &input_sources;
-}
-
-Channel* PrefsChannelPicker::get_channel_usage()
-{
- return 0;
-}
-
-
-void PrefsChannelPicker::set_channel(Channel *channel)
-{
- if(channel)
- channel_text->update(channel->title);
-}
-
-Channel *PrefsChannelPicker::get_current_channel()
-{
- int number = prefs->out_config->buz_out_channel;
- return channeldb->get(number);
-}
-
-void PrefsChannelPicker::set_channel_number(int number)
-{
- CLAMP(number, 0, channeldb->size() - 1);
- prefs->out_config->buz_out_channel = number;
- set_channel(get_current_channel());
-}
-
-int PrefsChannelPicker::has_signal()
-{
- return 0;
-}
-
-int PrefsChannelPicker::set_brightness(int value)
-{
- prefs->out_config->brightness = value;
- return 0;
-}
-
-int PrefsChannelPicker::set_hue(int value)
-{
- prefs->out_config->hue = value;
- return 0;
-}
-
-int PrefsChannelPicker::set_color(int value)
-{
- prefs->out_config->color = value;
- return 0;
-}
-
-int PrefsChannelPicker::set_contrast(int value)
-{
- prefs->out_config->contrast = value;
- return 0;
-}
-
-int PrefsChannelPicker::set_whiteness(int value)
-{
- prefs->out_config->whiteness = value;
- return 0;
-}
-
-int PrefsChannelPicker::get_brightness()
-{
- return prefs->out_config->brightness;
-}
-
-int PrefsChannelPicker::get_hue()
-{
- return prefs->out_config->hue;
-}
-
-int PrefsChannelPicker::get_color()
-{
- return prefs->out_config->color;
-}
-
-int PrefsChannelPicker::get_contrast()
-{
- return prefs->out_config->contrast;
-}
-
-int PrefsChannelPicker::get_whiteness()
-{
- return prefs->out_config->whiteness;
-}
-
-
-
-
-
-
-ChannelPicker::ChannelPicker(MWindow *mwindow,
- ChannelDB *channeldb,
- int x,
- int y,
- BC_WindowBase *parent_window)
-{
- this->mwindow = mwindow;
- this->parent_window = parent_window;
- this->x = x;
- this->y = y;
- this->channeldb = channeldb;
- channel_text = 0;
- channel_select = 0;
- channel_button = 0;
- update_channel_list();
-}
-
-ChannelPicker::~ChannelPicker()
-{
- delete channel_text;
- delete channel_select;
- delete channel_button;
- channel_listitems.remove_all_objects();
-}
-
-void ChannelPicker::update_channel_list()
-{
- channel_listitems.remove_all_objects();
- for(int i = 0; i < channeldb->size(); i++)
- {
- channel_listitems.append(new BC_ListBoxItem(channeldb->get(i)->title));
- }
-
- if(channel_text)
- channel_text->update_list(&channel_listitems);
-}
-
-int ChannelPicker::get_w()
-{
- return channel_text->get_w() +
- channel_select->get_w() +
- channel_button->get_w() +
- picture_button->get_w() +
- ((Theme*)get_theme())->widget_border * 4;
-}
-
-
-
-
-
-
-BC_WindowBase* ChannelPicker::get_subwindow()
-{
- return parent_window;
- return 0;
-}
-
-
-
-
-
-
-
-void ChannelPicker::create_objects()
-{
- channel_text = 0;
- update_channel_list();
-
-
- channel_text = new ChannelText(this, x, y);
- channel_text->create_objects();
-
-
- x += channel_text->get_w() + ((Theme*)get_theme())->widget_border;
- get_subwindow()->add_subwindow(channel_select = new ChannelTumbler(this,
- x,
- y));
-
-
- x += channel_select->get_w() + ((Theme*)get_theme())->widget_border;
- get_subwindow()->add_subwindow(channel_button = new ChannelButton(this,
- x,
- y - 1));
-
-//PRINT_TRACE
- x += channel_button->get_w() + ((Theme*)get_theme())->widget_border;
- get_subwindow()->add_subwindow(picture_button = new PictureButton(this,
- x,
- y - 1));
-//PRINT_TRACE
-
-}
-
-int ChannelPicker::reposition()
-{
- channel_text->reposition_window(channel_text->get_x(),
- channel_text->get_y());
- channel_select->reposition_window(channel_select->get_x(),
- channel_select->get_y());
- channel_button->reposition_window(channel_button->get_x(),
- channel_button->get_y());
- return 0;
-}
-
-int ChannelPicker::close_threads()
-{
- channel_button->thread->close_threads();
- return 0;
-}
-
-const char* ChannelPicker::get_source_name(Channel *channel)
-{
- if(channel->entry < chanlists[channel->freqtable].count)
- return chanlists[channel->freqtable].list[channel->entry].name;
- else
- return chanlists[channel->freqtable].list[0].name;
-}
-
-const char* ChannelPicker::current_channel_name()
-{
- if(get_current_channel())
- {
- return get_current_channel()->title;
- }
- else
- return _("Channel");
-}
-
-int ChannelPicker::channel_down()
-{
- Channel *channel = get_current_channel();
- if( !channel ) return 1;
- int number = channeldb->number_of(channel);
- if( number < 0 ) return 1;
- if( --number < 0 ) number = 0;
- set_channel_number(number);
- return 0;
-}
-
-int ChannelPicker::channel_up()
-{
- Channel *channel = get_current_channel();
- if( !channel ) return 1;
- int number = channeldb->number_of(channel);
- if( number < 0 ) return 1;
- if( ++number >= channeldb->size() ) number = channeldb->size()-1;
- set_channel_number(number);
- return 0;
-}
-
-
-
-
-
-PictureButton::PictureButton(ChannelPicker *channel_picker, int x, int y)
- : BC_Button(x,
- y,
- channel_picker->get_theme() ?
- channel_picker->get_theme()->get_image_set("picture") :
- 0)
-{
- this->channel_picker = channel_picker;
- thread = new ChannelEditPictureThread(channel_picker);
- set_tooltip(_("Edit picture"));
-}
-
-PictureButton::~PictureButton()
-{
-//printf("PictureButton::PictureButton %d\n", __LINE__);
- delete thread;
-//printf("PictureButton::PictureButton %d\n", __LINE__);
-}
-
-int PictureButton::handle_event()
-{
- unlock_window();
- thread->edit_picture();
- lock_window("PictureButton::handle_event");
- return 1;
-}
-
-
-
-
-ChannelButton::ChannelButton(ChannelPicker *channel_picker,
- int x,
- int y)
- : BC_Button(x,
- y,
- channel_picker->get_theme() ?
- channel_picker->get_theme()->get_image_set("channel") :
- 0)
-{
- this->channel_picker = channel_picker;
- thread = new ChannelEditThread(channel_picker,
- channel_picker->channeldb);
- set_tooltip(_("Edit channels"));
-}
-
-ChannelButton::~ChannelButton()
-{
- delete thread;
-}
-
-int ChannelButton::handle_event()
-{
- thread->start();
- return 1;
-}
-
-
-ChannelText::ChannelText(ChannelPicker *channel_picker,
- int x,
- int y)
- : BC_PopupTextBox(channel_picker->get_subwindow(),
- &channel_picker->channel_listitems,
- channel_picker->current_channel_name(),
- x,
- y,
- 200,
- 300)
-{
-
- this->channel_picker = channel_picker;
-}
-
-ChannelText::~ChannelText()
-{
-}
-
-int ChannelText::handle_event()
-{
- channel_picker->set_channel_number(get_number());
- return 0;
-}
-
-
-
-
-ChannelList::ChannelList(ChannelPicker *channel_picker, int x, int y)
- : BC_ListBox(x,
- y,
- 100,
- 200,
- LISTBOX_TEXT, // Display text list or icons
- &channel_picker->channel_listitems, // Each column has an ArrayList of BC_ListBoxItems.
- 0, // Titles for columns. Set to 0 for no titles
- 0, // width of each column
- 1, // Total columns.
- 0, // Pixel of top of window.
- 1) // If this listbox is a popup window
-{
- this->channel_picker = channel_picker;
-}
-
-ChannelList::~ChannelList()
-{
-}
-
-int ChannelList::handle_event()
-{
- return 0;
-}
-
-
-
-ChannelTumbler::ChannelTumbler(ChannelPicker *channel_picker,
- int x,
- int y)
- : BC_Tumbler(x, y)
-{
- this->channel_picker = channel_picker;
-}
-ChannelTumbler::~ChannelTumbler()
-{
-}
-int ChannelTumbler::handle_up_event()
-{
- channel_picker->channel_up();
- return 1;
-}
-int ChannelTumbler::handle_down_event()
-{
- channel_picker->channel_down();
- return 1;
-}
-int ChannelTumbler::keypress_event()
-{
- if(get_keypress() == PGUP)
- {
- handle_up_event();
- return 1;
- }
- else
- if(get_keypress() == PGDN)
- {
- handle_down_event();
- return 1;
- }
- else
- return 0;
-}
-
-