]> git.sesse.net Git - nageru/blobdiff - mainwindow.cpp
Only adjust pts with the wheel if the given row is selected. It is just too easy...
[nageru] / mainwindow.cpp
index 2fb897bb55e6e7215d9ee825010ac61594d1d910..6e999bad4ba653253c81b54073879d7fc87e06c0 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);
@@ -360,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);
@@ -369,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), "%d:%02d.%03d left", m, s, ms);
-       set_output_status(buf);
+       set_output_status(format_duration(remaining) + " left");
 }
 
 void MainWindow::resizeEvent(QResizeEvent *event)
@@ -545,6 +551,12 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event)
                int row = destination->rowAt(wheel->y());
                if (column == -1 || row == -1) return false;
 
+               // Only adjust pts with the wheel if the given row is selected.
+               if (!destination->hasFocus() ||
+                   row != destination->selectionModel()->currentIndex().row()) {
+                       return false;
+               }
+
                currently_deferring_model_changes = true;
                {
                        current_change_id = (watched == ui->clip_list->viewport()) ? "cliplist:" : "playlist:";
@@ -588,6 +600,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;
        }
@@ -632,6 +645,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 &)