Ejemplo n.º 1
0
        public ClassCanvasItem(IClass ct)
        {
            classtype = ct;

            grad = new LinearGradientBrush(
                new PointF(0, 0), new PointF(1, 0),
                TitleBackground, Color.White);

            classItemHeaderedContent = new InteractiveHeaderedItem(titlesCollapsed, titlesExpanded, InitContentContainer(InitContent()));

            classItemContainer.Container = this;
            classItemContainer.Add(classItemHeaderedContent);
            Pen outlinePen = GetClassOutlinePen();

            if (RoundedCorners)
            {
                int radius = CornerRadius;
                containingShape = new DrawableRectangle(null, outlinePen, radius, radius, radius, radius);
            }
            else
            {
                containingShape = new DrawableRectangle(null, outlinePen, 0, 0, 0, 0);
            }

            classItemContainer.Add(containingShape);
            classItemContainer.OrientationAxis = Axis.Z;

            if (RoundedCorners)
            {
                int radius = CornerRadius;
                titlesBackgroundCollapsed = new DrawableRectangle(grad, null, radius, radius, radius, radius);
                titlesBackgroundExpanded  = new DrawableRectangle(grad, null, radius, radius, 0, 0);
            }
            else
            {
                titlesBackgroundCollapsed = new DrawableRectangle(grad, null, 0, 0, 0, 0);
                titlesBackgroundExpanded  = new DrawableRectangle(grad, null, 0, 0, 0, 0);
            }

            titles.Border = 5;

            titlesCollapsed.Add(titlesBackgroundCollapsed);
            titlesCollapsed.Add(titles);
            titlesCollapsed.OrientationAxis = Axis.Z;

            titlesExpanded.Add(titlesBackgroundExpanded);
            titlesExpanded.Add(titles);
            titlesExpanded.OrientationAxis = Axis.Z;

            if (classtype != null)
            {
                typeclass  = classtype.Modifiers.ToString();
                typeclass += " " + classtype.ClassType.ToString();
            }
        }
Ejemplo n.º 2
0
        // помещение содержимого контента в отрисованный контейнер под заголовком
        // определнение цвета заливки для фона контейнера
        protected virtual DrawableItemsStack InitContentContainer(params IDrawableRectangle[] items)
        {
            DrawableItemsStack content = new DrawableItemsStack();

            content.OrientationAxis = Axis.Z;
            content.Add(InitContentBackground());

            foreach (IDrawableRectangle item in items)
            {
                content.Add(item);
            }

            return(content);
        }
Ejemplo n.º 3
0
        protected InteractiveHeaderedItem PrepareGroup(string title, IDrawableRectangle content)
        {
            #region Prepare Group Container
            DrawableItemsStack headerPlus  = new DrawableItemsStack();
            DrawableItemsStack headerMinus = new DrawableItemsStack();

            headerPlus.OrientationAxis  = Axis.X;
            headerMinus.OrientationAxis = Axis.X;
            #endregion

            #region Create Header
            TextSegment titleSegment = new TextSegment(Graphics, title, GroupTitleFont, true);

            PlusShape plus = new PlusShape();
            plus.Border = 3;
            headerPlus.Add(plus);
            headerPlus.Add(titleSegment);

            MinusShape minus = new MinusShape();
            minus.Border = 3;
            headerMinus.Add(minus);
            headerMinus.Add(titleSegment);

            DrawableItemsStack headerCollapsed = new DrawableItemsStack();
            DrawableItemsStack headerExpanded  = new DrawableItemsStack();

            headerCollapsed.OrientationAxis = Axis.Z;
            headerExpanded.OrientationAxis  = Axis.Z;

            headerCollapsed.Add(new DrawableRectangle(InnerTitlesBackground, null));
            headerCollapsed.Add(headerPlus);

            headerExpanded.Add(new DrawableRectangle(InnerTitlesBackground, null));
            headerExpanded.Add(headerMinus);
            #endregion

            InteractiveHeaderedItem tg = new InteractiveHeaderedItem(headerCollapsed, headerExpanded, content);
            tg.HeaderClicked += delegate { tg.Collapsed = !tg.Collapsed; };
            IMouseInteractable interactive = content as IMouseInteractable;
            if (interactive != null)
            {
                tg.ContentClicked += delegate(object sender, PointF pos) { interactive.HandleMouseClick(pos); }
            }
            ;
            tg.RedrawNeeded += HandleRedraw;

            return(tg);
        }
