315 lines
7.0 KiB
Plaintext
315 lines
7.0 KiB
Plaintext
note
|
|
description: "Console wizard."
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
|
|
deferred class
|
|
CONSOLE_WIZARD_APPLICATION
|
|
|
|
inherit
|
|
WIZARD_APPLICATION
|
|
redefine
|
|
set_page,
|
|
on_start,
|
|
on_finish,
|
|
on_next,
|
|
on_refresh,
|
|
on_back
|
|
end
|
|
|
|
LOCALIZED_PRINTER
|
|
|
|
feature -- Factory
|
|
|
|
new_page (a_page_id: READABLE_STRING_8): CONSOLE_WIZARD_PAGE
|
|
do
|
|
create Result.make (a_page_id)
|
|
end
|
|
|
|
set_page (a_page: WIZARD_PAGE)
|
|
do
|
|
Precursor (a_page)
|
|
|
|
process_page (a_page)
|
|
end
|
|
|
|
feature -- Execution
|
|
|
|
on_start
|
|
do
|
|
Precursor
|
|
on_navigation
|
|
end
|
|
|
|
on_finish
|
|
do
|
|
Precursor
|
|
end
|
|
|
|
on_next
|
|
do
|
|
Precursor
|
|
on_navigation
|
|
end
|
|
|
|
on_refresh
|
|
do
|
|
Precursor
|
|
on_navigation
|
|
end
|
|
|
|
on_back
|
|
do
|
|
Precursor
|
|
on_navigation
|
|
end
|
|
|
|
on_navigation
|
|
do
|
|
if attached current_page as pg then
|
|
if pg = wizard.notfound_page then
|
|
on_cancel
|
|
elseif pg = wizard.final_page then
|
|
on_finish
|
|
else
|
|
localized_print ("%N")
|
|
if attached string_question ("Continue", <<["c", "Continue"], ["r", "Refresh"], ["b", "Back"], ["q", "Cancel"]>>, "c", True) as s then
|
|
if s.is_case_insensitive_equal_general ("Cancel") then
|
|
on_cancel
|
|
elseif s.is_case_insensitive_equal_general ("Refresh") then
|
|
on_refresh
|
|
elseif s.is_case_insensitive_equal_general ("Back") then
|
|
on_back
|
|
elseif s.is_case_insensitive_equal_general ("Continue") then
|
|
on_next
|
|
else
|
|
on_next
|
|
end
|
|
else
|
|
on_next
|
|
end
|
|
end
|
|
else
|
|
on_cancel
|
|
end
|
|
end
|
|
|
|
process_page (a_page: WIZARD_PAGE)
|
|
do
|
|
a_page.apply_data
|
|
localized_print ("%N")
|
|
|
|
if attached a_page.title as l_title then
|
|
localized_print (l_title)
|
|
localized_print ("%N")
|
|
localized_print (create {STRING}.make_filled ('=', l_title.count))
|
|
localized_print ("%N")
|
|
|
|
if attached a_page.subtitle as l_subtitle then
|
|
localized_print (" -- ")
|
|
localized_print (l_subtitle)
|
|
localized_print ("%N")
|
|
end
|
|
end
|
|
|
|
if attached a_page.reports as lst and then not lst.is_empty then
|
|
across
|
|
lst as ic
|
|
loop
|
|
localized_print (" : ")
|
|
if ic.item.type = {WIZARD_PAGE}.error_report_type then
|
|
localized_print ("Error:")
|
|
elseif ic.item.type = {WIZARD_PAGE}.warning_report_type then
|
|
localized_print ("Warning:")
|
|
else
|
|
localized_print ("Info:")
|
|
end
|
|
localized_print (ic.item.message)
|
|
localized_print ("%N")
|
|
end
|
|
end
|
|
|
|
a_page.reset_reports
|
|
|
|
across
|
|
a_page.items as ic
|
|
loop
|
|
output_page_item (ic.item)
|
|
end
|
|
end
|
|
|
|
output_page_item (a_item: WIZARD_PAGE_ITEM)
|
|
do
|
|
if attached {WIZARD_PAGE_TEXT_ITEM} a_item as txt then
|
|
localized_print (txt.text)
|
|
localized_print ("%N")
|
|
elseif attached {WIZARD_QUESTION} a_item then
|
|
localized_print (" -> ")
|
|
if attached {WIZARD_BOOLEAN_QUESTION} a_item as l_bool_question then
|
|
l_bool_question.set_value (boolean_question (l_bool_question.title, <<["y", True], ["n", False]>>, l_bool_question.value))
|
|
elseif attached {WIZARD_INTEGER_QUESTION} a_item as l_integer_question then
|
|
l_integer_question.set_text (string_question (l_integer_question.title, Void, l_integer_question.text, False))
|
|
elseif attached {WIZARD_STRING_QUESTION} a_item as l_string_question then
|
|
l_string_question.set_value (string_question (l_string_question.title, Void, l_string_question.text, False))
|
|
elseif attached {WIZARD_DIRECTORY_QUESTION} a_item as l_directory_question then
|
|
l_directory_question.set_text (string_question (l_directory_question.title, Void, l_directory_question.text, False))
|
|
end
|
|
end
|
|
end
|
|
|
|
feature {NONE} -- Implementation
|
|
|
|
boolean_question (m: READABLE_STRING_GENERAL; a_options: detachable ITERABLE [TUPLE [name: READABLE_STRING_8; value: BOOLEAN]]; a_default: BOOLEAN): BOOLEAN
|
|
local
|
|
s: STRING_32
|
|
def: detachable STRING_32
|
|
l_answered: BOOLEAN
|
|
l_options: detachable ITERABLE [TUPLE [name: READABLE_STRING_8; value: BOOLEAN]]
|
|
do
|
|
if l_options = Void then
|
|
l_options := a_options
|
|
end
|
|
if l_options = Void then
|
|
l_options := <<["y", True], ["Y", True]>>
|
|
end
|
|
across
|
|
l_options as ic
|
|
until
|
|
def /= Void
|
|
loop
|
|
if a_default = ic.item.value then
|
|
def := ic.item.name
|
|
end
|
|
end
|
|
|
|
from
|
|
until
|
|
l_answered
|
|
loop
|
|
localized_print (m)
|
|
localized_print (" ")
|
|
|
|
create s.make_empty
|
|
across
|
|
l_options as ic
|
|
loop
|
|
if not s.is_empty then
|
|
s.append_character (',')
|
|
end
|
|
s.append_string_general (ic.item.name)
|
|
end
|
|
localized_print (" (")
|
|
localized_print (s)
|
|
localized_print (") ")
|
|
|
|
if def /= Void then
|
|
localized_print ("[default=")
|
|
localized_print (def)
|
|
localized_print ("] ")
|
|
end
|
|
|
|
localized_print ("?")
|
|
io.read_line
|
|
s := io.last_string
|
|
s.left_adjust
|
|
s.right_adjust
|
|
if s.is_empty and def /= Void then
|
|
create s.make_from_string_general (def)
|
|
end
|
|
if not s.is_empty then
|
|
across
|
|
l_options as o
|
|
until
|
|
l_answered
|
|
loop
|
|
if o.item.name.same_string (s) then
|
|
l_answered := True
|
|
Result := o.item.value
|
|
end
|
|
end
|
|
if not l_answered then
|
|
l_answered := True
|
|
Result := False
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
string_question (m: READABLE_STRING_GENERAL; a_options: detachable ITERABLE [TUPLE [name: READABLE_STRING_8; value: detachable READABLE_STRING_8]]; def: detachable READABLE_STRING_GENERAL; a_required_valid_option: BOOLEAN): detachable STRING_32
|
|
local
|
|
s: STRING_32
|
|
l_answered: BOOLEAN
|
|
do
|
|
from
|
|
until
|
|
l_answered
|
|
loop
|
|
localized_print (m)
|
|
localized_print (" ")
|
|
create s.make_empty
|
|
if a_options /= Void then
|
|
across
|
|
a_options as ic
|
|
loop
|
|
if not s.is_empty then
|
|
s.append_character (',')
|
|
end
|
|
s.append_string_general (ic.item.name)
|
|
if attached ic.item.value as v then
|
|
s.append_character ('=')
|
|
s.append_string_general (v)
|
|
end
|
|
end
|
|
localized_print ("(")
|
|
localized_print (s)
|
|
localized_print (") ")
|
|
end
|
|
if def /= Void then
|
|
localized_print ("[default=")
|
|
localized_print (def)
|
|
localized_print ("] ")
|
|
end
|
|
|
|
localized_print ("?")
|
|
io.read_line
|
|
create s.make_from_string_general (io.last_string)
|
|
s.left_adjust
|
|
s.right_adjust
|
|
if s.is_empty and def /= Void then
|
|
create s.make_from_string_general (def)
|
|
end
|
|
if not s.is_empty then
|
|
if a_options /= Void then
|
|
across
|
|
a_options as o
|
|
until
|
|
l_answered
|
|
loop
|
|
if o.item.name.same_string (s) then
|
|
l_answered := True
|
|
if attached o.item.value as l_value then
|
|
create Result.make_from_string_general (l_value)
|
|
else
|
|
Result := Void
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if not l_answered then
|
|
l_answered := True
|
|
Result := s
|
|
if
|
|
a_required_valid_option and then
|
|
a_options /= Void and then
|
|
not across a_options as o some attached o.item.value as v and then Result.same_string (v) end
|
|
then
|
|
l_answered := False
|
|
Result := Void
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|