Ejemplo n.º 1
0
 public void Pin(IArchivable archivable)
 {
     if (Contains(archivable) && !IsPinned(archivable))
     {
         pinnedArchivables.Add(archivable);
     }
 }
Ejemplo n.º 2
0
 public void Unpin(IArchivable archivable)
 {
     if (Contains(archivable) && IsPinned(archivable))
     {
         pinnedArchivables.Remove(archivable);
     }
 }
Ejemplo n.º 3
0
 public static bool Contains(Archive __instance, ref bool __result, IArchivable archivable)
 {
     lock (__instance) //changed
     {
         __result = __instance.archivables.Contains(archivable);
         return(false);
     }
 }
Ejemplo n.º 4
0
        public IArchivable ReadObject()
        {
            uint tag = ReadUInt16();

            if (tag == BigObjectTag)
            {
                tag = ReadUInt32();                 // stored as 4-bytes instead
            }
            else
            {
                if (tag != NewClassTag && (tag & ClassTag) > 0)
                {
                    tag = (tag - ClassTag) | BigClassTag;
                }
            }
            if (tag != NewClassTag && (tag & BigClassTag) == 0)
            {
                // specifies an already stored object
                uint objectTag = tag - BigClassTag;
                if (objectTag >= m_LoadArray.Count)
                {
                    throw new InvalidOperationException("Object tag too large: " + objectTag);
                }
                return((IArchivable)m_LoadArray[(int)objectTag]);
            }
            // specifies a new class
            ArchiveClass objClass;

            if (tag == NewClassTag)
            {
                // new class followed by object
                int schemaNum  = ReadInt16();
                int nameLength = ReadInt16();
                var className  = ReadStringTerm(nameLength);
                if (!m_HashClasses.ContainsKey(className))
                {
                    throw new InvalidOperationException("Unknown class type deserialising archive: " + className);
                }
                objClass = m_HashClasses[className];
                m_LoadArray.Add(objClass);
            }
            else
            {             // is existing class followed by object
                uint classIndex = tag - BigClassTag;
                if (classIndex == 0 || classIndex >= m_LoadArray.Count)
                {
                    throw new InvalidOperationException("Invalid existing class index " + classIndex);
                }
                objClass = (ArchiveClass)m_LoadArray[(int)classIndex];
                Debug.Assert(objClass != null);
            }
            IArchivable create = (IArchivable)objClass.TypeObject.GetConstructor(new Type[] { }).Invoke(new object[] { });

            m_LoadArray.Add(create);
            create.Read(this);
            return(create);
        }
Ejemplo n.º 5
0
 public bool Remove(IArchivable archivable)
 {
     if (!Contains(archivable))
     {
         return(false);
     }
     archivables.Remove(archivable);
     pinnedArchivables.Remove(archivable);
     return(true);
 }
Ejemplo n.º 6
0
 public void Unpin(IArchivable archivable)
 {
     if (this.Contains(archivable))
     {
         if (this.IsPinned(archivable))
         {
             this.pinnedArchivables.Remove(archivable);
         }
     }
 }
Ejemplo n.º 7
0
 public bool Remove(IArchivable archivable)
 {
     if (!this.Contains(archivable))
     {
         return(false);
     }
     this.archivables.Remove(archivable);
     this.pinnedArchivables.Remove(archivable);
     return(true);
 }
Ejemplo n.º 8
0
 public void Pin(IArchivable archivable)
 {
     if (this.Contains(archivable))
     {
         if (!this.IsPinned(archivable))
         {
             this.pinnedArchivables.Add(archivable);
         }
     }
 }
Ejemplo n.º 9
0
 public void Unpin(IArchivable archivable)
 {
     if (!this.Contains(archivable))
     {
         return;
     }
     if (!this.IsPinned(archivable))
     {
         return;
     }
     this.pinnedArchivables.Remove(archivable);
 }
Ejemplo n.º 10
0
 public static bool Remove(Archive __instance, ref bool __result, IArchivable archivable)
 {
     lock (__instance) //changed
     {
         if (!__instance.Contains(archivable))
         {
             __result = false;
             return(false);
         }
         __instance.archivables.Remove(archivable);
         __instance.pinnedArchivables.Remove(archivable);
         __result = true;
         return(false);
     }
 }
