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

📄 editviewbase.cpp

📁 LINUX下的混音软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    m_needUpdate = false;    // Scan all segments and check if they've been modified.    //    // If we have more than one segment modified, we need to update    // them all at once with the same time range, otherwise we can run    // into problems when the layout of one depends on the others.  So    // we use updateStart/End to calculate a bounding range for all    // modifications.    timeT updateStart = 0, updateEnd = 0;    int segmentsToUpdate = 0;    Segment *singleSegment = 0;    for (unsigned int i = 0; i < m_segments.size(); ++i) {        Segment* segment = m_segments[i];        unsigned int refreshStatusId = m_segmentsRefreshStatusIds[i];        SegmentRefreshStatus &refreshStatus =            segment->getRefreshStatus(refreshStatusId);        if (refreshStatus.needsRefresh() && isCompositionModified()) {            // if composition is also modified, relayout everything            refreshSegment(0);            segmentsToUpdate = 0;            break;        } else if (m_timeSigNotifier->hasTimeSigChanged()) {            // not exactly optimal!            refreshSegment(0);            segmentsToUpdate = 0;            m_timeSigNotifier->reset();            break;        } else if (refreshStatus.needsRefresh()) {            timeT startTime = refreshStatus.from(),                              endTime = refreshStatus.to();            if (segmentsToUpdate == 0 || startTime < updateStart) {                updateStart = startTime;            }            if (segmentsToUpdate == 0 || endTime > updateEnd) {                updateEnd = endTime;            }            singleSegment = segment;            ++segmentsToUpdate;            refreshStatus.setNeedsRefresh(false);            m_needUpdate = true;        }    }    if (segmentsToUpdate > 1) {        refreshSegment(0, updateStart, updateEnd);    } else if (segmentsToUpdate > 0) {        refreshSegment(singleSegment, updateStart, updateEnd);    }    if (e)        KMainWindow::paintEvent(e);    // moved this to the end of the method so that things called    // from this method can still test whether the composition had    // been modified (it's sometimes useful to know whether e.g.    // any time signatures have changed)    setCompositionModified(false);    //!!!    m_inPaintEvent = false;    /*        if (m_havePendingPaintEvent) {    	e = m_pendingPaintEvent;    	m_havePendingPaintEvent = false;    	m_pendingPaintEvent = 0;    	paintEvent(e);    	delete e;        }    */}void EditViewBase::closeEvent(QCloseEvent* e){    RG_DEBUG << "EditViewBase::closeEvent()\n";    if (isInCtor()) {        RG_DEBUG << "EditViewBase::closeEvent() : is in ctor, ignoring close event\n";        e->ignore();    } else {        KMainWindow::closeEvent(e);    }}void EditViewBase::addCommandToHistory(KCommand *command){    getCommandHistory()->addCommand(command);}void EditViewBase::setTool(EditTool* tool){    if (m_tool)        m_tool->stow();    m_tool = tool;    if (m_tool)        m_tool->ready();}void EditViewBase::slotCloseWindow(){    close();}void EditViewBase::slotToggleToolBar(){    KTmpStatusMsg msg(i18n("Toggle the toolbar..."), this);    if (toolBar()->isVisible())        toolBar()->hide();    else        toolBar()->show();}void EditViewBase::slotToggleStatusBar(){    KTmpStatusMsg msg(i18n("Toggle the statusbar..."), this);    if (statusBar()->isVisible())        statusBar()->hide();    else        statusBar()->show();}void EditViewBase::slotStatusMsg(const QString &text){    ///////////////////////////////////////////////////////////////////    // change status message permanently    statusBar()->clear();    statusBar()->changeItem(text, ID_STATUS_MSG);}void EditViewBase::slotStatusHelpMsg(const QString &text){    ///////////////////////////////////////////////////////////////////    // change status message of whole statusbar temporary (text, msec)    statusBar()->message(text, 2000);}void EditViewBase::initSegmentRefreshStatusIds(){    for (unsigned int i = 0; i < m_segments.size(); ++i) {        unsigned int rid = m_segments[i]->getNewRefreshStatusId();        m_segmentsRefreshStatusIds.push_back(rid);    }}bool EditViewBase::isCompositionModified(){    return getDocument()->getComposition().getRefreshStatus           (m_compositionRefreshStatusId).needsRefresh();}void EditViewBase::setCompositionModified(bool c){    getDocument()->getComposition().getRefreshStatus    (m_compositionRefreshStatusId).setNeedsRefresh(c);}bool EditViewBase::getSegmentsOnlyRestsAndClefs(){    using Rosegarden::Segment;    for (unsigned int i = 0; i < m_segments.size(); ++i) {        Segment* segment = m_segments[i];        for (Segment::iterator iter = segment->begin();                iter != segment->end(); ++iter) {            if (((*iter)->getType() != Note::EventRestType)                    && ((*iter)->getType() != Clef::EventType))                return false;        }    }    return true;}void EditViewBase::toggleWidget(QWidget* widget,                                const QString& toggleActionName){    KToggleAction* toggleAction = getToggleAction(toggleActionName);    if (!toggleAction) {        RG_DEBUG << "!!! Unknown toggle action : " << toggleActionName << endl;        return ;    }    widget->setShown(toggleAction->isChecked());}voidEditViewBase::slotTestClipboard(){    if (getDocument()->getClipboard()->isEmpty()) {        RG_DEBUG << "EditViewBase::slotTestClipboard(): empty" << endl;        stateChanged("have_clipboard", KXMLGUIClient::StateReverse);        stateChanged("have_clipboard_single_segment",                     KXMLGUIClient::StateReverse);    } else {        RG_DEBUG << "EditViewBase::slotTestClipboard(): not empty" << endl;        stateChanged("have_clipboard", KXMLGUIClient::StateNoReverse);        stateChanged("have_clipboard_single_segment",                     (getDocument()->getClipboard()->isSingleSegment() ?                      KXMLGUIClient::StateNoReverse :                      KXMLGUIClient::StateReverse));    }}voidEditViewBase::slotToggleSolo(){    KToggleAction* toggleSoloAction = getToggleAction("toggle_solo");    if (!toggleSoloAction)        return ;    bool newSoloState = toggleSoloAction->isChecked();    RG_DEBUG << "EditViewBase::slotToggleSolo() : solo  = " << newSoloState << endl;    emit toggleSolo(newSoloState);    if (newSoloState) {        emit selectTrack(getCurrentSegment()->getTrack());    }}voidEditViewBase::slotStateChanged(const QString& s,                               bool noReverse){    RG_DEBUG << "EditViewBase::slotStateChanged " << s << ", " << noReverse << endl;    stateChanged(s, noReverse ? KXMLGUIClient::StateNoReverse : KXMLGUIClient::StateReverse);}voidEditViewBase::slotSetSegmentStartTime(){    Segment *s = getCurrentSegment();    if (!s)        return ;    TimeDialog dialog(this, i18n("Segment Start Time"),                      &getDocument()->getComposition(),                      s->getStartTime(), false);    if (dialog.exec() == QDialog::Accepted) {        SegmentReconfigureCommand *command =            new SegmentReconfigureCommand(i18n("Set Segment Start Time"));        command->addSegment        (s, dialog.getTime(),         s->getEndMarkerTime() - s->getStartTime() + dialog.getTime(),         s->getTrack());        addCommandToHistory(command);    }}voidEditViewBase::slotSetSegmentDuration(){    Segment *s = getCurrentSegment();    if (!s)        return ;    TimeDialog dialog(this, i18n("Segment Duration"),                      &getDocument()->getComposition(),                      s->getStartTime(),                      s->getEndMarkerTime() - s->getStartTime(), false);    if (dialog.exec() == QDialog::Accepted) {        SegmentReconfigureCommand *command =            new SegmentReconfigureCommand(i18n("Set Segment Duration"));        command->addSegment        (s, s->getStartTime(),         s->getStartTime() + dialog.getTime(),         s->getTrack());        addCommandToHistory(command);    }}void EditViewBase::slotCompositionStateUpdate(){    // update state of 'solo' toggle    //    KToggleAction* toggleSolo = getToggleAction("toggle_solo");    if (!toggleSolo)        return ;    if (getDocument()->getComposition().isSolo()) {        bool s = m_segments[0]->getTrack() == getDocument()->getComposition().getSelectedTrack();        RG_DEBUG << "EditViewBase::slotCompositionStateUpdate() : set solo to " << s << endl;        toggleSolo->setChecked(s);    } else {        toggleSolo->setChecked(false);        RG_DEBUG << "EditViewBase::slotCompositionStateUpdate() : set solo to false\n";    }    // update the window caption    //    updateViewCaption();}voidEditViewBase::windowActivationChange(bool oldState){    if (isActiveWindow()) {        emit windowActivated();    }}voidEditViewBase::handleEventRemoved(Event *event){    if (m_tool)        m_tool->handleEventRemoved(event);}MultiViewCommandHistory* EditViewBase::getCommandHistory(){    return getDocument()->getCommandHistory();}KToggleAction* EditViewBase::getToggleAction(const QString& actionName){    return dynamic_cast<KToggleAction*>(actionCollection()->action(actionName));}}#include "EditViewBase.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -