Ignore:
Timestamp:
07/03/10 22:24:43 (19 months ago)
Author:
tolteque
Message:

o LOMEFC2:

  • New Rules management

TODO: indentation and consistency check

tests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lomefc2/me_trigrules.lua

    r2051 r2103  
    783783    function window.newTriggerBtn:onChange() 
    784784        local trigger = createTrigger(triggersDescr[1]) 
    785  
    786785        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                                     ) 
    790792        window.triggersList:selectItem(item) 
    791793        window.triggersList:onChange(item) 
     
    804806            for _tmp, action in base.ipairs(trigger.actions) do 
    805807              for _tmp, field in base.ipairs(action.predicate.fields) do 
    806                                         if (field.type == 'file_edit') and (action.file ~= '') then 
    807                                                 local num = 0 
    808                                                 for _tmp, trigger2 in base.ipairs(triggers)do 
    809                                                         for _tmp, action2 in base.ipairs(trigger2.actions) do 
    810                                                                 if ((action2.file == action.file) and (action2 ~= action)) then 
    811                                                                         num = num + 1 
    812                                                                 end 
    813                                                         end 
    814                                                 end 
    815  
    816                                                 if (num == 0) then 
    817                                                         --base.print("delFile") 
    818                                                         mission.removeFileFromMission(action.file);                                                                                                              
    819                                                 end 
    820                                                 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; 
    822824              end 
    823825            end 
     
    854856 
    855857    -- called on new trigger selected  
    856     function window.triggersList:onChange(item)          
     858    function window.triggersList:onChange(item)  
     859--        base.print("triggersList:onChange") 
    857860        if item then 
    858861            showTriggersWidgets(window, true, noTriggerChoice) 
     
    874877    -- called on new goal selected  
    875878    function window.goalsList:onChange(item) 
    876                 --base.print('goalsList:onChange') 
     879--        base.print('goalsList:onChange') 
    877880        if item then 
    878881            showGoalsWidgets(window, true) 
     
    888891    -- add new goal on new button pressed 
    889892    function window.newGoalBtn:onChange() 
    890                 --base.print('newGoalBtn:onChange()') 
     893--        base.print('newGoalBtn:onChange()') 
    891894        local item = window.triggersList:getSelectedItem() 
    892895        if item then 
     
    903906    -- delete current action 
    904907    function window.delGoalBtn:onChange() 
    905                 --base.print('delGoalBtn:onChange()') 
     908--        base.print('delGoalBtn:onChange()') 
    906909        local triggerItem = window.triggersList:getSelectedItem() 
    907910        local item = window.goalsList:getSelectedItem() 
     
    943946    -- if action type was changed  
    944947    function window.goalTypeCombo:onChange(item) 
    945                 --base.print('goalTypeCombo:onChange') 
     948--        base.print('goalTypeCombo:onChange') 
    946949        self.selectedItem = item.itemId 
    947950        if window.goalsList:getSelectedItem() then 
     
    956959    -- if trigger type was changed  
    957960    function window.triggerTypeCombo:onChange(item) 
    958                 --base.print('window.triggerTypeCombo:onChange(item)') 
     961--        base.print('triggerTypeCombo:onChange(item)') 
    959962        self.selectedItem = item.itemId 
    960963        if window.triggersList:getSelectedItem() then 
     
    968971    -- called on new rule selected  
    969972    function window.rulesList:onChange(item) 
    970                 --base.print('window.rulesList:onChange(item)') 
     973--        base.print('rulesList:onChange(item)') 
    971974        if item then 
    972975            showRulesWidgets(window, true) 
     
    980983    end 
    981984    
    982      
     985    -- Create new rule 
    983986    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 
    9871004            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                                         ) 
    9911012            window.rulesList:selectItem(item) 
    9921013            window.rulesList:onChange(item) 
    993         end 
    994     end 
    995      
    996     function window.newRuleOrBtn:onChange() 
    997         base.print('window.newRuleOrBtn:onChange())') 
    998         local goalItem = window.triggersList:getSelectedItem() 
    999         if goalItem then 
    1000             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.red 
    1008             theme.selectedTheme.text.color = Color.red 
    1009             item:setTheme(theme)   
    1010  
    1011             window.rulesList:selectItem(item) 
    1012             window.rulesList:onChange(item) 
    1013         end 
    1014     end 
    1015  
    1016     -- if predicate type was changed  
    1017     function window.ruleTypeCombo:onChange(item) 
    1018                 --base.print('ruleTypeCombo:onChange(item)') 
    1019         self.selectedItem = item.itemId 
    1020         if window.rulesList:getSelectedItem() then 
    1021             local rule = window.rulesList:getSelectedItem().itemId 
    1022             rule.predicate = item.itemId 
    1023             predicates.setRuleDefaults(rule, item.itemId) 
    1024             createRuleArgumentsWidgets(window, rule, window.rulesList, cdata) 
    1025             predicates.updateListRow(window.rulesList, predicates.ruleTextFunc(cdata)) 
    10261014        end 
    10271015    end 
     
    10291017    -- delete rule 
    10301018    function window.delRuleBtn:onChange() 
     1019--        base.print('delRuleBtn:onChange())') 
    10311020        local currentGoal = window.triggersList:getSelectedItem() 
    10321021        local item = window.rulesList:getSelectedItem() 
     
    10451034        end 
    10461035    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     
    10481135    predicates.rulesToList(window.triggersList, triggers, cdata) 
    10491136    predicates.fillPredicatesCombo(window.triggerTypeCombo, triggersDescr, cdata) 
     
    10581145-- convert goals to serializable description 
    10591146function 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 
    10751163end 
    10761164 
     
    10781166-- convert triggers from serializable desctiption to internal representation 
    10791167function loadTriggers(triggers) 
     1168--    base.print( "loadTriggers()") 
    10801169    if not triggers then 
    10811170        return { } 
     
    10911180        for _tmp, rule in base.ipairs(goal.rules) do 
    10921181            rule.predicate = predicatesByName[rule.predicate] 
    1093             if rule.operator == "or" then 
    1094               base.print('OR detected on LOAD') 
    1095             end 
    10961182        end 
    10971183        for _tmp, rule in base.ipairs(goal.actions) do 
     
    11061192-- All functions returned in array as strings 
    11071193function generateTriggerFunc(triggers, startup_) -- Dmut: obsolete, to be removed in A-10 
     1194  base.print( "generateTriggerFunc()") 
    11081195  if not triggers then 
    11091196      return { } 
     
    11171204 
    11181205      local str = "if " 
    1119       local first = true 
    1120  
    11211206      if save then 
    11221207        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 
    11301210          else 
    1131             first = false 
     1211            str = str .. predicates.actionToString(rule) 
    11321212          end 
    1133           str = str .. predicates.actionToString(rule) .. ' ' 
    1134         end 
    1135  
     1213           
     1214        end 
     1215       
    11361216        str = str .. 'then ' 
    11371217 
     
    11621242 
    11631243function generateTriggerConditions(triggers)  
     1244--  base.print( "generateTriggerConditions()") 
    11641245  if not triggers then 
    11651246      return { } 
     
    11731254      local first = true 
    11741255 
    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 
    11911267    end  
    11921268  end 
     
    11951271 
    11961272function generateTriggerActions(triggers, startup_)  
     1273--  base.print( "generateTriggerActions()") 
    11971274  if not triggers then 
    11981275      return { } 
     
    12031280    if trigger.rules and (0 < #trigger.rules) then 
    12041281 
    1205           local str = "" 
     1282        local str = "" 
    12061283 
    12071284        if trigger.predicate.name == "triggerFront" then 
     
    12291306 
    12301307function generateTriggerFunc2(triggers, startup_) -- Dmut: new format, conditions and actions separated 
     1308--  base.print( "generateTriggerFunc2()") 
    12311309  if not triggers then 
    12321310      return { } 
     
    12531331-- remove invalid rules and actions from triggers 
    12541332function fixTriggers(triggers) 
     1333--  base.print( "fixTriggers()") 
    12551334  if triggers then 
    12561335    for _tmp, trigger in base.ipairs(triggers) do 
     
    12581337        predicates.removeInvalidRules(trigger.actions) 
    12591338    end 
    1260   end -- if 
    1261 end 
    1262  
     1339  end 
     1340end 
     1341 
Note: See TracChangeset for help on using the changeset viewer.