19928/jj_vitp/Interface/views/widget_position_table.e
Jocelyn Fiat 6dde6425c2 init
2024-06-17 09:09:33 +02:00

143 lines
2.8 KiB
Plaintext

note
description: "[
A table of TUPLEs where each TUPLE holds an EV_WORLD object
(e.g. EV_TEXT_WIDGET, ATTACK_UNIT_WIDGET, etc.) along with
an EV_COORDINATE of where that widget should be placed,
indexed by a string name.
]"
author: "Jimmy J. Johnson"
date: "11/11/23"
copyright: "Copyright (c) 2023, Jimmy J. Johnson"
license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)"
class
WIDGET_POSITION_TABLE [G -> EV_MODEL, K -> HASHABLE]
--inherit
-- HASH_TABLE [TUPLE [mod: G; loc: EV_COORDINATE], K]
-- rename
-- extend as table_extend
-- export
-- {NONE}
-- put,
-- force,
-- table_extend,
-- replace,
-- replace_key,
-- merge
-- end
create
make
feature {NONE} -- Initialization
make
-- Create an instance
do
create table.make (100)
end
feature -- Access
widget (a_key: K): EV_MODEL
-- The widget associated with `a_key'
require
has_key: has (a_key)
do
Result := table.definite_item (a_key).mod
end
location (a_key: K): EV_COORDINATE
-- The location associated with `a_key'
require
has_key: has (a_key)
do
Result := table.definite_item (a_key).loc
end
widget_for_iteration: EV_MODEL
-- The `widget' item at the current iteration position
require
not_off: not is_off
do
Result := table.item_for_iteration.mod
end
location_for_iteration: EV_COORDINATE
-- The `location' item at the current iteration position
require
not_off: not is_off
do
Result := table.item_for_iteration.loc
end
key_for_iteration: K
-- The key at thge currenbt iteration position
require
not_off: not is_off
do
Result := table.key_for_iteration
end
feature -- Query
has (a_key: K): BOOLEAN
-- Does Current contain an item with `a_key'
do
Result := table.has (a_key)
end
feature -- Element change
extend (a_widget: EV_MODEL; a_x, a_y: INTEGER; a_key: K)
-- Add `a_widget' to the table, located at (a_x, a_y) and
-- indexed by `a_key'. Replace any previous item that
-- was indexed by `a_key'.
-- An EV_COORDINATE is created from `a_x' and `a_y'.
local
loc: EV_COORDINATE
do
create loc.make (a_x, a_y)
table.force ([a_widget, loc], a_key)
end
reposition (a_key: K; a_x, a_y: INTEGER)
-- Change the `location' for the item indexed by `a_key'
require
has_key: has (a_key)
do
location (a_key).set_x (a_x)
location (a_key).set_y (a_y)
end
feature -- Cursor movement
start
-- Bring cursor to first position
do
table.start
end
forth
-- Advance cursor to next position or `is_off'
require
not_off: not is_off
do
table.forth
end
is_off: BOOLEAN
-- Is the cursor after the last item?
do
Result := table.off
end
feature {NONE} -- Implementation
table: HASH_TABLE [TUPLE [mod: EV_MODEL; loc: EV_COORDINATE], K]
-- Implementation of Current
end