private void CreateGrid()
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            EditorUtils.EditorMode editorMode = EditorUtils.GetEditorMode();

            PropertyInfo[] properties = typeof(SolutionSettings).GetProperties();
            foreach (PropertyInfo property in properties)
            {
                var           customAttributes = (UIDescription[])property.GetCustomAttributes(typeof(UIDescription), true);
                UIDescription description      = (customAttributes.Length > 0 && customAttributes[0] != null)? customAttributes[0] : null;

                if (description != null && description.EditorModeFilter != EditorUtils.EditorMode.None && description.EditorModeFilter != editorMode)
                {
                    continue;
                }

                var elementGrid = new Grid();
                elementGrid.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = new GridLength(170)
                });
                elementGrid.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = new GridLength(1, GridUnitType.Star)
                });

                var label = new Label();
                label.Content = description == null || description.Label == null ? property.Name : description.Label;
                label.ToolTip = description == null? null : description.Tooltip;

                Grid.SetColumn(label, 0);
                elementGrid.Children.Add(label);

                if (property.PropertyType == typeof(string))
                {
                    var inputControl = new TextBox();
                    inputControl.VerticalAlignment = VerticalAlignment.Center;
                    inputControl.SetBinding(TextBox.TextProperty, new Binding("Options." + property.Name));
                    inputControl.Margin = new Thickness(5);
                    Grid.SetColumn(inputControl, 1);
                    elementGrid.Children.Add(inputControl);
                }
                else if (property.PropertyType == typeof(bool))
                {
                    var inputControl = new CheckBox();
                    inputControl.VerticalAlignment = VerticalAlignment.Center;
                    inputControl.SetBinding(CheckBox.IsCheckedProperty, new Binding("Options." + property.Name));
                    inputControl.Margin = new Thickness(5);
                    Grid.SetColumn(inputControl, 1);
                    elementGrid.Children.Add(inputControl);
                }

                optionStack.Children.Add(elementGrid);
            }
        }
        private IExtractor GetProjectExtractor()
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            var customSettings = SettingsManager.Instance.Settings;

            if (customSettings == null || customSettings.AutomaticExtraction)
            {
                switch (EditorUtils.GetEditorMode())
                {
                case EditorUtils.EditorMode.UnrealEngine:  return(new ExtractorUnreal());

                case EditorUtils.EditorMode.VisualStudio:  return(new ExtractorVisualStudio());

                case EditorUtils.EditorMode.CMake:         return(new ExtractorCMake());
                }
            }
            else
            {
                return(new ExtractorManual());
            }

            return(null);
        }