Tweaks to Resize Arrange By correctly and use NSPopUpButton instead of NSComboBox for constrained predefined values.
This commit is contained in:
Родитель
870cbce82b
Коммит
8008d53094
|
@ -672,7 +672,7 @@
|
||||||
<scene sceneID="hIz-AP-VOD">
|
<scene sceneID="hIz-AP-VOD">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="XfG-lQ-9wD" customClass="ViewController" sceneMemberID="viewController">
|
<viewController id="XfG-lQ-9wD" customClass="ViewController" sceneMemberID="viewController">
|
||||||
<view key="view" id="m2S-Jp-Qdl">
|
<view key="view" id="m2S-Jp-Qdl" wantsLayer="YES">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
|
|
|
@ -19,35 +19,51 @@ namespace Xamarin.PropertyEditing.Mac
|
||||||
{
|
{
|
||||||
base.TranslatesAutoresizingMaskIntoConstraints = false;
|
base.TranslatesAutoresizingMaskIntoConstraints = false;
|
||||||
|
|
||||||
this.comboBox = new NSComboBox () {
|
this.comboBox = new NSComboBox {
|
||||||
TranslatesAutoresizingMaskIntoConstraints = false,
|
TranslatesAutoresizingMaskIntoConstraints = false,
|
||||||
BackgroundColor = NSColor.Clear,
|
BackgroundColor = NSColor.Clear,
|
||||||
StringValue = String.Empty,
|
StringValue = String.Empty,
|
||||||
Cell = {
|
Cell = {
|
||||||
ControlSize = NSControlSize.Regular
|
ControlSize = NSControlSize.Small
|
||||||
},
|
},
|
||||||
Editable = false,
|
Editable = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.popUpButton = new NSPopUpButton {
|
||||||
|
TranslatesAutoresizingMaskIntoConstraints = false,
|
||||||
|
StringValue = String.Empty,
|
||||||
|
Cell = {
|
||||||
|
ControlSize = NSControlSize.Small
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
this.comboBox.SelectionChanged += (sender, e) => {
|
this.comboBox.SelectionChanged += (sender, e) => {
|
||||||
EditorViewModel.ValueName = comboBox.SelectedValue.ToString ();
|
EditorViewModel.ValueName = comboBox.SelectedValue.ToString ();
|
||||||
};
|
};
|
||||||
|
|
||||||
AddSubview (this.comboBox);
|
popupButtonList = new NSMenu ();
|
||||||
|
popUpButton.Menu = popupButtonList;
|
||||||
|
|
||||||
this.DoConstraints (new[] {
|
popUpButton.Activated += (o, e) => {
|
||||||
comboBox.ConstraintTo (this, (cb, c) => cb.Width == c.Width - 28),
|
EditorViewModel.ValueName = (o as NSPopUpButton).Title;
|
||||||
comboBox.ConstraintTo (this, (cb, c) => cb.Left == c.Left + 3),
|
};
|
||||||
});
|
|
||||||
|
|
||||||
UpdateTheme ();
|
UpdateTheme ();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override NSView FirstKeyView => this.comboBox;
|
public override NSView FirstKeyView => firstKeyView;
|
||||||
public override NSView LastKeyView => this.comboBox;
|
public override NSView LastKeyView => lastKeyView;
|
||||||
|
|
||||||
protected PredefinedValuesViewModel<T> EditorViewModel => (PredefinedValuesViewModel<T>)ViewModel;
|
protected PredefinedValuesViewModel<T> EditorViewModel => (PredefinedValuesViewModel<T>)ViewModel;
|
||||||
|
|
||||||
|
readonly NSComboBox comboBox;
|
||||||
|
readonly NSPopUpButton popUpButton;
|
||||||
|
NSMenu popupButtonList;
|
||||||
|
|
||||||
|
bool dataPopulated;
|
||||||
|
NSView firstKeyView;
|
||||||
|
NSView lastKeyView;
|
||||||
|
|
||||||
protected override void HandleErrorsChanged (object sender, DataErrorsChangedEventArgs e)
|
protected override void HandleErrorsChanged (object sender, DataErrorsChangedEventArgs e)
|
||||||
{
|
{
|
||||||
UpdateErrorsDisplayed (ViewModel.GetErrors (e.PropertyName));
|
UpdateErrorsDisplayed (ViewModel.GetErrors (e.PropertyName));
|
||||||
|
@ -55,7 +71,11 @@ namespace Xamarin.PropertyEditing.Mac
|
||||||
|
|
||||||
protected override void SetEnabled ()
|
protected override void SetEnabled ()
|
||||||
{
|
{
|
||||||
this.comboBox.Editable = ViewModel.Property.CanWrite;
|
if (EditorViewModel.IsConstrainedToPredefined) {
|
||||||
|
this.popUpButton.Enabled = ViewModel.Property.CanWrite;
|
||||||
|
} else {
|
||||||
|
this.comboBox.Enabled = ViewModel.Property.CanWrite;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateErrorsDisplayed (IEnumerable errors)
|
protected override void UpdateErrorsDisplayed (IEnumerable errors)
|
||||||
|
@ -70,25 +90,67 @@ namespace Xamarin.PropertyEditing.Mac
|
||||||
|
|
||||||
protected override void OnViewModelChanged (PropertyViewModel oldModel)
|
protected override void OnViewModelChanged (PropertyViewModel oldModel)
|
||||||
{
|
{
|
||||||
this.comboBox.RemoveAll ();
|
if (!dataPopulated) {
|
||||||
|
if (EditorViewModel.IsConstrainedToPredefined) {
|
||||||
|
this.popupButtonList.RemoveAllItems ();
|
||||||
foreach (string item in EditorViewModel.PossibleValues) {
|
foreach (string item in EditorViewModel.PossibleValues) {
|
||||||
|
popupButtonList.AddItem (new NSMenuItem (item));
|
||||||
|
}
|
||||||
|
|
||||||
|
AddSubview (this.popUpButton);
|
||||||
|
|
||||||
|
this.DoConstraints (new[] {
|
||||||
|
popUpButton.ConstraintTo (this, (pub, c) => pub.Width == c.Width - 26),
|
||||||
|
popUpButton.ConstraintTo (this, (pub, c) => pub.Left == c.Left + 3),
|
||||||
|
popUpButton.ConstraintTo (this, (pub, c) => pub.Top == c.Top + 6),
|
||||||
|
});
|
||||||
|
|
||||||
|
firstKeyView = this.popUpButton;
|
||||||
|
lastKeyView = this.popUpButton;
|
||||||
|
} else {
|
||||||
|
this.comboBox.RemoveAll ();
|
||||||
|
|
||||||
|
// Once the VM is loaded we need a one time population
|
||||||
|
foreach (var item in EditorViewModel.PossibleValues) {
|
||||||
this.comboBox.Add (new NSString (item));
|
this.comboBox.Add (new NSString (item));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AddSubview (this.comboBox);
|
||||||
|
|
||||||
|
this.DoConstraints (new[] {
|
||||||
|
comboBox.ConstraintTo (this, (cb, c) => cb.Width == c.Width - 28),
|
||||||
|
comboBox.ConstraintTo (this, (cb, c) => cb.Left == c.Left + 3),
|
||||||
|
comboBox.ConstraintTo (this, (cb, c) => cb.Top == c.Top + 4),
|
||||||
|
});
|
||||||
|
|
||||||
|
firstKeyView = this.comboBox;
|
||||||
|
lastKeyView = this.comboBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
dataPopulated = true;
|
||||||
|
}
|
||||||
|
|
||||||
base.OnViewModelChanged (oldModel);
|
base.OnViewModelChanged (oldModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateValue ()
|
protected override void UpdateValue ()
|
||||||
{
|
{
|
||||||
|
if (EditorViewModel.IsConstrainedToPredefined) {
|
||||||
|
this.popUpButton.Title = EditorViewModel.ValueName ?? String.Empty;
|
||||||
|
} else {
|
||||||
this.comboBox.StringValue = EditorViewModel.ValueName ?? String.Empty;
|
this.comboBox.StringValue = EditorViewModel.ValueName ?? String.Empty;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
private readonly NSComboBox comboBox;
|
|
||||||
|
|
||||||
protected override void UpdateAccessibilityValues ()
|
protected override void UpdateAccessibilityValues ()
|
||||||
{
|
{
|
||||||
|
if (EditorViewModel.IsConstrainedToPredefined) {
|
||||||
|
popUpButton.AccessibilityEnabled = popUpButton.Enabled;
|
||||||
|
popUpButton.AccessibilityTitle = Strings.AccessibilityCombobox (ViewModel.Property.Name);
|
||||||
|
} else {
|
||||||
comboBox.AccessibilityEnabled = comboBox.Enabled;
|
comboBox.AccessibilityEnabled = comboBox.Enabled;
|
||||||
comboBox.AccessibilityTitle = Strings.AccessibilityCombobox (ViewModel.Property.Name);
|
comboBox.AccessibilityTitle = Strings.AccessibilityCombobox (ViewModel.Property.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -166,11 +166,11 @@ namespace Xamarin.PropertyEditing.Mac
|
||||||
propertyFilter.ConstraintTo(this, (pf, c) => pf.Left == c.Left + 12),
|
propertyFilter.ConstraintTo(this, (pf, c) => pf.Left == c.Left + 12),
|
||||||
|
|
||||||
propertyArrangeModeLabel.ConstraintTo(this, (pl, c) => pl.Top == c.Top + 5),
|
propertyArrangeModeLabel.ConstraintTo(this, (pl, c) => pl.Top == c.Top + 5),
|
||||||
propertyArrangeModeLabel.ConstraintTo(propertyArrangeMode, (pl, pa) => pl.Left == pa.Left - 73),
|
propertyArrangeModeLabel.ConstraintTo(propertyArrangeMode, (pl, pa) => pl.Left == pa.Left - 71),
|
||||||
|
|
||||||
propertyArrangeMode.ConstraintTo(this, (pa, c) => pa.Top == c.Top + 3),
|
propertyArrangeMode.ConstraintTo(this, (pa, c) => pa.Top == c.Top + 3),
|
||||||
propertyArrangeMode.ConstraintTo(this, (pa, c) => pa.Left == c.Left + 312),
|
propertyArrangeMode.ConstraintTo(this, (pa, c) => pa.Left == c.Left + 310),
|
||||||
propertyArrangeMode.ConstraintTo(this, (pa, c) => pa.Width == 154),
|
propertyArrangeMode.ConstraintTo(this, (pa, c) => pa.Width == c.Width - 320),
|
||||||
|
|
||||||
tableContainer.ConstraintTo(this, (t, c) => t.Top == c.Top + 30),
|
tableContainer.ConstraintTo(this, (t, c) => t.Top == c.Top + 30),
|
||||||
tableContainer.ConstraintTo(this, (t, c) => t.Width == c.Width - 20),
|
tableContainer.ConstraintTo(this, (t, c) => t.Width == c.Width - 20),
|
||||||
|
|
|
@ -48,6 +48,8 @@ namespace Xamarin.PropertyEditing.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsConstrainedToPredefined => this.predefinedValues.IsConstrainedToPredefined;
|
||||||
|
|
||||||
// TODO: Combination (flags) values
|
// TODO: Combination (flags) values
|
||||||
|
|
||||||
protected override TValue ValidateValue (TValue validationValue)
|
protected override TValue ValidateValue (TValue validationValue)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче