class LB_BASIC_CONFIG_EDIT_DIALOG

(source code)

description

Lb basic config edit dialog

note
	description: "Lb basic config edit dialog"

	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: "2022-12-05 14:24:23 GMT (Monday 5th December 2022)"
	revision: "6"

deferred class
	LB_BASIC_CONFIG_EDIT_DIALOG

inherit
	EL_DIALOG
	 	redefine
	 		on_control_id_command, on_ok, Class_icon
	 	end
	
	WEL_DS_CONSTANTS
	
	LB_WEL_WINDOW_IDS
	
	LB_SHARED_CONFIGURATION

feature {NONE} -- Initialization

	make_child (a_parent: WEL_WINDOW; a_name: STRING)
			--
		do
			make_child_dialog (a_parent, a_name, 400, 200)

			add_fields
			
			-- Layout Apply button
			layout_pos.set_x (width - 120)
			layout_pos.set_y (layout_pos.y + 10)
			layout_size.set_width (62)
			layout_size.set_height (Button_height)
			
			create apply_button.make (Current, "Apply", layout_pos, layout_size, ID_apply_config_button)
			apply_button.set_font (gui_font)
			apply_button.disable
			add_control (apply_button)
						
			-- Layout OK button
			layout_pos.set_x (layout_pos.x + apply_button.width + Field_spacing )
			layout_size.set_width (32)
			layout_size.set_height (Button_height)
			
			create ok_button.make (Current, "OK", layout_pos, layout_size, IDOK)
			ok_button.set_font (gui_font)
			add_control (ok_button)

			set_height (caption_height + layout_pos.y + layout_size.height + Border_top_bottom)
		end

	add_fields
			--
		do
			add_script_file_name_field (
				"Praat Script", Config.script_file_name
			)
			add_integer_field (
				"Sample interval (millisecs)", Config.sample_interval_millisecs
			)
			add_real_field (
				"Signal threshold (Root mean square)", Config.signal_threshold
			)
		end
		
feature {NONE} -- Event handlers

	on_control_id_command  (control_id: INTEGER)
			--	
		do
			inspect control_id
				when ID_file_browse_button then
					on_file_select_script_file
	
				when ID_apply_config_button then
					apply_pending_edits
					
				when IDOK then
					on_ok
				else
			end
		end

	on_file_select_script_file
	
		do
			open_script_file_dialog.activate (Current)
			if open_script_file_dialog.selected then
				script_file_edit.set_text (open_script_file_dialog.file_name)
				script_file_edit.on_en_change
			end
		end

	on_ok
			-- Button Ok has been pressed.
		do
			if apply_button.enabled then
				apply_pending_edits
			end
			hide
		end

	on_pending_edit
			--
		do
			apply_button.enable
		end

	on_pending_edits_applied
			--
		do
			apply_button.disable
			tabbed_controls.last.set_focus
		end

feature {NONE} -- Component layout

	add_integer_field (field_label: STRING; initial_value: EL_EDITABLE_INTEGER)
			--
		local
			field: EL_INTEGER_EDIT_FIELD
		do
			layout_pos.set_x (Border_left_right)
			layout_size.set_width (50)
			layout_size.set_height (22)

			create field.make (Current, layout_pos, layout_size, initial_value)
			field.set_font (gui_font)
			add_control (field)
			
			add_field_label (field_label, field.width)
			layout_next_row
		end

	add_real_field (field_label: STRING; initial_value: EL_EDITABLE_REAL)
			--
		local
			field: EL_REAL_EDIT_FIELD
		do
			layout_pos.set_x (Border_left_right)
			layout_size.set_width (50)
			layout_size.set_height (22)

			create field.make (Current, layout_pos, layout_size, initial_value)
			field.set_font (gui_font)
			add_control (field)

			add_field_label (field_label, field.width)
			layout_next_row
		end

	add_script_file_name_field (field_label: STRING; script_name: EL_EDITABLE_STRING)
			--
		local
			label: WEL_STATIC
		do
			layout_size.set_width (100)
			layout_size.set_height (22)
			
			create label.make (
				Current, field_label,
				layout_pos.x, layout_pos.y, layout_size.width, layout_size.height,
				- 1
			)
			label.set_font (gui_font)
			
			layout_pos.set_y (layout_pos.y + layout_size.height)

			layout_size.set_width (300)
			create script_file_edit.make (Current, layout_pos, layout_size, script_name)
			script_file_edit.set_font (gui_font)
			add_control (script_file_edit)
			
			layout_pos.set_x (layout_pos.x + layout_size.width + 5)
			layout_size.set_width (65)
			layout_size.set_height (Button_height)
			create browse_button.make (Current, "Browse..", layout_pos, layout_size, id_file_browse_button)
			browse_button.set_font (gui_font)
			add_control (browse_button)
			
			layout_next_row

		end

	add_field_label (label_str: STRING; field_width: INTEGER)
			--
		do
			layout_pos.set_x (Border_left_right + field_width + 5)

			layout_size.set_width (width - layout_pos.x)
			layout_size.set_height (22 + 14 * label_str.occurrences ('%N') )
			
			add_label (label_str)
			label_list.last.set_font (gui_font)
			
		end
		
feature {NONE} -- Implementation

	open_script_file_dialog: WEL_OPEN_FILE_DIALOG
			--
		once
			create Result.make
			Result.set_title ("Select Praat script")
			Result.set_filter (
				<< "Praat script (*.psc; *.praat)",	"All file (*.*)" >>,
				<< "*.praat; *.psc", 				"*.*" >>
			)
		ensure
			result_not_void: Result /= Void
		end
		
	ok_button: EL_PUSH_BUTTON
	
	browse_button: EL_PUSH_BUTTON
	
	apply_button: EL_PUSH_BUTTON

	script_file_edit: EL_SCRIPT_NAME_EDIT_FIELD
	
feature {NONE} -- Default constants

	Class_icon: WEL_ICON
			-- Window's icon
		once
			create Result.make_by_id (Id_ico_application)
		end

	Button_height: INTEGER = 24

	Field_spacing: INTEGER = 10
	
	Border_left_right: INTEGER = 10
	
	Border_top_bottom: INTEGER = 15

end