]> git.sesse.net Git - nageru/blobdiff - mainwindow.cpp
If using the mouse wheel to change pts, don't use it to scroll.
[nageru] / mainwindow.cpp
index 0932a757bbdcafa5f76c1fea2407ed2ecb944364..a483dc17a4b1d1ca86370bcfd3b90372e1127c79 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "clip_list.h"
 #include "disk_space_estimator.h"
+#include "flags.h"
 #include "player.h"
 #include "post_to_main_thread.h"
 #include "timebase.h"
@@ -29,7 +30,7 @@ extern vector<int64_t> frames[MAX_STREAMS];
 
 MainWindow::MainWindow()
        : ui(new Ui::MainWindow),
-         db("futatabi.db")
+         db(global_flags.working_directory + "/futatabi.db")
 {
        global_mainwindow = this;
        ui->setupUi(this);
@@ -134,6 +135,7 @@ MainWindow::MainWindow()
                        live_player_clip_progress(played_this_clip, total_length);
                });
        });
+       set_output_status("paused");
 
        defer_timeout = new QTimer(this);
        defer_timeout->setSingleShot(true);
@@ -335,7 +337,7 @@ void MainWindow::live_player_clip_done()
 {
        int row = playlist_clips->get_currently_playing();
        if (row == -1 || row == int(playlist_clips->size()) - 1) {
-               ui->live_label->setText("Current output (paused)");
+               set_output_status("paused");
                playlist_clips->set_currently_playing(-1, 0.0f);
        } else {
                playlist_clips->set_currently_playing(row + 1, 0.0f);
@@ -359,6 +361,21 @@ Clip MainWindow::live_player_get_next_clip()
        return clip.get();
 }
 
+static string format_duration(double t)
+{
+       int t_ms = lrint(t * 1e3);
+
+       int ms = t_ms % 1000;
+       t_ms /= 1000;
+       int s = t_ms % 60;
+       t_ms /= 60;
+       int m = t_ms;
+
+       char buf[256];
+       snprintf(buf, sizeof(buf), "%d:%02d.%03d", m, s, ms);
+       return buf;
+}
+
 void MainWindow::live_player_clip_progress(double played_this_clip, double total_length)
 {
        playlist_clips->set_currently_playing(playlist_clips->get_currently_playing(), played_this_clip / total_length);
@@ -368,17 +385,7 @@ void MainWindow::live_player_clip_progress(double played_this_clip, double total
                const Clip clip = *playlist_clips->clip(row);
                remaining += double(clip.pts_out - clip.pts_in) / TIMEBASE / 0.5;  // FIXME: stop hardcoding speed.
        }
-       int remaining_ms = lrint(remaining * 1e3);
-
-       int ms = remaining_ms % 1000;
-       remaining_ms /= 1000;
-       int s = remaining_ms % 60;
-       remaining_ms /= 60;
-       int m = remaining_ms;
-
-       char buf[256];
-       snprintf(buf, sizeof(buf), "Current output (%d:%02d.%03d left)", m, s, ms);
-       ui->live_label->setText(buf);
+       set_output_status(format_duration(remaining) + " left");
 }
 
 void MainWindow::resizeEvent(QResizeEvent *event)
@@ -587,6 +594,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event)
                        }
                }
                currently_deferring_model_changes = false;
+               return true;  // Don't scroll.
        } else if (event->type() == QEvent::MouseButtonRelease) {
                scrubbing = false;
        }
@@ -631,6 +639,17 @@ void MainWindow::playlist_selection_changed()
        ui->playlist_move_down_btn->setEnabled(
                any_selected && selected->selectedRows().back().row() < int(playlist_clips->size()) - 1);
        ui->play_btn->setEnabled(!playlist_clips->empty());
+
+       if (!any_selected) {
+               set_output_status("paused");
+       } else {
+               double remaining = 0.0;
+               for (int row = selected->selectedRows().front().row(); row < int(playlist_clips->size()); ++row) {
+                       const Clip clip = *playlist_clips->clip(row);
+                       remaining += double(clip.pts_out - clip.pts_in) / TIMEBASE / 0.5;  // FIXME: stop hardcoding speed.
+               }
+               set_output_status(format_duration(remaining) + " ready");
+       }
 }
 
 void MainWindow::clip_list_selection_changed(const QModelIndex &current, const QModelIndex &)
@@ -704,3 +723,16 @@ void MainWindow::highlight_camera_input(int stream_idx)
                ui->input4_frame->setStyleSheet("");
        }
 }
+
+void MainWindow::set_output_status(const string &status)
+{
+       ui->live_label->setText(QString::fromStdString("Current output (" + status + ")"));
+
+       lock_guard<mutex> lock(queue_status_mu);
+       queue_status = status;
+}
+
+pair<string, string> MainWindow::get_queue_status() const {
+       lock_guard<mutex> lock(queue_status_mu);
+       return {queue_status, "text/plain"};
+}