Ejemplo n.º 11
0
 static void Postfix(IArchivable x, ref int __result)
 {
     if (x is ArchivedDialog dialog)
     {
         __result = dialog.ID;
     }
     else if (x is Letter letter)
     {
         __result = letter.ID;
     }
     else if (x is Message msg)
     {
         __result = msg.ID;
     }
 }
Ejemplo n.º 12
0
        public override void Delete(T entity)
        {
            IArchivable archivable = entity as IArchivable;

            if (archivable != null)
            {
                archivable.DeletedBy = Thread.CurrentPrincipal.Identity.Name;
                archivable.Deleted   = DateTime.Now;
                _surrogate.Update(entity);
            }
            else
            {
                _surrogate.Delete(entity);
            }
        }
Ejemplo n.º 13
0
 public bool Add(IArchivable archivable)
 {
     if (archivable == null)
     {
         Log.Error("Tried to add null archivable.", false);
         return(false);
     }
     if (this.Contains(archivable))
     {
         return(false);
     }
     this.archivables.Add(archivable);
     this.archivables.SortBy((IArchivable x) => x.CreatedTicksGame);
     this.CheckCullArchivables();
     return(true);
 }
Ejemplo n.º 14
0
        public bool Remove(IArchivable archivable)
        {
            bool result;

            if (!this.Contains(archivable))
            {
                result = false;
            }
            else
            {
                this.archivables.Remove(archivable);
                this.pinnedArchivables.Remove(archivable);
                result = true;
            }
            return(result);
        }
Ejemplo n.º 15
0
 public static bool Add(Archive __instance, ref bool __result, IArchivable archivable)
 {
     lock (__instance) //changed
     {
         if (archivable == null)
         {
             Log.Error("Tried to add null archivable.");
             __result = false;
             return(false);
         }
         if (__instance.Contains(archivable))
         {
             __result = false;
             return(false);
         }
         __instance.archivables.Add(archivable);
         __instance.archivables.SortBy <IArchivable, int>((Func <IArchivable, int>)(x => x.CreatedTicksGame));
         __instance.CheckCullArchivables();
         __result = true;
         return(false);
     }
 }
Ejemplo n.º 16
0
        public bool Add(IArchivable archivable)
        {
            bool result;

            if (archivable == null)
            {
                Log.Error("Tried to add null archivable.", false);
                result = false;
            }
            else if (this.Contains(archivable))
            {
                result = false;
            }
            else
            {
                this.archivables.Add(archivable);
                this.archivables.SortBy((IArchivable x) => x.CreatedTicksGame);
                this.CheckCullArchivables();
                result = true;
            }
            return(result);
        }
Ejemplo n.º 17
0
        public void Write(IArchivable o)
        {
            int existingIndex = m_WrittenObjects.IndexOf(o);

            if (existingIndex >= 0)
            {
                WriteTag((uint)existingIndex, false);
            }
            else
            {
                // object not get written - check if class name has been written
                if (!m_HashClasses.ContainsKey(o.GetType()))
                {
                    throw new InvalidOperationException("Unexpected class type in ArchiveWriter" + o.GetType().ToString());
                }
                ArchiveClass archiveClass = (ArchiveClass)m_HashClasses[o.GetType()];
                if (archiveClass.Schema == -1)
                {
                    // not yet written this class
                    WriteTag(NewClassTag, true);
                    WriteTag(0, false);
                    //WriteTag(_nNextSchema, false);
                    archiveClass.Schema = (int)m_NextIndex;
                    m_NextIndex++;
                    // for some reason name is not written as a length+string - instead it is always a 16-bit length followed by string data
                    // (whereas normal StringL is 8-byte length unless that 8-bits indicates longer)
                    base.Write(Convert.ToUInt16(archiveClass.Name.Length));
                    WriteStringBytes(archiveClass.Name);
                }
                else
                {
                    WriteTag((uint)archiveClass.Schema, true);
                }
                m_NextIndex++;                 // object itself also counted in index
                m_WrittenObjects.Add(o);
                o.Write(this);
            }
        }
Ejemplo n.º 18
0
 public bool Contains(IArchivable archivable)
 {
     return(this.archivables.Contains(archivable));
 }
Ejemplo n.º 19
0
 public static void Archive(this IArchivable obj)
 {
     obj.DateArchived = DateTimeService.UtcNow;
 }
