extern int64_t current_pts;
-template <class Model>
-void replace_model(QTableView *view, Model **model, Model *new_model, MainWindow *main_window)
-{
- QItemSelectionModel *old_selection_model = view->selectionModel();
- view->setModel(new_model);
- delete *model;
- delete old_selection_model;
- *model = new_model;
- main_window->connect(new_model, &Model::any_content_changed, main_window, &MainWindow::content_changed);
-}
-
MainWindow::MainWindow()
: ui(new Ui::MainWindow),
db(global_flags.working_directory + "/futatabi.db")
connect(play, &QShortcut::activated, ui->play_btn, &QPushButton::click);
connect(ui->play_btn, &QPushButton::clicked, this, &MainWindow::play_clicked);
+ connect(ui->stop_btn, &QPushButton::clicked, this, &MainWindow::stop_clicked);
+ ui->stop_btn->setEnabled(false);
+
QShortcut *preview_1 = new QShortcut(QKeySequence(Qt::Key_1), this);
connect(preview_1, &QShortcut::activated, ui->preview_1_btn, &QPushButton::click);
connect(ui->input1_display, &JPEGFrameView::clicked, ui->preview_1_btn, &QPushButton::click);
playlist_clips->set_progress({{ row, 0.0f }});
playlist_clips->set_currently_playing(row, 0.0f);
playlist_selection_changed();
+
+ ui->stop_btn->setEnabled(true);
+}
+
+void MainWindow::stop_clicked()
+{
+ Clip fake_clip;
+ fake_clip.pts_in = 0;
+ fake_clip.pts_out = 0;
+ size_t last_row = playlist_clips->size() - 1;
+ playlist_clips->set_currently_playing(last_row, 0.0f);
+ live_player->play_clip(fake_clip, last_row, 0);
}
void MainWindow::live_player_clip_done()
playlist_clips->set_progress({{ row + 1, 0.0f }});
playlist_clips->set_currently_playing(row + 1, 0.0f);
}
+ ui->stop_btn->setEnabled(false);
}
pair<Clip, size_t> MainWindow::live_player_get_next_clip()
// for Player to shut down, we could have a deadlock here.
promise<pair<Clip, size_t>> clip_promise;
future<pair<Clip, size_t>> clip = clip_promise.get_future();
- post_to_main_thread([this, &clip_promise] {
+ post_to_main_thread([&clip_promise] {
int row = playlist_clips->get_currently_playing();
if (row != -1 && row < int(playlist_clips->size()) - 1) {
clip_promise.set_value(make_pair(*playlist_clips->clip(row + 1), row + 1));
StateProto state = undo_stack.back();
ui->undo_action->setEnabled(undo_stack.size() > 1);
- replace_model(ui->clip_list, &cliplist_clips, new ClipList(state.clip_list()), this);
- replace_model(ui->playlist, &playlist_clips, new PlayList(state.play_list()), this);
+ replace_model(ui->clip_list, &cliplist_clips, new ClipList(state.clip_list()));
+ replace_model(ui->playlist, &playlist_clips, new PlayList(state.play_list()));
db.store_state(state);
}
ui->redo_action->setEnabled(!redo_stack.empty());
const StateProto &state = undo_stack.back();
- replace_model(ui->clip_list, &cliplist_clips, new ClipList(state.clip_list()), this);
- replace_model(ui->playlist, &playlist_clips, new PlayList(state.play_list()), this);
+ replace_model(ui->clip_list, &cliplist_clips, new ClipList(state.clip_list()));
+ replace_model(ui->playlist, &playlist_clips, new PlayList(state.play_list()));
db.store_state(state);
}
lock_guard<mutex> lock(queue_status_mu);
return {queue_status, "text/plain"};
}
+
+template <class Model>
+void MainWindow::replace_model(QTableView *view, Model **model, Model *new_model)
+{
+ QItemSelectionModel *old_selection_model = view->selectionModel();
+ view->setModel(new_model);
+ delete *model;
+ delete old_selection_model;
+ *model = new_model;
+ connect(new_model, &Model::any_content_changed, this, &MainWindow::content_changed);
+}