void OnItemMouseEnter(MouseEnterEvent evt) { var box = evt.target as VisualElement; var libraryTreeItem = box.GetProperty(BuilderConstants.LibraryItemLinkedManipulatorVEPropertyName) as BuilderLibraryTreeItem; if (!libraryTreeItem.hasPreview) { return; } var sample = libraryTreeItem.makeVisualElementCallback?.Invoke(); if (sample == null) { return; } m_TooltipPreview.Add(sample); m_TooltipPreview.Show(); m_TooltipPreview.style.left = m_BuilderPaneContent.pane.resolvedStyle.width + BuilderConstants.TooltipPreviewYOffset; m_TooltipPreview.style.top = m_BuilderPaneContent.pane.resolvedStyle.top; }
void OnItemMouseEnter(MouseEnterEvent evt) { var box = evt.target as VisualElement; var item = box.GetProperty(BuilderConstants.LibraryItemLinkedManipulatorVEPropertyName) as LibraryTreeItem; if (item.makeVisualElement == null) { return; } var sample = item.makeVisualElement(); if (sample == null) { return; } m_TooltipPreview.Add(sample); m_TooltipPreview.Show(); m_TooltipPreview.style.left = this.pane.resolvedStyle.width + BuilderConstants.TooltipPreviewYOffset; m_TooltipPreview.style.top = this.pane.resolvedStyle.top; }
public BuilderStyleSheets( BuilderPaneWindow paneWindow, BuilderViewport viewport, BuilderSelection selection, BuilderClassDragger classDragger, BuilderStyleSheetsDragger styleSheetsDragger, HighlightOverlayPainter highlightOverlayPainter, BuilderTooltipPreview tooltipPreview) : base( paneWindow, viewport, selection, classDragger, styleSheetsDragger, new BuilderStyleSheetsContextMenu(paneWindow, selection), viewport.styleSelectorElementContainer, false, highlightOverlayPainter, kToolbarPath) { m_TooltipPreview = tooltipPreview; if (m_TooltipPreview != null) { var helpTooltipTemplate = BuilderPackageUtilities.LoadAssetAtPath <VisualTreeAsset>(kHelpTooltipPath); var helpTooltipContainer = helpTooltipTemplate.CloneTree(); m_TooltipPreview.Add(helpTooltipContainer); // We are the only ones using it so just add the contents and be done. } viewDataKey = "builder-style-sheets"; AddToClassList(BuilderConstants.ExplorerStyleSheetsPaneClassName); var parent = this.Q("new-selector-item"); // Init text field. m_NewSelectorField = parent.Q <BuilderNewSelectorField>("new-selector-field"); m_NewSelectorTextField = m_NewSelectorField.textField; m_NewSelectorTextField.SetValueWithoutNotify(BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage); m_NewSelectorTextInputField = m_NewSelectorTextField.Q("unity-text-input"); m_NewSelectorTextInputField.RegisterCallback <KeyDownEvent>(OnEnter, TrickleDown.TrickleDown); UpdateNewSelectorFieldEnabledStateFromDocument(); m_NewSelectorTextInputField.RegisterCallback <FocusEvent>((evt) => { var input = evt.target as VisualElement; var field = GetTextFieldParent(input); m_FieldFocusStep = FieldFocusStep.FocusedFromStandby; if (field.text == BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage || m_ShouldRefocusSelectorFieldOnBlur) { m_ShouldRefocusSelectorFieldOnBlur = false; field.value = BuilderConstants.UssSelectorClassNameSymbol; } ShowTooltip(); }, TrickleDown.TrickleDown); m_NewSelectorTextField.RegisterCallback <ChangeEvent <string> >((evt) => { if (m_FieldFocusStep != FieldFocusStep.FocusedFromStandby) { return; } m_FieldFocusStep = m_NewSelectorTextField.value == BuilderConstants.UssSelectorClassNameSymbol ? FieldFocusStep.NeedsSelectionOverride : FieldFocusStep.Idle; // We don't want the '.' we just inserted in the FocusEvent to be highlighted, // which is the default behavior. Same goes for when we add pseudo states with options menu. m_NewSelectorTextField.SelectRange(m_NewSelectorTextField.value.Length, m_NewSelectorTextField.value.Length); }); // Since MouseDown captures the mouse, we need to RegisterCallback directly on the target in order to intercept the event. // This could be replaced by setting selectAllOnMouseUp to false. m_NewSelectorTextInputField.Q <TextElement>().RegisterCallback <MouseUpEvent>((evt) => { // We want to prevent the default action on mouse up in KeyboardTextEditor, but only when // the field selection behaviour was changed by us. if (m_FieldFocusStep != FieldFocusStep.NeedsSelectionOverride) { return; } m_FieldFocusStep = FieldFocusStep.Idle; // Reselect on the next execution, after the KeyboardTextEditor selects all. m_NewSelectorTextInputField.schedule.Execute(() => { m_NewSelectorTextField.SelectRange(m_NewSelectorTextField.value.Length, m_NewSelectorTextField.value.Length); }); }, TrickleDown.TrickleDown); m_NewSelectorTextInputField.RegisterCallback <BlurEvent>((evt) => { var input = evt.target as VisualElement; var field = GetTextFieldParent(input); if (m_ShouldRefocusSelectorFieldOnBlur) { field.schedule.Execute(PostEnterRefocus); evt.PreventDefault(); evt.StopImmediatePropagation(); return; } if (string.IsNullOrEmpty(field.text) || field.text == BuilderConstants.UssSelectorClassNameSymbol) { field.SetValueWithoutNotify(BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage); m_PseudoStatesMenu.SetEnabled(false); } HideTooltip(); }, TrickleDown.TrickleDown); // Setup New USS Menu. m_AddUSSMenu = parent.Q <ToolbarMenu>("add-uss-menu"); SetUpAddUSSMenu(); // Setup pseudo states menu. m_PseudoStatesMenu = m_NewSelectorField.pseudoStatesMenu; // Update sub title. UpdateSubtitleFromActiveUSS(); // Init drag stylesheet root classDragger.builderStylesheetRoot = container; styleSheetsDragger.builderStylesheetRoot = container; RegisterCallback <GeometryChangedEvent>(e => AdjustPosition()); }
public BuilderStyleSheets( BuilderViewport viewport, BuilderSelection selection, BuilderClassDragger classDragger, BuilderHierarchyDragger hierarchyDragger, BuilderExplorerContextMenu contextMenuManipulator, HighlightOverlayPainter highlightOverlayPainter, BuilderTooltipPreview tooltipPreview) : base( viewport, selection, classDragger, hierarchyDragger, contextMenuManipulator, viewport.styleSelectorElementContainer, highlightOverlayPainter, kToolbarPath) { m_TooltipPreview = tooltipPreview; if (m_TooltipPreview != null) { var helpTooltipTemplate = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>(kHelpTooltipPath); var helpTooltipContainer = helpTooltipTemplate.CloneTree(); m_TooltipPreview.Add(helpTooltipContainer); // We are the only ones using it so just add the contents and be done. } viewDataKey = "builder-style-sheets"; AddToClassList(BuilderConstants.ExplorerStyleSheetsPaneClassName); var parent = this.Q("new-selector-item"); // Init text field. m_NewSelectorTextField = parent.Q <TextField>("new-selector-field"); m_NewSelectorTextField.SetValueWithoutNotify(BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage); m_NewSelectorTextInputField = m_NewSelectorTextField.Q("unity-text-input"); m_NewSelectorTextInputField.RegisterCallback <KeyDownEvent>(OnEnter, TrickleDown.TrickleDown); m_NewSelectorTextInputField.RegisterCallback <FocusEvent>((evt) => { var input = evt.target as VisualElement; var field = input.parent as TextField; m_FieldFocusedFromStandby = true; if (field.text == BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage || m_NewSelectorJustCreated) { m_NewSelectorJustCreated = false; field.value = BuilderConstants.UssSelectorClassNameSymbol; } ShowTooltip(); }); m_NewSelectorTextField.RegisterCallback <ChangeEvent <string> >((evt) => { var field = evt.target as TextField; if (!string.IsNullOrEmpty(evt.newValue) && evt.newValue != BuilderConstants.UssSelectorClassNameSymbol) { m_NewSelectorAddButton.SetEnabled(true); m_PseudoStatesMenu.SetEnabled(true); } else { m_NewSelectorAddButton.SetEnabled(false); m_PseudoStatesMenu.SetEnabled(false); } if (!m_FieldFocusedFromStandby) { return; } m_FieldFocusedFromStandby = false; // We don't want the '.' we just inserted in the FocusEvent to be highlighted, // which is the default behavior. field.SelectRange(1, 1); }); m_NewSelectorTextInputField.RegisterCallback <BlurEvent>((evt) => { var input = evt.target as VisualElement; var field = input.parent as TextField; if (m_NewSelectorJustCreated) { field.schedule.Execute(PostEnterRefocus); evt.PreventDefault(); evt.StopImmediatePropagation(); return; } if (string.IsNullOrEmpty(field.text) || field.text == BuilderConstants.UssSelectorClassNameSymbol) { field.SetValueWithoutNotify(BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage); m_NewSelectorAddButton.SetEnabled(false); m_PseudoStatesMenu.SetEnabled(false); } HideTooltip(); }); // Setup new selector button. m_NewSelectorAddButton = parent.Q <ToolbarButton>("add-new-selector-button"); m_NewSelectorAddButton.clickable.clicked += OnAddPress; m_NewSelectorAddButton.SetEnabled(false); // Setup pseudo states menu. m_PseudoStatesMenu = parent.Q <ToolbarMenu>("add-pseudo-state-menu"); m_PseudoStatesMenu.SetEnabled(false); SetUpPseudoStatesMenu(); }
public BuilderStyleSheets( BuilderPaneWindow paneWindow, BuilderViewport viewport, BuilderSelection selection, BuilderClassDragger classDragger, BuilderStyleSheetsDragger styleSheetsDragger, HighlightOverlayPainter highlightOverlayPainter, BuilderTooltipPreview tooltipPreview) : base( paneWindow, viewport, selection, classDragger, styleSheetsDragger, new BuilderStyleSheetsContextMenu(paneWindow, selection), viewport.styleSelectorElementContainer, false, highlightOverlayPainter, kToolbarPath) { m_TooltipPreview = tooltipPreview; if (m_TooltipPreview != null) { var helpTooltipTemplate = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>(kHelpTooltipPath); var helpTooltipContainer = helpTooltipTemplate.CloneTree(); m_TooltipPreview.Add(helpTooltipContainer); // We are the only ones using it so just add the contents and be done. } viewDataKey = "builder-style-sheets"; AddToClassList(BuilderConstants.ExplorerStyleSheetsPaneClassName); var parent = this.Q("new-selector-item"); // Init text field. m_NewSelectorField = parent.Q <BuilderNewSelectorField>("new-selector-field"); m_NewSelectorTextField = m_NewSelectorField.textField; m_NewSelectorTextField.SetValueWithoutNotify(BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage); m_NewSelectorTextInputField = m_NewSelectorTextField.Q("unity-text-input"); m_NewSelectorTextInputField.RegisterCallback <KeyDownEvent>(OnEnter, TrickleDown.TrickleDown); UpdateNewSelectorFieldEnabledStateFromDocument(); m_NewSelectorTextInputField.RegisterCallback <FocusEvent>((evt) => { var input = evt.target as VisualElement; var field = input.parent as TextField; m_FieldFocusedFromStandby = true; if (field.text == BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage || m_ShouldRefocusSelectorFieldOnBlur) { m_ShouldRefocusSelectorFieldOnBlur = false; field.value = BuilderConstants.UssSelectorClassNameSymbol; } ShowTooltip(); }); m_NewSelectorTextField.RegisterCallback <ChangeEvent <string> >((evt) => { var field = evt.target as TextField; if (!m_FieldFocusedFromStandby) { return; } m_FieldFocusedFromStandby = false; // We don't want the '.' we just inserted in the FocusEvent to be highlighted, // which is the default behavior. field.SelectRange(1, 1); }); m_NewSelectorTextInputField.RegisterCallback <BlurEvent>((evt) => { var input = evt.target as VisualElement; var field = input.parent as TextField; if (m_ShouldRefocusSelectorFieldOnBlur) { field.schedule.Execute(PostEnterRefocus); evt.PreventDefault(); evt.StopImmediatePropagation(); return; } if (string.IsNullOrEmpty(field.text) || field.text == BuilderConstants.UssSelectorClassNameSymbol) { field.SetValueWithoutNotify(BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage); m_PseudoStatesMenu.SetEnabled(false); } HideTooltip(); }); // Setup New USS Menu. m_AddUSSMenu = parent.Q <ToolbarMenu>("add-uss-menu"); SetUpAddUSSMenu(); // Setup pseudo states menu. m_PseudoStatesMenu = m_NewSelectorField.pseudoStatesMenu; // Update sub title. UpdateSubtitleFromActiveUSS(); }