private void LandingSiteCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { LandingSite editedLandingSite = new LandingSite(); switch (e.Action) { case NotifyCollectionChangedAction.Add: { int newIndex = e.NewStartingIndex; editedLandingSite = LandingSiteCollection[newIndex]; LandingSites.Add(editedLandingSite); } break; case NotifyCollectionChangedAction.Remove: { List <LandingSite> tempListOfRemovedItems = e.OldItems.OfType <LandingSite>().ToList(); editedLandingSite = tempListOfRemovedItems[0]; LandingSites.Delete(editedLandingSite.LandingSiteID); } break; case NotifyCollectionChangedAction.Replace: { List <LandingSite> tempListOfLandingSites = e.NewItems.OfType <LandingSite>().ToList(); editedLandingSite = tempListOfLandingSites[0]; LandingSites.Update(editedLandingSite); // As the IDs are unique, only one row will be effected hence first index only } break; } EntityChangedEventArgs args = new EntityChangedEventArgs(editedLandingSite.GetType().Name, editedLandingSite); EntityChanged?.Invoke(this, args); }
public void AddNonTerminalToLandingSites(string nonTerminal) { if (!LandingSites.Contains(nonTerminal)) { LandingSites.Add(nonTerminal); } }
public void RemoveNonTerminalFromLandingSites(string nonTerminal) { if (!LandingSites.Contains(nonTerminal)) { return; } LandingSites.Remove(nonTerminal); }
public int NextRecordNumber() { int rv; if (LandingSiteCollection.Count == 0) { rv = 1; } else { rv = LandingSites.MaxRecordNumber() + 1;; } return(rv); }
public void GenerateInitialRulesFromDerivedRules() { if (!LandingSites.Any() || !Moveables.Any()) { return; } var initialRules = ruleNumberDictionary.Values.ToList(); var derivedRules = initialRules.Where(x => !x.IsInitialRule()).ToList(); var toRemove = derivedRules.ToList(); foreach (var item in toRemove) { DeleteRule(item); } }
private void LandingSiteCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { _editSuccess = false; switch (e.Action) { case NotifyCollectionChangedAction.Add: { int newIndex = e.NewStartingIndex; LandingSite newLandingSite = LandingSiteCollection[newIndex]; if (LandingSites.Add(newLandingSite)) { CurrentEntity = newLandingSite; _editSuccess = true; } } break; case NotifyCollectionChangedAction.Remove: { List <LandingSite> tempListOfRemovedItems = e.OldItems.OfType <LandingSite>().ToList(); if (LandingSites.Delete(tempListOfRemovedItems[0].ID)) { _editSuccess = true; CurrentEntity = null; } } break; case NotifyCollectionChangedAction.Replace: { List <LandingSite> tempList = e.NewItems.OfType <LandingSite>().ToList(); if (LandingSites.Update(tempList[0])) { _editSuccess = true; CurrentEntity = tempList[0]; } } break; } }
public void GenerateDerivedRulesFromSchema() { if (!LandingSites.Any() || !Moveables.Any()) { return; } var toAdd = new List <Rule>(); foreach (var moveable in Moveables) { var pop1 = new Rule(1, moveable, new[] { Epsilon }, 0, 0); pop1.Name.Stack = new NonTerminalStack(moveable); toAdd.Add(pop1); foreach (var landingSiteNonTerminal in LandingSites) { var push = new Rule(1, landingSiteNonTerminal, new[] { moveable, landingSiteNonTerminal }, 1, 1); push.Name.Stack = new NonTerminalStack("."); push.Production[1].Stack = new NonTerminalStack("."); push.Production[1].Stack = push.Production[1].Stack.Push(moveable); toAdd.Add(push); } var pop2 = new Rule(1, "IP", new[] { moveable, "VP" }, 1, 1); pop2.Name.Stack = new NonTerminalStack("."); pop2.Name.Stack = pop2.Name.Stack.Push(moveable); pop2.Production[0].Stack = new NonTerminalStack(moveable); pop2.Production[1].Stack = new NonTerminalStack("."); toAdd.Add(pop2); } foreach (var item in toAdd) { AddRule(item); } }