Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/Xamarin.PropertyEditing.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Maupin <ermaup@microsoft.com>2018-02-21 01:11:54 +0300
committerEric Maupin <ermaup@microsoft.com>2018-02-27 21:11:49 +0300
commit3c2834ff3dc85af9d6d41b996b7c07de0ebe2d85 (patch)
tree4322cc4e1ddcf1602d5b36e04925e11f4689126c /Xamarin.PropertyEditing.Windows
parentb60c70298654f4f8ed9b3d5cd2846ac8cbaacdfa (diff)
[Win] Clean up brush selection
This moves brush type logic to the VM, fixes some bugs in selection and makes material selection set a value for consistency.
Diffstat (limited to 'Xamarin.PropertyEditing.Windows')
-rw-r--r--Xamarin.PropertyEditing.Windows/BrushChoiceTemplateSelector.cs20
-rw-r--r--Xamarin.PropertyEditing.Windows/BrushEditorControl.cs7
-rw-r--r--Xamarin.PropertyEditing.Windows/BrushTabbedEditorControl.cs129
-rw-r--r--Xamarin.PropertyEditing.Windows/PropertyPresenter.cs10
-rw-r--r--Xamarin.PropertyEditing.Windows/Themes/Resources.xaml47
5 files changed, 47 insertions, 166 deletions
diff --git a/Xamarin.PropertyEditing.Windows/BrushChoiceTemplateSelector.cs b/Xamarin.PropertyEditing.Windows/BrushChoiceTemplateSelector.cs
index 03b591e..29d50a0 100644
--- a/Xamarin.PropertyEditing.Windows/BrushChoiceTemplateSelector.cs
+++ b/Xamarin.PropertyEditing.Windows/BrushChoiceTemplateSelector.cs
@@ -1,5 +1,9 @@
+using System;
+using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
+using Xamarin.PropertyEditing.Drawing;
+using Xamarin.PropertyEditing.ViewModels;
namespace Xamarin.PropertyEditing.Windows
{
@@ -33,15 +37,19 @@ namespace Xamarin.PropertyEditing.Windows
if (item == null)
return base.SelectTemplate (item, container);
- if (item is ChoiceItem choiceItem) {
- var choice = choiceItem.Value as string;
- if (choice == BrushTabbedEditorControl.None) return NoBrushTemplate;
- if (choice == BrushTabbedEditorControl.Solid) return SolidBrushTemplate;
- if (choice == BrushTabbedEditorControl.Resource) return ResourceBrushTemplate;
- if (choice == BrushTabbedEditorControl.MaterialDesign) return MaterialDesignBrushTemplate;
+ if (item is KeyValuePair<string, Type> choiceItem) {
+ if (choiceItem.Value == null)
+ return NoBrushTemplate;
+ if (choiceItem.Value == typeof(CommonSolidBrush))
+ return SolidBrushTemplate;
+ if (choiceItem.Value == typeof(Resource))
+ return ResourceBrushTemplate;
+ if (choiceItem.Value == typeof(MaterialColorScale))
+ return MaterialDesignBrushTemplate;
}
return base.SelectTemplate (item, container);
}
+
}
}
diff --git a/Xamarin.PropertyEditing.Windows/BrushEditorControl.cs b/Xamarin.PropertyEditing.Windows/BrushEditorControl.cs
index 61adbdf..1a72053 100644
--- a/Xamarin.PropertyEditing.Windows/BrushEditorControl.cs
+++ b/Xamarin.PropertyEditing.Windows/BrushEditorControl.cs
@@ -3,7 +3,6 @@ using System.Linq;
using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
-using Xamarin.PropertyEditing.ViewModels;
namespace Xamarin.PropertyEditing.Windows
{
@@ -29,11 +28,9 @@ namespace Xamarin.PropertyEditing.Windows
this.brushTabs = this.brushBoxPopup.Child?.GetDescendants<BrushTabbedEditorControl>().FirstOrDefault();
this.brushBoxPopup.PlacementTarget = this.brushBoxButton.FindParent<PropertyPresenter>();
- this.brushBoxPopup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(PlacePopup);
+ this.brushBoxPopup.CustomPopupPlacementCallback = PlacePopup;
this.brushBoxPopup.Opened += (s, e) => {
this.brushTabs?.FocusFirstChild ();
- // Need to refresh the tabs and their value manually
- this.brushTabs?.SelectTabFromBrush ();
};
this.brushBoxPopup.Closed += (s, e) => {
this.brushBoxButton.Focus ();
@@ -56,7 +53,5 @@ namespace Xamarin.PropertyEditing.Windows
private ButtonBase brushBoxButton;
private Popup brushBoxPopup;
private BrushTabbedEditorControl brushTabs;
-
- private BrushPropertyViewModel ViewModel => DataContext as BrushPropertyViewModel;
}
}
diff --git a/Xamarin.PropertyEditing.Windows/BrushTabbedEditorControl.cs b/Xamarin.PropertyEditing.Windows/BrushTabbedEditorControl.cs
index ebd9312..96486d4 100644
--- a/Xamarin.PropertyEditing.Windows/BrushTabbedEditorControl.cs
+++ b/Xamarin.PropertyEditing.Windows/BrushTabbedEditorControl.cs
@@ -16,7 +16,6 @@ namespace Xamarin.PropertyEditing.Windows
public BrushTabbedEditorControl ()
{
DefaultStyleKey = typeof (BrushTabbedEditorControl);
- DataContextChanged += OnDataContextChanged;
}
public override void OnApplyTemplate ()
@@ -40,37 +39,11 @@ namespace Xamarin.PropertyEditing.Windows
if (this.resourceBrushEditor == null)
throw new InvalidOperationException ($"{nameof (BrushTabbedEditorControl)} is missing a child ResourceBrushEditorControl named \"resourceBrushEditor\"");
- StorePreviousBrush ();
- SelectTabFromBrush ();
-
if (ViewModel.MaterialDesign == null) {
this.brushChoice.Items.Filter = o => ((ChoiceItem)o).Name != "materialDesignTab";
}
-
- this.brushChoice.SelectedItemChanged += (s, e) => {
- if (ViewModel == null) return;
- StorePreviousBrush ();
- switch ((string)((ChoiceItem)(this.brushChoice.SelectedItem)).Value) {
- case none:
- if (ViewModel.Value != null) ViewModel.Value = null;
- break;
- case solid:
- ViewModel.Value = ViewModel.Solid?.PreviousSolidBrush ?? new CommonSolidBrush (new CommonColor (0, 0, 0));
- ViewModel.Solid.CommitLastColor ();
- ViewModel.Solid.CommitHue ();
- break;
- case resource:
- break;
- case materialDesign:
- ViewModel.Value = ViewModel.Solid?.PreviousSolidBrush ?? new CommonSolidBrush (new CommonColor (0, 0, 0));
- break;
- }
- ShowSelectedTab ();
- };
-
+ /*
this.brushChoice.KeyUp += (s, e) => {
- if (ViewModel == null) return;
- StorePreviousBrush ();
switch (e.Key) {
case Key.N:
e.Handled = true;
@@ -94,24 +67,14 @@ namespace Xamarin.PropertyEditing.Windows
break;
// TODO: add G, T, etc. for the other brush types when they are available.
}
- };
+ };*/
}
- public static readonly string None = none;
- public static readonly string Solid = solid;
- public static readonly string Resource = resource;
- public static readonly string MaterialDesign = materialDesign;
-
internal void FocusFirstChild ()
{
this.brushChoice?.FocusSelectedItem ();
}
- private const string none = nameof (none);
- private const string solid = nameof (solid);
- private const string resource = nameof (resource);
- private const string materialDesign = nameof (materialDesign);
-
private ChoiceControl brushChoice;
private Expander advancedPropertyPanel;
private SolidBrushEditorControl solidBrushEditor;
@@ -119,93 +82,5 @@ namespace Xamarin.PropertyEditing.Windows
private MaterialDesignColorEditorControl materialDesignColorEditor;
private BrushPropertyViewModel ViewModel => DataContext as BrushPropertyViewModel;
-
- private void OnDataContextChanged (object sender, DependencyPropertyChangedEventArgs e)
- {
- if (e.OldValue is INotifyPropertyChanged inpc) {
- inpc.PropertyChanged -= OnContextPropertyChanged;
- }
-
- if (e.NewValue is INotifyPropertyChanged newInpc) {
- newInpc.PropertyChanged += OnContextPropertyChanged;
- }
-
- SelectTabFromBrush();
- }
-
- private void OnContextPropertyChanged (object sender, PropertyChangedEventArgs e)
- {
- SelectTabFromBrush();
- }
-
- private void StorePreviousBrush ()
- {
- if (ViewModel == null) return;
- if (ViewModel.Value is CommonSolidBrush solidBrush) {
- ViewModel.Solid.PreviousSolidBrush = solidBrush;
- }
- }
-
- internal void SelectTabFromBrush ()
- {
- if (this.brushChoice == null)
- return;
-
- if (ViewModel?.MaterialDesign != null && (ViewModel.MaterialDesign.NormalColor.HasValue || ViewModel.MaterialDesign.AccentColor.HasValue)) {
- this.brushChoice.SelectedValue = materialDesign;
- } else {
- switch (ViewModel?.Value) {
- case null:
- this.brushChoice.SelectedValue = none;
- break;
- case CommonSolidBrush _:
- switch (ViewModel.ValueSource) {
- case ValueSource.Local:
- this.brushChoice.SelectedValue = solid;
- break;
- case ValueSource.Resource:
- this.brushChoice.SelectedValue = resource;
- break;
- default:
- this.brushChoice.SelectedValue = solid;
- break;
- }
-
- break;
- }
- }
-
- ShowSelectedTab ();
- }
-
- private void ShowSelectedTab()
- {
- switch ((string)((ChoiceItem)(this.brushChoice.SelectedItem)).Value) {
- case none:
- this.advancedPropertyPanel.Visibility = Visibility.Collapsed;
- this.solidBrushEditor.Visibility = Visibility.Collapsed;
- this.materialDesignColorEditor.Visibility = Visibility.Collapsed;
- this.resourceBrushEditor.Visibility = Visibility.Collapsed;
- break;
- case solid:
- this.advancedPropertyPanel.Visibility = Visibility.Visible;
- this.solidBrushEditor.Visibility = Visibility.Visible;
- this.materialDesignColorEditor.Visibility = Visibility.Collapsed;
- this.resourceBrushEditor.Visibility = Visibility.Collapsed;
- break;
- case materialDesign:
- this.advancedPropertyPanel.Visibility = Visibility.Visible;
- this.solidBrushEditor.Visibility = Visibility.Collapsed;
- this.materialDesignColorEditor.Visibility = Visibility.Visible;
- this.resourceBrushEditor.Visibility = Visibility.Collapsed;
- break;
- case resource:
- this.advancedPropertyPanel.Visibility = Visibility.Collapsed;
- this.solidBrushEditor.Visibility = Visibility.Collapsed;
- this.materialDesignColorEditor.Visibility = Visibility.Collapsed;
- this.resourceBrushEditor.Visibility = Visibility.Visible;
- break;
- }
- }
}
}
diff --git a/Xamarin.PropertyEditing.Windows/PropertyPresenter.cs b/Xamarin.PropertyEditing.Windows/PropertyPresenter.cs
index bdebbb7..cb1dc55 100644
--- a/Xamarin.PropertyEditing.Windows/PropertyPresenter.cs
+++ b/Xamarin.PropertyEditing.Windows/PropertyPresenter.cs
@@ -56,16 +56,6 @@ namespace Xamarin.PropertyEditing.Windows
set { SetValue (ShowPropertyButtonProperty, value); }
}
- protected override Size ArrangeOverride (Size arrangeBounds)
- {
- return base.ArrangeOverride (arrangeBounds);
- }
-
- protected override Size MeasureOverride (Size constraint)
- {
- return base.MeasureOverride (constraint);
- }
-
private void OnLoaded (object sender, RoutedEventArgs e)
{
IsSubProperty = this.FindParentUnless<PropertyPresenter, PropertyEditorPanel>() != null;
diff --git a/Xamarin.PropertyEditing.Windows/Themes/Resources.xaml b/Xamarin.PropertyEditing.Windows/Themes/Resources.xaml
index 4793645..5345dfd 100644
--- a/Xamarin.PropertyEditing.Windows/Themes/Resources.xaml
+++ b/Xamarin.PropertyEditing.Windows/Themes/Resources.xaml
@@ -5,6 +5,7 @@
xmlns:options="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
xmlns:vm="clr-namespace:Xamarin.PropertyEditing.ViewModels;assembly=Xamarin.PropertyEditing"
xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
+ xmlns:core="clr-namespace:Xamarin.PropertyEditing;assembly=Xamarin.PropertyEditing"
xmlns:prop="clr-namespace:Xamarin.PropertyEditing.Properties;assembly=Xamarin.PropertyEditing"
xmlns:system="clr-namespace:System;assembly=mscorlib">
@@ -562,35 +563,40 @@
</Setter>
</Style>
+ <Style x:Key="BrushChoiceItem" TargetType="RadioButton" BasedOn="{StaticResource ChoiceControlItem}">
+ <Setter Property="GroupName" Value="brushChoiceType" />
+ <Setter Property="MinHeight" Value="20" />
+ <Setter Property="MinWidth" Value="20" />
+ <Setter Property="ToolTip" Value="{Binding Key,Mode=OneTime}" />
+ <Setter Property="AutomationProperties.Name" Value="{Binding Key,Mode=OneTime}" />
+ <Setter Property="AutomationProperties.HelpText" Value="{Binding Key,Mode=OneTime}" />
+ </Style>
+
<local:BrushChoiceTemplateSelector x:Key="BrushChoiceTemplateSelector">
<local:BrushChoiceTemplateSelector.NoBrushTemplate>
<DataTemplate>
- <RadioButton Style="{DynamicResource ChoiceControlItem}" MinHeight="20" MinWidth="20"
- GroupName="{Binding Name,RelativeSource={RelativeSource FindAncestor,AncestorType=local:ChoiceControl},Mode=OneTime}">
+ <RadioButton Style="{DynamicResource BrushChoiceItem}">
<ContentControl ContentTemplate="{DynamicResource BrushChoiceNoBrushIcon}"/>
</RadioButton>
</DataTemplate>
</local:BrushChoiceTemplateSelector.NoBrushTemplate>
<local:BrushChoiceTemplateSelector.SolidBrushTemplate>
<DataTemplate>
- <RadioButton Style="{DynamicResource ChoiceControlItem}" MinHeight="20" MinWidth="20"
- GroupName="{Binding Name,RelativeSource={RelativeSource FindAncestor,AncestorType=local:ChoiceControl},Mode=OneTime}">
+ <RadioButton Style="{DynamicResource BrushChoiceItem}">
<ContentControl ContentTemplate="{DynamicResource BrushChoiceSolidBrushIcon}"/>
</RadioButton>
</DataTemplate>
</local:BrushChoiceTemplateSelector.SolidBrushTemplate>
<local:BrushChoiceTemplateSelector.MaterialDesignBrushTemplate>
<DataTemplate>
- <RadioButton Style="{DynamicResource ChoiceControlItem}" MinHeight="20" MinWidth="20"
- GroupName="{Binding Name,RelativeSource={RelativeSource FindAncestor,AncestorType=local:ChoiceControl},Mode=OneTime}">
+ <RadioButton Style="{DynamicResource BrushChoiceItem}">
<ContentControl ContentTemplate="{DynamicResource BrushChoiceMaterialDesignIcon}"/>
</RadioButton>
</DataTemplate>
</local:BrushChoiceTemplateSelector.MaterialDesignBrushTemplate>
<local:BrushChoiceTemplateSelector.ResourceBrushTemplate>
<DataTemplate>
- <RadioButton Style="{DynamicResource ChoiceControlItem}" MinHeight="20" MinWidth="20"
- GroupName="{Binding Name,RelativeSource={RelativeSource FindAncestor,AncestorType=local:ChoiceControl},Mode=OneTime}">
+ <RadioButton Style="{DynamicResource BrushChoiceItem}">
<ContentControl ContentTemplate="{DynamicResource BrushChoiceResourceBrushIcon}"/>
</RadioButton>
</DataTemplate>
@@ -604,15 +610,10 @@
<StackPanel>
<Border Padding="8,10,8,4">
<StackPanel>
- <local:ChoiceControl x:Name="brushChoice" ItemTemplateSelector="{StaticResource BrushChoiceTemplateSelector}" ItemTemplate="{x:Null}" HorizontalAlignment="Stretch">
- <local:ChoiceItem Value="{x:Static local:BrushTabbedEditorControl.None}" Name="noBrushTab" Tooltip="{x:Static prop:Resources.NoBrush}"/>
- <local:ChoiceItem Value="{x:Static local:BrushTabbedEditorControl.Solid}" Name="solidColorTab" Tooltip="{x:Static prop:Resources.SolidBrush}"/>
- <local:ChoiceItem Value="{x:Static local:BrushTabbedEditorControl.MaterialDesign}" Name="materialDesignTab" Tooltip="{x:Static prop:Resources.MaterialDesignColorBrush}"/>
- <local:ChoiceItem Value="{x:Static local:BrushTabbedEditorControl.Resource}" Name="resourceColorTab" Tooltip="{x:Static prop:Resources.ResourceBrush}"/>
- </local:ChoiceControl>
- <local:SolidBrushEditorControl x:Name="solidBrushEditor"/>
- <local:ResourceBrushEditorControl x:Name="resourceBrushEditor"/>
- <local:MaterialDesignColorEditorControl x:Name="materialDesignColorEditor" AccentColor="{Binding MaterialDesign.AccentColor}" NormalColor="{Binding MaterialDesign.NormalColor}" Visibility="Collapsed"/>
+ <local:ChoiceControl x:Name="brushChoice" SelectedValue="{Binding SelectedBrushType,Mode=TwoWay}" SelectedValuePath="Value" ItemsSource="{Binding BrushTypes,Mode=OneTime}" ItemTemplateSelector="{StaticResource BrushChoiceTemplateSelector}" ItemTemplate="{x:Null}" HorizontalAlignment="Stretch" />
+ <local:SolidBrushEditorControl x:Name="solidBrushEditor" Visibility="Collapsed" />
+ <local:ResourceBrushEditorControl x:Name="resourceBrushEditor" Visibility="Collapsed" />
+ <local:MaterialDesignColorEditorControl x:Name="materialDesignColorEditor" AccentColor="{Binding MaterialDesign.AccentColor}" NormalColor="{Binding MaterialDesign.NormalColor}" Visibility="Collapsed" />
</StackPanel>
</Border>
<Border Padding="1" Visibility="{Binding TargetPlatform.SupportsBrushOpacity, Mode=OneTime, Converter={StaticResource BoolToVisibilityConverter}}">
@@ -631,10 +632,22 @@
</Expander>
</Border>
</StackPanel>
+ <ControlTemplate.Triggers>
+ <DataTrigger Binding="{Binding SelectedBrushType}" Value="{x:Type drawing:CommonSolidBrush}">
+ <Setter TargetName="solidBrushEditor" Property="Visibility" Value="Visible" />
+ </DataTrigger>
+ <DataTrigger Binding="{Binding SelectedBrushType}" Value="{x:Type core:Resource}">
+ <Setter TargetName="resourceBrushEditor" Property="Visibility" Value="Visible" />
+ </DataTrigger>
+ <DataTrigger Binding="{Binding SelectedBrushType}" Value="{x:Type vm:MaterialColorScale}">
+ <Setter TargetName="materialDesignColorEditor" Property="Visibility" Value="Visible" />
+ </DataTrigger>
+ </ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
+
<Style TargetType="local:ResourceBrushEditorControl">
<Setter Property="Template">
<Setter.Value>