X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fmainwindow.h;h=798745609b9ca7627aac96aff337f6cc0cae9f5e;hb=44ee1966fb400dca1085e1e63d6305a5878414b7;hp=7f8c57ac805a79928573a01e76e17e5916ab8d39;hpb=eeda8995329601f9f4e35047358400833eeae68e;p=nageru diff --git a/futatabi/mainwindow.h b/futatabi/mainwindow.h index 7f8c57a..7987456 100644 --- a/futatabi/mainwindow.h +++ b/futatabi/mainwindow.h @@ -5,6 +5,8 @@ #include "db.h" #include "state.pb.h" +#include +#include #include #include #include @@ -18,12 +20,14 @@ class MainWindow; } // namespace Ui class Player; +class QTableView; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); + ~MainWindow(); // HTTP callback. TODO: Does perhaps not belong to MainWindow? std::pair get_queue_status() const; @@ -33,7 +37,7 @@ public: private: QLabel *disk_free_label; - Player *preview_player, *live_player; + std::unique_ptr preview_player, live_player; DB db; // State when doing a scrub operation on a timestamp with the mouse. @@ -60,6 +64,9 @@ private: std::string deferred_change_id; StateProto deferred_state; + // NOTE: The undo stack always has the current state on top. + std::deque undo_stack, redo_stack; + // Before a change that should be deferred (see above), currently_deferring_model_changes // must be set to true, and current_change_id must be given contents describing what's // changed to avoid accidental grouping. @@ -75,6 +82,7 @@ private: void preview_clicked(); 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); @@ -86,6 +94,7 @@ private: void defer_timer_expired(); void content_changed(); // In clip_list or play_list. void state_changed(const StateProto &state); // Called post-filtering. + void save_settings(); enum Rounding { FIRST_AT_OR_AFTER, LAST_BEFORE }; void preview_single_frame(int64_t pts, unsigned stream_idx, Rounding rounding); @@ -100,9 +109,19 @@ private: void report_disk_space(off_t free_bytes, double estimated_seconds_left); void exit_triggered(); + void export_cliplist_clip_multitrack_triggered(); + void export_playlist_clip_interpolated_triggered(); + void manual_triggered(); + void about_triggered(); + void undo_triggered(); + void redo_triggered(); + void quality_toggled(int quality, bool checked); void highlight_camera_input(int stream_idx); + template + void replace_model(QTableView *view, Model **model, Model *new_model); + private slots: void relayout(); };