train_gui.c
changeset 1246 45f15251412b
parent 1179 abea5b669f74
child 1294 bc831562148e
equal deleted inserted replaced
1245:768d9bc95aaa 1246:45f15251412b
  1305 			DrawWindowWidgets(w);
  1305 			DrawWindowWidgets(w);
  1306 		}
  1306 		}
  1307 		/* draw sorting criteria string */
  1307 		/* draw sorting criteria string */
  1308 		DrawString(85, 15, _vehicle_sort_listing[vl->sort_type], 0x10);
  1308 		DrawString(85, 15, _vehicle_sort_listing[vl->sort_type], 0x10);
  1309 		/* draw arrow pointing up/down for ascending/descending sorting */
  1309 		/* draw arrow pointing up/down for ascending/descending sorting */
  1310 		DoDrawString(
  1310 		DoDrawString(vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
  1311 			vl->flags & VL_DESC ? "\xAA" : "\xA0", 69, 15, 0x10);
       
  1312 
  1311 
  1313 		max = min(w->vscroll.pos + w->vscroll.cap, vl->list_length);
  1312 		max = min(w->vscroll.pos + w->vscroll.cap, vl->list_length);
  1314 		for (i = w->vscroll.pos; i < max; ++i) {
  1313 		for (i = w->vscroll.pos; i < max; ++i) {
  1315 			Vehicle *v = GetVehicle(vl->sort_list[i].index);
  1314 			Vehicle *v = GetVehicle(vl->sort_list[i].index);
  1316 			StringID str;
  1315 			StringID str;
  1345 	case WE_CLICK: {
  1344 	case WE_CLICK: {
  1346 		switch(e->click.widget) {
  1345 		switch(e->click.widget) {
  1347 		case 3: /* Flip sorting method ascending/descending */
  1346 		case 3: /* Flip sorting method ascending/descending */
  1348 			vl->flags ^= VL_DESC;
  1347 			vl->flags ^= VL_DESC;
  1349 			vl->flags |= VL_RESORT;
  1348 			vl->flags |= VL_RESORT;
       
  1349 			_sorting.train.order = !!(vl->flags & VL_DESC);
  1350 			SetWindowDirty(w);
  1350 			SetWindowDirty(w);
  1351 			break;
  1351 			break;
  1352 
  1352 
  1353 		case 4: case 5:/* Select sorting criteria dropdown menu */
  1353 		case 4: case 5:/* Select sorting criteria dropdown menu */
  1354 			ShowDropDownMenu(w, _vehicle_sort_listing, vl->sort_type, 5, 0, 0);
  1354 			ShowDropDownMenu(w, _vehicle_sort_listing, vl->sort_type, 5, 0, 0);
  1407 	case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
  1407 	case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
  1408 		if (vl->sort_type != e->dropdown.index) {
  1408 		if (vl->sort_type != e->dropdown.index) {
  1409 			// value has changed -> resort
  1409 			// value has changed -> resort
  1410 			vl->flags |= VL_RESORT;
  1410 			vl->flags |= VL_RESORT;
  1411 			vl->sort_type = e->dropdown.index;
  1411 			vl->sort_type = e->dropdown.index;
       
  1412 			_sorting.train.criteria = vl->sort_type;
  1412 
  1413 
  1413 			// enable 'Sort By' if a sorter criteria is chosen
  1414 			// enable 'Sort By' if a sorter criteria is chosen
  1414 			if (vl->sort_type != SORT_BY_UNSORTED)
  1415 			if (vl->sort_type != SORT_BY_UNSORTED)
  1415 				w->disabled_state &= ~(1 << 3);
  1416 				CLRBIT(w->disabled_state, 3);
  1416 		}
  1417 		}
  1417 		SetWindowDirty(w);
  1418 		SetWindowDirty(w);
  1418 		break;
  1419 		break;
  1419 
  1420 
  1420 	case WE_CREATE: /* set up resort timer */
  1421 	case WE_CREATE: /* set up resort timer */
  1421 		vl->sort_list = NULL;
  1422 		vl->sort_list = NULL;
  1422 		vl->flags = VL_REBUILD;
  1423 		vl->flags = VL_REBUILD | (_sorting.train.order << (VL_DESC - 1));
  1423 		vl->sort_type = SORT_BY_UNSORTED;
  1424 		vl->sort_type = _sorting.train.criteria;
  1424 		vl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
  1425 		vl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
  1425 		break;
  1426 		break;
  1426 
  1427 
  1427 	case WE_DESTROY:
  1428 	case WE_DESTROY:
  1428 		free(vl->sort_list);
  1429 		free(vl->sort_list);