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); |