note description: "Eiffel Vision menu separator. Mswindows implementation." legal: "See notice at end of class." status: "See notice at end of class." date: "$Date$" revision: "$Revision$" class EV_MENU_SEPARATOR_IMP inherit EV_MENU_SEPARATOR_I undefine parent redefine interface end EV_MENU_ITEM_IMP redefine -- initialize, interface, desired_height, on_measure_item, on_draw_item end EV_SYSTEM_PEN_IMP export {NONE} all end create make --feature {NONE} -- Initialization -- initialize -- do -- Precursor -- is_sensitive := False -- end feature {EV_MENU_ITEM_LIST_IMP} -- Access radio_group: detachable LINKED_LIST [EV_RADIO_MENU_ITEM_IMP] -- Radio items following this separator. create_radio_group -- Create `radio_group'. require radio_group_void: radio_group = Void do create radio_group.make ensure radio_group_not_void: radio_group /= Void end set_radio_group (a_list: detachable like radio_group) -- Assign `a_list' to `radio_group'. require a_list_not_void: a_list /= Void do radio_group := a_list ensure assigned: radio_group = a_list end remove_radio_group -- Set `radio_group' to `Void'. do radio_group := Void ensure radio_group_void: radio_group = Void end feature -- WEL Implementation on_draw_item (draw_item_struct: WEL_DRAW_ITEM_STRUCT) -- Process `Wm_drawitem' message. local draw_dc: WEL_CLIENT_DC draw_item_struct_rect: WEL_RECT background_color: WEL_COLOR_REF cur_height_div_two: INTEGER r: WEL_RECT pen: WEL_PEN item_width: INTEGER item_height: INTEGER item_top: INTEGER item_left: INTEGER item_right: INTEGER item_bottom: INTEGER do draw_dc := draw_item_struct.dc draw_item_struct_rect := draw_item_struct.rect_item item_width := draw_item_struct_rect.width item_height := draw_item_struct_rect.height item_top := draw_item_struct_rect.top item_left := draw_item_struct_rect.left item_right := draw_item_struct_rect.right item_bottom := draw_item_struct_rect.bottom cur_height_div_two := item_height // 2 create background_color.make_system (Wel_color_constants.Color_menu) if cur_height_div_two > 1 then -- We need to draw a background. create r.make (item_left, item_top, item_right, item_top + cur_height_div_two - 1) erase_background (draw_dc, r, background_color) end pen := shadow_pen draw_dc.select_pen (pen) draw_dc.line (item_left, item_top + cur_height_div_two - 1, item_right, item_top + cur_height_div_two - 1) draw_dc.unselect_pen pen.delete pen := highlight_pen draw_dc.select_pen (pen) draw_dc.line (item_left, item_top + cur_height_div_two, item_right, item_top + cur_height_div_two) draw_dc.unselect_pen pen.delete -- We need to draw a background. if cur_height_div_two < item_height then create r.make (item_left, item_top + cur_height_div_two + 1, item_right, item_bottom) erase_background (draw_dc, r, background_color) end end on_measure_item (measure_item_struct: WEL_MEASURE_ITEM_STRUCT) -- Process `Wm_measureitem' message. do measure_item_struct.set_item_width (0) measure_item_struct.set_item_height (desired_height) end feature {EV_ANY_I} -- Implementation desired_height: INTEGER -- Desired height. do Result := (menu_font.string_height ("W") // 2) + 2 end feature {EV_ANY, EV_ANY_I} -- Implementation interface: detachable EV_MENU_SEPARATOR note option: stable attribute end; note copyright: "Copyright (c) 1984-2006, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software 356 Storke Road, 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_MENU_SEPARATOR_IMP