Highlight reserved mode and data in X/26 triplet list
This commit is contained in:
16
x26model.cpp
16
x26model.cpp
@@ -65,11 +65,19 @@ QVariant X26Model::data(const QModelIndex &index, int role) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Error colours from KDE Plasma Breeze (light) theme
|
// Error colours from KDE Plasma Breeze (light) theme
|
||||||
if (role == Qt::ForegroundRole && triplet.error() != X26Triplet::NoError && index.column() == m_tripletErrors[triplet.error()].columnHighlight)
|
if (role == Qt::ForegroundRole) {
|
||||||
return QColor(252, 252, 252);
|
if (triplet.error() != X26Triplet::NoError && index.column() == m_tripletErrors[triplet.error()].columnHighlight)
|
||||||
|
return QColor(252, 252, 252);
|
||||||
|
else if ((index.column() == 2 && triplet.reservedMode()) || (index.column() == 3 && triplet.reservedData()))
|
||||||
|
return QColor(35, 38, 39);
|
||||||
|
}
|
||||||
|
|
||||||
if (role == Qt::BackgroundRole && triplet.error() != X26Triplet::NoError && index.column() == m_tripletErrors[triplet.error()].columnHighlight)
|
if (role == Qt::BackgroundRole) {
|
||||||
return QColor(218, 68, 63);
|
if (triplet.error() != X26Triplet::NoError && index.column() == m_tripletErrors[triplet.error()].columnHighlight)
|
||||||
|
return QColor(218, 68, 63);
|
||||||
|
else if ((index.column() == 2 && triplet.reservedMode()) || (index.column() == 3 && triplet.reservedData()))
|
||||||
|
return QColor(246, 116, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (role == Qt::ToolTipRole && triplet.error() != X26Triplet::NoError)
|
if (role == Qt::ToolTipRole && triplet.error() != X26Triplet::NoError)
|
||||||
return m_tripletErrors[triplet.error()].message;
|
return m_tripletErrors[triplet.error()].message;
|
||||||
|
|||||||
@@ -77,30 +77,45 @@ void X26TripletList::updateInternalData()
|
|||||||
for (int i=0; i < m_list.size(); i++) {
|
for (int i=0; i < m_list.size(); i++) {
|
||||||
triplet = &m_list[i];
|
triplet = &m_list[i];
|
||||||
triplet->m_error = X26Triplet::NoError;
|
triplet->m_error = X26Triplet::NoError;
|
||||||
|
triplet->m_reservedMode = false;
|
||||||
|
triplet->m_reservedData = false;
|
||||||
|
|
||||||
if (triplet->isRowTriplet()) {
|
if (triplet->isRowTriplet()) {
|
||||||
switch (triplet->modeExt()) {
|
switch (triplet->modeExt()) {
|
||||||
case 0x00: // Full screen colour
|
case 0x00: // Full screen colour
|
||||||
if (activePosition.isDeployed())
|
if (activePosition.isDeployed())
|
||||||
// TODO more specific error needed
|
// TODO more specific error needed
|
||||||
triplet->m_error = X26Triplet::ActivePositionMovedUp;
|
triplet->m_error = X26Triplet::ActivePositionMovedUp;
|
||||||
|
if (triplet->m_data & 0x60)
|
||||||
|
triplet->m_reservedData = true;
|
||||||
break;
|
break;
|
||||||
case 0x01: // Full row colour
|
case 0x01: // Full row colour
|
||||||
if (!activePosition.setRow(triplet->addressRow()))
|
if (!activePosition.setRow(triplet->addressRow()))
|
||||||
triplet->m_error = X26Triplet::ActivePositionMovedUp;
|
triplet->m_error = X26Triplet::ActivePositionMovedUp;
|
||||||
|
if ((triplet->m_data & 0x60) != 0x00 && (triplet->m_data & 0x60) != 0x60)
|
||||||
|
triplet->m_reservedData = true;
|
||||||
break;
|
break;
|
||||||
case 0x04: // Set Active Position;
|
case 0x04: // Set Active Position;
|
||||||
if (!activePosition.setRow(triplet->addressRow()))
|
if (!activePosition.setRow(triplet->addressRow()))
|
||||||
triplet->m_error = X26Triplet::ActivePositionMovedUp;
|
triplet->m_error = X26Triplet::ActivePositionMovedUp;
|
||||||
else if (triplet->data() >= 40 || !activePosition.setColumn(triplet->data()))
|
else if (triplet->data() >= 40)
|
||||||
|
// FIXME data column highlighted?
|
||||||
|
triplet->m_reservedData = true;
|
||||||
|
else if (!activePosition.setColumn(triplet->data()))
|
||||||
triplet->m_error = X26Triplet::ActivePositionMovedLeft;
|
triplet->m_error = X26Triplet::ActivePositionMovedLeft;
|
||||||
break;
|
break;
|
||||||
case 0x07: // Address row 0
|
case 0x07: // Address row 0
|
||||||
if (activePosition.isDeployed())
|
if (triplet->m_address != 63)
|
||||||
|
// FIXME data column highlighted?
|
||||||
|
triplet->m_reservedData = true;
|
||||||
|
else if (activePosition.isDeployed())
|
||||||
triplet->m_error = X26Triplet::ActivePositionMovedUp;
|
triplet->m_error = X26Triplet::ActivePositionMovedUp;
|
||||||
else {
|
else {
|
||||||
activePosition.setRow(0);
|
activePosition.setRow(0);
|
||||||
activePosition.setColumn(8);
|
activePosition.setColumn(8);
|
||||||
}
|
}
|
||||||
|
if ((triplet->m_data & 0x60) != 0x00 && (triplet->m_data & 0x60) != 0x60)
|
||||||
|
triplet->m_reservedData = true;
|
||||||
break;
|
break;
|
||||||
case 0x10: // Origin Modifier
|
case 0x10: // Origin Modifier
|
||||||
if (i == m_list.size()-1 ||
|
if (i == m_list.size()-1 ||
|
||||||
@@ -125,11 +140,45 @@ void X26TripletList::updateInternalData()
|
|||||||
// otherwise the object won't appear
|
// otherwise the object won't appear
|
||||||
triplet->setObjectLocalIndex(i);
|
triplet->setObjectLocalIndex(i);
|
||||||
break;
|
break;
|
||||||
|
case 0x18: // DRCS mode
|
||||||
|
if ((triplet->m_data & 0x30) == 0x00)
|
||||||
|
triplet->m_reservedData = true;
|
||||||
|
case 0x1f: // Termination marker
|
||||||
|
case 0x08 ... 0x0d: // PDC
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
triplet->m_reservedMode = true;
|
||||||
};
|
};
|
||||||
// Column triplet: make sure that PDC and reserved triplets don't affect the Active Position
|
// Column triplet: all triplets modes except PDC and reserved move the Active Position
|
||||||
} else if (triplet->modeExt() != 0x24 && triplet->modeExt() != 0x25 && triplet->modeExt() != 0x26 && triplet->modeExt() != 0x2a)
|
} else if (triplet->modeExt() == 0x24 || triplet->modeExt() == 0x25 || triplet->modeExt() == 0x2a)
|
||||||
if (!activePosition.setColumn(triplet->addressColumn()))
|
triplet->m_reservedMode = true;
|
||||||
triplet->m_error = X26Triplet::ActivePositionMovedLeft;
|
else if (triplet->modeExt() != 0x26 && !activePosition.setColumn(triplet->addressColumn()))
|
||||||
|
triplet->m_error = X26Triplet::ActivePositionMovedLeft;
|
||||||
|
else
|
||||||
|
switch (triplet->modeExt()) {
|
||||||
|
case 0x20: // Foreground colour
|
||||||
|
case 0x23: // Foreground colour
|
||||||
|
if (triplet->m_data & 0x60)
|
||||||
|
triplet->m_reservedData = true;
|
||||||
|
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 (triplet->m_data < 0x20)
|
||||||
|
triplet->m_reservedData = true;
|
||||||
|
break;
|
||||||
|
case 0x27: // Additional flash functions
|
||||||
|
if (triplet->m_data >= 0x18)
|
||||||
|
triplet->m_reservedData = true;
|
||||||
|
break;
|
||||||
|
case 0x2d: // DRCS character
|
||||||
|
if (triplet->m_data >= 48)
|
||||||
|
// Should really be an error
|
||||||
|
triplet->m_reservedData = true;
|
||||||
|
}
|
||||||
|
|
||||||
triplet->m_activePositionRow = activePosition.row();
|
triplet->m_activePositionRow = activePosition.row();
|
||||||
triplet->m_activePositionColumn = activePosition.column();
|
triplet->m_activePositionColumn = activePosition.column();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ public:
|
|||||||
int activePositionRow() const { return m_activePositionRow; }
|
int activePositionRow() const { return m_activePositionRow; }
|
||||||
int activePositionColumn() const { return m_activePositionColumn; }
|
int activePositionColumn() const { return m_activePositionColumn; }
|
||||||
X26TripletError error() const { return m_error; }
|
X26TripletError error() const { return m_error; }
|
||||||
|
bool reservedMode() const { return m_reservedMode; }
|
||||||
|
bool reservedData() const { return m_reservedData; }
|
||||||
|
|
||||||
friend class X26TripletList;
|
friend class X26TripletList;
|
||||||
|
|
||||||
@@ -70,6 +72,8 @@ private:
|
|||||||
int m_activePositionRow = -1;
|
int m_activePositionRow = -1;
|
||||||
int m_activePositionColumn = -1;
|
int m_activePositionColumn = -1;
|
||||||
X26TripletError m_error = NoError;
|
X26TripletError m_error = NoError;
|
||||||
|
bool m_reservedMode = false;
|
||||||
|
bool m_reservedData = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class X26TripletList
|
class X26TripletList
|
||||||
|
|||||||
Reference in New Issue
Block a user