void YSelection::addInterval( const YInterval& i ) { bool containsFrom; bool containsTo; unsigned int idFrom = locatePosition( i.from(), &containsFrom ); unsigned int idTo = locatePosition( i.to(), &containsTo ); if ( containsFrom && containsTo ) { if ( idFrom != idTo ) { mMap[ idFrom ].setTo( mMap[ idTo ].to() ); removeInterval( idFrom + 1, idTo - idFrom ); } } else if ( containsFrom ) { mMap[ idFrom ].setTo( i.to() ); removeInterval( idFrom + 1, idTo - idFrom - 1 ); } else if ( containsTo ) { mMap[ idTo ].setFrom( i.from() ); removeInterval( idFrom, idTo - idFrom ); } else if ( idTo != idFrom ) { mMap[ idFrom ].setFrom( i.from() ); mMap[ idFrom ].setTo( i.to() ); removeInterval( idFrom + 1, idTo - idFrom ); } else { insertInterval( idFrom, i ); } }
void YSelection::delInterval( const YInterval& i ) { bool containsFrom; bool containsTo; unsigned int idFrom = locatePosition( i.from(), &containsFrom ); unsigned int idTo = locatePosition( i.to(), &containsTo ); if ( idFrom == idTo && !containsFrom && !containsTo ) return ; // dbg() << "delInterval: from=" << idFrom << "," << containsFrom << "; to=" << idTo << "," << containsTo << endl; if ( containsFrom && i.from() <= mMap[ idFrom ].from() ) { containsFrom = false; } if ( containsTo && i.to() >= mMap[ idTo ].to() ) { ++idTo; containsTo = false; } if ( containsTo && containsFrom && idFrom == idTo ) { ++idTo; insertInterval( idTo, mMap[ idFrom ] ); } if ( containsFrom ) mMap[ idFrom ].setTo( YBound(i.from().pos(), !i.from().opened()) ); if ( containsTo ) mMap[ idTo ].setFrom( YBound(i.to().pos(), !i.to().opened()) ); removeInterval( idFrom + (containsFrom ? 1 : 0), idTo - idFrom - (containsFrom && containsTo ? 1 : 0) ); }
QTransferFunctionEditorByValues::QTransferFunctionEditorByValues(QWidget *parent) : QTransferFunctionEditor(parent) { setupUi(this); // Creem una scroll area per si hi ha molts intervals (no es pot crear des del Qt Designer) QScrollArea *scrollArea = new QScrollArea(this); qobject_cast<QBoxLayout*>(this->layout())->insertWidget(1, scrollArea); m_intervalEditorsWidget = new QWidget(scrollArea); QBoxLayout *layout = new QVBoxLayout(m_intervalEditorsWidget); m_intervalEditorsLayout = new QVBoxLayout(); layout->addLayout(m_intervalEditorsLayout); layout->addStretch(); layout->setMargin(0); scrollArea->setWidget(m_intervalEditorsWidget); scrollArea->setWidgetResizable(true); scrollArea->setFrameShape(QFrame::NoFrame); // Creem el primer interval QTransferFunctionIntervalEditor *first = new QTransferFunctionIntervalEditor(m_intervalEditorsWidget); first->setIsFirst(true); first->setIsLast(true); first->setObjectName("interval0"); m_intervalEditorsLayout->addWidget(first); connect(first, SIGNAL(startChanged(int)), SLOT(markAsChanged())); connect(first, SIGNAL(endChanged(int)), SLOT(markAsChanged())); connect(first, SIGNAL(colorChanged(const QColor&)), SLOT(markAsChanged())); // Mida mínima de la scroll area QStyle *style = scrollArea->style(); int scrollBarWidth = style->pixelMetric(QStyle::PM_ScrollBarExtent); scrollArea->setMinimumWidth(first->minimumSizeHint().width() + scrollBarWidth); m_numberOfIntervals = 1; m_changed = true; connect(m_addPushButton, SIGNAL(clicked()), SLOT(addInterval())); connect(m_removePushButton, SIGNAL(clicked()), SLOT(removeInterval())); connect(m_nameLineEdit, SIGNAL(textChanged(const QString&)), SLOT(markAsChanged())); }
/*! \fn QMediaTimeRange::operator-=(const QMediaTimeInterval &interval) Removes the specified \a interval from the time range and returns the result. \since 1.0 */ QMediaTimeRange& QMediaTimeRange::operator-=(const QMediaTimeInterval &interval) { removeInterval(interval); return *this; }