X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fmainwindow.h;h=43c9e78232f1d3edcff3375b450b24017e4bc835;hb=a6f3a2275ad116e6ab338e583ab8ef1b1141b468;hp=afc16ff4c68c41f8cca8ff9a04ba38256f0fe369;hpb=4a9e97065dade428e373a83618bc973cd93cbe52;p=nageru diff --git a/futatabi/mainwindow.h b/futatabi/mainwindow.h index afc16ff..43c9e78 100644 --- a/futatabi/mainwindow.h +++ b/futatabi/mainwindow.h @@ -3,6 +3,7 @@ #include "clip_list.h" #include "db.h" +#include "midi_mapper.h" #include "state.pb.h" #include @@ -26,7 +27,7 @@ class Player; class QPushButton; class QTableView; -class MainWindow : public QMainWindow { +class MainWindow : public QMainWindow, public ControllerReceiver { Q_OBJECT public: @@ -38,12 +39,24 @@ public: void display_frame(unsigned stream_idx, const FrameOnDisk &frame); + // ControllerReceiver interface. + void preview() override; + void queue() override; + void play() override; + void jog(int delta) override; + void switch_camera(unsigned camera_idx) override; + void cue_in() override; + void cue_out() override; + + // Raw receivers are not used. + void controller_changed(unsigned controller) override {} + void note_on(unsigned note) override {} + private: Ui::MainWindow *ui; QLabel *disk_free_label; std::unique_ptr preview_player, live_player; - std::map live_player_index_to_row; DB db; unsigned num_cameras; @@ -62,6 +75,16 @@ private: int last_mousewheel_camera_row = -1; int leftover_angle_degrees = 0; + // Normally, jog is only allowed if in the focus (well, selection) is + // on the in or out pts columns. However, changing camera (even when + // using a MIDI button) on the clip list changes the highlight, + // and we'd like to keep on jogging. Thus, as a special case, if you + // change to a camera column on the clip list (and don't change which + // clip you're looking at), the last column you were at will be stored here. + // If you then try to jog, we'll fetch the value from here and highlight it. + // Doing pretty much anything else is going to reset it back to -1, though. + int hidden_jog_column = -1; + // Some operations, notably scrubbing and scrolling, happen in so large increments // that we want to group them instead of saving to disk every single time. // If they happen (ie., we get a callback from the model that it's changed) while @@ -95,6 +118,8 @@ private: QNetworkAccessManager http; QNetworkReply *http_reply = nullptr; + MIDIMapper midi_mapper; + void change_num_cameras(); void cue_in_clicked(); void cue_out_clicked(); @@ -103,14 +128,16 @@ private: void preview_angle_clicked(unsigned stream_idx); void play_clicked(); void stop_clicked(); - void live_player_clip_done(); - std::pair live_player_get_next_clip(); - void live_player_clip_progress(const std::map &progress); + void live_player_done(); + void live_player_clip_progress(const std::map &progress, double time_remaining); void set_output_status(const std::string &status); void playlist_duplicate(); void playlist_remove(); void playlist_move(int delta); + enum JogDestination { JOG_CLIP_LIST, JOG_PLAYLIST }; + void jog_internal(JogDestination jog_destination, int column, int row, int stream_idx, int pts_delta); + void defer_timer_expired(); void content_changed(); // In clip_list or play_list. void state_changed(const StateProto &state); // Called post-filtering. @@ -140,6 +167,8 @@ private: void padding_toggled(double seconds, bool checked); void highlight_camera_input(int stream_idx); + void enable_or_disable_preview_button(); + void enable_or_disable_queue_button(); template void replace_model(QTableView *view, Model **model, Model *new_model);