|  | @@ -2175,18 +2175,21 @@ static void
 | 
	
		
			
				|  |  |  show_settings_dialog()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  #define HEIGHT (15)
 | 
	
		
			
				|  |  | -#define WIDTH (460)
 | 
	
		
			
				|  |  | -#define LABEL_WIDTH (90)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define BORDER_WIDTH (10)
 | 
	
		
			
				|  |  | +#define CELL_WIDTH (120)
 | 
	
		
			
				|  |  | +#define LABEL_WIDTH (120)
 | 
	
		
			
				|  |  | +#define DIALOG_WIDTH (4 * BORDER_WIDTH + 3 * CELL_WIDTH + 3 * LABEL_WIDTH)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	unsigned char mem[16 * 1024], *p;
 | 
	
		
			
				|  |  |  	const struct mg_option *options;
 | 
	
		
			
				|  |  |  	DWORD style;
 | 
	
		
			
				|  |  |  	DLGTEMPLATE *dia = (DLGTEMPLATE *)mem;
 | 
	
		
			
				|  |  |  	WORD i, cl, nelems = 0;
 | 
	
		
			
				|  |  | -	short width, x, y;
 | 
	
		
			
				|  |  | +	short x, y;
 | 
	
		
			
				|  |  |  	static struct dlg_proc_param s_dlg_proc_param;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const struct dlg_header_param dialog_header = GetDlgHeader(WIDTH);
 | 
	
		
			
				|  |  | +	const struct dlg_header_param dialog_header = GetDlgHeader(DIALOG_WIDTH);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (s_dlg_proc_param.guard == 0) {
 | 
	
		
			
				|  |  |  		memset(&s_dlg_proc_param, 0, sizeof(s_dlg_proc_param));
 | 
	
	
		
			
				|  | @@ -2204,9 +2207,11 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	options = mg_get_valid_options();
 | 
	
		
			
				|  |  |  	for (i = 0; options[i].name != NULL; i++) {
 | 
	
		
			
				|  |  |  		style = WS_CHILD | WS_VISIBLE | WS_TABSTOP;
 | 
	
		
			
				|  |  | -		x = 10 + (WIDTH / 2) * (nelems % 2);
 | 
	
		
			
				|  |  | -		y = (nelems / 2 + 1) * HEIGHT + 5;
 | 
	
		
			
				|  |  | -		width = WIDTH / 2 - 20 - LABEL_WIDTH;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		x = BORDER_WIDTH
 | 
	
		
			
				|  |  | +		    + (LABEL_WIDTH + CELL_WIDTH + BORDER_WIDTH) * (nelems % 3);
 | 
	
		
			
				|  |  | +		y = 5 + HEIGHT + HEIGHT * (nelems / 3);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		if (options[i].type == MG_CONFIG_TYPE_NUMBER) {
 | 
	
		
			
				|  |  |  			style |= ES_NUMBER;
 | 
	
		
			
				|  |  |  			cl = 0x81;
 | 
	
	
		
			
				|  | @@ -2217,19 +2222,22 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  		} else if ((options[i].type == MG_CONFIG_TYPE_FILE)
 | 
	
		
			
				|  |  |  		           || (options[i].type == MG_CONFIG_TYPE_DIRECTORY)) {
 | 
	
		
			
				|  |  |  			style |= WS_BORDER | ES_AUTOHSCROLL;
 | 
	
		
			
				|  |  | -			width -= 20;
 | 
	
		
			
				|  |  |  			cl = 0x81;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			/* Additional button for file dialog */
 | 
	
		
			
				|  |  |  			add_control(&p,
 | 
	
		
			
				|  |  |  			            dia,
 | 
	
		
			
				|  |  |  			            0x80,
 | 
	
		
			
				|  |  |  			            ID_CONTROLS + i + ID_FILE_BUTTONS_DELTA,
 | 
	
		
			
				|  |  |  			            WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
 | 
	
		
			
				|  |  | -			            x + width + LABEL_WIDTH + 5,
 | 
	
		
			
				|  |  | +			            x + LABEL_WIDTH + 5,
 | 
	
		
			
				|  |  |  			            y,
 | 
	
		
			
				|  |  |  			            15,
 | 
	
		
			
				|  |  | -			            12,
 | 
	
		
			
				|  |  | +			            HEIGHT - 3,
 | 
	
		
			
				|  |  |  			            "...");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		} else if (options[i].type == MG_CONFIG_TYPE_STRING_MULTILINE) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  			/* TODO: This is not really uer friendly */
 | 
	
		
			
				|  |  |  			cl = 0x81;
 | 
	
		
			
				|  |  |  			style |= WS_BORDER | ES_AUTOHSCROLL | ES_MULTILINE | ES_WANTRETURN
 | 
	
	
		
			
				|  | @@ -2238,6 +2246,8 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  			cl = 0x81;
 | 
	
		
			
				|  |  |  			style |= WS_BORDER | ES_AUTOHSCROLL;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/* Add label (static text) */
 | 
	
		
			
				|  |  |  		add_control(&p,
 | 
	
		
			
				|  |  |  		            dia,
 | 
	
		
			
				|  |  |  		            0x82,
 | 
	
	
		
			
				|  | @@ -2255,32 +2265,35 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  		            style,
 | 
	
		
			
				|  |  |  		            x + LABEL_WIDTH,
 | 
	
		
			
				|  |  |  		            y,
 | 
	
		
			
				|  |  | -		            width,
 | 
	
		
			
				|  |  | -		            12,
 | 
	
		
			
				|  |  | +		            CELL_WIDTH,
 | 
	
		
			
				|  |  | +		            HEIGHT - 3,
 | 
	
		
			
				|  |  |  		            "");
 | 
	
		
			
				|  |  |  		nelems++;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		DEBUG_ASSERT(((intptr_t)p - (intptr_t)mem) < (intptr_t)sizeof(mem));
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	y = (((nelems + 1) / 2 + 1) * HEIGHT + 5);
 | 
	
		
			
				|  |  | +	/* "Settings" frame around all options */
 | 
	
		
			
				|  |  | +	y = ((nelems + 2) / 3 + 1) * HEIGHT;
 | 
	
		
			
				|  |  |  	add_control(&p,
 | 
	
		
			
				|  |  |  	            dia,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_GROUP,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
 | 
	
		
			
				|  |  | -	            5,
 | 
	
		
			
				|  |  | -	            5,
 | 
	
		
			
				|  |  | -	            WIDTH - 10,
 | 
	
		
			
				|  |  | +	            BORDER_WIDTH / 2,
 | 
	
		
			
				|  |  | +	            BORDER_WIDTH / 2,
 | 
	
		
			
				|  |  | +	            DIALOG_WIDTH - BORDER_WIDTH,
 | 
	
		
			
				|  |  |  	            y,
 | 
	
		
			
				|  |  |  	            " Settings ");
 | 
	
		
			
				|  |  | -	y += 10;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* Buttons below "Settings" frame */
 | 
	
		
			
				|  |  | +	y += 2 * HEIGHT;
 | 
	
		
			
				|  |  |  	add_control(&p,
 | 
	
		
			
				|  |  |  	            dia,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_SAVE,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
		
			
				|  |  | -	            WIDTH - 70,
 | 
	
		
			
				|  |  | +	            DIALOG_WIDTH - 70,
 | 
	
		
			
				|  |  |  	            y,
 | 
	
		
			
				|  |  |  	            65,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
	
		
			
				|  | @@ -2290,7 +2303,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_RESET_DEFAULTS,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
		
			
				|  |  | -	            WIDTH - 140,
 | 
	
		
			
				|  |  | +	            DIALOG_WIDTH - 140,
 | 
	
		
			
				|  |  |  	            y,
 | 
	
		
			
				|  |  |  	            65,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
	
		
			
				|  | @@ -2300,7 +2313,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_RESET_FILE,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
		
			
				|  |  | -	            WIDTH - 210,
 | 
	
		
			
				|  |  | +	            DIALOG_WIDTH - 210,
 | 
	
		
			
				|  |  |  	            y,
 | 
	
		
			
				|  |  |  	            65,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
	
		
			
				|  | @@ -2310,7 +2323,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_RESET_ACTIVE,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
		
			
				|  |  | -	            WIDTH - 280,
 | 
	
		
			
				|  |  | +	            DIALOG_WIDTH - 280,
 | 
	
		
			
				|  |  |  	            y,
 | 
	
		
			
				|  |  |  	            65,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
	
		
			
				|  | @@ -2326,9 +2339,11 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            g_server_base_name);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	/* Check befor every release */
 | 
	
		
			
				|  |  |  	DEBUG_ASSERT(((intptr_t)p - (intptr_t)mem) < (intptr_t)sizeof(mem));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	dia->cy = ((nelems + 1) / 2 + 1) * HEIGHT + 30;
 | 
	
		
			
				|  |  | +	/* Calculate total height of the dialog */
 | 
	
		
			
				|  |  | +	dia->cy = y + HEIGHT;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.fRetry = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2338,9 +2353,12 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.hWnd = NULL;
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.guard = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	/* Undefine all size parameters defined above */
 | 
	
		
			
				|  |  |  #undef HEIGHT
 | 
	
		
			
				|  |  | -#undef WIDTH
 | 
	
		
			
				|  |  | +#undef BORDER_WIDTH
 | 
	
		
			
				|  |  | +#undef CELL_WIDTH
 | 
	
		
			
				|  |  |  #undef LABEL_WIDTH
 | 
	
		
			
				|  |  | +#undef DIALOG_WIDTH
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |