Ejemplo n.º 1
0
        private async void Session_Save(object sender, RoutedEventArgs e)
        {
            SwagDataSet.Display = SessionName;
            SwagItemPreOrderIterator <SwagData> itrSwagData = SwagDataSet.CreateIterator();

            SwagWindow.GlobalIsBusy = true;

            await Task.Run(() =>
            {
                for (SwagData sd = itrSwagData.First(); !itrSwagData.IsDone; sd = itrSwagData.Next())
                {
                    if (sd is SwagDataTable sdt && !sdt.IsInitialized)
                    {
                        SwagDataGrid.InitSwagDataTable(sdt);
                    }
                }
            });

            SwagDataSet sdsSession = SwagWPFContainer.SwagDataService.SwagDataSets.Where(sds => sds.Display == SessionName).FirstOrDefault();

            if (sdsSession == SwagDataSet)
            {
                SwagWPFContainer.SwagDataService.SwagDataSets.Update(SwagDataSet);
            }
            else
            {
                SwagWPFContainer.SwagDataService.SwagDataSets.Add(SwagDataSet);
            }
            SwagWindow.GlobalIsBusy = false;
            SwagWPFContainer.SwagDataService.Save();
        }
Ejemplo n.º 2
0
        private async void Session_Load(object sender, RoutedEventArgs e)
        {
            SwagDataSet sdsSession = null;

            SwagWindow.GlobalIsBusy = true;
            await Task.Run(() =>
            {
                sdsSession = SwagWPFContainer.SwagDataService.SwagDataSets.Where(sds => sds.Display == SessionName).FirstOrDefault();
            });

            if (sdsSession != null)
            {
                SwagWPFContainer.SwagDataService.Init(sdsSession);
                SwagDataSet = sdsSession;
                SwagItemPreOrderIterator <SwagData> itrSwagData = SwagDataSet.CreateIterator();
                for (SwagData sd = itrSwagData.First(); !itrSwagData.IsDone; sd = itrSwagData.Next())
                {
                    if (sd is SwagDataTable sdt)
                    {
                        if (!sdt.IsInitialized)
                        {
                            SwagDataGrid.InitSwagDataTable(sdt);
                        }
                        sdt.FilterCommand.Execute(null);
                    }
                }
            }
            SwagWindow.GlobalIsBusy = false;
        }
Ejemplo n.º 3
0
        private async void Search_OnSearch(object sender, RoutedEventArgs e)
        {
            SearchTextBox searchTextBox = (SearchTextBox)sender;
            SwagData      swagData      = (SwagData)((SwagTabItem)searchTextBox.DataContext).ViewModel;
            SwagItemPreOrderIterator <SwagData> itrSwagData = SwagDataSet.CreateIterator();

            SwagWindow.GlobalIsBusy = true;
            await Task.Run(() =>
            {
                for (SwagData sd = itrSwagData.First(); !itrSwagData.IsDone; sd = itrSwagData.Next())
                {
                    if (sd is SwagDataTable sdg && !sdg.IsInitialized)
                    {
                        SwagDataGrid.InitSwagDataTable(sdg);
                    }
                }
            });

            SwagWindow.GlobalIsBusy = false;

            SwagDataResult swagDataResult = SwagDataSet.Search(searchTextBox.Text, searchTextBox.FilterMode,
                                                               (sdc, sdr, searchValue, filterMode) =>
            {
                String compareTarget = sdr.DataRow[sdc.ColumnName].ToString();
                String compareValue  = searchValue;
                return(SearchHelper.Evaluate(compareTarget, compareValue, false, filterMode, false));
            });

            swagData.SwagDataResult = swagDataResult;
        }
