src/group_gui.cpp
branchNewGRF_ports
changeset 6871 5a9dc001e1ad
parent 6870 ca3fd1fbe311
child 6872 1c4a4a609f85
--- a/src/group_gui.cpp	Sat Oct 06 21:16:00 2007 +0000
+++ b/src/group_gui.cpp	Mon Dec 03 23:39:38 2007 +0000
@@ -43,7 +43,7 @@
 	if (!(gl->l.flags & VL_REBUILD)) return;
 
 	list = MallocT<const Group*>(GetGroupArraySize());
-	if (list == NULL) {
+	if (GetGroupArraySize() != 0 && list == NULL) {
 		error("Could not allocate memory for the group-sorting-list");
 	}
 
@@ -143,9 +143,9 @@
 {  WWT_STICKYBOX,     RESIZE_LR,    14,   448,   459,     0,    13, 0x0,                  STR_STICKY_BUTTON},
 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   200,    14,    25, 0x0,                  STR_NULL},
 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   200,    26,    38, 0x0,                  STR_NULL},
-{      WWT_PANEL,   RESIZE_NONE,    14,     0,   200,    39,    52, 0x0,                  STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,    14,     0,   200,    39,    51, 0x0,                  STR_NULL},
 {     WWT_MATRIX, RESIZE_BOTTOM,    14,     0,   188,    52,   168, 0x701,                STR_GROUPS_CLICK_ON_GROUP_FOR_TIP},
-{  WWT_SCROLLBAR, RESIZE_BOTTOM,    14,   189,   200,    26,   168, 0x0,                  STR_0190_SCROLL_BAR_SCROLLS_LIST},
+{  WWT_SCROLLBAR, RESIZE_BOTTOM,    14,   189,   200,    52,   168, 0x0,                  STR_0190_SCROLL_BAR_SCROLLS_LIST},
 { WWT_PUSHTXTBTN,   RESIZE_NONE,    14,   201,   281,    14,    25, STR_SORT_BY,          STR_SORT_ORDER_TIP},
 {      WWT_PANEL,   RESIZE_NONE,    14,   282,   435,    14,    25, 0x0,                  STR_SORT_CRITERIA_TIP},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   436,   447,    14,    25, STR_0225,             STR_SORT_CRITERIA_TIP},
@@ -266,7 +266,7 @@
  */
 static void UpdateGroupActionDropdown(Window *w, GroupID gid, bool refresh = true)
 {
-	if (refresh && !IsWindowWidgetLowered(w, GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN)) return;
+	if (refresh && !w->IsWidgetLowered(GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN)) return;
 
 	static StringID action_str[] = {
 		STR_REPLACE_VEHICLES,
@@ -328,8 +328,21 @@
 			SetVScrollCount(w, gl->l.list_length);
 			SetVScroll2Count(w, gv->l.list_length);
 
+			/* The drop down menu is out, *but* it may not be used, retract it. */
+			if (gv->l.list_length == 0 && w->IsWidgetLowered(GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN)) {
+				w->RaiseWidget(GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN);
+				Window **w2;
+				FOR_ALL_WINDOWS(w2) {
+					if (w->window_class  == WP(*w2, dropdown_d).parent_wnd_class &&
+							w->window_number == WP(*w2, dropdown_d).parent_wnd_num) {
+						DeleteWindow(*w2);
+						break;
+					}
+				}
+			}
+
 			/* Disable all lists management button when the list is empty */
-			SetWindowWidgetsDisabledState(w, gv->l.list_length == 0 || _local_player != owner,
+			w->SetWidgetsDisabledState(gv->l.list_length == 0 || _local_player != owner,
 					GRP_WIDGET_STOP_ALL,
 					GRP_WIDGET_START_ALL,
 					GRP_WIDGET_MANAGE_VEHICLES,
@@ -337,7 +350,7 @@
 					WIDGET_LIST_END);
 
 			/* Disable the group specific function when we select the default group or all vehicles */
-			SetWindowWidgetsDisabledState(w, IsDefaultGroupID(gv->group_sel) || IsAllGroupID(gv->group_sel) || _local_player != owner,
+			w->SetWidgetsDisabledState(IsDefaultGroupID(gv->group_sel) || IsAllGroupID(gv->group_sel) || _local_player != owner,
 					GRP_WIDGET_DELETE_GROUP,
 					GRP_WIDGET_RENAME_GROUP,
 					GRP_WIDGET_REPLACE_PROTECTION,
@@ -349,7 +362,7 @@
 			 *  verify, whether you are the owner of the vehicle,
 			 *  so it doesn't have to be disabled
 			 */
-			SetWindowWidgetsDisabledState(w, _local_player != owner,
+			w->SetWidgetsDisabledState(_local_player != owner,
 					GRP_WIDGET_CREATE_GROUP,
 					GRP_WIDGET_AVAILABLE_VEHICLES,
 					WIDGET_LIST_END);
@@ -433,11 +446,11 @@
 					break;
 				default: NOT_REACHED(); break;
 			}
-			DrawString(10, y1, str_all_veh, IsAllGroupID(gv->group_sel) ? 12 : 16);
+			DrawString(10, y1, str_all_veh, IsAllGroupID(gv->group_sel) ? TC_WHITE : TC_BLACK);
 
 			y1 += 13;
 
-			DrawString(10, y1, str_no_group_veh, IsDefaultGroupID(gv->group_sel) ? 12 : 16);
+			DrawString(10, y1, str_no_group_veh, IsDefaultGroupID(gv->group_sel) ? TC_WHITE : TC_BLACK);
 
 			max = min(w->vscroll.pos + w->vscroll.cap, gl->l.list_length);
 			for (i = w->vscroll.pos ; i < max ; ++i) {
@@ -449,16 +462,16 @@
 
 				/* draw the selected group in white, else we draw it in black */
 				SetDParam(0, g->index);
-				DrawString(10, y1, STR_GROUP_NAME, (gv->group_sel == g->index) ? 12 : 16);
+				DrawString(10, y1, STR_GROUP_NAME, (gv->group_sel == g->index) ? TC_WHITE : TC_BLACK);
 
 				/* draw the number of vehicles of the group */
 				SetDParam(0, g->num_vehicle);
-				DrawStringRightAligned(187, y1 + 1, STR_GROUP_TINY_NUM, (gv->group_sel == g->index) ? 12 : 16);
+				DrawStringRightAligned(187, y1 + 1, STR_GROUP_TINY_NUM, (gv->group_sel == g->index) ? TC_WHITE : TC_BLACK);
 			}
 
 			/* Draw Matrix Vehicle according to the vehicle list built before */
-			DrawString(285, 15, _vehicle_sort_listing[gv->l.sort_type], 0x10);
-			DoDrawString(gv->l.flags & VL_DESC ? DOWNARROW : UPARROW, 269, 15, 0x10);
+			DrawString(285, 15, _vehicle_sort_listing[gv->l.sort_type], TC_BLACK);
+			DoDrawString(gv->l.flags & VL_DESC ? DOWNARROW : UPARROW, 269, 15, TC_BLACK);
 
 			max = min(w->vscroll2.pos + w->vscroll2.cap, gv->l.list_length);
 			for (i = w->vscroll2.pos ; i < max ; ++i) {
@@ -470,17 +483,17 @@
 				DrawVehicleProfitButton(v, x, y2 + 13);
 
 				SetDParam(0, v->unitnumber);
-				DrawString(x, y2 + 2, v->IsInDepot() ? STR_021F : (v->age > v->max_age - 366 ? STR_00E3 : STR_00E2), 0);
+				DrawString(x, y2 + 2, v->IsInDepot() ? STR_021F : (v->age > v->max_age - 366 ? STR_00E3 : STR_00E2), TC_FROMSTRING);
 
 				if (w->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG2) DrawSmallOrderList(v, x + 138, y2);
 
 				SetDParam(0, v->profit_this_year);
 				SetDParam(1, v->profit_last_year);
-				DrawString(x + 19, y2 + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0);
+				DrawString(x + 19, y2 + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING);
 
 				if (IsValidGroupID(v->group_id)) {
 					SetDParam(0, v->group_id);
-					DrawString(x + 19, y2, STR_GROUP_TINY_NAME, 16);
+					DrawString(x + 19, y2, STR_GROUP_TINY_NAME, TC_BLACK);
 				}
 
 				y2 += w->resize.step_height;
@@ -554,7 +567,7 @@
 					gv->vehicle_sel = v->index;
 
 					if (v->IsValid()) {
-						SetObjectToPlaceWnd(v->GetImage(DIR_W), GetVehiclePalette(v), 4, w);
+						SetObjectToPlaceWnd(v->GetImage(DIR_W), GetVehiclePalette(v), VHM_DRAG, w);
 					}
 
 					SetWindowDirty(w);