[fxruby-users] FXTextField and number of digits after decimal point
Joel VanderWerf
vjoel at path.berkeley.edu
Fri Dec 5 19:31:04 EST 2008
Lyle Johnson wrote:
>
> On Nov 11, 2008, at 11:25 AM, Michèle Garoche wrote:
>
>> My question is: Is there a way to use either a TEXTFIELD_INTEGER or a
>> TEXTFIELD_REAL without losing digits after the decimal point?
>
> The lack of display precision has to do with the fact that you're using
> an FXDataTarget to update the value of the text field.
>
> When the FXTextField sets its text from the double-precision float value
> that it gets from the FXDataTarget, it uses a fixed format like:
>
> sprintf(str, "%.*G", 6, value);
>
> To use a custom formatting, you'd need to stop using FXDataTarget and
> instead use a combination of SEL_COMMAND and SEL_UPDATE, e.g.
>
> @value_value.connect(SEL_COMMAND) do
> @value = @value_value.text.to_f
> end
>
> @value_value.connect(SEL_UPDATE) do
> @value_value.text = @value.to_s # or however you want to format it
> end
>
> Hope this helps,
>
> Lyle
Sorry, this is a late response, but for the record:
If you don't want to give up the functionality of data targets, you
could do this using FoxTails (http://redshift.sourceforge.net/foxtails/).
The "observable" attribute and the #field method combine to give you
similar functionality: attrs that sync with their gui representation,
and which can be observed by your own handlers. Specifying precision is
just a bonus. Here's an example and screenshot:
require 'foxtails'
include Fox
include FoxTails
class Thing
extend Observable
observable :x, :y
end
class FieldsWindow < FXMainWindow
include FTField
observable :z, :msg
def initialize(*args)
super
thing = Thing.new
thing.x = 1.23456
thing.y = 1.23456789
self.z = 1.23456789
field("x = %6.2f and y = %12.8f and z = %f",
[thing, :x], [thing, :y], :z)
field("message: %60s", :msg)
thing.when_y CHANGES do |val, old_val|
if old_val
self.msg = "You changed y from #{old_val} to #{val}"
end
end
end
def create
super
show
end
end
class FieldsApp < FTApp
def initialize
super("Fields", "TEST")
FieldsWindow.new(self, "Fields")
end
end
FieldsApp.new.run
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fields.png
Type: image/png
Size: 14333 bytes
Desc: not available
URL: <http://rubyforge.org/pipermail/fxruby-users/attachments/20081205/177a5104/attachment.png>
More information about the fxruby-users
mailing list