Exemple #1
0
        public virtual void BuildTable()
        {
            if (this.target.IsNull())
            {
                return;
            }
            StateTable stateTable = this.target;

            stateTable.UpdateTableList();
            StateRow[] activeTable = stateTable.tables[this.tableIndex];
            this.tableGUI = new Table();
            TableRow tableRow = this.tableGUI.AddRow();

            tableRow.AppendField(new TitleField(stateTable));
            if (activeTable.Length > 0)
            {
                tableRow = this.tableGUI.AddRow();
                tableRow.AppendField(new HeaderField(""));
                foreach (var stateRequirement in activeTable[0].requirements[0].data)
                {
                    var field = new HeaderField(stateRequirement);
                    field.disabled = !stateRequirement.target.IsEnabled();
                    tableRow.AppendField(field);
                }
                foreach (StateRow stateRow in activeTable)
                {
                    if (!this.rowIndex.ContainsKey(stateRow))
                    {
                        this.rowIndex[stateRow] = 0;
                    }
                    int rowIndex = this.rowIndex[stateRow];
                    tableRow          = this.tableGUI.AddRow(stateRow);
                    tableRow.disabled = !stateRow.target.IsEnabled();
                    tableRow.AppendField(new LabelField(stateRow));
                    foreach (StateRequirement requirement in stateRow.requirements[rowIndex].data)
                    {
                        var tableField = new StateField(requirement);
                        tableField.disabled = tableRow.disabled || !requirement.target.IsEnabled();
                        tableRow.AppendField(tableField);
                    }
                }
                this.setupSections.Clear();
                var tableRows = this.tableGUI.rows.Skip(2).ToList();
                foreach (TableRow row in tableRows)
                {
                    if (row.disabled)
                    {
                        continue;
                    }
                    var    stateRow = row.target.As <StateRow>();
                    string section  = stateRow.section;
                    if (!section.IsEmpty() && !this.setupSections.Contains(section))
                    {
                        bool open       = EditorPref.Get <bool>("StateWindow-GroupRow-" + section, false);
                        var  groupRow   = new TableRow(stateRow, this.tableGUI);
                        var  groupLabel = new GroupLabelField(section);
                        var  groupRows  = tableRows.Where(x => x.target.As <StateRow>().section == section).ToArray();
                        groupLabel.groupRows = groupRows;
                        groupRow.disabled    = groupLabel.groupRows.Count(x => !x.disabled) == 0;
                        groupRow.AppendField(groupLabel);
                        foreach (TableField field in row.fields)
                        {
                            var groupField   = new GroupField(field.target);
                            var columnFields = groupRows.SelectMany(x => x.fields).Where(x => x is StateField && x.order == field.order).Cast <StateField>().ToArray();
                            groupField.disabled     = groupRow.disabled || field.disabled;
                            groupField.columnFields = columnFields;
                            groupRow.AppendField(groupField);
                        }
                        foreach (var item in groupRows)
                        {
                            item.disabled = !open;
                        }
                        int insertIndex = tableRows.FindIndex(x => x.target == stateRow);
                        this.tableGUI.rows.Insert(insertIndex + 2, groupRow);
                        this.setupSections.Add(section);
                    }
                }
                var ordered = this.tableGUI.rows.Skip(2).Where(x => x.target is StateRow).OrderBy(x => {
                    var row = x.target.As <StateRow>();
                    if (!row.section.IsEmpty())
                    {
                        return(row.section);
                    }
                    return(row.name);
                });
                this.tableGUI.rows = this.tableGUI.rows.Take(2).Concat(ordered).ToList();
                this.tableGUI.Reorder();
            }
            this.Repaint();
        }