#include <extdef.h>
+#include <boost/foreach.hpp>
+
#include <QAction>
+#include <QMenu>
#include "decodesignal.h"
QColor(0x72, 0x9F, 0xCF) // Blue
};
+const QColor DecodeSignal::ErrorBgColour = QColor(0xEF, 0x29, 0x29);
+
DecodeSignal::DecodeSignal(pv::SigSession &session,
boost::shared_ptr<pv::data::Decoder> decoder, int index) :
Trace(session, QString(decoder->get_decoder()->name)),
this, SLOT(on_new_decode_data()));
}
-void DecodeSignal::init_context_bar_actions(QWidget *parent)
+bool DecodeSignal::enabled() const
{
- (void)parent;
+ return true;
}
-bool DecodeSignal::enabled() const
+const boost::shared_ptr<pv::data::Decoder>& DecodeSignal::decoder() const
{
- return true;
+ return _decoder;
}
void DecodeSignal::set_view(pv::view::View *view)
{
using namespace pv::view::decode;
+ assert(_decoder);
+ const QString err = _decoder->error_message();
+ if (!err.isEmpty()) {
+ draw_error(p, err, left, right);
+ return;
+ }
+
assert(_view);
const int y = get_y();
}
}
-const list<QAction*> DecodeSignal::get_context_bar_actions()
-{
- list<QAction*> actions;
- return actions;
-}
-
QMenu* DecodeSignal::create_context_menu(QWidget *parent)
{
QMenu *const menu = Trace::create_context_menu(parent);
menu->addSeparator();
QAction *const del = new QAction(tr("Delete"), this);
+ del->setShortcuts(QKeySequence::Delete);
connect(del, SIGNAL(triggered()), this, SLOT(on_delete()));
menu->addAction(del);
return menu;
}
+void DecodeSignal::draw_error(QPainter &p, const QString &message,
+ int left, int right)
+{
+ const int y = get_y();
+
+ p.setPen(ErrorBgColour.darker());
+ p.setBrush(ErrorBgColour);
+
+ const QRectF bounding_rect =
+ QRectF(left, INT_MIN / 2 + y, right - left, INT_MAX);
+ const QRectF text_rect = p.boundingRect(bounding_rect,
+ Qt::AlignCenter, message);
+ const float r = text_rect.height() / 4;
+
+ p.drawRoundedRect(text_rect.adjusted(-r, -r, r, r), r, r,
+ Qt::AbsoluteSize);
+
+ p.setPen(get_text_colour());
+ p.drawText(text_rect, message);
+}
+
void DecodeSignal::on_new_decode_data()
{
if (_view)
_view->update_viewport();
}
+void DecodeSignal::delete_pressed()
+{
+ on_delete();
+}
+
void DecodeSignal::on_delete()
{
_session.remove_decode_signal(this);