/// <summary>
        /// Default context menu strip for checks
        /// </summary>
        internal static ContextMenuStrip PrepareContextMenuStrip_DefaultCheck(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            string value = container.GetValue();

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = false;

                for (int i = 0; i < ((ExpressionMemberCheck)container.Member).Choices.Count(); i++)
                {
                    string item = ((ExpressionMemberCheck)container.Member).Choices[i];
                    if (container.Member.ValueToDisplay(item) == null)
                        continue;
                    ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add((editor.XmlValueToMenu.ContainsKey(item)) ? editor.XmlValueToMenu[item] : container.Member.ValueToDisplay(item));
                    tsi.Tag = container;
                    tsi.Click += ContextMenuClickChoose;
                    if (container.Member.ValueDescription.AreEqual(container.Member.ValueToXml(item), value))
                        tsi.Select();
                    if (((ExpressionMemberCheck)container.Member).SeparatorAt(i))
                        editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                }

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, value);
            return editor.ValueSelectorContextMenuStrip;
        }
        /// <summary>
        /// Default context menu strip for booleans (yes/no)
        /// </summary>
        internal static ContextMenuStrip PrepareContextMenuStrip_DefaultBool(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            string value = container.GetValue();

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = false;

                foreach (string item in new string[2] { container.Member.ValueToDisplay("1"), container.Member.ValueToDisplay("0") })
                {
                    ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(item);
                    tsi.Tag = container;
                    tsi.Click += ContextMenuClickChoose;
                }

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, value);
            return editor.ValueSelectorContextMenuStrip;
        }
        /// <summary>
        /// Method that calls PrepareContextMenuStripMethod and returns the result.
        /// </summary>
        public ContextMenuStrip PrepareContextMenuStrip(ExpressionMemberContainer container, ExpressionMemberValueEditorActivationMode mode)
        {
            ContextMenuStrip cms = PrepareContextMenuStripMethod(container, this, mode);

            //TODO: I'd want to limit context menu vertically somehow, but it does not really scroll well so for now it's disabled
            //cms.MaximumSize = new Size(cms.MaximumSize.Width,  500);
            return(cms);
        }
        /// <summary>
        /// Expression member that's using our descriptor was clicked.
        /// </summary>
        /// <param name="container"></param>
        public void OnClick(ExpressionMemberContainer container, NormalLabel l, Point curPos, ExpressionMemberValueEditorActivationMode mode)
        {
            if (   mode == ExpressionMemberValueEditorActivationMode.Plus01
                || mode == ExpressionMemberValueEditorActivationMode.Plus
                || mode == ExpressionMemberValueEditorActivationMode.Plus10
                || mode == ExpressionMemberValueEditorActivationMode.Plus100
                || mode == ExpressionMemberValueEditorActivationMode.Plus1000
                || mode == ExpressionMemberValueEditorActivationMode.Minus01
                || mode == ExpressionMemberValueEditorActivationMode.Minus
                || mode == ExpressionMemberValueEditorActivationMode.Minus10
                || mode == ExpressionMemberValueEditorActivationMode.Minus100
                || mode == ExpressionMemberValueEditorActivationMode.Minus1000)
            {
                if ((container.Member as ExpressionMemberCheck == null)
                    && (Type == ExpressionMemberValueType.VarDouble
                     || Type == ExpressionMemberValueType.VarInteger
                     || Type == ExpressionMemberValueType.VarBool))
                {
                    bool changed = false;
                    double delta = 0.0;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus01		? 0.1	: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus		? 1		: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus10		? 10	: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus100	? 100	: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus1000	? 1000	: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus01	? -0.1	: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus		? -1	: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus10	? -10	: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus100	? -100	: delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus1000	? -1000	: delta;

                    switch (Type)
                    {
                        case ExpressionMemberValueType.VarBool:
                            int tmpBool;
                            if (Helper.IntTryParse(container.GetValue(), out tmpBool))
                            {
                                if (tmpBool == 0)
                                    tmpBool = 1;
                                else
                                    tmpBool = 0;
                                container.SetValue(tmpBool.ToString());
                                changed = true;
                            }
                            break;
                        case ExpressionMemberValueType.VarDouble:
                            double tmpDouble;
                            if (Helper.DoubleTryParse(container.GetValue(), out tmpDouble))
                            {
                                tmpDouble+=delta;
                                if (Min != null && tmpDouble < (double)Min)
                                        tmpDouble = Max != null ? (double)Max : (double)Min;
                                if (Max != null && tmpDouble > (double)Max)
                                    tmpDouble = Min != null ? (double)Min : (double)Max;
                                container.SetValue(Helper.DoubleToString(tmpDouble));
                                changed = true;
                            }
                            break;
                        case ExpressionMemberValueType.VarInteger:
                            int tmpInt;
                            if (Helper.IntTryParse(container.GetValue(), out tmpInt))
                            {
                                tmpInt += (int)Math.Round(delta);
                                if (Min != null && tmpInt < (int)Min)
                                        tmpInt = Max != null ? (int)Max : (int)Min;
                                if (Max != null && tmpInt > (int)Max)
                                    tmpInt = Min != null ? (int)Min : (int)Max;
                                container.SetValue(tmpInt.ToString());
                                changed = true;
                            }
                            break;
                    }

                    if (changed)
                    {
                        Mission.Current.UpdateStatementTree();
                        Mission.Current.RegisterChange("Expression member value changed");
                    }
                    return;
                }
                else
                {
                    return;
                }
            }

            ContextMenuStrip curCMS;
            if ((curCMS = Editor.PrepareContextMenuStrip(container, mode)) != null)
            {
                if (mode == ExpressionMemberValueEditorActivationMode.NextMenuItem)
                {
                    if ((bool)curCMS.Tag)
                    {
                        ShowEditingDialog(container);
                        return;
                    }

                    bool next = false;
                    foreach (ToolStripItem item in curCMS.Items)
                        if (OnClick_RecursivelyActivate(item, ref next, true))
                        {
                            curCMS.Close();
                            return;
                        }
                    if (curCMS.Items[0] is ToolStripMenuItem && ((ToolStripMenuItem)curCMS.Items[0]).DropDownItems.Count > 0)
                        ((ToolStripMenuItem)curCMS.Items[0]).DropDownItems[0].PerformClick();
                    else
                        curCMS.Items[0].PerformClick();
                    curCMS.Close();
                    return;
                }
                if (mode == ExpressionMemberValueEditorActivationMode.PreviousMenuItem)
                {
                    if ((bool)curCMS.Tag)
                    {
                        ShowEditingDialog(container);
                        return;
                    }

                    bool next = false;
                    for(int i=curCMS.Items.Count-1;i>=0;i--)
                        if (OnClick_RecursivelyActivate(curCMS.Items[i], ref next, false))
                        {
                            curCMS.Close();
                            return;
                        }
                    if (curCMS.Items[curCMS.Items.Count - 1] is ToolStripMenuItem && ((ToolStripMenuItem)curCMS.Items[curCMS.Items.Count - 1]).DropDownItems.Count > 0)
                        ((ToolStripMenuItem)curCMS.Items[curCMS.Items.Count - 1]).
                            DropDownItems[((ToolStripMenuItem)curCMS.Items[curCMS.Items.Count - 1]).
                            DropDownItems.Count - 1].
                            PerformClick();
                    else
                        curCMS.Items[curCMS.Items.Count - 1].PerformClick();
                    curCMS.Close();
                    return;
                }
                curCMS.Show(curPos);
            }
            else
                ShowEditingDialog(container);
        }
 /// <summary>
 /// Routine to be done when label control assigned to this member is clicked
 /// </summary>
 public void OnClick(ExpressionMemberContainer container, NormalLabel l, Point curPos, ExpressionMemberValueEditorActivationMode mode)
 {
     ValueDescription.OnClick(container, l, curPos, mode);
 }
        /// <summary>
        /// Context menu strip for specified list (used by timers, variables and stations)
        /// </summary>
        private static ContextMenuStrip PrepareContextMenuStrip_SpecifiedListPlusDialog(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode, KeyValuePair<List<string>, List<string>> list)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.ForceDialog)
                return null;
            if (list.Key.Count == 0)
                return null;

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = true;

                if (list.Value.Count == 0)
                {
                    foreach (string item in list.Key)
                    {
                        ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(item);
                        tsi.Tag = container;
                        tsi.Click += ContextMenuClickChoose;
                    }
                }
                else
                {
                    int i;

                    for (i = 0; i < list.Value.Count; i++)
                    {

                        ToolStripMenuItem tsm = new ToolStripMenuItem(list.Value[i]);
                        editor.ValueSelectorContextMenuStrip.Items.Add(tsm);

                        for (int j = i * Settings.Current.NamesPerSubmenu; j < (i == list.Value.Count - 1 ? list.Key.Count : (i + 1) * Settings.Current.NamesPerSubmenu); j++)
                        {
                            string item = list.Key[j];

                            ToolStripItem tsi = tsm.DropDownItems.Add(item);

                            tsi.Tag = container;
                            tsi.Click += ContextMenuClickChoose;
                        }
                    }
                }

                editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                tsl.Tag = container;
                tsl.Click += ContextMenuClickShowDialog;

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, container.GetValue(), true);
            return editor.ValueSelectorContextMenuStrip;
        }
 /// <summary>
 /// Context menu strip for variable names
 /// </summary>
 internal static ContextMenuStrip PrepareContextMenuStrip_VariableNameList(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
 {
     return PrepareContextMenuStrip_SpecifiedListPlusDialog(container, editor, mode, Mission.Current.VariableNamesList);
 }
        /// <summary>
        /// Context menu strip with nested items (based on menu groups).
        /// </summary>
        internal static ContextMenuStrip PrepareContextMenuStrip_NestedList(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            string value = container.GetValue();

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = false;

                int i = 0;
                foreach (KeyValuePair<int, string> kvp in editor.MenuGroups.OrderBy((KeyValuePair<int, string> x) => x.Key))
                {
                    ToolStripMenuItem tsm = new ToolStripMenuItem(kvp.Value);
                    editor.ValueSelectorContextMenuStrip.Items.Add(tsm);

                    while (i < kvp.Key)
                    {
                        string item = editor.MenuItems[i++];

                        ToolStripItem tsi = tsm.DropDownItems.Add(item);

                        tsi.Tag = container;
                        tsi.Click += ContextMenuClickChoose;
                    }
                }

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, value);
            return editor.ValueSelectorContextMenuStrip;
        }
Beispiel #9
0
        /// <summary>
        /// Context menu strip for specified list (used by timers, variables, etc.)
        /// </summary>
        private static ContextMenuStrip PrepareContextMenuStrip_SpecifiedListPlusDialog(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode, KeyValuePair <List <string>, List <string> > list)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.ForceDialog)
            {
                return(null);
            }
            if (list.Key.Count == 0)
            {
                return(null);
            }

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = true;

                if (list.Value.Count == 0)
                {
                    foreach (string item in list.Key)
                    {
                        ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(item);
                        tsi.Tag    = container;
                        tsi.Click += ContextMenuClickChoose;
                    }
                }
                else
                {
                    int i;

                    for (i = 0; i < list.Value.Count; i++)
                    {
                        ToolStripMenuItem tsm = new ToolStripMenuItem(list.Value[i]);
                        editor.ValueSelectorContextMenuStrip.Items.Add(tsm);

                        for (int j = i * Settings.Current.NamesPerSubmenu; j < (i == list.Value.Count - 1 ? list.Key.Count : (i + 1) * Settings.Current.NamesPerSubmenu); j++)
                        {
                            string item = list.Key[j];

                            ToolStripItem tsi = tsm.DropDownItems.Add(item);

                            tsi.Tag    = container;
                            tsi.Click += ContextMenuClickChoose;
                        }
                    }
                }

                editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                tsl.Tag    = container;
                tsl.Click += ContextMenuClickShowDialog;

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, container.GetValue(), true);
            return(editor.ValueSelectorContextMenuStrip);
        }
