#include "clip_list.h"
#include "disk_space_estimator.h"
+#include "flags.h"
#include "player.h"
#include "post_to_main_thread.h"
#include "timebase.h"
MainWindow::MainWindow()
: ui(new Ui::MainWindow),
- db("futatabi.db")
+ db(global_flags.working_directory + "/futatabi.db")
{
global_mainwindow = this;
ui->setupUi(this);
live_player_clip_progress(played_this_clip, total_length);
});
});
+ set_output_status("paused");
defer_timeout = new QTimer(this);
defer_timeout->setSingleShot(true);
{
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);
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);
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)
}
}
currently_deferring_model_changes = false;
+ return true; // Don't scroll.
} else if (event->type() == QEvent::MouseButtonRelease) {
scrubbing = false;
}
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 ¤t, const QModelIndex &)
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"};
+}