private static FilterExpressionData fromXmlGroup(XElement xml) { eAndOrJoin andor = xml.AttributeAsString("Operator").ToEnum<eAndOrJoin>(eAndOrJoin.And); FltGroupExprData flt = new FltGroupExprData(andor); flt.Negate = xml.AttributeAsBool("Negate", false); foreach (var sub in xml.Elements()) { flt.FilterExpressions.Add(FromXml(sub)); } return flt; }
public static FilterExpressionData GroupEqual(eAndOrJoin join, params string[] fieldValues) { var flt = new FltGroupExprData(join); string field = ""; foreach (var fv in fieldValues) { if (field == "") { field = fv; } else { flt.FilterExpressions.Add(Filter.Equal(field, fv)); field = ""; } } return flt; }
public static FilterExpressionData ClearGroupFilter(FltGroupExprData groupFilter) { if (groupFilter.FilterExpressions.Count == 1) return groupFilter.FilterExpressions[0]; for(int i = 0;i<groupFilter.FilterExpressions.Count;i++) { var gflt = groupFilter.FilterExpressions[i] as FltGroupExprData; groupFilter.FilterExpressions[i] = ClearGroupFilter(gflt); } return groupFilter; }
private void addGroupSubFilter(FilterGroupEditor fge, bool fromRemove) { fge.Parent = this; FltGroupExprData fgeExpr = null; if (this.Filter is FltGroupExprData) fgeExpr = this.Filter as FltGroupExprData; else { if (JoinType.HasValue) { fgeExpr = new FltGroupExprData(JoinType.Value); } else { fgeExpr = new FltGroupExprData(); } if (Parent != null && Parent.Filter != null) { var parentGroup = Parent.Filter as FltGroupExprData; parentGroup.FilterExpressions.Remove(this.Filter); parentGroup.FilterExpressions.Add(fgeExpr); } this.Filter = fgeExpr; } fgeExpr.FilterExpressions.Add(fge.Filter); if (this.SubGroups.Count > 0 || this.AtomFilter != null ) { bAdd.Visibility = Visibility.Visible; bAnd.Visibility = Visibility.Collapsed; bOr.Visibility = Visibility.Collapsed; } else { SetBackground(fge.MyBackgroundIndex + FilterEditor.BackgroundIndexStep); bAdd.Visibility = Visibility.Collapsed; bAnd.Visibility = Visibility.Visible; bOr.Visibility = Visibility.Visible; } if (JoinType.HasValue) { if (JoinType.Value == eAndOrJoin.And) { miChangeToOr.Visibility = System.Windows.Visibility.Visible; miChangeToAnd.Visibility = System.Windows.Visibility.Collapsed; } else { miChangeToOr.Visibility = System.Windows.Visibility.Collapsed; miChangeToAnd.Visibility = System.Windows.Visibility.Visible; } } else { miChangeToOr.Visibility = System.Windows.Visibility.Collapsed; miChangeToAnd.Visibility = System.Windows.Visibility.Collapsed; } if (!fromRemove && ( AddedFirstElement != null && this.Parent == null)) { this.AddedFirstElement(this, null); } if (AtomFilter!=null) //replacing existing atomfilter with groupfilter containing the atomfilter { var newFge = new FilterGroupEditor(_collection, !_vertical, this.IsReadOnly, EditorContext, AtomFilter.Filter); fgeExpr.FilterExpressions.Add(AtomFilter.Filter); newFge.Parent = this; ccAtom.Content = null; newFge.SetAtomFilter(AtomFilter); AtomFilter = null; this.Negate(false); spSubGroups.Children.Add(newFge); SubGroups.Add(newFge); } if (SubGroups.Count>0 && JoinType.HasValue) { var andOrLabel = new Label() { Content = (JoinType.Value == eAndOrJoin.And) ? "And": "Or", VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center }; spSubGroups.Children.Add(andOrLabel); fge.JoinLabelOnParent = andOrLabel; fgeExpr.AndOr = JoinType.Value; } SubGroups.Add(fge); spSubGroups.Children.Add(fge); if (fge.AtomFilter != null) fge.AtomFilter.FocusControl(); }
/// <summary> /// cloning the instance of this and all sub filters /// </summary> /// <returns></returns> public override FilterExpressionData Clone() { FltGroupExprData thisFg = this as FltGroupExprData; FltGroupExprData fg = new FltGroupExprData(thisFg.AndOr); fg.AndOr = thisFg.AndOr; fg.Negate = this.Negate; foreach (FilterExpressionData f in thisFg.FilterExpressions) { if(f!=null) fg.FilterExpressions.Add(f.Clone()); } return fg; }