diff options
Diffstat (limited to 'attic/muse2-oom/muse2/muse/widgets/canvas.h')
-rw-r--r-- | attic/muse2-oom/muse2/muse/widgets/canvas.h | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/attic/muse2-oom/muse2/muse/widgets/canvas.h b/attic/muse2-oom/muse2/muse/widgets/canvas.h new file mode 100644 index 00000000..595fe04e --- /dev/null +++ b/attic/muse2-oom/muse2/muse/widgets/canvas.h @@ -0,0 +1,185 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: canvas.h,v 1.3.2.8 2009/02/02 21:38:01 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CANVAS_H__ +#define __CANVAS_H__ + +#include "citem.h" +#include "view.h" +#include "tools.h" + +#include <QWheelEvent> +#include <QMouseEvent> +#include <QKeyEvent> + +class QMenu; + +//--------------------------------------------------------- +// Canvas +//--------------------------------------------------------- + +class Canvas : public View { + Q_OBJECT + int canvasTools; + QTimer *scrollTimer; + + bool doScroll; + int scrollSpeed; + + QPoint ev_pos; + bool canScrollLeft; + bool canScrollRight; + bool canScrollUp; + bool canScrollDown; + protected: + enum DragMode { + DRAG_OFF, DRAG_NEW, + DRAG_MOVE_START, DRAG_MOVE, + DRAG_COPY_START, DRAG_COPY, + DRAG_CLONE_START, DRAG_CLONE, + DRAGX_MOVE, DRAGY_MOVE, + DRAGX_COPY, DRAGY_COPY, + DRAGX_CLONE, DRAGY_CLONE, + DRAG_DELETE, + DRAG_RESIZE, DRAG_LASSO_START, DRAG_LASSO, + }; + + enum DragType { + MOVE_MOVE, MOVE_COPY, MOVE_CLONE + }; + + enum HScrollDir { + HSCROLL_NONE, HSCROLL_LEFT, HSCROLL_RIGHT + }; + enum VScrollDir { + VSCROLL_NONE, VSCROLL_UP, VSCROLL_DOWN + }; + + CItemList items; + CItemList moving; + CItem* curItem; + Part* curPart; + int curPartId; + + DragMode drag; + QRect lasso; + QPoint start; + Tool _tool; + unsigned pos[3]; + + HScrollDir hscrollDir; + VScrollDir vscrollDir; + int button; + Qt::KeyboardModifiers keyState; + QMenu* itemPopupMenu; + QMenu* canvasPopupMenu; + + void setCursor(); + virtual void viewKeyPressEvent(QKeyEvent* event); + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseMoveEvent(QMouseEvent*); + virtual void viewMouseReleaseEvent(QMouseEvent*); + virtual void draw(QPainter&, const QRect&); + virtual void wheelEvent(QWheelEvent* e); + + virtual void mousePress(QMouseEvent*) {} + virtual void keyPress(QKeyEvent*); + virtual void mouseMove(const QPoint&) = 0; + virtual void mouseRelease(const QPoint&) {} + virtual void drawCanvas(QPainter&, const QRect&) = 0; + virtual void drawItem(QPainter&, const CItem*, const QRect&) = 0; + virtual void drawMoving(QPainter&, const CItem*, const QRect&) = 0; + virtual void updateSelection() = 0; + virtual QPoint raster(const QPoint&) const = 0; + virtual int y2pitch(int) const = 0; //CDW + virtual int pitch2y(int) const = 0; //CDW + + virtual void moveCanvasItems(CItemList&, int, int, DragType, int*) = 0; + // Changed by T356. + //virtual bool moveItem(CItem*, const QPoint&, DragType, int*) = 0; + virtual bool moveItem(CItem*, const QPoint&, DragType) = 0; + virtual CItem* newItem(const QPoint&, int state) = 0; + virtual void resizeItem(CItem*, bool noSnap=false) = 0; + virtual void newItem(CItem*, bool noSnap=false) = 0; + virtual bool deleteItem(CItem*) = 0; + virtual void startUndo(DragType) = 0; + + virtual void endUndo(DragType, int flags) = 0; + int getCurrentDrag(); + + /*! + \brief Virtual member + + Implementing class is responsible for creating a popup to be shown when the user rightclicks an item on the Canvas + \param item The canvas item that is rightclicked + \return A QPopupMenu* + */ + virtual QMenu* genItemPopup(CItem* /*item*/) { return 0; } + + /*! + \brief Pure virtual member + + Implementing class is responsible for creating a popup to be shown when the user rightclicks an empty region of the canvas + \return A QPopupMenu* + */ + QMenu* genCanvasPopup(); + + /*! + \brief Virtual member + + This is the function called when the user has selected an option in the popupmenu generated by genItemPopup() + \param item the canvas item the whole thing is about + \param n Command type + \param pt I think this is the position of the pointer when right mouse button was pressed + */ + virtual void itemPopup(CItem* /*item */, int /*n*/, const QPoint& /*pt*/) {} + void canvasPopup(int); + + virtual void startDrag(CItem*, bool) {} + + // selection + virtual void deselectAll(); + virtual void selectItem(CItem* e, bool); + + virtual void deleteItem(const QPoint&); + + // moving + void startMoving(const QPoint&, DragType); + + void moveItems(const QPoint&, int dir, bool rasterize = true); + void endMoveItems(const QPoint&, DragType, int dir); + + virtual void selectLasso(bool toggle); + + virtual void itemPressed(const CItem*) {} + virtual void itemReleased(const CItem*, const QPoint&) {} + virtual void itemMoved(const CItem*, const QPoint&) {} + virtual void curPartChanged() {} + + public slots: + void setTool(int t); + void setPos(int, unsigned, bool adjustScrollbar); + void scrollTimerDone(void); + void redirectedWheelEvent(QWheelEvent*); + + signals: + void followEvent(int); + void toolChanged(int); + void verticalScroll(unsigned); + void horizontalScroll(unsigned); + void horizontalScrollNoLimit(unsigned); + public: + Canvas(QWidget* parent, int sx, int sy, const char* name = 0); + bool isSingleSelection(); + int selectionSize(); + Tool tool() const { return _tool; } + Part* part() const { return curPart; } + void setCurrentPart(Part*); + void setCanvasTools(int n) { canvasTools = n; } + }; +#endif + |