]> git.sesse.net Git - nageru/blobdiff - futatabi/mainwindow.cpp
Persist quality settings in the database.
[nageru] / futatabi / mainwindow.cpp
index 4e53590426cc38d21c348251e7ca3d7507a67f7d..852391051a287472a7eb9fd5a51d45e1dff55bbd 100644 (file)
@@ -50,6 +50,22 @@ MainWindow::MainWindow()
        global_mainwindow = this;
        ui->setupUi(this);
 
+       // Load settings from database if needed.
+       if (!global_flags.interpolation_quality_set) {
+               SettingsProto settings = db.get_settings();
+               if (settings.interpolation_quality() != 0) {
+                       global_flags.interpolation_quality = settings.interpolation_quality() - 1;
+               }
+       }
+       if (global_flags.interpolation_quality == 0) {
+               // Allocate something just for simplicity; we won't be using it
+               // unless the user changes runtime, in which case 1 is fine.
+               flow_initialized_interpolation_quality = 1;
+       } else {
+               flow_initialized_interpolation_quality = global_flags.interpolation_quality;
+       }
+       save_settings();
+
        // The menus.
        connect(ui->exit_action, &QAction::triggered, this, &MainWindow::exit_triggered);
        connect(ui->export_cliplist_clip_multitrack_action, &QAction::triggered, this, &MainWindow::export_cliplist_clip_multitrack_triggered);
@@ -61,6 +77,32 @@ MainWindow::MainWindow()
        ui->undo_action->setEnabled(false);
        ui->redo_action->setEnabled(false);
 
+       // The quality group.
+       QActionGroup *quality_group = new QActionGroup(ui->interpolation_menu);
+       quality_group->addAction(ui->quality_0_action);
+       quality_group->addAction(ui->quality_1_action);
+       quality_group->addAction(ui->quality_2_action);
+       quality_group->addAction(ui->quality_3_action);
+       quality_group->addAction(ui->quality_4_action);
+       if (global_flags.interpolation_quality == 0) {
+               ui->quality_0_action->setChecked(true);
+       } else if (global_flags.interpolation_quality == 1) {
+               ui->quality_1_action->setChecked(true);
+       } else if (global_flags.interpolation_quality == 2) {
+               ui->quality_2_action->setChecked(true);
+       } else if (global_flags.interpolation_quality == 3) {
+               ui->quality_3_action->setChecked(true);
+       } else if (global_flags.interpolation_quality == 4) {
+               ui->quality_4_action->setChecked(true);
+       } else {
+               assert(false);
+       }
+       connect(ui->quality_0_action, &QAction::toggled, bind(&MainWindow::quality_toggled, this, 0, _1));
+       connect(ui->quality_1_action, &QAction::toggled, bind(&MainWindow::quality_toggled, this, 1, _1));
+       connect(ui->quality_2_action, &QAction::toggled, bind(&MainWindow::quality_toggled, this, 2, _1));
+       connect(ui->quality_3_action, &QAction::toggled, bind(&MainWindow::quality_toggled, this, 3, _1));
+       connect(ui->quality_4_action, &QAction::toggled, bind(&MainWindow::quality_toggled, this, 4, _1));
+
        global_disk_space_estimator = new DiskSpaceEstimator(bind(&MainWindow::report_disk_space, this, _1, _2));
        disk_free_label = new QLabel(this);
        disk_free_label->setStyleSheet("QLabel {padding-right: 5px;}");
@@ -374,6 +416,13 @@ void MainWindow::state_changed(const StateProto &state)
        }
 }
 
+void MainWindow::save_settings()
+{
+       SettingsProto settings;
+       settings.set_interpolation_quality(global_flags.interpolation_quality + 1);
+       db.store_settings(settings);
+}
+
 void MainWindow::play_clicked()
 {
        if (playlist_clips->empty())
@@ -903,6 +952,25 @@ void MainWindow::redo_triggered()
        db.store_state(state);
 }
 
+void MainWindow::quality_toggled(int quality, bool checked)
+{
+       if (!checked) {
+               return;
+       }
+       global_flags.interpolation_quality = quality;
+       if (quality != 0 &&  // Turning interpolation off is always possible.
+           quality != flow_initialized_interpolation_quality) {
+               QMessageBox msgbox;
+               msgbox.setText(QString::fromStdString(
+                       "The interpolation quality for the main output cannot be changed at runtime, "
+                       "except being turned completely off; it will take effect for exported files "
+                       "only until next restart. The live output quality thus remains at " + to_string(flow_initialized_interpolation_quality) + "."));
+               msgbox.exec();
+       }
+
+       save_settings();
+}
+
 void MainWindow::highlight_camera_input(int stream_idx)
 {
        if (stream_idx == 0) {