X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fwidgets%2Fimportmenu.cpp;fp=pv%2Fwidgets%2Fimportmenu.cpp;h=72fb557c1f56e1b2262d3ae510763eb9f42f7f0c;hp=0000000000000000000000000000000000000000;hb=56b6fc8877297f233dd0ffaa28d3b1af8099ebec;hpb=5d2aa2c724cd7b6693c7956d4f1c7f0f856dcc27 diff --git a/pv/widgets/importmenu.cpp b/pv/widgets/importmenu.cpp new file mode 100644 index 0000000..72fb557 --- /dev/null +++ b/pv/widgets/importmenu.cpp @@ -0,0 +1,89 @@ +/* + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#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); +} + +} // widgets +} // pv