void AddressRangeTest::testSetGetWidth() { AddressRange addressRange; // end, width by width addressRange.setStart( Start ); addressRange.setEndByWidth( Width ); QCOMPARE( addressRange.end(), End ); QCOMPARE( addressRange.width(), Width ); // start, width by width addressRange.setEnd( End ); addressRange.setStartByWidth( Width ); QCOMPARE( addressRange.start(), Start ); QCOMPARE( addressRange.width(), Width ); }
void AddressRangeTest::testConstructorByWidth() { AddressRange addressRange = AddressRange::fromWidth( Start, Width ); QCOMPARE( addressRange.start(), Start ); QCOMPARE( addressRange.end(), End ); QCOMPARE( addressRange.width(), Width ); addressRange = AddressRange::fromWidth( Width ); QCOMPARE( addressRange.start(), 0 ); QCOMPARE( addressRange.end(), Width-1 ); QCOMPARE( addressRange.width(), Width ); }
void Dropper::handleInternalDrag( QDropEvent* dropEvent, AbstractByteArrayView* sourceByteArrayView ) { // get drag origin AddressRange selection = sourceByteArrayView->tableRanges()->removeSelection(); ByteArrayTableCursor* tableCursor = mByteArrayView->tableCursor(); AbstractByteArrayModel* byteArrayModel = mByteArrayView->byteArrayModel(); Address insertIndex = tableCursor->realIndex(); // is this a move? if( dropEvent->proposedAction() == Qt::MoveAction ) { // ignore the copy hold in the event but only move Address newCursorIndex; // need to swap? if( selection.end() < insertIndex ) { newCursorIndex = insertIndex; const Address firstIndex = selection.start(); selection.set( selection.nextBehindEnd(), insertIndex-1 ); insertIndex = firstIndex; } else newCursorIndex = insertIndex + selection.width(); const bool success = byteArrayModel->swap( insertIndex, selection ); if( success ) { tableCursor->gotoCIndex( newCursorIndex ); emit mByteArrayView->cursorPositionChanged( tableCursor->realIndex() ); } } // is a copy else { // TODO: should this be a method of AbstractByteArrayModel, to reuse piece data? // get data const QByteArray data = dropEvent->mimeData()->data( QLatin1String(DropperOctetStreamFormatName) ); if( !data.isEmpty() ) { if( mByteArrayView->isOverwriteMode() ) { const Size length = mByteArrayView->layout()->length(); if( !tableCursor->isBehind() && length > 0 ) { AddressRange overwriteRange = AddressRange::fromWidth( insertIndex, data.size() ); overwriteRange.restrictEndTo( length-1 ); if( overwriteRange.isValid() ) byteArrayModel->replace( overwriteRange, reinterpret_cast<const Byte*>(data.constData()), overwriteRange.width() ); } } else byteArrayModel->insert( insertIndex, reinterpret_cast<const Byte*>(data.constData()), data.size() ); } } }