public DocumentEntryControl(BsonDocument document, bool readOnly, WindowController windowController = null) :
            this(windowController)
        {
            IsReadOnly = readOnly;

            _currentDocument = document;
            _entryControls   = new ObservableCollection <DocumentFieldData>();

            for (var i = 0; i < document.Keys.Count; i++)
            {
                var key = document.Keys.ElementAt(i);
                _entryControls.Add(NewField(key, IsReadOnly));
            }

            ListItems.ItemsSource = _entryControls;

            ButtonNext.Visibility = Visibility.Collapsed;
            ButtonPrev.Visibility = Visibility.Collapsed;
            AddExistingFieldsButton.Visibility = Visibility.Collapsed;

            if (readOnly)
            {
                ButtonClose.Visibility  = Visibility.Visible;
                ButtonOK.Visibility     = Visibility.Collapsed;
                ButtonCancel.Visibility = Visibility.Collapsed;
                DropNewField.Visibility = Visibility.Collapsed;
            }
        }
        public ArrayViewerControl(BsonArray array, bool readOnly, WindowController windowController = null)
        {
            _windowController = windowController;

            InitializeComponent();

            IsReadOnly = readOnly;

            Items = new ObservableCollection <ArrayUIItem>();

            var index = 0;

            foreach (BsonValue item in array)
            {
                Items.Add(NewItem(item, index));
                index++;
            }

            ItemsItems.ItemsSource = Items;

            if (readOnly)
            {
                ButtonClose.Visibility   = Visibility.Visible;
                ButtonOK.Visibility      = Visibility.Collapsed;
                ButtonCancel.Visibility  = Visibility.Collapsed;
                ButtonAddItem.Visibility = Visibility.Collapsed;
            }

            if (_windowController != null)
            {
                ScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
            }
        }
Exemple #3
0
        public ArrayEntryControl(BsonArray array, bool readOnly, WindowController windowController = null)
        {
            _windowController = windowController;

            InitializeComponent();

            IsReadOnly = readOnly;

            Items = new ObservableCollection <ArrayUIItem>();

            AddNewFieldCommand = new RelayCommand <BsonType?>(async type => await AddNewFieldHandler(type));

            var index = 0;

            foreach (BsonValue item in array)
            {
                Items.Add(NewItem(item, index));
                index++;
            }

            ItemSetControl.ItemsSource = Items;

            LoadNewFieldsPicker();

            Interaction.GetBehaviors(ButtonAddItem).Add(new ButtonClickOpenMenuBehavior());

            if (readOnly)
            {
                ButtonClose.Visibility   = Visibility.Visible;
                ButtonOK.Visibility      = Visibility.Collapsed;
                ButtonCancel.Visibility  = Visibility.Collapsed;
                ButtonAddItem.Visibility = Visibility.Collapsed;
            }

            if (_windowController != null)
            {
                ScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
                _windowController.CanClose     = CanDiscardChanges;
                _windowController.DialogResult = () => DialogResult;
            }

            Loaded += (sender, args) =>
            {
                ItemSetControl.Focus();
            };

            HasChanges = false;
        }
        public ArrayEntryControl(BsonArray array, bool readOnly, WindowController windowController = null)
        {
            _windowController = windowController;

            InitializeComponent();

            IsReadOnly = readOnly;

            Items = new ObservableCollection <ArrayUIItem>();

            AddNewFieldCommand = new RelayCommand <BsonType?>(async type => await AddNewFieldHandler(type));

            foreach (var item in FieldTypesMap)
            {
                var menuItem = new MenuItem
                {
                    Header           = item.Key,
                    Command          = AddNewFieldCommand,
                    CommandParameter = item.Key
                };
                AddFieldsTypesPanel.Children.Add(menuItem);
            }

            var index = 0;

            foreach (BsonValue item in array)
            {
                Items.Add(NewItem(item, index));
                index++;
            }

            ItemsItems.ItemsSource = Items;

            if (readOnly)
            {
                ButtonClose.Visibility   = Visibility.Visible;
                ButtonOK.Visibility      = Visibility.Collapsed;
                ButtonCancel.Visibility  = Visibility.Collapsed;
                ButtonAddItem.Visibility = Visibility.Collapsed;
            }

            if (_windowController != null)
            {
                ScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
            }
        }
