misc_gui.c
changeset 4634 897461a3e9ca
parent 4609 6c337b3fbf4b
child 4668 8b6035c51188
equal deleted inserted replaced
4633:fae5d85ef53d 4634:897461a3e9ca
   330 			}
   330 			}
   331 		} while (--count);
   331 		} while (--count);
   332 	} break;
   332 	} break;
   333 
   333 
   334 	case WE_CLICK: {
   334 	case WE_CLICK: {
   335 		int wid = e->click.widget;
   335 		int wid = e->we.click.widget;
   336 
   336 
   337 		switch (wid) {
   337 		switch (wid) {
   338 		case 0:
   338 		case 0:
   339 			ResetObjectToPlace();
   339 			ResetObjectToPlace();
   340 			break;
   340 			break;
   362 			break;
   362 			break;
   363 		}
   363 		}
   364 	} break;
   364 	} break;
   365 
   365 
   366 	case WE_PLACE_OBJ:
   366 	case WE_PLACE_OBJ:
   367 		VpStartPlaceSizing(e->place.tile, VPM_X_AND_Y_LIMITED);
   367 		VpStartPlaceSizing(e->we.place.tile, VPM_X_AND_Y_LIMITED);
   368 		VpSetPlaceSizingLimit(20);
   368 		VpSetPlaceSizingLimit(20);
   369 		break;
   369 		break;
   370 
   370 
   371 	case WE_PLACE_DRAG:
   371 	case WE_PLACE_DRAG:
   372 		VpSelectTilesWithMethod(e->place.pt.x, e->place.pt.y, e->place.userdata);
   372 		VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, e->we.place.userdata);
   373 		return;
   373 		return;
   374 
   374 
   375 	case WE_PLACE_MOUSEUP:
   375 	case WE_PLACE_MOUSEUP:
   376 		if (e->click.pt.x != -1) {
   376 		if (e->we.click.pt.x != -1) {
   377 			DoCommandP(e->place.tile, _tree_to_plant, e->place.starttile, NULL,
   377 			DoCommandP(e->we.place.tile, _tree_to_plant, e->we.place.starttile, NULL,
   378 				CMD_PLANT_TREE | CMD_AUTO | CMD_MSG(STR_2805_CAN_T_PLANT_TREE_HERE));
   378 				CMD_PLANT_TREE | CMD_AUTO | CMD_MSG(STR_2805_CAN_T_PLANT_TREE_HERE));
   379 		}
   379 		}
   380 		break;
   380 		break;
   381 
   381 
   382 	case WE_TIMEOUT:
   382 	case WE_TIMEOUT:
   526 		SetRedErrorSquare(0);
   526 		SetRedErrorSquare(0);
   527 		_switch_mode_errorstr = INVALID_STRING_ID;
   527 		_switch_mode_errorstr = INVALID_STRING_ID;
   528 		break;
   528 		break;
   529 
   529 
   530 	case WE_KEYPRESS:
   530 	case WE_KEYPRESS:
   531 		if (e->keypress.keycode == WKC_SPACE) {
   531 		if (e->we.keypress.keycode == WKC_SPACE) {
   532 			// Don't continue.
   532 			// Don't continue.
   533 			e->keypress.cont = false;
   533 			e->we.keypress.cont = false;
   534 			DeleteWindow(w);
   534 			DeleteWindow(w);
   535 		}
   535 		}
   536 		break;
   536 		break;
   537 	}
   537 	}
   538 }
   538 }
   898 
   898 
   899 	tb->caretpos = tb->length;
   899 	tb->caretpos = tb->length;
   900 	tb->caretxoffs = tb->width;
   900 	tb->caretxoffs = tb->width;
   901 }
   901 }
   902 
   902 
   903 int HandleEditBoxKey(Window *w, querystr_d *string, int wid, WindowEvent *we, CharSetFilter afilter)
   903 int HandleEditBoxKey(Window *w, querystr_d *string, int wid, WindowEvent *e, CharSetFilter afilter)
   904 {
   904 {
   905 	we->keypress.cont = false;
   905 	e->we.keypress.cont = false;
   906 
   906 
   907 	switch (we->keypress.keycode) {
   907 	switch (e->we.keypress.keycode) {
   908 	case WKC_ESC: return 2;
   908 	case WKC_ESC: return 2;
   909 	case WKC_RETURN: case WKC_NUM_ENTER: return 1;
   909 	case WKC_RETURN: case WKC_NUM_ENTER: return 1;
   910 	case (WKC_CTRL | 'V'):
   910 	case (WKC_CTRL | 'V'):
   911 		if (InsertTextBufferClipboard(&string->text))
   911 		if (InsertTextBufferClipboard(&string->text))
   912 			InvalidateWidget(w, wid);
   912 			InvalidateWidget(w, wid);
   914 	case (WKC_CTRL | 'U'):
   914 	case (WKC_CTRL | 'U'):
   915 		DeleteTextBufferAll(&string->text);
   915 		DeleteTextBufferAll(&string->text);
   916 		InvalidateWidget(w, wid);
   916 		InvalidateWidget(w, wid);
   917 		break;
   917 		break;
   918 	case WKC_BACKSPACE: case WKC_DELETE:
   918 	case WKC_BACKSPACE: case WKC_DELETE:
   919 		if (DeleteTextBufferChar(&string->text, we->keypress.keycode))
   919 		if (DeleteTextBufferChar(&string->text, e->we.keypress.keycode))
   920 			InvalidateWidget(w, wid);
   920 			InvalidateWidget(w, wid);
   921 		break;
   921 		break;
   922 	case WKC_LEFT: case WKC_RIGHT: case WKC_END: case WKC_HOME:
   922 	case WKC_LEFT: case WKC_RIGHT: case WKC_END: case WKC_HOME:
   923 		if (MoveTextBufferPos(&string->text, we->keypress.keycode))
   923 		if (MoveTextBufferPos(&string->text, e->we.keypress.keycode))
   924 			InvalidateWidget(w, wid);
   924 			InvalidateWidget(w, wid);
   925 		break;
   925 		break;
   926 	default:
   926 	default:
   927 		if (IsValidAsciiChar(we->keypress.ascii, afilter)) {
   927 		if (IsValidAsciiChar(e->we.keypress.ascii, afilter)) {
   928 			if (InsertTextBufferChar(&string->text, we->keypress.ascii))
   928 			if (InsertTextBufferChar(&string->text, e->we.keypress.ascii))
   929 				InvalidateWidget(w, wid);
   929 				InvalidateWidget(w, wid);
   930 		} else { // key wasn't caught. Continue only if standard entry specified
   930 		} else { // key wasn't caught. Continue only if standard entry specified
   931 			we->keypress.cont = (afilter == CS_ALPHANUMERAL);
   931 			e->we.keypress.cont = (afilter == CS_ALPHANUMERAL);
   932 		}
   932 		}
   933 	}
   933 	}
   934 
   934 
   935 	return 0;
   935 	return 0;
   936 }
   936 }
   977 
   977 
   978 		DrawEditBox(w, &WP(w,querystr_d), 5);
   978 		DrawEditBox(w, &WP(w,querystr_d), 5);
   979 		break;
   979 		break;
   980 
   980 
   981 	case WE_CLICK:
   981 	case WE_CLICK:
   982 		switch (e->click.widget) {
   982 		switch (e->we.click.widget) {
   983 		case 3: DeleteWindow(w); break;
   983 		case 3: DeleteWindow(w); break;
   984 		case 4:
   984 		case 4:
   985 press_ok:;
   985 press_ok:;
   986 			if (WP(w, querystr_d).orig != NULL &&
   986 			if (WP(w, querystr_d).orig != NULL &&
   987 					strcmp(WP(w, querystr_d).text.buf, WP(w, querystr_d).orig) == 0) {
   987 					strcmp(WP(w, querystr_d).text.buf, WP(w, querystr_d).orig) == 0) {
   999 
   999 
  1000 				parent = FindWindowById(wnd_class, wnd_num);
  1000 				parent = FindWindowById(wnd_class, wnd_num);
  1001 				if (parent != NULL) {
  1001 				if (parent != NULL) {
  1002 					WindowEvent e;
  1002 					WindowEvent e;
  1003 					e.event = WE_ON_EDIT_TEXT;
  1003 					e.event = WE_ON_EDIT_TEXT;
  1004 					e.edittext.str = buf;
  1004 					e.we.edittext.str = buf;
  1005 					parent->wndproc(parent, &e);
  1005 					parent->wndproc(parent, &e);
  1006 				}
  1006 				}
  1007 			}
  1007 			}
  1008 			break;
  1008 			break;
  1009 		}
  1009 		}
  1106 
  1106 
  1107 		DrawStringMultiCenter(90, 38, WP(w, query_d).message, 178);
  1107 		DrawStringMultiCenter(90, 38, WP(w, query_d).message, 178);
  1108 		break;
  1108 		break;
  1109 
  1109 
  1110 	case WE_CLICK:
  1110 	case WE_CLICK:
  1111 		switch (e->click.widget) {
  1111 		switch (e->we.click.widget) {
  1112 		case 3:
  1112 		case 3:
  1113 		case 4:
  1113 		case 4:
  1114 			WP(w, query_d).calledback = true;
  1114 			WP(w, query_d).calledback = true;
  1115 			if (WP(w, query_d).ok_cancel_callback != NULL) WP(w, query_d).ok_cancel_callback(e->click.widget == 4);
  1115 			if (WP(w, query_d).ok_cancel_callback != NULL) WP(w, query_d).ok_cancel_callback(e->we.click.widget == 4);
  1116 			DeleteWindow(w);
  1116 			DeleteWindow(w);
  1117 			break;
  1117 			break;
  1118 		}
  1118 		}
  1119 		break;
  1119 		break;
  1120 
  1120 
  1377 		}
  1377 		}
  1378 		break;
  1378 		break;
  1379 	}
  1379 	}
  1380 
  1380 
  1381 	case WE_CLICK:
  1381 	case WE_CLICK:
  1382 		switch (e->click.widget) {
  1382 		switch (e->we.click.widget) {
  1383 		case 2: /* Sort save names by name */
  1383 		case 2: /* Sort save names by name */
  1384 			_savegame_sort_order = (_savegame_sort_order == SORT_BY_NAME) ?
  1384 			_savegame_sort_order = (_savegame_sort_order == SORT_BY_NAME) ?
  1385 				SORT_BY_NAME | SORT_DESCENDING : SORT_BY_NAME;
  1385 				SORT_BY_NAME | SORT_DESCENDING : SORT_BY_NAME;
  1386 			_savegame_sort_dirty = true;
  1386 			_savegame_sort_dirty = true;
  1387 			SetWindowDirty(w);
  1387 			SetWindowDirty(w);
  1399 			SetWindowDirty(w);
  1399 			SetWindowDirty(w);
  1400 			BuildFileList();
  1400 			BuildFileList();
  1401 			break;
  1401 			break;
  1402 
  1402 
  1403 		case 7: { /* Click the listbox */
  1403 		case 7: { /* Click the listbox */
  1404 			int y = (e->click.pt.y - w->widget[e->click.widget].top - 1) / 10;
  1404 			int y = (e->we.click.pt.y - w->widget[e->we.click.widget].top - 1) / 10;
  1405 			char *name;
  1405 			char *name;
  1406 			const FiosItem *file;
  1406 			const FiosItem *file;
  1407 
  1407 
  1408 			if (y < 0 || (y += w->vscroll.pos) >= w->vscroll.count) return;
  1408 			if (y < 0 || (y += w->vscroll.pos) >= w->vscroll.count) return;
  1409 
  1409 
  1446 		break;
  1446 		break;
  1447 	case WE_MOUSELOOP:
  1447 	case WE_MOUSELOOP:
  1448 		HandleEditBox(w, &WP(w, querystr_d), 10);
  1448 		HandleEditBox(w, &WP(w, querystr_d), 10);
  1449 		break;
  1449 		break;
  1450 	case WE_KEYPRESS:
  1450 	case WE_KEYPRESS:
  1451 		if (e->keypress.keycode == WKC_ESC) {
  1451 		if (e->we.keypress.keycode == WKC_ESC) {
  1452 			DeleteWindow(w);
  1452 			DeleteWindow(w);
  1453 			return;
  1453 			return;
  1454 		}
  1454 		}
  1455 
  1455 
  1456 		if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
  1456 		if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
  1486 		FiosFreeSavegameList();
  1486 		FiosFreeSavegameList();
  1487 		CLRBIT(_no_scroll, SCROLL_SAVE);
  1487 		CLRBIT(_no_scroll, SCROLL_SAVE);
  1488 		break;
  1488 		break;
  1489 	case WE_RESIZE: {
  1489 	case WE_RESIZE: {
  1490 		/* Widget 2 and 3 have to go with halve speed, make it so obiwan */
  1490 		/* Widget 2 and 3 have to go with halve speed, make it so obiwan */
  1491 		uint diff = e->sizing.diff.x / 2;
  1491 		uint diff = e->we.sizing.diff.x / 2;
  1492 		w->widget[2].right += diff;
  1492 		w->widget[2].right += diff;
  1493 		w->widget[3].left  += diff;
  1493 		w->widget[3].left  += diff;
  1494 		w->widget[3].right += e->sizing.diff.x;
  1494 		w->widget[3].right += e->we.sizing.diff.x;
  1495 
  1495 
  1496 		/* Same for widget 11 and 12 in save-dialog */
  1496 		/* Same for widget 11 and 12 in save-dialog */
  1497 		if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
  1497 		if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) {
  1498 			w->widget[11].right += diff;
  1498 			w->widget[11].right += diff;
  1499 			w->widget[12].left  += diff;
  1499 			w->widget[12].left  += diff;
  1500 			w->widget[12].right += e->sizing.diff.x;
  1500 			w->widget[12].right += e->we.sizing.diff.x;
  1501 		}
  1501 		}
  1502 
  1502 
  1503 		w->vscroll.cap += e->sizing.diff.y / 10;
  1503 		w->vscroll.cap += e->we.sizing.diff.y / 10;
  1504 		} break;
  1504 		} break;
  1505 	}
  1505 	}
  1506 }
  1506 }
  1507 
  1507 
  1508 static const WindowDesc _load_dialog_desc = {
  1508 static const WindowDesc _load_dialog_desc = {
  1793 		break;
  1793 		break;
  1794 	}
  1794 	}
  1795 
  1795 
  1796 	case WE_CLICK: {
  1796 	case WE_CLICK: {
  1797 			const CheatEntry *ce;
  1797 			const CheatEntry *ce;
  1798 			uint btn = (e->click.pt.y - 46) / 12;
  1798 			uint btn = (e->we.click.pt.y - 46) / 12;
  1799 			int32 value, oldvalue;
  1799 			int32 value, oldvalue;
  1800 			uint x = e->click.pt.x;
  1800 			uint x = e->we.click.pt.x;
  1801 
  1801 
  1802 			// not clicking a button?
  1802 			// not clicking a button?
  1803 			if (!IS_INT_INSIDE(x, 20, 40) || btn >= lengthof(_cheats_ui)) break;
  1803 			if (!IS_INT_INSIDE(x, 20, 40) || btn >= lengthof(_cheats_ui)) break;
  1804 
  1804 
  1805 			ce = &_cheats_ui[btn];
  1805 			ce = &_cheats_ui[btn];