Пример #1
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);
        }
Пример #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);
        }
Пример #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);
        }
Пример #4
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));
                }
            }
        }
		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;
		}
Пример #6
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;
            }
Пример #7
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);
        }
Пример #8
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;
                }
            }
        }
Пример #9
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);
        }
Пример #10
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));
        }