Listener output
Bill Baxter
dnewsgroup at billbaxter.com
Sat Apr 19 15:01:43 PDT 2008
Barry Denton wrote:
> Barry Denton Wrote:
>
>> Jarrett Billingsley Wrote:
>>
>>> "Barry Denton" <basse42 at yahoo.com> wrote in message
>>> news:fubgb0$22go$1 at digitalmars.com...
>>>> I have a Listener added to a button as so :-
>>>>
>>>> button.addListener(DWT.Selection, new class Listener {
>>>> void handleEvent(Event event) {
>>>> itemWords [5] = "item has changed " ;//~
>>>> System.currentTimeMillis();
>>>> minitable.clear(5); } });
>>>>
>>>> When pressed the button outputs this:-
>>>>
>>>> Event {missing or misplaced '}'}Event {type=13 Button {Change item}
>>>> time=1679601378 data={null} x=0 y=0 width=0 height=0 detail=0}
>>>> .
>>>> Now all is as it should be except for the {missing or misplaced '}'}
>>> Tango's formatting uses a pair of curly braces like "{}". Your output is
>>> supposed to go "{Event {type=13....", but Tango sees the opening '{', tries
>>> to parse it as a format specifier, and fails, leaving you with an error
>>> message embedded in the output.
>>>
>>> The question I have is: where is this output being generated? This code
>>> doesn't seem to generate it.
>>>
>>> I ask because it's a simple fix: instead of doing something like
>>> "Stdout.formatln(x.toString())", just use "Stdout.formatln("{}", x)", that
>>> is, escape the string by making it a parameter to be formatted.
>>>
>>>
>> Thanks but this did not work .Did I mess it up?
>> button.addListener(DWT.Selection, new class Listener {
>> void handleEvent(Event event) {
>> itemWords [5] = ("item has changed " ~ clock.stringof~" "~ cast(char)clock);
>> Stdout.formatln("{}""{}" ,event.mangleof, event.stringof).newline;
>> Stdout.formatln("{}""{}" ,clock.mangleof, clock.stringof).newline;
>> Stdout.print(itemWords).newline;
>> minitable.clear(5);
>>
> Tried this but still there
>
> button.addListener(DWT.Selection, new class Listener {
> void handleEvent(Event event) {
> itemWords [5] = ("item has changed " ~ clock.stringof~" "~ cast(char)clock);
> Stdout.formatln("{}""{}" ,event.mangleof, event.stringof).newline;
> Stdout.formatln("{}""{}" ,clock.mangleof, clock.stringof).newline;
> Stdout.formatln("{}",event);
> Stdout.print(itemWords).newline;
> minitable.clear(5);
> Output
> C3dwt7widgets5Event5Eventevent
>
> PS5tango4time9WallClock9WallClockclock
>
> Event {missing or misplaced '}'}Event {type=13 Button {Change item at index 5} time=1753196186 data={null} x=0 y=0 width=0 height=0 detail=0}
> [ item 0 , item 1 , item 2 , item 3 , item 4 , item has changed clock , item 6 , item 7 , item 8 , item 9 ]
> Event {missing or misplaced '}'}Event {type=36 Table {} time=1753196186 data={null} x=0 y=0 width=0 height=0 detail=0}
>
The problem is in dwt's dwt/widgets/Event.d, toString method:
override public char[] toString () {
return Format( "Event {type={} {} time={} data={} x={} y={}
width={} height={} detail={}}",
type, widget, time, data, x, y, width, height, detail );
//$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
//$NON-NLS-6$ //$NON-NLS-7$
}
It needs to escape the first and last '{'s.
Can you fix it, Frank?
--bb
More information about the Digitalmars-d-dwt
mailing list