Beispiel #10
0
 /// <summary>
 /// Context menu strip for external program IDs
 /// </summary>
 internal static ContextMenuStrip PrepareContextMenuStrip_ExternalProgramIDList(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
 {
     return(PrepareContextMenuStrip_SpecifiedListPlusDialog(container, editor, mode, Mission.Current.ExternalProgramIDsList));
 }
Beispiel #11
0
        /// <summary>
        /// Default context menu strip for booleans (yes/no)
        /// </summary>
        internal static ContextMenuStrip PrepareContextMenuStrip_DefaultBool(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            string value = container.GetValue();

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = false;

                foreach (string item in new string[3] {
                    "Default", container.Member.ValueToDisplay("1"), container.Member.ValueToDisplay("0")
                })
                {
                    ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(item);
                    tsi.Tag    = container;
                    tsi.Click += ContextMenuClickChoose;
                }

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, value);
            return(editor.ValueSelectorContextMenuStrip);
        }
Beispiel #12
0
        /// <summary>
        /// Default context menu strip for checks
        /// </summary>
        internal static ContextMenuStrip PrepareContextMenuStrip_DefaultCheck(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            string value = container.GetValue();

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = false;

                for (int i = 0; i < ((ExpressionMemberCheck)container.Member).Choices.Count(); i++)
                {
                    string item = ((ExpressionMemberCheck)container.Member).Choices[i];
                    if (container.Member.ValueToDisplay(item) == null)
                    {
                        continue;
                    }
                    ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add((editor.XmlValueToMenu.ContainsKey(item)) ? editor.XmlValueToMenu[item] : container.Member.ValueToDisplay(item));
                    tsi.Tag    = container;
                    tsi.Click += ContextMenuClickChoose;
                    if (container.Member.ValueDescription.AreEqual(container.Member.ValueToXml(item), value))
                    {
                        tsi.Select();
                    }
                    if (((ExpressionMemberCheck)container.Member).SeparatorAt(i))
                    {
                        editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                    }
                }

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, value);
            return(editor.ValueSelectorContextMenuStrip);
        }
Beispiel #13
0
        /// <summary>
        /// Context menu strip with nested items (based on menu groups).
        /// </summary>
        internal static ContextMenuStrip PrepareContextMenuStrip_NestedList(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            string value = container.GetValue();

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = false;

                int i = 0;
                foreach (KeyValuePair <int, string> kvp in editor.MenuGroups.OrderBy((KeyValuePair <int, string> x) => x.Key))
                {
                    ToolStripMenuItem tsm = new ToolStripMenuItem(kvp.Value);
                    editor.ValueSelectorContextMenuStrip.Items.Add(tsm);

                    while (i < kvp.Key)
                    {
                        string item = editor.MenuItems[i++];

                        ToolStripItem tsi = tsm.DropDownItems.Add(item);

                        tsi.Tag    = container;
                        tsi.Click += ContextMenuClickChoose;
                    }
                }

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, value);
            return(editor.ValueSelectorContextMenuStrip);
        }
Beispiel #14
0
        /// <summary>
        /// Default context menu strip, providing a choice of Dialog and first value separator options.
        /// </summary>
        private static ContextMenuStrip PrepareContextMenuStrip_DefaultListWithOptions(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode, bool plusDialogItem, bool firstSeparated)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.ForceDialog)
            {
                return(null);
            }

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = plusDialogItem;

                bool doOnce = firstSeparated;
                foreach (string item in editor.DisplayValueToXml.Keys)
                {
                    ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(item);
                    tsi.Tag    = container;
                    tsi.Click += ContextMenuClickChoose;

                    if (doOnce)
                    {
                        doOnce = false;
                        editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                    }
                }

                if (plusDialogItem)
                {
                    if (firstSeparated != true || editor.DisplayValueToXml.Keys.Count != 1)
                    {
                        editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                    }
                    ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                    tsl.Tag    = container;
                    tsl.Click += ContextMenuClickShowDialog;
                }
                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, container.GetValue(), true);
            return(editor.ValueSelectorContextMenuStrip);
        }
Beispiel #15
0
 /// <summary>
 /// Default context menu strip, with Dialog option and separator for the first value.
 /// </summary>
 internal static ContextMenuStrip PrepareContextMenuStrip_DefaultListPlusDialogWithFirstSeparated(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
 {
     return(PrepareContextMenuStrip_DefaultListWithOptions(container, editor, mode, true, true));
 }
 /// <summary>
 /// Default context menu strip, with separator for the first value and no Dialog option.
 /// </summary>
 internal static ContextMenuStrip PrepareContextMenuStrip_DefaultListWithFirstSeparated(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
 {
     return PrepareContextMenuStrip_DefaultListWithOptions(container, editor, mode, false, true);
 }
        /// <summary>
        /// Context menu strip for HullID
        /// </summary>
        internal static ContextMenuStrip PrepareContextMenuStrip_HullIDList(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            string value = container.GetValue();

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = false;

                ToolStripItem tsn1 = editor.ValueSelectorContextMenuStrip.Items.Add("NULL");
                tsn1.Tag = container;
                tsn1.Click += ContextMenuClickChoose;
                editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());

                List<string> keys = VesselData.Current.VesselList.Keys.ToList();

                if (keys.Count > Settings.Current.NamesPerSubmenu)
                {
                    int i;
                    List<string> headers = new List<string>();
                    for (i = 0; i < keys.Count / Settings.Current.NamesPerSubmenu; i++)
                    {
                        string first = VesselData.Current.VesselToString(keys[i * Settings.Current.NamesPerSubmenu]);
                        string last = VesselData.Current.VesselToString(keys[(i + 1) * Settings.Current.NamesPerSubmenu - 1]);
                        headers.Add(first + " - " + last);
                    }
                    if (i * Settings.Current.NamesPerSubmenu <= keys.Count - 1)
                        headers.Add(VesselData.Current.VesselToString(keys[i * Settings.Current.NamesPerSubmenu])
                                  + " - "
                                  + VesselData.Current.VesselToString(keys[keys.Count - 1]));

                    for (i = 0; i < headers.Count; i++)
                    {
                        ToolStripMenuItem tsm2 = (ToolStripMenuItem)editor.ValueSelectorContextMenuStrip.Items.Add(headers[i]);
                        editor.ValueSelectorContextMenuStrip.Items.Add(tsm2);

                        for (int j = i * Settings.Current.NamesPerSubmenu; j < (i == headers.Count - 1 ? keys.Count : (i + 1) * Settings.Current.NamesPerSubmenu); j++)
                        {
                            ToolStripItem tsi = tsm2.DropDownItems.Add(VesselData.Current.VesselToString(keys[j]));
                            tsi.Tag = container;
                            tsi.Click += ContextMenuClickChoose;
                        }
                    }
                }
                else
                {
                    foreach (string item in VesselData.Current.VesselList.Keys)
                    {
                        ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(VesselData.Current.VesselToString(item));
                        tsi.Tag = container;
                        tsi.Click += ContextMenuClickChoose;
                    }
                }

                if (VesselData.Current.VesselList.Keys.Count > 0)
                {
                    editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());

                    // When we had a huge list of IDs, there was a purpose of having NULL entry both above and below.
                    // Now that we have separation into submenus, there is no need for that

                    //ToolStripItem tsn2 = editor.cmsValueSelector.Items.Add("NULL");
                    //tsn2.Tag = container;
                    //tsn2.Click += ContextMenuClick_Choose;

                    //editor.cmsValueSelector.Items.Add(new ToolStripSeparator());
                }

                ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                tsl.Tag = container;
                tsl.Click += ContextMenuClickShowDialog;

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, string.IsNullOrWhiteSpace(value) ? null : value);
            return editor.ValueSelectorContextMenuStrip;
        }
Beispiel #18
0
 /// <summary>
 /// Context Menu Strip for names of named objects
 /// </summary>
 internal static ContextMenuStrip PrepareContextMenuStrip_NamedAllNameList(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
 {
     return(PrepareContextMenuStrip_SpecifiedNestedListPlusDialog(container, editor, mode, Mission.Current.AllNamesLists));
 }
        /// <summary>
        /// Context menu strip for player names
        /// </summary>
        /// <param name="container"></param>
        /// <param name="editor"></param>
        /// <param name="mode"></param>
        /// <returns></returns>
        internal static ContextMenuStrip PrepareContextMenuStrip_PlayerListPlusDialog(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.ForceDialog)
                return null;

            // Recreate the menu if player ship names changed since last time
            //TODO: This should (probably) be moved to an event as well!
            bool forceRecreate = true;
            if (editor.Tag != null && editor.Tag as string[] != null)
            {
                string[] prevNames = (string[])editor.Tag;
                string[] curNames = Mission.Current.PlayerShipNames;
                if (prevNames.Length == curNames.Length)
                {
                    bool identical = true;
                    for (int i = 0; identical && i < prevNames.Length; i++)
                        if (prevNames[i] != curNames[i])
                            identical = false;
                    if (identical)
                        forceRecreate = false;
                }
            }
            editor.Tag = Mission.Current.PlayerShipNames;

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu || forceRecreate)
            {
                editor.XmlValueToDisplay.Clear();
                editor.DisplayValueToXml.Clear();
                editor.MenuItems.Clear();
                foreach (string playerShipName in Mission.Current.PlayerShipNames)
                    editor.AddToDictionary(playerShipName, playerShipName);

                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = true;

                foreach (string item in editor.DisplayValueToXml.Keys)
                {
                    ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(item);
                    tsi.Tag = container;
                    tsi.Click += ContextMenuClickChoose;
                }

                editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                tsl.Tag = container;
                tsl.Click += ContextMenuClickShowDialog;

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, container.GetValue(), true);
            return editor.ValueSelectorContextMenuStrip;
        }