Ejemplo n.º 4
0
        private void SwagDataSetHeader_Export(object sender, RoutedEventArgs e)
        {
            FrameworkElement fe            = (FrameworkElement)sender;
            SwagDataSet      swagDataSet   = (SwagDataSet)fe.DataContext;
            ParseStrategy    parseStrategy = (ParseStrategy)fe.Tag;

            switch (parseStrategy)
            {
            case ParseStrategy.Sqlite:
                SaveFileDialog sfdSqlite = new SaveFileDialog();
                sfdSqlite.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                sfdSqlite.FileName         = Path.ChangeExtension(swagDataSet.Display, null);
                sfdSqlite.Filter           = "SQLite files (*.db;*.sqlite)|*.db;*.sqlite";
                System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                {
                    if (sfdSqlite.ShowDialog() ?? false)
                    {
                        DataSetSqliteFileConverter dsConverter = new DataSetSqliteFileConverter();
                        dsConverter.FromDataSet(null, swagDataSet.GetDataSet(), sfdSqlite.FileName);
                    }
                }));
                break;

            case ParseStrategy.Csv:
                System.Windows.Forms.FolderBrowserDialog fbdCsv = new System.Windows.Forms.FolderBrowserDialog();
                fbdCsv.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                {
                    if (fbdCsv.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        DataSetCsvFileConverter dsConverter = new DataSetCsvFileConverter();

                        SwagItemPreOrderIterator <SwagData> itrSwagData = swagDataSet.CreateIterator();
                        swagDataSet.Display = swagDataSet.Display ?? "DataSet";
                        for (SwagData sd = itrSwagData.First(); !itrSwagData.IsDone; sd = itrSwagData.Next())
                        {
                            if (sd is SwagDataSet sds)
                            {
                                String destFolder = "";

                                //If exporting root and root has blank display, use DataSet
                                if (swagDataSet == SwagDataSet && string.IsNullOrEmpty(swagDataSet.Display))
                                {
                                    destFolder = Path.Combine(fbdCsv.SelectedPath, "DataSet", sds.Path);
                                }
                                else
                                {
                                    destFolder = Path.Combine(fbdCsv.SelectedPath, sds.Path);
                                }

                                //limit to depth of 1 when exporting DataSet
                                dsConverter.FromDataSet(null, sds.GetDataSet(1), destFolder);
                            }
                        }
                    }
                }));
                break;
            }
        }
Ejemplo n.º 5
0
        public static void InitSwagDataSet(SwagDataSet swagDataSet)
        {
            #region FilterTabsCommand
            SwagItemPreOrderIterator <SwagData> itrSwagData = swagDataSet.CreateIterator();
            for (SwagData swagData = itrSwagData.First(); !itrSwagData.IsDone; swagData = itrSwagData.Next())
            {
                if (swagData is SwagDataSet sds)
                {
                    sds.FilterTabsCommand =
                        new RelayCommand(() =>
                    {
                        String filter         = sds.Settings["Tabs"]["Search"]["Text"].GetValue <String>();
                        FilterMode filterMode = sds.Settings["Tabs"]["Search"]["FilterMode"].GetValue <FilterMode>();
                        UIHelper.GetCollectionView(sds.Children).Filter = (item) =>
                        {
                            SwagData swagData         = (SwagData)item;
                            Boolean itemMatch         = SearchHelper.Evaluate(swagData.Display, filter, false, filterMode, false);
                            Boolean childDataSetMatch = false;

                            if (swagData is SwagDataSet subDataSet)
                            {
                                subDataSet.Settings["Tabs"]["Search"]["Text"].SetValue(filter);
                                subDataSet.Settings["Tabs"]["Search"]["FilterMode"].SetValue(filterMode);
                                subDataSet.FilterTabsCommand.Execute(null);
                                ICollectionView subchildren = UIHelper.GetCollectionView(subDataSet.Children);
                                childDataSetMatch           = !subchildren.IsEmpty;
                            }

                            return(itemMatch || childDataSetMatch);
                        };
                    });
                }
            }
            #endregion FilterTabsCommand

            #region InitSettings
            swagDataSet.Settings.TryAddChildSetting("Tabs", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.TableSearch
            });
            swagDataSet.Settings["Tabs"].TryAddChildSetting("Search", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.Magnify
            });
            swagDataSet.Settings["Tabs"]["Search"].TryAddChildSetting("Text", new SwagSettingString()
            {
                Icon = PackIconBoxIconsKind.RegularText
            });
            swagDataSet.Settings["Tabs"]["Search"].TryAddChildSetting("FilterMode", new SwagSetting <FilterMode>()
            {
                SettingType = SettingType.DropDown, Value = FilterMode.CONTAINS, Icon = PackIconUniconsKind.Filter, ItemsSource = (FilterMode[])Enum.GetValues(typeof(FilterMode))
            });
            swagDataSet.Settings.TryAddChildSetting("Search", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.TextSearch
            });
            swagDataSet.Settings["Search"].TryAddChildSetting("Text", new SwagSettingString {
                Icon = PackIconBoxIconsKind.RegularText
            });
            swagDataSet.Settings["Search"].TryAddChildSetting("FilterMode", new SwagSetting <FilterMode>()
            {
                SettingType = SettingType.DropDown, Value = FilterMode.CONTAINS, Icon = PackIconUniconsKind.Filter, ItemsSource = (FilterMode[])Enum.GetValues(typeof(FilterMode))
            });
            #endregion InitSettings

            #region InitTabs
            SwagTabGroup tabs = new SwagTabGroup();
            tabs["Tabs"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.TableSearch
            };
            tabs["Parse"] = new SwagTabGroup()
            {
                Icon = PackIconZondiconsKind.DocumentAdd
            };
            tabs["Parse"]["Paste"] = new SwagTabGroup()
            {
                Icon = PackIconZondiconsKind.Paste
            };
            tabs["Parse"]["Paste"]["TSV"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.AlphaTBoxOutline
            };
            tabs["Parse"]["Paste"]["JSON"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.CodeJson
            };
            tabs["Parse"]["Paste"]["XML"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.Xml
            };
            tabs["Search"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.TextSearch
            };
            tabs["Session"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.WindowRestore
            };
            tabs["Test"] = new SwagTabItem()
            {
                Icon = PackIconOcticonsKind.Beaker
            };
            tabs["Settings"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.Cog
            };
            swagDataSet.Tabs = tabs;
            SwagItemPreOrderIterator <SwagTabItem> itrTabs = tabs.CreateIterator();
            for (SwagTabItem tabItem = itrTabs.First(); !itrTabs.IsDone; tabItem = itrTabs.Next())
            {
                tabItem.ViewModel = swagDataSet;
            }
            #endregion InitTabs
        }
