indexing description: "[ THIS CLASS WAS AUTO-GENERATED WITH THE COMMAND em_settings_generator settings.xml DO NOT EDIT THIS CLASS Settings that can be accessed, modified, loaded and saved ]" date: "$Date$" revision: "$Revision$" class SETTINGS inherit XM_CALLBACKS_FILTER_FACTORY export {NONE} all end EM_SHARED_USER_DIRECTORY export {NONE} all end EM_SHARED_APPLICATION_ID create make feature -- Initialization make is require application_id_set: application_id.item /= void do set_user_file (user_directory.item, application_id.item + "_settings.xml") -- Inits for Section: audio music_song := default_music_song music_genre := default_music_genre music_enabled := default_music_enabled music_volume := default_music_volume sfx_enabled := default_sfx_enabled sfx_volume := default_sfx_volume end feature -- Attributes -- Attributes for Section: audio music_song: STRING music_genre: STRING music_enabled: BOOLEAN music_volume: INTEGER sfx_enabled: BOOLEAN sfx_volume: INTEGER feature -- Defaults -- Defaults for Section: audio default_music_song: STRING is "def" default_music_genre: STRING is "pop" default_music_enabled: BOOLEAN is true default_music_volume: INTEGER is 100 default_sfx_enabled: BOOLEAN is false default_sfx_volume: INTEGER is 90 restore_all_defaults is do restore_audio_defaults end restore_audio_defaults is do music_song := default_music_song music_genre := default_music_genre music_enabled := default_music_enabled music_volume := default_music_volume sfx_enabled := default_sfx_enabled sfx_volume := default_sfx_volume end feature -- Element change -- Setter for Section: audio set_music_song (val: STRING) is do music_song := val end set_music_genre (val: STRING) is do music_genre := val end set_music_enabled (val: BOOLEAN) is do music_enabled := val end set_music_volume (val: INTEGER) is do music_volume := val end set_sfx_enabled (val: BOOLEAN) is do sfx_enabled := val end set_sfx_volume (val: INTEGER) is do sfx_volume := val end feature -- User settings set_user_file (a_directory: STRING; a_filename: STRING) is require a_filename /= void a_directory.item (a_directory.count) = '/' do create user_dir.make (a_directory) create user_file.make (a_directory + a_filename) end user_dir: KL_DIRECTORY user_file: PLAIN_TEXT_FILE write_user_settings is do if not user_file.exists then if not user_dir.exists then user_dir.recursive_create_directory end if user_file.is_creatable then user_file.create_read_write user_file.close end end if user_file.exists and then user_file.is_writable then user_file.open_write user_file.put_string ("%N%N") user_file.put_string ("%N") -- Write audio settings if not music_song.is_equal(default_music_song) then user_file.put_string ("%T%N") end if not music_genre.is_equal(default_music_genre) then user_file.put_string ("%T%N") end if not music_enabled.is_equal(default_music_enabled) then user_file.put_string ("%T%N") end if not music_volume.is_equal(default_music_volume) then user_file.put_string ("%T%N") end if not sfx_enabled.is_equal(default_sfx_enabled) then user_file.put_string ("%T%N") end if not sfx_volume.is_equal(default_sfx_volume) then user_file.put_string ("%T%N") end user_file.put_string("%N%N") user_file.close else debug io.put_string("Failed to write settings%N") end end end user_settings_parser: XM_EIFFEL_PARSER user_settings_filter: EM_SETTINGS_READER_XM_FILTER user_settings_table: DS_HASH_TABLE[STRING, STRING] read_user_settings is do if user_file.exists and then user_file.is_readable then user_file.open_read create user_settings_filter.make_null create user_settings_parser.make user_settings_parser.set_callbacks (callbacks_pipe (<>)) user_file.read_stream (user_file.count) user_settings_parser.parse_from_string (user_file.last_string) user_settings_table := user_settings_filter.user_settings_table user_file.close -- Apply audio settings if user_settings_table.has("music_song") then music_song := user_settings_table.item("music_song") end if user_settings_table.has("music_genre") then music_genre := user_settings_table.item("music_genre") end if user_settings_table.has("music_enabled") then if user_settings_table.item("music_enabled").is_boolean then music_enabled := user_settings_table.item("music_enabled").to_boolean end end if user_settings_table.has("music_volume") then if user_settings_table.item("music_volume").is_integer then music_volume := user_settings_table.item("music_volume").to_integer end end if user_settings_table.has("sfx_enabled") then if user_settings_table.item("sfx_enabled").is_boolean then sfx_enabled := user_settings_table.item("sfx_enabled").to_boolean end end if user_settings_table.has("sfx_volume") then if user_settings_table.item("sfx_volume").is_integer then sfx_volume := user_settings_table.item("sfx_volume").to_integer end end end end feature -- Widgets -- Widgets for Section: audio widget_music_song: EM_TEXTLIST[STRING] widget_music_genre: EM_COMBOBOX[STRING] widget_music_enabled: EM_CHECKBOX widget_music_volume: EM_SLIDER widget_sfx_enabled: EM_CHECKBOX widget_sfx_volume: EM_SLIDER create_all_widgets is do create_audio_widgets all_widgets_created := true end create_audio_widgets is do create widget_music_song.make_empty widget_music_song.insert_void_element widget_music_song.put("abc") widget_music_song.put("def") widget_music_song.put("ghi") if widget_music_song.has (music_song) then widget_music_song.set_selected_element (music_song) end create widget_music_genre.make_empty widget_music_genre.put("rock") widget_music_genre.put("pop") widget_music_genre.put("classic") if widget_music_genre.has (music_genre) then widget_music_genre.set_selected_element (music_genre) end create widget_music_enabled.make_empty if music_enabled then widget_music_enabled.set_checked else widget_music_enabled.set_unchecked end create widget_music_volume.make_from_range_horizontal(0, 128) widget_music_volume.set_current_value(music_volume) create widget_sfx_enabled.make_empty if sfx_enabled then widget_sfx_enabled.set_checked else widget_sfx_enabled.set_unchecked end create widget_sfx_volume.make_from_range_horizontal(0, 128) widget_sfx_volume.set_current_value(sfx_volume) audio_widgets_created := true end free_all_widgets is do free_audio_widgets all_widgets_created := false end free_audio_widgets is do all_widgets_created := false audio_widgets_created := false widget_music_song := void widget_music_genre := void widget_music_enabled := void widget_music_volume := void widget_sfx_enabled := void widget_sfx_volume := void end apply_all_settings is do apply_audio_settings end apply_audio_settings is require widgets_created: audio_widgets_created do music_song := widget_music_song.selected_element music_genre := widget_music_genre.selected_element music_enabled := widget_music_enabled.is_checked music_volume := widget_music_volume.current_value sfx_enabled := widget_sfx_enabled.is_checked sfx_volume := widget_sfx_volume.current_value end reset_all_widgets is do reset_audio_widgets end reset_audio_widgets is require widgets_created: audio_widgets_created do if widget_music_song.has (music_song) then widget_music_song.set_selected_element(music_song) end if widget_music_genre.has (music_genre) then widget_music_genre.set_selected_element(music_genre) end if music_enabled = true then widget_music_enabled.set_checked else widget_music_enabled.set_unchecked end widget_music_volume.set_current_value(music_volume) if sfx_enabled = true then widget_sfx_enabled.set_checked else widget_sfx_enabled.set_unchecked end widget_sfx_volume.set_current_value(sfx_volume) end all_widgets_created: BOOLEAN audio_widgets_created: BOOLEAN end