Ejemplo n.º 1
0
        /// <summary>
        ///  Edit conditional formatting
        /// </summary>
        /// <param name="cf"></param>
        /// <param name="title"></param>
        /// <returns></returns>

        public static CondFormat Edit(
            CondFormat cf,
            bool editForUserObjectStorage = false,
            string title = "Conditional Formatting Rules")
        {
            InitialSerializedForm = cf.Serialize();             // save for later compare
            //if (Instance == null) // always create new instance because the any changed height of the grid editor controls is maintained otherwise
            Instance = new CondFormatEditor();

            Instance.Text = title;
            Instance.ShowEditorWhenActivated  = true;
            Instance.EditForUserObjectStorage = editForUserObjectStorage;
            Instance.CondFormatToForm(cf);

            DialogResult dr = Instance.ShowDialog(SessionManager.ActiveForm);

            if (dr == DialogResult.Cancel)
            {
                return(null);
            }

            cf = Instance.FormToCondFormat();

            cf.Rules.InitializeInternalMatchValues(cf.ColumnType);

            return(cf);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Edit conditional formatting
        /// </summary>
        /// <param name="qc"></param>
        /// <returns></returns>

        public static DialogResult Edit(
            QueryColumn qc)
        {
            MetaColumnType mcType = qc.MetaColumn.DataType;

            if (!CondFormat.CondFormattingAllowed(mcType))
            {
                ErrorMessageBox.Show(
                    "Conditional formatting isn't supported for the " + qc.ActiveLabel + " field.");
                return(DialogResult.Cancel);
            }

            CondFormat cf = qc.ActiveCondFormat;             // get current formatting

            if (cf == null)
            {
                cf = CreateAndInitializeCf(mcType);
            }
            QueryTable qt    = qc.QueryTable;
            Query      query = qt.Query;

            CondFormat cf2 = Edit(cf);

            if (cf2 == null)
            {
                return(DialogResult.Cancel);
            }

            if (cf2.Rules.Count == 0)             // all rules deleted
            {
                qc.CondFormat = null;
                return(DialogResult.OK);
            }

            qc.CondFormat = cf2;

            if (query != null && !String.IsNullOrEmpty(cf2.Name))             // update any other formatting that shares this name to use this object
            {
                foreach (QueryTable qt2 in query.Tables)
                {
                    foreach (QueryColumn qc2 in qt2.QueryColumns)
                    {
                        if (qc2.CondFormat != null && Lex.Eq(qc2.CondFormat.Name, cf2.Name))
                        {
                            qc2.CondFormat = cf2;
                        }
                    }
                }
            }

            return(DialogResult.OK);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Serialize from form into cf object & then into string
        /// </summary>
        /// <returns></returns>

        public CondFormat FormToCondFormat()
        {
            CondFormat cf = new CondFormat();

            cf.ColumnType = ColumnType;
            //cf.ShowInHeaders = ShowInHeaders;
            cf.Name       = CfName.Text;
            cf.ColumnType = MetaColumn.ParseMetaColumnTypeString(ColumnDataType.Text);
            cf.Option1    = Option1.Checked;
            cf.Option2    = Option2.Checked;
            cf.Rules      = Rules.GetRules();
            return(cf);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Edit a new or existing calculated field
        /// </summary>
        /// <param name="uo">Existing UserObject with content or null to create a new CF</param>
        /// <returns></returns>

        public static CondFormat EditUserObject(
            UserObject uo = null)
        {
            if (uo == null)             // prompt if not supplied
            {
                UserObject defaultUo = new UserObject(UserObjectType.CondFormat);
                defaultUo.ParentFolder = CondFormat.PredefinedCondFormatFolderName;
                uo = UserObjectOpenDialog.ShowDialog(UserObjectType.CondFormat, "Edit Conditional Formatting", defaultUo);
            }
            if (uo == null)
            {
                return(null);
            }

            uo = UserObjectDao.Read(uo);
            if (uo == null)
            {
                return(null);
            }

            CondFormat cf = CondFormat.Deserialize(uo.Content);

            if (cf == null)
            {
                return(null);
            }

            string     title = "Conditional Formatting - " + uo.Name + " (" + uo.InternalName + ")";
            CondFormat cf2   = Edit(cf, true, title);

            if (cf2 == null)
            {
                return(null);
            }

            uo.Content = cf2.Serialize();
            UserObjectDao.Write(uo, uo.Id);

            if (MainMenuControl != null)
            {
                MainMenuControl.UpdateMruList(uo.InternalName);
            }

            CondFormat.UpdatePredefined(uo.InternalName, cf2); // update the dictionary of predefined CFs

            UpdateExistingCfReferences(uo, cf2);               // update any references to this cf in the list of open queries

            return(cf);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Setup color set conditional formatting rules for column
        /// </summary>
        /// <param name="setName"></param>
        /// <returns></returns>

        private CondFormatRules InitializeColorSetCondFormatRules(string setName)
        {
            CondFormatRule rule = null;

            CondFormatRules rules = GetCondFormatRulesFromDataTable();

            bool compatible = (rules.ColoringStyle == CondFormatStyle.ColorSet ||
                               rules.ColoringStyle == CondFormatStyle.IconSet);

            bool setExists = (Bitmaps.ColorSetImageColors.ContainsKey(setName));

            if (!compatible || !setExists)             // need new rules set?
            {
                if (!setExists || Lex.Eq(setName, CondFormat.DefaultColorSet))
                {
                    CondFormat cf = CondFormat.BuildDefaultConditionalFormatting();
                    rules = cf.Rules;
                    return(rules);
                }

                rules = new CondFormatRules(CondFormatStyle.ColorSet);
            }

            rules.ColoringStyle = CondFormatStyle.ColorSet;
            Color[] colors = Bitmaps.ColorSetImageColors[setName];

            for (int ri = 0; ri < colors.Length; ri++)
            {
                if (ri < rules.Count)
                {
                    rule = rules[ri];
                }

                else
                {
                    rule        = new CondFormatRule();
                    rule.Name   = "Rule " + (ri + 1);
                    rule.Op     = "<=";
                    rule.OpCode = CondFormatRule.ConvertOpNameToCode(rule.Op);
                    rules.Add(rule);
                }

                rule.BackColor1 = colors[ri];
            }

            return(rules);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Edit an existing conditional format user object
        /// </summary>
        /// <param name="internalName"></param>
        /// <returns></returns>

        public static CondFormat EditUserObject(
            string internalName)
        {
            UserObject uo = UserObject.ParseInternalUserObjectName(internalName, "");

            if (uo != null)
            {
                uo = UserObjectDao.Read(uo.Id);
            }
            if (uo == null)
            {
                throw new Exception("User object not found " + internalName);
            }
            CondFormat cf = EditUserObject(uo);

            return(cf);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Copy CondFormat object onto the form
        /// </summary>
        /// <param name="cf"></param>

        public void CondFormatToForm(
            CondFormat cf)
        {
            ColumnType = cf.ColumnType;
            //ShowInHeaders = cf.ShowInHeaders;

            if (ColumnType == MetaColumnType.Structure)
            {
                Option1.Text    = "Highlight matching substructure";
                Option1.Visible = true;

                Option2.Text    = "Align to matching substructure query";
                Option2.Visible = true;

                Rules.Height = Option1.Top - Rules.Top - 8;
            }

            else
            {
                Option1.Visible = false;
                Option2.Visible = false;
                Rules.Height    = CfName.Top - Rules.Top - 8;
            }

            Option1.Checked = cf.Option1;
            Option2.Checked = cf.Option2;

            CfName.Text         = cf.Name;
            ColumnDataType.Text = cf.ColumnType.ToString();

            bool showFormatName = (!EditForUserObjectStorage);             // show either the Cf name or the Cf data type (for saved Cfs)

            CfNameLabel.Visible = CfName.Visible = CfNameLabel2.Visible = showFormatName;

            if (ColumnTypeLabel.Top != CfName.Top)
            {
                int dy = CfName.Top - ColumnTypeLabel.Top;
                ColumnDataType.Top  += dy;
                ColumnTypeLabel.Top += dy;
            }
            ColumnTypeLabel.Visible = ColumnDataType.Visible = !showFormatName;

            Rules.SetupControl(cf.ColumnType, cf.Rules);

            return;
        }
Ejemplo n.º 8
0
        private void CancelBut_Click(object sender, EventArgs e)
        {
            CondFormat cf = FormToCondFormat();
            string     s  = cf.Serialize();

            if (s != InitialSerializedForm)
            {
                DialogResult dr = XtraMessageBox.Show(
                    "Are you sure you want to discard the\r\n" +
                    "changes to this conditional formatting?",
                    UmlautMobius.String, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
                if (dr != DialogResult.Yes)
                {
                    return;
                }
            }
            this.Visible = false;             // hide so not called again by FormClosing event
            DialogResult = DialogResult.Cancel;
        }
Ejemplo n.º 9
0
        public static CondFormat CreateAndInitializeCf(
            MetaColumnType mcType)
        {
            CondFormat cf = null;

            if (MetaColumn.IsNumericMetaColumnType(mcType) ||
                mcType == MetaColumnType.String ||
                mcType == MetaColumnType.Date)
            {
                cf = CondFormat.BuildDefaultConditionalFormatting();
            }

            else
            {
                cf = new CondFormat();
                cf.Rules.Add(new CondFormatRule());                 // initial rule
            }

            cf.ColumnType = mcType;             // be sure type is set
            return(cf);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Create a new conditional format user object
        /// </summary>
        /// <returns></returns>

        public static CondFormat CreateNewUserObject()
        {
            MetaColumnType mcType = MetaColumnType.Number;
            CondFormat     cf     = CreateAndInitializeCf(mcType);

            string     title = "New Conditional Format";
            CondFormat cf2   = Edit(cf, true, title);

            if (cf2 == null)
            {
                return(null);
            }

            UserObject uo = new UserObject(UserObjectType.CondFormat);

            //  Predefined cond formats by default are owned by a single owner and stored in a single folder

            uo.Owner        = SS.I.UserName;
            uo.ParentFolder = CondFormat.PredefinedCondFormatFolderName;
            uo.AccessLevel  = UserObjectAccess.ACL;
            uo.ACL          = AccessControlList.GetAdministratorGroupRwPublicReadAcl(SS.I.UserName);

            uo = UserObjectSaveDialog.Show("Save As", uo);
            if (uo == null)
            {
                return(null);
            }

            uo.Content = cf2.Serialize();
            UserObjectDao.Write(uo, uo.Id);

            MessageBoxMx.Show("Conditional format " + uo.Name + " saved (" + uo.InternalName + ")");             // show internal name so it may be referenced in a MetaColumn definition

            if (MainMenuControl != null)
            {
                MainMenuControl.UpdateMruList(uo.InternalName);
            }

            return(cf);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Update any references to this CF in open queries
        /// </summary>
        /// <param name="uo"></param>
        /// <param name="cf"></param>
        /// <returns></returns>

        public static int UpdateExistingCfReferences(
            UserObject uo,
            CondFormat cf)
        {
            int    updCnt       = 0;
            string internalName = uo.InternalName;

            if (QueriesControl.Instance == null)
            {
                return(updCnt);
            }
            List <Document> docList = QueriesControl.Instance.DocumentList;

            for (int di = 0; di < docList.Count; di++)
            {             // update any QueryColumn to MetaColumn references
                Document d = docList[di];
                if (d.Type != DocumentType.Query)
                {
                    continue;
                }
                Query q = (Query)d.Content;
                foreach (QueryTable qt in q.Tables)
                {
                    MetaTable mt = qt.MetaTable;
                    foreach (MetaColumn mc in mt.MetaColumns)
                    {
                        if (!Lex.Eq(mc.CondFormatName, internalName))
                        {
                            continue;
                        }
                        mc.CondFormat = cf;
                        updCnt++;
                    }
                }
            }

            return(updCnt);
        }
Ejemplo n.º 12
0
/// <summary>
/// Display cell text as hyperlinks to allow drilldown
/// Also, set the background color if appropriate (e.g. bin that an SP/CRC value is in)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

        private void Grid_CustomAppearance(object sender, PivotCustomAppearanceEventArgs e)
        {
            e.Appearance.Font      = new Font(e.Appearance.Font, FontStyle.Underline);
            e.Appearance.ForeColor = Color.Blue;

            PivotGridFieldContext f = GetPivotGridFieldContext(e.DataField);

            if (f == null)
            {
                return;
            }

            ResultsField rfld = f.ResultsField;

            if (rfld == null)
            {
                return;
            }
            Mobius.Data.QueryColumn qc = rfld.QueryColumn;
            MetaColumn mc = qc.MetaColumn;

            CondFormat cf = f.Qc.CondFormat;
            //if (cf == null || cf.Rules.Count == 0) return;

            object cv = e.GetCellValue(e.ColumnIndex, e.RowIndex);
            double d  = -1;

            if (cv is int)
            {
                d = (int)cv;
            }

            else if (cv is double)
            {
                d = (double)cv;
            }

            else
            {
                return;
            }

            if (Math.Abs(1) == 2)             // for compound by target
            {
                if (d >= 1 && d <= 10)
                {                 // todo: set proper color
                    Color c = UnpivotedAssayResult.CalculateBinColor((int)d);
                    e.Appearance.BackColor = c;
                }
            }

            if (DebugMx.False)             // color by count
            {
                d = d / 45;
                if (d > 10)
                {
                    d = 10;
                }
                if (d < 1)
                {
                    d = 1;
                }
                if (d >= 1 && d <= 10)
                {                 // todo: set proper color
                    Color c = UnpivotedAssayResult.CalculateBinColor((int)d);
                    e.Appearance.BackColor = c;
                }
            }

            if (DebugMx.False)             // for bin by target
            {
                PivotGridField[] rowFields = e.GetRowFields();
                if (d > 0 && rowFields.Length > 0)
                {
                    object rfv = e.GetFieldValue(rowFields[0]);
                    if (rfv == null)
                    {
                        return;
                    }

                    else if (rfv is int)
                    {
                        Color c = UnpivotedAssayResult.CalculateBinColor((int)rfv);
                        e.Appearance.BackColor = c;
                    }
                }
            }
        }
Ejemplo n.º 13
0
/// <summary>
/// Draw conditional formatting field value headers with appropriate background color
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

        private void Grid_CustomDrawFieldValue(object sender, PivotCustomDrawFieldValueEventArgs e)
        {
            string txt;
            PivotGridFieldContext fc = GetPivotGridFieldContext(e.Field);

            if (fc == null)
            {
                return;
            }
            ResultsField rfld = fc.ResultsField;

            if (rfld == null)
            {
                return;
            }

            //DebugLog.Message(rfld.QueryColumn.MetaColumn.Name);

            //if (rfld.QueryColumn.MetaColumn.Name == "ACTIVITY_BIN") rfld = rfld; // debug
            //if (e.DisplayText == "0") e = e; // debug

            CondFormat cf = rfld.QueryColumn.CondFormat;

            if (cf == null || cf.Rules.Count == 0)
            {
                return;
            }

            foreach (CondFormatRule rule in cf.Rules)
            {             // look for rule name that matches field value text
                if (Lex.Eq(rule.Name, e.DisplayText) || Lex.Eq(rule.Value, e.DisplayText))
                {
                    if (!Lex.IsNullOrEmpty(rule.Name))
                    {
                        txt = rule.Name;                                                    // display rule name if defined
                    }
                    else
                    {
                        txt = e.DisplayText;                      // otherwise display field value
                    }
                    Rectangle rect = e.Bounds;
                    ControlPaint.DrawBorder3D(e.Graphics, e.Bounds);
                    Brush brush =
                        e.GraphicsCache.GetSolidBrush(rule.BackColor1);
                    rect.Inflate(-1, -1);
                    e.Graphics.FillRectangle(brush, rect);
                    e.Appearance.DrawString(e.GraphicsCache, txt, e.Info.CaptionRect);
                    //e.Appearance.DrawString(e.GraphicsCache, e.Info.Caption, e.Info.CaptionRect);
                    foreach (DevExpress.Utils.Drawing.DrawElementInfo info in e.Info.InnerElements)
                    {
                        DevExpress.Utils.Drawing.ObjectPainter.DrawObject(e.GraphicsCache, info.ElementPainter,
                                                                          info.ElementInfo);
                    }
                    e.Handled = true;
                    return;

                    //e.Painter.DrawObject(e.Info); // change tone of skin
                    //e.Graphics.FillRectangle(e.GraphicsCache.GetSolidBrush(Color.FromArgb(50, 0, 0, 200)), e.Bounds);
                    //e.Handled = true;
                }
            }

            return;
        }