Commit 532e423f authored by claes's avatar claes

Bit type added to DigLowColor, DigWarning and DigError

parent 76f36274
/* /*
* Proview $Id: ge_dyn.cpp,v 1.64 2008-06-09 14:33:12 claes Exp $ * Proview $Id: ge_dyn.cpp,v 1.65 2008-08-25 11:17:44 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -1738,6 +1738,20 @@ int GeDigLowColor::connect( grow_tObject object, glow_sTraceData *trace_data) ...@@ -1738,6 +1738,20 @@ int GeDigLowColor::connect( grow_tObject object, glow_sTraceData *trace_data)
if ( strcmp( parsed_name,"") == 0) if ( strcmp( parsed_name,"") == 0)
return 1; return 1;
a_typeid = attr_type;
if ( attr_type == graph_eType_Bit) {
// Get bit number from parsed name
char *s;
int bitnum;
if ( (s = strchr( parsed_name, '['))) {
sscanf( s+1, "%d", &bitnum);
*s = 0;
if ( bitnum >= 0 && bitnum < 32)
bitmask = 1 << bitnum;
}
}
switch ( db) { switch ( db) {
case graph_eDatabase_Local: case graph_eDatabase_Local:
p = (pwr_tBoolean *) dyn->graph->localdb_ref_or_create( parsed_name, attr_type); p = (pwr_tBoolean *) dyn->graph->localdb_ref_or_create( parsed_name, attr_type);
...@@ -1767,34 +1781,75 @@ int GeDigLowColor::scan( grow_tObject object) ...@@ -1767,34 +1781,75 @@ int GeDigLowColor::scan( grow_tObject object)
if ( !p || dyn->ignore_color) if ( !p || dyn->ignore_color)
return 1; return 1;
if ( !first_scan) { switch ( a_typeid) {
if ( old_value == *p && !dyn->reset_color) case pwr_eType_Boolean:
// No change since last time case pwr_eType_Int32:
return 1; case pwr_eType_UInt32: {
} if ( !first_scan) {
else if ( old_value == *p && !dyn->reset_color)
first_scan = false; // No change since last time
return 1;
}
else
first_scan = false;
if ( dyn->total_dyn_type & ge_mDynType_Tone) { if ( dyn->total_dyn_type & ge_mDynType_Tone) {
if ( (!inverted && !*p) || (inverted && *p)) { if ( (!inverted && !*p) || (inverted && *p)) {
if ( color >= (glow_eDrawType) glow_eDrawTone__) if ( color >= (glow_eDrawType) glow_eDrawTone__)
grow_SetObjectFillColor( object, color);
else
grow_SetObjectColorTone( object, (glow_eDrawTone) color);
}
else {
if ( color >= (glow_eDrawType) glow_eDrawTone__)
grow_ResetObjectFillColor( object);
grow_ResetObjectColorTone( object);
}
}
else {
if ( (!inverted && !*p) || (inverted && *p))
grow_SetObjectFillColor( object, color); grow_SetObjectFillColor( object, color);
else else
grow_SetObjectColorTone( object, (glow_eDrawTone) color); grow_ResetObjectFillColor( object);
}
old_value = *p;
break;
}
case graph_eType_Bit: {
pwr_tBoolean val = ((*p & bitmask) != 0);
if ( !first_scan) {
if ( old_value == val && !dyn->reset_color)
// No change since last time
return 1;
}
else
first_scan = false;
if ( dyn->total_dyn_type & ge_mDynType_Tone) {
if ( (!inverted && !val) || (inverted && val)) {
if ( color >= (glow_eDrawType) glow_eDrawTone__)
grow_SetObjectFillColor( object, color);
else
grow_SetObjectColorTone( object, (glow_eDrawTone) color);
dyn->ignore_color = true;
}
else {
if ( color >= (glow_eDrawType) glow_eDrawTone__)
grow_ResetObjectFillColor( object);
grow_ResetObjectColorTone( object);
}
} }
else { else {
if ( color >= (glow_eDrawType) glow_eDrawTone__) if ( (!inverted && !val) || (inverted && val))
grow_SetObjectFillColor( object, color);
else
grow_ResetObjectFillColor( object); grow_ResetObjectFillColor( object);
grow_ResetObjectColorTone( object);
} }
old_value = val;
break;
} }
else {
if ( (!inverted && !*p) || (inverted && *p))
grow_SetObjectFillColor( object, color);
else
grow_ResetObjectFillColor( object);
} }
old_value = *p;
return 1; return 1;
} }
...@@ -2220,6 +2275,20 @@ int GeDigWarning::connect( grow_tObject object, glow_sTraceData *trace_data) ...@@ -2220,6 +2275,20 @@ int GeDigWarning::connect( grow_tObject object, glow_sTraceData *trace_data)
if ( strcmp( parsed_name,"") == 0) if ( strcmp( parsed_name,"") == 0)
return 1; return 1;
a_typeid = attr_type;
if ( attr_type == graph_eType_Bit) {
// Get bit number from parsed name
char *s;
int bitnum;
if ( (s = strchr( parsed_name, '['))) {
sscanf( s+1, "%d", &bitnum);
*s = 0;
if ( bitnum >= 0 && bitnum < 32)
bitmask = 1 << bitnum;
}
}
sts = dyn->graph->ref_object_info( dyn->cycle, parsed_name, (void **)&p, &subid, size); sts = dyn->graph->ref_object_info( dyn->cycle, parsed_name, (void **)&p, &subid, size);
if ( EVEN(sts)) return sts; if ( EVEN(sts)) return sts;
...@@ -2241,38 +2310,83 @@ int GeDigWarning::scan( grow_tObject object) ...@@ -2241,38 +2310,83 @@ int GeDigWarning::scan( grow_tObject object)
if ( !p || dyn->ignore_color) if ( !p || dyn->ignore_color)
return 1; return 1;
if ( !first_scan) { switch ( a_typeid) {
if ( old_value == *p && !dyn->reset_color) { case pwr_eType_Boolean:
// No change since last time case pwr_eType_Int32:
if ( (!inverted && *p) || (inverted && !*p)) case pwr_eType_UInt32: {
dyn->ignore_color = true; if ( !first_scan) {
return 1; if ( old_value == *p && !dyn->reset_color) {
// No change since last time
if ( (!inverted && *p) || (inverted && !*p))
dyn->ignore_color = true;
return 1;
}
} }
} else
else first_scan = false;
first_scan = false;
if ( dyn->total_dyn_type & ge_mDynType_Tone) {
if ( dyn->total_dyn_type & ge_mDynType_Tone) { if ( (!inverted && *p) || (inverted && !*p)) {
if ( (!inverted && *p) || (inverted && !*p)) { grow_SetObjectColorTone( object, glow_eDrawTone_Yellow);
grow_SetObjectColorTone( object, glow_eDrawTone_Yellow); dyn->ignore_color = true;
dyn->ignore_color = true; }
else {
grow_ResetObjectColorTone( object);
dyn->reset_color = true;
}
} }
else { else {
grow_ResetObjectColorTone( object); if ( (!inverted && *p) || (inverted && !*p)) {
dyn->reset_color = true; grow_SetObjectFillColor( object, glow_eDrawType_ColorYellow);
dyn->ignore_color = true;
}
else {
grow_ResetObjectFillColor( object);
dyn->reset_color = true;
}
} }
old_value = *p;
break;
} }
else { case graph_eType_Bit: {
if ( (!inverted && *p) || (inverted && !*p)) { pwr_tBoolean val = ((*p & bitmask) != 0);
grow_SetObjectFillColor( object, glow_eDrawType_ColorYellow);
dyn->ignore_color = true; if ( !first_scan) {
if ( old_value == val && !dyn->reset_color) {
// No change since last time
if ( (!inverted && val) || (inverted && !val))
dyn->ignore_color = true;
return 1;
}
}
else
first_scan = false;
if ( dyn->total_dyn_type & ge_mDynType_Tone) {
if ( (!inverted && val) || (inverted && !val)) {
grow_SetObjectColorTone( object, glow_eDrawTone_Yellow);
dyn->ignore_color = true;
}
else {
grow_ResetObjectColorTone( object);
dyn->reset_color = true;
}
} }
else { else {
grow_ResetObjectFillColor( object); if ( (!inverted && val) || (inverted && !val)) {
dyn->reset_color = true; grow_SetObjectFillColor( object, glow_eDrawType_ColorYellow);
dyn->ignore_color = true;
}
else {
grow_ResetObjectFillColor( object);
dyn->reset_color = true;
}
} }
old_value = val;
break;
} }
old_value = *p; }
return 1; return 1;
} }
...@@ -2360,6 +2474,20 @@ int GeDigError::connect( grow_tObject object, glow_sTraceData *trace_data) ...@@ -2360,6 +2474,20 @@ int GeDigError::connect( grow_tObject object, glow_sTraceData *trace_data)
if ( strcmp( parsed_name,"") == 0) if ( strcmp( parsed_name,"") == 0)
return 1; return 1;
a_typeid = attr_type;
if ( attr_type == graph_eType_Bit) {
// Get bit number from parsed name
char *s;
int bitnum;
if ( (s = strchr( parsed_name, '['))) {
sscanf( s+1, "%d", &bitnum);
*s = 0;
if ( bitnum >= 0 && bitnum < 32)
bitmask = 1 << bitnum;
}
}
sts = dyn->graph->ref_object_info( dyn->cycle, parsed_name, (void **)&p, &subid, size); sts = dyn->graph->ref_object_info( dyn->cycle, parsed_name, (void **)&p, &subid, size);
if ( EVEN(sts)) return sts; if ( EVEN(sts)) return sts;
...@@ -2381,38 +2509,83 @@ int GeDigError::scan( grow_tObject object) ...@@ -2381,38 +2509,83 @@ int GeDigError::scan( grow_tObject object)
if ( !p || dyn->ignore_color) if ( !p || dyn->ignore_color)
return 1; return 1;
if ( !first_scan) { switch ( a_typeid) {
if ( old_value == *p && !dyn->reset_color) { case pwr_eType_Boolean:
// No change since last time case pwr_eType_Int32:
if ( (!inverted && *p) || (inverted && !*p)) case pwr_eType_UInt32: {
dyn->ignore_color = true; if ( !first_scan) {
return 1; if ( old_value == *p && !dyn->reset_color) {
// No change since last time
if ( (!inverted && *p) || (inverted && !*p))
dyn->ignore_color = true;
return 1;
}
} }
} else
else first_scan = false;
first_scan = false;
if ( dyn->total_dyn_type & ge_mDynType_Tone) { if ( dyn->total_dyn_type & ge_mDynType_Tone) {
if ( (!inverted && *p) || (inverted && !*p)) { if ( (!inverted && *p) || (inverted && !*p)) {
grow_SetObjectColorTone( object, glow_eDrawTone_Red); grow_SetObjectColorTone( object, glow_eDrawTone_Red);
dyn->ignore_color = true; dyn->ignore_color = true;
}
else {
grow_ResetObjectColorTone( object);
dyn->reset_color = true;
}
} }
else { else {
grow_ResetObjectColorTone( object); if ( (!inverted && *p) || (inverted && !*p)) {
dyn->reset_color = true; grow_SetObjectFillColor( object, glow_eDrawType_ColorRed);
dyn->ignore_color = true;
}
else {
grow_ResetObjectFillColor( object);
dyn->reset_color = true;
}
} }
old_value = *p;
break;
} }
else { case graph_eType_Bit: {
if ( (!inverted && *p) || (inverted && !*p)) { pwr_tBoolean val = ((*p & bitmask) != 0);
grow_SetObjectFillColor( object, glow_eDrawType_ColorRed);
dyn->ignore_color = true; if ( !first_scan) {
if ( old_value == val && !dyn->reset_color) {
// No change since last time
if ( (!inverted && val) || (inverted && !val))
dyn->ignore_color = true;
return 1;
}
}
else
first_scan = false;
if ( dyn->total_dyn_type & ge_mDynType_Tone) {
if ( (!inverted && val) || (inverted && !val)) {
grow_SetObjectColorTone( object, glow_eDrawTone_Red);
dyn->ignore_color = true;
}
else {
grow_ResetObjectColorTone( object);
dyn->reset_color = true;
}
} }
else { else {
grow_ResetObjectFillColor( object); if ( (!inverted && val) || (inverted && !val)) {
dyn->reset_color = true; grow_SetObjectFillColor( object, glow_eDrawType_ColorRed);
dyn->ignore_color = true;
}
else {
grow_ResetObjectFillColor( object);
dyn->reset_color = true;
}
} }
old_value = val;
break;
} }
old_value = *p; }
return 1; return 1;
} }
......
/* /*
* Proview $Id: ge_dyn.h,v 1.36 2008-04-14 07:02:30 claes Exp $ * Proview $Id: ge_dyn.h,v 1.37 2008-08-25 11:17:48 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -870,11 +870,12 @@ class GeDigLowColor : public GeDynElem { ...@@ -870,11 +870,12 @@ class GeDigLowColor : public GeDynElem {
int inverted; int inverted;
bool first_scan; bool first_scan;
pwr_tBoolean old_value; pwr_tBoolean old_value;
int a_typeid;
unsigned int bitmask;
GeDigLowColor( GeDyn *e_dyn) : GeDigLowColor( GeDyn *e_dyn) :
GeDynElem(e_dyn, ge_mDynType_DigLowColor, (ge_mActionType) 0, ge_eDynPrio_DigLowColor), GeDynElem(e_dyn, ge_mDynType_DigLowColor, (ge_mActionType) 0, ge_eDynPrio_DigLowColor),
color(glow_eDrawType_Inherit) color(glow_eDrawType_Inherit), bitmask(0)
{ strcpy( attribute, "");} { strcpy( attribute, "");}
GeDigLowColor( const GeDigLowColor& x) : GeDigLowColor( const GeDigLowColor& x) :
GeDynElem(x.dyn,x.dyn_type,x.action_type,x.prio), color(x.color) GeDynElem(x.dyn,x.dyn_type,x.action_type,x.prio), color(x.color)
...@@ -939,9 +940,11 @@ class GeDigWarning : public GeDynElem { ...@@ -939,9 +940,11 @@ class GeDigWarning : public GeDynElem {
int inverted; int inverted;
bool first_scan; bool first_scan;
pwr_tBoolean old_value; pwr_tBoolean old_value;
int a_typeid;
unsigned int bitmask;
GeDigWarning( GeDyn *e_dyn) : GeDigWarning( GeDyn *e_dyn) :
GeDynElem(e_dyn, ge_mDynType_DigWarning, (ge_mActionType) 0, ge_eDynPrio_DigWarning) GeDynElem(e_dyn, ge_mDynType_DigWarning, (ge_mActionType) 0, ge_eDynPrio_DigWarning), bitmask(0)
{ strcpy( attribute, "");} { strcpy( attribute, "");}
GeDigWarning( const GeDigWarning& x) : GeDigWarning( const GeDigWarning& x) :
GeDynElem(x.dyn,x.dyn_type,x.action_type,x.prio) GeDynElem(x.dyn,x.dyn_type,x.action_type,x.prio)
...@@ -970,9 +973,11 @@ class GeDigError : public GeDynElem { ...@@ -970,9 +973,11 @@ class GeDigError : public GeDynElem {
int inverted; int inverted;
bool first_scan; bool first_scan;
pwr_tBoolean old_value; pwr_tBoolean old_value;
int a_typeid;
unsigned int bitmask;
GeDigError( GeDyn *e_dyn) : GeDigError( GeDyn *e_dyn) :
GeDynElem(e_dyn, ge_mDynType_DigError, (ge_mActionType) 0, ge_eDynPrio_DigError) GeDynElem(e_dyn, ge_mDynType_DigError, (ge_mActionType) 0, ge_eDynPrio_DigError), bitmask(0)
{ strcpy( attribute, "");} { strcpy( attribute, "");}
GeDigError( const GeDigError& x) : GeDigError( const GeDigError& x) :
GeDynElem(x.dyn,x.dyn_type,x.action_type,x.prio) GeDynElem(x.dyn,x.dyn_type,x.action_type,x.prio)
......
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