mirror of git://sigrok.org/pulseview
Added show/hide decoder button
This commit is contained in:
parent
2f640555f0
commit
dd048a7ec0
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="22"
|
||||
height="22"
|
||||
id="svg2989">
|
||||
<defs
|
||||
id="defs2991" />
|
||||
<metadata
|
||||
id="metadata2994">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
d="m 19.426489,11.070664 a 11,11 0 0 1 -16.8529782,-1e-6"
|
||||
transform="matrix(1.1867339,0,0,1.1867339,-2.0540724,-2.1379314)"
|
||||
id="path3053"
|
||||
style="fill:none;stroke:#000000;stroke-width:1.26397336" />
|
||||
</svg>
|
After Width: | Height: | Size: 970 B |
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="22"
|
||||
height="22"
|
||||
id="svg2989">
|
||||
<defs
|
||||
id="defs2991" />
|
||||
<metadata
|
||||
id="metadata2994">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
d="M 13.390812,-9.3707772 A 5.87888,5.87888 0 0 1 14.476134,0.74106762"
|
||||
transform="matrix(0.89442417,0,0,0.89442417,1.1613345,14.644558)"
|
||||
id="path2989"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
<path
|
||||
d="m 12,-4 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z"
|
||||
transform="matrix(1.3065319,0,0,1.3065319,-3.3718505,16.219638)"
|
||||
id="path2995"
|
||||
style="fill:#000000;stroke:none" />
|
||||
<path
|
||||
d="M 10.875,6.34375 C 7.9493854,6.36765 5.0099958,7.3787791 2.59375,9.40625 2.0116039,9.8947285 1.4884785,10.417854 1,11 1.4884785,11.582146 2.0116039,12.105271 2.59375,12.59375 8.1165975,17.227969 16.365781,16.522848 21,11 18.393252,7.8933983 14.636505,6.3130214 10.875,6.34375 z"
|
||||
id="path3053"
|
||||
style="fill:none;stroke:#000000;stroke-width:1.5" />
|
||||
<path
|
||||
d="M 7.5357022,0.74972325 A 5.87888,5.87888 0 0 1 8.1948438,-9.1664619"
|
||||
transform="matrix(0.89442417,0,0,0.89442417,1.1613345,14.644558)"
|
||||
id="path3057"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
|
@ -33,7 +33,8 @@ namespace data {
|
|||
namespace decode {
|
||||
|
||||
Decoder::Decoder(const srd_decoder *const dec) :
|
||||
_decoder(dec)
|
||||
_decoder(dec),
|
||||
_shown(true)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -49,6 +50,16 @@ const srd_decoder* Decoder::decoder() const
|
|||
return _decoder;
|
||||
}
|
||||
|
||||
bool Decoder::shown() const
|
||||
{
|
||||
return _shown;
|
||||
}
|
||||
|
||||
void Decoder::show(bool show)
|
||||
{
|
||||
_shown = show;
|
||||
}
|
||||
|
||||
const map<const srd_probe*, shared_ptr<view::LogicSignal> >&
|
||||
Decoder::probes() const
|
||||
{
|
||||
|
|
|
@ -50,6 +50,9 @@ public:
|
|||
|
||||
const srd_decoder* decoder() const;
|
||||
|
||||
bool shown() const;
|
||||
void show(bool show = true);
|
||||
|
||||
const std::map<const srd_probe*,
|
||||
boost::shared_ptr<view::LogicSignal> >& probes() const;
|
||||
void set_probes(std::map<const srd_probe*,
|
||||
|
@ -64,6 +67,9 @@ public:
|
|||
|
||||
private:
|
||||
const srd_decoder *const _decoder;
|
||||
|
||||
bool _shown;
|
||||
|
||||
std::map<const srd_probe*, boost::shared_ptr<pv::view::LogicSignal> >
|
||||
_probes;
|
||||
std::map<std::string, GVariant*> _options;
|
||||
|
|
|
@ -103,7 +103,7 @@ int64_t DecoderStack::samples_decoded() const
|
|||
return _samples_decoded;
|
||||
}
|
||||
|
||||
std::vector<Row> DecoderStack::get_rows() const
|
||||
std::vector<Row> DecoderStack::get_visible_rows() const
|
||||
{
|
||||
lock_guard<mutex> lock(_mutex);
|
||||
|
||||
|
@ -112,6 +112,9 @@ std::vector<Row> DecoderStack::get_rows() const
|
|||
BOOST_FOREACH (const shared_ptr<decode::Decoder> &dec, _stack)
|
||||
{
|
||||
assert(dec);
|
||||
if (!dec->shown())
|
||||
continue;
|
||||
|
||||
const srd_decoder *const decc = dec->decoder();
|
||||
assert(dec->decoder());
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ public:
|
|||
|
||||
int64_t samples_decoded() const;
|
||||
|
||||
std::vector<decode::Row> get_rows() const;
|
||||
std::vector<decode::Row> get_visible_rows() const;
|
||||
|
||||
/**
|
||||
* Extracts sorted annotations between two period into a vector.
|
||||
|
|
|
@ -86,7 +86,8 @@ DecodeTrace::DecodeTrace(pv::SigSession &session,
|
|||
Trace(session, QString::fromUtf8(
|
||||
decoder_stack->stack().front()->decoder()->name)),
|
||||
_decoder_stack(decoder_stack),
|
||||
_delete_mapper(this)
|
||||
_delete_mapper(this),
|
||||
_show_hide_mapper(this)
|
||||
{
|
||||
assert(_decoder_stack);
|
||||
|
||||
|
@ -96,6 +97,8 @@ DecodeTrace::DecodeTrace(pv::SigSession &session,
|
|||
this, SLOT(on_new_decode_data()));
|
||||
connect(&_delete_mapper, SIGNAL(mapped(int)),
|
||||
this, SLOT(on_delete_decoder(int)));
|
||||
connect(&_show_hide_mapper, SIGNAL(mapped(int)),
|
||||
this, SLOT(on_show_hide_decoder(int)));
|
||||
}
|
||||
|
||||
bool DecodeTrace::enabled() const
|
||||
|
@ -163,7 +166,7 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right)
|
|||
|
||||
assert(_decoder_stack);
|
||||
|
||||
const vector<Row> rows(_decoder_stack->get_rows());
|
||||
const vector<Row> rows(_decoder_stack->get_visible_rows());
|
||||
for (size_t i = 0; i < rows.size(); i++)
|
||||
{
|
||||
const Row &row = rows[i];
|
||||
|
@ -198,6 +201,7 @@ void DecodeTrace::populate_popup_form(QWidget *parent, QFormLayout *form)
|
|||
// Add the decoder options
|
||||
_bindings.clear();
|
||||
_probe_selectors.clear();
|
||||
_decoder_forms.clear();
|
||||
|
||||
const list< shared_ptr<Decoder> >& stack = _decoder_stack->stack();
|
||||
|
||||
|
@ -432,10 +436,15 @@ void DecodeTrace::create_decoder_form(int index,
|
|||
pv::widgets::DecoderGroupBox *const group =
|
||||
new pv::widgets::DecoderGroupBox(
|
||||
QString::fromUtf8(decoder->name));
|
||||
group->set_decoder_visible(dec->shown());
|
||||
|
||||
_delete_mapper.setMapping(group, index);
|
||||
connect(group, SIGNAL(delete_decoder()), &_delete_mapper, SLOT(map()));
|
||||
|
||||
_show_hide_mapper.setMapping(group, index);
|
||||
connect(group, SIGNAL(show_hide_decoder()),
|
||||
&_show_hide_mapper, SLOT(map()));
|
||||
|
||||
QFormLayout *const decoder_form = new QFormLayout;
|
||||
group->add_layout(decoder_form);
|
||||
|
||||
|
@ -475,6 +484,7 @@ void DecodeTrace::create_decoder_form(int index,
|
|||
_bindings.push_back(binding);
|
||||
|
||||
form->addRow(group);
|
||||
_decoder_forms.push_back(group);
|
||||
}
|
||||
|
||||
QComboBox* DecodeTrace::create_probe_selector(
|
||||
|
@ -592,5 +602,28 @@ void DecodeTrace::on_delete_decoder(int index)
|
|||
_decoder_stack->begin_decode();
|
||||
}
|
||||
|
||||
void DecodeTrace::on_show_hide_decoder(int index)
|
||||
{
|
||||
using pv::data::decode::Decoder;
|
||||
|
||||
const list< shared_ptr<Decoder> > stack(_decoder_stack->stack());
|
||||
|
||||
// Find the decoder in the stack
|
||||
list< shared_ptr<Decoder> >::const_iterator iter = stack.begin();
|
||||
for(int i = 0; i < index; i++, iter++)
|
||||
assert(iter != stack.end());
|
||||
|
||||
shared_ptr<Decoder> dec = *iter;
|
||||
assert(dec);
|
||||
|
||||
const bool show = !dec->shown();
|
||||
dec->show(show);
|
||||
|
||||
assert(index < (int)_decoder_forms.size());
|
||||
_decoder_forms[index]->set_decoder_visible(show);
|
||||
|
||||
_view->update_viewport();
|
||||
}
|
||||
|
||||
} // namespace view
|
||||
} // namespace pv
|
||||
|
|
|
@ -48,6 +48,10 @@ class Decoder;
|
|||
}
|
||||
}
|
||||
|
||||
namespace widgets {
|
||||
class DecoderGroupBox;
|
||||
}
|
||||
|
||||
namespace view {
|
||||
|
||||
class DecodeTrace : public Trace
|
||||
|
@ -149,6 +153,8 @@ private slots:
|
|||
|
||||
void on_delete_decoder(int index);
|
||||
|
||||
void on_show_hide_decoder(int index);
|
||||
|
||||
private:
|
||||
boost::shared_ptr<pv::data::DecoderStack> _decoder_stack;
|
||||
|
||||
|
@ -158,8 +164,9 @@ private:
|
|||
_bindings;
|
||||
|
||||
std::list<ProbeSelector> _probe_selectors;
|
||||
std::vector<pv::widgets::DecoderGroupBox*> _decoder_forms;
|
||||
|
||||
QSignalMapper _delete_mapper;
|
||||
QSignalMapper _delete_mapper, _show_hide_mapper;
|
||||
};
|
||||
|
||||
} // namespace view
|
||||
|
|
|
@ -32,7 +32,8 @@ namespace widgets {
|
|||
|
||||
DecoderGroupBox::DecoderGroupBox(QString title, QWidget *parent) :
|
||||
QWidget(parent),
|
||||
_layout(new QGridLayout)
|
||||
_layout(new QGridLayout),
|
||||
_show_hide_button(QIcon(":/icons/decoder-shown.svg"), QString(), this)
|
||||
{
|
||||
_layout->setContentsMargins(0, 0, 0, 0);
|
||||
setLayout(_layout);
|
||||
|
@ -44,6 +45,12 @@ DecoderGroupBox::DecoderGroupBox(QString title, QWidget *parent) :
|
|||
QHBoxLayout *const toolbar = new QHBoxLayout;
|
||||
_layout->addLayout(toolbar, 0, 1);
|
||||
|
||||
_show_hide_button.setFlat(true);
|
||||
_show_hide_button.setIconSize(QSize(16, 16));
|
||||
connect(&_show_hide_button, SIGNAL(clicked()),
|
||||
this, SIGNAL(show_hide_decoder()));
|
||||
toolbar->addWidget(&_show_hide_button);
|
||||
|
||||
QPushButton *const delete_button = new QPushButton(
|
||||
QIcon(":/icons/decoder-delete.svg"), QString(), this);
|
||||
delete_button->setFlat(true);
|
||||
|
@ -59,5 +66,12 @@ void DecoderGroupBox::add_layout(QLayout *layout)
|
|||
_layout->addLayout(layout, 1, 0, 1, 2);
|
||||
}
|
||||
|
||||
void DecoderGroupBox::set_decoder_visible(bool visible)
|
||||
{
|
||||
_show_hide_button.setIcon(QIcon(visible ?
|
||||
":/icons/decoder-shown.svg" :
|
||||
":/icons/decoder-hidden.svg"));
|
||||
}
|
||||
|
||||
} // widgets
|
||||
} // pv
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#ifndef PULSEVIEW_PV_WIDGETS_DECODERGROUPBox_H
|
||||
#define PULSEVIEW_PV_WIDGETS_DECODERGROUPBOX_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPushButton>
|
||||
|
||||
class QGridLayout;
|
||||
class QToolBar;
|
||||
|
@ -38,11 +38,16 @@ public:
|
|||
|
||||
void add_layout(QLayout *layout);
|
||||
|
||||
void set_decoder_visible(bool visible);
|
||||
|
||||
signals:
|
||||
void delete_decoder();
|
||||
|
||||
void show_hide_decoder();
|
||||
|
||||
private:
|
||||
QGridLayout *const _layout;
|
||||
QPushButton _show_hide_button;
|
||||
};
|
||||
|
||||
} // widgets
|
||||
|
|
Loading…
Reference in New Issue