Commit 836da3a0 authored by Claes Sjofors's avatar Claes Sjofors

Ge dynamic DigCommand with in window object bugfix

parent 20a278ee
...@@ -113,6 +113,7 @@ static int graph_trace_disconnect_bc( grow_tObject object); ...@@ -113,6 +113,7 @@ static int graph_trace_disconnect_bc( grow_tObject object);
static int graph_trace_scan_bc( grow_tObject object, void *p); static int graph_trace_scan_bc( grow_tObject object, void *p);
static int graph_trace_connect_bc( grow_tObject object, static int graph_trace_connect_bc( grow_tObject object,
glow_sTraceData *trace_data); glow_sTraceData *trace_data);
static int graph_trace_ctrl_bc( int type, void *data);
static int graph_trace_grow_cb( GlowCtx *ctx, glow_tEvent event); static int graph_trace_grow_cb( GlowCtx *ctx, glow_tEvent event);
static int graph_get_subgraph_info_cb( void *g, char *name, static int graph_get_subgraph_info_cb( void *g, char *name,
attr_sItem **itemlist, int *itemlist_cnt); attr_sItem **itemlist, int *itemlist_cnt);
...@@ -3430,7 +3431,8 @@ int Graph::init_trace() ...@@ -3430,7 +3431,8 @@ int Graph::init_trace()
init_object_graph(0); init_object_graph(0);
sts = grow_TraceInit( grow->ctx, graph_trace_connect_bc, sts = grow_TraceInit( grow->ctx, graph_trace_connect_bc,
graph_trace_disconnect_bc, graph_trace_scan_bc); graph_trace_disconnect_bc, graph_trace_scan_bc,
graph_trace_ctrl_bc);
// Look for object graph // Look for object graph
if ( strcmp( object_name, "") != 0) if ( strcmp( object_name, "") != 0)
...@@ -3581,6 +3583,29 @@ static int graph_trace_disconnect_bc( grow_tObject object) ...@@ -3581,6 +3583,29 @@ static int graph_trace_disconnect_bc( grow_tObject object)
} }
static int graph_trace_ctrl_bc( int type, void *data)
{
switch ( type) {
case glow_eTraceCtrl_CtxPop: {
Graph *graph;
grow_GetCtxUserData( (GrowCtx *)data, (void **) &graph);
graph->grow->pop((GrowCtx *)data);
break;
}
case glow_eTraceCtrl_CtxPush: {
Graph *graph;
grow_GetCtxUserData( (GrowCtx *)data, (void **) &graph);
graph->grow->push();
break;
}
default: ;
}
return 1;
}
static int graph_trace_scan_bc( grow_tObject object, void *p) static int graph_trace_scan_bc( grow_tObject object, void *p)
{ {
GeDyn *dyn; GeDyn *dyn;
...@@ -5205,7 +5230,7 @@ void Graph::swap( int mode) ...@@ -5205,7 +5230,7 @@ void Graph::swap( int mode)
// Swap done // Swap done
if ( !trace_started) { if ( !trace_started) {
grow_TraceInit( grow->ctx, graph_trace_connect_bc, grow_TraceInit( grow->ctx, graph_trace_connect_bc,
graph_trace_disconnect_bc, graph_trace_scan_bc); graph_trace_disconnect_bc, graph_trace_scan_bc, graph_trace_ctrl_bc);
trace_started = 1; trace_started = 1;
trace_scan( this); trace_scan( this);
} }
......
...@@ -409,6 +409,7 @@ typedef enum { ...@@ -409,6 +409,7 @@ typedef enum {
glow_eHotIndication_LightColor //!< Lighter color for hot objects glow_eHotIndication_LightColor //!< Lighter color for hot objects
} glow_eHotIndication; } glow_eHotIndication;
//! Color index for a color //! Color index for a color
/*! The drawtype is index in an array that contains the gc for colors in the color palette. /*! The drawtype is index in an array that contains the gc for colors in the color palette.
The 300 first are the colors in the color palette, the seven last are used for erase, and texts. */ The 300 first are the colors in the color palette, the seven last are used for erase, and texts. */
...@@ -1008,6 +1009,11 @@ typedef enum { ...@@ -1008,6 +1009,11 @@ typedef enum {
glow_eTraceType_User glow_eTraceType_User
} glow_eTraceType; } glow_eTraceType;
typedef enum {
glow_eTraceCtrl_CtxPop,
glow_eTraceCtrl_CtxPush
} glow_eTraceCtrl;
//! Type of item in a pulldown menu //! Type of item in a pulldown menu
typedef enum { typedef enum {
glow_eMenuItem_Button, //!< Item is a button glow_eMenuItem_Button, //!< Item is a button
......
...@@ -1701,14 +1701,16 @@ void GlowCtx::remove_trace_objects() ...@@ -1701,14 +1701,16 @@ void GlowCtx::remove_trace_objects()
} }
int GlowCtx::trace_init( int (*connect_func)( void *, GlowTraceData *), int GlowCtx::trace_init( int (*connect_func)( void *, GlowTraceData *),
int (*disconnect_func)( void *), int (*disconnect_func)( void *),
int (*scan_func)( void *, void *)) int (*scan_func)( void *, void *),
int (*ctrl_func)( int, void *))
{ {
int sts; int sts;
trace_connect_func = connect_func; trace_connect_func = connect_func;
trace_disconnect_func = disconnect_func; trace_disconnect_func = disconnect_func;
trace_scan_func = scan_func; trace_scan_func = scan_func;
trace_ctrl_func = ctrl_func;
sts = a.trace_init(); sts = a.trace_init();
......
...@@ -691,6 +691,7 @@ class GlowCtx { ...@@ -691,6 +691,7 @@ class GlowCtx {
int (*trace_connect_func)( void *, GlowTraceData *); //!< Backcall function for trace connect of an object. int (*trace_connect_func)( void *, GlowTraceData *); //!< Backcall function for trace connect of an object.
int (*trace_disconnect_func)( void *); //!< Backcall function for trace disconnect of an object. int (*trace_disconnect_func)( void *); //!< Backcall function for trace disconnect of an object.
int (*trace_scan_func)( void *, void *); //!< Backcall function for trace scan of an object. int (*trace_scan_func)( void *, void *); //!< Backcall function for trace scan of an object.
int (*trace_ctrl_func)( int, void *); //!< Backcall function for trace control.
int trace_started; //!< Trace is started. int trace_started; //!< Trace is started.
void remove_trace_objects(); void remove_trace_objects();
...@@ -702,8 +703,9 @@ class GlowCtx { ...@@ -702,8 +703,9 @@ class GlowCtx {
\param scan_func Backcall function for trace scan of an object. \param scan_func Backcall function for trace scan of an object.
*/ */
int trace_init( int (*connect_func)( void *, GlowTraceData *), int trace_init( int (*connect_func)( void *, GlowTraceData *),
int (*disconnect_func)( void *), int (*disconnect_func)( void *),
int (*scan_func)( void *, void *)); int (*scan_func)( void *, void *),
int (*ctrl_func)( int, void *));
//! Trace close. //! Trace close.
/*! Calls the disconnect backcall function for all connected objects. */ /*! Calls the disconnect backcall function for all connected objects. */
......
...@@ -625,12 +625,13 @@ void grow_SetTraceData( grow_tObject object, void *trace_data) ...@@ -625,12 +625,13 @@ void grow_SetTraceData( grow_tObject object, void *trace_data)
} }
extern "C" int grow_TraceInit( grow_tCtx ctx, extern "C" int grow_TraceInit( grow_tCtx ctx,
int (*trace_connect_func)( grow_tObject, GlowTraceData *), int (*trace_connect_func)( grow_tObject, GlowTraceData *),
int (*trace_disconnect_func)( grow_tObject), int (*trace_disconnect_func)( grow_tObject),
int (*trace_scan_func)( grow_tObject, void *)) int (*trace_scan_func)( grow_tObject, void *),
int (*trace_ctrl_func)( int, void *))
{ {
return ctx->trace_init( trace_connect_func, trace_disconnect_func, return ctx->trace_init( trace_connect_func, trace_disconnect_func,
trace_scan_func); trace_scan_func, trace_ctrl_func);
} }
void grow_TraceClose( grow_tCtx ctx) void grow_TraceClose( grow_tCtx ctx)
......
...@@ -658,9 +658,10 @@ extern "C" { ...@@ -658,9 +658,10 @@ extern "C" {
\param trace_scan_func Backcall function for trace scan of on object. \param trace_scan_func Backcall function for trace scan of on object.
*/ */
int grow_TraceInit( grow_tCtx ctx, int grow_TraceInit( grow_tCtx ctx,
int (*trace_connect_func)( grow_tObject, GlowTraceData *), int (*trace_connect_func)( grow_tObject, GlowTraceData *),
int (*trace_disconnect_func)( grow_tObject), int (*trace_disconnect_func)( grow_tObject),
int (*trace_scan_func)( grow_tObject, void *)); int (*trace_scan_func)( grow_tObject, void *),
int (*trace_ctrl_func)( int, void *));
//! Close trace. //! Close trace.
/*! \param ctx Grow context. */ /*! \param ctx Grow context. */
......
...@@ -399,8 +399,14 @@ void GrowWindow::trace_scan() ...@@ -399,8 +399,14 @@ void GrowWindow::trace_scan()
// window_ctx->draw_buffer_only = ctx->draw_buffer_only; // window_ctx->draw_buffer_only = ctx->draw_buffer_only;
ctx->gdraw->set_clip_rectangle( &ctx->mw, ll_x, ll_y, ur_x, ur_y); ctx->gdraw->set_clip_rectangle( &ctx->mw, ll_x, ll_y, ur_x, ur_y);
if ( ctx->trace_ctrl_func)
(ctx->trace_ctrl_func) ( glow_eTraceCtrl_CtxPop, window_ctx);
window_ctx->trace_scan(); window_ctx->trace_scan();
if ( ctx->trace_ctrl_func)
(ctx->trace_ctrl_func) ( glow_eTraceCtrl_CtxPush, window_ctx);
ctx->gdraw->reset_clip_rectangle( &ctx->mw); ctx->gdraw->reset_clip_rectangle( &ctx->mw);
} }
} }
...@@ -437,7 +443,8 @@ int GrowWindow::trace_init() ...@@ -437,7 +443,8 @@ int GrowWindow::trace_init()
window_ctx->event_move_node = ctx->event_move_node; window_ctx->event_move_node = ctx->event_move_node;
window_ctx->trace_init( ctx->trace_connect_func, window_ctx->trace_init( ctx->trace_connect_func,
ctx->trace_disconnect_func, ctx->trace_disconnect_func,
ctx->trace_scan_func); ctx->trace_scan_func,
ctx->trace_ctrl_func);
} }
return sts; return sts;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment