class EL_TAB_BOOK
Client examples: COMMON_APPLICATION_ROOT
Extension to EV_NOTEBOOK
note
description: "[
Extension to EV_NOTEBOOK
]"
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: "2022-11-15 19:56:05 GMT (Tuesday 15th November 2022)"
revision: "9"
class
EL_TAB_BOOK [B -> {EL_BOX} create make end]
inherit
EV_NOTEBOOK
rename
extend as extend_item,
remove as remove_item,
search as search_item
export
{NONE} remove_item, item
{EL_TAB} first, extend_item
redefine
wipe_out, initialize
end
EL_TAB_SHORTCUTS
undefine
copy , default_create, is_equal
end
EL_MODULE_LOG
EL_MODULE_COLOR
create
make, default_create
feature {NONE} -- Initialization
initialize
do
Precursor
create tabs.make (5)
end
make (a_window: EV_WINDOW; a_border_cms, a_padding_cms: REAL)
--
do
border_cms := a_border_cms
padding_cms := a_padding_cms
default_create
init_keyboard_shortcuts (a_window)
set_background_color (Color.Face_3d)
selection_actions.extend (agent
do
-- Postponing until Ctrl page up/down actions are handled
Action.do_once_on_idle (agent set_selected_index (selected_item_index))
end
)
end
feature -- Access
selected_tab: EL_TAB [B]
--
do
Result := tabs.i_th (selected_item_index)
end
tabs: EL_ARRAYED_LIST [like selected_tab]
selected_index: INTEGER
last_tab: like selected_tab
do
Result := tabs.last
end
feature -- Measurement
border_cms: REAL
padding_cms: REAL
feature -- Element change
set_selected_index (a_selected_index: INTEGER)
require
valid_index: valid_index (a_selected_index)
do
if a_selected_index /= selected_item_index then
select_tab (tabs [a_selected_index])
end
if tabs.valid_index (selected_index) then
tabs.i_th (selected_index).on_deselected
end
selected_index := a_selected_index
selected_tab.on_selected
end
extend_new (a_text: READABLE_STRING_GENERAL)
do
tabs.extend (create {like selected_tab}.make (Current, a_text))
end
feature -- Status setting
select_tab (tab: like selected_tab)
--
do
select_item (tab.widget)
end
feature -- Basic operations
select_left_tab
-- select tab to left wrapping around to last if gone past the first tab
do
select_neighbouring_tab (-1)
end
select_right_tab
-- select tab to right of current wrapping around to first if gone past the last tab
do
select_neighbouring_tab (1)
end
select_neighbouring_tab (index_delta: INTEGER)
-- select tab to left or right,
-- wrapping around if gone past the first or last tab
do
if not tabs.off then
tabs.circular_move (index_delta)
set_selected_index (tabs.index)
end
end
feature -- Removal
remove (tab: like selected_tab)
--
do
start
search_item (tab.widget)
if not exhausted then
tabs.go_i_th (index)
tabs.remove
remove_item
end
end
wipe_out
do
Precursor
tabs.wipe_out
selected_index := 0
end
end