+ restore_ui_settings();
+ if (open_file_name.empty())
+ select_init_device();
+ else
+ load_init_file(open_file_name, open_file_format);
+}
+
+QAction* MainWindow::action_open() const
+{
+ return action_open_;
+}
+
+QAction* MainWindow::action_save_as() const
+{
+ return action_save_as_;
+}
+
+QAction* MainWindow::action_connect() const
+{
+ return action_connect_;
+}
+
+QAction* MainWindow::action_quit() const
+{
+ return action_quit_;
+}
+
+QAction* MainWindow::action_view_zoom_in() const
+{
+ return action_view_zoom_in_;
+}
+
+QAction* MainWindow::action_view_zoom_out() const
+{
+ return action_view_zoom_out_;
+}
+
+QAction* MainWindow::action_view_zoom_fit() const
+{
+ return action_view_zoom_fit_;
+}
+
+QAction* MainWindow::action_view_zoom_one_to_one() const
+{
+ return action_view_zoom_one_to_one_;
+}
+
+QAction* MainWindow::action_view_show_cursors() const
+{
+ return action_view_show_cursors_;
+}
+
+QAction* MainWindow::action_about() const
+{
+ return action_about_;
+}
+
+#ifdef ENABLE_DECODE
+QMenu* MainWindow::menu_decoder_add() const
+{
+ return menu_decoders_add_;
+}
+#endif
+
+void MainWindow::run_stop()
+{
+ switch(session_.get_capture_state()) {
+ case Session::Stopped:
+ session_.start_capture([&](QString message) {
+ session_error("Capture failed", message); });
+ break;
+
+ case Session::AwaitingTrigger:
+ case Session::Running:
+ session_.stop_capture();
+ break;
+ }
+}
+
+void MainWindow::select_device(shared_ptr<devices::Device> device)
+{
+ try {
+ if (device)
+ session_.set_device(device);
+ else
+ session_.set_default_device();
+ } catch(const QString &e) {
+ QMessageBox msg(this);
+ msg.setText(e);
+ msg.setInformativeText(tr("Failed to Select Device"));
+ msg.setStandardButtons(QMessageBox::Ok);
+ msg.setIcon(QMessageBox::Warning);
+ msg.exec();
+ }
+}
+
+void MainWindow::export_file(shared_ptr<OutputFormat> format)
+{
+ using pv::dialogs::StoreProgress;
+
+ // Stop any currently running capture session
+ session_.stop_capture();
+
+ QSettings settings;
+ const QString dir = settings.value(SettingSaveDirectory).toString();
+
+ // Construct the filter
+ const vector<string> exts = format->extensions();
+ QString filter = tr("%1 files ").arg(
+ QString::fromStdString(format->description()));
+
+ if (exts.empty())
+ filter += "(*.*)";
+ else
+ filter += QString("(*.%1);;%2 (*.*)").arg(
+ QString::fromStdString(join(exts, ", *."))).arg(
+ tr("All Files"));
+
+ // Show the file dialog
+ const QString file_name = QFileDialog::getSaveFileName(
+ this, tr("Save File"), dir, filter);
+
+ if (file_name.isEmpty())
+ return;
+
+ const QString abs_path = QFileInfo(file_name).absolutePath();
+ settings.setValue(SettingSaveDirectory, abs_path);
+
+ // Show the options dialog
+ map<string, Glib::VariantBase> options;
+ if (!format->options().empty()) {
+ dialogs::InputOutputOptions dlg(
+ tr("Export %1").arg(QString::fromStdString(
+ format->description())),
+ format->options(), this);
+ if (!dlg.exec())
+ return;
+ options = dlg.options();