class EL_PAPER_SIZE_MATCHING_DIALOG
Resizeable a5 paper dialog
note
description: "Resizeable a5 paper 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: "2023-07-07 20:33:54 GMT (Friday 7th July 2023)"
revision: "18"
class
EL_PAPER_SIZE_MATCHING_DIALOG
inherit
EL_UNTITLED_INSTALLER_DIALOG
redefine
on_cancel
end
EL_MODULE_BUILD_INFO; EL_MODULE_COLOR; EL_MODULE_DESKTOP_MENU_ICON
EL_APPLICATION_CONSTANTS
EL_SHARED_INSTALL_TEXTS; EL_SHARED_PAPER_DIMENSIONS
create
make
feature {NONE} -- Initialization
make (a_latest_version: NATURAL)
do
latest_version := a_latest_version
default_create
enable_border
original_size := paper.as_rectangle
set_size (original_size.width, original_size.height)
pixel_area := original_size.width * original_size.height
set_background_color (Color.White)
show_actions.extend (agent on_show)
create paper_box.make (Current)
put (paper_box)
propagate_background_color
set_default_cancel_button (paper_box.cancel_button)
set_default_push_button (paper_box.next_button)
end
feature {EL_INSTALLER_BOX} -- Event handling
on_cancel
do
is_cancelled := True
destroy
end
on_final_resize
do
redraw_a5_paper_box
is_final_resize_set := False
end
on_next
local
display_size: EL_ADJUSTED_DISPLAY_SIZE
do
if width /= original_size.width or height /= original_size.height then
create display_size.make_default
display_size.set_file_path (package_dir)
display_size.write
end
destroy
end
on_resize (a_x, a_y, a_width, a_height: INTEGER)
local
l_width, l_height, l_pixel_area, percent_change: INTEGER
do
if a_height > a_width then
l_width := a_height; l_height := a_width
else
l_width := a_width; l_height := a_height
end
Screen.set_dimensions_by_paper (Paper, l_width, l_height)
l_pixel_area := l_width * l_height
percent_change := ((pixel_area - l_pixel_area).abs * 100 / pixel_area).rounded
if percent_change > 2 then
Action.do_later (1, agent redraw_a5_paper_box)
pixel_area := l_pixel_area
end
if not is_final_resize_set then
Action.do_once_on_idle (agent on_final_resize)
is_final_resize_set := True
end
end
on_show
local
dialog: like new_info_dialog; version: EL_SOFTWARE_VERSION
do
resize_actions.extend (agent on_resize)
if Build_info.version_number < latest_version then
create version.make (latest_version, 0)
dialog := new_info_dialog (Text.version_title (version), Text.newer_version (version), False)
Screen.center (dialog)
dialog.show_modal_to_window (Current)
end
end
feature {NONE} -- Implementation
redraw_a5_paper_box
do
paper_box.text_area.redraw
end
feature {NONE} -- Internal attributes
is_final_resize_set: BOOLEAN
latest_version: NATURAL
original_size: EL_RECTANGLE
paper_box: EL_PAPER_MATCHING_INSTALLER_BOX
pixel_area: INTEGER
-- current pixel area
end