The Meta-Environment API

sdf-listeners.tb

Go to the documentation of this file.
00001 #ifndef __SDF_LISTENERS__
00002 #define __SDF_LISTENERS__
00003 
00004 #include <meta-namespace.h>
00005 #include <module-manager.tb>
00006 #include <sdf-namespace.h>
00007 #include <graph-namespace.h>
00008 #include <extract-sdf.idef>
00009 
00010 #define BG_ERROR_COLOR rgb(224,64,60)
00011 #define BG_CHILD_ERROR_COLOR rgb(255,128,114)
00012 #define BG_CORRECT_COLOR rgb(255,255,221)
00013 #define BG_GRAYED_OUT rgb (211,211,211)
00014 
00015 #define MODULE_OPENED set(SDF_NAMESPACE, "status", opened)
00016 #define MODULE_ERROR set(SDF_NAMESPACE, "status", error)
00017 #define MODULE_UNAVAILABLE set(SDF_NAMESPACE, "status", unavailable)
00018 #define MODULE_IDLE or(MODULE_OPENED,or(MODULE_UNAVAILABLE,MODULE_ERROR))
00019 #define ALL_MODULES_IDLE and(MODULE_IDLE, all(MODULE_IDLE))
00020 
00021 process InitializeInheritedStatus is
00022   /* the first one must not have any <term> holes because of a ToolBus bug */
00023   
00024   /* Once we are opened and our kids are opened, then we become complete */
00025   MM-RegisterAttributeUpdateRule(SDF_NAMESPACE, "status", and(set(SDF_NAMESPACE, "status", opened),all(set(SDF_NAMESPACE, "status", opened))), complete)
00026 
00027   /* When we are not in error and one of our kids has an error, we become child-error */
00028   . MM-RegisterAttributeUpdateRule(SDF_NAMESPACE, "status", and(not(set(SDF_NAMESPACE, "status", error)), one(set(SDF_NAMESPACE, "status", error))), child-error)
00029 
00030   . MM-RegisterAttributeUpdateRule(META_NAMESPACE, "idle", ALL_MODULES_IDLE, yes)
00031 
00032    /*Error -> Background color  */
00033   /*. MM-RegisterAttributeUpdateRule(GRAPH_NAMESPACE, "bgcolor", set(SDF_NAMESPACE, "status", error), fill-color(BG_ERROR_COLOR))*/
00034 
00035   /* Child-error -> Background color */ 
00036   /*. MM-RegisterAttributeUpdateRule(GRAPH_NAMESPACE, "bgcolor", and(not(set(SDF_NAMESPACE, "status", error)), one(set(SDF_NAMESPACE, "status", error))), fill-color(BG_CHILD_ERROR_COLOR))*/
00037 
00038 toolbus(InitializeInheritedStatus)
00039 
00040 process SDFModuleLabelSetter is
00041 let
00042   Event: attribute-changed-event,
00043   Extension: str,
00044   File: file,
00045   ModuleId: module-id,
00046   Modulename: str,
00047   Name: str,
00048   Prefix: str
00049 in
00050   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"name",<term>,<term>)
00051   .
00052   (
00053     rec-note(mm-attribute-changed(Event?))
00054     . ACE-GetModuleId(Event, ModuleId?)
00055     . ACE-GetNewValue(Event, Modulename?)
00056     . SplitFilename(Modulename, Name?, Prefix?, Extension?)
00057     . MM-SetModuleGraphAttribute(ModuleId, "label", label(Name))
00058     . snd-msg(io-make-file(Modulename))
00059     . rec-msg(io-file(Modulename, File?))
00060     . MM-SetModuleGraphAttribute(ModuleId, "file", file(File))
00061   )
00062   *
00063   delta
00064 endlet
00065 
00066 toolbus(SDFModuleLabelSetter)
00067 
00068 process SDFModuleTooltipSetter is
00069 let
00070   Event: attribute-changed-event,
00071   ModuleId: module-id,
00072   Modulename: str
00073 in
00074   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"name",<term>,<term>)
00075   .
00076   (
00077     rec-note(mm-attribute-changed(Event?))
00078     . ACE-GetModuleId(Event, ModuleId?)
00079     . ACE-GetNewValue(Event, Modulename?)
00080     . MM-SetModuleGraphAttribute(ModuleId, "tooltip", tooltip(Modulename))
00081   )
00082   *
00083   delta
00084 endlet
00085 
00086 toolbus(SDFModuleTooltipSetter)
00087 
00088 process SDFModuleColorChanger is
00089 let
00090   Event: attribute-changed-event,
00091   ModuleId: module-id,
00092   NewPath: term,
00093   Tree: term,
00094   Value: term
00095 in
00096   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,error)
00097   . MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,child-error)  
00098   . MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",error,<term>)  
00099   . MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",child-error,<term>)  
00100   .
00101   (
00102     rec-note(mm-attribute-changed(Event?))
00103     . ACE-GetModuleId(Event, ModuleId?)
00104     . ACE-GetNewValue(Event, Value?)
00105     .
00106     if equal(Value, error) then
00107       MM-SetModuleGraphAttribute(ModuleId, "bgcolor", fill-color(BG_ERROR_COLOR))
00108     else
00109       if equal(Value,child-error) then
00110         MM-SetModuleGraphAttribute(ModuleId, "bgcolor", fill-color(BG_CHILD_ERROR_COLOR))
00111       else
00112         MM-SetModuleGraphAttribute(ModuleId, "bgcolor", fill-color(BG_CORRECT_COLOR))
00113       fi
00114     fi
00115   )
00116   *
00117   delta
00118 endlet
00119 
00120 toolbus(SDFModuleColorChanger)
00121 
00122 process SDFModuleIconChanger is
00123 let
00124   Event: attribute-changed-event,
00125   ModuleId: module-id,
00126   Value: term
00127 in
00128   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,error)
00129   . MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",error,<term>)
00130   .
00131   (
00132     rec-note(mm-attribute-changed(Event?))
00133     . ACE-GetModuleId(Event, ModuleId?)
00134     . ACE-GetNewValue(Event, Value?)
00135     .
00136     if equal(Value, error) then
00137       snd-msg(nav-mark-module-error(ModuleId))
00138     else
00139       snd-msg(nav-mark-module-normal(ModuleId))
00140     fi
00141   )
00142   *
00143   delta
00144 endlet
00145 
00146 toolbus(SDFModuleIconChanger)
00147 
00148 process SDFModuleVisualizeEditable is
00149 let
00150   Event: attribute-changed-event,
00151   ModuleId: module-id,
00152   NewPath: term,
00153   Tree: term,
00154   Value: term
00155 in
00156   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"editable",<term>,true)  
00157   . MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"editable",<term>,false)  
00158   .
00159   (
00160     rec-note(mm-attribute-changed(Event?))
00161     . ACE-GetModuleId(Event, ModuleId?)
00162     . ACE-GetNewValue(Event, Value?)
00163     .
00164     if equal(Value, quote(false)) then
00165       MM-SetModuleGraphAttribute(ModuleId, "bgcolor", fill-color(BG_GRAYED_OUT))
00166     else
00167       MM-SetModuleGraphAttribute(ModuleId, "bgcolor", fill-color(BG_CORRECT_COLOR))
00168     fi
00169   )
00170   *
00171   delta
00172 endlet
00173 
00174 toolbus(SDFModuleVisualizeEditable)
00175 
00176 process SDFModuleParser is
00177 let
00178   Event: attribute-changed-event,
00179   ModuleId: module-id,
00180   Tree: term
00181 in
00182   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,available)
00183   .
00184   (
00185     rec-note(mm-attribute-changed(Event?))
00186     . ACE-GetModuleId(Event, ModuleId?)
00187     . GetSDFParsetree(ModuleId, Tree?)
00188     .
00189     if equal(Tree, UNDEFINED) then
00190        MM-SetAttribute(ModuleId, SDF_NAMESPACE, "status", error)
00191     else
00192        MM-SetAttribute(ModuleId, SDF_NAMESPACE, "status", parsed)
00193     fi
00194     . Tree := UNDEFINED
00195   )
00196   *
00197   delta
00198 endlet
00199 
00200 toolbus(SDFModuleParser)
00201 
00202 process SDFModuleIdentifier is
00203 let
00204   Event: attribute-changed-event,
00205   ModuleId: module-id,
00206   Tree: term,
00207   Result: term
00208 in
00209   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,parsed)
00210   .
00211   (
00212     rec-note(mm-attribute-changed(Event?))
00213     . ACE-GetModuleId(Event, ModuleId?)
00214     . SDFIdentifyModule(ModuleId, Result?)
00215     . MM-SetAttribute(ModuleId, SDF_NAMESPACE, "status", Result)
00216   )
00217   *
00218   delta
00219 endlet
00220 
00221 toolbus(SDFModuleIdentifier)
00222 
00223 process SDFSetModuleImports is
00224 let
00225   Event: attribute-changed-event,
00226   Import: str,
00227   ImportId: module-id,
00228   Imports: list,
00229   ModuleId: module-id,
00230   Tree: term
00231 in
00232   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,identified)
00233   .
00234   (
00235     rec-note(mm-attribute-changed(Event?))
00236     . ACE-GetModuleId(Event, ModuleId?)
00237     . MM-SetAttribute(ModuleId, SDF_NAMESPACE, "status", opening)
00238     . GetSDFParsetree(ModuleId, Tree?)
00239     . MM-GetModuleDependencies(ModuleId, Imports?)
00240     . 
00241     if not-equal(Imports, []) then
00242       MM-DeleteModuleDependencies(ModuleId)
00243     else
00244       tau
00245     fi
00246     . GetImportedModulenames(Tree, Imports?)
00247     .
00248     if not-equal(Imports, []) then 
00249       if not-equal(Imports, []) then 
00250         Import := first(Imports)
00251         . Imports := next(Imports)
00252         . OpenModule(Import, ImportId?)
00253         . MM-AddModuleDependency(ModuleId, ImportId)
00254       fi
00255       *
00256       if equal(Imports, []) then
00257         MM-SetAttribute(ModuleId, SDF_NAMESPACE, "status", opened)
00258       fi
00259     else
00260       MM-SetAttribute(ModuleId, SDF_NAMESPACE, "status", opened) 
00261     fi
00262   )
00263   *
00264   delta
00265 endlet
00266 
00267 toolbus(SDFSetModuleImports)
00268 
00269 process SDFRemoveDependencies is
00270 let
00271   Event: attribute-changed-event,
00272   ModuleId: module-id,
00273   Value: term
00274 in
00275   MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,unknown)
00276   .
00277   (
00278     rec-note(mm-attribute-changed(Event?))
00279     . ACE-GetOldValue(Event, Value?)
00280     .
00281     if not-equal(Value, undefined) then
00282       ACE-GetModuleId(Event, ModuleId?)
00283       . MM-DeleteModuleDependencies(ModuleId)
00284     else
00285       tau
00286     fi
00287   )
00288   *
00289   delta
00290 endlet
00291 
00292 toolbus(SDFRemoveDependencies)
00293 
00294 #endif /* __SDF_LISTENERS__ */

Generated on Fri Sep 12 13:09:47 2008 for sdf-meta by  doxygen 1.4.6