Changeset 2103 for trunk/lomefc2/me_trigrules.lua
- Timestamp:
- 07/03/10 22:24:43 (19 months ago)
- File:
-
- 1 edited
-
trunk/lomefc2/me_trigrules.lua (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/lomefc2/me_trigrules.lua
r2051 r2103 783 783 function window.newTriggerBtn:onChange() 784 784 local trigger = createTrigger(triggersDescr[1]) 785 786 785 for k,v in base.pairs(triggersDescr[1]) do base.print(k,v) end 787 base.table.insert(triggers, trigger) 788 local item = U.addListBoxItem(window.triggersList, 789 predicates.getRuleAsText(trigger, cdata), nil, trigger) 786 base.table.insert( triggers, trigger) 787 local item = U.addListBoxItem( window.triggersList 788 , predicates.getRuleAsText( trigger, cdata) 789 , nil 790 , trigger 791 ) 790 792 window.triggersList:selectItem(item) 791 793 window.triggersList:onChange(item) … … 804 806 for _tmp, action in base.ipairs(trigger.actions) do 805 807 for _tmp, field in base.ipairs(action.predicate.fields) do 806 if (field.type == 'file_edit') and (action.file ~= '') then807 local num = 0808 for _tmp, trigger2 in base.ipairs(triggers)do809 for _tmp, action2 in base.ipairs(trigger2.actions) do810 if ((action2.file == action.file) and (action2 ~= action)) then811 num = num + 1812 end813 end814 end815 816 if (num == 0) then817 --base.print("delFile")818 mission.removeFileFromMission(action.file);819 end820 action.file = '';821 end;808 if (field.type == 'file_edit') and (action.file ~= '') then 809 local num = 0 810 for _tmp, trigger2 in base.ipairs(triggers)do 811 for _tmp, action2 in base.ipairs(trigger2.actions) do 812 if ((action2.file == action.file) and (action2 ~= action)) then 813 num = num + 1 814 end 815 end 816 end 817 818 if (num == 0) then 819 --base.print("delFile") 820 mission.removeFileFromMission(action.file); 821 end 822 action.file = ''; 823 end; 822 824 end 823 825 end … … 854 856 855 857 -- called on new trigger selected 856 function window.triggersList:onChange(item) 858 function window.triggersList:onChange(item) 859 -- base.print("triggersList:onChange") 857 860 if item then 858 861 showTriggersWidgets(window, true, noTriggerChoice) … … 874 877 -- called on new goal selected 875 878 function window.goalsList:onChange(item) 876 --base.print('goalsList:onChange')879 -- base.print('goalsList:onChange') 877 880 if item then 878 881 showGoalsWidgets(window, true) … … 888 891 -- add new goal on new button pressed 889 892 function window.newGoalBtn:onChange() 890 --base.print('newGoalBtn:onChange()')893 -- base.print('newGoalBtn:onChange()') 891 894 local item = window.triggersList:getSelectedItem() 892 895 if item then … … 903 906 -- delete current action 904 907 function window.delGoalBtn:onChange() 905 --base.print('delGoalBtn:onChange()')908 -- base.print('delGoalBtn:onChange()') 906 909 local triggerItem = window.triggersList:getSelectedItem() 907 910 local item = window.goalsList:getSelectedItem() … … 943 946 -- if action type was changed 944 947 function window.goalTypeCombo:onChange(item) 945 --base.print('goalTypeCombo:onChange')948 -- base.print('goalTypeCombo:onChange') 946 949 self.selectedItem = item.itemId 947 950 if window.goalsList:getSelectedItem() then … … 956 959 -- if trigger type was changed 957 960 function window.triggerTypeCombo:onChange(item) 958 --base.print('window.triggerTypeCombo:onChange(item)')961 -- base.print('triggerTypeCombo:onChange(item)') 959 962 self.selectedItem = item.itemId 960 963 if window.triggersList:getSelectedItem() then … … 968 971 -- called on new rule selected 969 972 function window.rulesList:onChange(item) 970 --base.print('window.rulesList:onChange(item)')973 -- base.print('rulesList:onChange(item)') 971 974 if item then 972 975 showRulesWidgets(window, true) … … 980 983 end 981 984 982 985 -- Create new rule 983 986 function window.newRuleBtn:onChange() 984 --base.print('window.newRuleBtn:onChange())') 985 local goalItem = window.triggersList:getSelectedItem() 986 if goalItem then 987 -- base.print('newRuleBtn:onChange())') 988 op_and = { name = "op_and", 989 fields = {}, 990 decoration = true 991 } 992 local currentGoal = window.triggersList:getSelectedItem() 993 local goal = currentGoal.itemId 994 if currentGoal then 995 -- Compute insertion index and 996 -- test if insertion of a new rule is allowed: First or after a "(" or after a logicalOpertor (or & and) 997 local idx = 1 998 local item = window.rulesList:getSelectedItem() 999 if item then 1000 rule = item.itemId 1001 idx = predicates.getIndex( goal.rules, rule) + 1 1002 end 1003 987 1004 local rule = predicates.createRule(rulesDescr[1]) 988 base.table.insert(goalItem.itemId.rules, rule) 989 local item = U.addListBoxItem(window.rulesList, 990 predicates.getRuleAsText(rule, cdata), nil, rule) 1005 base.table.insert(currentGoal.itemId.rules, idx, rule) 1006 local item = U.addListBoxItem( window.rulesList 1007 , predicates.getRuleAsText( rule, cdata) 1008 , nil 1009 , rule 1010 , idx 1011 ) 991 1012 window.rulesList:selectItem(item) 992 1013 window.rulesList:onChange(item) 993 end994 end995 996 function window.newRuleOrBtn:onChange()997 base.print('window.newRuleOrBtn:onChange())')998 local goalItem = window.triggersList:getSelectedItem()999 if goalItem then1000 local rule = predicates.createRule(rulesDescr[1])1001 rule.operator = "or"1002 base.table.insert(goalItem.itemId.rules, rule)1003 local item = U.addListBoxItem(window.rulesList,1004 predicates.getRuleAsText(rule, cdata), nil, rule)1005 1006 local theme = item:getTheme()1007 theme.normalTheme.text.color = Color.red1008 theme.selectedTheme.text.color = Color.red1009 item:setTheme(theme)1010 1011 window.rulesList:selectItem(item)1012 window.rulesList:onChange(item)1013 end1014 end1015 1016 -- if predicate type was changed1017 function window.ruleTypeCombo:onChange(item)1018 --base.print('ruleTypeCombo:onChange(item)')1019 self.selectedItem = item.itemId1020 if window.rulesList:getSelectedItem() then1021 local rule = window.rulesList:getSelectedItem().itemId1022 rule.predicate = item.itemId1023 predicates.setRuleDefaults(rule, item.itemId)1024 createRuleArgumentsWidgets(window, rule, window.rulesList, cdata)1025 predicates.updateListRow(window.rulesList, predicates.ruleTextFunc(cdata))1026 1014 end 1027 1015 end … … 1029 1017 -- delete rule 1030 1018 function window.delRuleBtn:onChange() 1019 -- base.print('delRuleBtn:onChange())') 1031 1020 local currentGoal = window.triggersList:getSelectedItem() 1032 1021 local item = window.rulesList:getSelectedItem() … … 1045 1034 end 1046 1035 end 1047 1036 1037 -- To insert a "(" 1038 function window.startGroupBtn:onChange() 1039 -- base.print("Start group .....") 1040 window.insertDecorationInRule( rulesDescr[#rulesDescr-3]) 1041 end 1042 1043 -- To insert a ")" 1044 function window.stopGroupBtn:onChange() 1045 -- base.print("Stop group .....") 1046 window.insertDecorationInRule( rulesDescr[#rulesDescr-2]) 1047 end 1048 1049 -- To insert an "and" 1050 function window.andRuleBtn:onChange() 1051 -- base.print('window.andRuleBtn:onChange())') 1052 window.insertDecorationInRule( rulesDescr[#rulesDescr-1]) 1053 end 1054 1055 -- To insert an "or" 1056 function window.orRuleBtn:onChange() 1057 -- base.print('window.orRuleBtn:onChange())') 1058 window.insertDecorationInRule( rulesDescr[#rulesDescr]) 1059 end 1060 1061 -- To add a decoration a the good place 1062 function window.insertDecorationInRule( decoRuleDesc) 1063 local currentGoal = window.triggersList:getSelectedItem() 1064 local goal = currentGoal.itemId 1065 if currentGoal then 1066 -- Compute insertion index and 1067 -- test if insertion of a new rule is allowed: First or after a "(" or after a logicalOpertor (or & and) 1068 local idx = 1 1069 local item = window.rulesList:getSelectedItem() 1070 if item then 1071 rule = item.itemId 1072 idx = predicates.getIndex( goal.rules, rule) + 1 1073 end 1074 1075 local rule = predicates.createRule( decoRuleDesc) 1076 base.table.insert(currentGoal.itemId.rules, idx, rule) 1077 local item = U.addListBoxItem( window.rulesList 1078 , predicates.getRuleAsText( rule, cdata) 1079 , nil 1080 , rule 1081 , idx 1082 ) 1083 1084 -- Set color for this decoration 1085 local theme = item:getTheme() 1086 local color 1087 if rule.predicate.decoration == "(" or rule.predicate.decoration == ")" then 1088 color = Color.red 1089 else 1090 color = Color.blue 1091 end 1092 theme.normalTheme.text.color = color 1093 theme.selectedTheme.text.color = color 1094 item:setTheme(theme) 1095 1096 window.rulesList:selectItem(item) 1097 window.rulesList:onChange(item) 1098 end 1099 end 1100 1101 -- if predicate type was changed 1102 function window.ruleTypeCombo:onChange(item) 1103 --base.print('ruleTypeCombo:onChange(item)') 1104 self.selectedItem = item.itemId 1105 local selectedItem = window.rulesList:getSelectedItem() 1106 if selectedItem then 1107 local rule = selectedItem.itemId 1108 rule.predicate = item.itemId 1109 predicates.setRuleDefaults(rule, item.itemId) 1110 1111 -- Set item color 1112 local theme = selectedItem:getTheme() 1113 if item.itemId.decoration then 1114 decoration = item.itemId.decoration 1115 local color 1116 if decoration == "(" or decoration == ")" then 1117 color = Color.red 1118 else 1119 color = Color.blue 1120 end 1121 theme.normalTheme.text.color = color 1122 theme.selectedTheme.text.color = color 1123 else 1124 theme.normalTheme.text.color = Color.black 1125 theme.selectedTheme.text.color = Color.black 1126 end 1127 selectedItem:setTheme(theme) 1128 1129 1130 createRuleArgumentsWidgets(window, rule, window.rulesList, cdata) 1131 predicates.updateListRow(window.rulesList, predicates.ruleTextFunc(cdata)) 1132 end 1133 end 1134 1048 1135 predicates.rulesToList(window.triggersList, triggers, cdata) 1049 1136 predicates.fillPredicatesCombo(window.triggerTypeCombo, triggersDescr, cdata) … … 1058 1145 -- convert goals to serializable description 1059 1146 function saveTriggers(triggers) 1060 if not triggers then 1061 return { } 1062 end 1063 local result = { } 1064 U.copyTable(result, triggers) 1065 for _tmp, goal in base.ipairs(result) do 1066 goal.predicate = goal.predicate.name 1067 for _tmp, rule in base.ipairs(goal.rules) do 1068 rule.predicate = rule.predicate.name 1069 end 1070 for _tmp, goal in base.ipairs(goal.actions) do 1071 goal.predicate = goal.predicate.name 1072 end 1073 end 1074 return result 1147 -- base.print( "saveTriggers()") 1148 if not triggers then 1149 return { } 1150 end 1151 local result = { } 1152 U.copyTable(result, triggers) 1153 for _tmp, goal in base.ipairs(result) do 1154 goal.predicate = goal.predicate.name 1155 for _tmp, rule in base.ipairs(goal.rules) do 1156 rule.predicate = rule.predicate.name 1157 end 1158 for _tmp, goal in base.ipairs(goal.actions) do 1159 goal.predicate = goal.predicate.name 1160 end 1161 end 1162 return result 1075 1163 end 1076 1164 … … 1078 1166 -- convert triggers from serializable desctiption to internal representation 1079 1167 function loadTriggers(triggers) 1168 -- base.print( "loadTriggers()") 1080 1169 if not triggers then 1081 1170 return { } … … 1091 1180 for _tmp, rule in base.ipairs(goal.rules) do 1092 1181 rule.predicate = predicatesByName[rule.predicate] 1093 if rule.operator == "or" then1094 base.print('OR detected on LOAD')1095 end1096 1182 end 1097 1183 for _tmp, rule in base.ipairs(goal.actions) do … … 1106 1192 -- All functions returned in array as strings 1107 1193 function generateTriggerFunc(triggers, startup_) -- Dmut: obsolete, to be removed in A-10 1194 base.print( "generateTriggerFunc()") 1108 1195 if not triggers then 1109 1196 return { } … … 1117 1204 1118 1205 local str = "if " 1119 local first = true1120 1121 1206 if save then 1122 1207 for _tmp, rule in base.ipairs(trigger.rules) do 1123 if not first then 1124 if rule.operator == "or" then 1125 base.print('OR detected') 1126 str = str .. 'or ' 1127 else 1128 str = str .. 'and ' 1129 end 1208 if rule.predicate.decoration then 1209 str = str .. rule.predicate.decoration 1130 1210 else 1131 first = false1211 str = str .. predicates.actionToString(rule) 1132 1212 end 1133 str = str .. predicates.actionToString(rule) .. ' '1134 end 1135 1213 1214 end 1215 1136 1216 str = str .. 'then ' 1137 1217 … … 1162 1242 1163 1243 function generateTriggerConditions(triggers) 1244 -- base.print( "generateTriggerConditions()") 1164 1245 if not triggers then 1165 1246 return { } … … 1173 1254 local first = true 1174 1255 1175 for _tmp, rule in base.ipairs(trigger.rules) do 1176 if not first then 1177 if rule.operator == "or" then 1178 base.print('OR detected') 1179 str = str .. 'or ' 1180 else 1181 str = str .. 'and ' 1182 end 1183 else 1184 first = false 1185 end 1186 str = str .. predicates.actionToString(rule) .. ' ' 1187 end 1188 str = str .. ')' 1189 result[idx] = str 1190 idx = idx + 1 1256 for _tmp, rule in base.ipairs(trigger.rules) do 1257 if rule.predicate.decoration then 1258 str = str .. rule.predicate.decoration 1259 else 1260 str = str .. predicates.actionToString(rule) 1261 end 1262 end 1263 1264 str = str .. ')' 1265 result[idx] = str 1266 idx = idx + 1 1191 1267 end 1192 1268 end … … 1195 1271 1196 1272 function generateTriggerActions(triggers, startup_) 1273 -- base.print( "generateTriggerActions()") 1197 1274 if not triggers then 1198 1275 return { } … … 1203 1280 if trigger.rules and (0 < #trigger.rules) then 1204 1281 1205 local str = ""1282 local str = "" 1206 1283 1207 1284 if trigger.predicate.name == "triggerFront" then … … 1229 1306 1230 1307 function generateTriggerFunc2(triggers, startup_) -- Dmut: new format, conditions and actions separated 1308 -- base.print( "generateTriggerFunc2()") 1231 1309 if not triggers then 1232 1310 return { } … … 1253 1331 -- remove invalid rules and actions from triggers 1254 1332 function fixTriggers(triggers) 1333 -- base.print( "fixTriggers()") 1255 1334 if triggers then 1256 1335 for _tmp, trigger in base.ipairs(triggers) do … … 1258 1337 predicates.removeInvalidRules(trigger.actions) 1259 1338 end 1260 end -- if1261 end 1262 1339 end 1340 end 1341
Note: See TracChangeset
for help on using the changeset viewer.
