diff --git a/decode.cpp b/decode.cpp index e287bd2..0fa3b36 100644 --- a/decode.cpp +++ b/decode.cpp @@ -466,8 +466,8 @@ void TeletextPageDecode::decodeRow(int r) if (c == 0 || c == 40 || c == 56) { level1CharSet = m_level1DefaultCharSet; - m_level1ActivePainter.g0CharSet = m_g0CharacterMap.value(m_defaultG0andG2, 0); - m_level1ActivePainter.g2CharSet = m_g2CharacterMap.value(m_defaultG0andG2, 7); + m_level1ActivePainter.result.g0Set = m_g0CharacterMap.value(m_defaultG0andG2, 0); + m_level1ActivePainter.result.g2Set = m_g2CharacterMap.value(m_defaultG0andG2, 7); m_level1ActivePainter.attribute.flash.mode = 0; m_level1ActivePainter.attribute.flash.ratePhase = 0; @@ -661,12 +661,12 @@ void TeletextPageDecode::decodeRow(int r) break; case 0x28: // Modified G0 and G2 character set designation if (m_level == 3 || triplet.data() == m_defaultG0andG2 || triplet.data() == m_secondG0andG2) { - painter->g0CharSet = m_g0CharacterMap.value(triplet.data(), 0); - painter->g2CharSet = m_g2CharacterMap.value(triplet.data(), 7); + painter->result.g0Set = m_g0CharacterMap.value(triplet.data(), 0); + painter->result.g2Set = m_g2CharacterMap.value(triplet.data(), 7); } else if (m_secondG0andG2 == -1) { m_secondG0andG2 = triplet.data(); - painter->g0CharSet = m_g0CharacterMap.value(triplet.data(), 0); - painter->g2CharSet = m_g2CharacterMap.value(triplet.data(), 7); + painter->result.g0Set = m_g0CharacterMap.value(triplet.data(), 0); + painter->result.g2Set = m_g2CharacterMap.value(triplet.data(), 7); } break; case 0x2c: // Display attributes @@ -754,9 +754,9 @@ void TeletextPageDecode::decodeRow(int r) if (result.code != 0x00) { m_level1ActivePainter.result.character = result; if (result.set == 0) - m_level1ActivePainter.result.character.set = m_level1ActivePainter.g0CharSet; + m_level1ActivePainter.result.character.set = m_level1ActivePainter.result.g0Set; else if (result.set == 2) - m_level1ActivePainter.result.character.set = m_level1ActivePainter.g2CharSet; + m_level1ActivePainter.result.character.set = m_level1ActivePainter.result.g2Set; x26Character = 1; } } else if (m_level >= 2) @@ -779,10 +779,10 @@ void TeletextPageDecode::decodeRow(int r) painter->result.character = result; switch (result.set) { case 0: - painter->result.character.set = painter->g0CharSet; + painter->result.character.set = painter->result.g0Set; break; case 2: - painter->result.character.set = painter->g2CharSet; + painter->result.character.set = painter->result.g2Set; break; case 24: if (painter->attribute.display.underlineSeparated) diff --git a/decode.h b/decode.h index 80d4e39..2ef35eb 100644 --- a/decode.h +++ b/decode.h @@ -46,6 +46,8 @@ public: unsigned char cellCharacterCode(int r, int c) const { return m_cell[r][c].character.code; }; int cellCharacterSet(int r, int c) const { return m_cell[r][c].character.set; }; int cellCharacterDiacritical(int r, int c) const { return m_cell[r][c].character.diacritical; }; + int cellG0CharacterSet(int r, int c) const { return m_cell[r][c].g0Set; }; + int cellG2CharacterSet(int r, int c) const { return m_cell[r][c].g2Set; }; int cellForegroundCLUT(int r, int c) const { return m_cell[r][c].attribute.foregroundCLUT; }; int cellBackgroundCLUT(int r, int c) const { return m_cell[r][c].attribute.backgroundCLUT; }; QColor cellForegroundQColor(int, int); @@ -164,6 +166,8 @@ private: textCharacter character; textAttributes attribute; CharacterFragment fragment=NormalSize; + int g0Set=0; + int g2Set=7; }; friend inline bool operator!=(const textCell &lhs, const textCell &rhs) @@ -179,9 +183,6 @@ private: textCell rightHalfCell; textCell bottomHalfCell[72]; - int g0CharSet=0; - int g2CharSet=7; - int styleSpreadRows=0; int setProportionalRows[72], clearProportionalRows[72]; int setBoldRows[72], clearBoldRows[72]; diff --git a/x26model.cpp b/x26model.cpp index b92a23f..942b913 100644 --- a/x26model.cpp +++ b/x26model.cpp @@ -368,13 +368,16 @@ QVariant X26Model::data(const QModelIndex &index, int role) const if (triplet.data() >= 0x20) return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, 26*10, 12, 10); break; - case 0x29: // G0 character case 0x2f: // G2 character + if (triplet.data() >= 0x20) + return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, m_parentMainWidget->pageDecode()->cellG2CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())*10, 12, 10); + break; + case 0x29: // G0 character case 0x30 ... 0x3f: // G0 diacritical mark if (triplet.data() >= 0x20) - return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, m_parentMainWidget->pageDecode()->cellCharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())*10, 12, 10); + return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())*10, 12, 10); break; - }; + } if (role == Qt::EditRole && index.column() == 2) return triplet.modeExt(); @@ -488,12 +491,16 @@ QVariant X26Model::data(const QModelIndex &index, int role) const return triplet.data() >> 4; } break; - case 0x29: // G0 character case 0x2f: // G2 character + // Qt::UserRole+1 is character number, returned by default below + if (role == Qt::UserRole+2) // Character set + return m_parentMainWidget->pageDecode()->cellG2CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()); + break; + case 0x29: // G0 character case 0x30 ... 0x3f: // G0 diacritical mark // Qt::UserRole+1 is character number, returned by default below if (role == Qt::UserRole+2) // Character set - return m_parentMainWidget->pageDecode()->cellCharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()); + return m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()); break; };