Ejemplo n.º 20
0
 public static bool IsArchived(this IArchivable obj)
 {
     return(obj.DateArchived.HasValue);
 }
Ejemplo n.º 21
0
        private void DoArchivableRow(Rect rect, IArchivable archivable, int index)
        {
            if (index % 2 == 1)
            {
                Widgets.DrawLightHighlight(rect);
            }
            Widgets.DrawHighlightIfMouseover(rect);
            Text.Font     = GameFont.Small;
            Text.Anchor   = TextAnchor.MiddleLeft;
            Text.WordWrap = false;
            Rect rect2 = rect;
            Rect rect3 = rect2;

            rect3.width = 30f;
            rect2.xMin += 40f;
            float num;

            if (Find.Archive.IsPinned(archivable))
            {
                num = 1f;
            }
            else if (Mouse.IsOver(rect3))
            {
                num = 0.25f;
            }
            else
            {
                num = 0f;
            }
            if (num > 0f)
            {
                GUI.color = new Color(1f, 1f, 1f, num);
                GUI.DrawTexture(new Rect(rect3.x + (rect3.width - 22f) / 2f, rect3.y + (rect3.height - 22f) / 2f, 22f, 22f).Rounded(), MainTabWindow_History.PinTex);
                GUI.color = Color.white;
            }
            Rect rect4     = rect2;
            Rect outerRect = rect2;

            outerRect.width = 30f;
            rect2.xMin     += 40f;
            Texture archivedIcon = archivable.ArchivedIcon;

            if (archivedIcon != null)
            {
                GUI.color = archivable.ArchivedIconColor;
                Widgets.DrawTextureFitted(outerRect, archivedIcon, 0.8f);
                GUI.color = Color.white;
            }
            Rect rect5 = rect2;

            rect5.width = 200f;
            rect2.xMin += 210f;
            Vector2 location = (Find.CurrentMap == null) ? default(Vector2) : Find.WorldGrid.LongLatOf(Find.CurrentMap.Tile);

            GUI.color = new Color(0.75f, 0.75f, 0.75f);
            int    num2 = GenDate.TickGameToAbs(archivable.CreatedTicksGame);
            string str  = string.Concat(new object[]
            {
                GenDate.DateFullStringAt((long)num2, location),
                ", ",
                GenDate.HourInteger((long)num2, location.x),
                "LetterHour".Translate()
            });

            Widgets.Label(rect5, str.Truncate(rect5.width, null));
            GUI.color = Color.white;
            Rect rect6 = rect2;

            Widgets.Label(rect6, archivable.ArchivedLabel.Truncate(rect6.width, null));
            GenUI.ResetLabelAlign();
            Text.WordWrap = true;
            TooltipHandler.TipRegion(rect3, "PinArchivableTip".Translate(200));
            if (Mouse.IsOver(rect4))
            {
                TooltipHandler.TipRegion(rect4, archivable.ArchivedTooltip);
            }
            if (Widgets.ButtonInvisible(rect3, false))
            {
                if (Find.Archive.IsPinned(archivable))
                {
                    Find.Archive.Unpin(archivable);
                    SoundDefOf.Checkbox_TurnedOff.PlayOneShotOnCamera(null);
                }
                else
                {
                    Find.Archive.Pin(archivable);
                    SoundDefOf.Checkbox_TurnedOn.PlayOneShotOnCamera(null);
                }
            }
            if (Widgets.ButtonInvisible(rect4, false))
            {
                if (Event.current.button == 1)
                {
                    LookTargets lookTargets = archivable.LookTargets;
                    if (CameraJumper.CanJump(lookTargets.TryGetPrimaryTarget()))
                    {
                        CameraJumper.TryJumpAndSelect(lookTargets.TryGetPrimaryTarget());
                        Find.MainTabsRoot.EscapeCurrentTab(true);
                    }
                }
                else
                {
                    archivable.OpenArchived();
                }
            }
        }
