#include <getopt.h>
#include <vector>
+#ifdef ENABLE_FLOW
+#include <gstreamermm.h>
+#include <libsigrokflow/libsigrokflow.hpp>
+#endif
+
#include <libsigrokcxx/libsigrokcxx.hpp>
#include <QCheckBox>
#include "pv/mainwindow.hpp"
#include "pv/session.hpp"
#include "pv/util.hpp"
+#include "pv/data/segment.hpp"
#ifdef ANDROID
#include <libsigrokandroidutils/libsigrokandroidutils.h>
#ifdef _WIN32
#include <QtPlugin>
+#ifdef QT_STATIC
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
Q_IMPORT_PLUGIN(QSvgPlugin)
#endif
+#endif
using std::exception;
using std::ifstream;
" -d, --driver Specify the device driver to use\n"
" -D, --dont-scan Don't auto-scan for devices, use -d spec only\n"
" -i, --input-file Load input from file\n"
+ " -s, --settings Load PulseView session setup from file\n"
" -I, --input-format Input format\n"
" -c, --clean Don't restore previous sessions on startup\n"
"\n", PV_BIN_NAME);
{
int ret = 0;
shared_ptr<sigrok::Context> context;
- string open_file_format, driver;
+ string open_file_format, open_setup_file, driver;
vector<string> open_files;
bool restore_sessions = true;
bool do_scan = true;
bool show_version = false;
+#ifdef ENABLE_FLOW
+ // Initialise gstreamermm. Must be called before any other GLib stuff.
+ Gst::init();
+
+ // Initialize libsigrokflow. Must be called after Gst::init().
+ Srf::init();
+#endif
+
Application a(argc, argv);
#ifdef ANDROID
{"driver", required_argument, nullptr, 'd'},
{"dont-scan", no_argument, nullptr, 'D'},
{"input-file", required_argument, nullptr, 'i'},
+ {"settings", required_argument, nullptr, 's'},
{"input-format", required_argument, nullptr, 'I'},
{"clean", no_argument, nullptr, 'c'},
{"log-to-stdout", no_argument, nullptr, 's'},
};
const int c = getopt_long(argc, argv,
- "h?VDcl:d:i:I:", long_options, nullptr);
+ "h?VDcl:d:i:s:I:", long_options, nullptr);
if (c == -1)
break;
open_files.emplace_back(optarg);
break;
+ case 's':
+ open_setup_file = optarg;
+ break;
+
case 'I':
open_file_format = optarg;
break;
for (int i = 0; i < argc; i++)
open_files.emplace_back(argv[i]);
- qRegisterMetaType<pv::util::Timestamp>("util::Timestamp");
qRegisterMetaType<uint64_t>("uint64_t");
+ qRegisterMetaType<pv::util::Timestamp>("util::Timestamp");
+ qRegisterMetaType<SharedPtrToSegment>("SharedPtrToSegment");
+ qRegisterMetaType<shared_ptr<pv::data::SignalBase>>("shared_ptr<SignalBase>");
// Prepare the global settings since logging needs them early on
pv::GlobalSettings settings;
+ settings.add_change_handler(&a); // Only the application object can't register itself
settings.save_internal_defaults();
settings.set_defaults_where_needed();
+ settings.apply_language();
settings.apply_theme();
pv::logging.init();
w.add_default_session();
else
for (string& open_file : open_files)
- w.add_session_with_file(open_file, open_file_format);
+ w.add_session_with_file(open_file, open_file_format, open_setup_file);
#ifdef ENABLE_SIGNALS
if (SignalHandler::prepare_signals()) {
SignalHandler *const handler = new SignalHandler(&w);
- QObject::connect(handler, SIGNAL(int_received()),
- &w, SLOT(close()));
- QObject::connect(handler, SIGNAL(term_received()),
- &w, SLOT(close()));
+ QObject::connect(handler, SIGNAL(int_received()), &w, SLOT(close()));
+ QObject::connect(handler, SIGNAL(term_received()), &w, SLOT(close()));
+ QObject::connect(handler, SIGNAL(usr1_received()), &w, SLOT(on_run_stop_clicked()));
} else
qWarning() << "Could not prepare signal handler.";
#endif