(svn r25867) -Fix [FS#5764]: Shift dates on link graphs when using scenario editor date tool.

This commit is contained in:
fonsinchen 2013-10-15 17:32:31 +00:00
parent a6fe1f2f63
commit 5ab204c8a1
4 changed files with 32 additions and 12 deletions

View File

@ -24,8 +24,7 @@
#include "rail_gui.h" #include "rail_gui.h"
#include "settings_gui.h" #include "settings_gui.h"
#include "company_gui.h" #include "company_gui.h"
#include "linkgraph/linkgraph.h" #include "linkgraph/linkgraphschedule.h"
#include "linkgraph/linkgraphjob.h"
#include "widgets/cheat_widget.h" #include "widgets/cheat_widget.h"
@ -103,10 +102,7 @@ static int32 ClickChangeDateCheat(int32 p1, int32 p2)
if (p1 == _cur_year) return _cur_year; if (p1 == _cur_year) return _cur_year;
Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day); Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day);
LinkGraph *lg; LinkGraphSchedule::Instance()->ShiftDates(new_date - _date);
FOR_ALL_LINK_GRAPHS(lg) lg->ShiftDates(new_date - _date);
LinkGraphJob *lgj;
FOR_ALL_LINK_GRAPH_JOBS(lgj) lgj->ShiftJoinDate(new_date - _date);
SetDate(new_date, _date_fract); SetDate(new_date, _date_fract);
EnginesMonthlyLoop(); EnginesMonthlyLoop();
SetWindowDirty(WC_STATUS_BAR, 0); SetWindowDirty(WC_STATUS_BAR, 0);

View File

@ -125,6 +125,19 @@ void LinkGraphSchedule::SpawnAll()
inst->schedule.clear(); inst->schedule.clear();
} }
/**
* Shift all dates (join dates and edge annotations) of link graphs and link
* graph jobs by the number of days given.
* @param interval Number of days to be added or subtracted.
*/
void LinkGraphSchedule::ShiftDates(int interval)
{
LinkGraph *lg;
FOR_ALL_LINK_GRAPHS(lg) lg->ShiftDates(interval);
LinkGraphJob *lgj;
FOR_ALL_LINK_GRAPH_JOBS(lgj) lgj->ShiftJoinDate(interval);
}
/** /**
* Create a link graph schedule and initialize its handlers. * Create a link graph schedule and initialize its handlers.
*/ */

View File

@ -62,6 +62,7 @@ public:
void SpawnNext(); void SpawnNext();
void JoinNext(); void JoinNext();
void SpawnAll(); void SpawnAll();
void ShiftDates(int interval);
/** /**
* Queue a link graph for execution. * Queue a link graph for execution.

View File

@ -1110,6 +1110,19 @@ void ToggleDirtyBlocks()
} }
} }
/**
* Set the starting year for a scenario.
* @param year New starting year.
*/
void SetStartingYear(Year year)
{
_settings_game.game_creation.starting_year = Clamp(year, MIN_YEAR, MAX_YEAR);
Date new_date = ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1);
/* If you open a savegame as scenario there may already be link graphs.*/
LinkGraphSchedule::Instance()->ShiftDates(new_date - _date);
SetDate(new_date, 0);
}
/** /**
* Choose the proper callback function for the main toolbar's help menu. * Choose the proper callback function for the main toolbar's help menu.
* @param index The menu index which was selected. * @param index The menu index which was selected.
@ -1169,8 +1182,7 @@ static CallBackFunction ToolbarScenDateBackward(Window *w)
w->HandleButtonClick(WID_TE_DATE_BACKWARD); w->HandleButtonClick(WID_TE_DATE_BACKWARD);
w->SetDirty(); w->SetDirty();
_settings_game.game_creation.starting_year = Clamp(_settings_game.game_creation.starting_year - 1, MIN_YEAR, MAX_YEAR); SetStartingYear(_settings_game.game_creation.starting_year - 1);
SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1), 0);
} }
_left_button_clicked = false; _left_button_clicked = false;
return CBF_NONE; return CBF_NONE;
@ -1183,8 +1195,7 @@ static CallBackFunction ToolbarScenDateForward(Window *w)
w->HandleButtonClick(WID_TE_DATE_FORWARD); w->HandleButtonClick(WID_TE_DATE_FORWARD);
w->SetDirty(); w->SetDirty();
_settings_game.game_creation.starting_year = Clamp(_settings_game.game_creation.starting_year + 1, MIN_YEAR, MAX_YEAR); SetStartingYear(_settings_game.game_creation.starting_year + 1);
SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1), 0);
} }
_left_button_clicked = false; _left_button_clicked = false;
return CBF_NONE; return CBF_NONE;
@ -2119,8 +2130,7 @@ struct ScenarioEditorToolbarWindow : Window {
/* An empty string means revert to the default */ /* An empty string means revert to the default */
value = DEF_START_YEAR; value = DEF_START_YEAR;
} }
_settings_game.game_creation.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); SetStartingYear(value);
SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1), 0);
this->SetDirty(); this->SetDirty();
} }