⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timewidget.cpp

📁 LINUX下的混音软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -