1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
//=========================================================
// MusE
// Linux Music Editor
// $Id: ctrlcanvas.h,v 1.2 2003/11/19 21:28:40 lunar_shuttle Exp $
// (C) Copyright 1999 Werner Schweer (ws@seh.de)
//=========================================================
#ifndef __CTRLCANVAS_H__
#define __CTRLCANVAS_H__
#include <list>
#include "view.h"
#include "tools.h"
#include "midictrl.h"
const int CTRL_VELOCITY = 129;
class MidiEvent;
class MidiPart;
class PartList;
class MidiTrack;
class MidiEditor;
class QWidget;
//---------------------------------------------------------
// CEvent
// ''visual'' Controller Event
//---------------------------------------------------------
class CEvent {
MidiEvent* _event;
int _val;
MidiPart* _part;
int ex;
public:
CEvent(MidiEvent* e, MidiPart* part, int v);
MidiEvent* event() const { return _event; }
void setEvent(MidiEvent* ev) { _event = ev; }
int val() const { return _val; }
void setVal(int v) { _val = v; }
void setEX(int v) { ex = v; }
MidiPart* part() const { return _part; }
bool contains(int x1, int x2) const;
int x() { return ex; }
};
typedef std::list<CEvent*>::iterator iCEvent;
typedef std::list<CEvent*>::const_iterator ciCEvent;
//---------------------------------------------------------
// CEventList
// Controller Item List
//---------------------------------------------------------
class CEventList: public std::list<CEvent*> {
public:
void add(CEvent* item) { push_back(item); }
};
//---------------------------------------------------------
// CtrlCanvas
//---------------------------------------------------------
class CtrlCanvas : public View {
MidiEditor* editor;
MidiTrack* curTrack;
MidiPart* curPart;
MidiController ctrl;
int line1x;
int line1y;
int line2x;
int line2y;
bool drawLineMode;
void viewMousePressEvent(QMouseEvent* event);
void viewMouseMoveEvent(QMouseEvent*);
void viewMouseReleaseEvent(QMouseEvent*);
virtual void draw(QPainter&, const QRect&);
virtual void pdraw(QPainter&, const QRect&);
virtual void drawOverlay(QPainter& p);
virtual QRect overlayRect() const;
void changeValRamp(int x1, int x2, int y1, int y2);
void newValRamp(int x1, int y1, int x2, int y2);
void changeVal(int x1, int x2, int y);
void newVal(int x1, int x2, int y);
void deleteVal(int x1, int x2, int y);
int keyFilter; //Used by the drum-editor to filter controllers of only one key (one drum)
Q_OBJECT
protected:
enum DragMode { DRAG_OFF, DRAG_NEW, DRAG_MOVE_START, DRAG_MOVE,
DRAG_DELETE, DRAG_COPY_START, DRAG_COPY,
DRAG_RESIZE, DRAG_LASSO_START, DRAG_LASSO
};
CEventList items;
CEventList selection;
CEventList moving;
CEvent* curItem;
DragMode drag;
QRect lasso;
QPoint start;
Tool tool;
int pos[3];
void leaveEvent(QEvent*e);
QPoint raster(const QPoint&) const;
// selection
bool isSingleSelection() { return selection.size() == 1; }
void deselectAll();
void selectItem(CEvent* e);
void deselectItem(CEvent* e);
private slots:
void songChanged(int type);
public slots:
void setTool(int t);
void setPos(int, int, bool adjustScrollbar);
void setController(const MidiController&);
void setKeyfilter(const char in_keyfilter);
signals:
void followEvent(int);
void xposChanged(int);
void yposChanged(int);
public:
CtrlCanvas(MidiEditor*, QWidget* parent, int,
const char* name = 0);
const MidiController& controller() { return ctrl; }
};
#endif
|