From ff465245fa26e9b6d8e9fb96ff24334f702ea6ae Mon Sep 17 00:00:00 2001 From: zuu Date: Thu, 20 Dec 2012 18:35:13 +0000 Subject: (svn r24829) -Codechange: Reduce code duplication in the goal GUI --- src/goal_gui.cpp | 62 ++++++++++++++++++++++++-------------------------------- 1 file changed, 26 insertions(+), 36 deletions(-) (limited to 'src/goal_gui.cpp') diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 0b01f825a..cf0e63398 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -146,28 +146,19 @@ struct GoalListWindow : Window { *size = maxdim(*size, d); } - virtual void DrawWidget(const Rect &r, int widget) const + /** + * Draws either the global goals or the company goal section. + * This is a helper method for DrawWidget. + */ + void DrawPartialGoalList(int &pos, const int cap, int x, int y, int right, bool global_section) const { - if (widget != WID_GL_PANEL) return; - - YearMonthDay ymd; - ConvertDateToYMD(_date, &ymd); - - int right = r.right - WD_FRAMERECT_RIGHT; - int y = r.top + WD_FRAMERECT_TOP; - int x = r.left + WD_FRAMERECT_LEFT; - - int pos = -this->vscroll->GetPosition(); - const int cap = this->vscroll->GetCapacity(); - - /* Section for drawing the global goals */ - if (IsInsideMM(pos, 0, cap)) DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, STR_GOALS_GLOBAL_TITLE); + if (IsInsideMM(pos, 0, cap)) DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, global_section ? STR_GOALS_GLOBAL_TITLE : STR_GOALS_COMPANY_TITLE); pos++; uint num = 0; const Goal *s; FOR_ALL_GOALS(s) { - if (s->company == INVALID_COMPANY) { + if (global_section ? s->company == INVALID_COMPANY : s->company == _local_company && s->company != INVALID_COMPANY) { if (IsInsideMM(pos, 0, cap)) { /* Display the goal */ SetDParamStr(0, s->text); @@ -182,29 +173,28 @@ struct GoalListWindow : Window { if (IsInsideMM(pos, 0, cap)) DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, STR_GOALS_NONE); pos++; } + } - /* Section for drawing the company goals */ - pos++; - if (IsInsideMM(pos, 0, cap)) DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, STR_GOALS_COMPANY_TITLE); - pos++; - num = 0; + virtual void DrawWidget(const Rect &r, int widget) const + { + if (widget != WID_GL_PANEL) return; - FOR_ALL_GOALS(s) { - if (s->company == _local_company && s->company != INVALID_COMPANY) { - if (IsInsideMM(pos, 0, cap)) { - /* Display the goal */ - SetDParamStr(0, s->text); - DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, STR_GOALS_TEXT); - } - pos++; - num++; - } - } + YearMonthDay ymd; + ConvertDateToYMD(_date, &ymd); - if (num == 0) { - if (IsInsideMM(pos, 0, cap)) DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, STR_GOALS_NONE); - pos++; - } + int right = r.right - WD_FRAMERECT_RIGHT; + int y = r.top + WD_FRAMERECT_TOP; + int x = r.left + WD_FRAMERECT_LEFT; + + int pos = -this->vscroll->GetPosition(); + const int cap = this->vscroll->GetCapacity(); + + /* Draw partial list with global goals */ + DrawPartialGoalList(pos, cap, x, y, right, true); + + /* Draw partial list with company goals */ + pos++; + DrawPartialGoalList(pos, cap, x, y, right, false); } virtual void OnResize() -- cgit v1.2.3-54-g00ecf