+2018-03-23 Carl Hetherington <cth@carlh.net>
+
+ * Add space shortcut to start/stop playback (#1201).
+
2018-03-22 Carl Hetherington <cth@carlh.net>
* Allow CPL selection in player (#1239).
ID_help_report_a_problem,
/* IDs for shortcuts (with no associated menu item) */
ID_add_file,
- ID_remove
+ ID_remove,
+ ID_start_stop
};
class DOMFrame : public wxFrame
overall_panel->SetSizer (main_sizer);
#ifdef __WXOSX__
- int accelerators = 3;
+ int accelerators = 4;
#else
- int accelerators = 2;
+ int accelerators = 3;
#endif
wxAcceleratorEntry* accel = new wxAcceleratorEntry[accelerators];
accel[0].Set (wxACCEL_CTRL, static_cast<int>('A'), ID_add_file);
accel[1].Set (wxACCEL_NORMAL, WXK_DELETE, ID_remove);
+ accel[2].Set (wxACCEL_NORMAL, WXK_SPACE, ID_start_stop);
#ifdef __WXOSX__
- accel[2].Set (wxACCEL_CTRL, static_cast<int>('W'), wxID_EXIT);
+ accel[3].Set (wxACCEL_CTRL, static_cast<int>('W'), wxID_EXIT);
#endif
Bind (wxEVT_MENU, boost::bind (&ContentPanel::add_file_clicked, _film_editor->content_panel()), ID_add_file);
Bind (wxEVT_MENU, boost::bind (&DOMFrame::remove_clicked, this, _1), ID_remove);
+ Bind (wxEVT_MENU, boost::bind (&DOMFrame::start_stop_pressed, this), ID_start_stop);
wxAcceleratorTable accel_table (accelerators, accel);
SetAcceleratorTable (accel_table);
delete[] accel;
_update_news_requested = false;
}
+ void start_stop_pressed ()
+ {
+ if (_film_viewer->playing()) {
+ _film_viewer->stop();
+ } else {
+ _film_viewer->start();
+ }
+ }
+
FilmEditor* _film_editor;
FilmViewer* _film_viewer;
VideoWaveformDialog* _video_waveform_dialog;
ID_help_report_a_problem,
ID_tools_verify,
ID_tools_check_for_updates,
+ /* IDs for shortcuts (with no associated menu item) */
+ ID_start_stop
};
class DOMFrame : public wxFrame
overall_panel->SetSizer (main_sizer);
#ifdef __WXOSX__
- wxAcceleratorEntry* accel = new wxAcceleratorEntry[1];
- accel[0].Set(wxACCEL_CTRL, static_cast<int>('W'), ID_file_close);
- wxAcceleratorTable accel_table (1, accel);
+ int accelerators = 2;
+#else
+ int accelerators = 1;
+#endif
+
+ wxAcceleratorEntry* accel = new wxAcceleratorEntry[accelerators];
+ accel[0].Set(wxACCEL_NORMAL, WXK_SPACE, ID_start_stop);
+#ifdef __WXOSX__
+ accel[1].Set(wxACCEL_CTRL, static_cast<int>('W'), ID_file_close);
+#endif
+ wxAcceleratorTable accel_table (accelerators, accel);
SetAcceleratorTable (accel_table);
delete[] accel;
-#endif
+
+ Bind (wxEVT_MENU, boost::bind (&DOMFrame::start_stop_pressed, this), ID_start_stop);
UpdateChecker::instance()->StateChanged.connect (boost::bind (&DOMFrame::update_checker_state_changed, this));
}
_view_cpl->Enable (static_cast<bool>(_film));
}
+ void start_stop_pressed ()
+ {
+ if (_viewer->playing()) {
+ _viewer->stop();
+ } else {
+ _viewer->start();
+ }
+ }
+
bool _update_news_requested;
PlayerInformation* _info;
wxPreferencesEditor* _config_dialog;
return _dropped;
}
+ void start ();
+ bool stop ();
+ bool playing () const {
+ return _playing;
+ }
+
int audio_callback (void* out, unsigned int frames);
boost::signals2::signal<void (boost::weak_ptr<PlayerVideo>)> ImageChanged;
void recreate_butler ();
void config_changed (Config::Property);
DCPTime time () const;
- void start ();
- bool stop ();
Frame average_latency () const;
DCPTime one_video_frame () const;