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); }
// помещение содержимого контента в отрисованный контейнер под заголовком // определнение цвета заливки для фона контейнера 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); }
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); }
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; }
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; }
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); }
/* * 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; } } }
// создание заголовка раскрывающихся полей, и кнопки +/- для раскрытия 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); }
//создание заголовока для ноды 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)); }