plugin_menu = 0;
keyframe_menu = 0;
keyframe_hide = 0;
+ keyvalue_popup = 0;
transition_menu = 0;
remote_control = 0;
cwindow_remote_handler = 0;
delete cwindow_remote_handler;
delete record_remote_handler;
delete remote_control;
+ delete keyvalue_popup;
// delete samplescroll;
// delete trackscroll;
for(int i = 0; i < TOTAL_PANES; i++)
void MWindowGUI::create_objects()
{
+ lock_window("MWindowGUI::create_objects");
const int debug = 0;
resource_thread = new ResourceThread(mwindow, this);
add_subwindow(mbuttons = new MButtons(mwindow, this));
mbuttons->create_objects();
- add_subwindow(ffmpeg_toggle = new FFMpegToggle(mwindow, mbuttons, menu_w(), menu_h()+2));
+ int x1 = mbuttons->get_x() + mbuttons->get_w(), y1 = mbuttons->get_y()+2;
+ add_subwindow(proxy_toggle = new ProxyToggle(mwindow, mbuttons, x1, y1));
+ x1 += proxy_toggle->get_w() + 3;
+ add_subwindow(ffmpeg_toggle = new FFMpegToggle(mwindow, mbuttons, x1, y1));
pane[TOP_LEFT_PANE] = new TimelinePane(mwindow,
TOP_LEFT_PANE,
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
add_subwindow(mainclock = new MainClock(mwindow,
- mwindow->theme->mclock_x,
- mwindow->theme->mclock_y,
+ mwindow->theme->mclock_x, mwindow->theme->mclock_y,
mwindow->theme->mclock_w));
- mainclock->set_position_offset( (double)
- (mwindow->edl->session->get_frame_offset() /
- mwindow->edl->session->frame_rate));
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
mainclock->update(0);
#ifdef HAVE_DVB
channel_info = new ChannelInfo(mwindow);
#endif
+#ifdef HAVE_COMMERCIAL
db_window = new DbWindow(mwindow);
+#endif
swindow = new SWindow(mwindow);
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
pane[TOP_LEFT_PANE]->canvas->activate();
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
+ unlock_window();
}
void MWindowGUI::redraw_time_dependancies()
mwindow->theme->get_mwindow_sizes(this, w, h);
mwindow->theme->draw_mwindow_bg(this);
mbuttons->resize_event();
- ffmpeg_toggle->reposition_window(menu_w(), menu_h()+2);
+ int x1 = mbuttons->get_x() + mbuttons->get_w(), y1 = mbuttons->get_y()+2;
+ proxy_toggle->reposition_window(x1, y1);
+ x1 += proxy_toggle->get_w() + 3;
+ ffmpeg_toggle->reposition_window(x1, y1);
statusbar->resize_event();
zoombar->resize_event();
mwindow->theme->mzoom_y + 1 - mwindow->theme->get_image_set("pane")[0]->get_h());
resource_thread->start_draw();
+ flash(1);
return 0;
}
}
}
+void MWindowGUI::update_proxy_toggle()
+{
+ int value = mwindow->edl->session->proxy_scale == 1 ? 1 : 0;
+ proxy_toggle->set_value(value);
+ if( mwindow->edl->session->proxy_scale == 1 &&
+ mwindow->edl->session->proxy_disabled_scale == 1 )
+ proxy_toggle->hide();
+ else
+ proxy_toggle->show();
+}
+
+void MWindowGUI::update_plugintoggles()
+{
+ for(int i = 0; i < TOTAL_PANES; i++)
+ {
+ if(pane[i])
+ {
+ pane[i]->canvas->refresh_plugintoggles();
+ }
+ }
+
+}
+
void MWindowGUI::draw_indexes(Indexable *indexable)
{
for(int i = 0; i < TOTAL_PANES; i++)
}
}
+int MWindowGUI::show_window(int flush)
+{
+ int ret = BC_WindowBase::show_window(flush);
+ update_proxy_toggle();
+ return ret;
+}
+
void MWindowGUI::draw_cursor(int do_plugintoggles)
{
for(int i = 0; i < TOTAL_PANES; i++)
}
}
-void MWindowGUI::update_plugintoggles()
-{
- for(int i = 0; i < TOTAL_PANES; i++)
- {
- if(pane[i])
- {
- pane[i]->canvas->refresh_plugintoggles();
- }
- }
-
-}
-
void MWindowGUI::update_scrollbars(int flush)
{
for(int i = 0; i < TOTAL_PANES; i++)
}
-int MWindowGUI::show_message(char *message, int color)
+void MWindowGUI::show_message(const char *message, int color)
{
-// printf("MWindowGUI::show_message %d: %s 0x%08x 0x%08x\n",
-// __LINE__, message, color, mwindow->theme->message_normal);
- if(color < 0) color = mwindow->theme->message_normal;
- statusbar->status_text->set_color(color);
- statusbar->status_text->update(message);
- return 0;
+ statusbar->show_message(message, color);
+}
+
+void MWindowGUI::update_default_message()
+{
+ statusbar->update_default_message();
}
+void MWindowGUI::reset_default_message()
+{
+ statusbar->reset_default_message();
+}
+
+void MWindowGUI::default_message()
+{
+ statusbar->default_message();
+}
// Drag motion called from other window
int MWindowGUI::drag_motion()
}
-//printf("TrackCanvas::drag_stop %d %d\n", redraw, mwindow->session->current_operation);
+//printf("MWindowGUI::drag_stop %d %d\n", redraw, mwindow->session->current_operation);
if(redraw)
{
mwindow->edl->tracks->update_y_pixels(mwindow->theme);
{
//printf("MWindowGUI::default_positions 1\n");
VWindow *vwindow = mwindow->vwindows.size() > DEFAULT_VWINDOW ?
- mwindow->vwindows.get(0) : 0;
+ mwindow->vwindows.get(DEFAULT_VWINDOW) : 0;
+ if( vwindow && !vwindow->is_running() ) vwindow = 0;
if( vwindow ) vwindow->gui->lock_window("MWindowGUI::default_positions");
mwindow->cwindow->gui->lock_window("MWindowGUI::default_positions");
mwindow->awindow->gui->lock_window("MWindowGUI::default_positions");
}
-
-
-
-
-
-
-
-
-
-
-
-
-
+int MWindowGUI::button_release_event()
+{
+ if( keyvalue_popup ) {
+ delete keyvalue_popup; keyvalue_popup = 0;
+ }
+ return 0;
+}
int MWindowGUI::repeat_event(int64_t duration)
int result = mbuttons->keypress_event();
if( result ) return result;
+ Track *this_track = 0;
+
switch(get_keypress()) {
case 'e':
mwindow->toggle_editing_mode();
result = 1;
break;
+ case 'k': case 'K':
+ if( alt_down() ) break;
+ stop_transport("MWindowGUI::keypress_event 1");
+ mwindow->nearest_plugin_keyframe(shift_down(),
+ !ctrl_down() ? PLAY_FORWARD : PLAY_REVERSE);
+ result = 1;
+ break;
+
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8':
if( !alt_down() || shift_down() ) break;
case LEFT:
if( !ctrl_down() ) {
if( alt_down() ) {
- unlock_window();
- mbuttons->transport->handle_transport(STOP, 1, 0, 0);
- lock_window("MWindowGUI::keypress_event 1");
+ stop_transport("MWindowGUI::keypress_event 1");
mwindow->prev_edit_handle(shift_down());
}
else
}
break;
+ case ',':
+ if( !ctrl_down() && !alt_down() ) {
+ mwindow->move_left();
+ result = 1;
+ }
+ break;
+
case RIGHT:
if( !ctrl_down() ) {
if( alt_down() ) {
- unlock_window();
- mbuttons->transport->handle_transport(STOP, 1, 0, 0);
- lock_window("MWindowGUI::keypress_event 2");
+ stop_transport("MWindowGUI::keypress_event 2");
mwindow->next_edit_handle(shift_down());
}
else
}
break;
+ case '.':
+ if( !ctrl_down() && !alt_down() ) {
+ mwindow->move_right();
+ result = 1;
+ }
+ break;
+
case UP:
if( ctrl_down() && !alt_down() )
mwindow->expand_y();
case TAB:
case LEFTTAB:
- Track *this_track = 0;
for( int i=0; i<TOTAL_PANES; ++i ) {
if( !pane[i] ) continue;
if( (this_track = pane[i]->over_track()) != 0 ) break;
update(0, 1, 0, 0, 1, 0, 1);
unlock_window();
mwindow->cwindow->update(0, 1, 1);
- lock_window("TrackCanvas::keypress_event 3");
+ lock_window("MWindowGUI::keypress_event 3");
result = 1;
break;
+
+ case KEY_F1:
+ case KEY_F2:
+ case KEY_F3:
+ case KEY_F4:
+ case KEY_F5:
+ case KEY_F6:
+ case KEY_F7:
+ case KEY_F8:
+ case KEY_F9:
+ case KEY_F10:
+ case KEY_F11:
+ case KEY_F12:
+ resend_event(mwindow->cwindow->gui);
+ return 1;
}
// since things under cursor have changed...
return result;
}
-
int MWindowGUI::keyboard_listener(BC_WindowBase *wp)
{
return key_listener(wp->get_keypress());
record->record_gui->interrupt_thread->start(0);
break;
case KPHAND:
- mwindow->quit(0);
+ mwindow->quit();
break;
#ifdef HAVE_DVB
case KPBOOK:
}
+void MWindowGUI::update_mixers(Track *track, int v)
+{
+ for( int i=0; i<TOTAL_PANES; ++i ) {
+ if( !pane[i] ) continue;
+ PatchBay *patchbay = pane[i]->patchbay;
+ if( !patchbay ) continue;
+ for( int j=0; j<patchbay->patches.total; ++j ) {
+ PatchGUI *patchgui = patchbay->patches.values[j];
+ if( !patchgui->mix ) continue;
+ if( !track || patchgui->track == track ) {
+ patchgui->mix->update(v>=0 ? v :
+ mwindow->mixer_track_active(patchgui->track));
+ }
+ }
+ }
+}
+
+void MWindowGUI::stop_transport(const char *lock_msg)
+{
+ if( !mbuttons->transport->is_stopped() ) {
+ if( lock_msg ) unlock_window();
+ mbuttons->transport->handle_transport(STOP, 1, 0, 0);
+ if( lock_msg ) lock_window(lock_msg);
+ }
+}
+
PaneButton::PaneButton(MWindow *mwindow, int x, int y)
: BC_Button(x, y, mwindow->theme->get_image_set("pane"))
{
int PaneButton::button_release_event()
{
- mwindow->gui->stop_pane_drag();
-
+ if( get_buttonpress() != WHEEL_DOWN && get_buttonpress() != WHEEL_UP )
+ mwindow->gui->stop_pane_drag();
int result = BC_Button::button_release_event();
return result;
}
FFMpegToggle::FFMpegToggle(MWindow *mwindow, MButtons *mbuttons, int x, int y)
- : BC_Toggle(x, y, mwindow->theme->ffmpeg_toggle, mwindow->preferences->ffmpeg_early_probe)
+ : BC_Toggle(x, y, mwindow->theme->ffmpeg_toggle,
+ mwindow->preferences->get_file_probe_armed("FFMPEG_Early") > 0 ? 1 : 0)
{
this->mwindow = mwindow;
this->mbuttons = mbuttons;
- set_tooltip( mwindow->preferences->ffmpeg_early_probe ?
- _("Try FFMpeg first") : _("Try FFMpeg last"));
+ set_tooltip(get_value() ? FFMPEG_EARLY_TIP : FFMPEG_LATE_TIP);
}
FFMpegToggle::~FFMpegToggle()
int FFMpegToggle::handle_event()
{
- mwindow->preferences->ffmpeg_early_probe = get_value();
- set_tooltip( mwindow->preferences->ffmpeg_early_probe ?
- _("Try FFMpeg first") : _("Try FFMpeg last"));
+ int ffmpeg_early_probe = get_value();
+ set_tooltip(ffmpeg_early_probe ? FFMPEG_EARLY_TIP : FFMPEG_LATE_TIP);
+ mwindow->preferences->set_file_probe_armed("FFMPEG_Early", ffmpeg_early_probe);
+ mwindow->preferences->set_file_probe_armed("FFMPEG_Late", !ffmpeg_early_probe);
+
mwindow->show_warning(&mwindow->preferences->warn_indexes,
_("Changing the base codecs may require rebuilding indexes."));
return 1;
}
+ProxyToggle::ProxyToggle(MWindow *mwindow, MButtons *mbuttons, int x, int y)
+ : BC_Toggle(x, y, ( !mwindow->edl->session->proxy_use_scaler ?
+ mwindow->theme->proxy_p_toggle :
+ mwindow->theme->proxy_s_toggle ),
+ mwindow->edl->session->proxy_disabled_scale != 1)
+{
+ this->mwindow = mwindow;
+ this->mbuttons = mbuttons;
+ scaler_images = mwindow->edl->session->proxy_use_scaler;
+ set_tooltip(mwindow->edl->session->proxy_disabled_scale==1 ?
+ _("Disable proxy") : _("Enable proxy"));
+}
+
+void ProxyToggle::show()
+{
+ int use_scaler = mwindow->edl->session->proxy_use_scaler;
+ if( scaler_images != use_scaler )
+ set_images(!(scaler_images=use_scaler) ?
+ mwindow->theme->proxy_p_toggle :
+ mwindow->theme->proxy_s_toggle );
+ draw_face(1, 0);
+ if( is_hidden() )
+ show_window();
+}
+
+void ProxyToggle::hide()
+{
+ if( !is_hidden() )
+ hide_window();
+}
+
+ProxyToggle::~ProxyToggle()
+{
+}
+
+int ProxyToggle::handle_event()
+{
+ int disabled = get_value();
+ if( disabled )
+ mwindow->disable_proxy();
+ else
+ mwindow->enable_proxy();
+ set_tooltip(!disabled ? _("Disable proxy") : _("Enable proxy"));
+ return 1;
+}
+
+int ProxyToggle::keypress_event()
+{
+ if( ctrl_down() && !shift_down() && !alt_down() ) {
+ int key = get_keypress();
+ if( key == 'r' ) {
+ int value = get_value() ? 0 : 1;
+ set_value(value);
+ return handle_event();
+ }
+ }
+ return 0;
+}
+