Event: QOF event handlers.
[Query Object Framework]


Files

file  gnc-event.h
 engine event handling interface

Typedefs

typedef void(* GNCEngineEventHandler )(GUID *entity, QofIdType type, GNCEngineEventType event_type, gpointer user_data)

Enumerations

enum  GNCEngineEventType {
  GNC_EVENT_NONE = 0, GNC_EVENT_CREATE = 1 << 0, GNC_EVENT_MODIFY = 1 << 1, GNC_EVENT_DESTROY = 1 << 2,
  GNC_EVENT_ADD = 1 << 3, GNC_EVENT_REMOVE = 1 << 4, GNC_EVENT_ALL = 0xff
}

Functions

gint gnc_engine_register_event_handler (GNCEngineEventHandler handler, gpointer user_data)
void gnc_engine_unregister_event_handler (gint handler_id)
void gnc_engine_gen_event (QofEntity *entity, GNCEngineEventType event_type)
void gnc_engine_suspend_events (void)
void gnc_engine_resume_events (void)


Typedef Documentation

typedef void(* GNCEngineEventHandler)(GUID *entity, QofIdType type, GNCEngineEventType event_type, gpointer user_data)
 

GNCEngineEventHandler

Handler invoked when an engine event occurs.

Parameters:
entity,: GUID of entity generating event
type,: QofIdType of the entity generating the event
event_type,: one of the single-bit GNCEngineEventTypes, not a combination
user_data,: user_data supplied when handler was registered.

Definition at line 61 of file gnc-event.h.


Function Documentation

void gnc_engine_gen_event QofEntity entity,
GNCEngineEventType  event_type
 

gnc_engine_generate_event

Invoke all registered event handlers using the given arguments.

GNC_EVENT_CREATE events should be generated after the object has been created and registered in the engine entity table. GNC_EVENT_MODIFY events should be generated whenever any data member or submember (i.e., splits) is changed. GNC_EVENT_DESTROY events should be called before the object has been destroyed or removed from the entity table.

Parameters:
entity,: the GUID of the entity generating the event
event_type,: the type of event -- this should be one of the single-bit GNCEngineEventType values, not a combination.

Definition at line 203 of file gnc-event.c.

00204 {
00205   if (!entity)
00206     return;
00207 
00208   if (suspend_counter)
00209     return;
00210 
00211   gnc_engine_generate_event_internal (entity, event_type);
00212 }

gint gnc_engine_register_event_handler GNCEngineEventHandler  handler,
gpointer  user_data
 

Implementations

Definition at line 54 of file gnc-event.c.

00056 {
00057   HandlerInfo *hi;
00058   gint handler_id;
00059   GList *node;
00060 
00061   ENTER ("(handler=%p, data=%p)", handler, user_data);
00062   /* sanity check */
00063   if (!handler)
00064   {
00065     PERR ("no handler specified");
00066     return 0;
00067   }
00068 
00069   /* look for a free handler id */
00070   handler_id = next_handler_id;
00071   node = handlers;
00072 
00073   while (node)
00074   {
00075     hi = node->data;
00076 
00077     if (hi->handler_id == handler_id)
00078     {
00079       handler_id++;
00080       node = handlers;
00081       continue;
00082     }
00083 
00084     node = node->next;
00085   }
00086 
00087   /* Found one, add the handler */
00088   hi = g_new0 (HandlerInfo, 1);
00089 
00090   hi->handler = handler;
00091   hi->user_data = user_data;
00092   hi->handler_id = handler_id;
00093 
00094   handlers = g_list_prepend (handlers, hi);
00095 
00096   /* Update id for next registration */
00097   next_handler_id = handler_id + 1;
00098 
00099   LEAVE ("(handler=%p, data=%p) handler_id=%d", handler, user_data, handler_id);
00100   return handler_id;
00101 }

void gnc_engine_resume_events void   ) 
 

gnc_engine_resume_events

Resume engine event generation.

Definition at line 144 of file gnc-event.c.

00145 {
00146   if (suspend_counter == 0)
00147   {
00148     PERR ("suspend counter underflow");
00149     return;
00150   }
00151 
00152   suspend_counter--;
00153 }

void gnc_engine_suspend_events void   ) 
 

gnc_engine_suspend_events

Suspend all engine events. This function may be called multiple times. To resume event generation, an equal number of calls to gnc_engine_resume_events must be made.

Definition at line 133 of file gnc-event.c.

00134 {
00135   suspend_counter++;
00136 
00137   if (suspend_counter == 0)
00138   {
00139     PERR ("suspend counter overflow");
00140   }
00141 }

void gnc_engine_unregister_event_handler gint  handler_id  ) 
 

gnc_engine_unregister_event_handler

Unregister an engine event handler.

Parameters:
handler_id,: the id of the handler to unregister

Definition at line 104 of file gnc-event.c.

00105 {
00106   GList *node;
00107 
00108   ENTER ("(handler_id=%d)", handler_id);
00109   for (node = handlers; node; node = node->next)
00110   {
00111     HandlerInfo *hi = node->data;
00112 
00113     if (hi->handler_id != handler_id)
00114       continue;
00115 
00116     /* Found it, take out of list */ 
00117     handlers = g_list_remove_link (handlers, node);
00118 
00119     LEAVE ("(handler_id=%d) handler=%p data=%p", handler_id, hi->handler, hi->user_data);
00120     /* safety */
00121     hi->handler = NULL;
00122 
00123     g_list_free_1 (node);
00124     g_free (hi);
00125 
00126     return;
00127   }
00128 
00129   PERR ("no such handler: %d", handler_id);
00130 }


Generated on Sun Sep 4 18:09:12 2005 for GnuCash by  doxygen 1.4.3-20050530