#include "pluginpopup.h"
#include "pluginset.h"
#include "preferences.h"
+#include "proxy.h"
#include "record.h"
#include "recordgui.h"
#include "renderengine.h"
+#include "remotecontrol.h"
#include "resourcethread.h"
#include "samplescroll.h"
#include "shbtnprefs.h"
#include "transitionpopup.h"
#include "vwindowgui.h"
#include "vwindow.h"
+#include "wintv.h"
+#include "x10tv.h"
#include "zoombar.h"
#define PANE_DRAG_MARGIN MAX(mwindow->theme->pane_w, mwindow->theme->pane_h)
// the main window uses its own private colormap for video
MWindowGUI::MWindowGUI(MWindow *mwindow)
: BC_Window(_(PROGRAM_NAME ": Program"),
- mwindow->session->mwindow_x,
- mwindow->session->mwindow_y,
- mwindow->session->mwindow_w,
- mwindow->session->mwindow_h,
- 100,
- 100,
- 1,
- 1,
- 1)
+ mwindow->session->mwindow_x, mwindow->session->mwindow_y,
+ mwindow->session->mwindow_w, mwindow->session->mwindow_h,
+ xS(100), yS(100), 1, 1, 1)
{
this->mwindow = mwindow;
// samplescroll = 0;
drag_popup = 0;
render_engine = 0;
+ render_engine_id = -1;
for(int i = 0; i < TOTAL_PANES; i++)
pane[i] = 0;
keyframe_menu = 0;
keyframe_hide = 0;
keyvalue_popup = 0;
- transition_menu = 0;
+ transition_menu = 0;
remote_control = 0;
cwindow_remote_handler = 0;
record_remote_handler = 0;
android_control = 0;
+// *** CONTEXT_HELP ***
+ context_help_set_keyword("Program Window");
}
delete y_divider;
}
-#if 0
-void MWindowGUI::get_scrollbars(int flush)
-{
- //int64_t h_needed = mwindow->edl->get_tracks_height(mwindow->theme);
- //int64_t w_needed = mwindow->edl->get_tracks_width();
- int need_xscroll = 0;
- int need_yscroll = 0;
- view_w = mwindow->theme->mcanvas_w;
- view_h = mwindow->theme->mcanvas_h;
-
-// Scrollbars are constitutive
- need_xscroll = need_yscroll = 1;
- view_h = mwindow->theme->mcanvas_h;
- view_w = mwindow->theme->mcanvas_w;
-
-// for(int i = 0; i < 2; i++)
-// {
-// if(w_needed > view_w)
-// {
-// need_xscroll = 1;
-// view_h = mwindow->theme->mcanvas_h - SCROLL_SPAN;
-// }
-// else
-// need_xscroll = 0;
-//
-// if(h_needed > view_h)
-// {
-// need_yscroll = 1;
-// view_w = mwindow->theme->mcanvas_w - SCROLL_SPAN;
-// }
-// else
-// need_yscroll = 0;
-// }
-//printf("MWindowGUI::get_scrollbars 1\n");
-
- if(canvas && (view_w != canvas->get_w() || view_h != canvas->get_h()))
- {
- canvas->reposition_window(mwindow->theme->mcanvas_x,
- mwindow->theme->mcanvas_y,
- view_w,
- view_h);
- }
-
- if(need_xscroll)
- {
- if(!samplescroll)
- add_subwindow(samplescroll = new SampleScroll(mwindow,
- this,
- mwindow->theme->mhscroll_x,
- mwindow->theme->mhscroll_y,
- mwindow->theme->mhscroll_w));
- else
- samplescroll->resize_event();
-
- samplescroll->set_position(0);
- }
- else
- {
- if(samplescroll) delete samplescroll;
- samplescroll = 0;
- mwindow->edl->local_session->view_start = 0;
- }
-
-
- if(need_yscroll)
- {
-//printf("MWindowGUI::get_scrollbars 1.1 %p %p\n", this, canvas);
- if(!trackscroll)
- add_subwindow(trackscroll = new TrackScroll(mwindow,
- this,
- mwindow->theme->mvscroll_x,
- mwindow->theme->mvscroll_y,
- mwindow->theme->mvscroll_h));
- else
- trackscroll->resize_event();
-
-
-//printf("MWindowGUI::get_scrollbars 1.2\n");
- trackscroll->update_length(mwindow->edl->get_tracks_height(mwindow->theme),
- mwindow->edl->local_session->track_start,
- view_h,
- 0);
-//printf("MWindowGUI::get_scrollbars 1.3\n");
- }
- else
- {
- if(trackscroll) delete trackscroll;
- trackscroll = 0;
- mwindow->edl->local_session->track_start = 0;
- }
-
- if(flush) this->flush();
-
-}
-#endif // 0
-
void MWindowGUI::create_objects()
{
lock_window("MWindowGUI::create_objects");
const int debug = 0;
- resource_thread = new ResourceThread(mwindow, this);
+ resource_thread = new ResourceThread(mwindow);
resource_thread->create_objects();
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
set_icon(mwindow->theme->get_image("mwindow_icon"));
remote_control = new RemoteControl(this);
- cwindow_remote_handler = new CWindowRemoteHandler(remote_control);
- record_remote_handler = new RecordRemoteHandler(remote_control);
+ cwindow_remote_handler = 0;
+ record_remote_handler = 0;
+#ifdef HAVE_X10TV
+// should be first, use if plugged
+ if( !cwindow_remote_handler && mwindow->x10tv ) {
+ cwindow_remote_handler = (RemoteHandler*)
+ new X10TVCWindowHandler(mwindow->x10tv, remote_control);
+ record_remote_handler = (RemoteHandler*)
+ new X10TVRecordHandler(mwindow->x10tv, remote_control);
+ }
+#endif
+#ifdef HAVE_WINTV
+ if( !cwindow_remote_handler && mwindow->wintv ) {
+ cwindow_remote_handler = (RemoteHandler*)
+ new WinTVCWindowHandler(mwindow->wintv, remote_control);
+ record_remote_handler = (RemoteHandler*)
+ new WinTVRecordHandler(mwindow->wintv, remote_control);
+ }
+#endif
mwindow->reset_android_remote();
-
+ if( !cwindow_remote_handler )
+ cwindow_remote_handler = (RemoteHandler*)
+ new CWindowKeyEvHandler(mwindow->gui->remote_control);
+ if( !record_remote_handler )
+ record_remote_handler = (RemoteHandler*)
+ new RecordKeyEvHandler(mwindow->gui->remote_control);
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
- int x = get_w() - MainShBtns::calculate_w(0);
- add_subwindow(mainmenu = new MainMenu(mwindow, this, x));
- mainmenu->create_objects();
- add_subwindow(mainshbtns = new MainShBtns(mwindow, x, -1));
+ int x1 = get_w() - MainShBtns::calculate_w(-1, 0, -1) - xS(5);
+ add_subwindow(mainshbtns = new MainShBtns(mwindow, x1, -1));
mainshbtns->load(mwindow->preferences);
+ int x2 = x1 - mwindow->theme->stack_button_w - xS(5);
+ add_subwindow(stack_button = new StackButton(mwindow, x2, yS(2)));
+ add_subwindow(mainmenu = new MainMenu(mwindow, this, x2));
+ mainmenu->create_objects();
mwindow->theme->get_mwindow_sizes(this, get_w(), get_h());
mwindow->theme->draw_mwindow_bg(this);
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
add_subwindow(mbuttons = new MButtons(mwindow, this));
mbuttons->create_objects();
- 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;
+ int y1 = mbuttons->get_y()+yS(2);
+ add_subwindow(proxy_toggle = new ProxyToggle(mwindow, mbuttons, x2, y1));
add_subwindow(ffmpeg_toggle = new FFMpegToggle(mwindow, mbuttons, x1, y1));
pane[TOP_LEFT_PANE] = new TimelinePane(mwindow,
mwindow->theme->mcanvas_h);
pane[TOP_LEFT_PANE]->create_objects();
-// add_subwindow(timebar = new MTimeBar(mwindow,
-// this,
-// mwindow->theme->mtimebar_x,
-// mwindow->theme->mtimebar_y,
-// mwindow->theme->mtimebar_w,
-// mwindow->theme->mtimebar_h));
-// timebar->create_objects();
-
-// if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
-// add_subwindow(patchbay = new PatchBay(mwindow, this));
-// patchbay->create_objects();
-
-// if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
-// get_scrollbars(0);
-
-// if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
-// mwindow->gui->add_subwindow(canvas = new TrackCanvas(mwindow, this));
-// canvas->create_objects();
-
-
if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__);
add_subwindow(zoombar = new ZoomBar(mwindow, this));
zoombar->create_objects();
int MWindowGUI::focus_in_event()
{
for(int i = 0; i < TOTAL_PANES; i++)
- if(pane[i]) pane[i]->cursor->focus_in_event();
+ if(pane[i] && pane[i]->cursor) pane[i]->cursor->focus_in_event();
return 1;
}
int MWindowGUI::focus_out_event()
{
for(int i = 0; i < TOTAL_PANES; i++)
- if(pane[i]) pane[i]->cursor->focus_out_event();
+ if(pane[i] && pane[i]->cursor) pane[i]->cursor->focus_out_event();
return 1;
}
//printf("MWindowGUI::resize_event %d\n", __LINE__);
mwindow->session->mwindow_w = w;
mwindow->session->mwindow_h = h;
- int x = w - MainShBtns::calculate_w(0);
- mainmenu->resize_event(x, mainmenu->get_h());
- mainshbtns->reposition_window(x, -1);
+ int x1 = w - MainShBtns::calculate_w(-1, 0, -1) - xS(5);
+ mainshbtns->reposition_window(x1, -1);
+ int x2 = x1 - mwindow->theme->stack_button_w - xS(5);
+ stack_button->reposition_window(x2, stack_button->get_y());
+ mainmenu->resize_event(x2, mainmenu->get_h());
mwindow->theme->get_mwindow_sizes(this, w, h);
mwindow->theme->draw_mwindow_bg(this);
mbuttons->resize_event();
- 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;
+ int y1 = mbuttons->get_y()+yS(2);
+ proxy_toggle->reposition_window(x2, y1);
ffmpeg_toggle->reposition_window(x1, y1);
statusbar->resize_event();
zoombar->resize_event();
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->canvas)
{
pane[i]->canvas->deactivate();
}
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->canvas)
{
pane[i]->canvas->draw_overlays();
if(flash_it) pane[i]->canvas->flash();
void MWindowGUI::update_proxy_toggle()
{
- int value = mwindow->edl->session->proxy_scale == 1 ? 1 : 0;
+ int value = mwindow->edl->session->proxy_state == PROXY_ACTIVE ? 0 : 1;
proxy_toggle->set_value(value);
- if( mwindow->edl->session->proxy_scale == 1 &&
- mwindow->edl->session->proxy_disabled_scale == 1 )
+ if( mwindow->edl->session->proxy_state == PROXY_INACTIVE )
proxy_toggle->hide();
else
proxy_toggle->show();
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->canvas)
{
pane[i]->canvas->refresh_plugintoggles();
}
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->canvas)
{
pane[i]->canvas->draw_indexes(indexable);
}
void MWindowGUI::draw_canvas(int redraw, int hide_cursor)
{
resource_thread->stop_draw(0);
-
- int mode = redraw ? FORCE_REDRAW : NORMAL_DRAW;
+ int mode = NORMAL_DRAW;
+ if( redraw ) {
+ mode = FORCE_REDRAW;
+ resource_pixmaps.remove_all_objects();
+ }
for(int i = 0; i < TOTAL_PANES; i++) {
if( pane[i] )
pane[i]->canvas->draw(mode, hide_cursor);
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->canvas)
{
pane[i]->canvas->flash(flush);
}
int MWindowGUI::show_window(int flush)
{
int ret = BC_WindowBase::show_window(flush);
+ stack_button->update();
update_proxy_toggle();
return ret;
}
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->cursor)
{
pane[i]->cursor->draw(do_plugintoggles);
}
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->cursor)
{
pane[i]->cursor->show(do_plugintoggles);
}
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->cursor)
{
pane[i]->cursor->hide(do_plugintoggles);
}
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->cursor)
{
pane[i]->cursor->update();
}
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->cursor)
{
pane[i]->cursor->playing_back = value;
}
{
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i])
+ if(pane[i] && pane[i]->canvas)
{
pane[i]->canvas->update_cursor(flush);
}
if( do_canvas != NO_DRAW && do_canvas != IGNORE_THREAD )
resource_thread->stop_draw(1);
+ if( do_canvas == FORCE_REDRAW )
+ resource_pixmaps.remove_all_objects();
+
for(int i = 0; i < TOTAL_PANES; i++)
{
if(pane[i]) pane[i]->update(scrollbars,
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i]) pane[i]->canvas->drag_motion(
- &over_track,
- &over_edit,
- &over_pluginset,
- &over_plugin);
+ if(pane[i] && pane[i]->canvas)
+ pane[i]->canvas->drag_motion(&over_track, &over_edit,
+ &over_pluginset, &over_plugin);
}
if(mwindow->session->track_highlighted != over_track)
mwindow->session->current_operation == DRAG_EDIT ||
mwindow->session->current_operation == DRAG_GROUP ||
mwindow->session->current_operation == DRAG_AEFFECT_COPY ||
- mwindow->session->current_operation == DRAG_VEFFECT_COPY )
- {
- redraw = 1;
- }
+ mwindow->session->current_operation == DRAG_VEFFECT_COPY ) {
+ redraw = 1;
+ }
// printf("drag_motion %d %d over_track=%p over_edit=%p\n",
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i]) result |= pane[i]->canvas->drag_stop(
- &redraw);
+ if(pane[i] && pane[i]->canvas)
+ result |= pane[i]->canvas->drag_stop(&redraw);
}
mwindow->edl->optimize();
mwindow->cwindow->gui->unlock_window();
mwindow->awindow->gui->unlock_window();
//printf("MWindowGUI::default_positions 2\n");
+ mwindow->tile_mixers();
}
int result = 0;
for(int i = 0; i < TOTAL_PANES; i++)
{
- if(pane[i]) result = pane[i]->cursor->repeat_event(duration);
+ if(pane[i] && pane[i]->cursor)
+ result = pane[i]->cursor->repeat_event(duration);
}
return result;
}
if( result ) return result;
Track *this_track = 0, *first_track = 0;
- int collapse = 0, packed = 0, overwrite = 0, plugins = 0;
+ int packed = 0, overwrite = 0, plugins = 0;
double position = 0;
switch( get_keypress() ) {
case 'A':
- if( !ctrl_down() || !shift_down() || alt_down() ) break;
- mwindow->edl->tracks->clear_selected_edits();
- draw_overlays(1);
+ if( !alt_down() ) {
+ if( !ctrl_down() || !shift_down() ) break;
+ mwindow->edl->tracks->clear_selected_edits();
+ draw_overlays(1);
+ result = 1;
+ break;
+ } // fall thru
+ case 'a':
+ if( !alt_down() ) break;
+ stop_transport("MWindowGUI::keypress_event 1");
+ mwindow->nearest_auto_keyframe(shift_down(),
+ !ctrl_down() ? PLAY_FORWARD : PLAY_REVERSE);
result = 1;
break;
+
+ case '\'':
+ if( ctrl_down() && alt_down() ) {
+ mwindow->select_edits(1);
+ result = 1;
+ }
+ break;
+
case 'e':
+ if( ctrl_down() || alt_down() ) break;
mwindow->toggle_editing_mode();
result = 1;
break;
case 'k': case 'K':
if( alt_down() ) break;
- stop_transport("MWindowGUI::keypress_event 1");
+ stop_transport("MWindowGUI::keypress_event 2");
mwindow->nearest_plugin_keyframe(shift_down(),
!ctrl_down() ? PLAY_FORWARD : PLAY_REVERSE);
result = 1;
result = 1;
break;
case 'M':
- collapse = 1;
+ mwindow->cut_selected_edits(0, 1);
+ result = 1;
+ break;
+ case BACKSPACE:
case 'm':
- mwindow->cut_selected_edits(0, collapse);
+ mwindow->cut_selected_edits(0, 0);
result = 1;
break;
case 'z':
- collapse = 1;
+ if( !alt_down() ) {
+ // z and ctrl-z both are undo, z mainmenu item
+ if( mwindow->session->current_operation == NO_OPERATION )
+ mwindow->undo_entry(this);
+ result = 1;
+ }
+ else if( ctrl_down() ) {
+ mwindow->cut_selected_edits(1, 1);
+ result = 1;
+ }
+ break;
case 'x':
if( !ctrl_down() || alt_down() ) break;
- mwindow->cut_selected_edits(1, collapse);
+ mwindow->cut_selected_edits(1, 0);
result = 1;
break;
}
break;
+ case '!':
+ if( !ctrl_down() || !shift_down() ) break;
+ {
+ if( mwindow->session->current_operation != NO_OPERATION ) return 1;
+ first_track = mwindow->edl->tracks->first;
+ double start = mwindow->edl->local_session->get_selectionstart();
+ int64_t pos = first_track->to_units(start, 0);
+ Edit *edit=first_track->edits->editof(pos, PLAY_FORWARD, 0);
+ if( !edit || !edit->asset ) return 1;
+ Asset *asset = edit->asset;
+ double timecode = asset->timecode != -2 ? asset->timecode :
+ FFMPEG::get_timecode(asset->path,
+ edit->track->data_type, edit->channel,
+ mwindow->edl->session->frame_rate);
+ asset->timecode = timecode;
+ if( timecode >= 0 ) {
+ int64_t pos = edit->startproject + edit->startsource;
+ double position = edit->track->from_units(pos);
+ mwindow->set_timecode_offset(timecode - position);
+ }
+ else
+ mwindow->set_timecode_offset(0);
+ }
+ result = 1;
+ break;
+
case UP:
if( ctrl_down() && !alt_down() )
mwindow->expand_y();
if( (this_track = pane[i]->over_patchbay()) != 0 ) break;
}
- if( get_keypress() == TAB ) { // Switch the record button
+ if( get_keypress() == TAB ) { // Switch the armed button
if( this_track )
- this_track->record = !this_track->record ? 1 : 0;
+ this_track->armed = !this_track->armed ? 1 : 0;
}
else {
int total_selected = mwindow->edl->tracks->total_of(Tracks::RECORD);
// all selected if nothing previously selected or
// if this patch was previously the only one selected and armed
int selected = !total_selected || (total_selected == 1 &&
- this_track && this_track->record ) ? 1 : 0;
+ this_track && this_track->armed ) ? 1 : 0;
mwindow->edl->tracks->select_all(Tracks::RECORD, selected);
- if( !selected && this_track ) this_track->record = 1;
+ if( !selected && this_track ) this_track->armed = 1;
}
update(0, NORMAL_DRAW, 0, 0, 1, 0, 1);
if(result)
cursor_motion_event();
+ if(!result)
+ result = context_help_check_and_show();
+
return result;
}
if( android_control ) return;
android_control = new AndroidControl(this);
}
+int MWindowGUI::keyev_grab_remote()
+{
+ if( cwindow_remote_handler && cwindow_remote_handler->is_keytv() &&
+ record_remote_handler && record_remote_handler->is_keytv() )
+ return 0;
+ delete cwindow_remote_handler;
+ delete record_remote_handler;
+ cwindow_remote_handler = (RemoteHandler*)
+ new CWindowKeyEvHandler(mwindow->gui->remote_control);
+ record_remote_handler = (RemoteHandler*)
+ new RecordKeyEvHandler(mwindow->gui->remote_control);
+ return 1;
+}
int MWindowGUI::close_event()
{
void MWindowGUI::stop_pane_drag()
{
+ if( !dragging_pane ) return;
dragging_pane = 0;
resource_thread->stop_draw(0);
}
}
+void MWindowGUI::close_keyvalue_popup()
+{
+ if( !keyvalue_popup ) return;
+ delete keyvalue_popup;
+ keyvalue_popup = 0;
+}
+
+void MWindowGUI::open_keyvalue_popup(BC_SubWindow *popup)
+{
+ close_keyvalue_popup();
+ keyvalue_popup = popup;
+}
+
PaneButton::PaneButton(MWindow *mwindow, int x, int y)
: BC_Button(x, y, mwindow->theme->get_image_set("pane"))
{
this->mwindow = mwindow;
this->mbuttons = mbuttons;
set_tooltip(get_value() ? FFMPEG_EARLY_TIP : FFMPEG_LATE_TIP);
+// *** CONTEXT_HELP ***
+ context_help_set_keyword("FFmpeg Early Probe Explanation");
}
FFMpegToggle::~FFMpegToggle()
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->update_preferences(mwindow->preferences);
mwindow->show_warning(&mwindow->preferences->warn_indexes,
_("Changing the base codecs may require rebuilding indexes."));
return 1;
}
+StackButton::StackButton(MWindow *mwindow, int x, int y)
+ : BC_GenericButton(x, y, mwindow->theme->stack_button_w, "0")
+{
+ this->mwindow = mwindow;
+ set_tooltip(_("Close EDL"));
+// *** CONTEXT_HELP ***
+ context_help_set_keyword("OpenEDL");
+}
+
+int StackButton::handle_event()
+{
+ mwindow->save_backup();
+ mwindow->stack_pop();
+ return 1;
+}
+
+void StackButton::update()
+{
+ char text[BCSTRLEN];
+ int i = mwindow->stack.size();
+ sprintf(text, "%d", i);
+ set_text(text);
+ draw_face();
+}
+
+
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)
+ mwindow->edl->session->proxy_state == PROXY_DISABLED)
{
this->mwindow = mwindow;
this->mbuttons = mbuttons;
scaler_images = mwindow->edl->session->proxy_use_scaler;
- set_tooltip(mwindow->edl->session->proxy_disabled_scale==1 ?
+ set_tooltip(mwindow->edl->session->proxy_state!=PROXY_DISABLED ?
_("Disable proxy") : _("Enable proxy"));
+// *** CONTEXT_HELP ***
+ context_help_set_keyword("Proxy");
}
void ProxyToggle::show()
mwindow->enable_proxy();
mwindow->gui->lock_window("ProxyToggle::handle_event");
set_tooltip(!disabled ? _("Disable proxy") : _("Enable proxy"));
+ ProxyDialog *dialog = mwindow->gui->mainmenu->proxy->dialog;
+ if( dialog && dialog->gui ) {
+ dialog->gui->lock_window("ProxyToggle::handle_event");
+ dialog->gui->update();
+ dialog->gui->unlock_window();
+ }
return 1;
}
return handle_event();
}
}
- return 0;
+ return context_help_check_and_show();
}