+
+ bool ui_enabled = (state == pv::Session::Stopped) ? true : false;
+
+ device_selector_.setEnabled(ui_enabled);
+ configure_button_.setEnabled(ui_enabled);
+ channels_button_.setEnabled(ui_enabled);
+ sample_count_.setEnabled(ui_enabled);
+ sample_rate_.setEnabled(ui_enabled);
+}
+
+void MainBar::reset_device_selector()
+{
+ device_selector_.reset();
+}
+
+void MainBar::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 MainBar::load_init_file(const std::string &file_name,
+ const std::string &format)
+{
+ shared_ptr<InputFormat> input_format;
+
+ DeviceManager& device_manager = session_.device_manager();
+
+ if (!format.empty()) {
+ const map<string, shared_ptr<InputFormat> > formats =
+ device_manager.context()->input_formats();
+ const auto iter = find_if(formats.begin(), formats.end(),
+ [&](const pair<string, shared_ptr<InputFormat> > f) {
+ return f.first == format; });
+ if (iter == formats.end()) {
+ cerr << "Unexpected input format: " << format << endl;
+ return;
+ }
+
+ input_format = (*iter).second;
+ }
+
+ load_file(QString::fromStdString(file_name), input_format);
+}
+
+QAction* MainBar::action_open() const
+{
+ return action_open_;
+}
+
+QAction* MainBar::action_save_as() const
+{
+ return action_save_as_;
+}
+
+QAction* MainBar::action_save_selection_as() const
+{
+ return action_save_selection_as_;
+}
+
+QAction* MainBar::action_connect() const
+{
+ return action_connect_;
+}
+
+QAction* MainBar::action_view_zoom_in() const
+{
+ return action_view_zoom_in_;
+}
+
+QAction* MainBar::action_view_zoom_out() const
+{
+ return action_view_zoom_out_;
+}
+
+QAction* MainBar::action_view_zoom_fit() const
+{
+ return action_view_zoom_fit_;
+}
+
+QAction* MainBar::action_view_zoom_one_to_one() const
+{
+ return action_view_zoom_one_to_one_;
+}
+
+QAction* MainBar::action_view_show_cursors() const
+{
+ return action_view_show_cursors_;
+}
+
+void MainBar::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 MainBar::load_file(QString file_name,
+ std::shared_ptr<sigrok::InputFormat> format,
+ const std::map<std::string, Glib::VariantBase> &options)
+{
+ DeviceManager& device_manager = session_.device_manager();
+
+ const QString errorMessage(
+ QString("Failed to load file %1").arg(file_name));
+
+ try {
+ if (format)
+ session_.set_device(shared_ptr<devices::Device>(
+ new devices::InputFile(
+ device_manager.context(),
+ file_name.toStdString(),
+ format, options)));
+ else
+ session_.set_device(shared_ptr<devices::Device>(
+ new devices::SessionFile(
+ device_manager.context(),
+ file_name.toStdString())));
+ } catch (Error e) {
+ show_session_error(tr("Failed to load ") + file_name, e.what());
+ session_.set_default_device();
+ update_device_list();
+ return;
+ }
+
+ session_.set_name(QFileInfo(file_name).fileName());
+
+ update_device_list();
+
+ session_.start_capture([&, errorMessage](QString infoMessage) {
+ session_error(errorMessage, infoMessage); });