#textdomain wesnoth-lib
###
### The in game portrait dialogs.
### Due to the excessive amount of dialogs it's not possible to split off the
### window definitions. So this unit is a bit larger as wanted.
###

# These might become global have to evaluate later.
#define _GUI_HEIGHT_OFFSET
	25#enddef

# helper convert the scale factor, since we use it in two places define it as
# helper value. (Two the not working and working version, but want to avoid
# surprises when the not working version is fixed).
#define __GUI_SIZE_FACTOR
	3#enddef

### The formula language doesn't support variables so macros are used to
### emulate them. This makes the code what harder to read, so the algorithm for
### __GUI_IMAGE_WIDTH is described here:
###
### if gamemap_width <= TEXT_WIDTH_SATURATION
###     __GUI_IMAGE_WIDTH = gamemap_width / 3
### else
###     # Text reached it maximum width, take all space.
###     __GUI_IMAGE_WIDTH = gamemap_width - MAX_TEXT_WIDTH
### fi
###
### if __GUI_IMAGE_WIDTH < 250
###     __GUI_IMAGE_WIDTH = 250
### fi
###
### if __GUI_IMAGE_WIDTH > 500
###     __GUI_IMAGE_WIDTH = 500
### fi

#define __GUI_MAX_HEIGHT
(gamemap_height - 4)
#enddef

# The maximum width of the text
#define MAX_TEXT_WIDTH
675
#enddef

# gamemap_width width needed to reach the MAX_TEXT_WIDTH
#define TEXT_WIDTH_SATURATION
((3 * {_GUI_HEIGHT_OFFSET}) / 2)
#enddef

#define BEST_WIDTH
(if(gamemap_width > {TEXT_WIDTH_SATURATION}, gamemap_width - {MAX_TEXT_WIDTH}, (gamemap_width / {__GUI_SIZE_FACTOR})))
#enddef

#define ASPECT_RATIO
(if(image_original_width > 0, (as_decimal(image_original_height) / image_original_width), 0)) 
#enddef

#define __GUI_BEST_SIZE
(if(({BEST_WIDTH} * {ASPECT_RATIO}) > {__GUI_MAX_HEIGHT}, floor({__GUI_MAX_HEIGHT} / {ASPECT_RATIO}), {BEST_WIDTH}))
#enddef

#define ___GUI_IMAGE_WIDTH
	if({__GUI_BEST_SIZE} < 250, 250,
		if({__GUI_BEST_SIZE} > 500, 500, {__GUI_BEST_SIZE})
	)
#enddef

# This is the version with debug info
#define __GUI_IMAGE_WIDTH
([[
	debug_print('screen_width ', screen_width),
	debug_print('screen_height ', screen_height),
	debug_print('gamemap_width ', gamemap_width),
	debug_print('gamemap_height ', gamemap_height),
	debug_print('image_original_width ', image_original_width),
	debug_print('image_original_height ', image_original_height),
	debug_print('ASPECT_RATIO ', {ASPECT_RATIO}),
	debug_print('__GUI_MAX_HEIGHT ', {__GUI_MAX_HEIGHT}),
	debug_print('BEST_WIDTH ', {BEST_WIDTH}),
	debug_print('__GUI_BEST_SIZE ', {__GUI_BEST_SIZE})
],
	{___GUI_IMAGE_WIDTH}
][1]
)
#enddef

#undef __GUI_IMAGE_WIDTH
# This is the version without debug info
#define __GUI_IMAGE_WIDTH
({___GUI_IMAGE_WIDTH})#enddef


# This is the macro for the image width which is can be used as string
# parameter.
#define _GUI_IMAGE_WIDTH
"{__GUI_IMAGE_WIDTH}"#enddef

# the value the image needs to be scaled by, this version can be used as string
# parameter.
#define _GUI_IMAGE_SCALE_FACTOR
(
	{__GUI_IMAGE_WIDTH} / 500
)#enddef


# The formula to set the widthe of the real image width depending on the
# image real size
#define __GUI_IMAGE_DISPLAYED_WIDTH
(
	if((image_original_width < 300) and (image_original_height < 300),
		image_original_width,
		((image_original_width * {__GUI_IMAGE_WIDTH}) / 500))
)#enddef

# The formula to set the heighte of the real image height depending on the
# image real size
#define __GUI_IMAGE_DISPLAYED_HEIGHT
(
	if((image_original_width < 300) and (image_original_height < 300),
		image_original_height,
		((image_original_height * {__GUI_IMAGE_WIDTH}) / 500))
)#enddef

# The X location of the image to display, only tested on the left side.
#define __GUI_IMAGE_DISPLAYED_X X
(
	if(image_original_width > 100,
		{X},
		({__GUI_IMAGE_WIDTH} - image_width) / 2)

)#enddef

# The Y location of the image to display, only tested on the left side.
# Note since we don't know the exact height of the text we can't centre
# the image. Instead we use the centre of the reserved image space.
#
# TODO the Y can't be determined properly since we don't know the height
# of the panel. Disabled the centring for now.
#
#define __GUI_IMAGE_DISPLAYED_Y
(
	if(image_original_height > 0,
		(height - image_height),
		height - (({__GUI_IMAGE_WIDTH} - image_height) / 2))

)#enddef

