PulseView  0.3.0
A Qt-based sigrok GUI
flag.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2014 Joel Holdsworth <joel@airwebreathe.org.uk>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "timemarker.hpp"
22 #include "view.hpp"
23 
24 #include <QColor>
25 #include <QFormLayout>
26 #include <QLineEdit>
27 #include <QMenu>
28 
29 #include <libsigrokcxx/libsigrokcxx.hpp>
30 
31 #include <pv/widgets/popup.hpp>
32 
33 using std::shared_ptr;
34 
35 namespace pv {
36 namespace view {
37 
38 const QColor Flag::FillColour(0x73, 0xD2, 0x16);
39 
40 Flag::Flag(View &view, const pv::util::Timestamp& time, const QString &text) :
41  TimeMarker(view, FillColour, time),
42  text_(text)
43 {
44 }
45 
46 Flag::Flag(const Flag &flag) :
47  TimeMarker(flag.view_, FillColour, flag.time_),
48  std::enable_shared_from_this<pv::view::Flag>(flag)
49 {
50 }
51 
52 bool Flag::enabled() const
53 {
54  return true;
55 }
56 
57 QString Flag::get_text() const
58 {
59  return text_;
60 }
61 
63 {
64  using pv::widgets::Popup;
65 
66  Popup *const popup = TimeMarker::create_popup(parent);
67  popup->set_position(parent->mapToGlobal(
68  point(parent->rect())), Popup::Bottom);
69 
70  QFormLayout *const form = (QFormLayout*)popup->layout();
71 
72  QLineEdit *const text_edit = new QLineEdit(popup);
73  text_edit->setText(text_);
74 
75  connect(text_edit, SIGNAL(textChanged(const QString&)),
76  this, SLOT(on_text_changed(const QString&)));
77 
78  form->insertRow(0, tr("Text"), text_edit);
79 
80  return popup;
81 }
82 
83 QMenu* Flag::create_context_menu(QWidget *parent)
84 {
85  QMenu *const menu = new QMenu(parent);
86 
87  QAction *const del = new QAction(tr("Delete"), this);
88  del->setShortcuts(QKeySequence::Delete);
89  connect(del, SIGNAL(triggered()), this, SLOT(on_delete()));
90  menu->addAction(del);
91 
92  return menu;
93 }
94 
96 {
97  on_delete();
98 }
99 
101 {
102  view_.remove_flag(shared_ptr<Flag>(shared_from_this()));
103 }
104 
105 void Flag::on_text_changed(const QString &text)
106 {
107  text_ = text;
108  view_.time_item_appearance_changed(true, false);
109 }
110 
111 } // namespace view
112 } // namespace pv
QMenu * create_context_menu(QWidget *parent)
Definition: flag.cpp:83
STL namespace.
Flag(View &view, const pv::util::Timestamp &time, const QString &text)
Definition: flag.cpp:40
QString get_text() const
Definition: flag.cpp:57
virtual pv::widgets::Popup * create_popup(QWidget *parent)
Definition: timemarker.cpp:166
void time_item_appearance_changed(bool label, bool content)
Definition: view.cpp:855
void on_text_changed(const QString &text)
Definition: flag.cpp:105
pv::widgets::Popup * create_popup(QWidget *parent)
Definition: flag.cpp:62
QString text_
Definition: flag.hpp:77
bool enabled() const
Definition: flag.cpp:52
void on_delete()
Definition: flag.cpp:100
static const QColor FillColour
Definition: flag.hpp:39
QPoint point(const QRect &rect) const
Definition: timemarker.cpp:79
boost::multiprecision::number< boost::multiprecision::cpp_dec_float< 24 >, boost::multiprecision::et_off > Timestamp
Timestamp type providing yoctosecond resolution.
Definition: util.hpp:58
void remove_flag(std::shared_ptr< Flag > flag)
Definition: view.cpp:503
void delete_pressed()
Definition: flag.cpp:95