Ejemplo n.º 22
0
        private void DoArchivableRow(Rect rect, IArchivable archivable, int index)
        {
            if (index % 2 == 1)
            {
                Widgets.DrawLightHighlight(rect);
            }
            Widgets.DrawHighlightIfMouseover(rect);
            Text.Font     = GameFont.Small;
            Text.Anchor   = TextAnchor.MiddleLeft;
            Text.WordWrap = false;
            Rect rect2 = rect;
            Rect rect3 = rect2;

            rect3.width = 30f;
            rect2.xMin += 35f;
            float num      = Find.Archive.IsPinned(archivable) ? 1f : ((!Mouse.IsOver(rect3)) ? 0f : 0.25f);
            Rect  position = new Rect(rect3.x + (rect3.width - 22f) / 2f, rect3.y + (rect3.height - 22f) / 2f, 22f, 22f).Rounded();

            if (num > 0f)
            {
                GUI.color = new Color(1f, 1f, 1f, num);
                GUI.DrawTexture(position, PinTex);
            }
            else
            {
                GUI.color = PinOutlineColor;
                GUI.DrawTexture(position, PinOutlineTex);
            }
            GUI.color = Color.white;
            Rect rect4     = rect2;
            Rect outerRect = rect2;

            outerRect.width = 30f;
            rect2.xMin     += 35f;
            Texture archivedIcon = archivable.ArchivedIcon;

            if (archivedIcon != null)
            {
                GUI.color = archivable.ArchivedIconColor;
                Widgets.DrawTextureFitted(outerRect, archivedIcon, 0.8f);
                GUI.color = Color.white;
            }
            Rect rect5 = rect2;

            rect5.width = 80f;
            rect2.xMin += 85f;
            Vector2 location = (Find.CurrentMap != null) ? Find.WorldGrid.LongLatOf(Find.CurrentMap.Tile) : default(Vector2);

            GUI.color = new Color(0.75f, 0.75f, 0.75f);
            Widgets.Label(label: GenDate.DateShortStringAt(GenDate.TickGameToAbs(archivable.CreatedTicksGame), location).Truncate(rect5.width), rect: rect5);
            GUI.color = Color.white;
            Rect rect6 = rect2;

            Widgets.Label(rect6, archivable.ArchivedLabel.Truncate(rect6.width));
            GenUI.ResetLabelAlign();
            Text.WordWrap = true;
            TooltipHandler.TipRegionByKey(rect3, "PinArchivableTip", 200);
            if (Mouse.IsOver(rect4))
            {
                displayedMessageIndex = index;
            }
            if (Widgets.ButtonInvisible(rect3))
            {
                if (Find.Archive.IsPinned(archivable))
                {
                    Find.Archive.Unpin(archivable);
                    SoundDefOf.Checkbox_TurnedOff.PlayOneShotOnCamera();
                }
                else
                {
                    Find.Archive.Pin(archivable);
                    SoundDefOf.Checkbox_TurnedOn.PlayOneShotOnCamera();
                }
            }
            if (!Widgets.ButtonInvisible(rect4))
            {
                return;
            }
            if (Event.current.button == 1)
            {
                LookTargets lookTargets = archivable.LookTargets;
                if (CameraJumper.CanJump(lookTargets.TryGetPrimaryTarget()))
                {
                    CameraJumper.TryJumpAndSelect(lookTargets.TryGetPrimaryTarget());
                    Find.MainTabsRoot.EscapeCurrentTab();
                }
            }
            else
            {
                archivable.OpenArchived();
            }
        }
Ejemplo n.º 23
0
 private static bool <ExposeData> m__1(IArchivable x)
 {
     return(x == null);
 }
Ejemplo n.º 24
0
 private static int <Add> m__2(IArchivable x)
 {
     return(x.CreatedTicksGame);
 }
 public static IEnumerable <ListItem> SetDropDown(IEnumerable <IArchivable> baseSet, IArchivable Current)
 {
     return(from c in baseSet
            where (c.IsActive && !c.IsArchived) || (Current != null && c.ID == Current.ID)
            select c.ListItem);
 }
Ejemplo n.º 26
0
 public virtual void Restore(IArchivable archivable) => archivable.Archived = false;
Ejemplo n.º 27
0
 public static bool ShouldShow(IArchivable archivable)
 {
     return(archivable.ArchivedLabel.ToLower().Contains(searchText.ToLower()));
 }
Ejemplo n.º 28
0
 public bool IsPinned(IArchivable archivable)
 {
     return(this.pinnedArchivables.Contains(archivable));
 }
Ejemplo n.º 29
0
 public static void Archive(this IArchivable obj)
 {
     obj.IsArchived = true;
 }