22 #include <QApplication> 28 #include <QMouseEvent> 48 #define POSITION_WIDGET_TIME 5000 58 m_signal_manager(signal_manager),
59 m_preferred_location(preferred_location),
64 m_mouse_mode(MouseNormal),
67 m_position_widget(this),
68 m_position_widget_timer(this),
70 m_selected_item(Q_NULLPTR)
76 setMouseTracking(
true);
78 setFocusPolicy(Qt::StrongFocus);
85 setCursor(Qt::ArrowCursor);
90 QMutableListIterator<QPointer<QWidget> > it(
m_siblings);
92 while (it.hasPrevious()) {
93 QWidget *widget = it.previous();
95 if (widget)
delete widget;
157 if ((pixels <= 0) || (
m_zoom <= 0.0))
return 0;
168 if (rate == 0.0)
return 0.0;
169 return static_cast<double>(samples) * 1E3 / rate;
185 Q_ASSERT(first <= last);
188 double d_left = (p > first) ? (p - first) : (first - p);
189 double d_right = (p > last) ? (p - last) : (last - p);
192 Kwave::SignalView::SelectionPos pos =
None;
193 if ((d_left <= tol) && (p < last)) pos |=
LeftBorder;
194 if ((d_right <= tol) && (p > first)) pos |=
RightBorder;
195 if ((p >= first) && (p <= last)) pos |=
Selection;
199 if (d_left < d_right)
218 return QSharedPointer<Kwave::ViewItem>(Q_NULLPTR);
226 Q_ASSERT(this->thread() == QThread::currentThread());
227 Q_ASSERT(this->thread() == qApp->thread());
233 if (((x < 0) && (y < 0)) || !text.length()) {
239 setUpdatesEnabled(
false);
268 }
else if (y + lh/2 > height()) {
283 setUpdatesEnabled(
true);
302 setCursor(active ? Qt::ClosedHandCursor : Qt::ArrowCursor);
306 setCursor(Qt::ArrowCursor);
313 setCursor(Qt::ArrowCursor);
333 const QPoint mouse_pos(
334 qBound(0, mapFromGlobal(e->globalPos()).x(), width() - 1),
335 qBound(0, mapFromGlobal(e->globalPos()).y(), height() - 1)
339 static QPoint last_pos = QPoint(-1, -1);
340 if (mouse_pos == last_pos) {
355 bool hide_position =
true;
358 const int dmin = QApplication::startDragDistance();
359 if ((e->buttons() & Qt::LeftButton) &&
376 hide_position =
false;
409 const QPoint mouse_pos(
410 qBound(0, mapFromGlobal(e->globalPos()).x(), width() - 1),
411 qBound(0, mapFromGlobal(e->globalPos()).y(), height() - 1)
416 if (e->button() == Qt::LeftButton) {
421 switch (e->modifiers()) {
422 case Qt::ShiftModifier: {
435 case Qt::NoModifier: {
445 setCursor(Qt::DragMoveCursor);
483 const QPoint mouse_pos(
484 qBound(0, mapFromGlobal(e->globalPos()).x(), width() - 1),
485 qBound(0, mapFromGlobal(e->globalPos()).y(), height() - 1)
521 setCursor(Qt::ArrowCursor);
523 QWidget::leaveEvent(e);
530 if (e->matches(QKeySequence::Cancel)) {
533 setCursor(Qt::ArrowCursor);
536 QWidget::keyPressEvent(e);
544 return (2 * QApplication::startDragDistance());
558 if ((event->proposedAction() != Qt::MoveAction) &&
559 (event->proposedAction() != Qt::CopyAction))
563 event->acceptProposedAction();
572 setCursor(Qt::ArrowCursor);
580 const QMimeData *mime_data =
event->mimeData();
581 if (!mime_data)
return;
587 i18n(
"Drag and Drop"));
596 event->acceptProposedAction();
598 QStringList formats = mime_data->formats();
599 qWarning(
"SignalView::dropEvent(%s): failed !",
600 DBG(formats.join(
_(
"; "))));
602 }
else if (mime_data->hasUrls()) {
604 foreach (
const QUrl &url, mime_data->urls()) {
605 QString filename = url.toLocalFile();
614 event->acceptProposedAction();
625 qDebug(
"SignalView::dropEvent(): done");
627 setCursor(Qt::ArrowCursor);
630 if (!event->isAccepted()) event->ignore();
637 const int x =
event->pos().x();
669 event->acceptProposedAction();
687 :QWidget(parent), m_label(Q_NULLPTR), m_alignment(Q_NULLPTR),
688 m_radius(10), m_arrow_length(30), m_last_alignment(Qt::AlignHCenter),
689 m_last_size(QSize(0,0)), m_polygon()
697 m_label->setFrameStyle(QFrame::Panel | QFrame::Plain);
698 m_label->setPalette(QToolTip::palette());
699 m_label->setFocusPolicy(Qt::NoFocus);
700 m_label->setMouseTracking(
true);
703 setPalette(QToolTip::palette());
704 setMouseTracking(
false);
705 setFocusPolicy(Qt::NoFocus);
706 setAttribute(Qt::WA_TransparentForMouseEvents);
718 Qt::Alignment alignment)
739 case Qt::AlignHCenter:
760 bmp.fill(Qt::color0);
763 QBrush brush(Qt::color1);
765 p.setPen(Qt::color1);
767 const int h = height();
768 const int w = width();
796 case Qt::AlignHCenter:
void sigCommand(const QString &command)
void selectRange(sample_index_t offset, sample_index_t length)
SignalView(QWidget *parent, QWidget *controls, Kwave::SignalManager *signal_manager, Location preferred_location, int track=-1)
sample_index_t first() const
static sample_index_t decode(QWidget *widget, const QMimeData *e, Kwave::SignalManager &sig, sample_index_t pos)
void set(sample_index_t l, sample_index_t r)
virtual int selectionTolerance() const
virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE
sample_index_t last() const
virtual void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE
virtual ~SignalView() Q_DECL_OVERRIDE
PositionWidget m_position_widget
QList< QPointer< QWidget > > m_siblings
QTimer m_position_widget_timer
virtual void addSibling(QWidget *widget)
Kwave::Selection & selection()
void grep(sample_index_t x)
Kwave::PlaybackController & playbackController()
sample_index_t offset() const
static bool canDecode(const QMimeData *data)
static QString mimeTypeOf(const QUrl &url)
virtual void setVerticalZoom(double zoom)
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
QSharedPointer< Kwave::ViewItem > m_selected_item
double samples2ms(sample_index_t samples)
enum Kwave::SignalView::@0 m_mouse_mode
virtual bool canHandleSelection() const
static const char * background[]
SelectionPos selectionPosition(int x)
virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE
bool isInSelection(int x)
virtual void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE
virtual void setTrack(int track)
virtual QSharedPointer< Kwave::ViewItem > findItem(const QPoint &pos)
virtual void hidePosition()
sample_index_t pixels2samples(int pixels) const
Kwave::SignalManager * m_signal_manager
Kwave::MouseMark m_mouse_selection
sample_index_t length() const
static bool canDecode(const QMimeData *source)
void findNewItem(const QPoint &mouse_pos, bool active)
virtual void handleContextMenu(const QPoint &pos, QMenu *menu)
#define POSITION_WIDGET_TIME
virtual void setZoomAndOffset(double zoom, sample_index_t offset)
virtual void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE
static QString escape(const QString &text)
void sigCursorChanged(sample_index_t pos)
virtual void showCursor(sample_index_t pos=SAMPLE_INDEX_MAX)
virtual void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE
static bool canDecode(const QString &mimetype_name)
virtual void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE
virtual void leaveEvent(QEvent *e) Q_DECL_OVERRIDE
static double rect(double param)
virtual void showPosition(const QString &text, sample_index_t pos, const QPoint &mouse)
sample_index_t left() const
int samples2pixels(sample_index_t samples) const
virtual void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE