Exemplo n.º 1
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = Leading.GetHashCode();
         hashCode = (hashCode * 397) ^ Children.GetHashCode();
         hashCode = (hashCode * 397) ^ Trailing.GetHashCode();
         hashCode = (hashCode * 397) ^ Body.GetHashCode();
         return(hashCode);
     }
 }
Exemplo n.º 2
0
        // ---------------------------------------------------------------------
        private void DrawDays(
            Graphics graphics,
            DateTime month,
            PointF start,
            RectangleF rectangle,
            Font font,
            Font boldFont,
            Brush textBrush,
            Brush trailingTextBrush,
            Brush highlightDayTextBrush,
            Trailing drawTrailing,
            Color todayColor,
            float[] cellMiddles)
        {
            rectangle.Offset(start);
            var weekdayFormat = new StringFormat();

            weekdayFormat.Alignment = StringAlignment.Center;

            if (gridlines)
            {
                DrawGridLines(graphics, rectangle);
            }

            var daysInMonth     = GetDaysInMonth(month.Year, month.Month);
            var firstDayOfMonth = new DateTime(month.Year, month.Month, 1);
            var verticalOffset  = rectangle.Y;
            var weeksDrawn      = 0;

            var dayOffset =
                ((int)firstDayOfMonth.DayOfWeek + 7 - (int)FirstDayOfWeek) % 7;

            if (drawTrailing == Trailing.First || drawTrailing == Trailing.Both)
            {
                // Gray days...
                var previousMonth = month.AddMonths(-1);

                var daysInPreviousMonth =
                    GetDaysInMonth(previousMonth.Year, previousMonth.Month);

                for (var day = daysInPreviousMonth - dayOffset + 1; day <= daysInPreviousMonth; ++day)
                {
                    graphics.DrawString(day.ToString(), font, trailingTextBrush,
                                        rectangle.X + cellMiddles[dayOffset - 1 - (daysInPreviousMonth - day)],
                                        verticalOffset, weekdayFormat);
                }
            }

            // Regular days...
            for (var day = 1; day <= daysInMonth; ++day)
            {
                var date = firstDayOfMonth.AddDays(day - 1);

                if (showTodayCircle && date.Date == TodayDate.Date)
                {
                    var width    = cellSize.Width;
                    var todayPen = new Pen(todayColor);
                    graphics.SmoothingMode = SmoothingMode.AntiAlias;

                    graphics.DrawEllipse(todayPen,
                                         rectangle.X + cellMiddles[dayOffset] - (width / 2),
                                         verticalOffset - 1,
                                         width,
                                         cellSize.Height);

                    todayPen.Dispose();
                    graphics.SmoothingMode = SmoothingMode.None;
                }

                var dayFont = font;

                if (BoldedDates != null && BoldedDates != null &&
                    boldedDays.Contains(date))
                {
                    dayFont = boldFont;
                }

                var dayBrush = textBrush;

                if (ColoredDates != null && coloredDays != null &&
                    coloredDays.Contains(date))
                {
                    dayBrush = highlightDayTextBrush;
                }

                graphics.DrawString(day.ToString(), dayFont, dayBrush,
                                    rectangle.X + cellMiddles[dayOffset],
                                    verticalOffset, weekdayFormat);

                dayOffset += 1;
                dayOffset %= 7;

                if (dayOffset == 0)
                {
                    verticalOffset += cellSize.Height;
                    weeksDrawn     += 1;
                }
            }

            // Gray days again...

            if (drawTrailing == Trailing.Last || drawTrailing == Trailing.Both)
            {
                var nextMonth = month.AddMonths(-1);

                var daysInNextMonth =
                    GetDaysInMonth(nextMonth.Year, nextMonth.Month);

                for (var day = 1; day <= daysInNextMonth; ++day)
                {
                    graphics.DrawString(day.ToString(), font, trailingTextBrush,
                                        rectangle.X + cellMiddles[dayOffset],
                                        verticalOffset, weekdayFormat);

                    dayOffset += 1;
                    dayOffset %= 7;

                    if (dayOffset == 0)
                    {
                        verticalOffset += cellSize.Height;
                        weeksDrawn     += 1;
                    }

                    if (weeksDrawn > 5)
                    {
                        break;
                    }
                }
            }
        }
Exemplo n.º 3
0
        protected bool Equals(InstructionNode other)
        {
            var eq = Equals(Body, other.Body);

            return(Leading.Equals(other.Leading) && Equals(Children, other.Children) && Trailing.Equals(other.Trailing) && eq);
        }
