Thread: [Ntw-devel] Timers
Status: Beta
Brought to you by:
drblast
|
From: Ian L. <dr...@gm...> - 2006-06-25 19:38:52
|
All, I've added a timer widget to the C server and client. The latest is in CVS. It seems to work well, but I haven't tested it very much yet. The code is in the files timer.c and timer.h, in both the Client and Server directories. -Ian |
|
From: Yua C. <ca...@gz...> - 2006-06-26 16:13:37
|
You need to update the Makefile.mingw for the Server and Client to add timer.o to the list of objects to be compiled. :) Yua Ca Van ----- Original Message ----- From: "Ian Larsen" <dr...@gm...> To: "NTW Mailing List" <ntw...@li...> Sent: Sunday, June 25, 2006 2:38 PM Subject: [Ntw-devel] Timers > All, > > I've added a timer widget to the C server and client. The latest is > in CVS. It seems to work well, but I haven't tested it very much yet. > > The code is in the files timer.c and timer.h, in both the Client and > Server directories. > > -Ian > > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job > easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Ntw-devel mailing list > Ntw...@li... > https://lists.sourceforge.net/lists/listinfo/ntw-devel > > |
|
From: Ian L. <dr...@gm...> - 2006-06-26 19:21:05
|
Oh yeah...thanks. Done. :-) -Ian On 6/26/06, Yua CaVan <ca...@gz...> wrote: > You need to update the Makefile.mingw for the Server and Client to add > timer.o to the list of objects to be compiled. :) > > Yua Ca Van > ----- Original Message ----- > From: "Ian Larsen" <dr...@gm...> > To: "NTW Mailing List" <ntw...@li...> > Sent: Sunday, June 25, 2006 2:38 PM > Subject: [Ntw-devel] Timers > > > > All, > > > > I've added a timer widget to the C server and client. The latest is > > in CVS. It seems to work well, but I haven't tested it very much yet. > > > > The code is in the files timer.c and timer.h, in both the Client and > > Server directories. > > > > -Ian > > > > Using Tomcat but need to do more? Need to support web services, security? > > Get stuff done quickly with pre-integrated technology to make your job > > easier > > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > _______________________________________________ > > Ntw-devel mailing list > > Ntw...@li... > > https://lists.sourceforge.net/lists/listinfo/ntw-devel > > > > > > > |
|
From: Yua C. <ca...@gz...> - 2006-06-26 22:29:36
|
I've modified the helloworld.c to add in a timer to test something out and
realized that we don't have a clean way of closing out dialog windows...
I've created a callback function called ping as well as setting the window
and timer variables to static:
static ntwWidget * pMainWnd; /* is the main window */
static ntwWidget * pMainTimer; /* is the timer */
void
ping (ntwWidget * user_data) {
ntwWidget *dlg;
ntwWidget *layout;
ntwWidget *label;
ntwWidget *button;
ntwWidget *btnLabel;
dlg = ntw_dialog_new(
pMainWnd, /* parent window */
100, /* width */
80, /* height */
TRUE, /* Modality */
"PING!!!!!" /* Title */
);
layout = ntw_grid_new(3,2,FALSE);
ntw_container_add(dlg,layout);
label = ntw_label_new("A timer event has just occured.\n"
"Please click the OK button");
ntw_grid_add(
layout,
label,
1,
2,
1,
2,
0,
0,
0,
0
);
button = ntw_button_new();
btnLabel = ntw_label_new("OK");
ntw_container_add(button,btnLabel);
ntw_grid_add(
layout,
button,
1,
2,
2,
3,
0,
0,
0,
0
);
ntw_add_callback(button, BUTTON_CLICKED, (func_ptr)&closePing,dlg,ASYNC);
ntw_add_callback(dlg, DESTROY_EVENT, (func_ptr)&resetPing,NULL,ASYNC);
ntw_add_callback(dlg, DELETE_EVENT,(func_ptr)&resetPing,NULL,ASYNC);
ntw_widget_show(dlg);
}
now, the dialog will pop up and the timer will be reset when the dialog is
closed using the close button ( 'X' in the upper-right ), but the closePing
function:
void
closePing(ntwWidget * user_data) {
ntw_widget_destroy(user_data); /* should be dlg */
}
seems to destroy the BUTTON, rather than the dialog even though dlg's
pointer is the user data. Any clues?
for completeness, here's resetPing:
void
resetPing() {
ntw_timer_reset(pMainTimer);
}
and the timer is set up as:
...
pMainTimer = ntw_timer_add(10 /* seconds */,ASYNC);
ntw_timer_set_callback(pMainTimer, (func_ptr)&ping, timer);
Yua Ca Van
----- Original Message -----
From: "Ian Larsen" <dr...@gm...>
To: "Yua CaVan" <ca...@gz...>
Cc: "NTW Mailing List" <ntw...@li...>
Sent: Monday, June 26, 2006 2:21 PM
Subject: Re: [Ntw-devel] Timers
> Oh yeah...thanks. Done. :-)
>
> -Ian
>
> On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> You need to update the Makefile.mingw for the Server and Client to add
>> timer.o to the list of objects to be compiled. :)
>>
>> Yua Ca Van
>> ----- Original Message -----
>> From: "Ian Larsen" <dr...@gm...>
>> To: "NTW Mailing List" <ntw...@li...>
>> Sent: Sunday, June 25, 2006 2:38 PM
>> Subject: [Ntw-devel] Timers
>>
>>
>> > All,
>> >
>> > I've added a timer widget to the C server and client. The latest is
>> > in CVS. It seems to work well, but I haven't tested it very much yet.
>> >
>> > The code is in the files timer.c and timer.h, in both the Client and
>> > Server directories.
>> >
>> > -Ian
>> >
>> > Using Tomcat but need to do more? Need to support web services,
>> > security?
>> > Get stuff done quickly with pre-integrated technology to make your job
>> > easier
>> > Download IBM WebSphere Application Server v.1.0.1 based on Apache
>> > Geronimo
>> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
>> > _______________________________________________
>> > Ntw-devel mailing list
>> > Ntw...@li...
>> > https://lists.sourceforge.net/lists/listinfo/ntw-devel
>> >
>> >
>>
>>
>>
>
>
|
|
From: Ian L. <dr...@gm...> - 2006-06-26 22:55:53
|
At first glance, it looks like you're omitting the event data
structure in your callback declaration.
It should look like this:
void
ping(struct ntw_event_data, ntwWidget *userdata){
//ping callback function
}
The problem is that the helloworld.c example isn't clear that this is
the proper declaration for a callback function, you'd have to look at
ntwtest for that. I'll fix that in the docs so nobody else falls into
the same trap.
By the way, the ntw_event_data structure looks like this:
struct ntw_event_data {
int32 id;
int32 event;
int32 synchronized;
char data[];
}
With the last char data[] being any applicable data that the client
sends back, such as the new text for an ENTRY_TEXT_CHANGED event, for
example.
Hope that helps,
Ian
On 6/26/06, Yua CaVan <ca...@gz...> wrote:
> I've modified the helloworld.c to add in a timer to test something out and
> realized that we don't have a clean way of closing out dialog windows...
>
> I've created a callback function called ping as well as setting the window
> and timer variables to static:
>
> static ntwWidget * pMainWnd; /* is the main window */
> static ntwWidget * pMainTimer; /* is the timer */
>
> void
> ping (ntwWidget * user_data) {
> ntwWidget *dlg;
> ntwWidget *layout;
> ntwWidget *label;
> ntwWidget *button;
> ntwWidget *btnLabel;
>
> dlg = ntw_dialog_new(
> pMainWnd, /* parent window */
> 100, /* width */
> 80, /* height */
> TRUE, /* Modality */
> "PING!!!!!" /* Title */
> );
>
> layout = ntw_grid_new(3,2,FALSE);
>
> ntw_container_add(dlg,layout);
>
> label = ntw_label_new("A timer event has just occured.\n"
> "Please click the OK button");
> ntw_grid_add(
> layout,
> label,
> 1,
> 2,
> 1,
> 2,
> 0,
> 0,
> 0,
> 0
> );
>
> button = ntw_button_new();
> btnLabel = ntw_label_new("OK");
>
> ntw_container_add(button,btnLabel);
>
> ntw_grid_add(
> layout,
> button,
> 1,
> 2,
> 2,
> 3,
> 0,
> 0,
> 0,
> 0
> );
>
> ntw_add_callback(button, BUTTON_CLICKED, (func_ptr)&closePing,dlg,ASYNC);
> ntw_add_callback(dlg, DESTROY_EVENT, (func_ptr)&resetPing,NULL,ASYNC);
> ntw_add_callback(dlg, DELETE_EVENT,(func_ptr)&resetPing,NULL,ASYNC);
>
> ntw_widget_show(dlg);
> }
>
> now, the dialog will pop up and the timer will be reset when the dialog is
> closed using the close button ( 'X' in the upper-right ), but the closePing
> function:
>
> void
> closePing(ntwWidget * user_data) {
> ntw_widget_destroy(user_data); /* should be dlg */
> }
>
> seems to destroy the BUTTON, rather than the dialog even though dlg's
> pointer is the user data. Any clues?
>
> for completeness, here's resetPing:
>
> void
> resetPing() {
> ntw_timer_reset(pMainTimer);
> }
>
> and the timer is set up as:
> ...
> pMainTimer = ntw_timer_add(10 /* seconds */,ASYNC);
> ntw_timer_set_callback(pMainTimer, (func_ptr)&ping, timer);
>
> Yua Ca Van
> ----- Original Message -----
> From: "Ian Larsen" <dr...@gm...>
> To: "Yua CaVan" <ca...@gz...>
> Cc: "NTW Mailing List" <ntw...@li...>
> Sent: Monday, June 26, 2006 2:21 PM
> Subject: Re: [Ntw-devel] Timers
>
>
> > Oh yeah...thanks. Done. :-)
> >
> > -Ian
> >
> > On 6/26/06, Yua CaVan <ca...@gz...> wrote:
> >> You need to update the Makefile.mingw for the Server and Client to add
> >> timer.o to the list of objects to be compiled. :)
> >>
> >> Yua Ca Van
> >> ----- Original Message -----
> >> From: "Ian Larsen" <dr...@gm...>
> >> To: "NTW Mailing List" <ntw...@li...>
> >> Sent: Sunday, June 25, 2006 2:38 PM
> >> Subject: [Ntw-devel] Timers
> >>
> >>
> >> > All,
> >> >
> >> > I've added a timer widget to the C server and client. The latest is
> >> > in CVS. It seems to work well, but I haven't tested it very much yet.
> >> >
> >> > The code is in the files timer.c and timer.h, in both the Client and
> >> > Server directories.
> >> >
> >> > -Ian
> >> >
> >> > Using Tomcat but need to do more? Need to support web services,
> >> > security?
> >> > Get stuff done quickly with pre-integrated technology to make your job
> >> > easier
> >> > Download IBM WebSphere Application Server v.1.0.1 based on Apache
> >> > Geronimo
> >> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> >> > _______________________________________________
> >> > Ntw-devel mailing list
> >> > Ntw...@li...
> >> > https://lists.sourceforge.net/lists/listinfo/ntw-devel
> >> >
> >> >
> >>
> >>
> >>
> >
> >
>
>
>
|
|
From: Ian L. <dr...@gm...> - 2006-06-26 23:01:19
|
Whoops,
That callback declaration should be:
void
ping (struct ntw_event_data *edata, ntwWidget *userdata){
}
A pointer is passed to the event data, not the event data itself.
-Ian
On 6/26/06, Ian Larsen <dr...@gm...> wrote:
> At first glance, it looks like you're omitting the event data
> structure in your callback declaration.
>
> It should look like this:
>
> void
> ping(struct ntw_event_data, ntwWidget *userdata){
> //ping callback function
> }
>
> The problem is that the helloworld.c example isn't clear that this is
> the proper declaration for a callback function, you'd have to look at
> ntwtest for that. I'll fix that in the docs so nobody else falls into
> the same trap.
>
> By the way, the ntw_event_data structure looks like this:
>
> struct ntw_event_data {
> int32 id;
> int32 event;
> int32 synchronized;
> char data[];
> }
>
> With the last char data[] being any applicable data that the client
> sends back, such as the new text for an ENTRY_TEXT_CHANGED event, for
> example.
>
> Hope that helps,
> Ian
>
> On 6/26/06, Yua CaVan <ca...@gz...> wrote:
> > I've modified the helloworld.c to add in a timer to test something out and
> > realized that we don't have a clean way of closing out dialog windows...
> >
> > I've created a callback function called ping as well as setting the window
> > and timer variables to static:
> >
> > static ntwWidget * pMainWnd; /* is the main window */
> > static ntwWidget * pMainTimer; /* is the timer */
> >
> > void
> > ping (ntwWidget * user_data) {
> > ntwWidget *dlg;
> > ntwWidget *layout;
> > ntwWidget *label;
> > ntwWidget *button;
> > ntwWidget *btnLabel;
> >
> > dlg = ntw_dialog_new(
> > pMainWnd, /* parent window */
> > 100, /* width */
> > 80, /* height */
> > TRUE, /* Modality */
> > "PING!!!!!" /* Title */
> > );
> >
> > layout = ntw_grid_new(3,2,FALSE);
> >
> > ntw_container_add(dlg,layout);
> >
> > label = ntw_label_new("A timer event has just occured.\n"
> > "Please click the OK button");
> > ntw_grid_add(
> > layout,
> > label,
> > 1,
> > 2,
> > 1,
> > 2,
> > 0,
> > 0,
> > 0,
> > 0
> > );
> >
> > button = ntw_button_new();
> > btnLabel = ntw_label_new("OK");
> >
> > ntw_container_add(button,btnLabel);
> >
> > ntw_grid_add(
> > layout,
> > button,
> > 1,
> > 2,
> > 2,
> > 3,
> > 0,
> > 0,
> > 0,
> > 0
> > );
> >
> > ntw_add_callback(button, BUTTON_CLICKED, (func_ptr)&closePing,dlg,ASYNC);
> > ntw_add_callback(dlg, DESTROY_EVENT, (func_ptr)&resetPing,NULL,ASYNC);
> > ntw_add_callback(dlg, DELETE_EVENT,(func_ptr)&resetPing,NULL,ASYNC);
> >
> > ntw_widget_show(dlg);
> > }
> >
> > now, the dialog will pop up and the timer will be reset when the dialog is
> > closed using the close button ( 'X' in the upper-right ), but the closePing
> > function:
> >
> > void
> > closePing(ntwWidget * user_data) {
> > ntw_widget_destroy(user_data); /* should be dlg */
> > }
> >
> > seems to destroy the BUTTON, rather than the dialog even though dlg's
> > pointer is the user data. Any clues?
> >
> > for completeness, here's resetPing:
> >
> > void
> > resetPing() {
> > ntw_timer_reset(pMainTimer);
> > }
> >
> > and the timer is set up as:
> > ...
> > pMainTimer = ntw_timer_add(10 /* seconds */,ASYNC);
> > ntw_timer_set_callback(pMainTimer, (func_ptr)&ping, timer);
> >
> > Yua Ca Van
> > ----- Original Message -----
> > From: "Ian Larsen" <dr...@gm...>
> > To: "Yua CaVan" <ca...@gz...>
> > Cc: "NTW Mailing List" <ntw...@li...>
> > Sent: Monday, June 26, 2006 2:21 PM
> > Subject: Re: [Ntw-devel] Timers
> >
> >
> > > Oh yeah...thanks. Done. :-)
> > >
> > > -Ian
> > >
> > > On 6/26/06, Yua CaVan <ca...@gz...> wrote:
> > >> You need to update the Makefile.mingw for the Server and Client to add
> > >> timer.o to the list of objects to be compiled. :)
> > >>
> > >> Yua Ca Van
> > >> ----- Original Message -----
> > >> From: "Ian Larsen" <dr...@gm...>
> > >> To: "NTW Mailing List" <ntw...@li...>
> > >> Sent: Sunday, June 25, 2006 2:38 PM
> > >> Subject: [Ntw-devel] Timers
> > >>
> > >>
> > >> > All,
> > >> >
> > >> > I've added a timer widget to the C server and client. The latest is
> > >> > in CVS. It seems to work well, but I haven't tested it very much yet.
> > >> >
> > >> > The code is in the files timer.c and timer.h, in both the Client and
> > >> > Server directories.
> > >> >
> > >> > -Ian
> > >> >
> > >> > Using Tomcat but need to do more? Need to support web services,
> > >> > security?
> > >> > Get stuff done quickly with pre-integrated technology to make your job
> > >> > easier
> > >> > Download IBM WebSphere Application Server v.1.0.1 based on Apache
> > >> > Geronimo
> > >> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> > >> > _______________________________________________
> > >> > Ntw-devel mailing list
> > >> > Ntw...@li...
> > >> > https://lists.sourceforge.net/lists/listinfo/ntw-devel
> > >> >
> > >> >
> > >>
> > >>
> > >>
> > >
> > >
> >
> >
> >
>
|
|
From: Yua C. <ca...@gz...> - 2006-06-26 23:20:24
|
gotcha. makes sense now. :)
it looks like the resetTimer callback for dlg is never called when the
dialog is destroyed. I had expected the DESTROY_EVENT or the DELETE_EVENT
would fire when I called ntw_widget_destroy().
Yua Ca Van
----- Original Message -----
From: "Ian Larsen" <dr...@gm...>
To: "Yua CaVan" <ca...@gz...>
Cc: "NTW Mailing List" <ntw...@li...>
Sent: Monday, June 26, 2006 6:01 PM
Subject: Re: [Ntw-devel] Timers
> Whoops,
>
> That callback declaration should be:
>
> void
> ping (struct ntw_event_data *edata, ntwWidget *userdata){
>
> }
>
> A pointer is passed to the event data, not the event data itself.
>
> -Ian
>
> On 6/26/06, Ian Larsen <dr...@gm...> wrote:
>> At first glance, it looks like you're omitting the event data
>> structure in your callback declaration.
>>
>> It should look like this:
>>
>> void
>> ping(struct ntw_event_data, ntwWidget *userdata){
>> //ping callback function
>> }
>>
>> The problem is that the helloworld.c example isn't clear that this is
>> the proper declaration for a callback function, you'd have to look at
>> ntwtest for that. I'll fix that in the docs so nobody else falls into
>> the same trap.
>>
>> By the way, the ntw_event_data structure looks like this:
>>
>> struct ntw_event_data {
>> int32 id;
>> int32 event;
>> int32 synchronized;
>> char data[];
>> }
>>
>> With the last char data[] being any applicable data that the client
>> sends back, such as the new text for an ENTRY_TEXT_CHANGED event, for
>> example.
>>
>> Hope that helps,
>> Ian
>>
>> On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> > I've modified the helloworld.c to add in a timer to test something out
>> > and
>> > realized that we don't have a clean way of closing out dialog
>> > windows...
>> >
>> > I've created a callback function called ping as well as setting the
>> > window
>> > and timer variables to static:
>> >
>> > static ntwWidget * pMainWnd; /* is the main window */
>> > static ntwWidget * pMainTimer; /* is the timer */
>> >
>> > void
>> > ping (ntwWidget * user_data) {
>> > ntwWidget *dlg;
>> > ntwWidget *layout;
>> > ntwWidget *label;
>> > ntwWidget *button;
>> > ntwWidget *btnLabel;
>> >
>> > dlg = ntw_dialog_new(
>> > pMainWnd, /* parent window */
>> > 100, /* width */
>> > 80, /* height */
>> > TRUE, /* Modality */
>> > "PING!!!!!" /* Title */
>> > );
>> >
>> > layout = ntw_grid_new(3,2,FALSE);
>> >
>> > ntw_container_add(dlg,layout);
>> >
>> > label = ntw_label_new("A timer event has just occured.\n"
>> > "Please click the OK button");
>> > ntw_grid_add(
>> > layout,
>> > label,
>> > 1,
>> > 2,
>> > 1,
>> > 2,
>> > 0,
>> > 0,
>> > 0,
>> > 0
>> > );
>> >
>> > button = ntw_button_new();
>> > btnLabel = ntw_label_new("OK");
>> >
>> > ntw_container_add(button,btnLabel);
>> >
>> > ntw_grid_add(
>> > layout,
>> > button,
>> > 1,
>> > 2,
>> > 2,
>> > 3,
>> > 0,
>> > 0,
>> > 0,
>> > 0
>> > );
>> >
>> > ntw_add_callback(button, BUTTON_CLICKED,
>> > (func_ptr)&closePing,dlg,ASYNC);
>> > ntw_add_callback(dlg, DESTROY_EVENT,
>> > (func_ptr)&resetPing,NULL,ASYNC);
>> > ntw_add_callback(dlg, DELETE_EVENT,(func_ptr)&resetPing,NULL,ASYNC);
>> >
>> > ntw_widget_show(dlg);
>> > }
>> >
>> > now, the dialog will pop up and the timer will be reset when the dialog
>> > is
>> > closed using the close button ( 'X' in the upper-right ), but the
>> > closePing
>> > function:
>> >
>> > void
>> > closePing(ntwWidget * user_data) {
>> > ntw_widget_destroy(user_data); /* should be dlg */
>> > }
>> >
>> > seems to destroy the BUTTON, rather than the dialog even though dlg's
>> > pointer is the user data. Any clues?
>> >
>> > for completeness, here's resetPing:
>> >
>> > void
>> > resetPing() {
>> > ntw_timer_reset(pMainTimer);
>> > }
>> >
>> > and the timer is set up as:
>> > ...
>> > pMainTimer = ntw_timer_add(10 /* seconds */,ASYNC);
>> > ntw_timer_set_callback(pMainTimer, (func_ptr)&ping, timer);
>> >
>> > Yua Ca Van
>> > ----- Original Message -----
>> > From: "Ian Larsen" <dr...@gm...>
>> > To: "Yua CaVan" <ca...@gz...>
>> > Cc: "NTW Mailing List" <ntw...@li...>
>> > Sent: Monday, June 26, 2006 2:21 PM
>> > Subject: Re: [Ntw-devel] Timers
>> >
>> >
>> > > Oh yeah...thanks. Done. :-)
>> > >
>> > > -Ian
>> > >
>> > > On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> > >> You need to update the Makefile.mingw for the Server and Client to
>> > >> add
>> > >> timer.o to the list of objects to be compiled. :)
>> > >>
>> > >> Yua Ca Van
>> > >> ----- Original Message -----
>> > >> From: "Ian Larsen" <dr...@gm...>
>> > >> To: "NTW Mailing List" <ntw...@li...>
>> > >> Sent: Sunday, June 25, 2006 2:38 PM
>> > >> Subject: [Ntw-devel] Timers
>> > >>
>> > >>
>> > >> > All,
>> > >> >
>> > >> > I've added a timer widget to the C server and client. The latest
>> > >> > is
>> > >> > in CVS. It seems to work well, but I haven't tested it very much
>> > >> > yet.
>> > >> >
>> > >> > The code is in the files timer.c and timer.h, in both the Client
>> > >> > and
>> > >> > Server directories.
>> > >> >
>> > >> > -Ian
>> > >> >
>> > >> > Using Tomcat but need to do more? Need to support web services,
>> > >> > security?
>> > >> > Get stuff done quickly with pre-integrated technology to make your
>> > >> > job
>> > >> > easier
>> > >> > Download IBM WebSphere Application Server v.1.0.1 based on Apache
>> > >> > Geronimo
>> > >> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
>> > >> > _______________________________________________
>> > >> > Ntw-devel mailing list
>> > >> > Ntw...@li...
>> > >> > https://lists.sourceforge.net/lists/listinfo/ntw-devel
>> > >> >
>> > >> >
>> > >>
>> > >>
>> > >>
>> > >
>> > >
>> >
>> >
>> >
>>
>
>
|
|
From: Ian L. <dr...@gm...> - 2006-06-26 23:37:36
|
No, neither of those will fire.
The reason is that if you have events fire in response to server
changes, you can get caught in ugly loops where the state is
undetermined.
For example, if I change the text of an entry widget, and it fires an
entry-text-changed event, the server will change the text accordingly,
which will send another message to the client, which will change the
text and fire yet another event...
To avoid this sort of thing, events are only fired based on input from
the actual user of the client, (except for timer events). This keeps
things simpler conceptually for the application programmer.
In this case, you could call resetTimer directly.
If you think this is the wrong approach, please let me know.
-Ian
On 6/26/06, Yua CaVan <ca...@gz...> wrote:
> gotcha. makes sense now. :)
>
> it looks like the resetTimer callback for dlg is never called when the
> dialog is destroyed. I had expected the DESTROY_EVENT or the DELETE_EVENT
> would fire when I called ntw_widget_destroy().
>
> Yua Ca Van
> ----- Original Message -----
> From: "Ian Larsen" <dr...@gm...>
> To: "Yua CaVan" <ca...@gz...>
> Cc: "NTW Mailing List" <ntw...@li...>
> Sent: Monday, June 26, 2006 6:01 PM
> Subject: Re: [Ntw-devel] Timers
>
>
> > Whoops,
> >
> > That callback declaration should be:
> >
> > void
> > ping (struct ntw_event_data *edata, ntwWidget *userdata){
> >
> > }
> >
> > A pointer is passed to the event data, not the event data itself.
> >
> > -Ian
> >
> > On 6/26/06, Ian Larsen <dr...@gm...> wrote:
> >> At first glance, it looks like you're omitting the event data
> >> structure in your callback declaration.
> >>
> >> It should look like this:
> >>
> >> void
> >> ping(struct ntw_event_data, ntwWidget *userdata){
> >> //ping callback function
> >> }
> >>
> >> The problem is that the helloworld.c example isn't clear that this is
> >> the proper declaration for a callback function, you'd have to look at
> >> ntwtest for that. I'll fix that in the docs so nobody else falls into
> >> the same trap.
> >>
> >> By the way, the ntw_event_data structure looks like this:
> >>
> >> struct ntw_event_data {
> >> int32 id;
> >> int32 event;
> >> int32 synchronized;
> >> char data[];
> >> }
> >>
> >> With the last char data[] being any applicable data that the client
> >> sends back, such as the new text for an ENTRY_TEXT_CHANGED event, for
> >> example.
> >>
> >> Hope that helps,
> >> Ian
> >>
> >> On 6/26/06, Yua CaVan <ca...@gz...> wrote:
> >> > I've modified the helloworld.c to add in a timer to test something out
> >> > and
> >> > realized that we don't have a clean way of closing out dialog
> >> > windows...
> >> >
> >> > I've created a callback function called ping as well as setting the
> >> > window
> >> > and timer variables to static:
> >> >
> >> > static ntwWidget * pMainWnd; /* is the main window */
> >> > static ntwWidget * pMainTimer; /* is the timer */
> >> >
> >> > void
> >> > ping (ntwWidget * user_data) {
> >> > ntwWidget *dlg;
> >> > ntwWidget *layout;
> >> > ntwWidget *label;
> >> > ntwWidget *button;
> >> > ntwWidget *btnLabel;
> >> >
> >> > dlg = ntw_dialog_new(
> >> > pMainWnd, /* parent window */
> >> > 100, /* width */
> >> > 80, /* height */
> >> > TRUE, /* Modality */
> >> > "PING!!!!!" /* Title */
> >> > );
> >> >
> >> > layout = ntw_grid_new(3,2,FALSE);
> >> >
> >> > ntw_container_add(dlg,layout);
> >> >
> >> > label = ntw_label_new("A timer event has just occured.\n"
> >> > "Please click the OK button");
> >> > ntw_grid_add(
> >> > layout,
> >> > label,
> >> > 1,
> >> > 2,
> >> > 1,
> >> > 2,
> >> > 0,
> >> > 0,
> >> > 0,
> >> > 0
> >> > );
> >> >
> >> > button = ntw_button_new();
> >> > btnLabel = ntw_label_new("OK");
> >> >
> >> > ntw_container_add(button,btnLabel);
> >> >
> >> > ntw_grid_add(
> >> > layout,
> >> > button,
> >> > 1,
> >> > 2,
> >> > 2,
> >> > 3,
> >> > 0,
> >> > 0,
> >> > 0,
> >> > 0
> >> > );
> >> >
> >> > ntw_add_callback(button, BUTTON_CLICKED,
> >> > (func_ptr)&closePing,dlg,ASYNC);
> >> > ntw_add_callback(dlg, DESTROY_EVENT,
> >> > (func_ptr)&resetPing,NULL,ASYNC);
> >> > ntw_add_callback(dlg, DELETE_EVENT,(func_ptr)&resetPing,NULL,ASYNC);
> >> >
> >> > ntw_widget_show(dlg);
> >> > }
> >> >
> >> > now, the dialog will pop up and the timer will be reset when the dialog
> >> > is
> >> > closed using the close button ( 'X' in the upper-right ), but the
> >> > closePing
> >> > function:
> >> >
> >> > void
> >> > closePing(ntwWidget * user_data) {
> >> > ntw_widget_destroy(user_data); /* should be dlg */
> >> > }
> >> >
> >> > seems to destroy the BUTTON, rather than the dialog even though dlg's
> >> > pointer is the user data. Any clues?
> >> >
> >> > for completeness, here's resetPing:
> >> >
> >> > void
> >> > resetPing() {
> >> > ntw_timer_reset(pMainTimer);
> >> > }
> >> >
> >> > and the timer is set up as:
> >> > ...
> >> > pMainTimer = ntw_timer_add(10 /* seconds */,ASYNC);
> >> > ntw_timer_set_callback(pMainTimer, (func_ptr)&ping, timer);
> >> >
> >> > Yua Ca Van
> >> > ----- Original Message -----
> >> > From: "Ian Larsen" <dr...@gm...>
> >> > To: "Yua CaVan" <ca...@gz...>
> >> > Cc: "NTW Mailing List" <ntw...@li...>
> >> > Sent: Monday, June 26, 2006 2:21 PM
> >> > Subject: Re: [Ntw-devel] Timers
> >> >
> >> >
> >> > > Oh yeah...thanks. Done. :-)
> >> > >
> >> > > -Ian
> >> > >
> >> > > On 6/26/06, Yua CaVan <ca...@gz...> wrote:
> >> > >> You need to update the Makefile.mingw for the Server and Client to
> >> > >> add
> >> > >> timer.o to the list of objects to be compiled. :)
> >> > >>
> >> > >> Yua Ca Van
> >> > >> ----- Original Message -----
> >> > >> From: "Ian Larsen" <dr...@gm...>
> >> > >> To: "NTW Mailing List" <ntw...@li...>
> >> > >> Sent: Sunday, June 25, 2006 2:38 PM
> >> > >> Subject: [Ntw-devel] Timers
> >> > >>
> >> > >>
> >> > >> > All,
> >> > >> >
> >> > >> > I've added a timer widget to the C server and client. The latest
> >> > >> > is
> >> > >> > in CVS. It seems to work well, but I haven't tested it very much
> >> > >> > yet.
> >> > >> >
> >> > >> > The code is in the files timer.c and timer.h, in both the Client
> >> > >> > and
> >> > >> > Server directories.
> >> > >> >
> >> > >> > -Ian
> >> > >> >
> >> > >> > Using Tomcat but need to do more? Need to support web services,
> >> > >> > security?
> >> > >> > Get stuff done quickly with pre-integrated technology to make your
> >> > >> > job
> >> > >> > easier
> >> > >> > Download IBM WebSphere Application Server v.1.0.1 based on Apache
> >> > >> > Geronimo
> >> > >> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> >> > >> > _______________________________________________
> >> > >> > Ntw-devel mailing list
> >> > >> > Ntw...@li...
> >> > >> > https://lists.sourceforge.net/lists/listinfo/ntw-devel
> >> > >> >
> >> > >> >
> >> > >>
> >> > >>
> >> > >>
> >> > >
> >> > >
> >> >
> >> >
> >> >
> >>
> >
> >
>
>
>
|
|
From: Yua C. <ca...@gz...> - 2006-06-26 23:43:47
|
I know that I can call resetTimer directly from the button callback, but it
seems to be a duplication, since closing/destroying the window already has
an event tied to it.
I understand the whole infinite loop thing with regular events, but the
final events DESTROY/DELETE should always fire for a widget so the
programmer can do some garbage cleanup. In this case, closing the dialog
widget "normally" by clicking on the 'X' does send the DESTROY/DELETE event
and the timer is reset in the cleanup callback. Mebbe we should add in
ntw_dialog/window_close(ntwWidget* widget) to do the same thing as the 'X'?
Like I said, I'm a big fan of garbage cleanup. ;)
Yua Ca Van
----- Original Message -----
From: "Ian Larsen" <dr...@gm...>
To: "Yua CaVan" <ca...@gz...>
Cc: "NTW Mailing List" <ntw...@li...>
Sent: Monday, June 26, 2006 6:37 PM
Subject: Re: [Ntw-devel] Timers
> No, neither of those will fire.
>
> The reason is that if you have events fire in response to server
> changes, you can get caught in ugly loops where the state is
> undetermined.
>
> For example, if I change the text of an entry widget, and it fires an
> entry-text-changed event, the server will change the text accordingly,
> which will send another message to the client, which will change the
> text and fire yet another event...
>
> To avoid this sort of thing, events are only fired based on input from
> the actual user of the client, (except for timer events). This keeps
> things simpler conceptually for the application programmer.
>
> In this case, you could call resetTimer directly.
>
> If you think this is the wrong approach, please let me know.
>
> -Ian
>
>
> On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> gotcha. makes sense now. :)
>>
>> it looks like the resetTimer callback for dlg is never called when the
>> dialog is destroyed. I had expected the DESTROY_EVENT or the DELETE_EVENT
>> would fire when I called ntw_widget_destroy().
>>
>> Yua Ca Van
>> ----- Original Message -----
>> From: "Ian Larsen" <dr...@gm...>
>> To: "Yua CaVan" <ca...@gz...>
>> Cc: "NTW Mailing List" <ntw...@li...>
>> Sent: Monday, June 26, 2006 6:01 PM
>> Subject: Re: [Ntw-devel] Timers
>>
>>
>> > Whoops,
>> >
>> > That callback declaration should be:
>> >
>> > void
>> > ping (struct ntw_event_data *edata, ntwWidget *userdata){
>> >
>> > }
>> >
>> > A pointer is passed to the event data, not the event data itself.
>> >
>> > -Ian
>> >
>> > On 6/26/06, Ian Larsen <dr...@gm...> wrote:
>> >> At first glance, it looks like you're omitting the event data
>> >> structure in your callback declaration.
>> >>
>> >> It should look like this:
>> >>
>> >> void
>> >> ping(struct ntw_event_data, ntwWidget *userdata){
>> >> //ping callback function
>> >> }
>> >>
>> >> The problem is that the helloworld.c example isn't clear that this is
>> >> the proper declaration for a callback function, you'd have to look at
>> >> ntwtest for that. I'll fix that in the docs so nobody else falls into
>> >> the same trap.
>> >>
>> >> By the way, the ntw_event_data structure looks like this:
>> >>
>> >> struct ntw_event_data {
>> >> int32 id;
>> >> int32 event;
>> >> int32 synchronized;
>> >> char data[];
>> >> }
>> >>
>> >> With the last char data[] being any applicable data that the client
>> >> sends back, such as the new text for an ENTRY_TEXT_CHANGED event, for
>> >> example.
>> >>
>> >> Hope that helps,
>> >> Ian
>> >>
>> >> On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> >> > I've modified the helloworld.c to add in a timer to test something
>> >> > out
>> >> > and
>> >> > realized that we don't have a clean way of closing out dialog
>> >> > windows...
>> >> >
>> >> > I've created a callback function called ping as well as setting the
>> >> > window
>> >> > and timer variables to static:
>> >> >
>> >> > static ntwWidget * pMainWnd; /* is the main window */
>> >> > static ntwWidget * pMainTimer; /* is the timer */
>> >> >
>> >> > void
>> >> > ping (ntwWidget * user_data) {
>> >> > ntwWidget *dlg;
>> >> > ntwWidget *layout;
>> >> > ntwWidget *label;
>> >> > ntwWidget *button;
>> >> > ntwWidget *btnLabel;
>> >> >
>> >> > dlg = ntw_dialog_new(
>> >> > pMainWnd, /* parent window */
>> >> > 100, /* width */
>> >> > 80, /* height */
>> >> > TRUE, /* Modality */
>> >> > "PING!!!!!" /* Title */
>> >> > );
>> >> >
>> >> > layout = ntw_grid_new(3,2,FALSE);
>> >> >
>> >> > ntw_container_add(dlg,layout);
>> >> >
>> >> > label = ntw_label_new("A timer event has just occured.\n"
>> >> > "Please click the OK button");
>> >> > ntw_grid_add(
>> >> > layout,
>> >> > label,
>> >> > 1,
>> >> > 2,
>> >> > 1,
>> >> > 2,
>> >> > 0,
>> >> > 0,
>> >> > 0,
>> >> > 0
>> >> > );
>> >> >
>> >> > button = ntw_button_new();
>> >> > btnLabel = ntw_label_new("OK");
>> >> >
>> >> > ntw_container_add(button,btnLabel);
>> >> >
>> >> > ntw_grid_add(
>> >> > layout,
>> >> > button,
>> >> > 1,
>> >> > 2,
>> >> > 2,
>> >> > 3,
>> >> > 0,
>> >> > 0,
>> >> > 0,
>> >> > 0
>> >> > );
>> >> >
>> >> > ntw_add_callback(button, BUTTON_CLICKED,
>> >> > (func_ptr)&closePing,dlg,ASYNC);
>> >> > ntw_add_callback(dlg, DESTROY_EVENT,
>> >> > (func_ptr)&resetPing,NULL,ASYNC);
>> >> > ntw_add_callback(dlg,
>> >> > DELETE_EVENT,(func_ptr)&resetPing,NULL,ASYNC);
>> >> >
>> >> > ntw_widget_show(dlg);
>> >> > }
>> >> >
>> >> > now, the dialog will pop up and the timer will be reset when the
>> >> > dialog
>> >> > is
>> >> > closed using the close button ( 'X' in the upper-right ), but the
>> >> > closePing
>> >> > function:
>> >> >
>> >> > void
>> >> > closePing(ntwWidget * user_data) {
>> >> > ntw_widget_destroy(user_data); /* should be dlg */
>> >> > }
>> >> >
>> >> > seems to destroy the BUTTON, rather than the dialog even though
>> >> > dlg's
>> >> > pointer is the user data. Any clues?
>> >> >
>> >> > for completeness, here's resetPing:
>> >> >
>> >> > void
>> >> > resetPing() {
>> >> > ntw_timer_reset(pMainTimer);
>> >> > }
>> >> >
>> >> > and the timer is set up as:
>> >> > ...
>> >> > pMainTimer = ntw_timer_add(10 /* seconds */,ASYNC);
>> >> > ntw_timer_set_callback(pMainTimer, (func_ptr)&ping, timer);
>> >> >
>> >> > Yua Ca Van
>> >> > ----- Original Message -----
>> >> > From: "Ian Larsen" <dr...@gm...>
>> >> > To: "Yua CaVan" <ca...@gz...>
>> >> > Cc: "NTW Mailing List" <ntw...@li...>
>> >> > Sent: Monday, June 26, 2006 2:21 PM
>> >> > Subject: Re: [Ntw-devel] Timers
>> >> >
>> >> >
>> >> > > Oh yeah...thanks. Done. :-)
>> >> > >
>> >> > > -Ian
>> >> > >
>> >> > > On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> >> > >> You need to update the Makefile.mingw for the Server and Client
>> >> > >> to
>> >> > >> add
>> >> > >> timer.o to the list of objects to be compiled. :)
>> >> > >>
>> >> > >> Yua Ca Van
>> >> > >> ----- Original Message -----
>> >> > >> From: "Ian Larsen" <dr...@gm...>
>> >> > >> To: "NTW Mailing List" <ntw...@li...>
>> >> > >> Sent: Sunday, June 25, 2006 2:38 PM
>> >> > >> Subject: [Ntw-devel] Timers
>> >> > >>
>> >> > >>
>> >> > >> > All,
>> >> > >> >
>> >> > >> > I've added a timer widget to the C server and client. The
>> >> > >> > latest
>> >> > >> > is
>> >> > >> > in CVS. It seems to work well, but I haven't tested it very
>> >> > >> > much
>> >> > >> > yet.
>> >> > >> >
>> >> > >> > The code is in the files timer.c and timer.h, in both the
>> >> > >> > Client
>> >> > >> > and
>> >> > >> > Server directories.
>> >> > >> >
>> >> > >> > -Ian
>> >> > >> >
>> >> > >> > Using Tomcat but need to do more? Need to support web services,
>> >> > >> > security?
>> >> > >> > Get stuff done quickly with pre-integrated technology to make
>> >> > >> > your
>> >> > >> > job
>> >> > >> > easier
>> >> > >> > Download IBM WebSphere Application Server v.1.0.1 based on
>> >> > >> > Apache
>> >> > >> > Geronimo
>> >> > >> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
>> >> > >> > _______________________________________________
>> >> > >> > Ntw-devel mailing list
>> >> > >> > Ntw...@li...
>> >> > >> > https://lists.sourceforge.net/lists/listinfo/ntw-devel
>> >> > >> >
>> >> > >> >
>> >> > >>
>> >> > >>
>> >> > >>
>> >> > >
>> >> > >
>> >> >
>> >> >
>> >> >
>> >>
>> >
>> >
>>
>>
>>
>
>
|