Exemplo n.º 1
0
        private static void Delete(Tag tag)
        {
            ObjectMapEntry entry;

            objectMap.TryGetValue(tag, out entry);
            if (entry != null)
            {
                DeletedObjectQueue queue;
                objectMap.Remove(tag);
                classNameMap.Remove(tag);
                deletedObjectMap.TryGetValue(tag, out queue);
                if (queue == null)
                {
                    queue = new DeletedObjectQueue();
                    deletedObjectMap[tag] = queue;
                }
                queue.Add(entry);
                entry.Obj.SetTag(Tag.Null);
            }
            else
            {
                DeletedObjectQueue queue2;
                deletedObjectMap.TryGetValue(tag, out queue2);
                if (queue2 != null)
                {
                    ObjectMapEntry newest = queue2.Newest;
                    newest.RemainingUndoOverDelete++;
                }
            }
        }
Exemplo n.º 2
0
        public void Add(ObjectMapEntry ome)
        {
            Element element = new Element(ome);

            if (this.head == null)
            {
                this.head = this.tail = element;
            }
            else
            {
                element.previous = this.tail;
                this.tail.next   = element;
                this.tail        = element;
            }
            this.count++;
        }
Exemplo n.º 3
0
        private static void TagHandler(TagEventType eventType, Tag tag)
        {
            switch (eventType)
            {
            case TagEventType.TAG_EVENT_UNDO_OVER_CREATE:
                ObjectMapEntry entry2;
                objectMap.TryGetValue(tag, out entry2);
                if (entry2 != null)
                {
                    objectMap.Remove(tag);
                    entry2.Obj.SetTag(Tag.Null);
                }
                break;

            case TagEventType.TAG_EVENT_NORMAL_DELETE:
                Delete(tag);
                return;

            case TagEventType.TAG_EVENT_UNDO_OVER_DELETE:
            {
                ObjectMapEntry     entry;
                DeletedObjectQueue queue;
                objectMap.TryGetValue(tag, out entry);
                if (entry != null)
                {
                    throw new ApplicationException("Unexpected map entry for: " + tag);
                }
                deletedObjectMap.TryGetValue(tag, out queue);
                if (queue == null)
                {
                    break;
                }
                if (queue.Newest.RemainingUndoOverDelete == 0)
                {
                    objectMap[tag] = queue.Newest;
                    queue.Newest.Obj.SetTag(tag);
                    queue.RemoveNewest();
                    if (queue.Count == 0)
                    {
                        deletedObjectMap.Remove(tag);
                        return;
                    }
                    break;
                }
                ObjectMapEntry newest = queue.Newest;
                newest.RemainingUndoOverDelete--;
                return;
            }

            case TagEventType.TAG_EVENT_UNDO_DELETE_EXPIRED:
                DeletedObjectQueue queue2;
                deletedObjectMap.TryGetValue(tag, out queue2);
                if (queue2 == null)
                {
                    break;
                }
                queue2.RemoveOldest();
                if (queue2.Count != 0)
                {
                    break;
                }
                deletedObjectMap.Remove(tag);
                return;

            case TagEventType.TAG_EVENT_UNDO_CREATE_EXPIRED:
            case TagEventType.TAG_EVENT_BEFORE_REPLACE:
            case TagEventType.TAG_EVENT_AFTER_REPLACE:
                break;

            case TagEventType.TAG_EVENT_UNDO_DELETE_DISCARDED:
                DeletedObjectQueue queue3;
                deletedObjectMap.TryGetValue(tag, out queue3);
                if (queue3 == null)
                {
                    break;
                }
                if (queue3.Newest.RemainingUndoOverDelete != 0)
                {
                    ObjectMapEntry entry3 = queue3.Newest;
                    entry3.RemainingUndoOverDelete--;
                    return;
                }
                queue3.RemoveNewest();
                if (queue3.Count != 0)
                {
                    break;
                }
                deletedObjectMap.Remove(tag);
                return;

            default:
                return;
            }
        }
Exemplo n.º 4
0
        public static TaggedObject Get(Tag objectTag, string name)
        {
            ObjectMapEntry entry;
            string         str;
            string         str2;
            Type           type;

            RegisterTagEventHandler();
            if (objectTag == Tag.Null)
            {
                return(null);
            }
            objectMap.TryGetValue(objectTag, out entry);
            classNameMap.TryGetValue(objectTag, out str);
            if (name != null)
            {
                str2 = name;
            }
            else
            {
                int    error = 0;
                IntPtr s     = JAM_ask_object_class_name_managed(objectTag, ref error);
                if (error != 0)
                {
                    throw new Exception(string.Concat(new object[] { "Could not get class name for tag: ", objectTag, ", error: ", error }));
                }
                str2 = JAM.ToStringFromLocale(s);
            }
            if ((entry != null) && (str2 != str))
            {
                Delete(objectTag);
                entry = null;
            }
            if (entry != null)
            {
                return(entry.Obj);
            }
            classMap.TryGetValue(str2, out type);
            if (type == null)
            {
                type = FindTypeForClass(str2, typeof(TaggedObject));
            }
            if (type == null)
            {
                throw new Exception(string.Concat(new object[] { "No automation class for tag: ", objectTag, ", class: ", str2 }));
            }
            ConstructorInfo info = type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);

            if (info == null)
            {
                throw new Exception("No constructor found for: " + type);
            }
            TaggedObject obj2  = (TaggedObject)info.Invoke(null);
            MethodInfo   info2 = type.GetMethod("initialize", BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);

            if (info2 != null)
            {
                info2.Invoke(obj2, null);
            }
            ObjectMapEntry entry2 = new ObjectMapEntry(obj2, str2);

            objectMap[objectTag]    = entry2;
            classNameMap[objectTag] = str2;
            obj2.SetTag(objectTag);
            return(obj2);
        }
Exemplo n.º 5
0
 public Element(ObjectMapEntry ome)
 {
     this.element = ome;
 }