presentation/ConflictItemModel.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "ConflictItemModel.h" | ||
| 2 | |||
| 3 | #include <QCoreApplication> | ||
| 4 | #include <QVariantMap> | ||
| 5 | |||
| 6 | 833 | ConflictItemModel::ConflictItemModel(QObject *parent) : QAbstractListModel(parent) {} | |
| 7 | |||
| 8 |
2/2✓ Branch 3 → 4 taken 4 times.
✓ Branch 3 → 5 taken 9591 times.
|
9595 | int ConflictItemModel::rowCount(const QModelIndex &parent) const { return parent.isValid() ? 0 : int(m_rows.size()); } |
| 9 | |||
| 10 | // One insert per line: gcov attributes a braced initializer list to its | ||
| 11 | // last line, so the list form never shows as executed. | ||
| 12 | 62 | QHash<int, QByteArray> ConflictItemModel::roleNames() const { | |
| 13 | 62 | QHash<int, QByteArray> names; | |
| 14 |
2/2✓ Branch 2 → 3 taken 62 times.
✓ Branch 3 → 4 taken 62 times.
|
62 | names.insert(IdRole, "rowId"); |
| 15 |
2/2✓ Branch 5 → 6 taken 62 times.
✓ Branch 6 → 7 taken 62 times.
|
62 | names.insert(KindRole, "kind"); |
| 16 |
2/2✓ Branch 8 → 9 taken 62 times.
✓ Branch 9 → 10 taken 62 times.
|
62 | names.insert(LabelRole, "label"); |
| 17 |
2/2✓ Branch 11 → 12 taken 62 times.
✓ Branch 12 → 13 taken 62 times.
|
62 | names.insert(SectionRole, "section"); |
| 18 |
2/2✓ Branch 14 → 15 taken 62 times.
✓ Branch 15 → 16 taken 62 times.
|
62 | names.insert(ConflictRole, "conflict"); |
| 19 |
2/2✓ Branch 17 → 18 taken 62 times.
✓ Branch 18 → 19 taken 62 times.
|
62 | names.insert(StateRole, "rowState"); |
| 20 |
2/2✓ Branch 20 → 21 taken 62 times.
✓ Branch 21 → 22 taken 62 times.
|
62 | names.insert(ChoiceRole, "choice"); |
| 21 |
2/2✓ Branch 23 → 24 taken 62 times.
✓ Branch 24 → 25 taken 62 times.
|
62 | names.insert(LocalTextRole, "localText"); |
| 22 |
2/2✓ Branch 26 → 27 taken 62 times.
✓ Branch 27 → 28 taken 62 times.
|
62 | names.insert(ServerTextRole, "serverText"); |
| 23 |
2/2✓ Branch 29 → 30 taken 62 times.
✓ Branch 30 → 31 taken 62 times.
|
62 | names.insert(BaseTextRole, "baseText"); |
| 24 |
2/2✓ Branch 32 → 33 taken 62 times.
✓ Branch 33 → 34 taken 62 times.
|
62 | names.insert(ResultTextRole, "resultText"); |
| 25 |
2/2✓ Branch 35 → 36 taken 62 times.
✓ Branch 36 → 37 taken 62 times.
|
62 | names.insert(LocalPresentRole, "localPresent"); |
| 26 |
2/2✓ Branch 38 → 39 taken 62 times.
✓ Branch 39 → 40 taken 62 times.
|
62 | names.insert(ServerPresentRole, "serverPresent"); |
| 27 |
2/2✓ Branch 41 → 42 taken 62 times.
✓ Branch 42 → 43 taken 62 times.
|
62 | names.insert(BasePresentRole, "basePresent"); |
| 28 |
2/2✓ Branch 44 → 45 taken 62 times.
✓ Branch 45 → 46 taken 62 times.
|
62 | names.insert(ResultPresentRole, "resultPresent"); |
| 29 |
2/2✓ Branch 47 → 48 taken 62 times.
✓ Branch 48 → 49 taken 62 times.
|
62 | names.insert(GroupRole, "group"); |
| 30 |
2/2✓ Branch 50 → 51 taken 62 times.
✓ Branch 51 → 52 taken 62 times.
|
62 | names.insert(SeparableRole, "separable"); |
| 31 |
2/2✓ Branch 53 → 54 taken 62 times.
✓ Branch 54 → 55 taken 62 times.
|
62 | names.insert(ValuesRole, "values"); |
| 32 |
2/2✓ Branch 56 → 57 taken 62 times.
✓ Branch 57 → 58 taken 62 times.
|
62 | names.insert(HunksRole, "hunks"); |
| 33 |
2/2✓ Branch 59 → 60 taken 62 times.
✓ Branch 60 → 61 taken 62 times.
|
62 | names.insert(SummaryRole, "summary"); |
| 34 |
2/2✓ Branch 62 → 63 taken 62 times.
✓ Branch 63 → 64 taken 62 times.
|
62 | names.insert(OverlappingRole, "overlapping"); |
| 35 |
2/2✓ Branch 65 → 66 taken 62 times.
✓ Branch 66 → 67 taken 62 times.
|
62 | names.insert(LocalSourceRole, "localSource"); |
| 36 |
2/2✓ Branch 68 → 69 taken 62 times.
✓ Branch 69 → 70 taken 62 times.
|
62 | names.insert(ServerSourceRole, "serverSource"); |
| 37 |
2/2✓ Branch 71 → 72 taken 62 times.
✓ Branch 72 → 73 taken 62 times.
|
62 | names.insert(BaseSourceRole, "baseSource"); |
| 38 |
2/2✓ Branch 74 → 75 taken 62 times.
✓ Branch 75 → 76 taken 62 times.
|
62 | names.insert(InvalidRole, "invalid"); |
| 39 |
2/2✓ Branch 77 → 78 taken 62 times.
✓ Branch 78 → 79 taken 62 times.
|
62 | names.insert(ChangedAgainRole, "changedAgain"); |
| 40 |
2/2✓ Branch 80 → 81 taken 62 times.
✓ Branch 81 → 82 taken 62 times.
|
62 | names.insert(AccessibleNameRole, "accessibleName"); |
| 41 | 62 | return names; | |
| 42 | ✗ | } | |
| 43 | |||
| 44 | 186 | QString ConflictItemModel::accessibleName(const ConflictRows::Row &row) { | |
| 45 | 186 | const auto translate = [](const char *text) { return QCoreApplication::translate("ConflictItemModel", text); }; | |
| 46 | 186 | QString chosen; | |
| 47 |
2/2✓ Branch 4 → 5 taken 45 times.
✓ Branch 4 → 9 taken 141 times.
|
186 | if (row.choice == QLatin1String("local")) |
| 48 |
1/1✓ Branch 5 → 6 taken 45 times.
|
45 | chosen = translate("chosen: on this computer"); |
| 49 |
2/2✓ Branch 11 → 12 taken 77 times.
✓ Branch 11 → 16 taken 64 times.
|
141 | else if (row.choice == QLatin1String("server")) |
| 50 |
1/1✓ Branch 12 → 13 taken 77 times.
|
77 | chosen = translate("chosen: on the server"); |
| 51 |
2/2✓ Branch 18 → 19 taken 55 times.
✓ Branch 18 → 23 taken 9 times.
|
64 | else if (row.state == QLatin1String("open")) |
| 52 |
1/1✓ Branch 19 → 20 taken 55 times.
|
55 | chosen = translate("open conflict"); |
| 53 | else | ||
| 54 |
1/1✓ Branch 23 → 24 taken 9 times.
|
9 | chosen = translate("combined"); |
| 55 |
1/1✓ Branch 27 → 28 taken 186 times.
|
372 | return QCoreApplication::translate("ConflictItemModel", "%1: on this computer %2, on the server %3, %4") |
| 56 |
1/1✓ Branch 28 → 29 taken 186 times.
|
372 | .arg(row.label, row.localText, row.serverText, chosen); |
| 57 | 186 | } | |
| 58 | |||
| 59 | 7621 | QVariant ConflictItemModel::data(const QModelIndex &index, int role) const { | |
| 60 |
6/8✓ Branch 3 → 4 taken 7619 times.
✓ Branch 3 → 9 taken 2 times.
✓ Branch 5 → 6 taken 7619 times.
✗ Branch 5 → 9 not taken.
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 7619 times.
✓ Branch 11 → 12 taken 2 times.
✓ Branch 11 → 13 taken 7619 times.
|
7621 | if (!index.isValid() || index.row() < 0 || index.row() >= m_rows.size()) |
| 61 | 2 | return {}; | |
| 62 | 7619 | return valueOf(m_rows.at(index.row()), role); | |
| 63 | } | ||
| 64 | |||
| 65 | 1 | QVariantMap ConflictItemModel::empty() const { | |
| 66 | 1 | QVariantMap map; | |
| 67 |
1/1✓ Branch 2 → 3 taken 1 time.
|
1 | const QHash<int, QByteArray> names = roleNames(); |
| 68 |
2/2✓ Branch 15 → 4 taken 27 times.
✓ Branch 15 → 16 taken 1 time.
|
28 | for (auto it = names.begin(); it != names.end(); ++it) |
| 69 |
3/3✓ Branch 5 → 6 taken 27 times.
✓ Branch 7 → 8 taken 27 times.
✓ Branch 8 → 9 taken 27 times.
|
27 | map.insert(QString::fromLatin1(it.value()), valueOf(ConflictRows::Row{}, it.key())); |
| 70 | 1 | return map; | |
| 71 | 1 | } | |
| 72 | |||
| 73 | 7646 | QVariant ConflictItemModel::valueOf(const ConflictRows::Row &row, int role) { | |
| 74 |
28/28✓ Branch 2 → 3 taken 880 times.
✓ Branch 2 → 4 taken 741 times.
✓ Branch 2 → 5 taken 205 times.
✓ Branch 2 → 6 taken 583 times.
✓ Branch 2 → 7 taken 43 times.
✓ Branch 2 → 8 taken 1085 times.
✓ Branch 2 → 9 taken 846 times.
✓ Branch 2 → 10 taken 183 times.
✓ Branch 2 → 11 taken 183 times.
✓ Branch 2 → 12 taken 183 times.
✓ Branch 2 → 13 taken 156 times.
✓ Branch 2 → 14 taken 183 times.
✓ Branch 2 → 15 taken 183 times.
✓ Branch 2 → 16 taken 183 times.
✓ Branch 2 → 17 taken 153 times.
✓ Branch 2 → 18 taken 164 times.
✓ Branch 2 → 19 taken 170 times.
✓ Branch 2 → 20 taken 13 times.
✓ Branch 2 → 79 taken 186 times.
✓ Branch 2 → 80 taken 20 times.
✓ Branch 2 → 81 taken 25 times.
✓ Branch 2 → 82 taken 186 times.
✓ Branch 2 → 83 taken 186 times.
✓ Branch 2 → 84 taken 109 times.
✓ Branch 2 → 85 taken 186 times.
✓ Branch 2 → 86 taken 399 times.
✓ Branch 2 → 87 taken 186 times.
✓ Branch 2 → 91 taken 26 times.
|
7646 | switch (role) { |
| 75 | 880 | case IdRole: return row.id; | |
| 76 | 741 | case KindRole: return row.kind; | |
| 77 | 205 | case LabelRole: return row.label; | |
| 78 | 583 | case SectionRole: return row.section; | |
| 79 | 43 | case ConflictRole: return row.conflict; | |
| 80 | 1085 | case StateRole: return row.state; | |
| 81 | 846 | case ChoiceRole: return row.choice; | |
| 82 | 183 | case LocalTextRole: return row.localText; | |
| 83 | 183 | case ServerTextRole: return row.serverText; | |
| 84 | 183 | case BaseTextRole: return row.baseText; | |
| 85 | 156 | case ResultTextRole: return row.resultText; | |
| 86 | 183 | case LocalPresentRole: return row.localPresent; | |
| 87 | 183 | case ServerPresentRole: return row.serverPresent; | |
| 88 | 183 | case BasePresentRole: return row.basePresent; | |
| 89 | 153 | case ResultPresentRole: return row.resultPresent; | |
| 90 | 164 | case GroupRole: return row.group; | |
| 91 | 170 | case SeparableRole: return row.separable; | |
| 92 | 13 | case ValuesRole: { | |
| 93 | 13 | QVariantList values; | |
| 94 |
2/2✓ Branch 75 → 22 taken 12 times.
✓ Branch 75 → 76 taken 13 times.
|
25 | for (const ConflictRows::Value &value : row.values) |
| 95 |
1/1✓ Branch 53 → 54 taken 12 times.
|
36 | values.append(QVariantMap{{QStringLiteral("id"), value.id}, |
| 96 | 24 | {QStringLiteral("text"), value.text}, | |
| 97 | 24 | {QStringLiteral("local"), value.local}, | |
| 98 | 24 | {QStringLiteral("server"), value.server}, | |
| 99 | 24 | {QStringLiteral("base"), value.base}, | |
| 100 | 24 | {QStringLiteral("included"), value.included}, | |
| 101 |
2/4✓ Branch 57 → 58 taken 84 times.
✓ Branch 57 → 59 taken 12 times.
✗ Branch 98 → 99 not taken.
✗ Branch 98 → 100 not taken.
|
120 | {QStringLiteral("state"), value.state}}); |
| 102 | 13 | return values; | |
| 103 | 13 | } | |
| 104 | 186 | case HunksRole: return row.hunks; | |
| 105 | 20 | case SummaryRole: return row.summary; | |
| 106 | 25 | case OverlappingRole: return row.overlapping; | |
| 107 | 186 | case LocalSourceRole: return row.localSource; | |
| 108 | 186 | case ServerSourceRole: return row.serverSource; | |
| 109 | 109 | case BaseSourceRole: return row.baseSource; | |
| 110 | 186 | case InvalidRole: return row.invalid; | |
| 111 | 399 | case ChangedAgainRole: return row.changedAgain; | |
| 112 |
1/1✓ Branch 87 → 88 taken 186 times.
|
186 | case AccessibleNameRole: return accessibleName(row); |
| 113 | 26 | default: return {}; | |
| 114 | } | ||
| 115 | 96 | } | |
| 116 | |||
| 117 | 552 | void ConflictItemModel::setRows(const QList<ConflictRows::Row> &rows) { | |
| 118 | 552 | bool sameIds = rows.size() == m_rows.size(); | |
| 119 |
6/6✓ Branch 9 → 10 taken 1041 times.
✓ Branch 9 → 13 taken 153 times.
✓ Branch 11 → 12 taken 642 times.
✓ Branch 11 → 13 taken 399 times.
✓ Branch 14 → 5 taken 642 times.
✓ Branch 14 → 15 taken 552 times.
|
1194 | for (int i = 0; sameIds && i < rows.size(); ++i) |
| 120 | 642 | sameIds = rows.at(i).id == m_rows.at(i).id; | |
| 121 |
2/2✓ Branch 15 → 16 taken 153 times.
✓ Branch 15 → 21 taken 399 times.
|
552 | if (!sameIds) { |
| 122 | 153 | beginResetModel(); | |
| 123 | 153 | m_rows = rows; | |
| 124 | 153 | endResetModel(); | |
| 125 | 153 | emit countChanged(); | |
| 126 | 153 | return; | |
| 127 | } | ||
| 128 | 399 | m_rows = rows; | |
| 129 |
2/2✓ Branch 23 → 24 taken 385 times.
✓ Branch 23 → 33 taken 14 times.
|
399 | if (!m_rows.isEmpty()) |
| 130 |
3/3✓ Branch 27 → 28 taken 385 times.
✓ Branch 29 → 30 taken 385 times.
✓ Branch 30 → 31 taken 385 times.
|
385 | emit dataChanged(index(0), index(int(m_rows.size()) - 1)); |
| 131 | } | ||
| 132 | |||
| 133 | 2 | int ConflictItemModel::indexOf(const QString &id) const { | |
| 134 |
2/2✓ Branch 9 → 3 taken 2 times.
✓ Branch 9 → 10 taken 1 time.
|
3 | for (int i = 0; i < m_rows.size(); ++i) |
| 135 |
2/2✓ Branch 5 → 6 taken 1 time.
✓ Branch 5 → 7 taken 1 time.
|
2 | if (m_rows.at(i).id == id) |
| 136 | 1 | return i; | |
| 137 | 1 | return -1; | |
| 138 | } | ||
| 139 | |||
| 140 | 77 | int ConflictItemModel::nextOpen(int fromRow, int direction) const { | |
| 141 | 77 | const int count = int(m_rows.size()); | |
| 142 |
2/2✓ Branch 3 → 4 taken 6 times.
✓ Branch 3 → 5 taken 71 times.
|
77 | if (count == 0) |
| 143 | 6 | return -1; | |
| 144 |
1/2✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 71 times.
|
71 | const int step = direction < 0 ? -1 : 1; |
| 145 |
2/2✓ Branch 15 → 9 taken 105 times.
✓ Branch 15 → 16 taken 28 times.
|
133 | for (int offset = 1; offset <= count; ++offset) { |
| 146 | 105 | const int row = ((fromRow + step * offset) % count + count) % count; | |
| 147 |
2/2✓ Branch 12 → 13 taken 43 times.
✓ Branch 12 → 14 taken 62 times.
|
105 | if (m_rows.at(row).state == QLatin1String("open")) |
| 148 | 43 | return row; | |
| 149 | } | ||
| 150 | 28 | return -1; | |
| 151 | } | ||
| 152 |