public VariableEditingHandler(BindableElement field) { targetField = field; if (targetField is DimensionStyleField || targetField is NumericStyleField || targetField is IntegerStyleField) { m_CompleterOnTarget = CreateCompleter(); m_CompleterOnTarget.textField = targetField.Q <TextField>(); } labelElement = new Label(); var fieldLabel = targetField.GetValueByReflection("labelElement") as Label; // TODO: Will need to bring this back once we can also do the dragger at the same time. //fieldLabel.RegisterCallback<MouseDownEvent>(OnMouseDownEvent); labelElement.RegisterValueChangedCallback(e => { e.StopImmediatePropagation(); }); fieldLabel.Add(labelElement); labelElement.AddToClassList(s_LabelClassName); labelElement.text = fieldLabel.text; fieldLabel.generateVisualContent = null; // Leave the text of the default label as it is used in some queries (in tests) but prevent the text from being rendered m_Inspector = targetField.GetFirstAncestorOfType <BuilderInspector>(); if (m_Inspector != null) { m_Builder = m_Inspector.paneWindow as Builder; m_Row = targetField.GetFirstAncestorOfType <BuilderStyleRow>(); } }
public BuilderInspectorAttributes(BuilderInspector inspector) { m_Inspector = inspector; m_Selection = inspector.selection; m_AttributesSection = m_Inspector.Q <PersistedFoldout>("inspector-attributes-foldout"); }
public BuilderInspectorInheritedStyles(BuilderInspector inspector, BuilderInspectorMatchingSelectors matchingSelectors) { m_Inspector = inspector; m_Selection = inspector.selection; m_PaneWindow = inspector.paneWindow; m_MatchingSelectors = matchingSelectors; m_InheritedStylesSection = m_Inspector.Q <PersistedFoldout>("inspector-inherited-styles-foldout"); m_ClassListContainer = m_Inspector.Q("class-list-container"); m_MatchingSelectorsFoldout = m_Inspector.Q <PersistedFoldout>("matching-selectors-container"); m_AddClassField = m_Inspector.Q <TextField>("add-class-field"); m_AddClassField.isDelayed = true; m_AddClassField.RegisterCallback <KeyUpEvent>(OnAddClassFieldChange); m_AddClassButton = m_Inspector.Q <Button>("add-class-button"); m_CreateClassButton = m_Inspector.Q <Button>("create-class-button"); m_AddClassValidationMessageContainer = m_Inspector.Q("add-class-validation-message-container"); m_AddClassValidationMessageContainer.Add(new IMGUIContainer(DrawAddClassValidationMessage)); m_AddClassValidationMessageContainer.style.display = DisplayStyle.None; m_ClassPillTemplate = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>( BuilderConstants.UIBuilderPackagePath + "/BuilderClassPill.uxml"); m_AddClassButton.clickable.clicked += AddStyleClass; m_CreateClassButton.clickable.clicked += ExtractLocalStylesToNewClass; m_AddClassValidationRegex = new Regex(@"^[a-zA-Z0-9\-_]+$"); }
public BuilderInspectorStyleFields(BuilderInspector inspector) { m_Inspector = inspector; m_Selection = inspector.selection; m_StyleFields = new Dictionary <string, List <VisualElement> >(); }
public BuilderInspectorSelector(BuilderInspector inspector) { m_Inspector = inspector; m_Selection = inspector.selection; m_StyleSelectorSection = m_Inspector.Q <PersistedFoldout>("shared-style-selector-controls"); m_StyleSelectorNameField = m_StyleSelectorSection.Q <TextField>("rename-selector-field"); m_StyleSelectorNameField.isDelayed = true; m_StyleSelectorNameField.RegisterValueChangedCallback(OnStyleSelectorNameChange); }
public BuilderInspectorStyleSheet(BuilderInspector inspector) { m_Inspector = inspector; m_Selection = inspector.selection; m_StyleSheetSection = m_Inspector.Q("shared-styles-controls"); m_NewSelectorNameNameField = m_Inspector.Q <TextField>("add-new-selector-field"); m_AddNewSelectorButton = m_Inspector.Q <Button>("add-new-selector-button"); m_AddNewSelectorButton.clickable.clicked += CreateNewSelector; m_NewSelectorNameNameField.RegisterValueChangedCallback(OnCreateNewSelector); m_NewSelectorNameNameField.isDelayed = true; }
public override void CreateUI() { var root = rootVisualElement; var selection = document.primaryViewportWindow?.selection; if (selection == null) { return; } m_Inspector = new BuilderInspector(this, selection); selection.AddNotifier(m_Inspector); root.Add(m_Inspector); }
public override void ClearUI() { if (m_Inspector == null) { return; } var selection = document.primaryViewportWindow?.selection; if (selection == null) { return; } selection.RemoveNotifier(m_Inspector); m_Inspector.RemoveFromHierarchy(); m_Inspector = null; }
public BuilderInspectorHeader(BuilderInspector inspector) { m_Inspector = inspector; m_Selection = inspector.selection; m_Header = m_Inspector.Q <VisualElement>("header-container"); m_StatusIndicator = m_Header.Q <FieldStatusIndicator>("header-field-status-indicator"); m_StatusIndicator.populateMenuItems = (menu) => { BuildNameFieldContextualMenu(menu, m_TextField); }; m_InnerHeader = m_Inspector.Q <VisualElement>("header-container-minor"); m_Icon = m_Inspector.Q <VisualElement>("header-icon"); m_Pill = m_Inspector.Q <Label>("header-selected-pill"); m_Pill.AddToClassList("unity-builder-tag-pill"); m_TextField = m_Inspector.Q <TextField>("header-selected-text-field"); m_TextField.isDelayed = true; m_TextField.tooltip = "name"; m_TextField.bindingPath = "name"; m_EditorWarningHelpBox = m_Inspector.Q <UnityEngine.UIElements.HelpBox>("header-editor-warning-help-box"); m_EditorWarningHelpBox.text = BuilderConstants.HeaderSectionHelpBoxMessage; m_ErrorIcon = m_Inspector.Q <VisualElement>("header-error-icon"); // Warning must be hidden at first m_ErrorIcon.style.backgroundImage = EditorGUIUtility.LoadIcon("console.erroricon"); AdjustBottomPadding(false); // Store callbacks to reduce delegate allocations m_ElementNameChangeCallback = new EventCallback <ChangeEvent <string> >(OnNameAttributeChange); m_SelectorNameChangeCallback = new EventCallback <ChangeEvent <string> >(OnStyleSelectorNameChange); m_SelectorEnterKeyDownCallback = new EventCallback <KeyDownEvent>(OnEnterStyleSelectorNameChange); m_TextField.RegisterValueChangedCallback(m_ElementNameChangeCallback); m_RightClickManipulator = new ContextualMenuManipulator(BuildNameFieldContextualMenu); }
public BuilderInspectorInheritedStyles(BuilderInspector inspector, BuilderInspectorMatchingSelectors matchingSelectors) { m_Inspector = inspector; m_Selection = inspector.selection; m_PaneWindow = inspector.paneWindow; m_MatchingSelectors = matchingSelectors; m_InheritedStylesSection = m_Inspector.Q <PersistedFoldout>("inspector-inherited-styles-foldout"); m_ClassListContainer = m_Inspector.Q("class-list-container"); m_MatchingSelectorsFoldout = m_Inspector.Q <PersistedFoldout>("matching-selectors-container"); m_AddClassField = m_Inspector.Q <TextField>("add-class-field"); m_AddClassField.isDelayed = true; m_AddClassField.RegisterCallback <KeyUpEvent>(OnAddClassFieldChange); m_AddClassButton = m_Inspector.Q <Button>("add-class-button"); m_CreateClassButton = m_Inspector.Q <Button>("create-class-button"); m_ClassPillTemplate = BuilderPackageUtilities.LoadAssetAtPath <VisualTreeAsset>( BuilderConstants.UIBuilderPackagePath + "/BuilderClassPill.uxml"); m_AddClassButton.clickable.clicked += AddStyleClass; m_CreateClassButton.clickable.clicked += ExtractLocalStylesToNewClass; }
public VariableEditingHandler(BindableElement field) { targetField = field; labelElement = new Label(); labelElement.pickingMode = PickingMode.Position; var fieldLabel = targetField.GetValueByReflection("labelElement") as Label; fieldLabel.RegisterCallback <MouseDownEvent>(OnMouseDownEvent); labelElement.RegisterValueChangedCallback(e => { e.StopImmediatePropagation(); }); fieldLabel.Add(labelElement); labelElement.AddToClassList(s_LabelClassName); labelElement.text = fieldLabel.text; fieldLabel.generateVisualContent = null; // Leave the text of the default label as it is used in some queries (in tests) but prevent the text from being rendered m_Inspector = targetField.GetFirstAncestorOfType <BuilderInspector>(); if (m_Inspector != null) { m_Builder = m_Inspector.paneWindow as Builder; m_Row = targetField.GetFirstAncestorOfType <BuilderStyleRow>(); } }
public BuilderToolbar( BuilderPaneWindow paneWindow, BuilderSelection selection, BuilderViewport viewport, BuilderExplorer explorer, BuilderLibrary library, BuilderInspector inspector, BuilderTooltipPreview tooltipPreview) { m_PaneWindow = paneWindow; m_Selection = selection; m_Viewport = viewport; m_Explorer = explorer; m_Library = library; m_Inspector = inspector; m_TooltipPreview = tooltipPreview; var template = BuilderPackageUtilities.LoadAssetAtPath <VisualTreeAsset>( BuilderConstants.UIBuilderPackagePath + "/BuilderToolbar.uxml"); template.CloneTree(this); #if !UNITY_2019_4 && !UNITY_2020_1 m_ThemeManager = new ThemeStyleSheetManager(this); m_ThemeManager.selection = m_Selection; m_ThemeManager.themeFilesChanged += UpdateCanvasThemeMenuStatus; #else m_ThemeManager = null; #endif // File Menu m_FileMenu = this.Q <ToolbarMenu>("file-menu"); SetUpFileMenu(); // Zoom Menu m_ZoomMenu = this.Q <ToolbarMenu>("zoom-menu"); SetUpZoomMenu(); // Fit canvas m_FitCanvasButton = this.Q <ToolbarButton>(FitCanvasButtonName); m_FitCanvasButton.clickable.clicked += () => m_Viewport.FitCanvas(); // Preview Button var previewButton = this.Q <ToolbarToggle>(PreviewToggleName); previewButton.RegisterValueChangedCallback(TogglePreviewMode); m_CanvasThemeMenu = this.Q <ToolbarMenu>("canvas-theme-menu"); SetUpCanvasThemeMenu(); ChangeCanvasTheme(document.currentCanvasTheme, document.currentCanvasThemeStyleSheet); UpdateCanvasThemeMenuStatus(); SetViewportSubTitle(); // Track unsaved changes state change. SetCanvasTitle(); m_SettingsMenu = this.Q <ToolbarMenu>("settings-menu"); SetupSettingsMenu(); // Breadcrumbs & BreadCrumbs Toolbar m_BreadcrumbsToolbar = this.Q <Toolbar>(BreadcrumbsToolbarName); m_Breadcrumbs = this.Q <ToolbarBreadcrumbs>(BreadcrumbsName); SetToolbarBreadCrumbs(); // Get Builder package version. var packageInfo = PackageInfo.FindForAssetPath("Packages/" + BuilderConstants.BuilderPackageName); if (packageInfo == null) { m_BuilderPackageVersion = null; } else { m_BuilderPackageVersion = packageInfo.version; } RegisterCallback <AttachToPanelEvent>(RegisterCallbacks); }
public BuilderInspectorMatchingSelectors(BuilderInspector inspector) { m_Inspector = inspector; m_MatchedRulesExtractor = new MatchedRulesExtractor(); }
public BuilderInspectorLocalStyles(BuilderInspector inspector, BuilderInspectorStyleFields styleFields) { m_Inspector = inspector; m_StyleFields = styleFields; m_StyleFields.updateFlexColumnGlobalState = UpdateFlexColumnGlobalState; m_StyleFields.updateStyleCategoryFoldoutOverrides = UpdateStyleCategoryFoldoutOverrides; m_LocalStylesSection = m_Inspector.Q <PersistedFoldout>("inspector-local-styles-foldout"); var styleCategories = m_LocalStylesSection.Query <PersistedFoldout>( className: "unity-builder-inspector__style-category-foldout").ToList(); foreach (var styleCategory in styleCategories) { styleCategory.Q <VisualElement>(null, PersistedFoldout.headerUssClassName) .AddManipulator(new ContextualMenuManipulator(StyleCategoryContextualMenu)); var categoryStyleFields = new List <VisualElement>(); var styleRows = styleCategory.Query <BuilderStyleRow>().ToList(); foreach (var styleRow in styleRows) { var bindingPath = styleRow.bindingPath; var currentStyleFields = styleRow.Query <BindableElement>().ToList(); if (styleRow.ClassListContains("unity-builder-double-field-row")) { m_StyleFields.BindDoubleFieldRow(styleRow); } foreach (var styleField in currentStyleFields) { // Avoid fields within fields. if (styleField.parent != styleRow) { continue; } if (styleField is FoldoutNumberField) { m_StyleFields.BindStyleField(styleRow, styleField as FoldoutNumberField); } else if (styleField is FoldoutColorField) { m_StyleFields.BindStyleField(styleRow, styleField as FoldoutColorField); } else if (styleField is TransitionsListView transitionsListView) { GenerateTransitionPropertiesContent(); m_StyleFields.BindStyleField(styleRow, transitionsListView); } else if (!string.IsNullOrEmpty(styleField.bindingPath)) { m_StyleFields.BindStyleField(styleRow, styleField.bindingPath, styleField); } else { m_StyleFields.BindStyleField(styleRow, bindingPath, styleField); } categoryStyleFields.Add(styleField); } } m_StyleCategories.Add(styleCategory, categoryStyleFields); } }
public BuilderToolbar( BuilderPaneWindow paneWindow, BuilderSelection selection, BuilderViewport viewport, BuilderExplorer explorer, BuilderLibrary library, BuilderInspector inspector, BuilderTooltipPreview tooltipPreview) { m_PaneWindow = paneWindow; m_Selection = selection; m_Viewport = viewport; m_Explorer = explorer; m_Library = library; m_Inspector = inspector; m_TooltipPreview = tooltipPreview; var template = BuilderPackageUtilities.LoadAssetAtPath <VisualTreeAsset>( BuilderConstants.UIBuilderPackagePath + "/BuilderToolbar.uxml"); template.CloneTree(this); m_ThemeManager = new ThemeStyleSheetManager(this); m_ThemeManager.selection = m_Selection; m_ThemeManager.themeFilesChanged += UpdateCanvasThemeMenuStatus; // File Menu m_FileMenu = this.Q <ToolbarMenu>("file-menu"); SetUpFileMenu(); // Zoom Menu m_ZoomMenu = this.Q <ToolbarMenu>("zoom-menu"); SetUpZoomMenu(); // Fit canvas m_FitCanvasButton = this.Q <ToolbarButton>(FitCanvasButtonName); m_FitCanvasButton.clickable.clicked += () => m_Viewport.FitCanvas(); // Preview Button var previewButton = this.Q <ToolbarToggle>(PreviewToggleName); previewButton.RegisterValueChangedCallback(TogglePreviewMode); m_Viewport.SetPreviewMode(false); m_CanvasThemeMenu = this.Q <ToolbarMenu>("canvas-theme-menu"); InitCanvasTheme(); SetViewportSubTitle(); // Track unsaved changes state change. UpdateHasUnsavedChanges(); m_SettingsMenu = this.Q <ToolbarMenu>("settings-menu"); SetupSettingsMenu(); // Breadcrumbs & BreadCrumbs Toolbar m_BreadcrumbsToolbar = this.Q <Toolbar>(BreadcrumbsToolbarName); m_Breadcrumbs = this.Q <ToolbarBreadcrumbs>(BreadcrumbsName); SetToolbarBreadCrumbs(); RegisterCallback <AttachToPanelEvent>(RegisterCallbacks); }
public BuilderInspectorLocalStyles(BuilderInspector inspector, BuilderInspectorStyleFields styleFields) { m_Inspector = inspector; m_StyleFields = styleFields; m_StyleFields.updateFlexColumnGlobalState = UpdateFlexColumnGlobalState; m_StyleFields.updateStyleCategoryFoldoutOverrides = UpdateStyleCategoryFoldoutOverrides; m_LocalStylesSection = m_Inspector.Q <PersistedFoldout>("inspector-local-styles-foldout"); // We need to hide new Text Asset style property fields in any Unity version older than 2021.1. #if !PACKAGE_TEXT_CORE || UNITY_2019_4 || UNITY_2020_1 || UNITY_2020_2 || UNITY_2020_3 m_LocalStylesSection.Query(className: "unity-builder-font-asset-property-container").ForEach(e => e.style.display = DisplayStyle.None); #else m_LocalStylesSection.Query(className: "unity-builder-no-font-asset-property-container").ForEach(e => e.style.display = DisplayStyle.None); #endif var styleCategories = m_LocalStylesSection.Query <PersistedFoldout>( className: "unity-builder-inspector__style-category-foldout").ToList(); foreach (var styleCategory in styleCategories) { styleCategory.Q <VisualElement>(null, PersistedFoldout.headerUssClassName) .AddManipulator(new ContextualMenuManipulator(StyleCategoryContextualMenu)); var categoryStyleFields = new List <VisualElement>(); var styleRows = styleCategory.Query <BuilderStyleRow>().ToList(); foreach (var styleRow in styleRows) { var bindingPath = styleRow.bindingPath; var currentStyleFields = styleRow.Query <BindableElement>().ToList(); if (styleRow.ClassListContains("unity-builder-double-field-row")) { m_StyleFields.BindDoubleFieldRow(styleRow); } foreach (var styleField in currentStyleFields) { // Avoid fields within fields. if (styleField.parent != styleRow) { continue; } if (styleField is FoldoutNumberField) { m_StyleFields.BindStyleField(styleRow, styleField as FoldoutNumberField); } else if (styleField is FoldoutColorField) { m_StyleFields.BindStyleField(styleRow, styleField as FoldoutColorField); } else if (!string.IsNullOrEmpty(styleField.bindingPath)) { m_StyleFields.BindStyleField(styleRow, styleField.bindingPath, styleField); } else { BuilderStyleRow.ReAssignTooltipToChild(styleField); m_StyleFields.BindStyleField(styleRow, bindingPath, styleField); } categoryStyleFields.Add(styleField); } } m_StyleCategories.Add(styleCategory, categoryStyleFields); } }
public BuilderInspectorCanvas(BuilderInspector inspector) { m_Inspector = inspector; m_Document = inspector.document; m_CanvasInspector = m_Inspector.Q(ContainerName); var builderWindow = inspector.paneWindow as Builder; if (builderWindow == null) { return; } m_Canvas = builderWindow.canvas; m_CameraModeEnabled = false; // Size Fields m_CanvasWidth = root.Q <IntegerField>("canvas-width"); m_CanvasWidth.RegisterValueChangedCallback(OnWidthChange); m_CanvasHeight = root.Q <IntegerField>("canvas-height"); m_CanvasHeight.RegisterValueChangedCallback(OnHeightChange); m_Canvas.RegisterCallback <GeometryChangedEvent>(OnCanvasSizeChange); // This allows user to temporarily type values below the minimum canvas size SetDelayOnSizeFieldsEnabled(true); // To update the canvas size as user mouse drags the width or height labels DisableDelayOnActiveLabelMouseDraggers(); m_MatchGameViewToggle = root.Q <Toggle>("match-game-view"); m_MatchGameViewToggle.RegisterValueChangedCallback(OnMatchGameViewModeChanged); m_MatchGameViewHelpBox = root.Q <HelpBox>("match-game-view-hint"); // Background Opacity m_ColorOpacityField = root.Q <PercentSlider>("background-color-opacity-field"); m_ColorOpacityField.RegisterValueChangedCallback(e => { settings.ColorModeBackgroundOpacity = e.newValue; OnBackgroundOpacityChange(e.newValue); }); m_ImageOpacityField = root.Q <PercentSlider>("background-image-opacity-field"); m_ImageOpacityField.RegisterValueChangedCallback(e => { settings.ImageModeCanvasBackgroundOpacity = e.newValue; OnBackgroundOpacityChange(e.newValue); }); m_CameraOpacityField = root.Q <PercentSlider>("background-camera-opacity-field"); m_CameraOpacityField.RegisterValueChangedCallback(e => { settings.CameraModeCanvasBackgroundOpacity = e.newValue; OnBackgroundOpacityChange(e.newValue); }); // Setup Background State m_BackgroundOptionsFoldout = root.Q <FoldoutWithCheckbox>("canvas-background-foldout"); m_BackgroundOptionsFoldout.RegisterCheckboxValueChangedCallback(e => { settings.EnableCanvasBackground = e.newValue; PostSettingsChange(); ApplyBackgroundOptions(); }); // Setup Background Mode var backgroundModeType = typeof(BuilderCanvasBackgroundMode); var backgroundModeValues = Enum.GetValues(backgroundModeType) .OfType <BuilderCanvasBackgroundMode>().Select((v) => v.ToString()).ToList(); m_BackgroundMode = root.Q <ToggleButtonStrip>("background-mode-field"); m_BackgroundMode.enumType = backgroundModeType; m_BackgroundMode.choices = backgroundModeValues; m_BackgroundMode.RegisterValueChangedCallback(OnBackgroundModeChange); // Color field. m_ColorField = root.Q <ColorField>("background-color-field"); m_ColorField.RegisterValueChangedCallback(OnBackgroundColorChange); // Set Image field. m_ImageField = root.Q <ObjectField>("background-image-field"); m_ImageField.objectType = typeof(Texture2D); m_ImageField.RegisterValueChangedCallback(OnBackgroundImageChange); m_ImageScaleModeField = root.Q <ToggleButtonStrip>("background-image-scale-mode-field"); m_ImageScaleModeField.enumType = typeof(ScaleMode); var backgroundScaleModeValues = Enum.GetValues(typeof(ScaleMode)) .OfType <ScaleMode>().Select((v) => BuilderNameUtilities.ConvertCamelToDash(v.ToString())).ToList(); m_ImageScaleModeField.choices = backgroundScaleModeValues; m_ImageScaleModeField.RegisterValueChangedCallback(OnBackgroundImageScaleModeChange); m_FitCanvasToImageButton = root.Q <Button>("background-image-fit-canvas-button"); m_FitCanvasToImageButton.clickable.clicked += FitCanvasToImage; // Set Camera field. m_CameraField = root.Q <ObjectField>("background-camera-field"); m_CameraField.objectType = typeof(Camera); m_CameraField.RegisterValueChangedCallback(OnBackgroundCameraChange); #if !UNITY_2019_4 SetupEditorExtensionsModeToggle(); #else RemoveDocumentSettings(); #endif // Control Containers m_BackgroundColorModeControls = root.Q("canvas-background-color-mode-controls"); m_BackgroundImageModeControls = root.Q("canvas-background-image-mode-controls"); m_BackgroundCameraModeControls = root.Q("canvas-background-camera-mode-controls"); EditorApplication.playModeStateChanged += PlayModeStateChange; }
public override void CreateUI() { var root = rootVisualElement; // Load assets. var builderTemplate = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>(BuilderConstants.UIBuilderPackagePath + "/Builder.uxml"); var saveDialogTemplate = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>(BuilderConstants.UIBuilderPackagePath + "/BuilderSaveDialog.uxml"); // Load templates. builderTemplate.CloneTree(root); saveDialogTemplate.CloneTree(root); // Create overlay painter. m_HighlightOverlayPainter = new HighlightOverlayPainter(); // Fetch the save dialog. var dialog = root.Q <ModalPopup>("save-dialog"); // Fetch the tooltip previews. var styleSheetsPaneTooltipPreview = root.Q <BuilderTooltipPreview>("stylesheets-pane-tooltip-preview"); var libraryTooltipPreview = root.Q <BuilderTooltipPreview>("library-tooltip-preview"); // Create selection. m_Selection = new BuilderSelection(root, this); // Create Element Context Menu Manipulator var contextMenuManipulator = new BuilderElementContextMenu(this, selection); // Create viewport first. m_Viewport = new BuilderViewport(this, selection, contextMenuManipulator); selection.documentElement = m_Viewport.documentElement; var overlayHelper = viewport.Q <OverlayPainterHelperElement>(); overlayHelper.painter = m_HighlightOverlayPainter; // Create the rest of the panes. var classDragger = new BuilderClassDragger(this, root, selection, m_Viewport, m_Viewport.parentTracker); var hierarchyDragger = new BuilderHierarchyDragger(this, root, selection, m_Viewport, m_Viewport.parentTracker); var styleSheetsPane = new BuilderStyleSheets(m_Viewport, selection, classDragger, hierarchyDragger, contextMenuManipulator, m_HighlightOverlayPainter, styleSheetsPaneTooltipPreview); var hierarchy = new BuilderHierarchy(m_Viewport, selection, classDragger, hierarchyDragger, contextMenuManipulator, m_HighlightOverlayPainter); var libraryDragger = new BuilderLibraryDragger(this, root, selection, m_Viewport, m_Viewport.parentTracker, hierarchy.container, libraryTooltipPreview); m_Library = new BuilderLibrary(this, m_Viewport, selection, libraryDragger, libraryTooltipPreview); m_Inspector = new BuilderInspector(this, selection); m_Toolbar = new BuilderToolbar(this, selection, dialog, m_Viewport, hierarchy, m_Library, m_Inspector, libraryTooltipPreview); m_UxmlPreview = new BuilderUxmlPreview(this); m_UssPreview = new BuilderUssPreview(this); root.Q("viewport").Add(m_Viewport); m_Viewport.toolbar.Add(m_Toolbar); root.Q("library").Add(m_Library); root.Q("style-sheets").Add(styleSheetsPane); root.Q("hierarchy").Add(hierarchy); root.Q("uxml-preview").Add(m_UxmlPreview); root.Q("uss-preview").Add(m_UssPreview); root.Q("inspector").Add(m_Inspector); // Init selection. selection.AssignNotifiers(new IBuilderSelectionNotifier[] { document, m_Viewport, styleSheetsPane, hierarchy, m_Inspector, m_UxmlPreview, m_UssPreview, m_Viewport.parentTracker, m_Viewport.resizer, m_Viewport.mover, m_Viewport.anchorer }); // Command Handler commandHandler.RegisterPane(styleSheetsPane); commandHandler.RegisterPane(hierarchy); commandHandler.RegisterPane(m_Viewport); commandHandler.RegisterToolbar(m_Toolbar); OnEnableAfterAllSerialization(); }
public BuilderToolbar( BuilderPaneWindow paneWindow, BuilderSelection selection, BuilderViewport viewport, BuilderExplorer explorer, BuilderLibrary library, BuilderInspector inspector, BuilderTooltipPreview tooltipPreview) { m_PaneWindow = paneWindow; m_Selection = selection; m_Viewport = viewport; m_Explorer = explorer; m_Library = library; m_Inspector = inspector; m_TooltipPreview = tooltipPreview; var template = BuilderPackageUtilities.LoadAssetAtPath <VisualTreeAsset>( BuilderConstants.UIBuilderPackagePath + "/BuilderToolbar.uxml"); template.CloneTree(this); m_ThemeManager = new ThemeStyleSheetManager(this); m_ThemeManager.selection = m_Selection; m_ThemeManager.themeFilesChanged += UpdateCanvasThemeMenuStatus; // File Menu m_FileMenu = this.Q <ToolbarMenu>("file-menu"); SetUpFileMenu(); // Zoom Menu m_ZoomMenu = this.Q <ToolbarMenu>("zoom-menu"); SetUpZoomMenu(); // Fit canvas m_FitCanvasButton = this.Q <ToolbarButton>(FitCanvasButtonName); m_FitCanvasButton.clickable.clicked += () => m_Viewport.FitCanvas(); // Preview Button var previewButton = this.Q <ToolbarToggle>(PreviewToggleName); previewButton.RegisterValueChangedCallback(TogglePreviewMode); m_Viewport.SetPreviewMode(false); m_CanvasThemeMenu = this.Q <ToolbarMenu>("canvas-theme-menu"); SetUpCanvasThemeMenu(); var currentTheme = document.currentCanvasTheme; var currentThemeSheet = document.currentCanvasThemeStyleSheet; // If the canvas theme is the obsolete Runtime enum then search for the unity default runtime theme in the current project. // Otherwise, fallback to the current editor theme if (currentTheme == BuilderDocument.CanvasTheme.Runtime) { var defaultTssAsset = EditorGUIUtility.Load(ThemeRegistry.kUnityRuntimeThemePath) as ThemeStyleSheet; if (defaultTssAsset != null) { currentTheme = BuilderDocument.CanvasTheme.Custom; currentThemeSheet = defaultTssAsset; } else { currentTheme = BuilderDocument.CanvasTheme.Default; } } ChangeCanvasTheme(currentTheme, currentThemeSheet); UpdateCanvasThemeMenuStatus(); SetViewportSubTitle(); // Track unsaved changes state change. UpdateHasUnsavedChanges(); m_SettingsMenu = this.Q <ToolbarMenu>("settings-menu"); SetupSettingsMenu(); // Breadcrumbs & BreadCrumbs Toolbar m_BreadcrumbsToolbar = this.Q <Toolbar>(BreadcrumbsToolbarName); m_Breadcrumbs = this.Q <ToolbarBreadcrumbs>(BreadcrumbsName); SetToolbarBreadCrumbs(); // Get Builder package version. var packageInfo = PackageInfo.FindForAssetPath("Packages/" + BuilderConstants.BuilderPackageName); if (packageInfo == null) { m_BuilderPackageVersion = null; } else { m_BuilderPackageVersion = packageInfo.version; } RegisterCallback <AttachToPanelEvent>(RegisterCallbacks); }
public BuilderInspectorLocalStyles(BuilderInspector inspector, BuilderInspectorStyleFields styleFields) { m_Inspector = inspector; m_StyleFields = styleFields; m_StyleFields.updateFlexColumnGlobalState = UpdateFlexColumnGlobalState; m_StyleFields.updateStyleCategoryFoldoutOverrides = UpdateStyleCategoryFoldoutOverrides; m_LocalStylesSection = m_Inspector.Q <PersistedFoldout>("inspector-local-styles-foldout"); var styleCategories = m_LocalStylesSection.Query <PersistedFoldout>( className: "unity-builder-inspector__style-category-foldout").ToList(); foreach (var styleCategory in styleCategories) { styleCategory.Q <VisualElement>(null, PersistedFoldout.headerUssClassName) .AddManipulator(new ContextualMenuManipulator(StyleCategoryContextualMenu)); var categoryStyleFields = new List <BindableElement>(); var styleRows = styleCategory.Query <BuilderStyleRow>().ToList(); foreach (var styleRow in styleRows) { var bindingPath = styleRow.bindingPath; var currentStyleFields = styleRow.Query <BindableElement>().ToList(); #if UNITY_2019_2 if (styleRow.ClassListContains(BuilderConstants.Version_2019_3_OrNewer)) { styleRow.AddToClassList(BuilderConstants.HiddenStyleClassName); continue; } #else if (styleRow.ClassListContains(BuilderConstants.Version_2019_2)) { styleRow.AddToClassList(BuilderConstants.HiddenStyleClassName); continue; } #endif if (styleRow.ClassListContains("unity-builder-double-field-row")) { m_StyleFields.BindDoubleFieldRow(styleRow); } foreach (var styleField in currentStyleFields) { // Avoid fields within fields. if (styleField.parent != styleRow) { continue; } if (styleField is FoldoutNumberField) { m_StyleFields.BindStyleField(styleRow, styleField as FoldoutNumberField); } else if (styleField is FoldoutColorField) { m_StyleFields.BindStyleField(styleRow, styleField as FoldoutColorField); } else if (!string.IsNullOrEmpty(styleField.bindingPath)) { m_StyleFields.BindStyleField(styleRow, styleField.bindingPath, styleField); } else { BuilderStyleRow.ReAssignTooltipToChild(styleField); m_StyleFields.BindStyleField(styleRow, bindingPath, styleField); } categoryStyleFields.Add(styleField); } } m_StyleCategories.Add(styleCategory, categoryStyleFields); } }
public BuilderInspectorCanvas(BuilderInspector inspector) { m_Inspector = inspector; m_Document = inspector.document; m_CanvasInspector = m_Inspector.Q("canvas-inspector"); var builderWindow = inspector.paneWindow as Builder; if (builderWindow == null) { return; } m_Canvas = builderWindow.canvas; m_CameraModeEnabled = false; // Size Fields m_CanvasWidth = root.Q <IntegerField>("canvas-width"); m_CanvasWidth.isDelayed = true; m_CanvasWidth.RegisterValueChangedCallback(OnWidthChange); m_CanvasHeight = root.Q <IntegerField>("canvas-height"); m_CanvasHeight.isDelayed = true; m_CanvasHeight.RegisterValueChangedCallback(OnHeightChange); m_Canvas.RegisterCallback <GeometryChangedEvent>(OnCanvasSizeChange); // Background Opacity m_OpacityField = root.Q <PercentSlider>("background-opacity-field"); m_OpacityField.RegisterValueChangedCallback(OnBackgroundOpacityChange); // Setup Background Mode var backgroundModeType = typeof(BuilderCanvasBackgroundMode); var backgroundModeValues = Enum.GetValues(backgroundModeType) .OfType <BuilderCanvasBackgroundMode>().Select((v) => v.ToString()).ToList(); var backgroundModeNames = Enum.GetNames(backgroundModeType); m_BackgroundMode = root.Q <ToggleButtonStrip>("background-mode-field"); m_BackgroundMode.enumType = backgroundModeType; m_BackgroundMode.labels = backgroundModeNames; m_BackgroundMode.choices = backgroundModeValues; m_BackgroundMode.RegisterValueChangedCallback(OnBackgroundModeChange); // Color field. m_ColorField = root.Q <ColorField>("background-color-field"); m_ColorField.RegisterValueChangedCallback(OnBackgroundColorChange); // Set Image field. m_ImageField = root.Q <ObjectField>("background-image-field"); m_ImageField.objectType = typeof(Texture2D); m_ImageField.RegisterValueChangedCallback(OnBackgroundImageChange); m_ImageScaleModeField = root.Q <ToggleButtonStrip>("background-image-scale-mode-field"); m_ImageScaleModeField.enumType = typeof(ScaleMode); var backgroundScaleModeValues = Enum.GetValues(typeof(ScaleMode)) .OfType <ScaleMode>().Select((v) => BuilderNameUtilities.ConvertCamelToDash(v.ToString())).ToList(); m_ImageScaleModeField.choices = backgroundScaleModeValues; m_ImageScaleModeField.RegisterValueChangedCallback(OnBackgroundImageScaleModeChange); m_FitCanvasToImageButton = root.Q <Button>("background-image-fit-canvas-button"); m_FitCanvasToImageButton.clickable.clicked += FitCanvasToImage; // Set Camera field. m_CameraField = root.Q <ObjectField>("background-camera-field"); m_CameraField.objectType = typeof(Camera); m_CameraField.RegisterValueChangedCallback(OnBackgroundCameraChange); // Control Containers m_BackgroundColorModeControls = root.Q("canvas-background-color-mode-controls"); m_BackgroundImageModeControls = root.Q("canvas-background-image-mode-controls"); m_BackgroundCameraModeControls = root.Q("canvas-background-camera-mode-controls"); EditorApplication.playModeStateChanged += PlayModeStateChange; }
public override void CreateUI() { var root = rootVisualElement; titleContent = GetLocalizedTitleContent(); saveChangesMessage = BuilderConstants.SaveDialogSaveChangesPromptMessage; // Load assets. var builderTemplate = BuilderPackageUtilities.LoadAssetAtPath <VisualTreeAsset>(BuilderConstants.UIBuilderPackagePath + "/Builder.uxml"); // Load templates. builderTemplate.CloneTree(root); // Create overlay painter. m_HighlightOverlayPainter = new HighlightOverlayPainter(); // Fetch the tooltip previews. var styleSheetsPaneTooltipPreview = root.Q <BuilderTooltipPreview>("stylesheets-pane-tooltip-preview"); var libraryTooltipPreview = root.Q <BuilderTooltipPreview>("library-tooltip-preview"); // Create selection. m_Selection = new BuilderSelection(root, this); // Create Element Context Menu Manipulator var contextMenuManipulator = new BuilderElementContextMenu(this, selection); // Create viewport first. m_Viewport = new BuilderViewport(this, selection, contextMenuManipulator); selection.documentRootElement = m_Viewport.documentRootElement; var overlayHelper = viewport.Q <OverlayPainterHelperElement>(); overlayHelper.painter = m_HighlightOverlayPainter; // Create the rest of the panes. var classDragger = new BuilderClassDragger(this, root, selection, m_Viewport, m_Viewport.parentTracker); var styleSheetsDragger = new BuilderStyleSheetsDragger(this, root, selection); var styleSheetsPane = new BuilderStyleSheets(this, m_Viewport, selection, classDragger, styleSheetsDragger, m_HighlightOverlayPainter, styleSheetsPaneTooltipPreview); var hierarchyDragger = new BuilderHierarchyDragger(this, root, selection, m_Viewport, m_Viewport.parentTracker) { builderStylesheetRoot = styleSheetsPane.container }; m_Hierarchy = new BuilderHierarchy(this, m_Viewport, selection, classDragger, hierarchyDragger, contextMenuManipulator, m_HighlightOverlayPainter); var libraryDragger = new BuilderLibraryDragger(this, root, selection, m_Viewport, m_Viewport.parentTracker, hierarchy.container, libraryTooltipPreview) { builderStylesheetRoot = styleSheetsPane.container }; m_Viewport.viewportDragger.builderHierarchyRoot = hierarchy.container; m_Library = new BuilderLibrary(this, m_Viewport, selection, libraryDragger, libraryTooltipPreview); m_Inspector = new BuilderInspector(this, selection, m_HighlightOverlayPainter); m_Toolbar = new BuilderToolbar(this, selection, m_Viewport, hierarchy, m_Library, m_Inspector, libraryTooltipPreview); m_UxmlPreview = new BuilderUxmlPreview(this); m_UssPreview = new BuilderUssPreview(this, selection); root.Q("viewport").Add(m_Viewport); m_Viewport.toolbar.Add(m_Toolbar); root.Q("library").Add(m_Library); root.Q("style-sheets").Add(styleSheetsPane); root.Q("hierarchy").Add(hierarchy); root.Q("uxml-preview").Add(m_UxmlPreview); root.Q("uss-preview").Add(m_UssPreview); root.Q("inspector").Add(m_Inspector); // Init selection. selection.AssignNotifiers(new IBuilderSelectionNotifier[] { document, m_Viewport, styleSheetsPane, hierarchy, m_Inspector, m_Library, m_UxmlPreview, m_UssPreview, m_Toolbar, m_Viewport.parentTracker, m_Viewport.resizer, m_Viewport.mover, m_Viewport.anchorer, m_Viewport.selectionIndicator }); // Command Handler commandHandler.RegisterPane(styleSheetsPane); commandHandler.RegisterPane(hierarchy); commandHandler.RegisterPane(m_Viewport); commandHandler.RegisterToolbar(m_Toolbar); m_MiddleSplitView = rootVisualElement.Q <TwoPaneSplitView>("middle-column"); m_MiddleSplitView.RegisterCallback <GeometryChangedEvent>(OnFirstDisplay); OnEnableAfterAllSerialization(); }
public BuilderToolbar( BuilderPaneWindow paneWindow, BuilderSelection selection, ModalPopup saveDialog, BuilderViewport viewport, BuilderExplorer explorer, BuilderLibrary library, BuilderInspector inspector, BuilderTooltipPreview tooltipPreview) { m_PaneWindow = paneWindow; m_Selection = selection; m_SaveDialog = saveDialog; m_Viewport = viewport; m_Explorer = explorer; m_Library = library; m_Inspector = inspector; m_TooltipPreview = tooltipPreview; // Query the UI m_SaveDialogUxmlPathField = m_SaveDialog.Q <TextField>("save-dialog-uxml-path"); m_SaveDialogUxmlLocationButton = m_SaveDialog.Q <Button>("save-dialog-uxml-location-button"); m_SaveDialogUssPathField = m_SaveDialog.Q <TextField>("save-dialog-uss-path"); m_SaveDialogUssLocationButton = m_SaveDialog.Q <Button>("save-dialog-uss-location-button"); m_SaveDialogSaveButton = m_SaveDialog.Q <Button>("save-dialog-save-button"); m_SaveDialogCancelButton = m_SaveDialog.Q <Button>("save-dialog-cancel-button"); m_SaveDialogTitleLabel = m_SaveDialog.Q <Label>("title"); m_SaveDialogUxmlPathField.RegisterValueChangedCallback(OnUxmlPathFieldChange); m_SaveDialogUssPathField.RegisterValueChangedCallback(OnUssPathFieldChange); m_SaveDialogSaveButton.clickable.clicked += SaveDocument; m_SaveDialogCancelButton.clickable.clicked += m_SaveDialog.Hide; m_SaveDialogUxmlLocationButton.clickable.clicked += OnUxmlLocationButtonClick; m_SaveDialogUssLocationButton.clickable.clicked += OnUssLocationButtonClick; var saveDialogValidationBoxContainer = m_SaveDialog.Q("save-dialog-validation-box"); m_SaveDialogValidationBox = new IMGUIContainer(DrawSaveDialogValidationMessage); m_SaveDialogValidationBox.style.overflow = Overflow.Hidden; saveDialogValidationBoxContainer.Add(m_SaveDialogValidationBox); var template = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>( BuilderConstants.UIBuilderPackagePath + "/BuilderToolbar.uxml"); template.CloneTree(this); // File Menu m_FileMenu = this.Q <ToolbarMenu>("file-menu"); SetUpFileMenu(); // Preview Button var previewButton = this.Q <ToolbarToggle>("preview-button"); previewButton.RegisterValueChangedCallback(TogglePreviewMode); m_CanvasThemeMenu = this.Q <ToolbarMenu>("canvas-theme-menu"); SetUpCanvasThemeMenu(); ChangeCanvasTheme(document.currentCanvasTheme); UpdateCanvasThemeMenuStatus(); // Track unsaved changes state change. document.unsavedChangesStateChanged = SetViewportSubTitle; SetViewportSubTitle(); // Get Builder package version. var packageInfo = PackageInfo.FindForAssetPath("Packages/" + BuilderConstants.BuilderPackageName); if (packageInfo == null) { m_BuilderPackageVersion = null; } else { m_BuilderPackageVersion = packageInfo.version; } RegisterCallback <AttachToPanelEvent>(RegisterCallbacks); }