예제 #1
0
        static void OnHelpLinkClicked(
            HelpPanel helpPanel,
            HelpLink helpLink)
        {
            HelpLink.LinkType linkType;
            string            content;

            if (!HelpLinkData.TryGet(helpLink.Link, out linkType, out content))
            {
                return;
            }

            switch (linkType)
            {
            case HelpLink.LinkType.Action:
                GuiMessage.ShowInformation(
                    "An ACTION link has been clicked:\n" + content);
                break;

            case HelpLink.LinkType.Help:
                helpPanel.Show(
                    content == "sample1" ?
                    Images.Name.GenericBuho1 :
                    Images.Name.GenericBuhoShe1,
                    content == "sample1" ?
                    TestingHelpData.GetSample1() :
                    TestingHelpData.GetSample2());
                break;

            case HelpLink.LinkType.Link:
                Process.Start(content);
                break;
            }
        }
예제 #2
0
        internal static void For(
            HelpPanel helpPanel)
        {
            if (!helpPanel.Visible)
            {
                return;
            }

            DoHelpPanelToolbar(helpPanel);

            GUILayout.Space(10);

            DoHelpPanelContent(helpPanel);
        }
예제 #3
0
        static void DoHelpPanelToolbar(
            HelpPanel helpPanel)
        {
            Rect rect = GUILayoutUtility.GetLastRect();

            rect.y      = rect.yMax;
            rect.height = 22;

            GUILayout.Space(1);
            GUIStyle expandableToolbar = new GUIStyle(EditorStyles.toolbar);

            expandableToolbar.fixedHeight = 0;
            GUI.Label(rect, GUIContent.none, expandableToolbar);

            using (new EditorGUILayout.HorizontalScope())
            {
                if (GUILayout.Button("<", EditorStyles.miniButtonLeft))
                {
                    // TODO(codice): On Left Clicked
                }

                if (GUILayout.Button(">", EditorStyles.miniButtonRight))
                {
                    // TODO(codice): On Right Clicked
                }

                GUILayout.FlexibleSpace();

                // TODO(codice): The bool used here must be loaded and persisted by some means
                helpPanel.Data.ShouldShowAgain = EditorGUILayout.ToggleLeft(
                    PlasticLocalization.GetString(PlasticLocalization.Name.DontShowItAgain),
                    helpPanel.Data.ShouldShowAgain, UnityStyles.MiniToggle);
                bool okWasPressed = GUILayout.Button(
                    PlasticLocalization.GetString(PlasticLocalization.Name.OkButton),
                    EditorStyles.miniButton);

                if (okWasPressed)
                {
                    helpPanel.Hide();
                    // TODO(codice): Do on helppanel dismiss actions
                    return;
                }
            }
        }
예제 #4
0
        static void DoHelpPanelLinks(
            HelpPanel helpPanel,
            GUIStyle helpParagraph)
        {
            var lastRect = GUILayoutUtility.GetLastRect();

            bool       linkWasClicked = false;
            GUIContent charContent    = new GUIContent();

            for (int charIdx = 0; charIdx < helpPanel.GUIContent.text.Length; charIdx++)
            {
                HelpLink link;
                if (!helpPanel.TryGetLinkAtChar(charIdx, out link))
                {
                    continue;
                }

                charContent.text = helpPanel.GUIContent.text[charIdx].ToString();

                var pos = helpParagraph.GetCursorPixelPosition(
                    lastRect, helpPanel.GUIContent, charIdx);

                float charWidth = helpParagraph.CalcSize(charContent).x;

                Rect charRect = new Rect(pos, new Vector2(
                                             charWidth - 4, helpParagraph.lineHeight));

                if (!linkWasClicked &&
                    Mouse.IsLeftMouseButtonPressed(Event.current) &&
                    charRect.Contains(Event.current.mousePosition))
                {
                    linkWasClicked = true;
                    OnHelpLinkClicked(helpPanel, link);
                }

                // Underline for links
                charRect.y      = charRect.yMax - 1;
                charRect.height = 1;
                GUI.DrawTexture(charRect, UnityStyles.LinkTexture);
            }
        }
예제 #5
0
        static void DoHelpPanelContent(
            HelpPanel helpPanel)
        {
            using (new EditorGUILayout.HorizontalScope())
            {
                Texture image = Images.GetImage(helpPanel.Image);

                var imgRect = GUILayoutUtility.GetRect(
                    image.width, image.width, image.height, image.height);

                GUI.DrawTexture(imgRect, image, ScaleMode.ScaleToFit);

                using (new EditorGUILayout.VerticalScope())
                {
                    GUIStyle helpParagraph = UnityStyles.Paragraph;

                    helpPanel.TextScroll = GUILayout.BeginScrollView(helpPanel.TextScroll);

                    GUILayout.Label(helpPanel.GUIContent, helpParagraph);

                    if (Event.current.type != EventType.Layout)
                    {
                        DoHelpPanelLinks(helpPanel, helpParagraph);
                    }

                    GUILayout.EndScrollView();

                    Rect scrollRect = GUILayoutUtility.GetLastRect();
                    if (Mouse.IsRightMouseButtonPressed(Event.current) &&
                        scrollRect.Contains(Event.current.mousePosition))
                    {
                        GenericMenu contextMenu = BuildHelpPanelMenu(helpPanel.Data.CleanText);
                        contextMenu.ShowAsContext();
                    }
                }
            }
        }