Exemple #5
0
        private DocumentViewerControl(WindowController windowController = null)
        {
            _windowController = windowController;

            InitializeComponent();

            ListItems.Loaded += (sender, args) =>
            {
                if (_loaded)
                {
                    return;
                }

                InvalidateItemsSize();

                _loaded = true;
            };
        }
        public DocumentEntryControl(BsonDocument document, bool readOnly, WindowController windowController = null) :
            this(windowController)
        {
            IsReadOnly = readOnly;

            LoadDocument(document);

            // ButtonNext.Visibility = Visibility.Collapsed;
            // ButtonPrev.Visibility = Visibility.Collapsed;
            AddExistingFieldsButton.Visibility = Visibility.Collapsed;
            SaveChangesButton.Visibility       = Visibility.Collapsed;
            DiscardChangesButton.Visibility    = Visibility.Collapsed;
            PagePanel.Visibility = Visibility.Collapsed;

            if (readOnly)
            {
                ButtonClose.Visibility  = Visibility.Visible;
                ButtonOK.Visibility     = Visibility.Collapsed;
                ButtonCancel.Visibility = Visibility.Collapsed;
                DropNewField.Visibility = Visibility.Collapsed;
            }
        }
        // TODO: Infer Null value type to handle

        public static FrameworkElement GetBsonValueEditor(
            OpenEditorMode openMode,
            string bindingPath,
            BsonValue bindingValue,
            object bindingSource,
            bool readOnly,
            string keyName)
        {
            var binding = new Binding
            {
                Path                = new PropertyPath(bindingPath),
                Source              = bindingSource,
                Mode                = BindingMode.TwoWay,
                Converter           = new BsonValueToNetValueConverter(),
                UpdateSourceTrigger = UpdateSourceTrigger.Explicit
            };

            if (bindingValue.IsArray)
            {
                var arrayValue = bindingValue as BsonArray;

                if (openMode == OpenEditorMode.Window)
                {
                    var button = new Button
                    {
                        Content = $"[Array] {arrayValue?.Count} {keyName}",
                        Style   = StyleKit.MaterialDesignEntryButtonStyle
                    };

                    button.Click += (s, a) =>
                    {
                        arrayValue = bindingValue as BsonArray;

                        var windowController = new WindowController {
                            Title = "Array Editor"
                        };
                        var control = new ArrayEntryControl(arrayValue, readOnly, windowController);
                        var window  = new DialogWindow(control, windowController)
                        {
                            Owner  = Application.Current.MainWindow,
                            Height = 600
                        };

                        if (window.ShowDialog() == true)
                        {
                            arrayValue?.Clear();
                            arrayValue?.AddRange(control.EditedItems);

                            button.Content = $"[Array] {arrayValue?.Count} {keyName}";
                        }
                    };

                    return(button);
                }

                var contentView = new ContentExpander
                {
                    LoadButton =
                    {
                        Content = $"[Array] {arrayValue?.Count} {keyName}"
                    }
                };

                contentView.LoadButton.Click += (s, a) =>
                {
                    if (contentView.ContentLoaded)
                    {
                        return;
                    }

                    arrayValue = bindingValue as BsonArray;
                    var control = new ArrayEntryControl(arrayValue, readOnly);
                    control.CloseRequested += (sender, args) => { contentView.Content = null; };
                    contentView.Content     = control;
                };

                return(contentView);
            }

            if (bindingValue.IsDocument)
            {
                var expandLabel = "[Document]";
                if (openMode == OpenEditorMode.Window)
                {
                    var button = new Button
                    {
                        Content = expandLabel,
                        Style   = StyleKit.MaterialDesignEntryButtonStyle
                    };

                    button.Click += (s, a) =>
                    {
                        var windowController = new WindowController {
                            Title = "Document Editor"
                        };
                        var bsonDocument = bindingValue as BsonDocument;
                        var control      = new DocumentEntryControl(bsonDocument, readOnly, windowController);
                        var window       = new DialogWindow(control, windowController)
                        {
                            Owner  = Application.Current.MainWindow,
                            Height = 600
                        };

                        window.ShowDialog();
                    };

                    return(button);
                }

                var contentView = new ContentExpander
                {
                    LoadButton =
                    {
                        Content = expandLabel
                    }
                };

                contentView.LoadButton.Click += (s, a) =>
                {
                    if (contentView.ContentLoaded)
                    {
                        return;
                    }

                    var bsonDocument = bindingValue as BsonDocument;
                    var control      = new DocumentEntryControl(bsonDocument, readOnly);
                    control.CloseRequested += (sender, args) => { contentView.Content = null; };

                    contentView.Content = control;
                };

                return(contentView);
            }

            if (bindingValue.IsBoolean)
            {
                var check = new CheckBox
                {
                    IsEnabled         = !readOnly,
                    VerticalAlignment = VerticalAlignment.Center,
                    Margin            = new Thickness(0, 0, 0, 0)
                };

                check.SetBinding(ToggleButton.IsCheckedProperty, binding);
                return(check);
            }

            if (bindingValue.IsDateTime)
            {
                var datePicker = new DateTimePicker
                {
                    TextAlignment     = TextAlignment.Left,
                    IsReadOnly        = readOnly,
                    VerticalAlignment = VerticalAlignment.Center,
                    Margin            = new Thickness(0, 0, 0, 0)
                };

                datePicker.SetBinding(DateTimePicker.ValueProperty, binding);

                return(datePicker);
            }

            if (bindingValue.IsDouble)
            {
                var numberEditor = new DoubleUpDown
                {
                    TextAlignment     = TextAlignment.Left,
                    IsReadOnly        = readOnly,
                    VerticalAlignment = VerticalAlignment.Center,
                    Margin            = new Thickness(0, 0, 0, 0)
                };

                numberEditor.SetBinding(DoubleUpDown.ValueProperty, binding);
                return(numberEditor);
            }

            if (bindingValue.IsDecimal)
            {
                var numberEditor = new DecimalUpDown
                {
                    TextAlignment     = TextAlignment.Left,
                    IsReadOnly        = readOnly,
                    VerticalAlignment = VerticalAlignment.Center,
                    Margin            = new Thickness(0, 0, 0, 0)
                };

                numberEditor.SetBinding(DecimalUpDown.ValueProperty, binding);
                return(numberEditor);
            }

            if (bindingValue.IsInt32)
            {
                var numberEditor = new IntegerUpDown
                {
                    TextAlignment     = TextAlignment.Left,
                    IsReadOnly        = readOnly,
                    VerticalAlignment = VerticalAlignment.Center,
                    Margin            = new Thickness(0, 0, 0, 0)
                };

                numberEditor.SetBinding(IntegerUpDown.ValueProperty, binding);

                return(numberEditor);
            }

            if (bindingValue.IsInt64)
            {
                var numberEditor = new LongUpDown
                {
                    TextAlignment     = TextAlignment.Left,
                    IsReadOnly        = readOnly,
                    VerticalAlignment = VerticalAlignment.Center,
                    Margin            = new Thickness(0, 0, 0, 0)
                };

                numberEditor.SetBinding(LongUpDown.ValueProperty, binding);
                return(numberEditor);
            }

            if (bindingValue.IsString)
            {
                var stringEditor = new TextBox
                {
                    IsReadOnly                  = readOnly,
                    AcceptsReturn               = true,
                    VerticalAlignment           = VerticalAlignment.Center,
                    MaxHeight                   = 200,
                    MaxLength                   = 1024,
                    VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
                };

                stringEditor.SetBinding(TextBox.TextProperty, binding);
                return(stringEditor);
            }

            if (bindingValue.IsBinary)
            {
                var text = new TextBlock
                {
                    Text = "[Binary Data]",
                    VerticalAlignment = VerticalAlignment.Center,
                };

                return(text);
            }

            if (bindingValue.IsObjectId)
            {
                var text = new TextBox
                {
                    Text              = bindingValue.AsString,
                    IsReadOnly        = true,
                    VerticalAlignment = VerticalAlignment.Center,
                };

                return(text);
            }

            var defaultEditor = new TextBox
            {
                VerticalAlignment           = VerticalAlignment.Center,
                MaxHeight                   = 200,
                MaxLength                   = 1024,
                VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
            };

            defaultEditor.SetBinding(TextBox.TextProperty, binding);
            return(defaultEditor);
        }
Exemple #8
0
 public WindowTitleConverter(WindowController windowController)
 {
     _windowController = windowController;
 }
Exemple #9
0
 public DocumentEntryControl(DocumentReference document, WindowController windowController = null) : this(
         windowController)
 {
     LoadDocument(document);
 }
Exemple #10
0
 private DocumentEntryControl(WindowController windowController) : this()
 {
     _windowController = windowController;
 }
 private DocumentEntryControl(WindowController windowController) : this()
 {
     _windowController          = windowController;
     _windowController.CanClose = CanDiscardChanges;
 }