// 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); }
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(); } }
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); } } }
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; } } }