summaryrefslogtreecommitdiff
path: root/aircraft_gui.c
diff options
context:
space:
mode:
authorbjarni <bjarni@openttd.org>2006-09-26 16:47:51 +0000
committerbjarni <bjarni@openttd.org>2006-09-26 16:47:51 +0000
commitf7769e885e1a928018a9be33553a887cb00babf7 (patch)
tree381d620a928fbc6c40266c4078ae71959a878f36 /aircraft_gui.c
parent65a3777a403f1c3eb0f2856bf0b0073b4c83fad9 (diff)
downloadopenttd-f7769e885e1a928018a9be33553a887cb00babf7.tar.xz
(svn r6513) -Codechange: unified the code to draw depot windows
This change is intended to make it easier to make depot behaviour consistent and faster to code when adding more features in the future The user interface should hopefully not be affected by this
Diffstat (limited to 'aircraft_gui.c')
-rw-r--r--aircraft_gui.c279
1 files changed, 0 insertions, 279 deletions
diff --git a/aircraft_gui.c b/aircraft_gui.c
index b447be624..8e1fd60e5 100644
--- a/aircraft_gui.c
+++ b/aircraft_gui.c
@@ -659,285 +659,6 @@ void ShowAircraftViewWindow(const Vehicle *v)
}
}
-static void DrawAircraftDepotWindow(Window *w)
-{
- Vehicle **vl = WP(w, traindepot_d).vehicle_list;
- TileIndex tile = w->window_number;
- int x, y, max;
- uint16 num = WP(w, traindepot_d).engine_count;
-
-
- /* setup disabled buttons */
- w->disabled_state =
- IsTileOwner(tile, _local_player) ? 0 : ((1<<4) | (1<<7) | (1<<8));
-
- /* determine amount of items for scroller */
- SetVScrollCount(w, (num + w->hscroll.cap - 1) / w->hscroll.cap);
-
- SetDParam(0, GetStationIndex(tile));
- DrawWindowWidgets(w);
-
- x = 2;
- y = 15;
- num = w->vscroll.pos * w->hscroll.cap;
- max = min(WP(w, traindepot_d).engine_count, num + (w->vscroll.cap * w->hscroll.cap));
-
- for (; num < max; num++) {
- const Vehicle *v = vl[num];
-
- DrawAircraftImage(v, x + 12, y, WP(w,traindepot_d).sel);
-
- SetDParam(0, v->unitnumber);
- DrawString(x, y + 2, (uint16)(v->max_age-366) >= v->age ? STR_00E2 : STR_00E3, 0);
-
- DrawSprite((v->vehstatus & VS_STOPPED) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, x, y + 12);
-
- if ((x += 74) == 2 + 74 * w->hscroll.cap) {
- x = 2;
- y += 24;
- }
- }
-}
-
-static int GetVehicleFromAircraftDepotWndPt(const Window *w, int x, int y, Vehicle **veh)
-{
- Vehicle **vl = WP(w, traindepot_d).vehicle_list;
- uint xt,row,xm,ym;
- int pos;
-
- xt = x / 74;
- xm = x % 74;
- if (xt >= w->hscroll.cap)
- return 1;
-
- row = (y - 14) / 24;
- ym = (y - 14) % 24;
- if (row >= w->vscroll.cap) return 1;
-
- pos = (row + w->vscroll.pos) * w->hscroll.cap + xt;
-
- if (WP(w, traindepot_d).engine_count <= pos) return 1; // empty block, so no vehicle is selected
- *veh = vl[pos];
-
- if (xm >= 12) return 0; // drag vehicle
- if (ym <= 12) return -1; // show window
- return -2; // start stop
-}
-
-static void AircraftDepotClickAircraft(Window *w, int x, int y)
-{
- Vehicle *v = NULL;
- int mode = GetVehicleFromAircraftDepotWndPt(w, x, y, &v);
-
- // share / copy orders
- if (_thd.place_mode && mode <= 0) {
- _place_clicked_vehicle = v;
- return;
- }
-
- switch (mode) {
- case 1:
- return;
-
- case 0: // start dragging of vehicle
- if (v != NULL) {
- WP(w,traindepot_d).sel = v->index;
- SetWindowDirty(w);
- SetObjectToPlaceWnd(GetVehiclePalette(v) | GetAircraftImage(v, DIR_W), 4, w);
- }
- break;
-
- case -1: // show info window
- ShowAircraftViewWindow(v);
- break;
-
- case -2: // click start/stop flag
- DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_AIRCRAFT | CMD_MSG(STR_A016_CAN_T_STOP_START_AIRCRAFT));
- break;
-
- default:
- NOT_REACHED();
- }
-}
-
-/**
- * Clones an aircraft
- * @param *v is the original vehicle to clone
- * @param *w is the window of the hangar where the clone is build
- */
-static void HandleCloneVehClick(const Vehicle *v, const Window *w)
-{
- if (v == NULL || v->type != VEH_Aircraft) return;
-
- DoCommandP(w->window_number, v->index, _ctrl_pressed ? 1 : 0,
- CcCloneAircraft, CMD_CLONE_VEHICLE | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT)
- );
-
- ResetObjectToPlace();
-}
-
-static void ClonePlaceObj(const Window *w)
-{
- const Vehicle *v = CheckMouseOverVehicle();
-
- if (v != NULL) HandleCloneVehClick(v, w);
-}
-
-
-static void AircraftDepotWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_CREATE:
- WP(w, traindepot_d).vehicle_list = NULL;
- WP(w, traindepot_d).engine_list_length = 0;
- break;
-
- case WE_PAINT:
- BuildDepotVehicleList(VEH_Aircraft, w->window_number, &WP(w, traindepot_d).vehicle_list, &WP(w, traindepot_d).engine_list_length, &WP(w, traindepot_d).engine_count, NULL, NULL, NULL);
- DrawAircraftDepotWindow(w);
- break;
-
- case WE_CLICK:
- switch (e->we.click.widget) {
- case 5: /* click aircraft */
- AircraftDepotClickAircraft(w, e->we.click.pt.x, e->we.click.pt.y);
- break;
-
- case 7: /* show build aircraft window */
- ResetObjectToPlace();
- ShowBuildAircraftWindow(w->window_number);
- break;
-
- case 8: /* clone button */
- InvalidateWidget(w, 8);
- TOGGLEBIT(w->click_state, 8);
-
- if (HASBIT(w->click_state, 8)) {
- _place_clicked_vehicle = NULL;
- SetObjectToPlaceWnd(SPR_CURSOR_CLONE, VHM_RECT, w);
- } else {
- ResetObjectToPlace();
- }
- break;
-
- case 9: ScrollMainWindowToTile(w->window_number); break;
- }
- break;
-
- case WE_PLACE_OBJ:
- ClonePlaceObj(w);
- break;
-
- case WE_ABORT_PLACE_OBJ:
- CLRBIT(w->click_state, 8);
- InvalidateWidget(w, 8);
- break;
-
- // check if a vehicle in a depot was clicked..
- case WE_MOUSELOOP: {
- const Vehicle *v = _place_clicked_vehicle;
-
- // since OTTD checks all open depot windows, we will make sure that it triggers the one with a clicked clone button
- if (v != NULL && HASBIT(w->click_state, 8)) {
- _place_clicked_vehicle = NULL;
- HandleCloneVehClick(v, w);
- }
- } break;
-
- case WE_DESTROY:
- DeleteWindowById(WC_BUILD_VEHICLE, w->window_number);
- free((void*)WP(w, traindepot_d).vehicle_list);
- break;
-
- case WE_DRAGDROP:
- switch (e->we.click.widget) {
- case 5: {
- Vehicle *v;
- VehicleID sel = WP(w,traindepot_d).sel;
-
- WP(w,traindepot_d).sel = INVALID_VEHICLE;
- SetWindowDirty(w);
-
- if (GetVehicleFromAircraftDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v) == 0 &&
- v != NULL &&
- sel == v->index) {
- ShowAircraftViewWindow(v);
- }
- } break;
-
- case 4:
- if (!HASBIT(w->disabled_state, 4) &&
- WP(w,traindepot_d).sel != INVALID_VEHICLE) {
- Vehicle *v;
-
- HandleButtonClick(w, 4);
-
- v = GetVehicle(WP(w,traindepot_d).sel);
- WP(w,traindepot_d).sel = INVALID_VEHICLE;
-
- _backup_orders_tile = v->tile;
- BackupVehicleOrders(v, _backup_orders_data);
-
- if (!DoCommandP(v->tile, v->index, 0, NULL, CMD_SELL_AIRCRAFT | CMD_MSG(STR_A01C_CAN_T_SELL_AIRCRAFT)))
- _backup_orders_tile = 0;
- }
- break;
- default:
- WP(w,traindepot_d).sel = INVALID_VEHICLE;
- SetWindowDirty(w);
- }
- break;
-
- case WE_RESIZE:
- w->vscroll.cap += e->we.sizing.diff.y / 24;
- w->hscroll.cap += e->we.sizing.diff.x / 74;
- w->widget[5].data = (w->vscroll.cap << 8) + w->hscroll.cap;
- break;
- }
-}
-
-static const Widget _aircraft_depot_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW },
-{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 318, 0, 13, STR_A002_AIRCRAFT_HANGAR, STR_018C_WINDOW_TITLE_DRAG_THIS },
-{ WWT_STICKYBOX, RESIZE_LR, 14, 319, 330, 0, 13, 0x0, STR_STICKY_BUTTON },
-{ WWT_PANEL, RESIZE_LRB, 14, 296, 318, 14, 13, 0x0, STR_NULL },
-{ WWT_IMGBTN, RESIZE_LRTB, 14, 296, 318, 14, 61, 0x2A9, STR_A023_DRAG_AIRCRAFT_TO_HERE_TO },
-
-{ WWT_MATRIX, RESIZE_RB, 14, 0, 295, 14, 61, 0x204, STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT },
-{ WWT_SCROLLBAR, RESIZE_LRB, 14, 319, 330, 14, 61, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST },
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 105, 62, 73, STR_A003_NEW_AIRCRAFT, STR_A022_BUILD_NEW_AIRCRAFT },
-{WWT_NODISTXTBTN, RESIZE_TB, 14, 106, 212, 62, 73, STR_CLONE_AIRCRAFT, STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW },
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 213, 318, 62, 73, STR_00E4_LOCATION, STR_A024_CENTER_MAIN_VIEW_ON_HANGAR },
-{ WWT_PANEL, RESIZE_RTB, 14, 319, 318, 62, 73, 0x0, STR_NULL },
-{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 319, 330, 62, 73, 0x0, STR_RESIZE_BUTTON },
-{ WIDGETS_END},
-};
-
-static const WindowDesc _aircraft_depot_desc = {
- -1, -1, 331, 74,
- WC_VEHICLE_DEPOT,0,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
- _aircraft_depot_widgets,
- AircraftDepotWndProc
-};
-
-
-void ShowAircraftDepotWindow(TileIndex tile)
-{
- Window *w;
-
- w = AllocateWindowDescFront(&_aircraft_depot_desc, tile);
- if (w != NULL) {
- w->caption_color = GetTileOwner(tile);
- w->vscroll.cap = 2;
- w->hscroll.cap = 4;
- w->resize.step_width = 74;
- w->resize.step_height = 24;
- WP(w,traindepot_d).sel = INVALID_VEHICLE;
- _backup_orders_tile = 0;
- }
-}
-
void DrawSmallOrderListAircraft(const Vehicle *v, int x, int y)
{
const Order *order;