Ejemplo n.º 6
0
        public static void InitSwagDataTable(SwagDataTable swagDataTable)
        {
            if (swagDataTable.DataTable == null) //Build DataTable
            {
                DataTable dt = new DataTable(swagDataTable.Display);
                foreach (KeyValuePair <String, SwagDataColumn> kvpCol in swagDataTable.Columns)
                {
                    kvpCol.Value.SwagDataTable = swagDataTable;
                    dt.Columns.Add(kvpCol.Value.DataColumn());
                }

                swagDataTable.DictRows.Clear();
                foreach (SwagData swagData in swagDataTable.Children)
                {
                    if (swagData is SwagDataRow swagDataRow)
                    {
                        DataRow dr = dt.NewRow();
                        foreach (KeyValuePair <String, JToken> kvpField in swagDataRow.Value)
                        {
                            dr[kvpField.Key] = ((JValue)kvpField.Value).Value;
                        }
                        swagDataTable.DictRows.Add(dr, swagDataRow);
                        dt.Rows.Add(dr);
                        swagDataRow.DataRow = dr;
                    }
                }

                swagDataTable.DataTable = dt;
                swagDataTable.InitColumns();
            }
            else //Build From DataTable
            {
                #region Clear Columns and Rows for instance
                swagDataTable.Columns.Clear();
                swagDataTable.Children.Clear();
                #endregion Clear Columns and Rows for instance

                #region Add Columns and Rows for instance
                swagDataTable.InitColumns();
                foreach (DataColumn dc in swagDataTable.DataTable.Columns)
                {
                    SwagDataColumn sdc = new SwagDataColumn()
                    {
                        ColumnName = dc.ColumnName, DataType = dc.DataType
                    };
                    sdc.SwagDataTable  = swagDataTable;
                    sdc.DataTypeString = sdc.DataTypeString;
                    swagDataTable.Children.Add(sdc);
                    swagDataTable.Columns.Add(dc.ColumnName, sdc);
                }

                swagDataTable.DictRows.Clear();
                foreach (DataRow dr in swagDataTable.DataTable.Rows)
                {
                    SwagDataRow row = new SwagDataRow(dr);
                    row.Value           = row.Value;
                    row.ValueTypeString = row.ValueTypeString;
                    swagDataTable.Children.Add(row);
                    swagDataTable.DictRows.Add(row.DataRow, row);
                }
                #endregion Add Columns and Rows for instance
            }

            #region InitViews
            CollectionViewSource columnsVisibilitySource, columnsFilterSource;
            columnsVisibilitySource = new CollectionViewSource()
            {
                Source = swagDataTable.Columns
            };
            columnsFilterSource = new CollectionViewSource()
            {
                Source = swagDataTable.Columns
            };
            columnsFilterSource.View.Filter = (itm) =>
            {
                KeyValuePair <String, SwagDataColumn> kvp = (KeyValuePair <String, SwagDataColumn>)itm;
                return(kvp.Value.HasAppliedFilter);
            };
            swagDataTable.ColumnsVisibilityView = columnsVisibilitySource.View;
            swagDataTable.ColumnsFilterView     = columnsFilterSource.View;
            #endregion InitViews

            #region FilterCommand
            swagDataTable.FilterCommand = new RelayCommand(() =>
            {
                ICollectionView view = CollectionViewSource.GetDefaultView(swagDataTable.DataTable.DefaultView);
                if (view is BindingListCollectionView)      //Assuming you are DataView for now
                {
                    BindingListCollectionView bindingView = (BindingListCollectionView)view;
                    //https://stackoverflow.com/questions/9385489/why-errors-when-filters-datatable-with-collectionview
                    bindingView.CancelEdit();

                    String combinedFilter = "";
                    foreach (KeyValuePair <string, SwagDataColumn> kvp in swagDataTable.Columns)
                    {
                        if (kvp.Value.HasAppliedFilter)
                        {
                            String filterTemp = kvp.Value.AppliedFilter;
                            if (kvp.Value.AppliedFilter.Contains("'(Blanks)'"))
                            {
                                filterTemp = string.Format("({0} OR CONVERT([{1}], 'System.String') = '' OR [{1}] IS NULL)", kvp.Value.AppliedFilter, kvp.Key);
                            }
                            combinedFilter = string.Format("{0}{1} AND ", combinedFilter, filterTemp);
                        }
                    }

                    if (combinedFilter.EndsWith("AND "))
                    {
                        combinedFilter = combinedFilter.Substring(0, combinedFilter.Length - 4);
                    }

                    bindingView.CustomFilter = combinedFilter;
                }

                columnsFilterSource.View.Refresh();
            });
            #endregion FilterCommand

            #region ExportCommand
            swagDataTable.ExportCommand = new RelayCommand(() =>
            {
                IDataTableConverter converter  = null;
                string dialogFilter            = "";
                SwagTableExportType exportType = swagDataTable.Settings["Export"]["Type"].GetValue <SwagTableExportType>();
                switch (exportType)
                {
                case SwagTableExportType.Csv:
                    converter    = new DataTableCsvStringConverter();
                    dialogFilter = "CSV files (*.csv)|*.csv";
                    break;

                case SwagTableExportType.TSql_Command:
                    converter    = new DataTableTSqlCommandConverter();
                    dialogFilter = "SQL files (*.sql)|*.sql";
                    break;

                case SwagTableExportType.Sqlite:
                    SaveFileDialog sfd   = new SaveFileDialog();
                    sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                    sfd.FileName         = Path.ChangeExtension(swagDataTable.DataTable.TableName, null);
                    sfd.Filter           = "SQLite files (*.db;*.sqlite)|*.db;*.sqlite";
                    System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        if (sfd.ShowDialog() ?? false)
                        {
                            DataSetSqliteFileConverter dsConverter = new DataSetSqliteFileConverter();
                            DataSet ds = new DataSet();
                            ds.Tables.Add(swagDataTable.DataTable.Copy());
                            dsConverter.FromDataSet(null, ds, sfd.FileName);
                        }
                    }));
                    return;

                case SwagTableExportType.Sqlite_Command:
                    converter    = new DataTableSqliteCommandConverter();
                    dialogFilter = "SQLite command files (*.cmd)|*.cmd";
                    break;
                }

                Object output = converter.FromDataTableToObject(new DataTableConvertParams(), swagDataTable.DataTable.DefaultView.ToTable());

                switch (swagDataTable.Settings["Export"]["Destination"].GetValue <SwagTableDestinationType>())
                {
                case SwagTableDestinationType.Clipboard:
                    Clipboard.SetText(output.ToString());
                    break;

                case SwagTableDestinationType.File:
                    SaveFileDialog sfd   = new SaveFileDialog();
                    sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                    sfd.FileName         = swagDataTable.DataTable.TableName;
                    sfd.Filter           = dialogFilter;

                    System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        if (sfd.ShowDialog() ?? false)
                        {
                            File.WriteAllText(sfd.FileName, output.ToString());
                        }
                    }));
                    break;

                case SwagTableDestinationType.New_Window:
                    Window window         = new Window();
                    TextBox textBox       = new TextBox();
                    textBox.AcceptsReturn = textBox.AcceptsTab = true;
                    textBox.Text          = output.ToString();
                    window.Content        = textBox;
                    window.Show();
                    break;
                }
            });
            #endregion ExportCommand

            #region ImportCommand
            swagDataTable.ImportCommand = new RelayCommand(() =>
            {
                IDataTableConverter converter = null;
                DataTableConvertParams cp     = new DataTableConvertParams();

                string dialogFilter = "";
                String inputText    = "";

                switch (swagDataTable.Settings["Import"]["Type"].GetValue <SwagTableImportType>())
                {
                case SwagTableImportType.Csv:
                    converter    = new DataTableCsvStringConverter();
                    dialogFilter = "CSV files (*.csv)|*.csv";
                    break;

                case SwagTableImportType.Tsv:
                    converter     = new DataTableCsvStringConverter();
                    cp.FieldDelim = '\t';
                    dialogFilter  = "TSV files (*.tsv)|*.tsv";
                    break;
                }

                switch (swagDataTable.Settings["Import"]["Source"].GetValue <SwagTableSourceType>())
                {
                case SwagTableSourceType.File:
                    OpenFileDialog ofd   = new OpenFileDialog();
                    ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                    ofd.Filter           = dialogFilter;

                    System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        if (ofd.ShowDialog() ?? false)
                        {
                            inputText = File.ReadAllText(ofd.FileName);
                        }
                        else
                        {
                            return;
                        }
                    }));
                    break;

                case SwagTableSourceType.Clipboard:
                    inputText = Clipboard.GetText();
                    break;
                }

                DataTable dtInput       = converter.ToDataTable(cp, inputText);
                swagDataTable.DataTable = dtInput;
            });
            #endregion ImportCommand

            #region ApplyColumnVisibilityFilterCommand
            swagDataTable.ApplyColumnVisibilityFilterCommand =
                new RelayCommand(() =>
            {
                columnsVisibilitySource.View.Filter = (itm) =>
                {
                    KeyValuePair <String, SwagDataColumn> kvp = (KeyValuePair <String, SwagDataColumn>)itm;
                    return(SearchHelper.Evaluate(
                               kvp.Key,
                               swagDataTable.Settings["ColumnEditor"]["Visibility"]["Search"]["Text"].GetValue <string>(),
                               false,
                               swagDataTable.Settings["ColumnEditor"]["Visibility"]["Search"]["FilterMode"].GetValue <FilterMode>(),
                               false));
                };
            });
            #endregion ApplyColumnVisibilityFilterCommand

            #region ApplyColumnFiltersFilterCommand
            swagDataTable.ApplyColumnFiltersFilterCommand =
                new RelayCommand(() =>
            {
                columnsFilterSource.View.Filter = (itm) =>
                {
                    KeyValuePair <String, SwagDataColumn> kvp = (KeyValuePair <String, SwagDataColumn>)itm;
                    return(kvp.Value.HasAppliedFilter && (SearchHelper.Evaluate(
                                                              kvp.Key,
                                                              swagDataTable.Settings["ColumnEditor"]["Filters"]["Search"]["Text"].GetValue <string>(),
                                                              false,
                                                              swagDataTable.Settings["ColumnEditor"]["Filters"]["Search"]["FilterMode"].GetValue <FilterMode>(),
                                                              false) || SearchHelper.Evaluate(
                                                              kvp.Value.AppliedFilter,
                                                              swagDataTable.Settings["ColumnEditor"]["Filters"]["Search"]["Text"].GetValue <string>(),
                                                              false,
                                                              swagDataTable.Settings["ColumnEditor"]["Filters"]["Search"]["FilterMode"].GetValue <FilterMode>(),
                                                              false)));
                };
            });
            #endregion ApplyColumnFiltersFilterCommand

            #region ResetColumnsCommand
            swagDataTable.ResetColumnsCommand =
                new RelayCommand(() =>
            {
                swagDataTable.DelaySave        = true;
                columnsVisibilitySource.Source = columnsFilterSource.Source = swagDataTable.Columns;
                columnsVisibilitySource.View.Refresh();
                columnsFilterSource.View.Refresh();
                swagDataTable.OnPropertyChangedPublic("ColumnsView");
                swagDataTable.OnPropertyChangedPublic("ColumnCount");
                swagDataTable.DelaySave = false;
                var tempCols            = swagDataTable.Columns;
                swagDataTable.Columns   = null;
                swagDataTable.Columns   = tempCols;
            });
            #endregion ResetColumnsCommand

            #region InitSettings
            swagDataTable.Settings.TryAddChildSetting("ColumnEditor", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.TableColumn, Icon2 = PackIconFontAwesomeKind.EditSolid
            });
            swagDataTable.Settings["ColumnEditor"].TryAddChildSetting("Visibility", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.TableColumn, Icon2 = PackIconMaterialKind.Eye
            });
            swagDataTable.Settings["ColumnEditor"]["Visibility"].TryAddChildSetting("Search", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.Magnify
            });
            swagDataTable.Settings["ColumnEditor"]["Visibility"]["Search"].TryAddChildSetting("Text", new SwagSetting <String>()
            {
                Icon = PackIconBoxIconsKind.RegularText
            });
            swagDataTable.Settings["ColumnEditor"]["Visibility"]["Search"].TryAddChildSetting("FilterMode", new SwagSetting <FilterMode>()
            {
                SettingType = SettingType.DropDown, Value = FilterMode.CONTAINS, Icon = PackIconUniconsKind.Filter, ItemsSource = (FilterMode[])Enum.GetValues(typeof(FilterMode))
            });
            swagDataTable.Settings["ColumnEditor"].TryAddChildSetting("Filters", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.TableColumn, Icon2 = PackIconMaterialKind.Filter
            });
            swagDataTable.Settings["ColumnEditor"]["Filters"].TryAddChildSetting("Search", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.Magnify
            });
            swagDataTable.Settings["ColumnEditor"]["Filters"]["Search"].TryAddChildSetting("Text", new SwagSetting <String>()
            {
                Icon = PackIconBoxIconsKind.RegularText
            });
            swagDataTable.Settings["ColumnEditor"]["Filters"]["Search"].TryAddChildSetting("FilterMode", new SwagSetting <FilterMode>()
            {
                SettingType = SettingType.DropDown, Value = FilterMode.CONTAINS, Icon = PackIconUniconsKind.Filter, ItemsSource = (FilterMode[])Enum.GetValues(typeof(FilterMode))
            });
            swagDataTable.Settings.TryAddChildSetting("Search", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.Table, Icon2 = PackIconMaterialKind.Magnify
            });
            swagDataTable.Settings["Search"].TryAddChildSetting("Text", new SwagSetting <String>()
            {
                Icon = PackIconBoxIconsKind.RegularText
            });
            swagDataTable.Settings["Search"].TryAddChildSetting("FilterMode", new SwagSetting <FilterMode>()
            {
                SettingType = SettingType.DropDown, Value = FilterMode.CONTAINS, Icon = PackIconUniconsKind.Filter, ItemsSource = (FilterMode[])Enum.GetValues(typeof(FilterMode))
            });
            swagDataTable.Settings.TryAddChildSetting("Export", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.Export
            });
            swagDataTable.Settings["Export"].TryAddChildSetting("Type", new SwagSetting <SwagTableExportType>()
            {
                SettingType = SettingType.DropDown, Value = SwagTableExportType.Csv, Icon = PackIconMaterialKind.Export, Icon2 = PackIconFontAwesomeKind.ShapesSolid, ItemsSource = (SwagTableExportType[])Enum.GetValues(typeof(SwagTableExportType))
            });
            swagDataTable.Settings["Export"].TryAddChildSetting("Destination", new SwagSetting <SwagTableDestinationType>()
            {
                SettingType = SettingType.DropDown, Value = SwagTableDestinationType.Clipboard, Icon = PackIconMaterialKind.Target, ItemsSource = (SwagTableDestinationType[])Enum.GetValues(typeof(SwagTableDestinationType))
            });
            swagDataTable.Settings.TryAddChildSetting("Import", new SwagSettingGroup()
            {
                Icon = PackIconMaterialKind.Import
            });
            swagDataTable.Settings["Import"].TryAddChildSetting("Type", new SwagSetting <SwagTableImportType>()
            {
                SettingType = SettingType.DropDown, Value = SwagTableImportType.Tsv, Icon = PackIconMaterialKind.Import, Icon2 = PackIconFontAwesomeKind.ShapesSolid, ItemsSource = (SwagTableImportType[])Enum.GetValues(typeof(SwagTableImportType))
            });
            swagDataTable.Settings["Import"].TryAddChildSetting("Source", new SwagSetting <SwagTableSourceType>()
            {
                SettingType = SettingType.DropDown, Value = SwagTableSourceType.Clipboard, Icon = PackIconMaterialKind.SourceCommitStart, ItemsSource = (SwagTableSourceType[])Enum.GetValues(typeof(SwagTableSourceType))
            });
            #endregion InitSettings

            #region InitTabs
            SwagTabGroup tabs = new SwagTabGroup();
            tabs["ColumnEditor"] = new SwagTabGroup()
            {
                Icon = PackIconMaterialKind.TableColumn, Icon2 = PackIconFontAwesomeKind.EditSolid, Display = "Column Editor"
            };
            tabs["Search"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.TextSearch
            };
            tabs["Export"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.Table, Icon2 = PackIconMaterialKind.ArrowRightThick
            };
            tabs["Import"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.Table, Icon2 = PackIconMaterialKind.ArrowLeftThick
            };
            tabs["Settings"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.Cog
            };
            tabs["ColumnEditor"]["Visibility"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.TableColumn, Icon2 = PackIconMaterialKind.Eye
            };
            tabs["ColumnEditor"]["Filters"] = new SwagTabItem()
            {
                Icon = PackIconMaterialKind.TableColumn, Icon2 = PackIconMaterialKind.Filter
            };
            //tabs["ColumnEditor"]["Add"] = new SwagTabItem() { Icon = PackIconMaterialKind.TableColumn, Icon2 = PackIconMaterialKind.Plus };
            //tabs["ColumnEditor"]["View"] = new SwagTabItem() { Icon = PackIconMaterialKind.TableColumn, Icon2 = PackIconMaterialKind.Magnify };
            swagDataTable.Tabs = tabs;
            SwagItemPreOrderIterator <SwagTabItem> iterator = tabs.CreateIterator();
            for (SwagTabItem tabItem = iterator.First(); !iterator.IsDone; tabItem = iterator.Next())
            {
                tabItem.ViewModel = swagDataTable;
            }
            //swagDataTable.Tabs.SwagItemChanged += _tabs_SwagItemChanged;
            //swagDataTable.Tabs.PropertyChangedExtended += _tabs_PropertyChangedExtended;
            #endregion InitTabs

            swagDataTable.PropertyChanged += SwagDataTable_PropertyChanged;
            swagDataTable.InitDataTable();
            swagDataTable.IsInitialized = true;
        }
        public SwagWindowSettingGroup GetWindowSettingGroupByName(String groupName)
        {
            SwagLogger.LogStart(this, "{Service} {Action}", "WindowSettingService", "GetWindowSettingGroupByName");

            SwagWindowSettingGroup windowSettings = _swagWindowSettingsGroupRepository.Get(sg => sg.Name == groupName, null).FirstOrDefault();

            if (windowSettings != null)
            {
                #region Load SwagSettingUnitOfWork
                _swagSettingGroupRepository.RecursiveLoadCollection(windowSettings, "Children");

                #region OLD 2 Changing type to derived WPF type (not needed because of usage of CollectionToViewConverter)
                //#region Get Groups
                //Stack<SwagOverFlow.ViewModels.SwagSettingGroup> groups = new Stack<SwagOverFlow.ViewModels.SwagSettingGroup>();
                //SwagItemPreOrderIterator<SwagSetting> iterator = storedSettings.CreateIterator();
                //for (SwagSetting setting = iterator.First(); !iterator.IsDone; setting = iterator.Next())
                //{
                //    switch (setting)
                //    {
                //        case SwagOverFlow.ViewModels.SwagSettingGroup group:
                //            if (setting != storedSettings)
                //            {
                //                groups.Push(group);
                //            }
                //            break;
                //    }
                //}
                //#endregion Get Groups

                //#region Resolve Groups
                ////Attaching and detaching needs to be in reverse order
                //while (groups.Count > 0)
                //{
                //    SwagOverFlow.ViewModels.SwagSettingGroup group = groups.Pop();
                //    SwagSettingGroup newGroup = new SwagSettingGroup(group);
                //    if (group.Parent != null)
                //    {
                //        group.Parent = null;
                //    }
                //    work.SettingGroups.Detach(group);
                //    work.SettingGroups.Attach(newGroup);
                //}
                //#endregion Resolve Groups

                //windowSettings = new SwagWindowSettingGroup(storedSettings);
                //work.SettingGroups.Detach(storedSettings);
                //work.SettingGroups.Attach(windowSettings);
                //work.SettingGroups.RecursiveLoadChildren(windowSettings);
                #endregion OLD 2 Changing type to derived WPF type (not needed because of usage of CollectionToViewConverter)

                #region OLD - Dynamically creates generic type (handled in Properties of SwagItemViewModel/SwagSettingView instead)
                //SwagItemPreOrderIterator<SwagItemViewModel> iterator = windowSettings.CreateIterator();
                //for (SwagItemViewModel swagItem = iterator.First(); !iterator.IsDone; swagItem = iterator.Next())
                //{
                //    SwagSettingViewModel swagSetting = (SwagSettingViewModel)swagItem;
                //    if (swagSetting.IconString != null)
                //    {
                //        Type iconType = JsonConvert.DeserializeObject<Type>(swagSetting.IconTypeString);
                //        swagSetting.Icon = (Enum)Enum.Parse(iconType, swagSetting.IconString);
                //    }

                //    if (swagSetting.ItemsSource != null)
                //    {
                //        Type itemsSourceType = JsonConvert.DeserializeObject<Type>(swagSetting.ItemsSourceTypeString);
                //        swagSetting.ItemsSource = JsonConvert.DeserializeObject(swagSetting.ItemsSource.ToString(), itemsSourceType);
                //    }

                //    if (!String.IsNullOrEmpty(swagSetting.ValueTypeString))
                //    {
                //        Type typeGenericTemplate = typeof(SwagSettingViewModel<>);
                //        Type valueType = JsonConvert.DeserializeObject<Type>(swagSetting.ValueTypeString);
                //        Type[] typeArgs = { valueType };
                //        Type typeGeneric = typeGenericTemplate.MakeGenericType(typeArgs);
                //        windowSettings.Descendants.Remove(swagSetting);
                //        work.Settings.Delete(swagSetting);

                //        SwagSettingViewModel newSetting = (SwagSettingViewModel)Activator.CreateInstance(typeGeneric, swagSetting);
                //        newSetting.Children = swagSetting.Children;

                //        if (newSetting.ItemsSource != null)
                //        {
                //            Type itemsSourceType = JsonConvert.DeserializeObject<Type>(newSetting.ItemsSourceTypeString);
                //            newSetting.ItemsSource = JsonConvert.DeserializeObject(newSetting.ItemsSource.ToString(), itemsSourceType);
                //        }

                //        swagSetting.Parent.Children.Remove(swagSetting);
                //        swagSetting.Parent.Children.Add(newSetting);

                //        if (valueType == typeof(Boolean))
                //        {
                //            newSetting.Value = Boolean.Parse(swagSetting.Value.ToString());
                //        }
                //        else if (valueType == typeof(String) && swagSetting.Value != null)
                //        {
                //            newSetting.Value = swagSetting.Value.ToString();
                //        }
                //        else if (swagSetting.Value != null)
                //        {
                //            newSetting.Value = JsonConvert.DeserializeObject(swagSetting.Value.ToString(), valueType);
                //        }

                //        work.Settings.Insert(newSetting);
                //    }
                //}
                #endregion OLD
                #endregion Load SwagSettingUnitOfWork

                SwagLogger.Log("{Service} {Action}", "WindowSettingService", "Loaded from database");
            }

            if (windowSettings == null)
            {
                #region Create SwagWindowSettingGroup
                windowSettings      = new SwagWindowSettingGroup(true);
                windowSettings.Name = windowSettings.AlternateId = groupName;
                _swagWindowSettingsGroupRepository.Insert(windowSettings);

                SwagItemPreOrderIterator <SwagSetting> iterator = windowSettings.CreateIterator();
                for (SwagSetting setting = iterator.First(); !iterator.IsDone; setting = iterator.Next())
                {
                    //Mark these properites as modified to have them save properly
                    setting.ObjValue        = setting.ObjValue;
                    setting.ValueTypeString = setting.ValueTypeString;
                    setting.Data            = setting.Data;
                }

                _context.SaveChanges();
                SwagLogger.Log("{Service} {Action}", "WindowSettingService", "Created then saved to database");
                #endregion Create SwagWindowSettingGroup
            }

            SwagLogger.LogEnd(this, "{Service} {Action}", "WindowSettingService", "GetWindowSettingGroupByName");
            return(windowSettings);
        }