The Meta-Environment API
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__ */