summaryrefslogtreecommitdiff
path: root/attic/muse2-oom/muse2/muse/master/lmaster.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse2-oom/muse2/muse/master/lmaster.cpp')
-rw-r--r--attic/muse2-oom/muse2/muse/master/lmaster.cpp750
1 files changed, 0 insertions, 750 deletions
diff --git a/attic/muse2-oom/muse2/muse/master/lmaster.cpp b/attic/muse2-oom/muse2/muse/master/lmaster.cpp
deleted file mode 100644
index 00a09d13..00000000
--- a/attic/muse2-oom/muse2/muse/master/lmaster.cpp
+++ /dev/null
@@ -1,750 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: lmaster.cpp,v 1.2.2.8 2009/03/09 02:05:18 terminator356 Exp $
-// (C) Copyright 2000 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#include "awl/posedit.h"
-#include "awl/sigedit.h"
-
-#include "lmaster.h"
-#include "xml.h"
-#include "song.h"
-#include "globals.h"
-#include "audio.h"
-///#include "posedit.h"
-///#include "sigedit.h"
-#include "shortcuts.h"
-#include "debug.h"
-
-#include <QCloseEvent>
-#include <QGridLayout>
-#include <QHeaderView>
-#include <QLineEdit>
-#include <QMenu>
-#include <QMenuBar>
-#include <QMessageBox>
-#include <QSignalMapper>
-#include <QStyle>
-#include <QToolBar>
-#include <QToolButton>
-#include <QTreeWidget>
-
-#define LMASTER_BEAT_COL 0
-#define LMASTER_TIME_COL 1
-#define LMASTER_TYPE_COL 2
-#define LMASTER_VAL_COL 3
-
-#define LMASTER_MSGBOX_STRING "MusE: List Editor"
-//---------------------------------------------------------
-// closeEvent
-//---------------------------------------------------------
-
-void LMaster::closeEvent(QCloseEvent* e)
- {
- emit deleted((unsigned long)this);
- e->accept();
- }
-
-//---------------------------------------------------------
-// songChanged
-//---------------------------------------------------------
-
-void LMaster::songChanged(int type)
- {
- if (type & (SC_SIG | SC_TEMPO))
- updateList();
- }
-
-//---------------------------------------------------------
-// LMaster
-//---------------------------------------------------------
-
-LMaster::LMaster()
- : MidiEditor(0, 0, 0)
- {
- pos_editor = 0;
- editor = 0;
- sig_editor = 0;
- editedItem = 0;
- editingNewItem = false;
- setWindowTitle(tr("MusE: Mastertrack"));
- setMinimumHeight(100);
- setFixedWidth(400);
-
- //---------Pulldown Menu----------------------------
- menuEdit = menuBar()->addMenu(tr("&Edit"));
- QSignalMapper *signalMapper = new QSignalMapper(this);
- menuEdit->addActions(undoRedo->actions());
- menuEdit->addSeparator();
- tempoAction = menuEdit->addAction(tr("Insert Tempo"));
- signAction = menuEdit->addAction(tr("Insert Signature"));
- posAction = menuEdit->addAction(tr("Edit Positon"));
- valAction = menuEdit->addAction(tr("Edit Value"));
- delAction = menuEdit->addAction(tr("Delete Event"));
- delAction->setShortcut(Qt::Key_Delete);
-
- connect(tempoAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
- connect(signAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
- connect(posAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
- connect(valAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
- connect(delAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
-
- signalMapper->setMapping(tempoAction, CMD_INSERT_TEMPO);
- signalMapper->setMapping(signAction, CMD_INSERT_SIG);
- signalMapper->setMapping(posAction, CMD_EDIT_BEAT);
- signalMapper->setMapping(valAction, CMD_EDIT_VALUE);
- signalMapper->setMapping(delAction, CMD_DELETE);
-
- connect(signalMapper, SIGNAL(mapped(int)), SLOT(cmd(int)));
-
- //---------ToolBar----------------------------------
- tools = addToolBar(tr("Master tools"));
- tools->addActions(undoRedo->actions());
-
- //QToolBar* edit = new QToolBar(this, "edit tools");
- QToolBar* edit = addToolBar(tr("Edit tools"));
- //QToolButton* tempoButton = new QToolButton(edit);
- QToolButton* tempoButton = new QToolButton();
- //QToolButton* timeSigButton = new QToolButton(edit);
- QToolButton* timeSigButton = new QToolButton();
- tempoButton->setText(tr("Tempo"));
- timeSigButton->setText(tr("Timesig"));
- tempoButton->setToolTip(tr("new tempo"));
- timeSigButton->setToolTip(tr("new signature"));
- edit->addWidget(tempoButton);
- edit->addWidget(timeSigButton);
-
- ///Q3Accel* qa = new Q3Accel(this);
- ///qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Z), song, SLOT(undo()));
- ///qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Y), song, SLOT(redo()));
-
- //---------------------------------------------------
- // master
- //---------------------------------------------------
-
- view = new QTreeWidget;
- view->setAllColumnsShowFocus(true);
- view->setSelectionMode(QAbstractItemView::SingleSelection);
- QStringList columnnames;
- columnnames << tr("Meter")
- << tr("Time")
- << tr("Type")
- << tr("Value");
- view->setHeaderLabels(columnnames);
- view->setColumnWidth(2,80);
- view->header()->setStretchLastSection(true);
-
- //---------------------------------------------------
- // Rest
- //---------------------------------------------------
-
-// QSizeGrip* corner = new QSizeGrip(mainw);
-
- mainGrid->setRowStretch(0, 100);
- mainGrid->setColumnStretch(0, 100);
-
- mainGrid->addWidget(view, 0, 0);
-// mainGrid->addWidget(corner, 1, 1, AlignBottom | AlignRight);
- updateList();
-
- connect(view, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), SLOT(select(QTreeWidgetItem*, QTreeWidgetItem*)));
- connect(view, SIGNAL(itemPressed(QTreeWidgetItem*, int)), SLOT(itemPressed(QTreeWidgetItem*, int)));
- connect(view, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), SLOT(itemDoubleClicked(QTreeWidgetItem*)));
- connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
- connect(tempoButton, SIGNAL(clicked()), SLOT(tempoButtonClicked()));
- connect(timeSigButton, SIGNAL(clicked()), SLOT(timeSigButtonClicked()));
-
- initShortcuts();
- }
-
-//---------------------------------------------------------
-// ~LMaster
-//---------------------------------------------------------
-
-LMaster::~LMaster()
- {
- //undoRedo->removeFrom(tools); // p4.0.6 Removed
- }
-
-//---------------------------------------------------------
-// insertSig
-//---------------------------------------------------------
-
-void LMaster::insertSig(const AL::SigEvent* ev)
- {
- new LMasterSigEventItem(view, ev);
- }
-
-//---------------------------------------------------------
-// insertTempo
-//---------------------------------------------------------
-
-void LMaster::insertTempo(const TEvent* ev)
- {
- new LMasterTempoItem(view, ev);
- }
-
-//---------------------------------------------------------
-// updateList
-//---------------------------------------------------------
-
-void LMaster::updateList()
- {
- LMasterLViewItem* selected = (LMasterLViewItem*) view->currentItem();
- LMASTER_LVTYPE type = LMASTER_TEMPO;
- unsigned tick = 0;
-
- if (selected) {
- type = selected->getType();
- tick = selected->tick();
- }
-
- view->clear();
- const TempoList* t = &tempomap;
- const AL::SigList* s = &AL::sigmap;
-
- criTEvent it = t->rbegin();
- AL::criSigEvent is = s->rbegin();
- for (;;) {
- if (it == t->rend()) {
- while(is != s->rend()) {
- insertSig(is->second);
- ++is;
- }
- break;
- }
- if (is == s->rend()) {
- while (it != t->rend()) {
- insertTempo(it->second);
- ++it;
- }
- break;
- }
- if (is->second->tick > it->second->tick) {
- insertSig(is->second);
- ++is;
- }
- else {
- insertTempo(it->second);
- ++it;
- }
- }
-
- // Try to reselect the previous selection:
- if(selected)
- {
- LMasterLViewItem* tmp = getItemAtPos(tick, type);
- if (tmp) {
- view->clearSelection();
- view->setCurrentItem(tmp);
- }
- }
- }
-
-//---------------------------------------------------------
-// readStatus
-//---------------------------------------------------------
-
-void LMaster::readStatus(Xml& xml)
- {
- for (;;) {
- Xml::Token token = xml.parse();
- const QString& tag = xml.s1();
- if (token == Xml::Error || token == Xml::End)
- break;
- switch (token) {
- case Xml::TagStart:
- if (tag == "midieditor")
- MidiEditor::readStatus(xml);
- else
- xml.unknown("LMaster");
- break;
- case Xml::TagEnd:
- if (tag == "lmaster")
- return;
- default:
- break;
- }
- }
- }
-
-//---------------------------------------------------------
-// writeStatus
-//---------------------------------------------------------
-
-void LMaster::writeStatus(int level, Xml& xml) const
- {
- xml.tag(level++, "lmaster");
- MidiEditor::writeStatus(level, xml);
- xml.tag(level, "/lmaster");
- }
-
-//---------------------------------------------------------
-// select
-//---------------------------------------------------------
-
-void LMaster::select(QTreeWidgetItem* /*item*/, QTreeWidgetItem* /*previous_item*/)
- {
-// printf("select %x\n", unsigned(item));
- }
-
-//---------------------------------------------------------
-// cmd
-//---------------------------------------------------------
-
-void LMaster::cmd(int cmd)
- {
- switch(cmd) {
- case CMD_DELETE: {
- LMasterLViewItem* l = (LMasterLViewItem*) view->currentItem();
- if (!l)
- return;
- // Delete item:
- if (l->tick() != 0) {
- if (l == view->topLevelItem(view->topLevelItemCount() - 1))
- view->setCurrentItem(view->itemAbove(l));
- else
- view->setCurrentItem(view->itemBelow(l));
-
- switch (l->getType()) {
- case LMASTER_TEMPO:
- {
- LMasterTempoItem* t = (LMasterTempoItem*) l;
- audio->msgDeleteTempo(t->tick(), t->tempo(), true);
- break;
- }
- case LMASTER_SIGEVENT:
- {
- LMasterSigEventItem* s = (LMasterSigEventItem*) l;
- audio->msgRemoveSig(s->tick(), s->z(), s->n());
- break;
- }
- default:
- M_ERROR("Default switch statement reached");
- break;
- }
- }
- break;
- }
- case CMD_INSERT_TEMPO:
- tempoButtonClicked();
- break;
- case CMD_INSERT_SIG:
- timeSigButtonClicked();
- break;
- case CMD_EDIT_BEAT:
- case CMD_EDIT_VALUE:
- cmd == CMD_EDIT_VALUE ? editorColumn = LMASTER_VAL_COL : editorColumn = LMASTER_BEAT_COL;
- if (view->currentItem() && !editedItem) {
- itemDoubleClicked(view->currentItem());
- }
- break;
- }
- }
-
-/*!
- \fn LMaster::itemPressed(QListViewItem* i, const QPoint& p, int column)
- */
-void LMaster::itemPressed(QTreeWidgetItem* i, int column)
- {
- //printf("itemPressed, column: %d\n", column);
- if (editedItem) {
- if (editorColumn != column || editedItem != i)
- returnPressed();
- }
- else
- editorColumn = column;
- }
-
-//---------------------------------------------------------
-// itemDoubleClicked(QListViewItem* item)
-//! Sets lmaster in edit mode, and opens editor for selected value
-//---------------------------------------------------------
-void LMaster::itemDoubleClicked(QTreeWidgetItem* i)
- {
- //printf("itemDoubleClicked\n");
-
- if (!editedItem && editorColumn == LMASTER_VAL_COL) {
- editedItem = (LMasterLViewItem*) i;
- QRect itemRect = view->visualItemRect(editedItem);
- int x1 = view->columnWidth(LMASTER_BEAT_COL) + view->columnWidth(LMASTER_TIME_COL)
- + view->columnWidth(LMASTER_TYPE_COL);
- itemRect.setX(x1);
- //Qt makes crazy things with itemRect if this is called directly..
- if (editingNewItem) {
- QFontMetrics fm(font());
- int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0 , this); // ddskrjo 0
- int h = fm.height() + fw * 2;
- itemRect.setWidth(view->columnWidth(LMASTER_VAL_COL));
- itemRect.setY(1);
- itemRect.setHeight(h);
- }
-
-
- // Edit tempo value:
- if (editedItem->getType() == LMASTER_TEMPO) {
- if (!editor)
- editor = new QLineEdit(view->viewport());
- editor->setText(editedItem->text(LMASTER_VAL_COL));
- editor->setGeometry(itemRect);
- editor->show();
- editor->setFocus();
- editor->selectAll();
- connect(editor, SIGNAL(returnPressed()), SLOT(returnPressed()));
- }
- else { // Edit signatur value:
- if (!sig_editor)
- sig_editor = new SigEdit(view->viewport());
- sig_editor->setValue(editedItem->text(LMASTER_VAL_COL));
- sig_editor->setGeometry(itemRect);
- sig_editor->show();
- sig_editor->setFocus();
- connect(sig_editor, SIGNAL(returnPressed()), SLOT(returnPressed()));
- }
- }
- // Edit tempo or signal position:
- else if (!editedItem && editorColumn == LMASTER_BEAT_COL) {
- editedItem = (LMasterLViewItem*) i;
- // Don't allow movement of initial values:
- if (editedItem->tick() == 0) {
- QMessageBox::information(this, tr(LMASTER_MSGBOX_STRING),
- tr("Reposition of the initial tempo and signature events is not allowed") );
- editedItem = 0;
- }
- // Everything OK
- else {
- if (!pos_editor)
- ///pos_editor = new PosEdit(view->viewport());
- pos_editor = new Awl::PosEdit(view->viewport());
- pos_editor->setValue(editedItem->tick());
- QRect itemRect = view->visualItemRect(editedItem);
- itemRect.setX(0);
- itemRect.setWidth(view->columnWidth(LMASTER_BEAT_COL));
- pos_editor->setGeometry(itemRect);
- pos_editor->show();
- pos_editor->setFocus();
- connect(pos_editor, SIGNAL(returnPressed()), SLOT(returnPressed()));
- }
- }
- }
-
-//---------------------------------------------------------
-// returnPressed()
-//! called when editor is closed
-//---------------------------------------------------------
-
-void LMaster::returnPressed()
- {
- if (!editedItem)
- return;
-
- setFocus();
- // Tempo event:
- if (editedItem->getType() == LMASTER_TEMPO && editorColumn == LMASTER_VAL_COL) {
- QString input = editor->text();
- editor->hide();
- repaint();
- LMasterTempoItem* e = (LMasterTempoItem*) editedItem;
- const TEvent* t = e->getEvent();
- unsigned tick = t->tick;
- bool conversionOK;
- double dbl_input = input.toDouble(&conversionOK);
- if (conversionOK && dbl_input < 250.0) {
- int tempo = (int) ((1000000.0 * 60.0)/dbl_input);
-
- if (!editingNewItem) {
- song->startUndo();
- audio->msgDeleteTempo(tick, e->tempo(), false);
- audio->msgAddTempo(tick, tempo, false);
- song->endUndo(SC_TEMPO);
- }
- //
- // New item edited:
- //
- else {
- audio->msgAddTempo(tick, tempo, true);
- }
- }
- else {
- QMessageBox::warning(this, tr("MusE: List Editor"),
- tr("Input error, conversion not OK or value out of range"),
- QMessageBox::Ok, Qt::NoButton
- );
- }
- }
- //
- // Beat column, change position of a particular tempo or signature event
- //
- else if (editorColumn == LMASTER_BEAT_COL) {
- int oldtick = editedItem->tick();
- int newtick = pos_editor->pos().tick();
- if (newtick == 0) { // Do not allow change of position to beginning of song
- QMessageBox::warning(this, tr(LMASTER_MSGBOX_STRING),
- tr("Reposition of tempo and signature events to start position is not allowed!"),
- QMessageBox::Ok, Qt::NoButton
- );
- }
- else if (oldtick != newtick) { // Ignore if tick hasn't changed
- if (editedItem->getType() == LMASTER_TEMPO) {
- LMasterTempoItem* t = (LMasterTempoItem*) editedItem;
- int tempo = t->tempo();
- song->startUndo();
- audio->msgDeleteTempo(oldtick, tempo, false);
- audio->msgAddTempo(newtick, tempo, false);
- song->endUndo(SC_TEMPO);
- // Select the item:
- QTreeWidgetItem* newSelected = (QTreeWidgetItem*) getItemAtPos(newtick, LMASTER_TEMPO);
- if (newSelected) {
- view->clearSelection();
- view->setCurrentItem(newSelected);
- }
- }
- else if (editedItem->getType() == LMASTER_SIGEVENT) {
- LMasterSigEventItem* t = (LMasterSigEventItem*) editedItem;
- int z = t->z();
- int n = t->n();
- if (!editingNewItem) {
- song->startUndo();
- audio->msgRemoveSig(oldtick, z, n, false); //Delete first, in order to get sane tick-value
- newtick = pos_editor->pos().tick();
- audio->msgAddSig(newtick, z, n, false);
- song->endUndo(SC_SIG);
- }
- else
- audio->msgAddSig(newtick, z, n, false);
- //audio->msgAddSig(newtick, z, n, true);
-
- // Select the item:
- QTreeWidgetItem* newSelected = (QTreeWidgetItem*) getItemAtPos(newtick, LMASTER_SIGEVENT);
- if (newSelected) {
- view->clearSelection();
- view->setCurrentItem(newSelected);
- }
- }
-
- }
- pos_editor->hide();
- repaint();
- }
- //
- // SigEvent, value changed:
- //
- else if (editedItem->getType() == LMASTER_SIGEVENT && editorColumn == LMASTER_VAL_COL)
- {
- ///Sig newSig = sig_editor->sig();
- AL::TimeSignature newSig = sig_editor->sig();
-
- sig_editor->hide();
-
- // Added p3.3.43 Prevents aborting with 0 z or n.
- if(newSig.isValid())
- {
-
- LMasterSigEventItem* e = (LMasterSigEventItem*) editedItem;
- int tick = e->tick();
- if (!editingNewItem) {
- song->startUndo();
- if (tick > 0)
- audio->msgRemoveSig(tick, e->z(), e->n(), false);
- audio->msgAddSig(tick, newSig.z, newSig.n, false);
- song->endUndo(SC_SIG);
- }
- else
- audio->msgAddSig(tick, newSig.z, newSig.n, true);
- }
- }
-
- view->setFocus();
- // No item edited now:
- editedItem = 0;
- editorColumn = -1;
- editingNewItem = false;
-
- }
-
-
-/*!
- \fn LMasterLViewItem::text(int column)
- \brief Returns the initialized text to the View
- */
-QString LMasterLViewItem::text(int column) const
- {
- QString ret = "?";
- switch (column) {
- case LMASTER_BEAT_COL:
- ret = c1;
- break;
- case LMASTER_TIME_COL:
- ret = c2;
- break;
- case LMASTER_TYPE_COL:
- ret = c3;
- break;
- case LMASTER_VAL_COL:
- ret = c4;
- break;
- default:
- fprintf(stderr,"LMasterLViewItem::text(int): Default switch statement reached... Unknown column.\n");
- break;
- }
- return ret;
- }
-
-//---------------------------------------------------------
-// LMasterTempoItem
-//! Initializes a LMasterTempoItem with a TEvent
-//---------------------------------------------------------
-LMasterTempoItem::LMasterTempoItem(QTreeWidget* parent, const TEvent* ev)
- : LMasterLViewItem(parent)
- {
- tempoEvent = ev;
- unsigned t = ev->tick;
- //QString c1, c2, c3, c4;
- int bar, beat;
- unsigned tick;
- AL::sigmap.tickValues(t, &bar, &beat, &tick);
- c1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick);
-
- double time = double(ev->frame) / double(sampleRate);
- int min = int(time) / 60;
- int sec = int(time) % 60;
- int msec = int((time - (min*60 + sec)) * 1000.0);
- c2.sprintf("%03d:%02d:%03d", min, sec, msec);
- c3 = "Tempo";
- double dt = (1000000.0 * 60.0)/ev->tempo;
- c4.setNum(dt, 'f', 3);
- setText(0, c1);
- setText(1, c2);
- setText(2, c3);
- setText(3, c4);
- }
-
-//---------------------------------------------------------
-// LMasterSigEventItem
-//! Initializes a ListView item with a SigEvent
-//---------------------------------------------------------
-LMasterSigEventItem::LMasterSigEventItem(QTreeWidget* parent, const AL::SigEvent* ev)
- : LMasterLViewItem(parent)
- {
- sigEvent = ev;
- unsigned t = ev->tick;
- int bar, beat;
- unsigned tick;
- AL::sigmap.tickValues(t, &bar, &beat, &tick);
- c1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick);
-
- double time = double(tempomap.tick2frame(t)) / double (sampleRate);
- int min = int(time) / 60;
- int sec = int(time) % 60;
- int msec = int((time - (min*60 + sec)) * 1000.0);
- c2.sprintf("%03d:%02d:%03d", min, sec, msec);
- c3 = "Timesig";
- c4.sprintf("%d/%d", ev->sig.z, ev->sig.n);
- setText(0, c1);
- setText(1, c2);
- setText(2, c3);
- setText(3, c4);
- }
-
-//---------------------------------------------------------
-// tempoButtonClicked()
-//! inserts a new tempo-item in the list and starts the editor for it
-//---------------------------------------------------------
-void LMaster::tempoButtonClicked()
- {
- LMasterTempoItem* lastTempo = (LMasterTempoItem*) getLastOfType(LMASTER_TEMPO);
- QString beatString = ((LMasterLViewItem*)lastTempo)->text(LMASTER_BEAT_COL);
- int m, b, t;
- Pos p = Pos(beatString);
- p.mbt(&m, &b, &t);
- m++; //Next bar
- int newTick = AL::sigmap.bar2tick(m, b, t);
- TEvent* ev = new TEvent(lastTempo->tempo(), newTick);
- new LMasterTempoItem(view, ev);
- QTreeWidgetItem* newTempoItem = view->topLevelItem(0);
- //LMasterTempoItem* newTempoItem = new LMasterTempoItem(view, ev);
-
- editingNewItem = true; // State
- editorColumn = LMASTER_VAL_COL; // Set that we edit editorColumn
- view->clearSelection();
- view->setCurrentItem(newTempoItem);
- itemDoubleClicked(newTempoItem);
- }
-
-
-//---------------------------------------------------------
-// tempoButtonClicked()
-//! inserts a new sig-item in the list and starts the editor for it
-//---------------------------------------------------------
-void LMaster::timeSigButtonClicked()
- {
- LMasterSigEventItem* lastSig = (LMasterSigEventItem*) getLastOfType(LMASTER_SIGEVENT);
- QString beatString = ((LMasterLViewItem*)lastSig)->text(LMASTER_BEAT_COL);
- int m, b, t;
- Pos p = Pos(beatString);
- p.mbt(&m, &b, &t);
- m++;
- int newTick = AL::sigmap.bar2tick(m, b, t);
- AL::SigEvent* ev = new AL::SigEvent(AL::TimeSignature(lastSig->z(), lastSig->n()), newTick);
- new LMasterSigEventItem(view, ev);
- QTreeWidgetItem* newSigItem = view->topLevelItem(0);
- //LMasterSigEventItem* newSigItem = new LMasterSigEventItem(view, ev);
-
- editingNewItem = true; // State
- editorColumn = LMASTER_VAL_COL; // Set that we edit editorColumn
- view->clearSelection();
- view->setCurrentItem(newSigItem);
- itemDoubleClicked(newSigItem);
- }
-
-
-/*!
- \fn LMaster::getLastOfType(LMASTER_LVTYPE t)
- */
-LMasterLViewItem* LMaster::getLastOfType(LMASTER_LVTYPE t)
- {
- LMasterLViewItem* tmp = (LMasterLViewItem*) view->topLevelItem(view->topLevelItemCount() - 1);
- while (tmp->getType() != t) {
- tmp = (LMasterLViewItem*) view->itemAbove(tmp);
- }
- return tmp;
- }
-
-
-/*!
- \fn LMaster::getItemAtPos(unsigned tick, LMASTER_LVTYPE t)
- */
-LMasterLViewItem* LMaster::getItemAtPos(unsigned tick, LMASTER_LVTYPE t)
- {
- LMasterLViewItem* tmp = (LMasterLViewItem*) view->topLevelItem(0);
- while (tmp) {
- if (tmp->getType() == t && tmp->tick() == tick)
- return tmp;
- tmp = (LMasterLViewItem*) view->itemBelow(tmp);
- }
-
- return 0;
- }
-
-
-/*!
- \fn LMaster::configChanged()
- */
-void LMaster::configChanged()
- {
- initShortcuts();
- }
-
-
-/*!
- \fn LMaster::initShortcuts()
- */
-void LMaster::initShortcuts()
- {
- tempoAction->setShortcut(shortcuts[SHRT_LM_INS_TEMPO].key);
- signAction->setShortcut(shortcuts[SHRT_LM_INS_SIG].key);
- posAction->setShortcut(shortcuts[SHRT_LM_EDIT_BEAT].key);
- valAction->setShortcut(shortcuts[SHRT_LM_EDIT_VALUE].key);
- }