예제 #1
0
        //Swaps two skins
        public void swap_skin(int origin, int destination)
        {
            Skin ori = (Skin)skins[origin];

            if (!(skins.Count == (origin + 1) && destination == origin + 1))
            {
                Skin dest   = (Skin)skins[destination];
                int  action = 0;

                //Checking what action needs to be done

                //No swapping for default slots
                if (ori.origin == "Default")
                {
                    action = -1;
                }
                //Means inserting a skin up
                if (ori.origin == "Default Replaced" && dest.origin == "Custom")
                {
                    action = 1;
                }
                //Means overwriting a default slot
                if (ori.origin == "Custom" && dest.origin == "Default")
                {
                    action = 2;
                }
                //Means swapping a Default replaced ont a default slot
                if (ori.origin == "Default Replaced" && dest.origin == "Default")
                {
                    action = 3;
                }
                switch (action)
                {
                case -1:
                    break;

                case 0:
                    swap(ori, dest);
                    break;

                case 1:
                    Skin new_skin = new Skin(fullname, ori.slot, "Default", "Default", Library, properties, log);
                    Library.insert_skin(fullname, new_skin.slot, new_skin.libraryname, new_skin.origin);
                    skins.Insert(ori.slot, new_skin);
                    Library.reload_skin_order(fullname);
                    new_skin.reload_default_skin();
                    dest = (Skin)skins[destination + 1];
                    dest.set_origin("Custom");
                    remake_skinlist_inverted();

                    break;

                case 2:
                    swap(ori, dest);
                    dest.delete_skin();
                    skins.Remove(dest);
                    ori.set_origin("Default Replaced");
                    remake_skinlist();
                    Library.reload_skin_order(fullname);
                    break;

                case 3:
                    swap(ori, dest);
                    dest.reload_default_skin();
                    break;
                }
            }
            else
            {
            }
        }