Beispiel #20
0
        /// <summary>
        /// Context menu strip for nested specified list (used by named objects)
        /// </summary>
        private static ContextMenuStrip PrepareContextMenuStrip_SpecifiedNestedListPlusDialog(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode, Dictionary <string, List <string> > dict)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.ForceDialog)
            {
                return(null);
            }
            bool empty = true;

            foreach (KeyValuePair <string, List <string> > kvp in dict)
            {
                if (kvp.Value.Count != 0)
                {
                    empty = false;
                }
            }
            if (empty)
            {
                return(null);
            }

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = true;

                //For each list of named objects that is stored in the dictionary
                foreach (KeyValuePair <string, List <string> > kvp in dict)
                {
                    if (kvp.Value.Count == 0)
                    {
                        continue;
                    }

                    ToolStripMenuItem tsm = new ToolStripMenuItem(kvp.Key);
                    editor.ValueSelectorContextMenuStrip.Items.Add(tsm);

                    //If they do not fit make a second nested menu inside the first one
                    if (kvp.Value.Count > Settings.Current.NamesPerSubmenu)
                    {
                        int           i;
                        List <string> headers = new List <string>();
                        for (i = 0; i < kvp.Value.Count / Settings.Current.NamesPerSubmenu; i++)
                        {
                            string first = kvp.Value[i * Settings.Current.NamesPerSubmenu];
                            string last  = kvp.Value[(i + 1) * Settings.Current.NamesPerSubmenu - 1];
                            headers.Add(first + " - " + last);
                        }
                        if (i * Settings.Current.NamesPerSubmenu <= kvp.Value.Count - 1)
                        {
                            headers.Add(kvp.Value[i * Settings.Current.NamesPerSubmenu] + " - " + kvp.Value[kvp.Value.Count - 1]);
                        }

                        for (i = 0; i < headers.Count; i++)
                        {
                            ToolStripMenuItem tsm2 = (ToolStripMenuItem)tsm.DropDownItems.Add(headers[i]);
                            editor.ValueSelectorContextMenuStrip.Items.Add(tsm);

                            for (int j = i * Settings.Current.NamesPerSubmenu; j < (i == headers.Count - 1 ? kvp.Value.Count : (i + 1) * Settings.Current.NamesPerSubmenu); j++)
                            {
                                string        item = kvp.Value[j];
                                ToolStripItem tsi  = tsm2.DropDownItems.Add(item);
                                tsi.Tag    = container;
                                tsi.Click += ContextMenuClickChoose;
                            }
                        }
                    }
                    else//If they fit in a single menu add everything into the first menu item
                    {
                        foreach (string item in kvp.Value)
                        {
                            ToolStripItem tsi = tsm.DropDownItems.Add(item);
                            tsi.Tag    = container;
                            tsi.Click += ContextMenuClickChoose;
                        }
                    }
                }

                editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                tsl.Tag    = container;
                tsl.Click += ContextMenuClickShowDialog;

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, container.GetValue(), true);
            return(editor.ValueSelectorContextMenuStrip);
        }
        /// <summary>
        /// Default context menu strip, providing a choice of Dialog and first value separator options
        /// </summary>
        private static ContextMenuStrip PrepareContextMenuStrip_DefaultListWithOptions(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode, bool plusDialogItem, bool firstSeparated)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.ForceDialog)
                return null;

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = plusDialogItem;

                bool doOnce = firstSeparated;
                foreach (string item in editor.DisplayValueToXml.Keys)
                {
                    ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(item);
                    tsi.Tag = container;
                    tsi.Click += ContextMenuClickChoose;

                    if (doOnce)
                    {
                        doOnce = false;
                        editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                    }
                }

                if (plusDialogItem)
                {
                    if (firstSeparated != true || editor.DisplayValueToXml.Keys.Count != 1)
                        editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                    ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                    tsl.Tag = container;
                    tsl.Click += ContextMenuClickShowDialog;
                }
                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, container.GetValue(), true);
            return editor.ValueSelectorContextMenuStrip;
        }
