From: Joel Holdsworth Date: Sat, 17 Jan 2015 17:03:56 +0000 (+0000) Subject: Added pv::widgets::ImportMenu X-Git-Tag: pulseview-0.3.0~220 X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=commitdiff_plain;h=56b6fc8877297f233dd0ffaa28d3b1af8099ebec Added pv::widgets::ImportMenu --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 80e90e9b..fdc5b69c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,6 +194,7 @@ set(pulseview_SOURCES pv/widgets/devicetoolbutton.cpp pv/widgets/exportmenu.cpp pv/widgets/hidingmenubar.cpp + pv/widgets/importmenu.cpp pv/widgets/popup.cpp pv/widgets/popuptoolbutton.cpp pv/widgets/sweeptimingwidget.cpp @@ -240,6 +241,7 @@ set(pulseview_HEADERS pv/widgets/devicetoolbutton.hpp pv/widgets/exportmenu.hpp pv/widgets/hidingmenubar.hpp + pv/widgets/importmenu.hpp pv/widgets/popup.hpp pv/widgets/popuptoolbutton.hpp pv/widgets/sweeptimingwidget.hpp diff --git a/pv/widgets/importmenu.cpp b/pv/widgets/importmenu.cpp new file mode 100644 index 00000000..72fb557c --- /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 diff --git a/pv/widgets/importmenu.hpp b/pv/widgets/importmenu.hpp new file mode 100644 index 00000000..b56631e0 --- /dev/null +++ b/pv/widgets/importmenu.hpp @@ -0,0 +1,59 @@ +/* + * This file is part of the PulseView project. + * + * Copyright (C) 2015 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 + */ + +#ifndef PULSEVIEW_PV_WIDGETS_IMPORTMENU_HPP +#define PULSEVIEW_PV_WIDGETS_IMPORTMENU_HPP + +#include + +#include +#include + +namespace sigrok { +class Context; +class InputFormat; +} + +namespace pv { +namespace widgets { + +class ImportMenu : public QMenu +{ + Q_OBJECT; + +public: + ImportMenu(QWidget *parent, std::shared_ptr context, + QAction *open_action = nullptr); + +private Q_SLOTS: + void on_action(QObject *action); + +Q_SIGNALS: + void format_selected(std::shared_ptr format); + +private: + std::shared_ptr context_; + QSignalMapper mapper_; +}; + +} // widgets +} // pv + +#endif // PULSEVIEW_PV_WIDGETS_IMPORTMENU_HPP