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/segment/TrackButtons.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/segment/TrackButtons.h')
-rw-r--r-- | src/gui/editors/segment/TrackButtons.h | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/src/gui/editors/segment/TrackButtons.h b/src/gui/editors/segment/TrackButtons.h new file mode 100644 index 0000000..a61601d --- /dev/null +++ b/src/gui/editors/segment/TrackButtons.h @@ -0,0 +1,228 @@ + +/* -*- 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 <glaurent@telegraph-road.org>, + Chris Cannam <cannam@all-day-breakfast.com>, + Richard Bown <richard.bown@ferventsoftware.com> + + 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_TRACKBUTTONS_H_ +#define _RG_TRACKBUTTONS_H_ + +#include "base/MidiProgram.h" +#include "base/Track.h" +#include "gui/application/RosegardenGUIApp.h" +#include "TrackLabel.h" +#include <qframe.h> +#include <qstring.h> +#include <vector> + + +class QWidget; +class QVBoxLayout; +class QSignalMapper; +class QPopupMenu; +class QObject; + + +namespace Rosegarden +{ + +class TrackVUMeter; +class RosegardenGUIDoc; +class KLedButton; +class Instrument; + + +class TrackButtons : public QFrame +{ + Q_OBJECT +public: + + TrackButtons(RosegardenGUIDoc* doc, + unsigned int trackCellHeight, + unsigned int trackLabelWidth, + bool showTrackLabels, + int overallHeight, + QWidget* parent = 0, + const char* name = 0, + WFlags f=0); + + ~TrackButtons(); + + /// Return a vector of muted tracks + std::vector<int> mutedTracks(); + + /// Return a vector of highlighted tracks + std::vector<int> getHighlightedTracks(); + + void changeTrackInstrumentLabels(TrackLabel::InstrumentTrackLabels label); + + /** + * Change the instrument label to something else like + * an actual program name rather than a meaningless + * device number and midi channel + */ + void changeInstrumentLabel(InstrumentId id, QString label); + + void changeTrackLabel(TrackId id, QString label); + + // Select a label from outside this class by position + // + void selectLabel(int trackId); + + /* + * Set the mute button down or up + */ + void setMuteButton(TrackId track, bool value); + + /* + * Make this available so that others can set record buttons down + */ + void setRecordTrack(int position, bool value); + + /** + * Precalculate the Instrument popup so we don't have to every + * time it appears + * not protected because also used by the RosegardenGUIApp + * + * @see RosegardenGUIApp#slotPopulateTrackInstrumentPopup() + */ + void populateInstrumentPopup(Instrument *thisTrackInstr, QPopupMenu* instrumentPopup); + +signals: + // to emit what Track has been selected + // + void trackSelected(int); + void instrumentSelected(int); + + void widthChanged(); + + // to tell the notation canvas &c when a name changes + // + void nameChanged(); + + // document modified (mute button) + // + void modified(); + + // A record button has been pressed - if we're setting to an audio + // track we need to tell the sequencer for live monitoring + // purposes. + // + void recordButton(TrackId track, bool state); + + // A mute button has been pressed + // + void muteButton(TrackId track, bool state); + +public slots: + + void slotToggleRecordTrack(int position); + void slotToggleMutedTrack(int mutedTrack); + void slotUpdateTracks(); + void slotRenameTrack(QString newName, TrackId trackId); + void slotSetTrackMeter(float value, int position); + void slotSetMetersByInstrument(float value, InstrumentId id); + + void slotInstrumentSelection(int); + void slotInstrumentPopupActivated(int); + void slotTrackInstrumentSelection(TrackId, int); + + // ensure track buttons match the Composition + // + void slotSynchroniseWithComposition(); + + // Convert a positional selection into a track selection and re-emit + // + void slotLabelSelected(int position); + +protected: + + /** + * Populate the track buttons themselves with Instrument information + */ + void populateButtons(); + + /** + * Remove buttons and clear iterators for a position + */ + void removeButtons(unsigned int position); + + /** + * Set record button - graphically only + */ + void setRecordButton(int position, bool down); + + /** + * buttons, starting at the specified index + */ + void makeButtons(); + + QFrame* makeButton(TrackId trackId); + QString getPresentationName(Instrument *); + + void setButtonMapping(QObject*, TrackId); + + //--------------- Data members --------------------------------- + + RosegardenGUIDoc *m_doc; + + QVBoxLayout *m_layout; + + std::vector<KLedButton *> m_muteLeds; + std::vector<KLedButton *> m_recordLeds; + std::vector<TrackLabel *> m_trackLabels; + std::vector<TrackVUMeter *> m_trackMeters; + std::vector<QFrame *> m_trackHBoxes; + + QSignalMapper *m_recordSigMapper; + QSignalMapper *m_muteSigMapper; + QSignalMapper *m_clickedSigMapper; + QSignalMapper *m_instListSigMapper; + + // Number of tracks on our view + // + unsigned int m_tracks; + + // The pixel offset from the top - just to overcome + // the borders + int m_offset; + + // The height of the cells + // + int m_cellSize; + + // gaps between elements + // + int m_borderGap; + + int m_trackLabelWidth; + int m_popupItem; + + TrackLabel::InstrumentTrackLabels m_trackInstrumentLabels; + int m_lastSelected; +}; + + + +} + +#endif |