protected override void UpdateContents() { if (Node == null) { return; } foreach (var constraint in constraints) { constraint.Active = false; constraint.Dispose(); } constraints.Clear(); OptimalWidth = MarginSize; var editable = TreeView.AllowWatchExpressions && Node.Parent is RootObjectValueNode; var selected = Superview is NSTableRowView rowView && rowView.Selected; var iconName = ObjectValueTreeViewController.GetIcon(Node.Flags); var wrapper = (MacObjectValueNode)ObjectValue; var textColor = NSColor.ControlText; var showAddNewExpression = false; var placeholder = string.Empty; var name = Node.Name; if (Node.IsUnknown) { if (!selected && TreeView.DebuggerService.Frame != null) { textColor = NSColor.FromCGColor(GetCGColor(Styles.ObjectValueTreeValueDisabledText)); } } else if (Node.IsError || Node.IsNotSupported) { } else if (Node.IsImplicitNotSupported) { } else if (Node.IsEvaluating) { if (!selected && Node.GetIsEvaluatingGroup()) { textColor = NSColor.FromCGColor(GetCGColor(Styles.ObjectValueTreeValueDisabledText)); } } else if (Node.IsEnumerable) { } else if (Node is AddNewExpressionObjectValueNode) { placeholder = GettextCatalog.GetString("Add item to watch"); showAddNewExpression = true; name = string.Empty; editable = true; } else if (!selected && TreeView.Controller.GetNodeHasChangedSinceLastCheckpoint(Node)) { textColor = NSColor.FromCGColor(GetCGColor(Styles.ObjectValueTreeValueModifiedText)); } NSView firstView; if (showAddNewExpression) { AddNewExpressionButton.Image = GetImage("gtk-add", Gtk.IconSize.Menu, selected); firstView = AddNewExpressionButton; if (!addNewExpressionVisible) { ImageView.RemoveFromSuperview(); AddSubview(AddNewExpressionButton); addNewExpressionVisible = true; } } else { ImageView.Image = GetImage(iconName, Gtk.IconSize.Menu, selected); firstView = ImageView; if (addNewExpressionVisible) { AddNewExpressionButton.RemoveFromSuperview(); addNewExpressionVisible = false; AddSubview(ImageView); } } constraints.Add(firstView.CenterYAnchor.ConstraintEqualToAnchor(CenterYAnchor)); constraints.Add(firstView.LeadingAnchor.ConstraintEqualToAnchor(LeadingAnchor, MarginSize)); constraints.Add(firstView.WidthAnchor.ConstraintEqualToConstant(ImageSize)); constraints.Add(firstView.HeightAnchor.ConstraintEqualToConstant(ImageSize)); OptimalWidth += ImageSize; OptimalWidth += RowCellSpacing; TextField.PlaceholderAttributedString = GetAttributedPlaceholderString(placeholder); TextField.StringValue = name; TextField.TextColor = textColor; TextField.Editable = editable; UpdateFont(TextField); TextField.SizeToFit(); ImageView.AccessibilityTitle = ObjectValueTreeViewController.GetAccessibilityTitleForIcon( Node.Flags, GettextCatalog.GetString("Object Name")); var value = editable && string.IsNullOrEmpty(name) ? placeholder : name; var textWidth = GetWidthForString(TextField.Font, value); OptimalWidth += textWidth; NSView textView; if (editing) { textView = editorTextView; var span = editor.TextBuffer.CurrentSnapshot.GetEntireSpan(); editor.TextBuffer.Replace(span, name); if (!editorTextViewVisible) { TextField.RemoveFromSuperview(); editorTextViewVisible = true; AddSubview(textView); } constraints.Add(textView.TopAnchor.ConstraintEqualToAnchor(TopAnchor, (nfloat)editor.FormattedLineSource.BaseIndentation)); constraints.Add(textView.BottomAnchor.ConstraintEqualToAnchor(BottomAnchor, (nfloat)editor.FormattedLineSource.BaseIndentation)); } else { textView = TextField; if (editorTextViewVisible) { editorTextView.RemoveFromSuperview(); editorTextViewVisible = false; AddSubview(TextField); } constraints.Add(TextField.CenterYAnchor.ConstraintEqualToAnchor(CenterYAnchor)); } constraints.Add(textView.LeadingAnchor.ConstraintEqualToAnchor(firstView.TrailingAnchor, RowCellSpacing)); if (!editing && MacObjectValueTreeView.ValidObjectForPreviewIcon(Node)) { SetPreviewButtonIcon(PreviewButtonIcon.Hidden); if (!previewIconVisible) { AddSubview(PreviewButton); previewIconVisible = true; } constraints.Add(TextField.WidthAnchor.ConstraintGreaterThanOrEqualToConstant(textWidth)); constraints.Add(PreviewButton.CenterYAnchor.ConstraintEqualToAnchor(CenterYAnchor)); constraints.Add(PreviewButton.LeadingAnchor.ConstraintEqualToAnchor(TextField.TrailingAnchor, RowCellSpacing)); constraints.Add(PreviewButton.WidthAnchor.ConstraintEqualToConstant(ImageSize)); constraints.Add(PreviewButton.HeightAnchor.ConstraintEqualToConstant(ImageSize)); OptimalWidth += RowCellSpacing; OptimalWidth += ImageSize; } else { if (previewIconVisible) { PreviewButton.RemoveFromSuperview(); previewIconVisible = false; } constraints.Add(textView.TrailingAnchor.ConstraintEqualToAnchor(TrailingAnchor, -MarginSize)); } foreach (var constraint in constraints) { constraint.Active = true; } OptimalWidth += MarginSize; wrapper.OptimalNameFont = TreeView.CustomFont; wrapper.OptimalNameWidth = OptimalWidth; wrapper.OptimalXOffset = Frame.X; }
protected override void UpdateContents() { if (Node == null) { return; } foreach (var constraint in constraints) { constraint.Active = false; constraint.Dispose(); } constraints.Clear(); OptimalWidth = MarginSize; var editable = TreeView.AllowWatchExpressions && Node.Parent is RootObjectValueNode; var selected = Superview is NSTableRowView rowView && rowView.Selected; var iconName = ObjectValueTreeViewController.GetIcon(Node.Flags); var textColor = NSColor.ControlText; var showAddNewExpression = false; var placeholder = string.Empty; var name = Node.Name; if (Node.IsUnknown) { if (TreeView.DebuggerService.Frame != null) { textColor = NSColor.FromCGColor(GetCGColor(Styles.ObjectValueTreeValueDisabledText)); } } else if (Node.IsError || Node.IsNotSupported) { } else if (Node.IsImplicitNotSupported) { } else if (Node.IsEvaluating) { if (Node.GetIsEvaluatingGroup()) { textColor = NSColor.FromCGColor(GetCGColor(Styles.ObjectValueTreeValueDisabledText)); } } else if (Node.IsEnumerable) { } else if (Node is AddNewExpressionObjectValueNode) { placeholder = GettextCatalog.GetString("Add new expression"); showAddNewExpression = true; name = string.Empty; editable = true; } else if (TreeView.Controller.GetNodeHasChangedSinceLastCheckpoint(Node)) { textColor = NSColor.FromCGColor(GetCGColor(Styles.ObjectValueTreeValueModifiedText)); } NSView firstView; if (showAddNewExpression) { firstView = AddNewExpressionButton; if (!addNewExpressionVisible) { ImageView.RemoveFromSuperview(); AddSubview(AddNewExpressionButton); addNewExpressionVisible = true; } } else { ImageView.Image = GetImage(iconName, Gtk.IconSize.Menu, selected); firstView = ImageView; if (addNewExpressionVisible) { AddNewExpressionButton.RemoveFromSuperview(); addNewExpressionVisible = false; AddSubview(ImageView); } } constraints.Add(firstView.CenterYAnchor.ConstraintEqualToAnchor(CenterYAnchor)); constraints.Add(firstView.LeadingAnchor.ConstraintEqualToAnchor(LeadingAnchor, MarginSize)); constraints.Add(firstView.WidthAnchor.ConstraintEqualToConstant(ImageSize)); constraints.Add(firstView.HeightAnchor.ConstraintEqualToConstant(ImageSize)); OptimalWidth += ImageSize; OptimalWidth += RowCellSpacing; TextField.PlaceholderAttributedString = GetAttributedPlaceholderString(placeholder); TextField.StringValue = name; TextField.TextColor = textColor; TextField.Editable = editable; UpdateFont(TextField); TextField.SizeToFit(); OptimalWidth += TextField.Frame.Width; constraints.Add(TextField.CenterYAnchor.ConstraintEqualToAnchor(CenterYAnchor)); constraints.Add(TextField.LeadingAnchor.ConstraintEqualToAnchor(firstView.TrailingAnchor, RowCellSpacing)); if (MacObjectValueTreeView.ValidObjectForPreviewIcon(Node)) { SetPreviewButtonIcon(PreviewButtonIcon.Hidden); if (!previewIconVisible) { AddSubview(PreviewButton); previewIconVisible = true; } constraints.Add(TextField.WidthAnchor.ConstraintGreaterThanOrEqualToConstant(TextField.Frame.Width)); constraints.Add(PreviewButton.CenterYAnchor.ConstraintEqualToAnchor(CenterYAnchor)); constraints.Add(PreviewButton.LeadingAnchor.ConstraintEqualToAnchor(TextField.TrailingAnchor, RowCellSpacing)); constraints.Add(PreviewButton.WidthAnchor.ConstraintEqualToConstant(ImageSize)); constraints.Add(PreviewButton.HeightAnchor.ConstraintEqualToConstant(ImageSize)); OptimalWidth += RowCellSpacing; OptimalWidth += PreviewButton.Frame.Width; } else { if (previewIconVisible) { PreviewButton.RemoveFromSuperview(); previewIconVisible = false; } constraints.Add(TextField.TrailingAnchor.ConstraintEqualToAnchor(TrailingAnchor, -MarginSize)); } foreach (var constraint in constraints) { constraint.Active = true; } OptimalWidth += MarginSize; }