diff --git a/x26dockwidget.cpp b/x26dockwidget.cpp index f784bd2..7cbfa73 100644 --- a/x26dockwidget.cpp +++ b/x26dockwidget.cpp @@ -1036,9 +1036,11 @@ void X26DockWidget::insertTriplet(int modeExt, bool after) { QModelIndex index = m_x26View->currentIndex(); X26Triplet newTriplet(modeExt < 0x20 ? 41 : 0, modeExt & 0x1f, 0); - int row; + int newListRow; if (index.isValid()) { + newListRow = index.row()+after; + // If we're inserting a column triplet next to another column triplet, // duplicate the column number // Avoid the PDC and reserved mode triplets @@ -1048,9 +1050,26 @@ void X26DockWidget::insertTriplet(int modeExt, bool after) if (existingTripletModeExt >= 0x20 && existingTripletModeExt != 0x24 && existingTripletModeExt != 0x25 && existingTripletModeExt != 0x26 && existingTripletModeExt != 0x2a) newTriplet.setAddress(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole).toInt()); } - row = index.row()+after; + // If we're inserting a Set Active Position or Full Row Colour triplet, + // look for a previous row setting triplet and set this one to the row after + if (modeExt == 0x04 || modeExt == 0x01) { + for (int i=newListRow-1; i>=0; i--) { + const int scanTripletModeExt = index.model()->data(index.model()->index(i, 2), Qt::EditRole).toInt(); + + if (scanTripletModeExt == 0x04 || scanTripletModeExt == 0x01) { + const int scanActivePositionRow = index.model()->data(index.model()->index(i, 0), Qt::EditRole).toInt()+1; + + if (scanActivePositionRow < 25) + newTriplet.setAddressRow(scanActivePositionRow); + else + newTriplet.setAddressRow(24); + + break; + } + } + } } else - row = 0; + newListRow = 0; // For character triplets, ensure Data is not reserved if (modeExt == 0x21 || modeExt == 0x22 || modeExt == 0x29 || modeExt == 0x2b || modeExt >= 0x2f) @@ -1061,7 +1080,7 @@ void X26DockWidget::insertTriplet(int modeExt, bool after) newTriplet.setData(7); } - m_x26Model->insertRows(row, 1, QModelIndex(), newTriplet); + m_x26Model->insertRows(newListRow, 1, QModelIndex(), newTriplet); } void X26DockWidget::insertTripletCopy()