📄 timewidget.cpp
字号:
if (m_msec) m_msec ->blockSignals(true); if (m_isDuration) { if (m_time + m_startTime > m_composition->getEndMarker()) { m_time = m_composition->getEndMarker() - m_startTime; } if (m_timeT) { m_timeT->setMinValue(0); if (m_constrain) { m_timeT->setMaxValue(m_composition->getEndMarker() - m_startTime); } else { m_timeT->setMaxValue(INT_MAX); } m_timeT->setValue(m_time); } if (m_note) { m_note->setCurrentItem(0); for (size_t i = 0; i < m_noteDurations.size(); ++i) { if (m_time == m_noteDurations[i]) { m_note->setCurrentItem(i); break; } } } // the bar/beat etc timings are considered to be times of a note // starting at the start of a bar, in the time signature in effect // at m_startTime int bars = 0, beats = 0, hemidemis = 0, remainder = 0; m_composition->getMusicalTimeForDuration(m_startTime, m_time, bars, beats, hemidemis, remainder); TimeSignature timeSig = m_composition->getTimeSignatureAt(m_startTime); if (m_bar) { m_bar->setMinValue(0); if (m_constrain) { m_bar->setMaxValue (m_composition->getBarNumber(m_composition->getEndMarker()) - m_composition->getBarNumber(m_startTime)); } else { m_bar->setMaxValue(9999); } m_bar->setValue(bars); } else { m_barLabel->setText(QString("%1").arg(bars)); } if (m_beat) { m_beat->setMinValue(0); m_beat->setMaxValue(timeSig.getBeatsPerBar() - 1); m_beat->setValue(beats); } else { m_beatLabel->setText(QString("%1").arg(beats)); } if (m_fraction) { m_fraction->setMinValue(0); m_fraction->setMaxValue(timeSig.getBeatDuration() / Note(Note::Shortest). getDuration() - 1); m_fraction->setValue(hemidemis); } else { m_fractionLabel->setText(QString("%1").arg(hemidemis)); } m_timeSig->setText(i18n("(%1/%2 time)").arg(timeSig.getNumerator()). arg(timeSig.getDenominator())); timeT endTime = m_startTime + m_time; RealTime rt = m_composition->getRealTimeDifference (m_startTime, endTime); if (m_sec) { m_sec->setMinValue(0); if (m_constrain) { m_sec->setMaxValue(m_composition->getRealTimeDifference (m_startTime, m_composition->getEndMarker()).sec); } else { m_sec->setMaxValue(9999); } m_sec->setValue(rt.sec); } else { m_secLabel->setText(QString("%1").arg(rt.sec)); } if (m_msec) { m_msec->setMinValue(0); m_msec->setMaxValue(999); m_msec->setValue(rt.msec()); } else { m_msecLabel->setText(QString("%1").arg(rt.msec())); } bool change = (m_composition->getTempoChangeNumberAt(endTime) != m_composition->getTempoChangeNumberAt(m_startTime)); //!!! imprecise -- better to work from tempoT directly double tempo = m_composition->getTempoQpm(m_composition->getTempoAtTime(m_startTime)); int qpmc = int(tempo * 100.0); int bpmc = qpmc; if (timeSig.getBeatDuration() != Note(Note::Crotchet).getDuration()) { bpmc = int(tempo * 100.0 * Note(Note::Crotchet).getDuration() / timeSig.getBeatDuration()); } if (change) { if (bpmc != qpmc) { m_tempo->setText(i18n("(starting %1.%2 qpm, %2.%3 bpm)"). arg(qpmc / 100). arg(qpmc % 100). arg(bpmc / 100). arg(bpmc % 100)); } else { m_tempo->setText(i18n("(starting %1.%2 bpm)"). arg(bpmc / 100). arg(bpmc % 100)); } } else { if (bpmc != qpmc) { m_tempo->setText(i18n("(%1.%2 qpm, %2.%3 bpm)"). arg(qpmc / 100). arg(qpmc % 100). arg(bpmc / 100). arg(bpmc % 100)); } else { m_tempo->setText(i18n("(%1.%2 bpm)"). arg(bpmc / 100). arg(bpmc % 100)); } } } else { if (m_time > m_composition->getEndMarker()) { m_time = m_composition->getEndMarker(); } if (m_timeT) { if (m_constrain) { m_timeT->setMinValue(m_composition->getStartMarker()); m_timeT->setMaxValue(m_composition->getEndMarker()); } else { m_timeT->setMinValue(INT_MIN); m_timeT->setMaxValue(INT_MAX); } m_timeT->setValue(m_time); } int bar = 1, beat = 1, hemidemis = 0, remainder = 0; m_composition->getMusicalTimeForAbsoluteTime (m_time, bar, beat, hemidemis, remainder); TimeSignature timeSig = m_composition->getTimeSignatureAt(m_time); if (m_bar) { m_bar->setMinValue(INT_MIN); if (m_constrain) { m_bar->setMaxValue(m_composition->getBarNumber (m_composition->getEndMarker())); } else { m_bar->setMaxValue(9999); } m_bar->setValue(bar + 1); } else { m_barLabel->setText(QString("%1").arg(bar + 1)); } if (m_beat) { m_beat->setMinValue(1); m_beat->setMaxValue(timeSig.getBeatsPerBar()); m_beat->setValue(beat); } else { m_beatLabel->setText(QString("%1").arg(beat)); } if (m_fraction) { m_fraction->setMinValue(0); m_fraction->setMaxValue(timeSig.getBeatDuration() / Note(Note::Shortest). getDuration() - 1); m_fraction->setValue(hemidemis); } else { m_fractionLabel->setText(QString("%1").arg(hemidemis)); } m_timeSig->setText(i18n("(%1/%2 time)").arg(timeSig.getNumerator()). arg(timeSig.getDenominator())); RealTime rt = m_composition->getElapsedRealTime(m_time); if (m_sec) { m_sec->setMinValue(INT_MIN); if (m_constrain) { m_sec->setMaxValue(m_composition->getElapsedRealTime (m_composition->getEndMarker()).sec); } else { m_sec->setMaxValue(9999); } m_sec->setValue(rt.sec); } else { m_secLabel->setText(QString("%1").arg(rt.sec)); } if (m_msec) { m_msec->setMinValue(0); m_msec->setMaxValue(999); m_msec->setValue(rt.msec()); } else { m_msecLabel->setText(QString("%1").arg(rt.msec())); } } if (m_note) m_note ->blockSignals(false); if (m_timeT) m_timeT ->blockSignals(false); if (m_bar) m_bar ->blockSignals(false); if (m_beat) m_beat ->blockSignals(false); if (m_fraction) m_fraction ->blockSignals(false); if (m_sec) m_sec ->blockSignals(false); if (m_msec) m_msec ->blockSignals(false);}timeTTimeWidget::getTime(){ return m_time;}RealTimeTimeWidget::getRealTime(){ if (m_isDuration) { return m_composition->getRealTimeDifference(m_startTime, m_startTime + m_time); } else { return m_composition->getElapsedRealTime(m_time); }}voidTimeWidget::slotSetTime(timeT t){ bool change = (m_time != t); if (!change) return ; m_time = t; populate(); emit timeChanged(getTime()); emit realTimeChanged(getRealTime());}voidTimeWidget::slotSetRealTime(RealTime rt){ if (m_isDuration) { RealTime startRT = m_composition->getElapsedRealTime(m_startTime); if (rt >= RealTime::zeroTime) { slotSetTime(m_composition->getElapsedTimeForRealTime(startRT + rt) - m_startTime); } else { RG_DEBUG << "WARNING: TimeWidget::slotSetRealTime: rt must be >0 for duration widget (was " << rt << ")" << endl; } } else { slotSetTime(m_composition->getElapsedTimeForRealTime(rt)); }}voidTimeWidget::slotResetToDefault(){ slotSetTime(m_defaultTime);}voidTimeWidget::slotNoteChanged(int n){ if (n > 0) { slotSetTime(m_noteDurations[n]); }}voidTimeWidget::slotTimeTChanged(int t){ RG_DEBUG << "slotTimeTChanged: t is " << t << ", value is " << m_timeT->value() << endl; slotSetTime(t);}voidTimeWidget::slotBarBeatOrFractionChanged(int){ int bar = m_bar->value(); int beat = m_beat->value(); int fraction = m_fraction->value(); if (m_isDuration) { slotSetTime(m_composition->getDurationForMusicalTime (m_startTime, bar, beat, fraction, 0)); } else { slotSetTime(m_composition->getAbsoluteTimeForMusicalTime (bar, beat, fraction, 0)); }}voidTimeWidget::slotSecOrMSecChanged(int){ int sec = m_sec->value(); int msec = m_msec->value(); slotSetRealTime(RealTime(sec, msec * 1000000));}}#include "TimeWidget.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -