Ejemplo n.º 1
0
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            if (Template == null)
            {
                return;
            }

            PanelItemsHost = Template.FindName("PART_PanelItemsHost", this) as Panel;
            if (PanelItemsHost != null)
            {
                PanelItemsHost.Focusable = false;
                PanelItemsHost.InputBindings.Add(new KeyBinding(mainModel.ToggleFiltersCommand, new KeyGesture(Key.Back)));
                PanelItemsHost.InputBindings.Add(new KeyBinding(mainModel.ToggleFiltersCommand, new KeyGesture(Key.Escape)));
                PanelItemsHost.InputBindings.Add(new XInputBinding(mainModel.ToggleFiltersCommand, XInputButton.B));
            }

            var ButtonClear = new ButtonEx();

            ButtonClear.Command = mainModel.ClearFiltersCommand;
            ButtonClear.Content = ResourceProvider.GetString(LOC.ClearLabel);
            ButtonClear.SetResourceReference(ButtonEx.StyleProperty, "FilterPanelButtonEx");
            PanelItemsHost.Children.Add(ButtonClear);
            BindingTools.SetBinding(ButtonClear,
                                    FocusBahaviors.FocusBindingProperty,
                                    mainModel,
                                    nameof(mainModel.FilterPanelVisible));

            AssignBoolFilter(nameof(FilterSettings.IsInstalled), LOC.GameIsInstalledTitle);
            AssignBoolFilter(nameof(FilterSettings.IsUnInstalled), LOC.GameIsUnInstalledTitle);
            AssignBoolFilter(nameof(FilterSettings.Favorite), LOC.GameFavoriteTitle);
            AssignBoolFilter(nameof(FilterSettings.Hidden), LOC.GameHiddenTitle);
            AssignBoolFilter(nameof(FilterSettings.UseAndFilteringStyle), LOC.UseFilterStyleAndTitle);
            AssignFilter(GameField.PluginId, nameof(FilterSettings.Library), LOC.Library);
            AssignFilter(GameField.Platforms, nameof(FilterSettings.Platform), LOC.PlatformTitle);
            AssignFilter(GameField.Categories, nameof(FilterSettings.Category), LOC.CategoryLabel);

            var ButtonAdditional = new ButtonEx();

            ButtonAdditional.Command = mainModel.OpenAdditionalFiltersCommand;
            ButtonAdditional.Content = ResourceProvider.GetString(LOC.AditionalFilters);
            ButtonAdditional.SetResourceReference(ButtonEx.StyleProperty, "FilterPanelNagivationButton");
            BindingTools.SetBinding(
                ButtonAdditional,
                ButtonBase.TagProperty,
                mainModel.AppSettings.Fullscreen.FilterSettings,
                nameof(FullscreenFilterSettings.IsSubAdditionalFilterActive));
            PanelItemsHost.Children.Add(ButtonAdditional);

            var desc = new TextBlock();

            desc.Text = ResourceProvider.GetString(LOC.MenuSortByTitle);
            desc.SetResourceReference(ButtonEx.StyleProperty, "FilterPanelText");
            PanelItemsHost.Children.Add(desc);

            var SelectSortBy = new ComboBoxEx();

            SelectSortBy.SetResourceReference(ComboBoxEx.StyleProperty, "FilterPanelComboBoxEx");
            SelectSortBy.ItemsSource       = ItemsSource.GetEnumSources(typeof(SortOrder));
            SelectSortBy.DisplayMemberPath = nameof(ItemsSource.EnumItem.Name);
            SelectSortBy.SelectedValuePath = nameof(ItemsSource.EnumItem.Value);
            BindingTools.SetBinding(
                SelectSortBy,
                Selector.SelectedValueProperty,
                mainModel.AppSettings.Fullscreen.ViewSettings,
                nameof(FullscreenViewSettings.SortingOrder),
                BindingMode.TwoWay,
                UpdateSourceTrigger.PropertyChanged);
            PanelItemsHost.Children.Add(SelectSortBy);

            var SelectSortDirection = new ComboBoxEx();

            SelectSortDirection.SetResourceReference(ComboBoxEx.StyleProperty, "FilterPanelComboBoxEx");
            SelectSortDirection.ItemsSource       = ItemsSource.GetEnumSources(typeof(SortOrderDirection));
            SelectSortDirection.DisplayMemberPath = nameof(ItemsSource.EnumItem.Name);
            SelectSortDirection.SelectedValuePath = nameof(ItemsSource.EnumItem.Value);
            BindingTools.SetBinding(
                SelectSortDirection,
                Selector.SelectedValueProperty,
                mainModel.AppSettings.Fullscreen.ViewSettings,
                nameof(FullscreenViewSettings.SortingOrderDirection),
                BindingMode.TwoWay,
                UpdateSourceTrigger.PropertyChanged);
            PanelItemsHost.Children.Add(SelectSortDirection);

            desc      = new TextBlock();
            desc.Text = ResourceProvider.GetString(LOC.SettingsTopPanelFilterPresetsItem);
            desc.SetResourceReference(ButtonEx.StyleProperty, "FilterPanelText");
            PanelItemsHost.Children.Add(desc);

            var ComboFilterPresets = new ComboBoxEx();

            ComboFilterPresets.SetResourceReference(ComboBoxEx.StyleProperty, "FilterPanelComboBoxEx");
            BindingTools.SetBinding(ComboFilterPresets,
                                    ComboBox.ItemsSourceProperty,
                                    mainModel,
                                    nameof(mainModel.SortedFilterPresets));
            BindingTools.SetBinding(ComboFilterPresets,
                                    ComboBox.SelectedItemProperty,
                                    mainModel,
                                    nameof(mainModel.ActiveFilterPreset),
                                    mode: BindingMode.TwoWay);
            ComboFilterPresets.DisplayMemberPath = nameof(FilterPreset.Name);
            PanelItemsHost.Children.Add(ComboFilterPresets);

            var ButtonSaveFilter = new ButtonEx();

            BindingTools.SetBinding(ButtonSaveFilter,
                                    ButtonBase.CommandProperty,
                                    mainModel,
                                    nameof(mainModel.AddFilterPresetCommand));
            ButtonSaveFilter.SetResourceReference(ButtonEx.ContentTemplateProperty, "FilterPanelAddPresetTemplate");
            ButtonSaveFilter.SetResourceReference(ButtonEx.StyleProperty, "FilterPanelFilterPresetActionButton");

            var ButtonRenameFilter = new ButtonEx();

            BindingTools.SetBinding(ButtonRenameFilter,
                                    ButtonBase.CommandProperty,
                                    mainModel,
                                    nameof(mainModel.RenameFilterPresetCommand));
            BindingTools.SetBinding(ButtonRenameFilter,
                                    ButtonBase.CommandParameterProperty,
                                    mainModel,
                                    nameof(mainModel.ActiveFilterPreset));
            ButtonRenameFilter.SetResourceReference(ButtonEx.ContentTemplateProperty, "FilterPanelRenamePresetTemplate");
            ButtonRenameFilter.SetResourceReference(ButtonEx.StyleProperty, "FilterPanelFilterPresetActionButton");

            var ButtonDeleteFilter = new ButtonEx();

            BindingTools.SetBinding(ButtonDeleteFilter,
                                    ButtonBase.CommandProperty,
                                    mainModel,
                                    nameof(mainModel.RemoveFilterPresetCommand));
            BindingTools.SetBinding(ButtonDeleteFilter,
                                    ButtonBase.CommandParameterProperty,
                                    mainModel,
                                    nameof(mainModel.ActiveFilterPreset));
            ButtonDeleteFilter.SetResourceReference(ButtonEx.ContentTemplateProperty, "FilterPanelRemovePresetTemplate");
            ButtonDeleteFilter.SetResourceReference(ButtonEx.StyleProperty, "FilterPanelFilterPresetActionButton");

            var filterButtonGrid = new UniformGrid {
                Columns = 3
            };

            filterButtonGrid.Children.Add(ButtonSaveFilter);
            filterButtonGrid.Children.Add(ButtonRenameFilter);
            filterButtonGrid.Children.Add(ButtonDeleteFilter);
            PanelItemsHost.Children.Add(filterButtonGrid);
        }