From cd531bd0a5317fd98dbec7ab3a145fc85f6efe88 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Fri, 25 Jun 2021 17:48:52 +0100 Subject: [PATCH] Tidy the model using const --- x26model.cpp | 357 +++++++++++++++++++++++++-------------------------- 1 file changed, 173 insertions(+), 184 deletions(-) diff --git a/x26model.cpp b/x26model.cpp index aec8f99..7bed1eb 100644 --- a/x26model.cpp +++ b/x26model.cpp @@ -49,17 +49,17 @@ int X26Model::columnCount(const QModelIndex & /*parent*/) const QVariant X26Model::data(const QModelIndex &index, int role) const { - int mode = m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).mode(); + const X26Triplet triplet = m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()); // Qt::UserRole will always return the raw values if (role == Qt::UserRole) switch (index.column()) { case 0: - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address(); + return triplet.address(); case 1: - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).mode(); + return triplet.mode(); case 2: - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data(); + return triplet.data(); default: return QVariant(); } @@ -69,49 +69,44 @@ QVariant X26Model::data(const QModelIndex &index, int role) const case 0: // Show row number only if address part of triplet actually represents a row // i.e. Full row colour, Set Active Position and Origin Modifier - if (!m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).isRowTriplet()) - return QVariant(); // For Origin Modifier address of 40 refers to same row, so show it as 0 - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).mode() == 0x10) { - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() == 40) + if (triplet.modeExt() == 0x10) { + if (triplet.address() == 40) return 0; else - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).addressRow(); + return triplet.addressRow(); } - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).mode() == 0x01 || m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).mode() == 0x04) - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).addressRow(); + if (triplet.modeExt() == 0x01 || triplet.modeExt() == 0x04) + return triplet.addressRow(); else return QVariant(); case 1: - if (!m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).isRowTriplet()) - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).addressColumn(); + if (!triplet.isRowTriplet()) + return triplet.addressColumn(); // For Set Active Position and Origin Modifier, data is the column - else if (mode == 0x04 || mode == 0x10) - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data(); + else if (triplet.modeExt() == 0x04 || triplet.modeExt() == 0x10) + return triplet.data(); else return QVariant(); } - if (!m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).isRowTriplet()) - mode |= 0x20; - QString result; if (role == Qt::DisplayRole) { if (index.column() == 2) - return (modeTripletName[mode]); + return (modeTripletName[triplet.modeExt()]); // Column 3 - describe effects of data/address triplet parameters in plain English - switch (mode) { + switch (triplet.modeExt()) { case 0x01: // Full row colour case 0x07: // Address row 0 - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60) == 0x60) + if ((triplet.data() & 0x60) == 0x60) result = ", down to bottom"; - else if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60) == 0x00) + else if ((triplet.data() & 0x60) == 0x00) result = ", this row only"; // fall-through case 0x00: // Full screen colour - if (!(result.isEmpty()) || (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60) == 0x00) { - result.prepend(QString("CLUT %1:%2").arg((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x18) >> 3).arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x07)); + if (!(result.isEmpty()) || (triplet.data() & 0x60) == 0x00) { + result.prepend(QString("CLUT %1:%2").arg((triplet.data() & 0x18) >> 3).arg(triplet.data() & 0x07)); return result; } break; @@ -120,9 +115,9 @@ QVariant X26Model::data(const QModelIndex &index, int role) const // For Set Active Position and Origin Modifier, data is the column, so return blank return QVariant(); case 0x11 ... 0x13: // Invoke object - switch (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x18) { + switch (triplet.address() & 0x18) { case 0x08: - return QString("Local: d%1 t%2").arg((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >> 4) | ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x01) << 3)).arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f); + return QString("Local: d%1 t%2").arg((triplet.data() >> 4) | ((triplet.address() & 0x01) << 3)).arg(triplet.data() & 0x0f); case 0x10: result = "POP"; break; @@ -131,15 +126,15 @@ QVariant X26Model::data(const QModelIndex &index, int role) const break; // case 0x00: shouldn't happen since that would make a column triplet, not a row triplet } - result.append(QString(": subpage %1 pkt %2 trplt %3 bits ").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f).arg((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x03) + 1).arg(((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60) >> 5) * 3 + (mode & 0x03))); - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x10) + result.append(QString(": subpage %1 pkt %2 trplt %3 bits ").arg(triplet.data() & 0x0f).arg((triplet.address() & 0x03) + 1).arg(((triplet.data() & 0x60) >> 5) * 3 + (triplet.modeExt() & 0x03))); + if (triplet.data() & 0x10) result.append("10-18"); else result.append("1-9"); return result; case 0x15 ... 0x17: // Define object - result = (QString("Local: d%1 t%2, ").arg((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >> 4) | ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 1) << 3)).arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f)); - switch (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x18) { + result = (QString("Local: d%1 t%2, ").arg((triplet.data() >> 4) | ((triplet.address() & 1) << 3)).arg(triplet.data() & 0x0f)); + switch (triplet.address() & 0x18) { case 0x08: result.append("L2.5 only"); break; @@ -153,9 +148,9 @@ QVariant X26Model::data(const QModelIndex &index, int role) const } return result; case 0x18: // DRCS mode - result = (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x40) == 0x40 ? "Normal" : "Global"; - result.append(QString(": subpage %1, ").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f)); - switch (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x30) { + result = (triplet.data() & 0x40) == 0x40 ? "Normal" : "Global"; + result.append(QString(": subpage %1, ").arg(triplet.data() & 0x0f)); + switch (triplet.data() & 0x30) { case 0x10: result.append("L2.5 only"); break; @@ -171,7 +166,7 @@ QVariant X26Model::data(const QModelIndex &index, int role) const } return result; case 0x1f: // Termination - switch (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x07) { + switch (triplet.data() & 0x07) { case 0x00: return "Intermed (G)POP subpage. End of object, more follows"; break; @@ -199,23 +194,23 @@ QVariant X26Model::data(const QModelIndex &index, int role) const } break; case 0x08 ... 0x0d: // PDC - return QString("0x%1").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data(), 2, 16, QChar('0')); + return QString("0x%1").arg(triplet.data(), 2, 16, QChar('0')); case 0x20: // Foreground colour case 0x23: // Background colour - if (!(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60)) - return QString("CLUT %1:%2").arg((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x18) >> 3).arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x07); + if (!(triplet.data() & 0x60)) + return QString("CLUT %1:%2").arg((triplet.data() & 0x18) >> 3).arg(triplet.data() & 0x07); break; case 0x21: // G1 mosaic character case 0x22: // G3 mosaic character at level 1.5 case 0x29: // G0 character case 0x2b: // G3 mosaic character at level >=2.5 case 0x2f ... 0x3f: // G2 character or G0 diacritical mark - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >= 0x20) - return QString("0x%1").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data(), 2, 16); + if (triplet.data() >= 0x20) + return QString("0x%1").arg(triplet.data(), 2, 16); break; case 0x27: // Flash functions - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() < 0x18) { - switch (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x03) { + if (triplet.data() < 0x18) { + switch (triplet.data() & 0x03) { case 0x00: result = "Steady"; break; @@ -229,7 +224,7 @@ QVariant X26Model::data(const QModelIndex &index, int role) const result = "Adj CLUT"; break; } - switch (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x1c) { + switch (triplet.data() & 0x1c) { case 0x00: result.append(", 1Hz"); break; @@ -254,20 +249,20 @@ QVariant X26Model::data(const QModelIndex &index, int role) const break; //TODO case 0x28: // G0 and G2 designation case 0x2c: // Display attributes - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x02) + if (triplet.data() & 0x02) result.append("Boxing "); - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x04) + if (triplet.data() & 0x04) result.append("Conceal "); - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x10) + if (triplet.data() & 0x10) result.append("Invert "); - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x20) + if (triplet.data() & 0x20) result.append("Underline "); if (result.isEmpty()) result = "None"; else // Chop off the last space result.chop(1); - switch (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x41) { + switch (triplet.data() & 0x41) { case 0x00: result.append(", normal size"); break; @@ -283,188 +278,185 @@ QVariant X26Model::data(const QModelIndex &index, int role) const } return result; case 0x2d: // DRCS character - result = (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x40) == 0x40 ? "Normal" : "Global"; - result.append(QString(": %1").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x3f)); + result = (triplet.data() & 0x40) == 0x40 ? "Normal" : "Global"; + result.append(QString(": %1").arg(triplet.data() & 0x3f)); return result; case 0x2e: // Font style - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x01) + if (triplet.data() & 0x01) result.append("Proportional "); - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x02) + if (triplet.data() & 0x02) result.append("Bold "); - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x04) + if (triplet.data() & 0x04) result.append("Italic "); if (result.isEmpty()) result = "None"; else // Chop off the last space result.chop(1); - result.append(QString(", %1 row(s)").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >> 4)); + result.append(QString(", %1 row(s)").arg(triplet.data() >> 4)); return result; case 0x28: // Modified G0 and G2 character set case 0x26: // PDC - return QString("0x%1").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data(), 2, 16, QChar('0')); + return QString("0x%1").arg(triplet.data(), 2, 16, QChar('0')); default: // Reserved - return QString("Reserved 0x%1").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data(), 2, 16, QChar('0')); + return QString("Reserved 0x%1").arg(triplet.data(), 2, 16, QChar('0')); } // Reserved mode or data - return QString("Reserved 0x%1").arg(m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data(), 2, 16, QChar('0')); + return QString("Reserved 0x%1").arg(triplet.data(), 2, 16, QChar('0')); } if (role == Qt::DecorationRole && index.column() == 3) - switch (mode) { + switch (triplet.modeExt()) { case 0x21: // G1 mosaic character - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x20) - return m_fontBitmap.rawBitmap()->copy((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data()-32)*12, 24*10, 12, 10); + if (triplet.data() & 0x20) + return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, 24*10, 12, 10); break; case 0x22: // G3 mosaic character at level 1.5 case 0x2b: // G3 mosaic character at level >=2.5 - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >= 0x20) - return m_fontBitmap.rawBitmap()->copy((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data()-32)*12, 26*10, 12, 10); + if (triplet.data() >= 0x20) + return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, 26*10, 12, 10); break; case 0x2f: // G2 character // TODO non-Latin G2 character sets - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >= 0x20) - return m_fontBitmap.rawBitmap()->copy((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data()-32)*12, 7*10, 12, 10); + if (triplet.data() >= 0x20) + return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, 7*10, 12, 10); break; case 0x29: // G0 character case 0x30 ... 0x3f: // G0 diacritical mark // TODO non-Latin G0 character sets - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >= 0x20) - return m_fontBitmap.rawBitmap()->copy((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data()-32)*12, 0, 12, 10); + if (triplet.data() >= 0x20) + return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, 0, 12, 10); break; }; - if (role == Qt::EditRole && index.column() == 2) { - if (!m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).isRowTriplet()) - mode |= 0x20; - return mode; - } + if (role == Qt::EditRole && index.column() == 2) + return triplet.modeExt(); switch (role) { case Qt::UserRole+1: - switch (mode) { + switch (triplet.modeExt()) { case 0x00: // Full screen colour case 0x01: // Full row colour case 0x07: // Address row 0 case 0x20: // Foreground colour case 0x23: // Background colour // Colour index - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x1f; + return triplet.data() & 0x1f; case 0x11 ... 0x13: // Invoke object // Object source: Local, POP or GPOP - return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x18) >> 3) - 1; + return ((triplet.address() & 0x18) >> 3) - 1; break; case 0x15 ... 0x17: // Define object // Required at which levels - return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x18) >> 3) - 1; + return ((triplet.address() & 0x18) >> 3) - 1; case 0x18: // DRCS mode // Required at which levels - return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x30) >> 4) - 1; + return ((triplet.data() & 0x30) >> 4) - 1; case 0x1f: // Termination // Intermed POP subpage|Last POP subpage|Local Object|Local enhance - return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x06) >> 1); + return ((triplet.data() & 0x06) >> 1); case 0x27: // Flash functions // Flash mode - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x03; + return triplet.data() & 0x03; case 0x2c: // Display attributes // Text size - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x01) | ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x40) >> 5); + return (triplet.data() & 0x01) | ((triplet.data() & 0x40) >> 5); case 0x2d: // DRCS character // Normal or Global - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x40) == 0x40; + return (triplet.data() & 0x40) == 0x40; case 0x2e: // Font style // Proportional - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x01) == 0x01; + return (triplet.data() & 0x01) == 0x01; default: - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data(); + return triplet.data(); } break; case Qt::UserRole+2: - switch (mode) { + switch (triplet.modeExt()) { case 0x01: // Full row colour case 0x07: // Address row 0 // "this row only" or "down to bottom" - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60) == 0x60; + return (triplet.data() & 0x60) == 0x60; case 0x11 ... 0x13: // Invoke object - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x08) == 0x08) + if ((triplet.address() & 0x08) == 0x08) // Local object: Designation code - return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x01) << 3) | ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x70) >> 4); + return ((triplet.address() & 0x01) << 3) | ((triplet.data() & 0x70) >> 4); else // (G)POP object: Subpage - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f; + return triplet.data() & 0x0f; break; case 0x15 ... 0x17: // Define object // Local object: Designation code - return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x01) << 3) | ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x70) >> 4); + return ((triplet.address() & 0x01) << 3) | ((triplet.data() & 0x70) >> 4); case 0x1f: // Termination // More follows/Last - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x01) == 0x01; + return (triplet.data() & 0x01) == 0x01; case 0x27: // Flash functions // Flash rate and phase - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >> 2; + return triplet.data() >> 2; case 0x2c: // Display attributes // Boxing/window - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x02) == 0x02; + return (triplet.data() & 0x02) == 0x02; case 0x2d: // DRCS character // Character number - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x3f; + return triplet.data() & 0x3f; case 0x2e: // Font style // Bold - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x02) == 0x02; + return (triplet.data() & 0x02) == 0x02; } break; case Qt::UserRole+3: - switch (mode) { + switch (triplet.modeExt()) { case 0x11 ... 0x13: // Invoke object - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x08) == 0x08) + if ((triplet.address() & 0x08) == 0x08) // Local object: Triplet number - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f; + return triplet.data() & 0x0f; else // (G)POP object: Pointer location - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x03) + 1; + return (triplet.address() & 0x03) + 1; break; case 0x15 ... 0x17: // Define object // Local object: Triplet number - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f; + return triplet.data() & 0x0f; case 0x18: // DRCS mode // Normal or Global - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x40) == 0x40; + return (triplet.data() & 0x40) == 0x40; case 0x2c: // Display attributes // Conceal - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x04) == 0x04; + return (triplet.data() & 0x04) == 0x04; case 0x2e: // Font style // Italics - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x04) == 0x04; + return (triplet.data() & 0x04) == 0x04; } break; case Qt::UserRole+4: - switch (mode) { + switch (triplet.modeExt()) { case 0x11 ... 0x13: // Invoke object // (G)POP object: Triplet number - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >> 5; + return triplet.data() >> 5; case 0x18: // DRCS mode // Subpage - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f; + return triplet.data() & 0x0f; case 0x2c: // Display attributes // Invert - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x10) == 0x10; + return (triplet.data() & 0x10) == 0x10; case 0x2e: // Font style // Number of rows - return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >> 4; + return triplet.data() >> 4; } break; case Qt::UserRole+5: - switch (mode) { + switch (triplet.modeExt()) { case 0x11 ... 0x13: // Invoke object // (G)POP object: Pointer position - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x10) >> 4; + return (triplet.data() & 0x10) >> 4; case 0x2c: // Display attributes // Underline/Separated - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x20) == 0x20; + return (triplet.data() & 0x20) == 0x20; } break; } @@ -477,31 +469,35 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role if (!index.isValid()) return false; + if (!value.canConvert()) + return false; + + const int intValue = value.toInt(); + + if (intValue < 0) + return false; + // Raw address, mode and data values - if (role == Qt::UserRole && value.canConvert() && index.column() <= 2) { - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), index.column(), 0x00, value.toInt(), role)); + if (role == Qt::UserRole && index.column() <= 2) { + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), index.column(), 0x00, intValue, role)); return true; } - int mode = m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).modeExt(); + const X26Triplet triplet = m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()); // Cooked row, column and triplet mode - if (role == Qt::EditRole && value.canConvert()) { - int intValue = value.toInt(); - if (intValue < 0) - return false; - + if (role == Qt::EditRole) { switch (index.column()) { case 0: // Cooked row // Maximum row is 24 if (intValue > 24) return false; // Set Active Position and Full Row Colour can't select row 0 - if (((mode == 0x04) || (mode == 0x01)) && intValue == 0) + if (((triplet.modeExt() == 0x04) || (triplet.modeExt() == 0x01)) && intValue == 0) return false; // For Origin Modifier address of 40 refers to same row - if (mode == 0x10 && intValue == 24) { + if (triplet.modeExt() == 0x10 && intValue == 24) { m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x00, 40, role)); return true; } @@ -511,22 +507,22 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role case 1: // Cooked column // Origin modifier allows columns up to 71 - if (intValue > (mode == 0x10 ? 71 : 39)) + if (intValue > (triplet.modeExt() == 0x10 ? 71 : 39)) return false; // For Set Active Position and Origin Modifier, data is the column - if (mode == 0x04 || mode == 0x10) + if (triplet.modeExt() == 0x04 || triplet.modeExt() == 0x10) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, intValue, role)); else m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x00, intValue, role)); return true; case 2: // Cooked triplet mode - if (intValue < 0x20 && !m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).isRowTriplet()) { + if (intValue < 0x20 && !triplet.isRowTriplet()) { // Changing mode from column triplet to row triplet m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x00, 41, role)); m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, 0, role)); } - if (intValue >= 0x20 && m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).isRowTriplet()) { + if (intValue >= 0x20 && triplet.isRowTriplet()) { // Changing mode from row triplet to column triplet m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x00, 0, role)); m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, 0, role)); @@ -542,27 +538,27 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role case 0x20: // Foreground colour case 0x23: // Background colour // Both S1 and S0 reserved bits must be clear - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60) + if (triplet.data() & 0x60) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1f, 0x00, role)); break; case 0x07: // Address row 0 // Address locked to 63 - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() != 63) + if (triplet.address() != 63) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x00, 63, role)); // fall-through case 0x01: // Full row colour // S1 and S0 bits need to be the same - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60) != 0x00 && (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x60) != 0x60) + if ((triplet.data() & 0x60) != 0x00 && (triplet.data() & 0x60) != 0x60) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1f, 0x00, role)); break; case 0x04: // Set Active Position // Data range 0-39 - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >= 40) + if (triplet.data() >= 40) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, 0, role)); break; case 0x10: // Origin modifier // Data range 0-71 - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >= 72) + if (triplet.data() >= 72) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, 0, role)); break; case 0x11: // Invoke Active Object @@ -572,24 +568,24 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role case 0x16: // Define Adaptive Object case 0x17: // Define Passive Object // Bit 3 of Address is reserved - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x04) == 0x04) + if ((triplet.address() & 0x04) == 0x04) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x7b, 0x00, role)); // BUG we're only dealing with Local Object Definitions at the moment! // If source is Local, triplet number must be in range 0-12 - if (((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x18) == 0x08) && ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f) >= 12)) + if (((triplet.address() & 0x18) == 0x08) && ((triplet.data() & 0x0f) >= 12)) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x70, 0x00, role)); break; case 0x18: // DRCS mode // At least one of the L1 and L0 bits must be set - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x30) == 0x00) + if ((triplet.data() & 0x30) == 0x00) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x4f, 0x30, role)); break; case 0x1f: // Termination marker // Address locked to 63 - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() != 63) + if (triplet.address() != 63) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x00, 63, role)); // Clear reserved bits D6-D3 - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x78) + if (triplet.data() & 0x78) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x07, 0x00, role)); break; case 0x21: // G1 mosaic character @@ -598,23 +594,23 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role case 0x2b: // G3 mosaic character at level >=2.5 case 0x2f ... 0x3f: // G2 character or G0 diacritical mark // Data range 0x20-0x7f - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() < 0x20) + if (triplet.data() < 0x20) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, 0x20, role)); break; case 0x27: // Additional flash functions // D6 and D5 must be clear, D4 and D3 set is reserved phase - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >= 0x18) + if (triplet.data() >= 0x18) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, 0, role)); break; case 0x28: // Display attributes case 0x2e: // Font style // Clear reserved bit D3 - if (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x08) + if (triplet.data() & 0x08) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x77, 0x00, role)); break; case 0x2d: // DRCS character // D5-D0 range 0-47 - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x3f) >= 48) + if ((triplet.data() & 0x3f) >= 48) m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x40, 0x77, role)); break; }; @@ -623,169 +619,162 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role return false; } - if (role <= Qt::UserRole || !value.canConvert()) - return false; - - int intValue = value.toInt(); - if (intValue < 0) - return false; - // Triplet data switch (role) { case Qt::UserRole+1: - switch (mode) { + switch (triplet.modeExt()) { case 0x01: // Full row colour case 0x07: // Address row 0 // Colour index - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x60, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x60, intValue, role)); break; case 0x11 ... 0x13: // Invoke object // Object source: Local, POP or GPOP - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x27, (value.toInt()+1) << 3, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x27, (intValue+1) << 3, role)); break; case 0x15 ... 0x17: // Define object // Required at which levels - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x27, (value.toInt()+1) << 3, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x27, (intValue+1) << 3, role)); break; case 0x18: // DRCS Mode // Required at which levels - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x4f, (value.toInt()+1) << 4, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x4f, (intValue+1) << 4, role)); break; case 0x1f: // Termination // Intermed POP subpage|Last POP subpage|Local Object|Local enhance - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x01, value.toInt() << 1, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x01, intValue << 1, role)); break; case 0x27: // Flash functions // Flash mode - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1c, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1c, intValue, role)); break; case 0x2c: // Display attributes // Text size - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x36, ((value.toInt() & 0x02) << 5) | (value.toInt() & 0x01), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x36, ((intValue & 0x02) << 5) | (intValue & 0x01), role)); break; case 0x2d: // DRCS character // Normal or Global - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x3f, value.toInt() << 6, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x3f, intValue << 6, role)); break; case 0x2e: // Font style // Proportional - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7e, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7e, intValue, role)); break; default: // Others set the complete data value - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x00, intValue, role)); } break; case Qt::UserRole+2: - switch (mode) { + switch (triplet.modeExt()) { case 0x00: // Full screen colour case 0x01: // Full row colour case 0x07: // Address row 0 // "this row only" or "down to bottom" - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1f, value.toInt() * 0x60, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1f, intValue * 0x60, role)); break; case 0x11 ... 0x13: // Invoke object - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x08) == 0x08) { + if ((triplet.address() & 0x08) == 0x08) { // Local object: Designation code - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x0f, (value.toInt() & 0x07) << 4, role)); - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x38, value.toInt() >> 3, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x0f, (intValue & 0x07) << 4, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x38, intValue >> 3, role)); } else // (G)POP object: Subpage - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x30, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x30, intValue, role)); break; case 0x15 ... 0x17: // Define object // Local object: Designation code - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x0f, (value.toInt() & 0x07) << 4, role)); - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x38, value.toInt() >> 3, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x0f, (intValue & 0x07) << 4, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x38, intValue >> 3, role)); break; case 0x1f: // Termination // More follows/Last - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x06, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x06, intValue, role)); break; case 0x27: // Flash functions // Flash rate and phase - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x03, value.toInt() << 2, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x03, intValue << 2, role)); break; case 0x2c: // Display attributes // Boxing/window - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7d, value.toInt() << 1, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7d, intValue << 1, role)); break; case 0x2d: // DRCS character // Character number - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x40, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x40, intValue, role)); break; case 0x2e: // Font style // Bold - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7d, value.toInt() << 1, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7d, intValue << 1, role)); break; } break; case Qt::UserRole+3: - switch (mode) { + switch (triplet.modeExt()) { case 0x11 ... 0x13: // Invoke object - if ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x08) == 0x08) + if ((triplet.address() & 0x08) == 0x08) // Local object: triplet number - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x70, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x70, intValue, role)); else // (G)POP object: Pointer location - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x7c, value.toInt() - 1, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x7c, intValue - 1, role)); break; case 0x15 ... 0x17: // Define object // Local object: triplet number - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x70, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x70, intValue, role)); break; case 0x18: // DRCS Mode // Normal or Global - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x3f, value.toInt() << 6, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x3f, intValue << 6, role)); break; case 0x2c: // Display attributes // Conceal - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7b, value.toInt() << 2, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7b, intValue << 2, role)); break; case 0x2e: // Font style // Italics - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7b, value.toInt() << 2, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x7b, intValue << 2, role)); break; } break; case Qt::UserRole+4: - switch (mode) { + switch (triplet.modeExt()) { case 0x11 ... 0x13: // Invoke object // (G)POP object: Triplet number - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1f, value.toInt() << 5, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1f, intValue << 5, role)); break; case 0x18: // DRCS Mode // Subpage - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x70, value.toInt(), role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x70, intValue, role)); break; case 0x2c: // Display attributes // Invert - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x6f, value.toInt() << 4, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x6f, intValue << 4, role)); break; case 0x2e: // Font style // Number of rows - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x07, value.toInt() << 4, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x07, intValue << 4, role)); break; } break; case Qt::UserRole+5: - switch (mode) { + switch (triplet.modeExt()) { case 0x11 ... 0x13: // Invoke object // (G)POP object: Pointer position - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x6f, value.toInt() << 4, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x6f, intValue << 4, role)); break; case 0x2c: // Display attributes // Underline/Separated - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x5f, value.toInt() << 5, role)); + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x5f, intValue << 5, role)); break; } break; } - return true; + return false; } QVariant X26Model::headerData(int section, Qt::Orientation orientation, int role) const