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:
authorDominique Louis <dominique@WIN-KPIF3KAALP6.redmond.corp.microsoft.com>2018-11-11 21:35:45 +0300
committerDominique Louis <dominique@WIN-KPIF3KAALP6.redmond.corp.microsoft.com>2018-11-11 21:35:45 +0300
commit48c9c947c11b21a8693e39975bc90d2159443cd3 (patch)
tree5a3ba2acc0159ae715095b33628f20ba40372b02
parenta21015d882bc6150e2a506ea1d82d22cdae8ee80 (diff)
[Mac] Refactor to use Custom NSComboBox as it has built in Complete.dominique-Autocompletion2
-rw-r--r--Xamarin.PropertyEditing.Mac/Controls/Custom/AutocompleteComboBox.cs41
-rw-r--r--Xamarin.PropertyEditing.Mac/Controls/CustomExpressionView.cs45
-rw-r--r--Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj1
3 files changed, 65 insertions, 22 deletions
diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/AutocompleteComboBox.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/AutocompleteComboBox.cs
new file mode 100644
index 0000000..6daca51
--- /dev/null
+++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/AutocompleteComboBox.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using AppKit;
+using Foundation;
+using Xamarin.PropertyEditing.ViewModels;
+
+namespace Xamarin.PropertyEditing.Mac.Controls
+{
+ internal class AutocompleteComboBox<T> : NSComboBox
+ {
+ protected PropertyViewModel<T> viewModel;
+
+ public AutocompleteComboBox (PropertyViewModel<T> viewModel)
+ {
+ if (viewModel == null)
+ throw new ArgumentNullException (nameof (viewModel));
+
+ // This triggers autocomplete on items
+ Completes = true;
+
+ // Maximum number of items in the drop-down before scrolling kicks in.
+ VisibleItems = 8;
+
+ this.viewModel = viewModel;
+
+ // It should be null, but belts and braces
+ if (this.viewModel.AutocompleteItems != null) {
+ PopulateComboBoxItems ();
+ }
+ }
+
+ private void PopulateComboBoxItems ()
+ {
+ RemoveAll ();
+
+ foreach (var item in this.viewModel.AutocompleteItems) {
+ Add (new NSString (item));
+ }
+ }
+ }
+}
diff --git a/Xamarin.PropertyEditing.Mac/Controls/CustomExpressionView.cs b/Xamarin.PropertyEditing.Mac/Controls/CustomExpressionView.cs
index 3c6942b..960eb03 100644
--- a/Xamarin.PropertyEditing.Mac/Controls/CustomExpressionView.cs
+++ b/Xamarin.PropertyEditing.Mac/Controls/CustomExpressionView.cs
@@ -4,42 +4,43 @@ using AppKit;
using CoreGraphics;
using Foundation;
using ObjCRuntime;
+using Xamarin.PropertyEditing.Mac.Controls;
using Xamarin.PropertyEditing.ViewModels;
namespace Xamarin.PropertyEditing.Mac
{
- internal class CustomExpressionView : BasePopOverViewModelControl
+ internal class CustomExpressionView<T> : BasePopOverViewModelControl
{
- Type vmType;
- const string CustomExpressionPropertyString = "CustomExpression";
- PropertyInfo customExpressionPropertyInfo;
-
- public CustomExpressionView (PropertyViewModel viewModel) : base (viewModel, Properties.Resources.CustomExpression, "custom-expression-32")
+ public CustomExpressionView (PropertyViewModel<T> viewModel) : base (viewModel, Properties.Resources.CustomExpression, "custom-expression-32")
{
Frame = new CGRect (CGPoint.Empty, new CGSize (250, 80));
- var customExpressionField = new NSTextField {
- StringValue = string.Empty,
- TranslatesAutoresizingMaskIntoConstraints = false,
- };
+ NSControl editorControl;
+
+ viewModel.PreviewCustomExpression = string.Empty;
+ if (viewModel.AutocompleteItems != null && viewModel.AutocompleteItems.Count > 0) {
+ editorControl = new AutocompleteComboBox<T> (viewModel) {
+ TranslatesAutoresizingMaskIntoConstraints = false,
+ };
+ } else {
+ editorControl = new NSTextField {
+ TranslatesAutoresizingMaskIntoConstraints = false,
+ };
+ }
- vmType = viewModel.GetType ();
- customExpressionPropertyInfo = vmType.GetProperty (CustomExpressionPropertyString);
- var value = customExpressionPropertyInfo.GetValue (viewModel);
- if (value != null)
- customExpressionField.StringValue = (string)value;
+ editorControl.StringValue = viewModel.CustomExpression ?? string.Empty;
- customExpressionField.Activated += (sender, e) => {
- customExpressionPropertyInfo.SetValue (viewModel, customExpressionField.StringValue);
+ editorControl.Activated += (sender, e) => {
+ viewModel.CustomExpression = editorControl.StringValue;
};
- AddSubview (customExpressionField);
+ AddSubview (editorControl);
this.DoConstraints (new[] {
- customExpressionField.ConstraintTo (this, (s, c) => s.Top == c.Top + 37),
- customExpressionField.ConstraintTo (this, (s, c) => s.Left == c.Left + 38),
- customExpressionField.ConstraintTo (this, (s, c) => s.Width == c.Width - 57),
- customExpressionField.ConstraintTo (this, (s, c) => s.Height == 24),
+ editorControl.ConstraintTo (this, (s, c) => s.Top == c.Top + 37),
+ editorControl.ConstraintTo (this, (s, c) => s.Left == c.Left + 38),
+ editorControl.ConstraintTo (this, (s, c) => s.Width == c.Width - 57),
+ editorControl.ConstraintTo (this, (s, c) => s.Height == 24),
});
}
}
diff --git a/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj b/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj
index 7775f3e..894e92f 100644
--- a/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj
+++ b/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj
@@ -136,6 +136,7 @@
<Compile Include="Controls\RequestResource\RequestResourcePreviewPanel.cs" />
<Compile Include="Controls\PanelHeaderEditorControl.cs" />
<Compile Include="Controls\ThicknessEditorControl.cs" />
+ <Compile Include="Controls\Custom\AutocompleteComboBox.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Controls\" />