Beispiel #1
0
 protected override void DoDispose()
 {
     base.DoDispose();
     if (RowDatas != null)
     {
         RowDatas.Dispose();
         RowDatas = null;
     }
 }
Beispiel #2
0
        /// <summary>
        /// 清空单元格
        /// </summary>
        /// <returns></returns>
        private bool CellDatas_ClearEvent()
        {
            foreach (var item in CellDatas)
            {
                if (item != null && item.TableCell)
                {
                    GameObject.Destroy(item.TableCell.gameObject);
                }
            }
            RowDatas.Clear();
            ColumnDatas.Clear();
            RefreshSize();

            return(true);
        }
        static MList ToDoubleList            // Maybe<IEnumerable<double>>;
            (this IEnumerable <string> src)
        {
            var output = new RowDatas();

            foreach (var strdata in src)
            {
                double res;
                if (!double.TryParse(strdata, out res))
                {
                    return(None);
                }
                output.Add(res);
            }
            return(output);
        }
Beispiel #4
0
        private bool CellDatas_InsertEvent(int index, CellData value)
        {
            value.MergeDataEvent -= Value_MergeDataEvent;
            value.MergeDataEvent += Value_MergeDataEvent;

            #region 处理行
            var row = RowDatas.FirstOrDefault(p => p.RowIndex == value.RowIndex);
            if (row == null)
            {
                var rowButton = TableController.RowController.Create <TableRowButton>();
                row = new RowData(TableController, rowButton, value.RowIndex)
                {
                    RowIndex = value.RowIndex
                };
                value.RowData = row;
                row.Heigth    = value.RowHeigth;
                RowDatas.Add(row);
            }
            row.CellDatas.Add(value);
            value.RowData = row;
            #endregion
            #region 处理列
            var column = ColumnDatas.FirstOrDefault(p => p.ColumnIndex == value.ColumnIndex);
            if (column == null)
            {
                var columnButton = TableController.ColumnController.Create <TableColumnButton>();
                column = new ColumnData(TableController, columnButton, value.ColumnIndex)
                {
                    ColumnIndex = value.ColumnIndex
                };
                value.ColumnData = column;
                column.Width     = value.ColumnWidth;
                ColumnDatas.Add(column);
            }
            column.CellDatas.Add(value);
            value.ColumnData = column;
            #endregion
            RefreshSize();
            value.Refresh();
            return(true);
        }
Beispiel #5
0
        private void OnGUI()
        {
            m_scrollViewPos = GUILayout.BeginScrollView(m_scrollViewPos);

            if (RowDatas == null || RowDatas.Count == 0)
            {
                Close();
                return;
            }

            CheckColumnCount();

            if (LightMode == 0)
            {
                Theme = "ScriptText";
            }
            else if (LightMode == 1)
            {
                Theme = "PreferencesSectionBox";
            }

            if (reorderableList == null)
            {
                reorderableList =
                    new ReorderableList(RowDatas, typeof(List <DataTableRowData>), true, false, true, true);

                reorderableList.drawElementCallback = (Rect rect, int index, bool selected, bool focused) =>
                {
                    for (int i = 0; i < RowDatas[index].Data.Count; i++)
                    {
                        rect.width =
                            (Instance.position.width - 20) /
                            RowDatas[index].Data.Count;

                        rect.x = rect.width * i + 20;

                        RowDatas[index].Data[i] =
                            EditorGUI.TextField(rect, "", RowDatas[index].Data[i],
                                                Instance.Theme);
                    }
                };

                reorderableList.onAddCallback = (ReorderableList list) =>
                {
                    bool result =
                        EditorUtility.DisplayDialog("提示", "添加 行 或 列", "行", "列");

                    if (result)
                    {
                        if (RowDatas.Count == 0)
                        {
                            RowDatas.Add(new DataTableRowData()
                            {
                                Data = new List <string>()
                                {
                                    "", "", "", ""
                                }
                            });
                        }
                        else
                        {
                            DataTableRowData data = new DataTableRowData();

                            for (int i = 0; i < RowDatas[0].Data.Count - 1; i++)
                            {
                                data.Data.Add("");
                            }

                            RowDatas.Add(data);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < RowDatas.Count; i++)
                        {
                            RowDatas[i].Data.Add("");
                        }
                    }
                };

                reorderableList.onRemoveCallback = (ReorderableList list) =>
                {
                    bool result =
                        EditorUtility.DisplayDialog("提示", "移除 行 或 列", "行", "列");

                    if (result)
                    {
                        RowDatas.RemoveAt(list.index);
                    }
                    else
                    {
                        for (int i = 0; i < RowDatas.Count; i++)
                        {
                            RowDatas[i].Data.RemoveAt(RowDatas[i].Data.Count - 1);
                        }
                    }
                };

                reorderableList.drawHeaderCallback = (Rect rect) =>
                {
                    EditorGUI.LabelField(rect, FilePath);
                    rect.x = rect.width - 70;
                    EditorGUI.LabelField(rect, "高亮模式");
                    rect.x = rect.width - 20;

                    LightMode =
                        EditorGUI.Toggle(rect, LightMode == 0 ? true : false)
                            ? 0
                            : 1;

                    EditorPrefs
                    .SetInt("DataTableEditor_" + Application.productName + "_LightMode",
                            LightMode);
                };
            }

            reorderableList.DoLayoutList();

            GUILayout.EndScrollView();
        }
