forked from qt-creator/qt-creator
Timeline: Fix aggregator's next() and prev() for equal start times
Previously it would skip over items with equal start times. Change-Id: I7a6652ea732e851d382d06f05ff1146ef37b0dae Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
This commit is contained in:
@@ -139,10 +139,13 @@ QVariantMap TimelineModelAggregator::nextItem(int selectedModel, int selectedIte
|
|||||||
if (selectedModel == i) {
|
if (selectedModel == i) {
|
||||||
itemIndexes[i] = (selectedItem + 1) % currentModel->count();
|
itemIndexes[i] = (selectedItem + 1) % currentModel->count();
|
||||||
} else {
|
} else {
|
||||||
if (currentModel->startTime(0) > time)
|
if (currentModel->startTime(0) >= time)
|
||||||
itemIndexes[i] = 0;
|
itemIndexes[i] = 0;
|
||||||
else
|
else
|
||||||
itemIndexes[i] = (currentModel->lastIndex(time) + 1) % currentModel->count();
|
itemIndexes[i] = (currentModel->lastIndex(time) + 1) % currentModel->count();
|
||||||
|
|
||||||
|
if (i < selectedModel && currentModel->startTime(itemIndexes[i]) == time)
|
||||||
|
itemIndexes[i] = (itemIndexes[i] + 1) % currentModel->count();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
itemIndexes[i] = -1;
|
itemIndexes[i] = -1;
|
||||||
@@ -155,7 +158,8 @@ QVariantMap TimelineModelAggregator::nextItem(int selectedModel, int selectedIte
|
|||||||
if (itemIndexes[i] == -1)
|
if (itemIndexes[i] == -1)
|
||||||
continue;
|
continue;
|
||||||
qint64 newStartTime = model(i)->startTime(itemIndexes[i]);
|
qint64 newStartTime = model(i)->startTime(itemIndexes[i]);
|
||||||
if (newStartTime > time && newStartTime < candidateStartTime) {
|
if (newStartTime < candidateStartTime &&
|
||||||
|
(newStartTime > time || (newStartTime == time && i > selectedModel))) {
|
||||||
candidateStartTime = newStartTime;
|
candidateStartTime = newStartTime;
|
||||||
candidateModelIndex = i;
|
candidateModelIndex = i;
|
||||||
}
|
}
|
||||||
@@ -191,23 +195,29 @@ QVariantMap TimelineModelAggregator::prevItem(int selectedModel, int selectedIte
|
|||||||
|
|
||||||
QVarLengthArray<int> itemIndexes(modelCount());
|
QVarLengthArray<int> itemIndexes(modelCount());
|
||||||
for (int i = 0; i < modelCount(); i++) {
|
for (int i = 0; i < modelCount(); i++) {
|
||||||
|
const TimelineModel *currentModel = model(i);
|
||||||
if (selectedModel == i) {
|
if (selectedModel == i) {
|
||||||
itemIndexes[i] = selectedItem - 1;
|
itemIndexes[i] = (selectedItem == 0 ? currentModel->count() : selectedItem) - 1;
|
||||||
if (itemIndexes[i] < 0)
|
} else {
|
||||||
itemIndexes[i] = model(selectedModel)->count() -1;
|
itemIndexes[i] = currentModel->lastIndex(time);
|
||||||
|
if (itemIndexes[i] == -1)
|
||||||
|
itemIndexes[i] = currentModel->count() - 1;
|
||||||
|
else if (i < selectedModel && itemIndexes[i] + 1 < currentModel->count() &&
|
||||||
|
currentModel->startTime(itemIndexes[i] + 1) == time) {
|
||||||
|
++itemIndexes[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
itemIndexes[i] = model(i)->lastIndex(time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int candidateModelIndex = -1;
|
int candidateModelIndex = -1;
|
||||||
qint64 candidateStartTime = std::numeric_limits<qint64>::min();
|
qint64 candidateStartTime = std::numeric_limits<qint64>::min();
|
||||||
for (int i = 0; i < modelCount(); i++) {
|
for (int i = modelCount() - 1; i >= 0 ; --i) {
|
||||||
const TimelineModel *currentModel = model(i);
|
const TimelineModel *currentModel = model(i);
|
||||||
if (itemIndexes[i] == -1 || itemIndexes[i] >= currentModel->count())
|
if (itemIndexes[i] == -1 || itemIndexes[i] >= currentModel->count())
|
||||||
continue;
|
continue;
|
||||||
qint64 newStartTime = currentModel->startTime(itemIndexes[i]);
|
qint64 newStartTime = currentModel->startTime(itemIndexes[i]);
|
||||||
if (newStartTime < time && newStartTime > candidateStartTime) {
|
if (newStartTime > candidateStartTime &&
|
||||||
|
(newStartTime < time || (newStartTime == time && i < selectedModel))) {
|
||||||
candidateStartTime = newStartTime;
|
candidateStartTime = newStartTime;
|
||||||
candidateModelIndex = i;
|
candidateModelIndex = i;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user