Exemplo n.º 4
0
        // ---------------------------------------------------------------------
        private void DrawMonth(
            Graphics graphics,
            DateTime month,
            PointF start,
            string[] weekdays,
            Font boldFont,
            Brush textBrush,
            Brush backBrush,
            Brush titleTextBrush,
            Brush titleBackBrush,
            Brush weekdayTextBrush,
            Brush weekdayBackBrush,
            Brush trailingTextBrush,
            Brush highlightDayTextBrush,
            Brush weeknumberTextBrush,
            Brush weeknumberBackBrush,
            Trailing drawTrailing,
            Pen divider,
            float[] cellMiddles)
        {
            DrawTitle(
                graphics,
                month.ToString("MMMM, yyyy", CultureInfo.CurrentCulture),
                start,
                titleRectangle,
                boldFont,
                titleTextBrush,
                titleBackBrush);

            DrawWeekNames(
                graphics,
                weekdays,
                start,
                weekdaysRectangle,
                Font,
                weekdayTextBrush,
                weekdayBackBrush,
                divider,
                cellMiddles);

            DrawDays(
                graphics,
                month,
                start,
                daysRectangle,
                Font,
                boldFont,
                textBrush,
                trailingTextBrush,
                highlightDayTextBrush,
                drawTrailing,
                HighlightDayTextColor,
                cellMiddles);

            if (ShowWeekNumbers)
            {
                DrawWeekNumbers(
                    graphics,
                    month,
                    start,
                    weekNumbersRectangle,
                    Font,
                    weeknumberTextBrush,
                    weeknumberBackBrush,
                    divider);
            }
        }
Exemplo n.º 5
0
 public override int GetHashCode()
 {
     return(Top.GetHashCode() ^ Leading.GetHashCode() ^ Trailing.GetHashCode() ^ Bottom.GetHashCode());
 }
Exemplo n.º 6
0
        private static void OnPreferencesGUI(string search)
        {
            scroll = EditorGUILayout.BeginScrollView(scroll, false, false);

            EditorGUILayout.Separator();
            Enabled.DoGUI();
            EditorGUILayout.Separator();
            EditorGUILayout.HelpBox("Each item has a tooltip explaining what it does, keep the mouse over it to see.", MessageType.Info);
            EditorGUILayout.Separator();

            using (Enabled.GetEnabledScope()) {
                using (new GUIIndent("Misc settings")) {
                    using (new GUIIndent("Margins")) {
                        RightMargin.DoGUISlider(-50, 50);
                        using (new GUIEnabled(Reflected.HierarchyArea.Supported)) {
                            LeftMargin.DoGUISlider(-50, 50);
                            Indent.DoGUISlider(0, 35);
                        }
                        if (!Reflected.HierarchyArea.Supported)
                        {
                            EditorGUILayout.HelpBox("Custom Indent and Margins are not supported in this Unity version", MessageType.Warning);
                        }
                    }

                    IconsSize.DoGUISlider(13, 23);
                    TreeOpacity.DoGUISlider(0f, 1f);

                    using (new GUIIndent()) {
                        using (SelectOnTree.GetFadeScope(TreeOpacity.Value > 0.01f))
                            SelectOnTree.DoGUI();
                        using (TreeStemProportion.GetFadeScope(TreeOpacity.Value > 0.01f))
                            TreeStemProportion.DoGUISlider(0f, 1f);
                    }

                    Tooltips.DoGUI();

                    using (new GUIIndent())
                        using (RelevantTooltipsOnly.GetFadeScope(Tooltips))
                            RelevantTooltipsOnly.DoGUI();

                    if (EnhancedSelectionSupported)
                    {
                        EnhancedSelection.DoGUI();
                    }

                    Trailing.DoGUI();
                    ChangeAllSelected.DoGUI();
                    NumericChildExpand.DoGUI();

                    using (new GUIEnabled(Reflected.IconWidthSupported))
                        DisableNativeIcon.DoGUI();

                    using (HideDefaultIcon.GetFadeScope(IsButtonEnabled(new Icons.GameObjectIcon())))
                        HideDefaultIcon.DoGUI();

                    using (OpenScriptsOfLogs.GetFadeScope(IsButtonEnabled(new Icons.Warnings())))
                        OpenScriptsOfLogs.DoGUI();

                    GUI.changed = false;

                    using (AllowSelectingLockedObjects.GetFadeScope(IsButtonEnabled(new Icons.Lock())))
                        AllowSelectingLockedObjects.DoGUI();

                    #if !UNITY_2019_3_OR_NEWER
                    using (new GUIEnabled(false))
                    #endif
                    using (AllowPickingLockedObjects.GetFadeScope(IsButtonEnabled(new Icons.Lock())))
                        AllowPickingLockedObjects.DoGUI();

                    HoverTintColor.DoGUI();
                }

                using (new GUIIndent("Row separators")) {
                    LineSize.DoGUISlider(0, 6);

                    using (LineColor.GetFadeScope(LineSize > 0))
                        LineColor.DoGUI();

                    OddRowColor.DoGUI();
                    EvenRowColor.DoGUI();

                    GUI.changed = false;
                    var rect = EditorGUILayout.GetControlRect(false, rowColorsList.GetHeight());
                    rect.xMin += EditorGUI.indentLevel * 16f;
                    rowColorsList.DoList(rect);
                }

                GUI.changed         = false;
                MiniLabels.Value[0] = EditorGUILayout.Popup("Mini Label Top", MiniLabels.Value[0], minilabelsNames);
                MiniLabels.Value[1] = EditorGUILayout.Popup("Mini Label Bottom", MiniLabels.Value[1], minilabelsNames);

                if (GUI.changed)
                {
                    MiniLabels.ForceSave();
                    RecreateMiniLabelProviders();
                }

                // MiniLabel.DoGUI();
                using (new GUIIndent()) {
                    using (SmallerMiniLabel.GetFadeScope(miniLabelProviders.Length > 0))
                        SmallerMiniLabel.DoGUI();
                    using (HideDefaultTag.GetFadeScope(MiniLabelTagEnabled))
                        HideDefaultTag.DoGUI();
                    using (HideDefaultLayer.GetFadeScope(MiniLabelLayerEnabled))
                        HideDefaultLayer.DoGUI();
                    using (CentralizeMiniLabelWhenPossible.GetFadeScope(miniLabelProviders.Length >= 2))
                        CentralizeMiniLabelWhenPossible.DoGUI();
                }

                LeftSideButtonPref.DoGUI();
                using (new GUIIndent())
                    using (LeftmostButton.GetFadeScope(LeftSideButton != IconBase.none))
                        LeftmostButton.DoGUI();

                using (new GUIIndent("Children behaviour on change")) {
                    using (LockAskMode.GetFadeScope(IsButtonEnabled(new Icons.Lock())))
                        LockAskMode.DoGUI();
                    using (LayerAskMode.GetFadeScope(IsButtonEnabled(new Icons.Layer()) || MiniLabelLayerEnabled))
                        LayerAskMode.DoGUI();
                    using (TagAskMode.GetFadeScope(IsButtonEnabled(new Icons.Tag()) || MiniLabelTagEnabled))
                        TagAskMode.DoGUI();
                    using (StaticAskMode.GetFadeScope(IsButtonEnabled(new Icons.Static())))
                        StaticAskMode.DoGUI();
                    using (IconAskMode.GetFadeScope(IsButtonEnabled(new Icons.GameObjectIcon())))
                        IconAskMode.DoGUI();

                    EditorGUILayout.HelpBox(string.Format("Pressing down {0} while clicking on a button will make it temporary have the opposite children change mode", Utility.CtrlKey), MessageType.Info);
                }

                leftIconsList.displayAdd = LeftIconsMenu.GetItemCount() > 0;
                leftIconsList.DoLayoutList();

                rightIconsList.displayAdd = RightIconsMenu.GetItemCount() > 0;
                rightIconsList.DoLayoutList();

                EditorGUILayout.HelpBox("Alt + Click on child expand toggle makes it expand all the grandchildren too", MessageType.Info);

                if (IsButtonEnabled(new Icons.Memory()))
                {
                    EditorGUILayout.HelpBox("\"Memory Used\" may create garbage and consequently framerate stutterings, leave it disabled if maximum performance is important for your project", MessageType.Warning);
                }

                if (IsButtonEnabled(new Icons.Lock()))
                {
                    EditorGUILayout.HelpBox("Remember to always unlock your game objects when removing or disabling this extension, as you won't be able to unlock without it and may lose scene data", MessageType.Warning);
                }

                GUI.enabled = true;
                EditorGUILayout.EndScrollView();

                using (new EditorGUILayout.HorizontalScope()) {
                    GUILayout.FlexibleSpace();
                    EditorGUILayout.LabelField(versionContent, GUILayout.Width(170f));
                }

                using (new EditorGUILayout.HorizontalScope()) {
                    if (GUILayout.Button(resetSettingsContent, GUILayout.Width(120f)))
                    {
                        onResetPreferences();
                    }

                    // if (GUILayout.Button(unlockAllContent, GUILayout.Width(120f)))
                    //     Utility.UnlockAllObjects();

                    if (GUILayout.Button(mailDeveloperContent, GUILayout.Width(120f)))
                    {
                        OpenSupportEmail();
                    }
                }

                EditorGUILayout.Separator();
                Styles.ReloadTooltips();
                EditorApplication.RepaintHierarchyWindow();
            }
        }
Exemplo n.º 7
0
        private static void OnPreferencesGUI()
        {
            scroll.Value = EditorGUILayout.BeginScrollView(scroll, false, false);

            EditorGUILayout.Separator();

            Enabled.DoGUI();
            EditorGUILayout.Separator();

            using (Enabled.GetEnabledScope()) {
                using (new GUIIndent("Misc settings")) {
                    Offset.DoGUI();
                    Tree.DoGUI();
                    Tooltips.DoGUI();
                    using (RelevantTooltipsOnly.GetFadeScope(Tooltips))
                        RelevantTooltipsOnly.DoGUI();
                    EnhancedSelection.DoGUI();
                    Trailing.DoGUI();
                    ChangeAllSelected.DoGUI();
                    NumericChildExpand.DoGUI();

                    using (HideDefaultIcon.GetFadeScope(IsButtonEnabled(new Icons.GameObjectIcon())))
                        HideDefaultIcon.DoGUI();

                    GUI.changed = false;

                    using (AllowSelectingLocked.GetFadeScope(IsButtonEnabled(new Icons.Lock())))
                        AllowSelectingLocked.DoGUI();

                    using (AllowSelectingLockedSceneView.GetFadeScope(IsButtonEnabled(new Icons.Lock()) && AllowSelectingLocked))
                        AllowSelectingLockedSceneView.DoGUI();

                    if (GUI.changed && EditorUtility.DisplayDialog("Relock all objects",
                                                                   "Would you like to relock all objects?\n" +
                                                                   "This is recommended when changing this setting and might take a few seconds on large scenes" +
                                                                   "\nIt's also recommended to do this on all scenes", "Yes", "No"))
                    {
                        Utility.RelockAllObjects();
                    }
                }

                using (new GUIIndent("Row separators")) {
                    LineSize.DoSlider(0, 6);

                    using (LineColor.GetFadeScope(LineSize > 0))
                        LineColor.DoGUI();

                    OddRowColor.DoGUI();
                    EvenRowColor.DoGUI();

                    GUI.changed = false;
                    var rect = EditorGUILayout.GetControlRect(false, rowColorsList.GetHeight());
                    rect.xMin += EditorGUI.indentLevel * 16f;
                    rowColorsList.DoList(rect);

                    if (GUI.changed)
                    {
                        PerLayerRowColors.Value = rowColorsList.list.Cast <LayerColor>().ToArray();
                    }
                }

                using (new GUIIndent(MiniLabelType)) {
                    using (SmallerMiniLabel.GetFadeScope(MiniLabelType.Value != global::EnhancedHierarchy.MiniLabelType.None))
                        SmallerMiniLabel.DoGUI();
                    using (HideDefaultTag.GetFadeScope(MiniLabelTagEnabled))
                        HideDefaultTag.DoGUI();
                    using (HideDefaultLayer.GetFadeScope(MiniLabelLayerEnabled))
                        HideDefaultLayer.DoGUI();
                    using (CentralizeMiniLabelWhenPossible.GetFadeScope((HideDefaultLayer || HideDefaultTag) && (MiniLabelType.Value == global::EnhancedHierarchy.MiniLabelType.TagAndLayer || MiniLabelType.Value == global::EnhancedHierarchy.MiniLabelType.LayerAndTag)))
                        CentralizeMiniLabelWhenPossible.DoGUI();
                }

                using (new GUIIndent(LeftSideButton))
                    using (LeftmostButton.GetFadeScope(LeftSideButton.Value != new Icons.RightNone()))
                        LeftmostButton.DoGUI();

                using (new GUIIndent("Children behaviour on change")) {
                    using (LockAskMode.GetFadeScope(IsButtonEnabled(new Icons.Lock())))
                        LockAskMode.DoGUI();
                    using (LayerAskMode.GetFadeScope(IsButtonEnabled(new Icons.Layer()) || MiniLabelLayerEnabled))
                        LayerAskMode.DoGUI();
                    using (TagAskMode.GetFadeScope(IsButtonEnabled(new Icons.Tag()) || MiniLabelTagEnabled))
                        TagAskMode.DoGUI();
                    using (StaticAskMode.GetFadeScope(IsButtonEnabled(new Icons.Static())))
                        StaticAskMode.DoGUI();
                    using (IconAskMode.GetFadeScope(IsButtonEnabled(new Icons.GameObjectIcon())))
                        IconAskMode.DoGUI();

                    EditorGUILayout.HelpBox(string.Format("Tip: Pressing down {0} while clicking on a button will make it temporary have the opposite children change mode", Utility.CtrlKey), MessageType.Info);
                }

                leftIconsList.displayAdd = LeftIconsMenu.GetItemCount() > 0;
                leftIconsList.DoLayoutList();
                LeftIcons.Value = leftIconsList.list.Cast <LeftSideIcon>().ToArray();

                rightIconsList.displayAdd = RightIconsMenu.GetItemCount() > 0;
                rightIconsList.DoLayoutList();
                RightIcons.Value = rightIconsList.list.Cast <RightSideIcon>().ToArray();

                if (IsButtonEnabled(new Icons.Lock()))
                {
                    EditorGUILayout.HelpBox("Remember to always unlock your game objects when removing or disabling this extension, as you won't be able to unlock without it and may lose scene data", MessageType.Warning);
                }

                GUI.enabled = true;
                EditorGUILayout.EndScrollView();
                EditorGUILayout.BeginHorizontal();

                if (GUILayout.Button(resetSettingsContent, GUILayout.Width(120f)))
                {
                    DeleteSavedValues();
                }
                if (GUILayout.Button(unlockAllContent, GUILayout.Width(120f)))
                {
                    Utility.UnlockAllObjects();
                }

                GUILayout.FlexibleSpace();
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.Separator();

                Styles.ReloadTooltips();
                EditorApplication.RepaintHierarchyWindow();
            }
        }
