Fix order list corruption when drag-moving towards end of list

Fixes regression in 0bb9207f4d
This commit is contained in:
Jonathan G Rennison
2019-02-02 23:30:05 +00:00
parent 7bcd921871
commit 47b8f9b286
2 changed files with 15 additions and 2 deletions

View File

@@ -553,6 +553,7 @@ private:
StationID GetBestLoadableNext(const Vehicle *v, const Order *o1, const Order *o2) const; StationID GetBestLoadableNext(const Vehicle *v, const Order *o1, const Order *o2) const;
void ReindexOrderList(); void ReindexOrderList();
Order *GetOrderAtFromList(int index) const;
Order *first; ///< First order of the order list. Order *first; ///< First order of the order list.
std::vector<Order *> order_index; ///< NOSAVE: Vector index of order list. std::vector<Order *> order_index; ///< NOSAVE: Vector index of order list.

View File

@@ -439,6 +439,18 @@ Order *OrderList::GetOrderAt(int index) const
return this->order_index[index]; return this->order_index[index];
} }
Order *OrderList::GetOrderAtFromList(int index) const
{
if (index < 0) return NULL;
Order *order = this->first;
while (order != NULL && index-- > 0) {
order = order->next;
}
return order;
}
/** /**
* Get the index of an order of the order chain, or INVALID_VEH_ORDER_ID. * Get the index of an order of the order chain, or INVALID_VEH_ORDER_ID.
* @param order order to get the index of. * @param order order to get the index of.
@@ -663,7 +675,7 @@ void OrderList::MoveOrder(int from, int to)
moving_one = this->first; moving_one = this->first;
this->first = moving_one->next; this->first = moving_one->next;
} else { } else {
Order *one_before = GetOrderAt(from - 1); Order *one_before = GetOrderAtFromList(from - 1);
moving_one = one_before->next; moving_one = one_before->next;
one_before->next = moving_one->next; one_before->next = moving_one->next;
} }
@@ -673,7 +685,7 @@ void OrderList::MoveOrder(int from, int to)
moving_one->next = this->first; moving_one->next = this->first;
this->first = moving_one; this->first = moving_one;
} else { } else {
Order *one_before = GetOrderAt(to - 1); Order *one_before = GetOrderAtFromList(to - 1);
moving_one->next = one_before->next; moving_one->next = one_before->next;
one_before->next = moving_one; one_before->next = moving_one;
} }