diff -r 188857a3b0db src/rail_gui.cpp --- a/src/rail_gui.cpp Mon Dec 22 12:59:31 2008 +0000 +++ b/src/rail_gui.cpp Mon Dec 22 21:57:27 2008 +0100 @@ -920,7 +920,9 @@ BRSW_NEWST_DROPDOWN, BRSW_NEWST_LIST, - BRSW_NEWST_SCROLL + BRSW_NEWST_SCROLL, + + BRSW_RESIZE, }; /** @@ -993,6 +995,7 @@ this->vscroll.count = _railstation.station_count; this->vscroll.cap = 5; this->vscroll.pos = Clamp(_railstation.station_type - 2, 0, this->vscroll.count - this->vscroll.cap); + this->resize.step_height = 14; } } @@ -1034,7 +1037,9 @@ int y_offset = newstations ? 90 : 0; /* Set up a clipping area for the '/' station preview */ - if (FillDrawPixelInfo(&tmp_dpi, 7, 26 + y_offset, 66, 48)) { + Widget *w; + w = &this->widget[BRSW_PLATFORM_DIR_X]; + if (FillDrawPixelInfo(&tmp_dpi, w->left, w->top, 66, 48)) { old_dpi = _cur_dpi; _cur_dpi = &tmp_dpi; if (!DrawStationTile(32, 16, _cur_railtype, AXIS_X, _railstation.station_class, _railstation.station_type)) { @@ -1044,7 +1049,8 @@ } /* Set up a clipping area for the '\' station preview */ - if (FillDrawPixelInfo(&tmp_dpi, 75, 26 + y_offset, 66, 48)) { + w = &this->widget[BRSW_PLATFORM_DIR_Y]; + if (FillDrawPixelInfo(&tmp_dpi, w->left, w->top, 66, 48)) { old_dpi = _cur_dpi; _cur_dpi = &tmp_dpi; if (!DrawStationTile(32, 16, _cur_railtype, AXIS_Y, _railstation.station_class, _railstation.station_type)) { @@ -1053,33 +1059,39 @@ _cur_dpi = old_dpi; } - DrawStringCentered(74, 15 + y_offset, STR_3002_ORIENTATION, TC_FROMSTRING); - DrawStringCentered(74, 76 + y_offset, STR_3003_NUMBER_OF_TRACKS, TC_FROMSTRING); - DrawStringCentered(74, 101 + y_offset, STR_3004_PLATFORM_LENGTH, TC_FROMSTRING); - DrawStringCentered(74, 141 + y_offset, STR_3066_COVERAGE_AREA_HIGHLIGHT, TC_FROMSTRING); + DrawStringCentered(74, this->widget[BRSW_PLATFORM_DIR_X].top - 11, STR_3002_ORIENTATION, TC_FROMSTRING); + DrawStringCentered(74, this->widget[BRSW_PLATFORM_NUM_1].top - 11, STR_3003_NUMBER_OF_TRACKS, TC_FROMSTRING); + DrawStringCentered(74, this->widget[BRSW_PLATFORM_LEN_1].top - 11, STR_3004_PLATFORM_LENGTH, TC_FROMSTRING); + DrawStringCentered(74, this->widget[BRSW_HIGHLIGHT_OFF].top - 11 , STR_3066_COVERAGE_AREA_HIGHLIGHT, TC_FROMSTRING); - int text_end = DrawStationCoverageAreaText(2, 166 + y_offset, SCT_ALL, rad, false); + int text_end = DrawStationCoverageAreaText(2, this->widget[BRSW_HIGHLIGHT_ON].bottom + 3, SCT_ALL, rad, false); text_end = DrawStationCoverageAreaText(2, text_end + 4, SCT_ALL, rad, true) + 4; if (text_end != this->widget[BRSW_BACKGROUND].bottom) { this->SetDirty(); ResizeWindowForWidget(this, BRSW_BACKGROUND, 0, text_end - this->widget[BRSW_BACKGROUND].bottom); + if (newstations) { + this->widget[BRSW_RESIZE].bottom = this->widget[BRSW_BACKGROUND].bottom; + this->widget[BRSW_RESIZE].top = this->widget[BRSW_BACKGROUND].bottom - 11; + } this->SetDirty(); } if (newstations) { uint y = 35; + SetVScrollCount(this, _railstation.station_count); for (uint16 i = this->vscroll.pos; i < _railstation.station_count && i < (uint)(this->vscroll.pos + this->vscroll.cap); i++) { const StationSpec *statspec = GetCustomStationSpec(_railstation.station_class, i); + Widget w = this->widget[BRSW_NEWST_LIST]; if (statspec != NULL && statspec->name != 0) { if (HasBit(statspec->callbackmask, CBM_STATION_AVAIL) && GB(GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE), 0, 8) == 0) { - GfxFillRect(8, y - 2, 127, y + 10, 0, FILLRECT_CHECKER); + GfxFillRect(w.left + 1, y - 2, w.right - 1, y + 10, 0, FILLRECT_CHECKER); } - DrawStringTruncated(9, y, statspec->name, i == _railstation.station_type ? TC_WHITE : TC_BLACK, 118); + DrawStringTruncated(9, y, statspec->name, i == _railstation.station_type ? TC_WHITE : TC_BLACK, w.right - w.left - 3); } else { - DrawStringTruncated(9, y, STR_STAT_CLASS_DFLT, i == _railstation.station_type ? TC_WHITE : TC_BLACK, 118); + DrawStringTruncated(9, y, STR_STAT_CLASS_DFLT, i == _railstation.station_type ? TC_WHITE : TC_BLACK, w.right - w.left - 3); } y += 14; @@ -1253,6 +1265,13 @@ { CheckRedrawStationCoverage(this); } + + virtual void OnResize(Point new_size, Point delta) + { + if (!_railstation.newstations) return; + this->vscroll.cap += delta.y / (int)this->resize.step_height; + this->widget[BRSW_NEWST_LIST].data = (this->vscroll.cap << 8) + 1; + } }; /** Widget definition of the standard build rail station window */ @@ -1288,35 +1307,36 @@ /** Widget definition of the build NewGRF rail station window */ static const Widget _newstation_builder_widgets[] = { { WWT_CLOSEBOX, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BRSW_CLOSEBOX -{ WWT_CAPTION, RESIZE_NONE, COLOUR_DARK_GREEN, 11, 147, 0, 13, STR_3000_RAIL_STATION_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION -{ WWT_PANEL, RESIZE_NONE, COLOUR_DARK_GREEN, 0, 147, 14, 289, 0x0, STR_NULL}, // BRSW_BACKGROUND -{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 7, 72, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, // BRSW_PLATFORM_DIR_X -{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 75, 140, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, // BRSW_PLATFORM_DIR_Y +{ WWT_CAPTION, RESIZE_RIGHT, COLOUR_DARK_GREEN, 11, 147, 0, 13, STR_3000_RAIL_STATION_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BRSW_CAPTION +{ WWT_PANEL, RESIZE_RB, COLOUR_DARK_GREEN, 0, 147, 14, 289, 0x0, STR_NULL}, // BRSW_BACKGROUND +{ WWT_PANEL, RESIZE_TB, COLOUR_GREY, 7, 72, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, // BRSW_PLATFORM_DIR_X +{ WWT_PANEL, RESIZE_TB, COLOUR_GREY, 75, 140, 116, 163, 0x0, STR_304E_SELECT_RAILROAD_STATION}, // BRSW_PLATFORM_DIR_Y -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 22, 36, 177, 188, STR_00CB_1, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_1 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 37, 51, 177, 188, STR_00CC_2, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_2 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 52, 66, 177, 188, STR_00CD_3, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_3 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 67, 81, 177, 188, STR_00CE_4, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_4 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 82, 96, 177, 188, STR_00CF_5, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_5 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 97, 111, 177, 188, STR_6, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_6 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 112, 126, 177, 188, STR_7, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_7 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 22, 36, 177, 188, STR_00CB_1, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_1 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 37, 51, 177, 188, STR_00CC_2, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_2 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 52, 66, 177, 188, STR_00CD_3, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_3 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 67, 81, 177, 188, STR_00CE_4, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_4 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 82, 96, 177, 188, STR_00CF_5, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_5 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 97, 111, 177, 188, STR_6, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_6 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 112, 126, 177, 188, STR_7, STR_304F_SELECT_NUMBER_OF_PLATFORMS}, // BRSW_PLATFORM_NUM_7 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 22, 36, 202, 213, STR_00CB_1, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_1 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 37, 51, 202, 213, STR_00CC_2, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_2 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 52, 66, 202, 213, STR_00CD_3, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_3 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 67, 81, 202, 213, STR_00CE_4, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_4 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 82, 96, 202, 213, STR_00CF_5, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_5 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 97, 111, 202, 213, STR_6, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_6 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 112, 126, 202, 213, STR_7, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_7 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 22, 36, 202, 213, STR_00CB_1, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_1 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 37, 51, 202, 213, STR_00CC_2, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_2 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 52, 66, 202, 213, STR_00CD_3, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_3 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 67, 81, 202, 213, STR_00CE_4, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_4 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 82, 96, 202, 213, STR_00CF_5, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_5 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 97, 111, 202, 213, STR_6, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_6 +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 112, 126, 202, 213, STR_7, STR_3050_SELECT_LENGTH_OF_RAILROAD}, // BRSW_PLATFORM_LEN_7 -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 37, 111, 216, 227, STR_DRAG_DROP, STR_STATION_DRAG_DROP}, // BRSW_PLATFORM_DRAG_N_DROP -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 14, 73, 242, 253, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, // BRSW_HIGHLIGHT_OFF -{ WWT_TEXTBTN, RESIZE_NONE, COLOUR_GREY, 74, 133, 242, 253, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, // BRSW_HIGHLIGHT_ON +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 37, 111, 216, 227, STR_DRAG_DROP, STR_STATION_DRAG_DROP}, // BRSW_PLATFORM_DRAG_N_DROP +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 14, 73, 242, 253, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE}, // BRSW_HIGHLIGHT_OFF +{ WWT_TEXTBTN, RESIZE_TB, COLOUR_GREY, 74, 133, 242, 253, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA}, // BRSW_HIGHLIGHT_ON /* newstations gui additions */ -{ WWT_DROPDOWNIN, RESIZE_NONE, COLOUR_GREY, 7, 140, 17, 28, STR_02BD, STR_SELECT_STATION_CLASS_TIP}, // BRSW_NEWST_DROPDOWN -{ WWT_MATRIX, RESIZE_NONE, COLOUR_GREY, 7, 128, 32, 102, 0x501, STR_SELECT_STATION_TYPE_TIP}, // BRSW_NEWST_LIST -{ WWT_SCROLLBAR, RESIZE_NONE, COLOUR_GREY, 129, 140, 32, 102, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // BRSW_NEWST_SCROLL +{ WWT_DROPDOWNIN, RESIZE_RIGHT, COLOUR_GREY, 7, 140, 17, 28, STR_02BD, STR_SELECT_STATION_CLASS_TIP}, // BRSW_NEWST_DROPDOWN +{ WWT_MATRIX, RESIZE_RB, COLOUR_GREY, 7, 128, 32, 102, 0x501, STR_SELECT_STATION_TYPE_TIP}, // BRSW_NEWST_LIST +{ WWT_SCROLLBAR, RESIZE_LRB, COLOUR_GREY, 129, 140, 32, 102, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // BRSW_NEWST_SCROLL +{ WWT_RESIZEBOX, RESIZE_LRTB, COLOUR_DARK_GREEN, 136, 147, 278, 289, 0x0, STR_NULL}, // BRSW_RESIZE { WIDGETS_END}, }; @@ -1332,7 +1352,7 @@ static const WindowDesc _newstation_builder_desc = { WDP_AUTO, WDP_AUTO, 148, 290, 148, 290, WC_BUILD_STATION, WC_BUILD_TOOLBAR, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE, _newstation_builder_widgets, };