// Return the active ruler's event selection, or NULL if none.
// @author Tom Breton (Tehom)
EventSelection *
ControlRulerWidget::getSelection(void)
{
    ControllerEventsRuler *ruler = getActiveRuler();
    if (!ruler) { return 0; }
    return ruler->getEventSelection();
}
ControlParameter *
ControlRulerWidget::getControlParameter(void)
{
    ControllerEventsRuler *ruler = getActiveRuler();
    if (!ruler) { return 0; }
    return ruler->getControlParameter();
}
bool
ControlRulerWidget::hasSelection(void)
{
    ControllerEventsRuler *ruler = getActiveRuler();
    if (!ruler) { return false; }
    return ruler->getEventSelection() ? true : false;
}
// @return the active ruler's parameter situation, or NULL if none.
// Return is owned by caller.
// @author Tom Breton (Tehom)
SelectionSituation *
ControlRulerWidget::getSituation(void)
{
    ControllerEventsRuler *ruler = getActiveRuler();
    if (!ruler) { return 0; }
    EventSelection * selection = ruler->getEventSelection();
    if (!selection) { return 0; }
    ControlParameter * cp = ruler->getControlParameter();
    if (!cp) { return 0; }
    return
        new SelectionSituation(cp->getType(), selection);
}
void EventControlItem::updateSegment()
{
    // This implementation for code simplicity - it is not efficient for control modification but I don't think this matters
    // If this item already has an event, erase it
    ControllerEventsRuler *ruler = static_cast<ControllerEventsRuler *> (m_controlRuler);

    if (m_event) {
        ruler->eraseEvent(m_event);
    }
    // Make a new event
    setEvent(ruler->insertEvent(m_xstart, m_y));

////    m_element->event()->set<Int>(m_propertyname,(int)(m_y*MIDI_CONTROL_MAX_VALUE));
//    long value = m_controlRuler->YToValue(m_y);
//    m_eventAdapter->setValue(value);
//    timeT time = m_controlRuler->getRulerScale()->getTimeForX(m_xstart);
//    ///TODO Update segment properly m_eventAdapter->setTime(time);
}
Beispiel #6
0
void
ControlEraser::handleLeftButtonPress(const ControlMouseEvent *e)
{
    if (!e->itemList.size()) return;

    ControllerEventsRuler *ruler = static_cast <ControllerEventsRuler*> (m_ruler);
    std::vector <ControlItem*>::const_iterator it;
    // If any of the covered items is selected, delete entire selection
    for (it = e->itemList.begin(); it != e->itemList.end(); ++it) {
        if ((*it)->isSelected()) {
            ruler->eraseControllerEvent();
            break;
        }
    }

    if (it == e->itemList.end()) {
        it = e->itemList.begin();
        ruler->clearSelectedItems();
        ruler->addToSelection(*it);
        ruler->eraseControllerEvent();
    }
}
Beispiel #7
0
ControlTool::FollowMode
ControlPainter::handleMouseMove(const ControlMouseEvent *e)
{
    ControllerEventsRuler* ruler = dynamic_cast <ControllerEventsRuler*>(m_ruler);

    if (ruler) {
        if (e->modifiers & Qt::ShiftModifier) {

            if (m_controlLineOrigin.first != -1 && m_controlLineOrigin.second != -1) {
                ruler->drawRubberBand(m_controlLineOrigin.first,
                                      m_controlLineOrigin.second,
                                      e->x,
                                      e->y);
            }
        } else {
            ruler->stopRubberBand();
        }
    }
    
    // not sure what any of this is about; had to match the return type used
    // elsewhere, and have made no investigation into what any of it means
    return ControlTool::NoFollow;
}
void
ControlRulerWidget::slotToggleControlRuler(std::string controlName)
{
    if (!m_controlList) return;

    ControlList::const_iterator it;
    // Check that the device supports a control parameter of this name
    for (it = m_controlList->begin();
        it != m_controlList->end(); ++it) {
        if ((*it).getName() == controlName) {
            break;
        }
    }

    // If we found this control name in the list for this device
    if (it != m_controlList->end()) {
        // Check whether we already have a control ruler for a control parameter of this name
        ControllerEventsRuler *eventruler;
        std::list<ControlRuler*>::iterator jt;
        for (jt = m_controlRulerList.begin(); jt != m_controlRulerList.end(); ++jt) {
            eventruler = dynamic_cast <ControllerEventsRuler*> (*jt);
            if (eventruler) {
                if (eventruler->getControlParameter()->getName() == controlName)
                {
                    // We already have a ruler for this control
                    // Delete it
                    removeRuler(jt);
                    break;
                }
            }
        }
        // If we don't have a control ruler, make one now
        if (jt == m_controlRulerList.end()) {
            slotAddControlRuler(*it);
        }
    }
}
Beispiel #9
0
void
ControlPainter::handleLeftButtonPress(const ControlMouseEvent *e)
{
    if (e->itemList.size()) {
        ControllerEventsRuler *ruler = static_cast <ControllerEventsRuler*> (m_ruler);
        std::vector <ControlItem*>::const_iterator it = e->itemList.begin();
        ruler->clearSelectedItems();
        ruler->addToSelection(*it);
        ruler->eraseControllerEvent();

        m_ruler->setCursor(Qt::CrossCursor);
    }
    else {
        // Make new control event here
        // This tool should not be applied to a PropertyControlRuler but in case it is
        ControllerEventsRuler* ruler = dynamic_cast <ControllerEventsRuler*>(m_ruler);
        //if (ruler) ruler->insertControllerEvent(e->x,e->y);
        if (ruler) {

            // If shift was pressed, draw a line of controllers between the new
            // control event and the previous one
            if (e->modifiers & Qt::ShiftModifier) {

                // if Ctrl was pressed, do not erase existing controllers
                bool eraseExistingControllers = !(e->modifiers & Qt::ControlModifier);

                // if no origin point was set, do not draw a line
                if (m_controlLineOrigin.first != -1 && m_controlLineOrigin.second != -1) {
                    ruler->addControlLine(m_controlLineOrigin.first,
                                          m_controlLineOrigin.second,
                                          e->x,
                                          e->y,
                                          eraseExistingControllers);
                }
            } else {

                ControlItem *item = ruler->addControlItem(e->x,e->y);
                ControlMouseEvent *newevent = new ControlMouseEvent(e);
                newevent->itemList.push_back(item);
                m_overItem = true;
                ControlMover::handleLeftButtonPress(newevent);
            }

            // Save these coordinates for next time
            m_controlLineOrigin.first = e->x;
            m_controlLineOrigin.second = e->y;
        }
    }
 
}