diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 18:37:05 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 18:37:05 +0000 |
commit | 145364a8af6a1fec06556221e66d4b724a62fc9a (patch) | |
tree | 53bd71a544008c518034f208d64c932dc2883f50 /src/gui/editors/notation/NoteInserter.h | |
download | rosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.tar.gz rosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.zip |
Added old abandoned KDE3 version of the RoseGarden MIDI tool
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/rosegarden@1097595 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/gui/editors/notation/NoteInserter.h')
-rw-r--r-- | src/gui/editors/notation/NoteInserter.h | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/gui/editors/notation/NoteInserter.h b/src/gui/editors/notation/NoteInserter.h new file mode 100644 index 0000000..cb46b38 --- /dev/null +++ b/src/gui/editors/notation/NoteInserter.h @@ -0,0 +1,166 @@ + +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Rosegarden + A MIDI and audio sequencer and musical notation editor. + + This program is Copyright 2000-2008 + Guillaume Laurent <[email protected]>, + Chris Cannam <[email protected]>, + Richard Bown <[email protected]> + + The moral rights of Guillaume Laurent, Chris Cannam, and Richard + Bown to claim authorship of this work have been asserted. + + Other copyrights also apply to some parts of this work. Please + see the AUTHORS file and individual file headers for details. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _RG_NOTEINSERTER_H_ +#define _RG_NOTEINSERTER_H_ + +#include "base/NotationTypes.h" +#include "NotationTool.h" +#include "NotationElement.h" +#include "NoteStyle.h" +#include <qstring.h> +#include "base/Event.h" + + +class QMouseEvent; + + +namespace Rosegarden +{ + +class ViewElement; +class Segment; +class NotationView; +class Event; + + +/** + * This tool will insert notes on mouse click events + */ +class NoteInserter : public NotationTool +{ + Q_OBJECT + + friend class NotationToolBox; + +public: + ~NoteInserter(); + + virtual void handleLeftButtonPress(timeT, + int height, + int staffNo, + QMouseEvent*, + ViewElement* el); + + virtual int handleMouseMove(timeT time, + int height, + QMouseEvent*); + + virtual void handleMouseRelease(timeT time, + int height, + QMouseEvent*); + + virtual void ready(); + + Note getCurrentNote() { + return Note(m_noteType, m_noteDots); + } + + /// Insert a note as if the user has clicked at the given time & pitch + void insertNote(Segment &segment, + timeT insertionTime, + int pitch, + Accidental accidental, + bool suppressPreview = false); + + static const QString ToolName; + +public slots: + /// Set the type of note (quaver, breve...) which will be inserted + void slotSetNote(Note::Type); + + /// Set the nb of dots the inserted note will have + void slotSetDots(unsigned int dots); + + /// Set the accidental for the notes which will be inserted + void slotSetAccidental(Accidental, bool follow); + +protected: + NoteInserter(NotationView*); + + /// this ctor is used by RestInserter + NoteInserter(const QString& menuName, NotationView*); + + timeT getOffsetWithinRest(int staffNo, + const NotationElementList::iterator&, + double &canvasX); + + int getOttavaShift(Segment &segment, timeT time); + + virtual Event *doAddCommand(Segment &, + timeT time, + timeT endTime, + const Note &, + int pitch, Accidental); + + virtual bool computeLocationAndPreview(QMouseEvent *e); + virtual void showPreview(); + virtual void clearPreview(); + +protected slots: + // RMB menu slots + void slotNoAccidental(); + void slotFollowAccidental(); + void slotSharp(); + void slotFlat(); + void slotNatural(); + void slotDoubleSharp(); + void slotDoubleFlat(); + void slotToggleDot(); + void slotToggleAutoBeam(); + + void slotEraseSelected(); + void slotSelectSelected(); + void slotRestsSelected(); + +protected: + //--------------- Data members --------------------------------- + + Note::Type m_noteType; + unsigned int m_noteDots; + bool m_autoBeam; + bool m_matrixInsertType; + NoteStyleName m_defaultStyle; + + bool m_clickHappened; + timeT m_clickTime; + int m_clickSubordering; + int m_clickPitch; + int m_clickHeight; + int m_clickStaffNo; + double m_clickInsertX; + float m_targetSubordering; + + Accidental m_accidental; + Accidental m_lastAccidental; + bool m_followAccidental; + + static const char* m_actionsAccidental[][4]; +}; + + +} + +#endif |