/*
- * This file is part of the sigrok project.
+ * This file is part of the PulseView project.
*
* Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>
*
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef PV_VIEW_HEADER_H
-#define PV_VIEW_HEADER_H
+#ifndef PULSEVIEW_PV_VIEW_HEADER_H
+#define PULSEVIEW_PV_VIEW_HEADER_H
-#include <QWidget>
+#include <list>
+#include <memory>
+#include <utility>
+
+#include "marginwidget.h"
namespace pv {
namespace view {
+class RowItem;
class View;
-class Header : public QWidget
+class Header : public MarginWidget
{
Q_OBJECT
+private:
+ static const int Padding;
+
public:
Header(View &parent);
+ QSize sizeHint() const;
+
+ /**
+ * The horizontal offset, relative to the left edge of the widget,
+ * where the arrows of the trace labels end.
+ */
+ static const int BaselineOffset;
+
+ void signals_updated();
+
+private:
+ std::shared_ptr<pv::view::RowItem> get_mouse_over_row_item(
+ const QPoint &pt);
+
+ void clear_selection();
+
+ void show_popup(const std::shared_ptr<RowItem> &item);
+
private:
void paintEvent(QPaintEvent *event);
private:
- View &_view;
+ void mouseLeftPressEvent(QMouseEvent *event);
+ void mousePressEvent(QMouseEvent * event);
+
+ void mouseLeftReleaseEvent(QMouseEvent *event);
+ void mouseReleaseEvent(QMouseEvent *event);
+
+ void mouseMoveEvent(QMouseEvent *event);
+
+ void leaveEvent(QEvent *event);
+
+ void contextMenuEvent(QContextMenuEvent *event);
+
+ void keyPressEvent(QKeyEvent *e);
+
+private Q_SLOTS:
+ void on_signals_moved();
+
+ void on_trace_changed();
+
+Q_SIGNALS:
+ void signals_moved();
+
+private:
+ QPoint _mouse_point;
+ QPoint _mouse_down_point;
+ std::shared_ptr<RowItem> _mouse_down_item;
+ bool _dragging;
};
} // namespace view
} // namespace pv
-#endif // PV_VIEW_HEADER_H
+#endif // PULSEVIEW_PV_VIEW_HEADER_H