Beispiel #22
0
        /// <summary>
        /// Context menu strip for HullID
        /// </summary>
        internal static ContextMenuStrip PrepareContextMenuStrip_HullIDList(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            string value = container.GetValue();

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = false;

                ToolStripItem tsn1 = editor.ValueSelectorContextMenuStrip.Items.Add("NULL");
                tsn1.Tag    = container;
                tsn1.Click += ContextMenuClickChoose;
                editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());

                List <string> keys = VesselData.Current.VesselList.Keys.ToList();

                if (keys.Count > Settings.Current.NamesPerSubmenu)
                {
                    int           i;
                    List <string> headers = new List <string>();
                    for (i = 0; i < keys.Count / Settings.Current.NamesPerSubmenu; i++)
                    {
                        string first = VesselData.Current.VesselToString(keys[i * Settings.Current.NamesPerSubmenu]);
                        string last  = VesselData.Current.VesselToString(keys[(i + 1) * Settings.Current.NamesPerSubmenu - 1]);
                        headers.Add(first + " - " + last);
                    }
                    if (i * Settings.Current.NamesPerSubmenu <= keys.Count - 1)
                    {
                        headers.Add(VesselData.Current.VesselToString(keys[i * Settings.Current.NamesPerSubmenu])
                                    + " - "
                                    + VesselData.Current.VesselToString(keys[keys.Count - 1]));
                    }

                    for (i = 0; i < headers.Count; i++)
                    {
                        ToolStripMenuItem tsm2 = (ToolStripMenuItem)editor.ValueSelectorContextMenuStrip.Items.Add(headers[i]);
                        editor.ValueSelectorContextMenuStrip.Items.Add(tsm2);

                        for (int j = i * Settings.Current.NamesPerSubmenu; j < (i == headers.Count - 1 ? keys.Count : (i + 1) * Settings.Current.NamesPerSubmenu); j++)
                        {
                            ToolStripItem tsi = tsm2.DropDownItems.Add(VesselData.Current.VesselToString(keys[j]));
                            tsi.Tag    = container;
                            tsi.Click += ContextMenuClickChoose;
                        }
                    }
                }
                else
                {
                    foreach (string item in VesselData.Current.VesselList.Keys)
                    {
                        ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(VesselData.Current.VesselToString(item));
                        tsi.Tag    = container;
                        tsi.Click += ContextMenuClickChoose;
                    }
                }

                if (VesselData.Current.VesselList.Keys.Count > 0)
                {
                    editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());

                    // When we had a huge list of IDs, there was a purpose of having NULL entry both above and below.
                    // Now that we have separation into submenus, there is no need for that

                    //ToolStripItem tsn2 = editor.cmsValueSelector.Items.Add("NULL");
                    //tsn2.Tag = container;
                    //tsn2.Click += ContextMenuClick_Choose;

                    //editor.cmsValueSelector.Items.Add(new ToolStripSeparator());
                }

                ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                tsl.Tag    = container;
                tsl.Click += ContextMenuClickShowDialog;

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, string.IsNullOrWhiteSpace(value) ? null : value);
            return(editor.ValueSelectorContextMenuStrip);
        }
        /// <summary>
        /// Context menu strip for nested specified list (used by named objects)
        /// </summary>
        private static ContextMenuStrip PrepareContextMenuStrip_SpecifiedNestedListPlusDialog(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode, Dictionary<string, List<string>> dict)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.ForceDialog)
                return null;
            bool empty = true;
            foreach (KeyValuePair<string, List<string>> kvp in dict)
                if (kvp.Value.Count != 0) empty = false;
            if (empty)
                return null;

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu)
            {
                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = true;

                //For each list of named objects that is stored in the dictionary
                foreach (KeyValuePair<string, List<string>> kvp in dict)
                {
                    if (kvp.Value.Count == 0)
                        continue;

                    ToolStripMenuItem tsm = new ToolStripMenuItem(kvp.Key);
                    editor.ValueSelectorContextMenuStrip.Items.Add(tsm);

                    //If they do not fit make a second nested menu inside the first one
                    if (kvp.Value.Count > Settings.Current.NamesPerSubmenu)
                    {
                        int i;
                        List<string> headers = new List<string>();
                        for (i = 0; i < kvp.Value.Count / Settings.Current.NamesPerSubmenu; i++)
                        {
                            string first = kvp.Value[i * Settings.Current.NamesPerSubmenu];
                            string last = kvp.Value[(i + 1) * Settings.Current.NamesPerSubmenu - 1];
                            headers.Add(first + " - " + last);
                        }
                        if (i * Settings.Current.NamesPerSubmenu <= kvp.Value.Count - 1)
                            headers.Add(kvp.Value[i * Settings.Current.NamesPerSubmenu] + " - " + kvp.Value[kvp.Value.Count - 1]);

                        for (i = 0; i < headers.Count; i++)
                        {
                            ToolStripMenuItem tsm2 = (ToolStripMenuItem)tsm.DropDownItems.Add(headers[i]);
                            editor.ValueSelectorContextMenuStrip.Items.Add(tsm);

                            for (int j = i * Settings.Current.NamesPerSubmenu; j < (i == headers.Count - 1 ? kvp.Value.Count : (i + 1) * Settings.Current.NamesPerSubmenu); j++)
                            {
                                string item = kvp.Value[j];
                                ToolStripItem tsi = tsm2.DropDownItems.Add(item);
                                tsi.Tag = container;
                                tsi.Click += ContextMenuClickChoose;
                            }
                        }
                    }
                    else//If they fit in a single menu add everything into the first menu item
                    {
                        foreach (string item in kvp.Value)
                        {
                            ToolStripItem tsi = tsm.DropDownItems.Add(item);
                            tsi.Tag = container;
                            tsi.Click += ContextMenuClickChoose;
                        }
                    }
                }

                editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                tsl.Tag = container;
                tsl.Click += ContextMenuClickShowDialog;

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, container.GetValue(), true);
            return editor.ValueSelectorContextMenuStrip;
        }
