/// <summary> /// Serialize conditional formatting, classification rules /// </summary> /// <returns></returns> public string SerializeRules() { CondFormatRules rules = CondFormatRulesCtl.GetRules(); string serializedForm = rules.Serialize(); return(serializedForm); }
/// <summary> /// See if valid basic calculated field /// </summary> /// <returns></returns> private bool IsValidBasicCalcField() { for (int cfcci = 0; cfcci < CfColCtls.Count; cfcci++) { CalcFieldColumnControl cfcc = CfColCtls[cfcci]; bool validate = false; // decide if we should validate this field if (cfcci == 0) { validate = true; // always validate 1st field } else if (cfcci == 1 && !Lex.StartsWith(Operation.Text, "none")) { validate = true; // validate 2nd field if operator is not "none" } else if (cfcc.FieldSelectorControl.MetaColumn != null) { validate = true; } if (validate && !ValidateField(cfcc)) { return(false); } } if (!CondFormatRulesCtl.AreValid()) // are any rules valid { Tabs.SelectedTabPageIndex = 1; return(false); } CondFormatRules rules = CondFormatRulesCtl.GetRules(); if (CalcField.SourceColumnType == MetaColumnType.Structure && rules.Count == 0) { Tabs.SelectedTabPageIndex = 1; MessageBoxMx.Show( "Calculated fields on chemical structures must use classification\r\n" + "for the calculated field value", UmlautMobius.String); return(false); } if (rules.Count > 0) // must have at least one rule { foreach (CondFormatRule rule in rules) // must have name for each rule { if (String.IsNullOrEmpty(rule.Name)) { Tabs.SelectedTabPageIndex = 1; MessageBoxMx.Show("A name must be defined for each rule if using rule names the as calculated value", UmlautMobius.String); return(false); } } } return(true); }
/// <summary> /// Reset form for change in source column type if needed /// </summary> /// <param name="sourceColumnType"></param> public void SetSourceColumnType( int sourceColumnTypeInt) { MetaColumnType sourceColumnType = (MetaColumnType)sourceColumnTypeInt; SetupFormForColumnType(sourceColumnType); // setup form CalcField.SourceColumnType = sourceColumnType; CalcField.SetDerivedValues(); CondFormatRules rules = new CondFormatRules(); CondFormatRulesCtl.SetupControl(CalcField.PreclassificationlResultType, rules.ColoringStyle); rules.Add(new CondFormatRule()); // include initial rule CondFormatRulesCtl.SetupControl(CalcField.PreclassificationlResultType, rules); return; }
/// <summary> /// Get other values from calc field form checking for errors /// </summary> /// <returns></returns> bool GetCalcFieldForm() { List <MetaColumn> mcList; CalcField cf = CalcField; CalcFieldColumn cfc = null; if (cf.CalcType == CalcTypeEnum.Basic) // basic CF { cf.Operation = Operation.Text; cf.CfCols.Clear(); // update foreach (CalcFieldColumnControl cfcc in CfColCtls) { if (cfcc.FieldSelectorControl.MetaColumn == null) { continue; } cfc = new CalcFieldColumn(); cfc.MetaColumn = cfcc.FieldSelectorControl.MetaColumn; cfc.Function = cfcc.Function.Text; cfc.Constant = cfcc.Constant.Text; cf.CfCols.Add(cfc); } } else // advanced CF { cf.AdvancedExpr = ParseAdvancedExpr(AdvancedExpr.Text, out mcList); // Get preclassification result type string txt = ResultDataType.Text; if (Lex.IsDefined(txt)) { cf.PreclassificationlResultType = MetaColumn.ParseMetaColumnTypeString(txt); } else { cf.PreclassificationlResultType = MetaColumnType.Number; } // Get anchor table for joins cf.CfCols.Clear(); foreach (MetaColumn mc0 in mcList) { cfc = new CalcFieldColumn(); cfc.MetaColumn = mc0; cf.CfCols.Add(cfc); } cf.OuterJoinRoot = ""; txt = JoinAnchorComboBox.Text; if (Lex.Eq(txt, "(None)")) { txt = ""; } if (Lex.IsDefined(txt)) { for (int ci = 0; ci < cf.CfCols.Count; ci++) { cfc = cf.CfCols[ci]; if (Lex.Eq(txt, cfc.MetaColumn.MetaTable.Label)) { cf.OuterJoinRoot = cfc.MetaColumn.MetaTable.Name; break; } } } } cf.Description = Description.Text; CondFormatRules rules = CondFormatRulesCtl.GetRules(); if (rules.Count == 0) { cf.Classification = null; } else { cf.Classification = new CondFormat(); cf.Classification.Rules = rules; } try { cf.SetDerivedValuesWithException(); } // set derived values checking for errors catch (Exception ex) { MessageBoxMx.ShowError(ex.Message); return(false); } return(true); }
/// <summary> /// Set contents of calculated field form /// </summary> /// <param name="cf"></param> void SetupForm() { InSetup = true; CalcField cf = CalcField; CalcFieldColumn cfc; CalcFieldColumnControl cfcc; CondFormatRules rules; int ci, cci; MetaColumnType mcType = MetaColumnType.Number; // be sure source column type is set MetaColumn cfMc = null; Tabs.SelectedTabPageIndex = 0; // be sure first tab is selected SetupControlVisibility(); foreach (CalcFieldColumnControl cfc0 in CfColCtls) // clear field selector controls on form { cfc0.FieldSelectorControl.Query = QueriesControl.Instance.CurrentQuery; // cfc0.CfCol.Query = QueriesControl.Instance.CurrentQuery; cfc0.FieldSelectorControl.MetaColumn = null; } AdvancedExpr.Text = ""; FormatAdvancedExpr(cf.AdvancedExpr, out AdvancedEditorPseudoQuery); // setup advanced field menu if (cf.CalcType == CalcTypeEnum.Basic) { cfMc = cf.MetaColumn1; BasicOptionButton.Checked = true; if (cf.Operation != "") { Operation.Text = cf.Operation; } else { Operation.Text = "/ (Division)"; } cf.SetDerivedValues(); } else // advanced type { AdvancedOptionButton.Checked = true; AdvancedExpr.Text = FormatAdvancedExpr(cf.AdvancedExpr, out AdvancedEditorPseudoQuery); List <MetaColumn> mcList = cf.GetInputMetaColumnList(); if (mcList.Count > 0) { cfMc = mcList[0]; } // Setup result type if (cf.PreclassificationlResultType == MetaColumnType.Unknown) { cf.PreclassificationlResultType = MetaColumnType.Number; } string txt = cf.PreclassificationlResultType.ToString(); if (Lex.Eq(txt, "String")) { txt = "Text"; // fixup } ResultDataType.Text = txt; // Setup outer join table JoinAnchorComboBox.Text = ""; if (Lex.IsDefined(cf.OuterJoinRoot)) { for (ci = 0; ci < cf.CfCols.Count; ci++) { cfc = cf.CfCols[ci]; if (cfc.MetaColumn == null) { continue; } MetaTable mt = cfc.MetaColumn.MetaTable; if (Lex.Eq(cf.OuterJoinRoot, cfc.MetaColumn.MetaTable.Name)) { JoinAnchorComboBox.Text = cfc.MetaColumn.MetaTable.Label; break; } } } } // Setup column controls for source column type if (cfMc != null) { cf.SourceColumnType = cfMc.DataType; } else { cf.SourceColumnType = MetaColumnType.Number; } SetupFormForColumnType(cf.SourceColumnType); // Add column controls MetaColumn references and function info cci = -1; // col control index for (ci = 0; ci < cf.CfCols.Count; ci++) { cfc = cf.CfCols[ci]; cci++; if (cci >= CfColCtls.Count) { throw new Exception("Number of calculated field columns exceeds limit of: " + CfColCtls.Count); } cfcc = CfColCtls[cci]; cfcc.FieldSelectorControl.MetaColumn = cfc.MetaColumn; if (Lex.IsDefined(cfc.Function)) { cfcc.Function.Text = cfc.Function; } else { cfcc.Function.Text = "None"; } cfcc.Constant.Text = cfc.Constant; cfcc.Constant.Enabled = Lex.Contains(cfc.Function, "constant"); } CalcField.ColumnLabel = FieldColumnName.Text; Description.Text = cf.Description; if (cf.Operation != "") { Operation.SelectedItem = cf.Operation; } if (cf.Classification != null) { rules = cf.Classification.Rules; } else { rules = new CondFormatRules(); } if (rules.Count == 0) { rules.Add(new CondFormatRule()); // include initial rule } CondFormatRulesCtl.SetupControl(CalcField.PreclassificationlResultType, rules.ColoringStyle); CondFormatRulesCtl.SetupControl(CalcField.PreclassificationlResultType, rules); InSetup = false; return; }