Exemplo n.º 1
0
        public static void RenderObject(object o, Rectangle bounds, SpriteBatch spriteBatch, ScrollableSectionedPanel panel, Color TitleColor)
        {
            List <ReflectiveRenderer.RenderableField> fields = ReflectiveRenderer.GetRenderablesFromType(o.GetType(), o, 0);
            int entryLineHeight = ReflectiveRenderer.GetEntryLineHeight();

            panel.PanelHeight    = entryLineHeight;
            panel.NumberOfPanels = fields.Count;
            int pixelsPerIndentLevel = 20;

            panel.Draw((Action <int, Rectangle, SpriteBatch>)((i, dest, sb) =>
            {
                int num     = fields[i].IndentLevel * pixelsPerIndentLevel;
                dest.X     += num;
                dest.Width -= num;
                if (fields[i].IsTitle)
                {
                    TextItem.doFontLabelToSize(dest, fields[i].RenderedValue, GuiData.font, TitleColor, true, true);
                    Rectangle destinationRectangle = new Rectangle(dest.X, dest.Y + dest.Height - 1, dest.Width, 1);
                    sb.Draw(Utils.white, destinationRectangle, TitleColor);
                }
                else
                {
                    string text1      = fields[i].VariableName + " :";
                    Vector2 vector2_1 = GuiData.smallfont.MeasureString(text1);
                    sb.DrawString(GuiData.smallfont, text1, new Vector2((float)dest.X, (float)dest.Y), Color.Gray);
                    string text2      = fields[i].RenderedValue;
                    Vector2 vector2_2 = GuiData.smallfont.MeasureString(text2);
                    if ((double)vector2_2.X > (double)(dest.Width - 20) || (double)vector2_2.Y > (double)dest.Height)
                    {
                        text2.Replace("\n", " ");
                        text2 = text2.Substring(0, Math.Min(text2.Length, (int)((double)dest.Width / ((double)GuiData.ActiveFontConfig.tinyFontCharHeight + 2.0)))) + "...";
                    }
                    Vector2 position = new Vector2((float)((double)dest.X + (double)vector2_1.X + 6.0), (float)dest.Y);
                    if (ReflectiveRenderer.PreRenderForObject != null && sb.Name != "AltRTBatch")
                    {
                        ReflectiveRenderer.PreRenderForObject(position, fields[i].t, fields[i].RenderedValue);
                    }
                    sb.DrawString(GuiData.smallfont, text2, position, Color.White);
                }
            }), spriteBatch, bounds);
            ReflectiveRenderer.PreRenderForObject = (Action <Vector2, Type, string>)null;
        }
Exemplo n.º 2
0
        private void DrawEntry(Rectangle dest, SpriteBatch spriteBatch)
        {
            if (this.DeserializedFile == null)
            {
                try
                {
                    this.DeserializedFile = ObjectSerializer.DeserializeObject(Utils.GenerateStreamFromString(this.DeCleanXMLForFile(this.ActiveFile.data)), this.DataType);
                }
                catch (Exception ex)
                {
                    this.State        = DatabaseDaemon.DatabaseState.Error;
                    this.errorMessage = LocaleTerms.Loc("Error De-serializing Entry") + " : " + this.ActiveFile.name + "\n" + Utils.GenerateReportFromException(ex).Replace("Hacknet", "Database");
                    return;
                }
            }
            Rectangle drawRectForRow = this.GetDrawRectForRow(0, 0);

            drawRectForRow.Height = drawRectForRow.Height / 2;
            TextItem.doFontLabelToSize(drawRectForRow, string.Format(LocaleTerms.Loc("Entry for {0}"), (object)this.GetAnnounceNameForFileName(this.ActiveFile.name)), GuiData.font, Color.White, true, true);
            drawRectForRow.Y += drawRectForRow.Height;
            if (Button.doButton(7301991, drawRectForRow.X, drawRectForRow.Y, drawRectForRow.Width / 2, drawRectForRow.Height, LocaleTerms.Loc("Back"), new Color?(Color.Gray)))
            {
                this.State            = DatabaseDaemon.DatabaseState.Browse;
                this.ActiveFile       = (FileEntry)null;
                this.DeserializedFile = (object)null;
            }
            else
            {
                Rectangle bounds = new Rectangle((int)this.BlockStartTopLeft.X, (int)this.BlockStartTopLeft.Y + (int)this.blockSize, (int)((double)this.blockSize * (double)(this.blocksWide - 1)), (int)((double)this.blockSize * (double)(this.blocksHigh - 2)));
                if (this.HasSpecialCaseDraw)
                {
                    ReflectiveRenderer.PreRenderForObject += (Action <Vector2, Type, string>)((pos, targetType, targetValue) => this.DrawSpecialCase(pos, bounds, targetType, targetValue, spriteBatch));
                }
                ReflectiveRenderer.RenderObject(this.DeserializedFile, bounds, spriteBatch, this.ScrollPanel, this.ThemeColor);
                if (this.HasSpecialCaseDraw)
                {
                    ReflectiveRenderer.PreRenderForObject = (Action <Vector2, Type, string>)null;
                }
            }
        }
Exemplo n.º 3
0
        public void DrawSpecialCase(Vector2 currentPos, Rectangle totalArea, Type objType, string drawnValue, SpriteBatch sb)
        {
            if (!(sb.Name != "AltRTBatch") || !(objType == typeof(Neopal.PetType)))
            {
                return;
            }
            int       num1   = Math.Min(ReflectiveRenderer.GetEntryLineHeight() * 6, totalArea.Width / 4);
            Texture2D sprite = this.PlaceholderSprite;

            Neopal.PetType petType = (Neopal.PetType)Enum.Parse(objType, drawnValue);
            if (this.WildcardAssets.ContainsKey((object)petType))
            {
                sprite = this.WildcardAssets[(object)petType];
            }
            Rectangle petDrawPos = new Rectangle(totalArea.X + totalArea.Width - num1 - 10, (int)currentPos.Y + 4, num1, num1);
            double    num2       = (double)sprite.Height / (double)petDrawPos.Height;
            int       val2       = totalArea.Y + totalArea.Height - petDrawPos.Y;
            int       height     = Math.Min(sprite.Height, (int)(num2 * (double)val2));
            Rectangle?clip       = new Rectangle?(new Rectangle(0, 0, sprite.Width, height));

            petDrawPos.Height          = Math.Min(petDrawPos.Height, val2);
            this.os.postFXDrawActions += (Action)(() => sb.Draw(sprite, petDrawPos, clip, Color.White));
        }
Exemplo n.º 4
0
        private static List <ReflectiveRenderer.RenderableField> GetRenderablesFromType(Type type, object o, int indentLevel = 0)
        {
            List <ReflectiveRenderer.RenderableField> renderableFieldList = new List <ReflectiveRenderer.RenderableField>();

            if (ObjectSerializer.IsSimple(type))
            {
                renderableFieldList.Add(new ReflectiveRenderer.RenderableField()
                {
                    VariableName  = "Data",
                    RenderedValue = o.ToString(),
                    IsTitle       = false,
                    IndentLevel   = indentLevel,
                    t             = type
                });
            }
            else if (ObjectSerializer.TypeInstanceOfInterface(type, typeof(ICollection)))
            {
                foreach (object o1 in (IEnumerable)(o as ICollection))
                {
                    renderableFieldList.AddRange((IEnumerable <ReflectiveRenderer.RenderableField>)ReflectiveRenderer.GetRenderablesFromType(o1.GetType(), o1, indentLevel + 1));
                }
            }
            else
            {
                renderableFieldList.Add(new ReflectiveRenderer.RenderableField()
                {
                    IsTitle       = true,
                    RenderedValue = ReflectiveRenderer.FilterTypeName(type.Name),
                    IndentLevel   = indentLevel
                });
                FieldInfo[] fields = type.GetFields();
                for (int index = 0; index < fields.Length; ++index)
                {
                    if (ObjectSerializer.IsSimple(fields[index].FieldType))
                    {
                        renderableFieldList.Add(new ReflectiveRenderer.RenderableField()
                        {
                            VariableName  = fields[index].Name,
                            RenderedValue = fields[index].GetValue(o).ToString(),
                            IsTitle       = false,
                            IndentLevel   = indentLevel,
                            t             = fields[index].FieldType
                        });
                    }
                    else
                    {
                        renderableFieldList.AddRange((IEnumerable <ReflectiveRenderer.RenderableField>)ReflectiveRenderer.GetRenderablesFromType(fields[index].FieldType, fields[index].GetValue(o), indentLevel + 1));
                    }
                }
                PropertyInfo[] properties = type.GetProperties();
                for (int index = 0; index < properties.Length; ++index)
                {
                    if (ObjectSerializer.IsSimple(properties[index].PropertyType))
                    {
                        renderableFieldList.Add(new ReflectiveRenderer.RenderableField()
                        {
                            VariableName  = properties[index].Name,
                            RenderedValue = properties[index].GetValue(o, (object[])null).ToString(),
                            IsTitle       = false,
                            IndentLevel   = indentLevel,
                            t             = properties[index].PropertyType
                        });
                    }
                    else
                    {
                        renderableFieldList.AddRange((IEnumerable <ReflectiveRenderer.RenderableField>)ReflectiveRenderer.GetRenderablesFromType(properties[index].PropertyType, properties[index].GetValue(o, (object[])null), indentLevel + 1));
                    }
                }
            }
            return(renderableFieldList);
        }