/* $Id$ Part of XPCE Designed and implemented by Anjo Anjewierden and Jan Wielemaker E-mail: jan@swi.psy.uva.nl Copyright (C) 1998 University of Amsterdam. All rights reserved. */ :- module(pce_real_item, []). :- use_module(library(pce)). :- pce_begin_class(real_item, text_item). variable(low, real, both, "Lowest value"). variable(high, real*, both, "highest value"). variable(format, name := '%g', both, "How values are formatted"). variable(allow_default, bool := @off, both, "'' <-> @default"). initialise(RI, Label:name, Low:real, High:[real]*, Msg:[code]*) :-> send(RI, send_super, initialise, Label, '', Msg), send(RI, length, 8), send(RI, slot, low, Low), default(High, @nil, H), send(RI, slot, high, H). selection(RI, Sel:[real]) :<- get(RI, get_super, selection, Text), ( get(@pce, convert, Text, real, Sel) -> get(RI, low, Low), get(RI, high, High), ( Sel >= Low, ( High == @nil ; Sel =< High ) -> true ; ( High == @nil -> send(RI, report, error, 'Minimum value is %g', Low) ; send(RI, report, error, 'Value out of range (%g .. %g)', Low, High) ), fail ) ; get(RI, allow_default, @on), new(S, string('%s', Text)), send(S, strip), get(S, size, 0) -> Sel = @default ; send(RI, report, error, 'Please enter a valid number'), fail ). selection(RI, Sel:[real]) :-> ( Sel == @default -> send(RI, clear) ; get(RI, format, Fmt), send(RI, send_super, selection, string(Fmt, Sel)) ). :- pce_end_class.