コード例 #1
0
        public override void LoadClassControls(ISpawnList obj, TableLayoutPanel control)
        {
            SpawnListBox lbxValue = new SpawnListBox();

            lbxValue.Dock = DockStyle.Fill;
            lbxValue.Size = new Size(0, 200);

            Type elementType = ReflectionExt.GetBaseTypeArg(typeof(ISpawnList <>), obj.GetType(), 0);

            lbxValue.StringConv = DataEditor.GetStringRep(elementType, new object[0] {
            });
            //add lambda expression for editing a single element
            lbxValue.OnEditItem = (int index, object element, SpawnListBox.EditElementOp op) =>
            {
                ElementForm frmData = new ElementForm();
                if (element == null)
                {
                    frmData.Text = "New " + elementType.Name;
                }
                else
                {
                    frmData.Text = element.ToString();
                }

                DataEditor.StaticLoadMemberControl(frmData.ControlPanel, "(SpawnList) [" + index + "]", elementType, new object[0] {
                }, element, true);

                frmData.OnOK += (object okSender, EventArgs okE) =>
                {
                    DataEditor.StaticSaveMemberControl(frmData.ControlPanel, "SpawnList", elementType, new object[0] {
                    }, ref element, true);

                    op(index, element);
                    frmData.Close();
                };
                frmData.OnCancel += (object okSender, EventArgs okE) =>
                {
                    frmData.Close();
                };

                frmData.Show();
            };

            lbxValue.LoadFromList(obj.GetType(), obj);
            control.Controls.Add(lbxValue);
        }
コード例 #2
0
        private void OpenList(DataManager.DataType dataType, GetEntry entryOp, CreateEntry createOp)
        {
            DataList choices = new DataList();

            choices.Text = dataType.ToString();
            string[] entries = DataManager.Instance.DataIndices[dataType].GetLocalStringArray(true);
            choices.AddEntries(entries);
            choices.SelectedOKEvent = () => {
                if (choices.ChosenEntry > -1)
                {
                    ElementForm editor   = new ElementForm();
                    int         entryNum = choices.ChosenEntry;
                    editor.Text = entries[entryNum];
                    IEntryData data = entryOp(entryNum);
                    editor.Text = data.ToString();//data.GetType().ToString() + "#" + entryNum;
                    DataEditor.LoadDataControls(data, editor.ControlPanel);

                    editor.OnOK += (object okSender, EventArgs okE) => {
                        object obj = data;
                        DataEditor.SaveDataControls(ref obj, editor.ControlPanel);
                        data = (IEntryData)obj;
                        DataManager.SaveData(entryNum, dataType.ToString(), data);
                        DataManager.Instance.ClearCache(dataType);
                        IEntryData   entryData    = ((IEntryData)data);
                        EntrySummary entrySummary = entryData.GenerateEntrySummary();
                        DataManager.Instance.DataIndices[dataType].Entries[entryNum] = entrySummary;
                        DataManager.Instance.SaveIndex(dataType);
                        choices.ModifyEntry(entryNum, entrySummary.GetLocalString(true));
                        editor.Close();
                    };
                    editor.OnCancel += (object okSender, EventArgs okE) => {
                        editor.Close();
                    };

                    editor.Show();
                }
            };
            choices.SelectedAddEvent = () => {
                ElementForm editor   = new ElementForm();
                int         entryNum = DataManager.Instance.DataIndices[dataType].Entries.Count;
                editor.Text = "New " + dataType.ToString();
                IEntryData data = createOp();
                editor.Text = data.ToString();//data.GetType().ToString() + "#" + entryNum;
                DataEditor.LoadDataControls(data, editor.ControlPanel);

                editor.OnOK += (object okSender, EventArgs okE) => {
                    object obj = data;
                    DataEditor.SaveDataControls(ref obj, editor.ControlPanel);
                    data = (IEntryData)obj;
                    DataManager.SaveData(entryNum, dataType.ToString(), data);
                    DataManager.Instance.ClearCache(dataType);
                    IEntryData   entryData    = ((IEntryData)data);
                    EntrySummary entrySummary = entryData.GenerateEntrySummary();
                    DataManager.Instance.DataIndices[dataType].Entries.Add(entrySummary);
                    DataManager.Instance.SaveIndex(dataType);
                    entries = DataManager.Instance.DataIndices[dataType].GetLocalStringArray(true);
                    choices.AddEntry(entrySummary.GetLocalString(true));
                    editor.Close();
                };
                editor.OnCancel += (object okSender, EventArgs okE) => {
                    editor.Close();
                };

                editor.Show();
            };
            choices.Show();
        }
コード例 #3
0
        public override void LoadClassControls(ITypeDict obj, TableLayoutPanel control)
        {
            CollectionBox lbxValue = new CollectionBox();

            lbxValue.Dock = DockStyle.Fill;
            lbxValue.Size = new Size(0, 150);

            Type elementType = ReflectionExt.GetBaseTypeArg(typeof(ITypeDict <>), obj.GetType(), 0);

            lbxValue.StringConv = DataEditor.GetStringRep(elementType, new object[0] {
            });
            //add lambda expression for editing a single element
            lbxValue.OnEditItem = (int index, object element, CollectionBox.EditElementOp op) =>
            {
                ElementForm frmData = new ElementForm();
                if (element == null)
                {
                    frmData.Text = "New " + elementType.Name;
                }
                else
                {
                    frmData.Text = element.ToString();
                }

                DataEditor.StaticLoadMemberControl(frmData.ControlPanel, "(StateCollection) [" + index + "]", elementType, new object[0] {
                }, element, true);

                frmData.OnOK += (object okSender, EventArgs okE) =>
                {
                    DataEditor.StaticSaveMemberControl(frmData.ControlPanel, "StateCollection", elementType, new object[0] {
                    }, ref element, true);

                    bool itemExists = false;
                    for (int ii = 0; ii < lbxValue.Collection.Count; ii++)
                    {
                        if (ii != index)
                        {
                            if (lbxValue.Collection[ii].GetType() == element.GetType())
                            {
                                itemExists = true;
                            }
                        }
                    }

                    if (itemExists)
                    {
                        MessageBox.Show("Cannot add duplicate states.", "Entry already exists.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        op(index, element);
                        frmData.Close();
                    }
                };
                frmData.OnCancel += (object okSender, EventArgs okE) =>
                {
                    frmData.Close();
                };

                frmData.Show();
            };

            List <object> states = new List <object>();

            foreach (object state in obj)
            {
                states.Add(state);
            }
            lbxValue.LoadFromList(typeof(List <object>), states);
            control.Controls.Add(lbxValue);
        }