kwave  18.07.70
SignalView.h
Go to the documentation of this file.
1 /***************************************************************************
2  SignalView.h - base class for widgets for views to a signal
3  -------------------
4  begin : Mon Jan 18 2010
5  copyright : (C) 2010 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef SIGNAL_VIEW_H
19 #define SIGNAL_VIEW_H
20 
21 #include "config.h"
22 
23 #include <QtGlobal>
24 #include <QLabel>
25 #include <QList>
26 #include <QObject>
27 #include <QPointer>
28 #include <QPolygon>
29 #include <QSharedPointer>
30 #include <QSize>
31 #include <QString>
32 #include <QTimer>
33 #include <QWidget>
34 
35 #include "libkwave/Sample.h"
36 
37 #include "libgui/MouseMark.h"
38 #include "libgui/ViewItem.h"
39 
40 class QEvent;
41 class QMouseEvent;
42 class QPaintEvent;
43 class QPoint;
44 
45 namespace Kwave
46 {
47 
48  class SignalManager; // forward declaration
49 
50  class Q_DECL_EXPORT SignalView: public QWidget
51  {
52  Q_OBJECT
53  public:
54 
56  typedef enum {
59  Top,
66  LowerDockBottom
67  } Location;
68 
78  SignalView(QWidget *parent, QWidget *controls,
79  Kwave::SignalManager *signal_manager,
80  Location preferred_location,
81  int track = -1);
82 
84  virtual ~SignalView() Q_DECL_OVERRIDE;
85 
92  virtual void refresh();
93 
95  Location preferredLocation() const {
96  return m_preferred_location;
97  }
98 
101  return m_signal_manager;
102  }
103 
105  inline int track() const {
106  return m_track_index;
107  }
108 
110  inline sample_index_t offset() const {
111  return m_offset;
112  }
113 
115  inline double zoom() const {
116  return m_zoom;
117  }
118 
120  inline double verticalZoom() const {
121  return m_vertical_zoom;
122  }
123 
125  inline sample_index_t firstVisible() const {
126  return m_offset;
127  }
128 
130  inline sample_index_t lastVisible() const {
131  const sample_index_t w = pixels2samples(width());
132  return m_offset + ((w) ? (w - 1) : 0);
133  }
134 
141  int samples2pixels(sample_index_t samples) const;
142 
149  sample_index_t pixels2samples(int pixels) const;
150 
157  double samples2ms(sample_index_t samples);
158 
164  virtual bool canHandleSelection() const { return false; }
165 
174  virtual QSharedPointer<Kwave::ViewItem> findItem(const QPoint &pos);
175 
177  virtual void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
178 
180  virtual void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
181 
183  virtual void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
184 
186  virtual void leaveEvent(QEvent *e) Q_DECL_OVERRIDE;
187 
189  virtual void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
190 
195  virtual int selectionTolerance() const;
196 
202  virtual void handleContextMenu(const QPoint &pos, QMenu *menu);
203 
208  virtual void addSibling(QWidget *widget);
209 
210  signals:
211 
213  void contentSizeChanged();
214 
216  void sigCursorChanged(sample_index_t pos);
217 
224  void sigNeedRepaint(Kwave::SignalView *view);
225 
227  void sigCommand(const QString &command);
228 
229  public slots:
230 
235  virtual void setTrack(int track);
236 
242  virtual void setZoomAndOffset(double zoom, sample_index_t offset);
243 
248  virtual void setVerticalZoom(double zoom);
249 
254  virtual void showCursor(sample_index_t pos = SAMPLE_INDEX_MAX);
255 
256  protected slots:
257 
265  virtual void showPosition(const QString &text, sample_index_t pos,
266  const QPoint &mouse);
267 
272  virtual void hidePosition() {
273  showPosition(QString(), 0, QPoint(-1,-1));
274  }
275 
276  protected:
277 
279  virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
280 
282  virtual void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE;
283 
285  virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
286 
288  virtual void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
289 
290  protected:
291 
296  None = 0x0000,
297  LeftBorder = 0x0001,
298  RightBorder = 0x0002,
299  Selection = 0x8000
300  };
301  Q_DECLARE_FLAGS(SelectionPos, SelectionPosEnum)
302 
303 
309  SelectionPos selectionPosition(int x);
310 
318  bool isInSelection(int x);
319 
328  void findNewItem(const QPoint &mouse_pos, bool active);
329 
330  protected:
331 
333  QWidget *m_controls;
334 
337 
340 
343 
349 
351  double m_zoom;
352 
353  private:
354 
355  class PositionWidget: public QWidget
356  {
357  public:
359  explicit PositionWidget(QWidget *parent);
360 
362  virtual ~PositionWidget() Q_DECL_OVERRIDE;
363 
370  virtual void setText(const QString &text, Qt::Alignment alignment);
371 
372  protected:
373 
375  virtual void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
376 
381  virtual void updateMask();
382 
383  private:
384 
386  QLabel *m_label;
387 
389  Qt::Alignment m_alignment;
390 
392  int m_radius;
393 
396 
398  Qt::Alignment m_last_alignment;
399 
401  QSize m_last_size;
402 
404  QPolygon m_polygon;
405  };
406 
407  private:
408 
411 
413  enum {
414  MouseNormal = 0,
416  MouseDragItem
417  } m_mouse_mode;
418 
421 
427 
430 
433 
435  QList<QPointer<QWidget> > m_siblings;
436 
438  QSharedPointer<Kwave::ViewItem> m_selected_item;
439  };
440 
441 }
442 
443 #endif /* SIGNAL_VIEW_H */
444 
445 //***************************************************************************
446 //***************************************************************************
sample_index_t lastVisible() const
Definition: SignalView.h:130
sample_index_t m_offset
Definition: SignalView.h:348
double m_vertical_zoom
Definition: SignalView.h:410
Definition: App.h:33
PositionWidget m_position_widget
Definition: SignalView.h:429
QList< QPointer< QWidget > > m_siblings
Definition: SignalView.h:435
QTimer m_position_widget_timer
Definition: SignalView.h:432
quint64 sample_index_t
Definition: Sample.h:28
sample_index_t offset() const
Definition: SignalView.h:110
QSharedPointer< Kwave::ViewItem > m_selected_item
Definition: SignalView.h:438
virtual bool canHandleSelection() const
Definition: SignalView.h:164
sample_index_t firstVisible() const
Definition: SignalView.h:125
Location m_preferred_location
Definition: SignalView.h:339
virtual void hidePosition()
Definition: SignalView.h:272
double verticalZoom() const
Definition: SignalView.h:120
Kwave::SignalManager * m_signal_manager
Definition: SignalView.h:336
Kwave::MouseMark m_mouse_selection
Definition: SignalView.h:420
double zoom() const
Definition: SignalView.h:115
Kwave::SignalManager * signalManager() const
Definition: SignalView.h:100
QWidget * m_controls
Definition: SignalView.h:333
int track() const
Definition: SignalView.h:105
#define SAMPLE_INDEX_MAX
Definition: Sample.h:31