Ejemplo n.º 4
0
        protected virtual InteractiveItemsStack PrepareMessageContent(string message, bool reply)
        {
            // пиктограмма стрелки
            DrawableItemsStack <VectorShape> image = new DrawableItemsStack <VectorShape>();

            image.OrientationAxis = Axis.X;          // stack image components one on top of the other
            image.KeepAspectRatio = true;
            image.Add(new ArrowShape());             //OptionsCircleShape
            image.Border = 1;

            // текст
            InteractiveItemsStack replyText = new InteractiveItemsStack();

            replyText.OrientationAxis = Axis.X;
            replyText.Border          = 1;
            replyText.Add(image);

            TextSegment text = new TextSegment(Graphics, message, GroupTitleFont, true);

            text.Brush = (reply) ? Brushes.DarkBlue : Brushes.Crimson;
            replyText.Add(text);

            // Background контейнер
            InteractiveItemsStack content = new InteractiveItemsStack();

            content.OrientationAxis = Axis.Z;
            content.Add(new DrawableRectangle((reply)? ReplyTextTitlesBackground : OptionTextTitlesBackground, null, 0, 0, 5, 5));
            content.Add(replyText);

            return(content);
        }
Ejemplo n.º 5
0
        protected virtual void PrepareTitles()
        {
            if (classtype == null)
            {
                return;
            }

            IAmbience ambience = GetAmbience();

            DrawableItemsStack title = new DrawableItemsStack();

            title.OrientationAxis = Axis.X;

            TextSegment titleString = new TextSegment(base.Graphics, classtype.Name, TitleFont, true);

            title.Add(titleString);
            title.Add(collapseExpandShape);

            collapseExpandShape.Collapsed = Collapsed;

            titles.OrientationAxis = Axis.Y;

            titles.Add(title);

            titles.Add(new TextSegment(base.Graphics, typeclass, SubtextFont, true));

            if (classtype.BaseClass != null)
            {
                DrawableItemsStack inherits = new DrawableItemsStack();
                inherits.OrientationAxis = Axis.X;
                inherits.Add(new InheritanceShape());
                inherits.Add(new TextSegment(base.Graphics, classtype.BaseClass.Name, SubtextFont, true));
                titles.Add(inherits);
            }

            foreach (IReturnType rt in classtype.BaseTypes)
            {
                IClass ct = rt.GetUnderlyingClass();
                if (ct != null && ct.ClassType == ClassType.Interface)
                {
                    interfaces.Add(new TextSegment(base.Graphics, ambience.Convert(rt), SubtextFont, true));
                }
            }
        }
Ejemplo n.º 6
0
 private void AddGroupToContent(string title, InteractiveItemsStack groupContent)
 {
     if (groupContent != null)
     {
         InteractiveHeaderedItem tg = PrepareGroup(title, groupContent);
         groupNames.Add(tg, title);
         groupsByName.Add(title, tg);
         groups.Add(tg);
     }
 }
		protected override DrawableItemsStack InitContentContainer(params IDrawableRectangle[] items)
		{
			DrawableItemsStack decorator = new DrawableItemsStack();
			decorator.OrientationAxis = Axis.X;
			DrawableRectangle rect;
			if (RoundedCorners)
			{
				int radius = CornerRadius;
				rect = new DrawableRectangle(TitleBG, null, 0, 0, 0, radius);
			}
			else
			{
				rect = new DrawableRectangle(TitleBG, null, 0, 0, 0, 0);
			}
			
			rect.Width = 20;
			
			decorator.Add(rect);
			decorator.Add(base.InitContentContainer(items));
			return decorator;
		}
Ejemplo n.º 8
0
        private InteractiveHeaderedItem MessageToContent(ContentBody content, InteractiveItemsStack item, bool reply)
        {
            InteractiveHeaderedItem headerContent = PrepareMessagesHeader(content, item, reply);

            nodeContents.Add(headerContent);
            nodeContentNames.Add(headerContent, lineHeaderContent.ToString());
            nodeContentsByName.Add(lineHeaderContent.ToString(), headerContent);

            lineHeaderContent++;

            return(headerContent);
        }
Ejemplo n.º 9
0
            public MemberData(IMember member, IAmbience ambience, Graphics graphics, Font font)
            {
                IMethod   methodMember   = member as IMethod;
                IEvent    eventMember    = member as IEvent;
                IProperty propertyMember = member as IProperty;
                IField    fieldMember    = member as IField;

                DrawableItemsStack <VectorShape> image = new DrawableItemsStack <VectorShape>();

                image.OrientationAxis = Axis.Z;                 // stack image components one on top of the other
                image.KeepAspectRatio = true;

                if (methodMember != null)
                {
                    memberString = ambience.Convert(methodMember) + " : " + ambience.Convert(member.ReturnType);
                    image.Add(new MethodShape());
                }
                else if (eventMember != null)
                {
                    memberString = ambience.Convert(eventMember) + " : " + ambience.Convert(member.ReturnType);
                    image.Add(new EventShape());
                }
                else if (fieldMember != null)
                {
                    memberString = ambience.Convert(fieldMember) + " : " + ambience.Convert(member.ReturnType);
                    image.Add(new FieldShape());
                }
                else if (propertyMember != null)
                {
                    memberString = ambience.Convert(propertyMember) + " : " + ambience.Convert(member.ReturnType);
                    image.Add(new PropertyShape());
                }

                memberItem.OrientationAxis = Axis.X;
                memberItem.Add(image);
                memberItem.Add(new TextSegment(graphics, memberString, font, true));

                image.Border = 1;
            }
Ejemplo n.º 10
0
        protected override DrawableItemsStack InitContentContainer(params IDrawableRectangle[] items)
        {
            DrawableItemsStack decorator = new DrawableItemsStack();

            decorator.OrientationAxis = Axis.X;
            DrawableRectangle rect;

            if (RoundedCorners)
            {
                int radius = CornerRadius;
                rect = new DrawableRectangle(TitleBG, null, 0, 0, 0, radius);
            }
            else
            {
                rect = new DrawableRectangle(TitleBG, null, 0, 0, 0, 0);
            }

            rect.Width = 20;

            decorator.Add(rect);
            decorator.Add(base.InitContentContainer(items));
            return(decorator);
        }
Ejemplo n.º 11
0
        /*
         * void tgContentClicked(IMouseInteractable interactive, InteractiveHeaderedItem tg)
         * {
         *      if (ContentClick == null) return;
         *
         *      foreach (var i in (InteractiveItemsStack)interactive)
         *      {
         *              if (!(i is InteractiveItemsStack)) continue;
         *              foreach (var ts in (InteractiveItemsStack)i)
         *              {
         *                      if (ts is TextSegment)
         *                              ContentClick(this, (TextSegment)ts);
         *              }
         *      }
         * }
         */

        protected virtual void PrepareNodeContent()
        {
            if (dataNode == null)
            {
                return;
            }

            InteractiveItemsStack itemReply;
            InteractiveItemsStack itemOptions;
            DrawableItemsStack <InteractiveHeaderedItem> tileHeader;

            foreach (ContentBody content in dataNode.NodeContent)
            {
                switch (content.type)
                {
                case OpcodeType.Reply:
                case OpcodeType.Message:
                    itemReply = PrepareMessageContent(content.scrText, true);

                    tileHeader = new DrawableItemsStack <InteractiveHeaderedItem>();
                    tileHeader.Add(MessageToContent(content, itemReply, true));

                    items.Add(tileHeader);
                    break;

                case OpcodeType.Option:
                case OpcodeType.giq_option:
                case OpcodeType.gsay_option:
                    itemOptions = PrepareMessageContent(content.scrText, false);

                    tileHeader = new DrawableItemsStack <InteractiveHeaderedItem>();
                    tileHeader.Add(MessageToContent(content, itemOptions, false));

                    items.Add(tileHeader);
                    break;

                case OpcodeType.call:
                    //var callContent = new DrawableItemsStack(); //InteractiveItemsStack();
                    //callContent.OrientationAxis = Axis.Z;

                    //callContent.Add(new DrawableRectangle(CallTextTitlesBackground, null, 8, 8, 8, 8));
                    //callContent.Add(new TextSegment(Graphics, content.scrText, GroupTitleFont, true));

                    /*
                     * Код метода выше вызывает некорректную отрисовку высоты для элемента DrawableRectangle
                     * поэтому был использован нижний способ добавления элементов
                     */
                    var callText = new DrawableItemsStack();
                    callText.Add(new TextSegment(Graphics, content.scrText, GroupTitleFont, true));

                    var background = new DrawableItemsStack();
                    background.OrientationAxis = Axis.Z;
                    background.Add(new DrawableRectangle(CallTextTitlesBackground, null, 8, 8, 8, 8));
                    background.Add(callText);

                    var header = new InteractiveHeaderedItem(background, new DrawableItemsStack(), new DrawableItemsStack());
                    header.Collapsed = true;
                    //header.RedrawNeeded += HandleRedraw;

                    items.Add(header);
                    break;

                default:
                    items.Add(new TextSegment(Graphics, content.scrText, ScriptFont, true));
                    break;
                }
            }
        }
Ejemplo n.º 12
0
        // создание заголовка раскрывающихся полей, и кнопки +/- для раскрытия Reply/Option
        protected InteractiveHeaderedItem PrepareMessagesHeader(ContentBody content, IDrawableRectangle item, bool reply)
        {
            #region Prepare Container
            DrawableItemsStack headerPlus  = new DrawableItemsStack();
            DrawableItemsStack headerMinus = new DrawableItemsStack();

            headerPlus.OrientationAxis  = Axis.X;
            headerMinus.OrientationAxis = Axis.X;
            #endregion

            #region Create Header

            TextSegment titleSegment = new TextSegment(Graphics, (reply) ? @"""" + content.msgText + @""""
                                                                             : (nodeLowDetails) ? "\u25CF " + content.msgText : content.msgText,
                                                       content.index, MessagesFont, true, reply);                       // GroupTitleFont

            if (!nodeLowDetails)
            {
                PlusShape plus = new PlusShape();
                plus.Border     = 4;
                plus.ScaleShape = false;
                plus.Width      = plus.ShapeWidth;
                plus.Height     = plus.ShapeHeight;
                headerPlus.Add(plus);

                MinusShape minus = new MinusShape();
                minus.Border     = 4;
                minus.ScaleShape = false;
                minus.Width      = minus.ShapeWidth;
                minus.Height     = minus.ShapeHeight;
                headerMinus.Add(minus);
            }
            headerPlus.Add(titleSegment);
            headerMinus.Add(titleSegment);

            //пиктограмма
            //if (!reply) {
            //    DrawableItemsStack<VectorShape> image = new DrawableItemsStack<VectorShape>();
            //    image.OrientationAxis = Axis.X;
            //    image.KeepAspectRatio = true;
            //    image.Border = -3.0f;
            //    image.Add(new OptionsCircleShape());

            //    headerPlus.Add(image);
            //    headerMinus.Add(image);
            //}

            DrawableItemsStack headerCollapsed = new DrawableItemsStack();
            DrawableItemsStack headerExpanded  = new DrawableItemsStack();

            headerCollapsed.OrientationAxis = Axis.Z;
            headerExpanded.OrientationAxis  = Axis.Z;

            headerCollapsed.Add(new DrawableRectangle((reply) ? ReplyTitlesBackground : OptionTitlesBackground, null, 5, 5, 5, 5));
            headerCollapsed.Add(headerPlus);

            headerExpanded.Add(new DrawableRectangle((reply) ? ReplyTitlesBackground : OptionTitlesBackground, null, 5, 5, 0, 0));
            headerExpanded.Add(headerMinus);

            #endregion

            InteractiveHeaderedItem tg = new InteractiveHeaderedItem(headerCollapsed, headerExpanded, item);

            tg.Collapsed = true;

            // событие, клик мышкой по элементу строки кода
            tg.HeaderClicked += delegate(object sender, PointF e)
            {
                if (Math.Abs(tg.AbsoluteX - e.X) < 20 && Math.Abs(tg.AbsoluteY - e.Y) < 20)
                {
                    tg.Collapsed = !tg.Collapsed;
                }
                else
                {
                    ContentClick(this, titleSegment);
                }
            };

            // старый вариант
            //IMouseInteractable interactive = content as IMouseInteractable;
            //if (interactive != null) {
            //    tg.ContentClicked += delegate { tgContentClicked(interactive, tg); };
            //    //оригинальное событие
            //    //tg.ContentClicked += delegate (object sender, PointF pos) {
            //    //    interactive.HandleMouseClick(pos);
            //    //};
            //}

            tg.RedrawNeeded += HandleRedraw;

            return(tg);
        }
Ejemplo n.º 13
0
        //создание заголовока для ноды
        protected virtual void PrepareTitles()
        {
            if (dataNode == null)
            {
                return;
            }

            DrawableItemsStack title = new DrawableItemsStack();

            title.OrientationAxis = Axis.X;

            //Название
            TextSegment titleString = new TextSegment(base.Graphics, dataNode.Name, TitleFont, true, StringAlignment.Center);

            //title.Add(new NodeCircleShape(dataNode.NodeType));
            viewCodeShape = new ViewCodeShape(dataNode.ShowCodeNodeButton);
            title.Add(viewCodeShape);

            title.Add(titleString);
            title.Add(collapseExpandShape);

            collapseExpandShape.Collapsed = Collapsed = (dataNode.NodeType == NodesType.Unused || dataNode.NodeContent.Count == 0);

            titles.OrientationAxis = Axis.Y;
            titles.Add(title);

            if (!nodeLowDetails)
            {
                //titles.Add(new TextSegment(base.Graphics, "Linked from:", LinkedFont, true));
                //Список Нод которые ссылаются на эту ноду
                DrawableItemsStack linkedFrom = new DrawableItemsStack();
                linkedFrom.OrientationAxis = Axis.Y;

                if (dataNode.NodeType == NodesType.DialogStart)
                {
                    linkedFrom.Add(new TextSegment(base.Graphics, "Start Dialogue Procedure", LinkedFont, true));
                    linkedFrom.Border = 8;
                }
                else if (dataNode.NodeType == NodesType.NoFromLink)
                {
                    linkedFrom.Add(new TextSegment(base.Graphics, "No Link Nodes", LinkedFont, true));
                    linkedFrom.Border = 8;
                }
                else if (dataNode.NodeType == NodesType.Unused)
                {
                    linkedFrom.Add(new TextSegment(base.Graphics, "Unused Node", LinkedFont, true));
                    linkedFrom.Border = 8;
                }
                else
                {
                    foreach (string linkF in dataNode.LinkedFromNodes)
                    {
                        linkedFrom.Add(new TextSegment(base.Graphics, linkF, SubtextFont, true));
                    }
                }
                titles.Add(linkedFrom);
            }
            //добавление интерфейса (можно это использовать для короткого описания к ноде)
            //string type = null;
            //if (dataNode.NodeType == NodesType.DialogStart)
            //    type = "Start Dialog";
            //else if (dataNode.NodeType == NodesType.DialogEnd)
            //    type = "Exit Dialog";
            //if (type != null)
            //    interfaces.Add(new TextSegment(base.Graphics, "test", LinkedFont, true));
        }
Ejemplo n.º 14
0
        // Создание ноды (start)
        public NodeCanvasItem(INode dataNode, bool nodeLowDetails)
        {
            this.dataNode       = dataNode;
            this.nodeLowDetails = nodeLowDetails;

            // Header gradient
            Color titleBackground;

            switch (dataNode.NodeType)
            {
            case NodesType.DialogEnd:
                titleBackground = TitleBackgroundRed;
                break;

            case NodesType.DialogStart:
                titleBackground = TitleBackgroundGreen;
                break;

            case NodesType.NoFromLink:
                titleBackground = TitleBackgroundYellow;
                break;

            case NodesType.Unused:
                titleBackground = TitleBackgroundGray;
                break;

            default:
                titleBackground = TitleBackground;
                break;
            }
            grad = new LinearGradientBrush(new PointF(0, 0), new PointF(1, 0), titleBackground, Color.White);

            classItemHeaderedContent     = new InteractiveHeaderedItem(titlesCollapsed, titlesExpanded, InitContentContainer(InitContent()));
            classItemContainer.Container = this;
            classItemContainer.Add(classItemHeaderedContent);

            Pen outlinePen = GetNodeOutlinePen();

            if (RoundedCorners)
            {
                int radius = CornerRadius;
                containingShape = new DrawableRectangle(null, outlinePen, radius, radius, radius, radius);

                titlesBackgroundCollapsed = new DrawableRectangle(grad, null, radius, radius, radius, radius);
                titlesBackgroundExpanded  = new DrawableRectangle(grad, null, radius, radius, 0, 0);
            }
            else
            {
                containingShape = new DrawableRectangle(null, outlinePen, 0, 0, 0, 0);

                titlesBackgroundCollapsed = new DrawableRectangle(grad, null, 0, 0, 0, 0);
                titlesBackgroundExpanded  = new DrawableRectangle(grad, null, 0, 0, 0, 0);
            }

            classItemContainer.Add(containingShape);
            classItemContainer.OrientationAxis = Axis.Z;

            titles.Border = 5;

            titlesCollapsed.Add(titlesBackgroundCollapsed);
            titlesCollapsed.Add(titles);
            titlesCollapsed.OrientationAxis = Axis.Z;

            titlesExpanded.Add(titlesBackgroundExpanded);
            titlesExpanded.Add(titles);
            titlesExpanded.OrientationAxis = Axis.Z;
        }