Beispiel #6
0
        public override void WriteTo(XlsWriter writer, int param = 0)
        {
            var oldStyle = writer.MergeStyle(Style);

            try
            {
                var i = 0;
                while (!RowDatas.Eof())
                {
                    using (var rowWriter = writer.AddRowArea(GetRows(), GetCols()))
                    {
                        // rowWriter.SetBorder(BorderTop, BorderLeft, BorderRight, BorderBottom);
                        foreach (var item in Items)
                        {
                            if (item.GetRows() == 0)
                            {
                                continue;
                            }

                            using (var colWriter = rowWriter.AddColArea())
                            {
                                item.WriteTo(colWriter, param);
                            }
                        }
                    }
                    RowDatas.Next();
                    i++;
                }
                if (i == 0)
                {
                    using (var rowWriter = writer.AddRowArea(GetRows(), GetCols()))
                    {
                        using (var colWriter = rowWriter.AddColArea())
                        {
                            var noRecord = new XlsText("Нет данных", Items != null && Items.Count > 0 ? Items[Items.Count - 1].GetCols() : 1)
                            {
                                Style = { FontColor = IndexedColors.GREY_50_PERCENT.Index, HAlign = HAlignment.Center }
                            };
                            noRecord.WriteTo(colWriter, param);
                        }
                    }
                }
                else if (ShowSummary)
                {
                    using (var rowWriter = writer.AddRowArea(GetRows(), GetCols()))
                    {
                        rowWriter.Style.FontStyle |= FontStyle.Bold;
                        // rowWriter.SetBorder(BorderTop, BorderLeft, BorderRight, BorderBottom);
                        foreach (var item in Items)
                        {
                            if (item.GetRows() == 0)
                            {
                                continue;
                            }

                            using (var colWriter = rowWriter.AddColArea())
                            {
                                item.WriteTo(colWriter, WriteSummaryRow);
                            }
                        }
                    }
                }
            }
            finally
            {
                writer.Style = oldStyle;
            }
        }
        private void OnGUI()
        {
            m_scrollViewPos = GUILayout.BeginScrollView(m_scrollViewPos);
            if (RowDatas == null || RowDatas.Count == 0)
            {
                Close();
                GUILayout.EndScrollView();
                return;
            }

            CheckColumnCount();

            if (LightMode == 0)
            {
                Theme = "ScriptText";
            }
            else if (LightMode == 1)
            {
                Theme = "PreferencesSectionBox";
            }

            if (reorderableList == null)
            {
#if UNITY_2019_1_OR_NEWER
                reorderableList =
                    new UnityInternalBridge.ReorderableList(RowDatas, typeof(List <DataTableRowData>), true, false, true,
                                                            true);
#else
                reorderableList =
                    new ReorderableList(RowDatas, typeof(List <DataTableRowData>), true, false, true, true);
#endif

                reorderableList.drawElementCallback = (Rect rect, int index, bool selected, bool focused) =>
                {
                    for (int i = 0; i < RowDatas[index].Data.Count; i++)
                    {
                        if (RowDatas[index].Data.Count > 10)
                        {
                            rect.width =
                                (this.position.width - 20) /
                                10;
                        }
                        else
                        {
                            rect.width =
                                (this.position.width - 20) /
                                RowDatas[index].Data.Count;
                        }

                        rect.x = rect.width * i + 20;
                        RowDatas[index].Data[i] =
                            EditorGUI.TextField(rect, "", RowDatas[index].Data[i],
                                                this.Theme);
                    }
                };

                reorderableList.onAddCallback = list =>
                {
                    bool result =
                        EditorUtility.DisplayDialog("提示", "添加 行 或 列", "行", "列");

                    if (result)
                    {
                        if (RowDatas.Count == 0)
                        {
                            RowDatas.Add(new DataTableRowData()
                            {
                                Data = new List <string>()
                                {
                                    "", "", "", ""
                                }
                            });
                        }
                        else
                        {
                            DataTableRowData data = new DataTableRowData();

                            for (int i = 0; i < RowDatas[0].Data.Count - 1; i++)
                            {
                                data.Data.Add("");
                            }

                            RowDatas.Add(data);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < RowDatas.Count; i++)
                        {
                            RowDatas[i].Data.Add("");
                        }
                    }
                    Focus();
                };

                reorderableList.onRemoveCallback = list =>
                {
                    bool result =
                        EditorUtility.DisplayDialog("提示", "移除 行 或 列", "行", "列");

                    if (result)
                    {
                        RowDatas.RemoveAt(list.index);
                    }
                    else
                    {
                        for (int i = 0; i < RowDatas.Count; i++)
                        {
                            RowDatas[i].Data.RemoveAt(RowDatas[i].Data.Count - 1);
                        }
                    }
                    Focus();
                };

                reorderableList.drawHeaderCallback = (Rect rect) =>
                {
                    EditorGUI.LabelField(rect, FilePath);
                    rect.x = rect.width - 70;
                    EditorGUI.LabelField(rect, "高亮模式");
                    rect.x = rect.width - 20;

                    LightMode =
                        EditorGUI.Toggle(rect, LightMode == 0 ? true : false)
                            ? 0
                            : 1;

                    EditorPrefs
                    .SetInt("DataTableEditor_" + Application.productName + "_LightMode",
                            LightMode);
                };
            }

            reorderableList.DoLayoutList();

            if (RowDatas != null && RowDatas.Count > 0)
            {
                if (RowDatas[0].Data.Count > 10)
                {
                    float listItemWidth = 0f;
                    float listX         = 0f;
                    listItemWidth = (position.width - 20) / 10;
                    listX         = listItemWidth * (RowDatas[0].Data.Count - 1) + 20;
                    GUILayout.Label("", new GUIStyle()
                    {
                        fixedWidth = listX
                    });
                }
            }

            GUILayout.EndScrollView();
            if (IsCombinationKey(EventModifiers.Control, KeyCode.S, EventType.KeyDown))
            {
                SaveDataTable();
            }
        }