settings_gui.c
changeset 502 defb8fd8fc98
parent 486 e81a0c19c503
child 507 04b5403aaf6b
equal deleted inserted replaced
501:834f5effaa35 502:defb8fd8fc98
   936 }
   936 }
   937 
   937 
   938 struct GRFFile *_sel_grffile;
   938 struct GRFFile *_sel_grffile;
   939 
   939 
   940 enum {
   940 enum {
   941 	NEwGRF_WND_PROC_OFFSET_TOP_WIDGET = 14,
   941 	NEWGRF_WND_PROC_OFFSET_TOP_WIDGET = 14,
   942 	NEWGRF_WND_PROC_ROWSIZE = 14
   942 	NEWGRF_WND_PROC_ROWSIZE = 14
   943 };
   943 };
   944 
   944 
   945 static void NewgrfWndProc(Window *w, WindowEvent *e)
   945 static void NewgrfWndProc(Window *w, WindowEvent *e)
   946 {
   946 {
   947 	switch (e->event) {
   947 	switch (e->event) {
   948 	case WE_PAINT: {
   948 	case WE_PAINT: {
   949 		int x, y = NEwGRF_WND_PROC_OFFSET_TOP_WIDGET;
   949 		int x, y = NEWGRF_WND_PROC_OFFSET_TOP_WIDGET;
   950 		uint16 i = 0;
   950 		uint16 i = 0;
   951 		struct GRFFile *c = _first_grffile;
   951 		struct GRFFile *c = _first_grffile;
   952 
   952 
   953 		DrawWindowWidgets(w);
   953 		DrawWindowWidgets(w);
   954 		
   954 		
   955 		if (_first_grffile == NULL) { // no grf sets installed
   955 		if (_first_grffile == NULL) { // no grf sets installed
   956 			DrawStringMultiCenter(140, 240, STR_NEWGRF_NO_FILES_INSTALLED, 250);
   956 			DrawStringMultiCenter(140, 210, STR_NEWGRF_NO_FILES_INSTALLED, 250);
   957 			break;
   957 			break;
   958 		}
   958 		}
   959 
   959 
   960 		// draw list of all grf files
   960 		// draw list of all grf files
   961 		while (c != NULL) {
   961 		while (c != NULL) {
   962 			if (i >= w->vscroll.pos) { // draw files according to scrollbar position
   962 			if (i >= w->vscroll.pos) { // draw files according to scrollbar position
       
   963 				bool h = (_sel_grffile==c);
       
   964 				// show highlighted item with a different background and highlighted text
       
   965 				if(h) GfxFillRect(1, y + 1, 267, y + 12, 156); 
       
   966 				// XXX - will be grf name later
       
   967 				DoDrawString(c->filename, 25, y + 2, h ? 0xC : 0x10); 
   963 				DrawSprite(SPRITE_PALETTE(0x2EB | 0x30b8000), 5, y + 3);
   968 				DrawSprite(SPRITE_PALETTE(0x2EB | 0x30b8000), 5, y + 3);
   964 				// give highlighted item other colour
       
   965 				// XXX - will be grf name later
       
   966 				DoDrawString(c->filename, 25, y + 2, (_sel_grffile == c) ? 0xC : 0x10); 
       
   967 				y += NEWGRF_WND_PROC_ROWSIZE;
   969 				y += NEWGRF_WND_PROC_ROWSIZE;
   968 			}
   970 			}
   969 			
   971 			
   970 			c = c->next;
   972 			c = c->next;
   971 			if (++i == w->vscroll.cap + w->vscroll.pos) break; // stop after displaying 12 items
   973 			if (++i == w->vscroll.cap + w->vscroll.pos) break; // stop after displaying 12 items
   972 		}
   974 		}
   973 
   975 
   974 // 		DoDrawString(_sel_grffile->setname, 120, 200, 0x01); // draw grf name
   976 // 		DoDrawString(_sel_grffile->setname, 120, 200, 0x01); // draw grf name
   975 
   977 
   976 		if (_sel_grffile == NULL) { // no grf file selected yet
   978 		if (_sel_grffile == NULL) { // no grf file selected yet
   977 			DrawStringMultiCenter(140, 229, STR_NEWGRF_TIP, 250);
   979 			DrawStringMultiCenter(140, 210, STR_NEWGRF_TIP, 250);
   978 		} else {
   980 		} else {
   979 			// draw filename
   981 			// draw filename
   980 			x = DrawString(5, 199, STR_NEWGRF_FILENAME, 0);
   982 			x = DrawString(5, 199, STR_NEWGRF_FILENAME, 0);
   981 			DoDrawString(_sel_grffile->filename, x + 2, 199, 0x01);
   983 			DoDrawString(_sel_grffile->filename, x + 2, 199, 0x01);
   982 	
   984 	
   988 	} break;
   990 	} break;
   989 
   991 
   990 	case WE_CLICK:
   992 	case WE_CLICK:
   991 		switch(e->click.widget) {
   993 		switch(e->click.widget) {
   992 		case 2: { // select a grf file
   994 		case 2: { // select a grf file
   993 			int y = (e->click.pt.y - NEwGRF_WND_PROC_OFFSET_TOP_WIDGET) / NEWGRF_WND_PROC_ROWSIZE;
   995 			int y = (e->click.pt.y - NEWGRF_WND_PROC_OFFSET_TOP_WIDGET) / NEWGRF_WND_PROC_ROWSIZE;
   994 
   996 
   995 			if (y >= w->vscroll.cap) { return;} // click out of bounds
   997 			if (y >= w->vscroll.cap) { return;} // click out of bounds
   996 
   998 
   997 			y += w->vscroll.pos;
   999 			y += w->vscroll.pos;
   998 
  1000 
  1021 		}
  1023 		}
  1022 		break;
  1024 		break;
  1023 	}
  1025 	}
  1024 */
  1026 */
  1025 	case WE_DESTROY:
  1027 	case WE_DESTROY:
       
  1028 		_sel_grffile = NULL;
  1026 		DeleteWindowById(WC_QUERY_STRING, 0);
  1029 		DeleteWindowById(WC_QUERY_STRING, 0);
  1027 		break;
  1030 		break;
  1028 	}
  1031 	}
  1029 }
  1032 }
  1030 
  1033 
  1031 static const Widget _newgrf_widgets[] = {
  1034 static const Widget _newgrf_widgets[] = {
  1032 {   WWT_CLOSEBOX,    14,     0,    10,     0,    13, STR_00C5,									STR_018B_CLOSE_WINDOW},
  1035 {   WWT_CLOSEBOX,    14,     0,    10,     0,    13, STR_00C5,										STR_018B_CLOSE_WINDOW},
  1033 {    WWT_CAPTION,    14,    11,   279,     0,    13, STR_NEWGRF_SETINGS_CAPTION,STR_018C_WINDOW_TITLE_DRAG_THIS},
  1036 {    WWT_CAPTION,    14,    11,   279,     0,    13, STR_NEWGRF_SETTINGS_CAPTION,	STR_018C_WINDOW_TITLE_DRAG_THIS},
  1034 {     WWT_MATRIX,    14,     0,   268,    14,   182, 0xC01,/*small rows*/				STR_NEWGRF_TIP},
  1037 {     WWT_MATRIX,    14,     0,   268,    14,   182, 0xC01,/*small rows*/					STR_NEWGRF_TIP},
  1035 {      WWT_PANEL,    14,     0,   279,   183,   321, 0x0,												STR_NULL},
  1038 {      WWT_PANEL,    14,     0,   279,   183,   276, 0x0,													STR_NULL},
  1036 
  1039 
  1037 {  WWT_SCROLLBAR,    14,   269,   279,    14,   182, 0x0,												STR_0190_SCROLL_BAR_SCROLLS_LIST},
  1040 {  WWT_SCROLLBAR,    14,   269,   279,    14,   182, 0x0,													STR_0190_SCROLL_BAR_SCROLLS_LIST},
  1038 
  1041 
  1039 {   WWT_CLOSEBOX,    14,   147,   158,   289,   300, STR_0188,	STR_NULL},
  1042 {   WWT_CLOSEBOX,    14,   147,   158,   244,   255, STR_0188,	STR_NULL},
  1040 {   WWT_CLOSEBOX,    14,   159,   170,   289,   300, STR_0189,	STR_NULL},
  1043 {   WWT_CLOSEBOX,    14,   159,   170,   244,   255, STR_0189,	STR_NULL},
  1041 {   WWT_CLOSEBOX,    14,   175,   274,   289,   300, STR_NEWGRF_SET_PARAMETERS,	STR_NULL},
  1044 {   WWT_CLOSEBOX,    14,   175,   274,   244,   255, STR_NEWGRF_SET_PARAMETERS,		STR_NULL},
  1042 
  1045 
  1043 {   WWT_CLOSEBOX,     3,     5,   138,   306,   317, STR_NEWGRF_APPLY_CHANGES,	STR_NULL},
  1046 {   WWT_CLOSEBOX,     3,     5,   138,   261,   272, STR_NEWGRF_APPLY_CHANGES,		STR_NULL},
  1044 {   WWT_CLOSEBOX,     3,   142,   274,   306,   317, STR_012E_CANCEL,						STR_NULL},
  1047 {   WWT_CLOSEBOX,     3,   142,   274,   261,   272, STR_012E_CANCEL,							STR_NULL},
  1045 {   WIDGETS_END},
  1048 {   WIDGETS_END},
  1046 };
  1049 };
  1047 
  1050 
  1048 static const WindowDesc _newgrf_desc = {
  1051 static const WindowDesc _newgrf_desc = {
  1049 	WDP_CENTER, WDP_CENTER, 280, 322,
  1052 	WDP_CENTER, WDP_CENTER, 280, 277,
  1050 	WC_GAME_OPTIONS,0,
  1053 	WC_GAME_OPTIONS,0,
  1051 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
  1054 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
  1052 	_newgrf_widgets,
  1055 	_newgrf_widgets,
  1053 	NewgrfWndProc,
  1056 	NewgrfWndProc,
  1054 };
  1057 };