aircraft_gui.c
changeset 757 7bfd863750a7
parent 755 80091de50044
child 767 27edbcad701c
equal deleted inserted replaced
756:b76998029c12 757:7bfd863750a7
   641 	int num,x,y;
   641 	int num,x,y;
   642 
   642 
   643 	tile = w->window_number;
   643 	tile = w->window_number;
   644 
   644 
   645 	/* setup disabled buttons */
   645 	/* setup disabled buttons */
   646 	w->disabled_state = (_map_owner[tile]==_local_player) ? 0 : ((1<<3)|(1<<5));
   646 	w->disabled_state = (_map_owner[tile]==_local_player) ? 0 : ((1<<4)|(1<<6));
   647 
   647 
   648 	/* determine amount of items for scroller */
   648 	/* determine amount of items for scroller */
   649 	num = 0;
   649 	num = 0;
   650 	FOR_ALL_VEHICLES(v) {
   650 	FOR_ALL_VEHICLES(v) {
   651 		if (v->type == VEH_Aircraft && v->subtype <= 2 && v->vehstatus&VS_HIDDEN &&
   651 		if (v->type == VEH_Aircraft && v->subtype <= 2 && v->vehstatus&VS_HIDDEN &&
   754 	}
   754 	}
   755 }
   755 }
   756 
   756 
   757 static const Widget _aircraft_depot_widgets[] = {
   757 static const Widget _aircraft_depot_widgets[] = {
   758 {    WWT_TEXTBTN,    14,     0,    10,     0,    13, STR_00C5, STR_018B_CLOSE_WINDOW},
   758 {    WWT_TEXTBTN,    14,     0,    10,     0,    13, STR_00C5, STR_018B_CLOSE_WINDOW},
   759 {    WWT_CAPTION,    14,    11,   330,     0,    13, STR_A002_AIRCRAFT_HANGAR, STR_018C_WINDOW_TITLE_DRAG_THIS},
   759 {    WWT_CAPTION,    14,    11,   318,     0,    13, STR_A002_AIRCRAFT_HANGAR, STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   760 {  WWT_STICKYBOX,    14,   319,   330,     0,    13, 0x0,   STR_STICKY_BUTTON},
   760 {     WWT_MATRIX,    14,     0,   295,    14,    61, 0x204, STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT},
   761 {     WWT_MATRIX,    14,     0,   295,    14,    61, 0x204, STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT},
   761 {     WWT_IMGBTN,    14,   296,   319,    14,    61, 0x2A9, STR_A023_DRAG_AIRCRAFT_TO_HERE_TO},
   762 {     WWT_IMGBTN,    14,   296,   319,    14,    61, 0x2A9, STR_A023_DRAG_AIRCRAFT_TO_HERE_TO},
   762 {  WWT_SCROLLBAR,    14,   320,   330,    14,    61, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
   763 {  WWT_SCROLLBAR,    14,   320,   330,    14,    61, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
   763 { WWT_PUSHTXTBTN,    14,     0,   164,    62,    73, STR_A003_NEW_AIRCRAFT, STR_A022_BUILD_NEW_AIRCRAFT},
   764 { WWT_PUSHTXTBTN,    14,     0,   164,    62,    73, STR_A003_NEW_AIRCRAFT, STR_A022_BUILD_NEW_AIRCRAFT},
   764 { WWT_PUSHTXTBTN,    14,   165,   330,    62,    73, STR_00E4_LOCATION, STR_A024_CENTER_MAIN_VIEW_ON_HANGAR},
   765 { WWT_PUSHTXTBTN,    14,   165,   330,    62,    73, STR_00E4_LOCATION, STR_A024_CENTER_MAIN_VIEW_ON_HANGAR},
   773 		DrawAircraftDepotWindow(w);
   774 		DrawAircraftDepotWindow(w);
   774 		break;
   775 		break;
   775 
   776 
   776 	case WE_CLICK:
   777 	case WE_CLICK:
   777 		switch(e->click.widget) {
   778 		switch(e->click.widget) {
   778 		case 2: /* click aircraft */
   779 		case 3: /* click aircraft */
   779 			AircraftDepotClickAircraft(w, e->click.pt.x, e->click.pt.y);
   780 			AircraftDepotClickAircraft(w, e->click.pt.x, e->click.pt.y);
   780 			break;
   781 			break;
   781 		case 5: /* show build aircraft window */
   782 		case 6: /* show build aircraft window */
   782 			ShowBuildAircraftWindow(w->window_number);
   783 			ShowBuildAircraftWindow(w->window_number);
   783 			break;
   784 			break;
   784 		case 6: /* scroll to tile */
   785 		case 7: /* scroll to tile */
   785 			ScrollMainWindowToTile(w->window_number);
   786 			ScrollMainWindowToTile(w->window_number);
   786 			break;
   787 			break;
   787 		}
   788 		}
   788 		break;
   789 		break;
   789 
   790 
   791 		DeleteWindowById(WC_BUILD_VEHICLE, w->window_number);
   792 		DeleteWindowById(WC_BUILD_VEHICLE, w->window_number);
   792 		break;
   793 		break;
   793 
   794 
   794 	case WE_DRAGDROP: {
   795 	case WE_DRAGDROP: {
   795 		switch(e->click.widget) {
   796 		switch(e->click.widget) {
   796 		case 2: {
   797 		case 3: {
   797 			Vehicle *v;
   798 			Vehicle *v;
   798 			VehicleID sel = WP(w,traindepot_d).sel;
   799 			VehicleID sel = WP(w,traindepot_d).sel;
   799 
   800 
   800 			WP(w,traindepot_d).sel = INVALID_VEHICLE;
   801 			WP(w,traindepot_d).sel = INVALID_VEHICLE;
   801 			SetWindowDirty(w);
   802 			SetWindowDirty(w);
   805 					sel == v->index) {
   806 					sel == v->index) {
   806 				ShowAircraftViewWindow(v);
   807 				ShowAircraftViewWindow(v);
   807 			}
   808 			}
   808 		} break;
   809 		} break;
   809 
   810 
   810 		case 3:
   811 		case 4:
   811 			if (!HASBIT(w->disabled_state, 3) &&
   812 			if (!HASBIT(w->disabled_state, 4) &&
   812 					WP(w,traindepot_d).sel != INVALID_VEHICLE)	{
   813 					WP(w,traindepot_d).sel != INVALID_VEHICLE)	{
   813 				Vehicle *v;
   814 				Vehicle *v;
   814 
   815 
   815 				HandleButtonClick(w, 3);
   816 				HandleButtonClick(w, 4);
   816 
   817 
   817 				v = &_vehicles[WP(w,traindepot_d).sel];
   818 				v = &_vehicles[WP(w,traindepot_d).sel];
   818 				WP(w,traindepot_d).sel = INVALID_VEHICLE;
   819 				WP(w,traindepot_d).sel = INVALID_VEHICLE;
   819 
   820 
   820 				_backup_orders_tile = v->tile;
   821 				_backup_orders_tile = v->tile;
   837 
   838 
   838 
   839 
   839 static const WindowDesc _aircraft_depot_desc = {
   840 static const WindowDesc _aircraft_depot_desc = {
   840 	-1, -1, 331, 74,
   841 	-1, -1, 331, 74,
   841 	WC_VEHICLE_DEPOT,0,
   842 	WC_VEHICLE_DEPOT,0,
   842 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
   843 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
   843 	_aircraft_depot_widgets,
   844 	_aircraft_depot_widgets,
   844 	AircraftDepotWndProc
   845 	AircraftDepotWndProc
   845 };
   846 };
   846 
   847 
   847 
   848 
   887 }
   888 }
   888 
   889 
   889 
   890 
   890 static Widget _player_aircraft_widgets[] = {
   891 static Widget _player_aircraft_widgets[] = {
   891 {   WWT_CLOSEBOX,    14,     0,    10,     0,    13, STR_00C5,							STR_018B_CLOSE_WINDOW},
   892 {   WWT_CLOSEBOX,    14,     0,    10,     0,    13, STR_00C5,							STR_018B_CLOSE_WINDOW},
   892 {    WWT_CAPTION,    14,    11,   259,     0,    13, STR_A009_AIRCRAFT,			STR_018C_WINDOW_TITLE_DRAG_THIS},
   893 {    WWT_CAPTION,    14,    11,   247,     0,    13, STR_A009_AIRCRAFT,			STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   894 {  WWT_STICKYBOX,    14,   248,   259,     0,    13, 0x0,                   STR_STICKY_BUTTON},
   893 { WWT_PUSHTXTBTN,    14,     0,    80,    14,    25, SRT_SORT_BY,						STR_SORT_ORDER_TIP},
   895 { WWT_PUSHTXTBTN,    14,     0,    80,    14,    25, SRT_SORT_BY,						STR_SORT_ORDER_TIP},
   894 {      WWT_PANEL,    14,    81,   237,    14,    25, 0x0,										STR_SORT_CRITERIA_TIP},
   896 {      WWT_PANEL,    14,    81,   237,    14,    25, 0x0,										STR_SORT_CRITERIA_TIP},
   895 {   WWT_CLOSEBOX,    14,   238,   248,    14,    25, STR_0225,							STR_SORT_CRITERIA_TIP},
   897 {   WWT_CLOSEBOX,    14,   238,   248,    14,    25, STR_0225,							STR_SORT_CRITERIA_TIP},
   896 {      WWT_PANEL,    14,   249,   259,    14,    25, 0x0,										STR_NULL},
   898 {      WWT_PANEL,    14,   249,   259,    14,    25, 0x0,										STR_NULL},
   897 {     WWT_MATRIX,    14,     0,   248,    26,   169, 0x401,									STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT},
   899 {     WWT_MATRIX,    14,     0,   248,    26,   169, 0x401,									STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT},
   901 {   WIDGETS_END},
   903 {   WIDGETS_END},
   902 };
   904 };
   903 
   905 
   904 static Widget _other_player_aircraft_widgets[] = {
   906 static Widget _other_player_aircraft_widgets[] = {
   905 {   WWT_CLOSEBOX,    14,     0,    10,     0,    13, STR_00C5,							STR_018B_CLOSE_WINDOW},
   907 {   WWT_CLOSEBOX,    14,     0,    10,     0,    13, STR_00C5,							STR_018B_CLOSE_WINDOW},
   906 {    WWT_CAPTION,    14,    11,   259,     0,    13, STR_A009_AIRCRAFT,			STR_018C_WINDOW_TITLE_DRAG_THIS},
   908 {    WWT_CAPTION,    14,    11,   247,     0,    13, STR_A009_AIRCRAFT,			STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   909 {  WWT_STICKYBOX,    14,   248,   259,     0,    13, 0x0,                   STR_STICKY_BUTTON},
   907 { WWT_PUSHTXTBTN,    14,     0,    80,    14,    25, SRT_SORT_BY,						STR_SORT_ORDER_TIP},
   910 { WWT_PUSHTXTBTN,    14,     0,    80,    14,    25, SRT_SORT_BY,						STR_SORT_ORDER_TIP},
   908 {      WWT_PANEL,    14,    81,   237,    14,    25, 0x0,										STR_SORT_CRITERIA_TIP},
   911 {      WWT_PANEL,    14,    81,   237,    14,    25, 0x0,										STR_SORT_CRITERIA_TIP},
   909 {   WWT_CLOSEBOX,    14,   238,   248,    14,    25, STR_0225,							STR_SORT_CRITERIA_TIP},
   912 {   WWT_CLOSEBOX,    14,   238,   248,    14,    25, STR_0225,							STR_SORT_CRITERIA_TIP},
   910 {      WWT_PANEL,    14,   249,   259,    14,    25, 0x0,										STR_NULL},
   913 {      WWT_PANEL,    14,   249,   259,    14,    25, 0x0,										STR_NULL},
   911 {     WWT_MATRIX,    14,     0,   248,    26,   169, 0x401,									STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT},
   914 {     WWT_MATRIX,    14,     0,   248,    26,   169, 0x401,									STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT},
   931 
   934 
   932 		SetVScrollCount(w, vl->list_length);
   935 		SetVScrollCount(w, vl->list_length);
   933 
   936 
   934 		// disable 'Sort By' tooltip on Unsorted sorting criteria
   937 		// disable 'Sort By' tooltip on Unsorted sorting criteria
   935 		if (vl->sort_type == SORT_BY_UNSORTED)
   938 		if (vl->sort_type == SORT_BY_UNSORTED)
   936 			w->disabled_state |= (1 << 2);
   939 			w->disabled_state |= (1 << 3);
   937 
   940 
   938 		/* draw the widgets */
   941 		/* draw the widgets */
   939 		{
   942 		{
   940 			const Player *p = DEREF_PLAYER(owner);
   943 			const Player *p = DEREF_PLAYER(owner);
   941 			/* XXX hack */
   944 			/* XXX hack */
   993 		}
   996 		}
   994 		}	break;
   997 		}	break;
   995 
   998 
   996 	case WE_CLICK: {
   999 	case WE_CLICK: {
   997 		switch(e->click.widget) {
  1000 		switch(e->click.widget) {
   998 		case 2: /* Flip sorting method ascending/descending */
  1001 		case 3: /* Flip sorting method ascending/descending */
   999 			vl->flags ^= VL_DESC;
  1002 			vl->flags ^= VL_DESC;
  1000 			vl->flags |= VL_RESORT;
  1003 			vl->flags |= VL_RESORT;
  1001 			SetWindowDirty(w);
  1004 			SetWindowDirty(w);
  1002 			break;
  1005 			break;
  1003 
  1006 
  1004 		case 3: case 4:/* Select sorting criteria dropdown menu */
  1007 		case 4: case 5:/* Select sorting criteria dropdown menu */
  1005 			ShowDropDownMenu(w, _vehicle_sort_listing, vl->sort_type, 4, 0);
  1008 			ShowDropDownMenu(w, _vehicle_sort_listing, vl->sort_type, 5, 0);
  1006 			return;
  1009 			return;
  1007 
  1010 
  1008 		case 6: { /* Matrix to show vehicles */
  1011 		case 7: { /* Matrix to show vehicles */
  1009 			uint32 id_v = (e->click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / PLY_WND_PRC__SIZE_OF_ROW_BIG;
  1012 			uint32 id_v = (e->click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / PLY_WND_PRC__SIZE_OF_ROW_BIG;
  1010 
  1013 
  1011 			if (id_v >= w->vscroll.cap) { return;} // click out of bounds
  1014 			if (id_v >= w->vscroll.cap) { return;} // click out of bounds
  1012 
  1015 
  1013 			id_v += w->vscroll.pos;
  1016 			id_v += w->vscroll.pos;
  1023 
  1026 
  1024 				ShowAircraftViewWindow(v);
  1027 				ShowAircraftViewWindow(v);
  1025 			}
  1028 			}
  1026 		} break;
  1029 		} break;
  1027 
  1030 
  1028 		case 8: { /* Build new Vehicle */
  1031 		case 9: { /* Build new Vehicle */
  1029 			uint tile;
  1032 			uint tile;
  1030 
  1033 
  1031 			tile = _last_built_aircraft_depot_tile;
  1034 			tile = _last_built_aircraft_depot_tile;
  1032 			do {
  1035 			do {
  1033 				if (_map_owner[tile] == _local_player && IsAircraftHangarTile(tile)) {
  1036 				if (_map_owner[tile] == _local_player && IsAircraftHangarTile(tile)) {
  1050 			vl->flags |= VL_RESORT;
  1053 			vl->flags |= VL_RESORT;
  1051 			vl->sort_type = e->dropdown.index;
  1054 			vl->sort_type = e->dropdown.index;
  1052 
  1055 
  1053 			// enable 'Sort By' if a sorter criteria is chosen
  1056 			// enable 'Sort By' if a sorter criteria is chosen
  1054 			if (vl->sort_type != SORT_BY_UNSORTED)
  1057 			if (vl->sort_type != SORT_BY_UNSORTED)
  1055 				w->disabled_state &= ~(1 << 2);
  1058 				w->disabled_state &= ~(1 << 3);
  1056 		}
  1059 		}
  1057 		SetWindowDirty(w);
  1060 		SetWindowDirty(w);
  1058 		break;
  1061 		break;
  1059 
  1062 
  1060 	case WE_CREATE: /* set up resort timer */
  1063 	case WE_CREATE: /* set up resort timer */
  1077 }
  1080 }
  1078 
  1081 
  1079 static const WindowDesc _player_aircraft_desc = {
  1082 static const WindowDesc _player_aircraft_desc = {
  1080 	-1, -1, 260, 182,
  1083 	-1, -1, 260, 182,
  1081 	WC_AIRCRAFT_LIST,0,
  1084 	WC_AIRCRAFT_LIST,0,
  1082 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
  1085 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
  1083 	_player_aircraft_widgets,
  1086 	_player_aircraft_widgets,
  1084 	PlayerAircraftWndProc
  1087 	PlayerAircraftWndProc
  1085 };
  1088 };
  1086 
  1089 
  1087 static const WindowDesc _other_player_aircraft_desc = {
  1090 static const WindowDesc _other_player_aircraft_desc = {
  1088 	-1, -1, 260, 170,
  1091 	-1, -1, 260, 170,
  1089 	WC_AIRCRAFT_LIST,0,
  1092 	WC_AIRCRAFT_LIST,0,
  1090 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
  1093 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
  1091 	_other_player_aircraft_widgets,
  1094 	_other_player_aircraft_widgets,
  1092 	PlayerAircraftWndProc
  1095 	PlayerAircraftWndProc
  1093 };
  1096 };
  1094 
  1097 
  1095 void ShowPlayerAircraft(int player, int station)
  1098 void ShowPlayerAircraft(int player, int station)