Listener output

Bill Baxter dnewsgroup at billbaxter.com
Tue Apr 22 16:21:26 PDT 2008


Barry Denton wrote:
> Bill Baxter Wrote:
> 
>> Barry Denton wrote:
>>> Bill Baxter Wrote:
>>>
>>>> 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
>>> Will result be rest of  fields then filled in ?
>> I dunno.  Looks like Frank checked in the fix.  Just update and try it.
>>
>> --bb
> Sorry for being pest but it  not working
> Frank escape the first curly bracket but that fixed nothing 
> Problems seem with Event . Does not fill in fields as should  when pass event.
> I see missing bracket is not really important . My mistake .
> Important get return of needed fields which cannot happen.

Which fields do you need?  Event is a generic event type that covers a 
lot of different kinds of events.  So not all the fields are relevant 
all the time.  The non-relevant fields will just will just contain 
garbage.  Like x,y,width,height -- those aren't relevant to a Button 
click.  But event.widget should be a valid reference to the Button 
widget that was clicked.

--bb


More information about the Digitalmars-d-dwt mailing list