File indexing completed on 2024-05-19 05:17:47
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "uic9183ticketlayoutmodel.h" 0008 0009 #include <KColorScheme> 0010 0011 #include <QColor> 0012 #include <QDebug> 0013 #include <QGuiApplication> 0014 #include <QSize> 0015 0016 enum { 0017 RCT2Width = 72, 0018 RCT2Height = 18 0019 }; 0020 0021 static const struct { 0022 const char layout[RCT2Width * RCT2Height + 1]; 0023 } rct2Layouts [] = { { 0024 // basic RCT2 0025 "X XXXX X X" 0026 "X XXXX X X" 0027 "X X X XXXXXX X X" 0028 "X X X" 0029 "X X X X X XXX X" 0030 "X X X X X XXX X" 0031 "X X X X X XXX X" 0032 "X X X X X XXX X" 0033 "X X" 0034 "X X" 0035 "X X" 0036 "X X" 0037 "X XXXXXXXXXXXXXXXXXXXXX" 0038 "X X X" 0039 "X X X" 0040 "X X X X X" 0041 "XRRRRRRRRRRRX X X X" 0042 "X X X X X X X" }, { 0043 0044 // RCT2 NRT 0045 "X XXXX X X" 0046 "X XXXX X X" 0047 "X X X XXXXXX X X" 0048 "X X X" 0049 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 0050 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 0051 "XGGGGGXGGGGGXGGGGGGGGGGGGGGGGGGGXXGGGGGGGGGGGGGGGGGXGGGGGXGGGGGXXXGGGGGX" 0052 "XGGGGGXGGGGGXGGGGGGGGGGGGGGGGGGGXXGGGGGGGGGGGGGGGGGXGGGGGXGGGGGXXXGGGGGX" 0053 "X X" 0054 "X X" 0055 "X X" 0056 "X X" 0057 "X X XXXXXXXXXXXXXXXXXXXXX" 0058 "X X X X" 0059 "X X X X" 0060 "X X X X X" 0061 "XRRRRRRRRRRRX X X X" 0062 "X X X X X X X" }, { 0063 0064 // RCT2 IRT 0065 "X XXXX X X" 0066 "X XXXX X X" 0067 "X X X XXXXXX X X" 0068 "X X X" 0069 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 0070 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 0071 "XGGGGGXGGGGGXGGGGGGGGGGGGGGGGGGGXXGGGGGGGGGGGGGGGGGXGGGGGXGGGGGXXXGGGGGX" 0072 "XGGGGGXGGGGGXGGGGGGGGGGGGGGGGGGGXXGGGGGGGGGGGGGGGGGXGGGGGXGGGGGXXXGGGGGX" 0073 "X XGGGGGXGGGX XGGGXXX XGGGX X" 0074 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X" 0075 "X X X X" 0076 "X X X X" 0077 "X X X XXXXXXXXXXXXXXXXXXXXX" 0078 "X X X X X X X" 0079 "X X X X X X X" 0080 "X X X X X" 0081 "XRRRRRRRRRRRX X X X" 0082 "X X X X X X X" }, { 0083 0084 // RCT2 RES 0085 "X XXXX X X" 0086 "X XXXX X X" 0087 "X X X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X" 0088 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X" 0089 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 0090 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 0091 "XGGGGGXGGGGGXGGGGGGGGGGGGGGGGGGGXXGGGGGGGGGGGGGGGGGXGGGGGXGGGGGXXXGGGGGX" 0092 "XGGGGGXGGGGGXGGGGGGGGGGGGGGGGGGGXXGGGGGGGGGGGGGGGGGXGGGGGXGGGGGXXXGGGGGX" 0093 "X XGGGGGXGGGX XGGGXXX XGGGX X" 0094 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X" 0095 "X X X X" 0096 "X X X X" 0097 "X X XXXXXXXXXXXXXXXXXXXXX" 0098 "X X X X" 0099 "X X X" 0100 "X X X X X" 0101 "XRRRRRRRRRRRX X X X" 0102 "X X X X X X X" }, { 0103 0104 // RCT2 RPT 0105 "X XXXX X X X" 0106 "X XXXX X X X" 0107 "X X X XXXXXXXXXXXXXXXXXXXXXXXXXX X X" 0108 "X X X X" 0109 "X X X X X XXX X" 0110 "X X X X X XXX X" 0111 "X X X X X XXX X" 0112 "X X X X X XXX X" 0113 "X X" 0114 "X X" 0115 "X X" 0116 "X X" 0117 "X XXXXXXXXXXXXXXXXXXXXX" 0118 "X X X" 0119 "X X X" 0120 "X X X X " 0121 "XRRRRRRRRRRRX X X " 0122 "X X X X X X " 0123 }}; 0124 0125 Uic9183TicketLayoutModel::Uic9183TicketLayoutModel(QObject *parent) 0126 : QAbstractTableModel(parent) 0127 { 0128 } 0129 0130 Uic9183TicketLayoutModel::~Uic9183TicketLayoutModel() = default; 0131 0132 void Uic9183TicketLayoutModel::setLayout(const KItinerary::Uic9183TicketLayout &layout) 0133 { 0134 beginResetModel(); 0135 m_layout = layout; 0136 endResetModel(); 0137 } 0138 0139 QStringList Uic9183TicketLayoutModel::supportedTemplates() 0140 { 0141 return {QStringLiteral("RCT2"), QStringLiteral("RCT2 NRT"), QStringLiteral("RCT2 IRT"), QStringLiteral("RCT2 RES"), QStringLiteral("RCT2 RPT")}; 0142 } 0143 0144 void Uic9183TicketLayoutModel::setLayoutTemplate(int tplIndex) 0145 { 0146 beginResetModel(); 0147 m_layoutTemplate = tplIndex; 0148 endResetModel(); 0149 } 0150 0151 int Uic9183TicketLayoutModel::columnCount(const QModelIndex &parent) const 0152 { 0153 Q_UNUSED(parent); 0154 if (m_layout.isValid() && m_layout.type() == QLatin1String("RCT2")) { 0155 return std::max<int>(RCT2Width, m_layout.size().width()); 0156 } 0157 return m_layout.size().width(); 0158 } 0159 0160 int Uic9183TicketLayoutModel::rowCount(const QModelIndex &parent) const 0161 { 0162 if (parent.isValid()) { 0163 return 0; 0164 } 0165 0166 if (m_layout.isValid() && m_layout.type() == QLatin1String("RCT2")) { 0167 return std::max<int>(RCT2Height, m_layout.size().height()); 0168 } 0169 return m_layout.size().height(); 0170 } 0171 0172 QVariant Uic9183TicketLayoutModel::data(const QModelIndex& index, int role) const 0173 { 0174 if (!m_layout.isValid() || !index.isValid()) { 0175 return {}; 0176 } 0177 0178 if (role == Qt::DisplayRole) { 0179 return m_layout.text(index.row(), index.column(), 1, 1); 0180 } 0181 if (role == Qt::BackgroundRole && m_layoutTemplate >= 0 && index.row() < RCT2Height && index.column() < RCT2Width) { 0182 const auto c = rct2Layouts[m_layoutTemplate].layout[index.row() * RCT2Width + index.column()]; 0183 switch (c) { 0184 case 'X': return QGuiApplication::palette().color(QPalette::AlternateBase); 0185 case 'R': return KColorScheme(QPalette::Active).background(KColorScheme::NegativeBackground); 0186 case 'G': return KColorScheme(QPalette::Active).background(KColorScheme::PositiveBackground); 0187 } 0188 } 0189 0190 return {}; 0191 } 0192 0193 QVariant Uic9183TicketLayoutModel::headerData(int section, Qt::Orientation orientation, int role) const 0194 { 0195 if (orientation == Qt::Horizontal) { 0196 switch (role) { 0197 case Qt::DisplayRole: 0198 return QString::number(section % 10); 0199 case Qt::ToolTipRole: 0200 return QString::number(section); 0201 } 0202 } 0203 if (role == Qt::DisplayRole && orientation == Qt::Vertical) { 0204 return QString::number(section); 0205 } 0206 0207 return QAbstractTableModel::headerData(section, orientation, role); 0208 }