Example #1
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);
        }
Example #2
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);
        }
Example #3
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;
                }
            }
        }
Example #4
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;
        }