]> granicus.if.org Git - handbrake/commitdiff
WinGui: Experimenting with InLine vs Preset Pane designs.
authorsr55 <sr55.hb@outlook.com>
Sun, 17 Sep 2017 15:13:31 +0000 (16:13 +0100)
committersr55 <sr55.hb@outlook.com>
Sun, 17 Sep 2017 15:13:31 +0000 (16:13 +0100)
win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
win/CS/HandBrakeWPF/Views/MainView.xaml
win/CS/HandBrakeWPF/Views/MainView.xaml.cs
win/CS/HandBrakeWPF/Views/ShellView.xaml
win/CS/HandBrakeWPF/defaultsettings.xml

index 5d7d10027cdc183d7019b159c3e1609a11feb4f2..3c8281145efce3ab2d8217d7b634ff2ca9c5d8fd 100644 (file)
@@ -89,6 +89,7 @@ namespace HandBrakeWPF.ViewModels
         private Preset selectedPreset;\r
         private EncodeTask queueEditTask;\r
         private int lastEncodePercentage;\r
+        private bool isPresetPanelShowing;\r
         private bool showSourceSelection;\r
         private BindingList<SourceMenuItem> drives;\r
         private bool canPause;\r
@@ -950,6 +951,31 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
+        /// <summary>\r
+        /// Gets or sets a value indicating whether is preset panel showing.\r
+        /// </summary>\r
+        public bool IsPresetPanelShowing\r
+        {\r
+            get\r
+            {\r
+                return this.isPresetPanelShowing;\r
+            }\r
+            set\r
+            {\r
+                if (!Equals(this.isPresetPanelShowing, value))\r
+                {\r
+                    this.isPresetPanelShowing = value;\r
+                    this.NotifyOfPropertyChange(() => this.IsPresetPanelShowing);\r
+\r
+                    // Save the setting if it has changed.\r
+                    if (this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowPresetPanel) != value)\r
+                    {\r
+                        this.userSettingService.SetUserSetting(UserSettingConstants.ShowPresetPanel, value);\r
+                    }\r
+                }\r
+            }\r
+        }\r
+\r
         /// <summary>\r
         /// Gets or sets a value indicating progress percentage.\r
         /// </summary>\r
@@ -1208,6 +1234,9 @@ namespace HandBrakeWPF.ViewModels
             // Perform an update check if required\r
             this.updateService.PerformStartupUpdateCheck(this.HandleUpdateCheckResults);\r
 \r
+            // Show or Hide the Preset Panel.\r
+            this.IsPresetPanelShowing = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowPresetPanel);\r
+\r
             // Setup the presets.\r
             this.presetService.Load();\r
             this.PresetsCategories = this.presetService.Presets;\r
index 57f2cb51838cd6b4dabb530e5138da63dffa34e3..34a7c159af64c40c56d9c213b93830d69d5fe2c1 100644 (file)
@@ -6,6 +6,10 @@
              xmlns:Properties="clr-namespace:HandBrakeWPF.Properties"\r
              xmlns:cal="http://www.caliburnproject.org"\r
              xmlns:menu="clr-namespace:HandBrakeWPF.Commands.Menu"\r
+             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"\r
+             xmlns:commands="clr-namespace:HandBrakeWPF.Commands"\r
+             xmlns:helpers="clr-namespace:HandBrakeWPF.Helpers"\r
+             xmlns:loc="clr-namespace:HandBrakeWPF.Services.Presets.Model"\r
              AllowDrop="True"\r
              FontSize="11"\r
              cal:Message.Attach="[Event Loaded] = [Action Load]"\r
 \r
         <Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />\r
 \r
+        <Style x:Key="textBlockOrangeStyle" TargetType="TextBlock">\r
+            <Setter Property="FontWeight" Value="Bold" />\r
+            <Setter Property="Padding" Value="5,5" />\r
+        </Style>\r
+\r
     </UserControl.Resources>\r
 \r
     <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">\r
@@ -81,6 +90,8 @@
                     <Separator />\r
                     <MenuItem Header="_Set Current as Default" cal:Message.Attach="[Event Click] = [Action PresetSetDefault]" />\r
                     <MenuItem Header="_Reset Built-In Presets" cal:Message.Attach="[Event Click] = [Action PresetReset]" />\r
+                    <Separator />\r
+                    <MenuItem IsCheckable="True" x:Name="showPresetPanelMenuItem" IsChecked="{Binding IsPresetPanelShowing}" Header="S_how Preset Panel" />\r
                 </MenuItem>\r
 \r
                 <MenuItem Header="_Queue" x:Name="queueMenu" Visibility="{Binding HasSource, Converter={StaticResource booleanConverter}, ConverterParameter=false}">\r
 \r
         <!--  Main Body  -->\r
         <Grid Grid.Row="1">\r
+            <Grid.ColumnDefinitions>\r
+                <ColumnDefinition Width="*" MinWidth="725"/>\r
+                <ColumnDefinition Width="Auto" />\r
+            </Grid.ColumnDefinitions>\r
             <Grid.RowDefinitions>\r
                 <RowDefinition Height="Auto" />\r
                 <RowDefinition Height="Auto" />\r
             <!--  Presets Options  -->\r
             <StackPanel Grid.Row="1" Orientation="Vertical"  Margin="10,5,10,5">\r
                 <Label Content="Presets" FontWeight="Bold" VerticalAlignment="Center" />\r
-                <StackPanel Orientation="Horizontal" Margin="8,0,0,0">\r
+                <StackPanel Orientation="Horizontal" Margin="8,0,0,0" Visibility="{Binding IsPresetPanelShowing, Converter={StaticResource boolToVisConverter}, ConverterParameter=true}">\r
                     <ComboBox ItemsSource="{Binding PresetsCategories}" SelectedItem="{Binding SelectedPresetCategory}" Width="150" DisplayMemberPath="Category"  Margin="5,0,0,0" VerticalAlignment="Center" />\r
                     <ComboBox ItemsSource="{Binding CategoryPresets}" SelectedItem="{Binding SelectedPreset}" Width="250" Margin="10,0,0,0" VerticalAlignment="Center">\r
                         <ComboBox.Resources>\r
                         </Button.ContextMenu>\r
                     </Button>\r
                 </StackPanel>\r
+                <StackPanel Margin="8,0,0,0" Orientation="Horizontal" Visibility="{Binding IsPresetPanelShowing, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}">\r
+                    <TextBlock Text="Selected Preset:" Margin="5,0,0,0" />\r
+                    <TextBlock Text="{Binding SelectedPreset.Name}" Margin="5,0,0,0" />\r
+                    <TextBlock Text="(Default)" Visibility="{Binding SelectedPreset.IsDefault, Converter={StaticResource boolToVisConverter}}" Margin="5,0,0,0" />\r
+                </StackPanel>\r
+                \r
+\r
             </StackPanel>\r
 \r
             <!--  Tab Control  -->\r
                 </Grid>\r
             </StackPanel>\r
 \r
+            <!--  Presets  -->\r
+            <GroupBox Grid.Row="0" Grid.RowSpan="4"\r
+                      Grid.Column="1"\r
+                      HorizontalAlignment="Stretch"\r
+                      VerticalAlignment="Stretch"\r
+                      Header="Presets"\r
+                      Margin="0,0,5,5"\r
+                      IsEnabled="{Binding HasSource, Converter={StaticResource booleanConverter}, ConverterParameter=false}"\r
+                      Visibility="{Binding IsPresetPanelShowing, Converter={StaticResource boolToVisConverter}}">\r
+\r
+\r
+                <Grid>\r
+                    <Grid.RowDefinitions>\r
+                        <RowDefinition Height="*" />\r
+                        <RowDefinition Height="Auto" />\r
+                    </Grid.RowDefinitions>\r
+\r
+                    <Grid.Resources>\r
+\r
+                        <HierarchicalDataTemplate DataType="{x:Type loc:Preset}">\r
+                            <StackPanel Orientation="Horizontal" >\r
+                                <StackPanel.Resources>\r
+                                    <Style TargetType="TextBlock">\r
+                                        <Style.Triggers>\r
+                                            <DataTrigger Binding="{Binding IsDefault}" Value="True" >\r
+                                                <Setter Property="FontStyle" Value="Italic" />\r
+                                            </DataTrigger>\r
+                                            <DataTrigger Binding="{Binding IsDefault}" Value="False" >\r
+                                                <Setter Property="FontStyle" Value="Normal" />\r
+                                            </DataTrigger>\r
+                                            <DataTrigger Binding="{Binding IsSelected}" Value="True">\r
+                                                <Setter Property="FontWeight" Value="Bold"/>\r
+                                            </DataTrigger>\r
+                                        </Style.Triggers>\r
+                                    </Style>\r
+                                </StackPanel.Resources>\r
+                                <TextBlock Text="{Binding Name}"/>\r
+                            </StackPanel>\r
+                        </HierarchicalDataTemplate>\r
+\r
+                        <HierarchicalDataTemplate DataType="{x:Type loc:PresetDisplayCategory}" ItemsSource="{Binding Presets}">\r
+                            <StackPanel Orientation="Horizontal" >\r
+                                <TextBlock Text="{Binding Category}" FontSize="14" />\r
+                            </StackPanel>\r
+                        </HierarchicalDataTemplate>\r
+                    </Grid.Resources>\r
+\r
+                    <TreeView x:Name="presetListTree" HorizontalAlignment="Stretch" AutomationProperties.Name="Presets List" ToolTip="{x:Static Properties:ResourcesTooltips.MainView_Presets}"\r
+                              VerticalAlignment="Stretch" BorderThickness="0,0,0,1" BorderBrush="LightGray"\r
+                              ItemsSource="{Binding PresetsCategories}"\r
+                              helpers:TreeViewHelper.TreeViewSelectedItem="{Binding Path=SelectedPreset, Mode=TwoWay}"\r
+                              PreviewMouseRightButtonDown="PresetListTree_OnPreviewMouseRightButtonDown">\r
+\r
+                        <TreeView.ItemContainerStyle>\r
+                            <Style BasedOn="{StaticResource {x:Type TreeViewItem}}" TargetType="TreeViewItem">\r
+                                <Setter Property="HorizontalAlignment" Value="Stretch" />\r
+                                <Setter Property="Padding" Value="4" />\r
+                                <Setter Property="ToolTip" Value="{Binding Description}" />\r
+                                <Setter Property="ToolTipService.InitialShowDelay" Value="1500"/>\r
+                                <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />\r
+                                <EventSetter Event="TreeViewItem.Collapsed" Handler="PresetTreeviewItemCollasped" />\r
+                                <Style.Triggers>\r
+                                    <Trigger Property="HasItems" Value="True">\r
+                                        <Setter Property="Focusable" Value="false" />\r
+                                    </Trigger>\r
+\r
+                                </Style.Triggers>\r
+                            </Style>\r
+                        </TreeView.ItemContainerStyle>\r
+\r
+                        <TreeView.ContextMenu>\r
+                            <ContextMenu AutomationProperties.Name="Presets List Context Menu">\r
+                                <MenuItem Header="{x:Static Properties:ResourcesUI.MainView_SetDefault}" cal:Message.Attach="[Event Click] = [Action PresetSetDefault]" />\r
+                                <Separator />\r
+                                <MenuItem Header="{x:Static Properties:ResourcesUI.MainView_UpdateSelectedPreset}" cal:Message.Attach="[Event Click] = [Action PresetUpdate]" />\r
+                                <MenuItem Header="{x:Static Properties:ResourcesUI.MainView_PresetManage}" cal:Message.Attach="[Event Click] = [Action PresetManage]" />\r
+                                <Separator />\r
+                                <MenuItem Header="{x:Static Properties:ResourcesUI.Preset_Import}" cal:Message.Attach="[Event Click] = [Action PresetImport]" />\r
+                                <MenuItem Header="{x:Static Properties:ResourcesUI.Preset_Export}" cal:Message.Attach="[Event Click] = [Action PresetExport]" />\r
+                                <Separator />\r
+                                <MenuItem Header="{x:Static Properties:ResourcesUI.MainView_ResetBuiltInPresets}" cal:Message.Attach="[Event Click] = [Action PresetReset]" />\r
+                            </ContextMenu>\r
+\r
+                        </TreeView.ContextMenu>\r
+\r
+                        <i:Interaction.Triggers>\r
+                            <commands:InputBindingTrigger>\r
+                                <commands:InputBindingTrigger.InputBinding>\r
+                                    <KeyBinding Key="Delete"/>\r
+                                </commands:InputBindingTrigger.InputBinding>\r
+                                <cal:ActionMessage MethodName="PresetRemove" />\r
+                            </commands:InputBindingTrigger>\r
+                        </i:Interaction.Triggers>\r
+\r
+                    </TreeView>\r
+\r
+                    <ToolBar Name="presetsToolBar"\r
+                             Grid.Row="1"\r
+                             HorizontalAlignment="Center"\r
+                             VerticalAlignment="Stretch"\r
+                             SnapsToDevicePixels="False"\r
+                             UseLayoutRounding="False"\r
+                             ToolBar.OverflowMode="Never" \r
+                             Background="Transparent"\r
+                             ToolBarTray.IsLocked="True"\r
+                             Loaded="ToolBarLoaded"\r
+                             KeyboardNavigation.TabNavigation="Continue" >\r
+\r
+                        <ToolBar.Resources>\r
+                            <Style TargetType="{x:Type ToolBarPanel}">\r
+                                <Setter Property="Orientation" Value="Vertical"/>\r
+                                <Setter Property="VerticalAlignment" Value="Center"/>\r
+                            </Style>\r
+\r
+                            <Style BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" TargetType="{x:Type Button}" />\r
+                        </ToolBar.Resources>\r
+\r
+                        <ToolBarOverflowPanel>\r
+                            <Button cal:Message.Attach="[Event Click] = [Action PresetAdd]" AutomationProperties.Name="Add Preset" ToolTip="{x:Static Properties:ResourcesTooltips.MainView_AddPreset}">\r
+                                <Button.Content>\r
+                                    <StackPanel Orientation="Horizontal">\r
+                                        <Image Width="20"\r
+                                               Height="20"\r
+                                               Source="Images/add.png"\r
+                                        />\r
+                                        <TextBlock Margin="2,0,0,0"\r
+                                                   VerticalAlignment="Center"\r
+                                                   Style="{StaticResource textBlockOrangeStyle}"\r
+                                                   Text="{x:Static Properties:ResourcesUI.Generic_Add}"\r
+                                        />\r
+                                    </StackPanel>\r
+                                </Button.Content>\r
+                            </Button>\r
+\r
+                            <Button Background="Transparent" cal:Message.Attach="[Event Click] = [Action PresetRemove]" AutomationProperties.Name="Remove Preset" ToolTip="{x:Static Properties:ResourcesTooltips.MainView_RemovePreset}">\r
+                                <Button.Content>\r
+                                    <StackPanel Orientation="Horizontal">\r
+                                        <Image Width="20"\r
+                                               Height="20"\r
+                                               Source="Images/remove.png"\r
+                                               SnapsToDevicePixels="True"\r
+                                        />\r
+                                        <TextBlock Margin="2,0,0,0"\r
+                                                   VerticalAlignment="Center"\r
+                                                   Style="{StaticResource textBlockOrangeStyle}"\r
+                                                   Text="{x:Static Properties:ResourcesUI.MainView_Remove}"\r
+                                        />\r
+                                    </StackPanel>\r
+                                </Button.Content>\r
+                            </Button>\r
+\r
+                            <Menu Background="Transparent" AutomationProperties.Name="Preset Options Dropdown" MinHeight="22" ToolTip="{x:Static Properties:ResourcesTooltips.MainView_PresetAdditionalOptions}">\r
+                                <MenuItem ToolBar.OverflowMode="Never">\r
+                                    <MenuItem.Header>\r
+                                        <StackPanel Orientation="Horizontal">\r
+                                            <Image Width="20"\r
+                                                   Height="20"\r
+                                                   Source="Images/Advanced.png"\r
+                                                   RenderOptions.BitmapScalingMode="HighQuality"\r
+                                            />\r
+                                            <TextBlock Margin="2,0,0,0"\r
+                                                       VerticalAlignment="Center"\r
+                                                       Style="{StaticResource textBlockOrangeStyle}"\r
+                                                       Text="{x:Static Properties:ResourcesUI.MainView_Options}"\r
+                                            />\r
+                                        </StackPanel>\r
+                                    </MenuItem.Header>\r
+                                    <MenuItem Header="{x:Static Properties:ResourcesUI.MainView_SetDefault}" cal:Message.Attach="[Event Click] = [Action PresetSetDefault]" />\r
+                                    <Separator />\r
+                                    <MenuItem Header="{x:Static Properties:ResourcesUI.MainView_UpdateSelectedPreset}" cal:Message.Attach="[Event Click] = [Action PresetUpdate]" />\r
+                                    <Separator />\r
+                                    <MenuItem Header="{x:Static Properties:ResourcesUI.Preset_Import}" cal:Message.Attach="[Event Click] = [Action PresetImport]" />\r
+                                    <MenuItem Header="{x:Static Properties:ResourcesUI.Preset_Export}" cal:Message.Attach="[Event Click] = [Action PresetExport]" />\r
+                                    <Separator />\r
+                                    <MenuItem Header="{x:Static Properties:ResourcesUI.MainView_ResetBuiltInPresets}" cal:Message.Attach="[Event Click] = [Action PresetReset]" />\r
+                                </MenuItem>\r
+                            </Menu>\r
+                        </ToolBarOverflowPanel>\r
+\r
+                    </ToolBar>\r
+                </Grid>\r
+            </GroupBox>\r
         </Grid>\r
+        \r
+        \r
 \r
         <!-- Source Selection-->\r
         <Controls:SourceSelection x:Name="sourceSelection"\r
index f6f1799c1b93e4a79d4b02e098687e4f4838cc5c..74220b160ee0293d109b1a0295028b740b24d00a 100644 (file)
@@ -86,5 +86,46 @@ namespace HandBrakeWPF.Views
                 button.ContextMenu.IsOpen = true;\r
             }\r
         }\r
+\r
+        private void ToolBarLoaded(object sender, RoutedEventArgs e)\r
+        {\r
+            ToolBar toolBar = sender as ToolBar;\r
+            if (toolBar != null)\r
+            {\r
+                var overflowGrid = toolBar.Template.FindName("OverflowGrid", toolBar) as FrameworkElement;\r
+                if (overflowGrid != null)\r
+                {\r
+                    overflowGrid.Visibility = Visibility.Collapsed;\r
+                }\r
+            }\r
+        }\r
+\r
+        private void PresetTreeviewItemCollasped(object sender, RoutedEventArgs e)\r
+        {\r
+            if (e.Source.GetType() == typeof(TreeViewItem))\r
+            {\r
+                TreeViewItem item = e.Source as TreeViewItem;\r
+                if (item != null) item.IsSelected = false;\r
+            }\r
+        }\r
+\r
+        private void PresetListTree_OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)\r
+        {\r
+            TreeViewItem treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject);\r
+\r
+            if (treeViewItem != null)\r
+            {\r
+                treeViewItem.Focus();\r
+                e.Handled = true;\r
+            }\r
+        }\r
+\r
+        private static TreeViewItem VisualUpwardSearch(DependencyObject source)\r
+        {\r
+            while (source != null && !(source is TreeViewItem))\r
+                source = VisualTreeHelper.GetParent(source);\r
+\r
+            return source as TreeViewItem;\r
+        }\r
     }\r
 }\r
index 5e29615d3f080b4d2099ac8f686617d97bfe89b6..0f31986c44e9c59c9be373a96904cab7cf8b1aa9 100644 (file)
@@ -6,9 +6,9 @@
         xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"\r
         xmlns:cal="http://www.caliburnproject.org"\r
         Title="{Data:Binding Path=MainViewModel.WindowTitle}"\r
-        Width="900"\r
+        Width="1015"\r
         Height="675"\r
-        MinWidth="800"\r
+        MinWidth="900"\r
         MinHeight="675"\r
         AllowDrop="True"\r
         SnapsToDevicePixels="True"\r
index 699927dadaa341c2ee4538910ee22e41a2f63383..a46b5103c7485100d1c0de1758a206487592391b 100644 (file)
       <anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" d4p1:type="q1:boolean" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">false</anyType>\r
     </value>\r
   </item>\r
+  <item>\r
+    <key>\r
+      <string>ShowPresetPanel</string>\r
+    </key>\r
+    <value>\r
+      <anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" d4p1:type="q1:boolean" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">false</anyType>\r
+    </value>\r
+  </item>\r
   <item>\r
     <key>\r
       <string>EnableQuickSync</string>\r