note
description: "Eiffel Vision radio peer. Mswindows implementation."
legal: "See notice at end of class."
status: "See notice at end of class."
date: "$Date$"
revision: "$Revision$"
deferred class
EV_RADIO_PEER_IMP
inherit
EV_RADIO_PEER_I
feature -- Status report
peers: LINKED_LIST [attached like interface]
-- List of all radio items in the group `Current' is in.
local
cur: CURSOR
do
create Result.make
if attached radio_group as l_radio_group then
cur := l_radio_group.cursor
from
l_radio_group.start
until
l_radio_group.off
loop
Result.extend (l_radio_group.item.attached_interface)
l_radio_group.forth
end
l_radio_group.go_to (cur)
else
--| `radio_group' is void when `Current' is not parented in a container.
check
-- This item should be selected as enforced by
-- other contracts.
is_selected: is_selected
end
Result.extend (attached_interface)
end
end
selected_peer: attached like interface
-- Radio item that is currently selected.
local
cur: CURSOR
l_result: detachable like interface
do
if attached radio_group as l_radio_group then
cur := l_radio_group.cursor
from
l_radio_group.start
until
l_radio_group.off or else l_result /= Void
loop
if l_radio_group.item.is_selected then
l_result := l_radio_group.item.interface
end
l_radio_group.forth
end
l_radio_group.go_to (cur)
else
--| `radio_group' is void when `Current' is not parented in a container.
check
-- This item should be selected as enforced by
-- other contracts.
is_selected: is_selected
end
l_result := interface
end
check l_result /= Void then end
Result := l_result
end
feature {EV_ANY_I} -- Implementation
radio_group: detachable LINKED_LIST [like Current]
-- List this radio peer is in.
-- This reference is shared with the other peers in the group.
set_radio_group (a_list: like radio_group)
-- Remove `Current' from `radio_group'.
-- Set `radio_group' to `a_list'.
-- Extend `Current' in `a_list'.
require
a_list_not_void: a_list /= Void
a_list_not_has_current: not a_list.has (Current)
local
l_radio_group: like radio_group
do
if radio_group /= Void then
remove_from_radio_group
end
internal_set_radio_group (a_list)
l_radio_group := radio_group
check l_radio_group /= Void then end
l_radio_group.extend (Current)
if l_radio_group.count = 1 then
enable_select
end
ensure
assigned: radio_group = a_list
in_it: attached radio_group as l_group and then l_group.has (Current)
end
remove_from_radio_group
-- Remove `Current' from `radio_group'.
-- Set `radio_group' to `Void'.
require
radio_group_not_void: radio_group /= Void
local
l_radio_group: like radio_group
do
l_radio_group := radio_group
check l_radio_group /= Void then end
l_radio_group.start
l_radio_group.prune (Current)
check
removed: not l_radio_group.has (Current) then
end
if is_selected and then not l_radio_group.is_empty then
l_radio_group.first.enable_select
end
radio_group := Void
ensure
radio_group_void: radio_group = Void
end
feature {EV_CONTAINER_IMP} -- Implementation
internal_set_radio_group (a_list: like radio_group)
-- Assign `a_list' to `radio_group'.
do
radio_group := a_list
end
note
copyright: "Copyright (c) 1984-2013, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
source: "[
Eiffel Software
5949 Hollister Ave., Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Website http://www.eiffel.com
Customer support http://support.eiffel.com
]"
end -- class EV_RADIO_PEER