]> git.sesse.net Git - nageru/blobdiff - futatabi/mainwindow.h
Make the UI programmatically dependent on NUM_CAMERAS.
[nageru] / futatabi / mainwindow.h
index 0fa337f61e6d56dc5f5212277413848acd273ca6..97f0f296aef8638372635b13b14d0be019e2a923 100644 (file)
@@ -19,7 +19,11 @@ namespace Ui {
 class MainWindow;
 }  // namespace Ui
 
+struct FrameOnDisk;
+class JPEGFrameView;
 class Player;
+class QPushButton;
+class QTableView;
 
 class MainWindow : public QMainWindow {
        Q_OBJECT
@@ -31,10 +35,11 @@ public:
        // HTTP callback. TODO: Does perhaps not belong to MainWindow?
        std::pair<std::string, std::string> get_queue_status() const;
 
-//private:
-       Ui::MainWindow *ui;
+       void display_frame(unsigned stream_idx, const FrameOnDisk &frame);
 
 private:
+       Ui::MainWindow *ui;
+
        QLabel *disk_free_label;
        std::unique_ptr<Player> preview_player, live_player;
        DB db;
@@ -75,12 +80,20 @@ private:
        mutable std::mutex queue_status_mu;
        std::string queue_status;  // Under queue_status_mu.
 
+       struct FrameAndDisplay {
+               QFrame *frame;
+               JPEGFrameView *display;
+               QPushButton *preview_btn;
+       };
+       std::vector<FrameAndDisplay> displays;
+
        void cue_in_clicked();
        void cue_out_clicked();
        void queue_clicked();
        void preview_clicked();
        void preview_angle_clicked(unsigned stream_idx);
        void play_clicked();
+       void stop_clicked();
        void live_player_clip_done();
        std::pair<Clip, size_t> live_player_get_next_clip();
        void live_player_clip_progress(const std::map<size_t, double> &progress);
@@ -117,6 +130,9 @@ private:
 
        void highlight_camera_input(int stream_idx);
 
+       template <class Model>
+       void replace_model(QTableView *view, Model **model, Model *new_model);
+
 private slots:
        void relayout();
 };