[window_definition]
	id = "wml_message_left"
	description = "bar"

	[resolution]

		[background]

			[draw]

			[/draw]

		[/background]

		[foreground]

			[draw]

				[image]
					x = "{__GUI_IMAGE_DISPLAYED_X X}"
					y = "{__GUI_IMAGE_DISPLAYED_Y}"
					w = "{__GUI_IMAGE_DISPLAYED_WIDTH}"
					h = "{__GUI_IMAGE_DISPLAYED_HEIGHT}"
					name = "(portrait_image)"
					vertical_mirror = "(portrait_mirror)"
				[/image]

			[/draw]

		[/foreground]

	[/resolution]

[/window_definition]

[window_definition]
	id = "wml_message_right"
	description = "bar"

	[resolution]

		[background]

			[draw]

			[/draw]

		[/background]

		[foreground]

			[draw]

				[image]
					x = "(width - {__GUI_IMAGE_DISPLAYED_WIDTH})"
					y = "(height - image_height)"
					w = "{__GUI_IMAGE_DISPLAYED_WIDTH}"
					h = "{__GUI_IMAGE_DISPLAYED_HEIGHT}"
					name = "(portrait_image)"
					vertical_mirror = "(portrait_mirror)"
				[/image]

			[/draw]

		[/foreground]

	[/resolution]

[/window_definition]

#define _GUI_INPUT_LIST
[listbox]
	id = "input_list"
	definition = "wml_message"
	[list_definition]

		[row]

			 [column]
				grow_factor = 1
				horizontal_grow = "true"

				[toggle_panel]
					definition = "wml_message"

					return_value_id = "ok"
					[grid]

						[row]

							[column]
								grow_factor = 0
								horizontal_alignment = "left"

								border = "all"
								border_size = 5

								[image]
									id = "icon"
									definition = "default"
									linked_group = "icon"
								[/image]

							[/column]

							[column]
								grow_factor = 0
								horizontal_alignment = "left"

								border = "all"
								border_size = 5

								[label]
									id = "label"
									definition = "default"
									linked_group = "label"
								[/label]

							[/column]

							[column]
								grow_factor = 1
								horizontal_grow = "true"

								border = "all"
								border_size = 5

								[label]
									id = "description"
									definition = "default"
									linked_group = "description"
								[/label]

							[/column]

						[/row]

					[/grid]

				[/toggle_panel]

			[/column]

		[/row]

	[/list_definition]

[/listbox]
#enddef

[window]
	id = "wml_message_left"
	description = "Dialog showing a unit portrait on the left side"

	[resolution]
		window_width = 0
		window_height = 0

		definition = "wml_message_left"

		automatic_placement = "false"

		x = 0
		y = 30
		width = "(gamemap_width)"
		height = "(screen_height - 30)"

		click_dismiss = "true"

		[linked_group]
			id = "icon"
			fixed_width = "true"
		[/linked_group]

		[linked_group]
			id = "label"
			fixed_width = "true"
		[/linked_group]

		[linked_group]
			id = "description"
			fixed_width = "true"
		[/linked_group]

		[tooltip]
			id = "tooltip_large"
		[/tooltip]

		[helptip]
			id = "tooltip_large"
		[/helptip]

		[grid]

			[row]

				[column]
					vertical_alignment = "bottom"
					horizontal_grow = "true"

					[panel]
						definition = "wml_message"

						[grid]

							[row]

								[column]
									horizontal_grow = "true"

									[grid]

										[row]

											[column]

												[spacer]
													# reserve place for the image and set a minimum height for the text
													id = "image_place_holder"

													width = {_GUI_IMAGE_WIDTH}
													height = 75
												[/spacer]

											[/column]

											[column]
												grow_factor = 1
												horizontal_grow = "true"

												[grid]

													[row]

														[column]
															border = "all"
															border_size = 5
															horizontal_alignment = "left"

															[label]
																id = "title"
																definition = "title"
															[/label]

														[/column]

													[/row]

													[row]

														[column]
															grow_factor = 1
															horizontal_grow = "true"

															border = "all"
															border_size = 5

															[scroll_label]
																id = "message"
																definition = "wml_message"
															[/scroll_label]

														[/column]

													[/row]

													[row]

														[column]
															grow_factor = 1
															horizontal_grow = "true"

															[grid]

																[row]

																	[column]
																		border = "all"
																		border_size = 5

																		[label]
																			id = "input_caption"
																			definition = "default"
																		[/label]

																	[/column]

																	[column]
																		grow_factor = 1
																		horizontal_grow = "true"

																		border = "all"
																		border_size = 5

																		[text_box]
																			id = "input"
																			definition = "default"
																		[/text_box]

																	[/column]

																[/row]

															[/grid]

														[/column]

													[/row]

													[row]

														[column]
															border = "all"
															border_size = 5
															horizontal_grow = "true"

															{_GUI_INPUT_LIST}

														[/column]

													[/row]

													[row]

														[column]
															border = "all"
															border_size = 5
															horizontal_alignment = "center"

															[button]
																# This button will be shown or hidden depending on the
																# whether or not a scrollbar is needed to show the
																# text.
																id = "ok"
																definition = "transparent"

																label = _ "OK"
															[/button]

														[/column]

													[/row]

												[/grid]

											[/column]

											[column]

												[spacer]
													width = "(