Beispiel #24
0
        /// <summary>
        /// Context menu strip for player names
        /// </summary>
        /// <param name="container"></param>
        /// <param name="editor"></param>
        /// <param name="mode"></param>
        /// <returns></returns>
        internal static ContextMenuStrip PrepareContextMenuStrip_PlayerListPlusDialog(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.ForceDialog)
            {
                return(null);
            }

            // Recreate the menu if player ship names changed since last time
            //TODO: This should (probably) be moved to an event as well!
            bool forceRecreate = true;

            if (editor.Tag != null && editor.Tag as string[] != null)
            {
                string[] prevNames = (string[])editor.Tag;
                string[] curNames  = Mission.Current.PlayerShipNames;
                if (prevNames.Length == curNames.Length)
                {
                    bool identical = true;
                    for (int i = 0; identical && i < prevNames.Length; i++)
                    {
                        if (prevNames[i] != curNames[i])
                        {
                            identical = false;
                        }
                    }
                    if (identical)
                    {
                        forceRecreate = false;
                    }
                }
            }
            editor.Tag = Mission.Current.PlayerShipNames;

            if (editor.ValueSelectorContextMenuStrip == null || editor.LastUser != container.Member.ValueDescription || editor.ForceRecreateMenu || forceRecreate)
            {
                editor.XmlValueToDisplay.Clear();
                editor.DisplayValueToXml.Clear();
                editor.MenuItems.Clear();
                foreach (string playerShipName in Mission.Current.PlayerShipNames)
                {
                    editor.AddToDictionary(playerShipName, playerShipName);
                }

                editor.ValueSelectorContextMenuStrip = new ContextMenuStrip();
                editor.InitContextMenuStrip();
                editor.LastUser = container.Member.ValueDescription;
                editor.ValueSelectorContextMenuStrip.Items.Clear();
                editor.ValueSelectorContextMenuStrip.Tag = true;

                foreach (string item in editor.DisplayValueToXml.Keys)
                {
                    ToolStripItem tsi = editor.ValueSelectorContextMenuStrip.Items.Add(item);
                    tsi.Tag    = container;
                    tsi.Click += ContextMenuClickChoose;
                }

                editor.ValueSelectorContextMenuStrip.Items.Add(new ToolStripSeparator());
                ToolStripItem tsl = editor.ValueSelectorContextMenuStrip.Items.Add("Input value...");
                tsl.Tag    = container;
                tsl.Click += ContextMenuClickShowDialog;

                editor.ShowHideContextMenuStrip();
            }

            AssignContainerToContextMenuStrip(editor.ValueSelectorContextMenuStrip, container, container.GetValue(), true);
            return(editor.ValueSelectorContextMenuStrip);
        }
