/* * This file is part of the PulseView project. * * Copyright (C) 2013 Joel Holdsworth * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include #include "importmenu.hpp" using std::find_if; using std::map; using std::pair; using std::string; using std::shared_ptr; using sigrok::Context; using sigrok::InputFormat; namespace pv { namespace widgets { ImportMenu::ImportMenu(QWidget *parent, shared_ptr context, QAction *open_action) : QMenu(parent), context_(context), mapper_(this) { assert(context); if (open_action) { addAction(open_action); setDefaultAction(open_action); addSeparator(); } const map > formats = context->input_formats(); for (const pair > &f : formats) { assert(f.second); QAction *const action = addAction(tr("Import %1...") .arg(QString::fromStdString(f.second->description()))); action->setData(qVariantFromValue((void*)f.second.get())); mapper_.setMapping(action, action); connect(action, SIGNAL(triggered()), &mapper_, SLOT(map())); } connect(&mapper_, SIGNAL(mapped(QObject*)), this, SLOT(on_action(QObject*))); } void ImportMenu::on_action(QObject *action) { assert(action); const map > formats = context_->input_formats(); const auto iter = find_if(formats.cbegin(), formats.cend(), [&](const pair > &f) { return f.second.get() == ((QAction*)action)->data().value(); }); if (iter == formats.cend()) return; format_selected((*iter).second); } } // namespace widgets } // namespace pv