19928/jj_vision/unfinished/ymdhms_time_control.e

238 lines
5.6 KiB
Plaintext
Raw Normal View History

2024-06-17 07:09:33 +00:00
note
description: "Objects that ..."
author: ""
date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $"
revision: "$Revision: 7 $"
class
YMDHMS_TIME_CONTROL
inherit
EV_KEY_CONSTANTS
export
{NONE} all
undefine
default_create,
copy,
is_equal
end
YMDHMS_DURATION_CONSTANTS
export
{NONE} all
undefine
default_create,
copy,
is_equal
end
CONTROL
redefine
initialize,
value_imp,
is_value_valid,
draw
end
create
default_create
feature -- Initialization
initialize
do
Precursor {CONTROL}
create parser.make
create static
create up_button
create down_button
create calendar_button
extend (static)
extend (up_button)
extend (down_button)
extend (calendar_button)
position_widgets
set_actions
end
position_widgets
-- Set the size and location of each widget in `Current'
do
static.set_minimum_width (150)
up_button.set_text ("+")
down_button.set_text ("-")
up_button.set_minimum_size (static.height // 2, static.height // 2)
down_button.set_minimum_size (static.height // 2, static.height // 2)
calendar_button.set_minimum_size (static.height, static.height)
-- set_item_size (up_button, up_button.width, static.height // 2)
-- set_item_size (down_button, down_button.width, static.height // 2)
set_item_position (up_button, static.width, 0)
set_item_position (down_button, static.width, static.height // 2)
set_item_position (calendar_button, static.width + up_button.width, 0)
end
set_actions
-- Add actions to the widgets
do
up_button.select_actions.extend (agent increment_data)
down_button.select_actions.extend (agent decrement_data)
calendar_button.select_actions.extend (agent open_calendar_dialog)
static.key_press_actions.extend (agent on_key_press)
end
-- set_minimum_height (a_height: INTEGER) is
-- local
-- but_size: INTEGER
-- do
-- Precursor {JJJ_CONTROL} (a_height)
-- but_size := minimum_height // 2
-- set_item_height (static, minimum_height)
-- set_item_height (up_button, but_size)
-- set_item_height (down_button, but_size)
-- set_item_y_position (up_button, 0)
-- set_item_y_position (down_button, but_size)
-- end
-- set_minimum_width (a_width: INTEGER) is
-- local
-- but_size: INTEGER
-- do
-- Precursor {JJJ_CONTROL} (a_width)
-- but_size := up_button.width
-- set_item_width (static, minimum_width - but_size - 1)
-- set_item_x_position (up_button, minimum_width - but_size)
-- set_item_x_position (down_button, minimum_width - but_size)
-- end
feature -- Access
feature -- Element Change
feature -- Status report
is_value_valid: BOOLEAN
do
-- FIX ME !!!
Result := True
end
feature -- Basic operations
draw
-- Update the screen representation (ie `static'). This feature
-- is not called directly from Current; it is called by
-- JJJ_CONTROL.`set_value'.
do
static.set_text (parser.to_string (value_imp))
end
feature {NONE} -- Implementation
increment_data
-- Increase the data by one unit. Unit is based
-- on position of caret within the edit box.
do
change_data (1)
change_actions.call ([])
end
decrement_data
-- Decrease the data by one unit. Unit is based
-- on position of caret within the edit box.
do
change_data (-1)
change_actions.call ([])
end
change_data (sign: INTEGER)
-- Change the data by + or - one unit based on `sign'
-- Update `value_imp'.
require
valid_sign: sign = 1 or sign = -1
local
pos: INTEGER
h: INTEGER
do
pos := static.caret_position
if parser.is_index_in_year_string (value_imp, pos) then
value_imp.add_duration (One_year * sign)
elseif parser.is_index_in_month_string (value_imp, pos) then
value_imp.add_duration (One_month * sign)
elseif parser.is_index_in_day_string (value_imp, pos) then
value_imp.add_duration (One_day * sign)
elseif parser.is_index_in_hour_string (value_imp, pos) then
value_imp.add_duration (One_hour * sign)
elseif parser.is_index_in_minute_string (value_imp, pos) then
value_imp.add_duration (One_minute * sign)
elseif parser.is_index_in_second_string (value_imp, pos) then
value_imp.add_duration (One_second * sign)
elseif parser.is_index_in_am_pm_string (value_imp, pos) then
h := value_imp.hour
h := h + 12
if h >= 24 then
h := h - 24
end
value_imp.set_hour (h)
else
end
draw
static.set_caret_position (pos)
end
on_key_press (a_key: EV_KEY)
-- Process a key pressed in static
do
if a_key.code = Key_up then
increment_data
static.set_caret_position ((static.caret_position - 1).max (0))
-- to move the caret back after the key press
-- otherwise it move forward one position.
elseif a_key.code = Key_down then
decrement_data
static.set_caret_position ((static.caret_position + 1).max (0))
-- to move the caret back after the key press
-- otherwise it move forward one position.
else
end
end
open_calendar_dialog
-- Open a caladar for selecting a date.
do
calendar_tool.set_date (value)
calendar_tool.show
calendar_tool.raise
-- calendar_tool.enable_capture
end
feature {NONE} -- Implementation
value_imp: YMDHMS_TIME
-- Implementation (and anchor) of `value'.
-- Redefined to change type.
static: EV_TEXT_FIELD
up_button: EV_BUTTON
down_button: EV_BUTTON
calendar_button: EV_BUTTON
-- Opens a calendar for selecting a date.
calendar_tool: EV_COLOR_DIALOG
-- temp fix just to do something; empliment a calendar dialog
-- Used to select a date
once
create Result
Result.disable_user_resize
end
parser: YMD_TIME_PARSER
-- parser: YMDHMS_PARSER
-- For converting dates to and from strings
end