class EL_COLOR_BUTTON

(source code)

description

Color button

note
	description: "Color button"

	author: "Finnian Reilly"
	copyright: "Copyright (c) 2001-2022 Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com"

	license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
	date: "2024-07-12 12:52:07 GMT (Friday 12th July 2024)"
	revision: "10"

class
	EL_COLOR_BUTTON

inherit
	EV_BUTTON

	EL_MODULE_COLOR
		rename
			Color as Color_
		end

	EL_MODULE_ACTION

	EL_MODULE_SCREEN

create
	make

feature {NONE} -- Initialization

	make (
		a_window: EV_WINDOW; a_title_text: like title_text; a_height, rgb_code: INTEGER
		a_set_color_action: like set_color_action
	)
		do
			default_create
			window := a_window; title_text := a_title_text
			create color.make_with_rgb_24_bit (0)

			set_minimum_size (a_height * 2, a_height)
			create color_pixmap.make_with_size (
				(width * Border_proportions.horizontal).rounded, (height * Border_proportions.vertical).rounded
			)
			set_color (rgb_code)

			set_color_action := a_set_color_action
			set_actions
		end

feature -- Element change

	set_color (rgb_code: INTEGER)
		do
			color.set_rgb_with_24_bit (rgb_code)
			color_pixmap.set_background_color (color)
			color_pixmap.clear
			color_pixmap.set_foreground_color (Color_.Dark_gray)
			color_pixmap.draw_straight_line (1, color_pixmap.height - 1, color_pixmap.width, color_pixmap.height - 1)
			color_pixmap.draw_straight_line (color_pixmap.width - 1, 1, color_pixmap.width - 1, color_pixmap.height)
			set_pixmap (color_pixmap)
		end

	set_actions
		do
			select_actions.extend (agent
				local
					dialog: EV_COLOR_DIALOG
				do
					create dialog.make_with_title (title_text.to_string_32)
					dialog.set_color (color)
					dialog.show_modal_to_window (window)
					if dialog.color.rgb_24_bit /= color.rgb_24_bit then
						set_color (dialog.color.rgb_24_bit)
						set_color_action.call ([dialog.color.rgb_24_bit])
					end
				end
			)
		end

feature -- Access

	color: EL_COLOR

feature {NONE} -- Implementation

	color_pixmap: EV_PIXMAP

	window: EV_WINDOW

	title_text: READABLE_STRING_GENERAL

	set_color_action: PROCEDURE [INTEGER]

	is_color_initialized: BOOLEAN

	Border_proportions: TUPLE [horizontal, vertical: REAL]
		once
			create Result
			if {PLATFORM}.is_windows then
				Result.horizontal := 0.85
				Result.vertical := 0.7
			else
				Result.horizontal := 0.8
				Result.vertical := 0.6
			end
		end

end