Beispiel #25
0
 /// <summary>
 /// Default context menu strip, with no Dialog option and no separator for the first value.
 /// </summary>
 internal static ContextMenuStrip PrepareContextMenuStrip_DefaultList(ExpressionMemberContainer container, ExpressionMemberValueEditor editor, ExpressionMemberValueEditorActivationMode mode)
 {
     return(PrepareContextMenuStrip_DefaultListWithOptions(container, editor, mode, false, false));
 }
 /// <summary>
 /// Method that calls PrepareContextMenuStripMethod and returns the result.
 /// </summary>
 public ContextMenuStrip PrepareContextMenuStrip(ExpressionMemberContainer container, ExpressionMemberValueEditorActivationMode mode)
 {
     ContextMenuStrip cms =  PrepareContextMenuStripMethod(container, this, mode);
     //TODO: I'd want to limit context menu vertically somehow, but it does not really scroll well so for now it's disabled
     //cms.MaximumSize = new Size(cms.MaximumSize.Width,  500);
     return cms;
 }
 /// <summary>
 /// Routine to be done when label control assigned to this member is clicked
 /// </summary>
 public void OnClick(ExpressionMemberContainer container, NormalLabel l, Point curPos, ExpressionMemberValueEditorActivationMode mode)
 {
     ValueDescription.OnClick(container, l, curPos, mode);
 }
        /// <summary>
        /// Expression member that's using our descriptor was clicked.
        /// </summary>
        /// <param name="container"></param>
        public void OnClick(ExpressionMemberContainer container, NormalLabel l, Point curPos, ExpressionMemberValueEditorActivationMode mode)
        {
            if (mode == ExpressionMemberValueEditorActivationMode.Plus01 ||
                mode == ExpressionMemberValueEditorActivationMode.Plus ||
                mode == ExpressionMemberValueEditorActivationMode.Plus10 ||
                mode == ExpressionMemberValueEditorActivationMode.Plus100 ||
                mode == ExpressionMemberValueEditorActivationMode.Plus1000 ||
                mode == ExpressionMemberValueEditorActivationMode.Minus01 ||
                mode == ExpressionMemberValueEditorActivationMode.Minus ||
                mode == ExpressionMemberValueEditorActivationMode.Minus10 ||
                mode == ExpressionMemberValueEditorActivationMode.Minus100 ||
                mode == ExpressionMemberValueEditorActivationMode.Minus1000)
            {
                if ((container.Member as ExpressionMemberCheck == null) &&
                    (Type == ExpressionMemberValueType.VarDouble ||
                     Type == ExpressionMemberValueType.VarInteger ||
                     Type == ExpressionMemberValueType.VarBool))
                {
                    bool   changed = false;
                    double delta   = 0.0;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus01                ? 0.1   : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus          ? 1             : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus10                ? 10    : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus100       ? 100   : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Plus1000      ? 1000  : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus01       ? -0.1  : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus         ? -1    : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus10       ? -10   : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus100      ? -100  : delta;
                    delta = mode == ExpressionMemberValueEditorActivationMode.Minus1000     ? -1000 : delta;

                    switch (Type)
                    {
                    case ExpressionMemberValueType.VarBool:
                        int tmpBool;
                        if (Helper.IntTryParse(container.GetValue(), out tmpBool))
                        {
                            if (tmpBool == 0)
                            {
                                tmpBool = 1;
                            }
                            else
                            {
                                tmpBool = 0;
                            }
                            container.SetValue(tmpBool.ToString());
                            changed = true;
                        }
                        break;

                    case ExpressionMemberValueType.VarDouble:
                        double tmpDouble;
                        if (Helper.DoubleTryParse(container.GetValue(), out tmpDouble))
                        {
                            tmpDouble += delta;
                            if (Min != null && tmpDouble < (double)Min)
                            {
                                tmpDouble = Max != null ? (double)Max : (double)Min;
                            }
                            if (Max != null && tmpDouble > (double)Max)
                            {
                                tmpDouble = Min != null ? (double)Min : (double)Max;
                            }
                            container.SetValue(Helper.DoubleToString(tmpDouble));
                            changed = true;
                        }
                        break;

                    case ExpressionMemberValueType.VarInteger:
                        int tmpInt;
                        if (Helper.IntTryParse(container.GetValue(), out tmpInt))
                        {
                            tmpInt += (int)Math.Round(delta);
                            if (Min != null && tmpInt < (int)Min)
                            {
                                tmpInt = Max != null ? (int)Max : (int)Min;
                            }
                            if (Max != null && tmpInt > (int)Max)
                            {
                                tmpInt = Min != null ? (int)Min : (int)Max;
                            }
                            container.SetValue(tmpInt.ToString());
                            changed = true;
                        }
                        break;
                    }

                    if (changed)
                    {
                        Mission.Current.UpdateStatementTree();
                        Mission.Current.RegisterChange("Expression member value changed");
                    }
                    return;
                }
                else
                {
                    return;
                }
            }

            ContextMenuStrip curCMS;

            if ((curCMS = Editor.PrepareContextMenuStrip(container, mode)) != null)
            {
                if (mode == ExpressionMemberValueEditorActivationMode.NextMenuItem)
                {
                    if ((bool)curCMS.Tag)
                    {
                        ShowEditingDialog(container);
                        return;
                    }

                    bool next = false;
                    foreach (ToolStripItem item in curCMS.Items)
                    {
                        if (OnClick_RecursivelyActivate(item, ref next, true))
                        {
                            curCMS.Close();
                            return;
                        }
                    }
                    if (curCMS.Items[0] is ToolStripMenuItem && ((ToolStripMenuItem)curCMS.Items[0]).DropDownItems.Count > 0)
                    {
                        ((ToolStripMenuItem)curCMS.Items[0]).DropDownItems[0].PerformClick();
                    }
                    else
                    {
                        curCMS.Items[0].PerformClick();
                    }
                    return;
                }
                if (mode == ExpressionMemberValueEditorActivationMode.PreviousMenuItem)
                {
                    if ((bool)curCMS.Tag)
                    {
                        ShowEditingDialog(container);
                        return;
                    }

                    bool next = false;
                    for (int i = curCMS.Items.Count - 1; i >= 0; i--)
                    {
                        if (OnClick_RecursivelyActivate(curCMS.Items[i], ref next, false))
                        {
                            curCMS.Close();
                            return;
                        }
                    }
                    if (curCMS.Items[curCMS.Items.Count - 1] is ToolStripMenuItem && ((ToolStripMenuItem)curCMS.Items[curCMS.Items.Count - 1]).DropDownItems.Count > 0)
                    {
                        ((ToolStripMenuItem)curCMS.Items[curCMS.Items.Count - 1]).
                        DropDownItems[((ToolStripMenuItem)curCMS.Items[curCMS.Items.Count - 1]).
                                      DropDownItems.Count - 1].
                        PerformClick();
                    }
                    else
                    {
                        curCMS.Items[curCMS.Items.Count - 1].PerformClick();
                    }
                    curCMS.Close();
                    return;
                }
                curCMS.Show(curPos);
            }
            else
            {
                ShowEditingDialog(container);
            }
        }
Beispiel #29
0
 /// <summary>
 /// Label was clicked by mouse or activated by keyboard. Not really subscribed to an event but rather called from OnKeydown and other methods subscribed to event.
 /// </summary>
 private void _E_l_Activated(NormalLabel label, bool byMouse = false, ExpressionMemberValueEditorActivationMode mode = ExpressionMemberValueEditorActivationMode.Normal)
 {
     Point where;
     if (byMouse)
         where = Cursor.Position;
     else
     {
         where = new Point();
         where.X += label.Width / 2;
         where.Y += label.Height / 2;
         where = label.PointToScreen(where);
     }
      ((ExpressionMemberContainer)label.Tag).OnClick(label, where, mode);
 }
 /// <summary>
 /// Call routine to be done when label control assigned to this member is clicked.
 /// </summary>
 public void OnClick(NormalLabel l, Point curPos, ExpressionMemberValueEditorActivationMode mode)
 {
     Member.OnClick(this, l, curPos, mode);
 }