if(gamemap_width - ({__GUI_IMAGE_WIDTH}) > {MAX_TEXT_WIDTH}
, gamemap_width - (({__GUI_IMAGE_WIDTH}) + {MAX_TEXT_WIDTH})
, 0
))"
													height = 75
												[/spacer]

											[/column]

										[/row]

									[/grid]

								[/column]

							[/row]

						[/grid]

					[/panel]

				[/column]

			[/row]

		[/grid]

	[/resolution]

[/window]

[window]
	id = "wml_message_right"
	description = "Dialog showing a unit portrait on the right side"

	[resolution]
		window_width = 0
		window_height = 0

		definition = "wml_message_right"

		automatic_placement = "false"

		x = 0
		y = 30
		width = "(gamemap_width)"
		height = "(screen_height - 30)"

		click_dismiss = "true"

		[linked_group]
			id = "icon"
			fixed_width = "true"
		[/linked_group]

		[linked_group]
			id = "label"
			fixed_width = "true"
		[/linked_group]

		[linked_group]
			id = "description"
			fixed_width = "true"
		[/linked_group]

		[tooltip]
			id = "tooltip_large"
		[/tooltip]

		[helptip]
			id = "tooltip_large"
		[/helptip]

		[grid]

			[row]

				[column]
					vertical_alignment = "bottom"
					horizontal_grow = "true"

					[panel]
						definition = "wml_message"

						[grid]

							[row]

								[column]
									horizontal_grow = "true"

									[grid]

										[row]

											[column]

												[spacer]
													width = 10
													height = 75
												[/spacer]

											[/column]

											[column]
												grow_factor = 1
												horizontal_grow = "true"

												[grid]

													[row]

														[column]
															border = "all"
															border_size = 5
															horizontal_alignment = "left"

															[label]
																id = "title"
																definition = "title"
															[/label]

														[/column]

													[/row]

													[row]

														[column]
															grow_factor = 1
															horizontal_grow = "true"

															border = "all"
															border_size = 5

															[scroll_label]
																id = "message"
																definition = "default"
															[/scroll_label]

														[/column]

													[/row]

													[row]

														[column]
															grow_factor = 1
															horizontal_grow = "true"

															[grid]

																[row]

																	[column]
																		border = "all"
																		border_size = 5

																		[label]
																			id = "input_caption"
																			definition = "default"
																		[/label]

																	[/column]

																	[column]
																		grow_factor = 1
																		horizontal_grow = "true"

																		border = "all"
																		border_size = 5

																		[text_box]
																			id = "input"
																			definition = "default"
																		[/text_box]

																	[/column]

																[/row]

															[/grid]

														[/column]

													[/row]

													[row]

														[column]
															border = "all"
															border_size = 5
															horizontal_grow = "true"

															{_GUI_INPUT_LIST}

														[/column]

													[/row]

													[row]

														[column]
															border = "all"
															border_size = 5
															horizontal_alignment = "center"

															[button]
																# This button will be shown or hidden depending on the
																# whether or not a scrollbar is needed to show the
																# text.
																id = "ok"
																definition = "transparent"

																label = _ "OK"
															[/button]

														[/column]

													[/row]

												[/grid]

											[/column]

											[column]

												[spacer]
													width = "(
if(gamemap_width - (10 + ({__GUI_IMAGE_WIDTH})) > {MAX_TEXT_WIDTH}
, gamemap_width - (10 + ({__GUI_IMAGE_WIDTH}) + {MAX_TEXT_WIDTH})
, 0
))"
													height = 75
												[/spacer]

											[/column]

											[column]

												[spacer]
													# reserve place for the image and set a minimum height for the text
													id = "image_place_holder"

													width = {_GUI_IMAGE_WIDTH}
													height = 75
												[/spacer]

											[/column]


										[/row]

									[/grid]

								[/column]

							[/row]

						[/grid]

					[/panel]

				[/column]

			[/row]

		[/grid]

	[/resolution]

[/window]

#undef _GUI_INPUT_LIST

#undef __GUI_IMAGE_DISPLAYED_Y
#undef __GUI_IMAGE_DISPLAYED_X
#undef __GUI_IMAGE_DISPLAYED_HEIGHT
#undef __GUI_IMAGE_DISPLAYED_WIDTH
#undef _GUI_IMAGE_SCALE_FACTOR
#undef _GUI_IMAGE_WIDTH
#undef __GUI_IMAGE_WIDTH
#undef ___GUI_IMAGE_WIDTH
#undef __GUI_BEST_SIZE
#undef __GUI_MAX_HEIGHT
#undef __GUI_SIZE_FACTOR
#undef _GUI_HEIGHT_OFFSET