Exemplo n.º 8
0
        private static void OnPreferencesGUI()
        {
            scroll = EditorGUILayout.BeginScrollView(scroll, false, false);

            EditorGUILayout.Separator();
            Enabled.DoGUI();
            EditorGUILayout.Separator();
            EditorGUILayout.HelpBox("Each item has a tooltip explaining what it does, keep the mouse over it to see.", MessageType.Info);
            EditorGUILayout.Separator();

            using (Enabled.GetEnabledScope()) {
                using (new GUIIndent("Misc settings")) {
                    using (new GUIIndent("Margins")) {
                        RightMargin.DoGUISlider(-50, 50);
                        LeftMargin.DoGUISlider(-50, 50);
                        Indent.DoGUISlider(0, 35);
                    }

                    Tree.DoGUI();

                    using (new GUIIndent())
                        using (SelectOnTree.GetFadeScope(Tree))
                            SelectOnTree.DoGUI();

                    Tooltips.DoGUI();

                    using (new GUIIndent())
                        using (RelevantTooltipsOnly.GetFadeScope(Tooltips))
                            RelevantTooltipsOnly.DoGUI();

                    EnhancedSelection.DoGUI();
                    Trailing.DoGUI();
                    ChangeAllSelected.DoGUI();
                    NumericChildExpand.DoGUI();

                    using (HideDefaultIcon.GetFadeScope(IsButtonEnabled(new Icons.GameObjectIcon())))
                        HideDefaultIcon.DoGUI();

                    GUI.changed = false;

                    using (AllowSelectingLocked.GetFadeScope(IsButtonEnabled(new Icons.Lock())))
                        AllowSelectingLocked.DoGUI();

                    using (AllowSelectingLockedSceneView.GetFadeScope(IsButtonEnabled(new Icons.Lock()) && AllowSelectingLocked))
                        AllowSelectingLockedSceneView.DoGUI();

                    if (GUI.changed && EditorUtility.DisplayDialog("Relock all objects",
                                                                   "Would you like to relock all objects?\n" +
                                                                   "This is recommended when changing this setting and might take a few seconds on large scenes" +
                                                                   "\nIt's also recommended to do this on all scenes", "Yes", "No"))
                    {
                        Utility.RelockAllObjects();
                    }

                    HoverTintColor.DoGUI();
                }

                using (new GUIIndent("Row separators")) {
                    LineSize.DoGUISlider(0, 6);

                    using (LineColor.GetFadeScope(LineSize > 0))
                        LineColor.DoGUI();

                    OddRowColor.DoGUI();
                    EvenRowColor.DoGUI();

                    GUI.changed = false;
                    var rect = EditorGUILayout.GetControlRect(false, rowColorsList.GetHeight());
                    rect.xMin += EditorGUI.indentLevel * 16f;
                    rowColorsList.DoList(rect);
                }

                MiniLabel.DoGUI();
                using (new GUIIndent()) {
                    using (SmallerMiniLabel.GetFadeScope(MiniLabel.Value != MiniLabelType.None))
                        SmallerMiniLabel.DoGUI();
                    using (HideDefaultTag.GetFadeScope(MiniLabelTagEnabled))
                        HideDefaultTag.DoGUI();
                    using (HideDefaultLayer.GetFadeScope(MiniLabelLayerEnabled))
                        HideDefaultLayer.DoGUI();
                    using (CentralizeMiniLabelWhenPossible.GetFadeScope((HideDefaultLayer || HideDefaultTag) && (MiniLabel.Value == MiniLabelType.TagAndLayer || MiniLabel.Value == MiniLabelType.LayerAndTag)))
                        CentralizeMiniLabelWhenPossible.DoGUI();
                }

                LeftSideButtonPref.DoGUI();
                using (new GUIIndent())
                    using (LeftmostButton.GetFadeScope(LeftSideButton != IconBase.rightNone))
                        LeftmostButton.DoGUI();

                using (new GUIIndent("Children behaviour on change")) {
                    using (LockAskMode.GetFadeScope(IsButtonEnabled(new Icons.Lock())))
                        LockAskMode.DoGUI();
                    using (LayerAskMode.GetFadeScope(IsButtonEnabled(new Icons.Layer()) || MiniLabelLayerEnabled))
                        LayerAskMode.DoGUI();
                    using (TagAskMode.GetFadeScope(IsButtonEnabled(new Icons.Tag()) || MiniLabelTagEnabled))
                        TagAskMode.DoGUI();
                    using (StaticAskMode.GetFadeScope(IsButtonEnabled(new Icons.Static())))
                        StaticAskMode.DoGUI();
                    using (IconAskMode.GetFadeScope(IsButtonEnabled(new Icons.GameObjectIcon())))
                        IconAskMode.DoGUI();

                    EditorGUILayout.HelpBox(string.Format("Pressing down {0} while clicking on a button will make it temporary have the opposite children change mode", Utility.CtrlKey), MessageType.Info);
                }

                leftIconsList.displayAdd = LeftIconsMenu.GetItemCount() > 0;
                leftIconsList.DoLayoutList();

                rightIconsList.displayAdd = RightIconsMenu.GetItemCount() > 0;
                rightIconsList.DoLayoutList();

                EditorGUILayout.HelpBox("Alt + Click on child expand toggle makes it expand all the grandchildren too", MessageType.Info);

                if (IsButtonEnabled(new Icons.Memory()))
                {
                    EditorGUILayout.HelpBox("\"Memory Used\" may create garbage and consequently framerate stutterings, leave it disabled if maximum performance is important for your project", MessageType.Warning);
                }

                if (IsButtonEnabled(new Icons.Lock()))
                {
                    EditorGUILayout.HelpBox("Remember to always unlock your game objects when removing or disabling this extension, as you won't be able to unlock without it and may lose scene data", MessageType.Warning);
                }

                GUI.enabled = true;
                EditorGUILayout.EndScrollView();

                using (new EditorGUILayout.HorizontalScope()) {
                    GUILayout.FlexibleSpace();
                    EditorGUILayout.LabelField(versionContent, GUILayout.Width(170f));
                }

                using (new EditorGUILayout.HorizontalScope()) {
                    if (GUILayout.Button(resetSettingsContent, GUILayout.Width(120f)))
                    {
                        onResetPreferences();
                    }

                    if (GUILayout.Button(unlockAllContent, GUILayout.Width(120f)))
                    {
                        Utility.UnlockAllObjects();
                    }

                    if (GUILayout.Button(mailDeveloperContent, GUILayout.Width(120f)))
                    {
                        Application.OpenURL(GetEmailURL());
                    }
                }

                EditorGUILayout.Separator();
                Styles.ReloadTooltips();
                EditorApplication.RepaintHierarchyWindow();
            }
        }