Changeset - r68:1c76631dc273
[Not reviewed]
master
0 7 0
darkvater - 20 years ago 2004-08-16 21:02:06
darkvater@openttd.org
(svn r69) -Feature: align toolbar left/center/right patch (TrueLight)
-Feature: added callback feature to patches options
7 files changed with 73 insertions and 12 deletions:
0 comments (0 inline, 0 general)
lang/english.txt
Show inline comments
 
@@ -1000,6 +1000,10 @@ STR_CONFIG_PATCHES_COLORED_NEWS_DATE	:{L
 
STR_CONFIG_PATCHES_STARTING_DATE		:{LTBLUE}Starting date: {ORANGE}{STRING}
 
STR_CONFIG_PATCHES_SMOOTH_ECONOMY		:{LTBLUE}Enable smooth economy (more, smaller changes)
 
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY		:{LTBLUE}When dragging place signals every: {ORANGE}{STRING} tile(s)
 
STR_CONFIG_PATCHES_TOOLBAR_POS			:{LTBLUE}Position of maintoolbar: {ORANGE}{STRING}
 
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT		:Left
 
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER	:Center
 
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT	:Right
 

	
 
STR_CONFIG_PATCHES_GUI					:{BLACK}Interface
 
STR_CONFIG_PATCHES_CONSTRUCTION			:{BLACK}Construction
main_gui.c
Show inline comments
 
@@ -2207,6 +2207,8 @@ void SetupColorsAndInitialWindow()
 
		w = AllocateWindowDesc(&_toolb_normal_desc);
 
		w->disabled_state = 1 << 17;
 
		w->flags4 &= ~WF_WHITE_BORDER_MASK;
 
		
 
		PositionMainToolbar(w); // already WC_MAIN_TOOLBAR passed (&_toolb_normal_desc)
 

	
 
		_main_status_desc.top = height - 12;
 
		w = AllocateWindowDesc(&_main_status_desc);
 
@@ -2222,6 +2224,8 @@ void SetupColorsAndInitialWindow()
 
		w = AllocateWindowDesc(&_toolb_scen_desc);
 
		w->disabled_state = 1 << 9;
 
		w->flags4 &= ~WF_WHITE_BORDER_MASK;
 
		
 
		PositionMainToolbar(w); // already WC_MAIN_TOOLBAR passed (&_toolb_scen_desc)
 
		break;
 
	default:
 
		NOT_REACHED();
settings.c
Show inline comments
 
@@ -826,6 +826,8 @@ static const SettingDesc patch_settings[
 
	{"nonuniform_stations", SDT_BOOL, (void*)false, (void*)offsetof(Patches, nonuniform_stations)},
 
	{"always_small_airport", SDT_BOOL, (void*)false, (void*)offsetof(Patches, always_small_airport)},
 
	{"realistic_acceleration", SDT_BOOL, (void*)false, (void*)offsetof(Patches, realistic_acceleration)},
 
	
 
	{"toolbar_pos", SDT_UINT8, (void*)0, (void*)offsetof(Patches, toolbar_pos)},
 

	
 
	{"max_trains", SDT_UINT8, (void*)80,(void*)offsetof(Patches, max_trains)},
 
	{"max_roadveh", SDT_UINT8, (void*)80,(void*)offsetof(Patches, max_roadveh)},
settings_gui.c
Show inline comments
 
@@ -661,13 +661,28 @@ void ShowHighscoreTable(int tbl)
 
	ShowInfoF("ShowHighscoreTable(%d) not implemented", tbl);
 
}
 

	
 
// virtual PositionMainToolbar function, calls the right one.
 
int32 v_PositionMainToolbar(int32 p1)
 
{
 
	if (_game_mode != GM_MENU)
 
		PositionMainToolbar(NULL);
 

	
 
	return 0;
 
}
 

	
 
typedef int32 PatchButtonClick(int32);
 
static PatchButtonClick * const _patch_button_proc[] = {
 
	&v_PositionMainToolbar,
 
};
 

	
 
typedef struct PatchEntry {
 
	byte type;    // type of selector
 
	byte flags;		// selector flags
 
	StringID str; // string with descriptive text
 
	void *variable; // pointer to the variable
 
	int32 min,max; // range for spinbox setting
 
	uint32 step;   // step for spinbox
 
	byte type;										// type of selector
 
	byte flags;										// selector flags
 
	StringID str;									// string with descriptive text
 
	void *variable;								// pointer to the variable
 
	int32 min,max;								// range for spinbox setting
 
	uint32 step;									// step for spinbox
 
	PatchButtonClick *click_proc;	// callback procedure
 
} PatchEntry;
 

	
 
enum {
 
@@ -691,6 +706,7 @@ static const PatchEntry _patches_ui[] = 
 

	
 
	{PE_UINT8, 0, STR_CONFIG_PATCHES_ERRMSG_DURATION, &_patches.errmsg_duration, 0, 20, 1},
 
	
 
	{PE_UINT8, PF_MULTISTRING, STR_CONFIG_PATCHES_TOOLBAR_POS, &_patches.toolbar_pos, 0, 2, 1, &v_PositionMainToolbar},
 
};
 

	
 
static const PatchEntry _patches_construction[] = {
 
@@ -927,7 +943,7 @@ static void PatchesSelectionWndProc(Wind
 
			x = e->click.pt.x - 5;
 
			if (x < 0) return;
 

	
 
			if (x < 21) {
 
			if (x < 21) { // clicked on the icon on the left side. Either scroller or bool on/off
 
				int32 val = ReadPE(pe), oval = val;
 

	
 
				switch(pe->type) {
 
@@ -972,9 +988,12 @@ static void PatchesSelectionWndProc(Wind
 
				if (val != oval) {
 
					WritePE(pe, val);
 
					SetWindowDirty(w);
 

	
 
					if (pe->click_proc != NULL) // call callback function
 
						pe->click_proc(val);
 
				}
 
			} else {
 
				if (pe->type != PE_BOOL) {
 
				if (pe->type != PE_BOOL && !(pe->flags & PF_MULTISTRING)) { // do not open editbox
 
					WP(w,def_d).data_3 = btn;
 
					SET_DPARAM32(0, ReadPE(pe));
 
					ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_CONFIG_PATCHES_QUERY_CAPT, 10, 100, WC_GAME_OPTIONS, 0);
 
@@ -999,8 +1018,12 @@ static void PatchesSelectionWndProc(Wind
 
	case WE_ON_EDIT_TEXT: {
 
		if (*e->edittext.str) {
 
			const PatchPage *page = &_patches_page[WP(w,def_d).data_1];
 
			WritePE(&page->entries[WP(w,def_d).data_3], atoi(e->edittext.str)); 
 
			const PatchEntry *pe = &page->entries[WP(w,def_d).data_3];
 
			WritePE(pe, atoi(e->edittext.str)); 
 
			SetWindowDirty(w);
 

	
 
			if (pe->click_proc != NULL) // call callback function
 
				pe->click_proc(*(int32*)pe->variable);
 
		}
 
		break;
 
	}
variables.h
Show inline comments
 
@@ -109,6 +109,8 @@ typedef struct Patches {
 
	bool nonuniform_stations;// allow nonuniform train stations
 
	bool always_small_airport; // always allow small airports
 
	bool realistic_acceleration; // realistic acceleration for trains
 
	
 
	uint8 toolbar_pos;			// position of toolbars, 0=left, 1=center, 2=right
 

	
 
	byte max_trains;				//max trains in game per player (these are 8bit because the unitnumber field can't hold more)
 
	byte max_roadveh;				//max trucks in game per player
window.c
Show inline comments
 
@@ -531,6 +531,16 @@ Window *AllocateWindowDesc(const WindowD
 
		if (pt.x > _screen.width + 10 - desc->width)
 
			pt.x = (_screen.width + 10 - desc->width) - 20;
 
		pt.y = w->top + 10;
 
	// open Build Toolbars and Terraforming Toolbar aligned
 
	} else if (desc->cls == WC_BUILD_TOOLBAR || desc->cls == WC_SCEN_LAND_GEN) {
 
		/* Override the position if a toolbar is opened according to the place of the maintoolbar
 
		 * The main toolbar (WC_MAIN_TOOLBAR) is 640px in width */
 
		switch (_patches.toolbar_pos) {
 
		case 1:		pt.x = ((_screen.width + 640) >> 1) - desc->width; break;
 
		case 2:		pt.x = _screen.width - desc->width; break;
 
		default:	pt.x = 640 - desc->width;
 
		}
 
		pt.y = desc->top;
 
	} else {
 
		pt.x = desc->left;
 
		pt.y = desc->top;
 
@@ -1013,7 +1023,7 @@ void MouseLoop()
 
		}
 

	
 
		if (click == 1) {
 
			DEBUG(misc, 1) ("cursor: 0x%X (%d)", _cursor.sprite, _cursor.sprite);
 
			//DEBUG(misc, 1) ("cursor: 0x%X (%d)", _cursor.sprite, _cursor.sprite);
 
			if (_thd.place_mode != 0 &&
 
					// query button and place sign button work in pause mode
 
					!(_cursor.sprite == 0x2CF || _cursor.sprite == 0x2D2) &&
 
@@ -1164,6 +1174,22 @@ void DeleteNonVitalWindows()
 
	}
 
}
 

	
 
int PositionMainToolbar(Window *w) 
 
{
 
	//DEBUG(misc, 1) ("Repositioning Main Toolbar...");
 

	
 
	if (w == NULL || w->window_class != WC_MAIN_TOOLBAR)
 
		w = FindWindowById(WC_MAIN_TOOLBAR, 0);
 

	
 
	switch (_patches.toolbar_pos) {
 
		case 1:		w->left = (_screen.width - w->width) >> 1; break;
 
		case 2:		w->left = _screen.width - w->width; break;
 
		default:	w->left = 0;
 
	}
 
	SetDirtyBlocks(0, 0, _screen.width, w->height); // invalidate the whole top part
 
	return w->left;
 
}
 

	
 
void RelocateAllWindows(int neww, int newh)
 
{
 
	Window *w;
 
@@ -1182,7 +1208,7 @@ void RelocateAllWindows(int neww, int ne
 

	
 
		if (w->window_class == WC_MAIN_TOOLBAR) {
 
			top = w->top;
 
			left = (neww - w->width) >> 1;
 
			left = PositionMainToolbar(w); // changes toolbar orientation
 
		} else if (w->window_class == WC_SELECT_GAME || w->window_class == WC_GAME_OPTIONS || w->window_class == WC_NETWORK_WINDOW){	
 
			top = (newh - w->height) >> 1;
 
			left = (neww - w->width) >> 1;
 
@@ -1208,4 +1234,3 @@ void RelocateAllWindows(int neww, int ne
 
		w->top = top;
 
	}
 
}
 

	
window.h
Show inline comments
 
@@ -408,6 +408,7 @@ void GuiShowTooltips(uint16 string_id);
 
void UnclickWindowButtons(Window *w);
 
void UnclickSomeWindowButtons(Window *w, uint32 mask);
 
void RelocateAllWindows(int neww, int newh);
 
int32 PositionMainToolbar(Window *w);
 

	
 
/* widget.c */
 
int GetWidgetFromPos(Window *w, int x, int y);
0 comments (0 inline, 0 general)