note
	description: "System metrics and system configuration settings %
				  %informations."
	legal: "See notice at end of class."
	status: "See notice at end of class."
	date: "$Date$"
	revision: "$Revision$"

class
	WEL_SYSTEM_METRICS

inherit
	ANY

	WEL_SM_CONSTANTS
		export
			{NONE} all
		end

feature -- Status report

	window_border_width: INTEGER
			-- Width of the border of a window
		do
			Result := cwin_get_system_metrics (Sm_cxborder)
		end

	window_border_height: INTEGER
			-- Height of the border of a window
		do
			Result := cwin_get_system_metrics (Sm_cyborder)
		end

	cursor_width: INTEGER
			-- Width of the cursor
		do
			Result := cwin_get_system_metrics (Sm_cxcursor)
		end

	cursor_height: INTEGER
			-- Height of the cursor
		do
			Result := cwin_get_system_metrics (Sm_cycursor)
		end

	dialog_window_frame_width: INTEGER
			-- Width of window frame for window that
			-- has the `Ws_dlgframe' style
		do
			Result := cwin_get_system_metrics (Sm_cxdlgframe)
		end

	dialog_window_frame_height: INTEGER
			-- Height of window frame for window that
			-- has the `Ws_dlgframe' style
		do
			Result := cwin_get_system_metrics (Sm_cydlgframe)
		end

	double_click_width: INTEGER
			-- Width of a rectangle around the location of a
			-- first click in a double-click sequence. The second
			-- click must occur within this rectangle for the
			-- system to consider the two clicks a double-click.
		do
			Result := cwin_get_system_metrics (Sm_cxdoubleclk)
		end

	double_click_height: INTEGER
			-- Height of a rectangle around the location of a
			-- first click in a double-click sequence. The second
			-- click must occur within this rectangle for the
			-- system to consider the two clicks a double-click.
		do
			Result := cwin_get_system_metrics (Sm_cydoubleclk)
		end

	window_frame_width: INTEGER
			-- Width of window frame for a window
			-- that can be resized
		do
			Result := cwin_get_system_metrics (Sm_cxframe)
		end

	window_frame_height: INTEGER
			-- Height of window frame for a window
			-- that can be resized
		do
			Result := cwin_get_system_metrics (Sm_cyframe)
		end

	full_screen_client_area_width: INTEGER
			-- Width of the client area for a full-screen window
		do
			Result := cwin_get_system_metrics (Sm_cxfullscreen)
		end

	full_screen_client_area_height: INTEGER
			-- Height of the client area for a full-screen window
		do
			Result := cwin_get_system_metrics (Sm_cyfullscreen)
		end

	maximized_window_width: INTEGER
			-- Width of a maximized window
		do
			Result := cwin_get_system_metrics (Sm_cxmaximized)
		end

	maximized_window_height: INTEGER
			-- Height of a maximized window
		do
			Result := cwin_get_system_metrics (Sm_cymaximized)
		end

	horizontal_scroll_bar_arrow_width: INTEGER
			-- Width of arrow bitmap on horizontal scrollbar
		do
			Result := cwin_get_system_metrics (Sm_cxhscroll)
		end

	horizontal_scroll_bar_arrow_height: INTEGER
			-- Height of arrow bitmap on horizontal scrollbar
		do
			Result := cwin_get_system_metrics (Sm_cyhscroll)
		end

	horizontal_scroll_bar_thumb_width: INTEGER
		do
			Result := cwin_get_system_metrics (Sm_cxhthumb)
		end

	icon_width: INTEGER
			-- Width of an icon
		do
			Result := cwin_get_system_metrics (Sm_cxicon)
		end

	icon_height: INTEGER
			-- Height of an icon
		do
			Result := cwin_get_system_metrics (Sm_cyicon)
		end

	icon_spacing_width: INTEGER
			-- Width of rectangular cell that Program Manager
			-- uses to position tiled icons
		do
			Result := cwin_get_system_metrics (Sm_cxiconspacing)
		end

	icon_spacing_height: INTEGER
			-- Height of rectangular cell that Program Manager
			-- uses to position tiled icons
		do
			Result := cwin_get_system_metrics (Sm_cyiconspacing)
		end

	window_minimum_width: INTEGER
			-- Minimum width of a window
		do
			Result := cwin_get_system_metrics (Sm_cxmin)
		end

	window_minimum_height: INTEGER
			-- Minimum height of a window
		do
			Result := cwin_get_system_metrics (Sm_cymin)
		end

	screen_width: INTEGER
			-- Screen width
		do
			Result := cwin_get_system_metrics (Sm_cxscreen)
		end

	screen_height: INTEGER
			-- Screen height
		do
			Result := cwin_get_system_metrics (Sm_cyscreen)
		end

	virtual_screen_x: INTEGER
			-- Screen width
		do
			Result := cwin_get_system_metrics (Sm_xvirtualscreen)
		end

	virtual_screen_y: INTEGER
			-- Screen height
		do
			Result := cwin_get_system_metrics (Sm_yvirtualscreen)
		end

	virtual_screen_width: INTEGER
			-- Screen width
		do
			Result := cwin_get_system_metrics (Sm_cxvirtualscreen)
		end

	virtual_screen_height: INTEGER
			-- Screen height
		do
			Result := cwin_get_system_metrics (Sm_cyvirtualscreen)
		end

	monitor_count: INTEGER
			-- Number of monitors used for displaying virtual screen.
		do
			Result := cwin_get_system_metrics (Sm_cmonitors)
		end

	title_bar_width: INTEGER
			-- Width of bitmap contained in title bar.
		obsolete
			"Use title_bar_image_width instead [2017-05-31]."
		do
			Result := cwin_get_system_metrics (Sm_cxsize)
		end

	title_bar_image_width: INTEGER
			-- Width of bitmap contained in title bar.
		do
			Result := cwin_get_system_metrics (Sm_cxsize)
		end

	title_bar_image_height: INTEGER
			-- Height of bitmap contained in title bar.
		do
			Result := cwin_get_system_metrics (sm_cysize)
		end

	title_bar_height: INTEGER
			-- Height of title bar.
		do
			Result := cwin_get_system_metrics (Sm_cycaption)
		end

	vertical_scroll_bar_arrow_width: INTEGER
			-- Width of arrow bitmap on vertical scrollbar
		do
			Result := cwin_get_system_metrics (Sm_cxvscroll)
		end

	vertical_scroll_bar_arrow_height: INTEGER
			-- Height of arrow bitmap on vertical scrollbar
		do
			Result := cwin_get_system_metrics (Sm_cyvscroll)
		end

	vertical_scroll_bar_thumb_height: INTEGER
			-- Height of vertical scrollbar thumb
		do
			Result := cwin_get_system_metrics (Sm_cyvthumb)
		end

	caption_height: INTEGER
			-- Height of normal caption area
		do
			Result := cwin_get_system_metrics (Sm_cycaption)
		end

	kanji_window_height: INTEGER
			-- Height of the Kanji window at the bottom of the
			-- screen. For double-byte character set versions of
			-- Windows only.
		do
			Result := cwin_get_system_metrics (Sm_cykanjiwindow)
		end

	menu_bar_height: INTEGER
			-- Height of single-line menu bar
		do
			Result := cwin_get_system_metrics (Sm_cymenu)
		end

	dbcs_installed: BOOLEAN
			-- Is the double-byte character set (DBCS) version
			-- of USER.EXE installed?
		do
			Result := cwin_get_system_metrics (Sm_dbcsenabled) /= 0
		end

	imm_enabled: BOOLEAN
			-- Is the IMM enabled (works only for Windows 2000 and
			-- and Asian locale machines (Chinese, Japanese, Korean))
		do
			Result := cwin_get_system_metrics (Sm_immenabled) /= 0
		end

	debug_installed: BOOLEAN
			-- Is the debugging version of USER.EXE installed?
		do
			Result := cwin_get_system_metrics (Sm_debug) /= 0
		end

	popup_menu_right_aligned: BOOLEAN
			-- Are pop-up menus right-aligned relative to the
			-- corresponding menu-bar item?
		do
			Result := cwin_get_system_metrics (Sm_menudropalignment) /= 0
		end

	mouse_installed: BOOLEAN
			-- Is a mouse installed?
		do
			Result := cwin_get_system_metrics (Sm_mousepresent) /= 0
		end

	pen_installed: BOOLEAN
			-- Is a pen installed?
		do
			Result := cwin_get_system_metrics (Sm_penwindows) /= 0
		end

	mouse_button_swapped: BOOLEAN
			-- Are the meanings of the left and right mouse
			-- buttons swapped?
		do
			Result := cwin_get_system_metrics (Sm_swapbutton) /= 0
		end

	is_remote_session: BOOLEAN
			-- Is current applications displayed using remote desktop?
		do
			Result := cwin_get_system_metrics (sm_remotesession) /= 0
		end

feature {NONE} -- Externals

	cwin_get_system_metrics (value: INTEGER): INTEGER
			-- SDK GetSystemMetrics
		external
			"C [macro <wel.h>] (int): EIF_INTEGER"
		alias
			"GetSystemMetrics"
		end

note
	copyright:	"Copyright (c) 1984-2017, Eiffel Software and others"
	license:	"Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
	source: "[
			Eiffel Software
			5949 Hollister Ave., Goleta, CA 93117 USA
			Telephone 805-685-1006, Fax 805-685-6869
			Website http://www.eiffel.com
			Customer support http://support.eiffel.com
		]"

end