Example #1
0
            protected override bool OnPerform()
            {
                CASLogic logic = CASLogic.GetSingleton();

                if (logic == null)
                {
                    return(false);
                }

                CASClothingCategory category = CASClothingCategory.gSingleton;

                if (category == null)
                {
                    return(true);
                }

                if (category.mClothingTypesGrid == null)
                {
                    return(true);
                }

                if ((category.mClothingTypesGrid.Count > 0) || (!sPopulating))
                {
                    OnPopulate();
                }
                else
                {
                    category.mClothingTypesGrid.ItemRowsChanged -= OnPopulate;
                    category.mClothingTypesGrid.ItemRowsChanged += OnPopulate;
                }
                return(false);
            }
Example #2
0
        public static void OnDesignButtonClick(WindowBase sender, UIButtonClickEventArgs eventArgs)
        {
            try
            {
                CASClothingCategory ths = CASClothingCategory.gSingleton;
                if (ths == null)
                {
                    return;
                }

                if (ths.mCurrentPart == BodyTypes.Accessories)
                {
                    if (ths.mCurrentPreset != null)
                    {
                        if (ths.mCurrentPreset.mPart.Key != ths.mInvalidCASPart.Key)
                        {
                            CASCompositorController.Instance.SetTargetObject(ths.mCurrentPreset.mPart);
                            return;
                        }
                    }
                }

                ths.OnDesignButtonClick(sender, eventArgs);
            }
            catch (Exception e)
            {
                Common.Exception("OnDesignButtonClick", e);
            }
        }
Example #3
0
        public override void RequestAddCASPart(CASPart part, bool randomizeDesign)
        {
            if (MasterController.Settings.mAllowMultipleAccessories)
            {
                CASClothingCategory clothingCategory = CASClothingCategory.gSingleton;
                if (clothingCategory != null)
                {
                    if (clothingCategory.IsAccessoryType(part.BodyType))
                    {
                        CASLogic.GetSingleton().mRequestModelDirty = true;
                        CASLogic.CASOperationStack.Instance.Push(new AddCASPartOperationEx(part, randomizeDesign));
                        return;
                    }
                }
            }

            if (MasterController.Settings.mAllowMultipleMakeup)
            {
                CASMakeup makeup = CASMakeup.gSingleton;
                if (makeup != null)
                {
                    if (CASParts.IsMakeup(part.BodyType))
                    {
                        CASLogic.GetSingleton().mRequestModelDirty = true;
                        CASLogic.CASOperationStack.Instance.Push(new AddCASPartOperationEx(part, randomizeDesign));
                        return;
                    }
                }
            }

            base.RequestAddCASPart(part, randomizeDesign);
        }
Example #4
0
            private static bool OnPerform(StackTrace trace, StackFrame frame)
            {
                if (sSemaphore)
                {
                    return(true);
                }

                try
                {
                    sSemaphore = true;

                    //if (CASDresserSheet.gSingleton != null) return true;

                    CASDresserClothing dresser = CASDresserClothing.gSingleton;
                    if (dresser != null)
                    {
                        dresser.mDefaultText.Visible = false;
                    }

                    CASClothingCategory ths = CASClothingCategory.gSingleton;
                    if (ths == null)
                    {
                        return(true);
                    }

                    if (ths.mCategoryText.Caption.Equals(ths.GetClothingStateName(CASClothingState.Career)) && (Responder.Instance.CASModel.OutfitIndex == 0x0))
                    {
                        ths.mCurrentPreset       = null;
                        ths.mCurrentFocusedRow   = null;
                        ths.mTempFocusedRow      = null;
                        ths.mSelectedType        = CASClothingRow.SelectedTypes.None;
                        ths.mShareButton.Enabled = false;
                        ths.mTrashButton.Enabled = false;
                        ths.mSaveButton.Enabled  = false;
                        ths.mSortButton.Enabled  = false;
                        ths.mSortButton.Tag      = false;
                        ResourceKey layoutKey = ResourceKey.CreateUILayoutKey("CASClothingRow", 0x0);
                        ths.mClothingTypesGrid.BeginPopulating(ths.AddGridItem, ths.mPartsList, 0x3, layoutKey, null);
                    }

                    return(true);
                }
                finally
                {
                    sSemaphore = false;
                }
            }
Example #5
0
            protected void OnPopulate()
            {
                if (sPopulating)
                {
                    return;
                }

                try
                {
                    sPopulating = true;

                    CASLogic logic = CASLogic.GetSingleton();
                    if (logic == null)
                    {
                        return;
                    }

                    CASClothingCategory category = CASClothingCategory.gSingleton;
                    if (category == null)
                    {
                        return;
                    }

                    if (category.mClothingTypesGrid == null)
                    {
                        return;
                    }

                    category.mClothingTypesGrid.ItemRowsChanged -= OnPopulate;

                    // Must be rerun now to load the parts without interference from CASModelProxy
                    category.LoadParts();

                    PopulateGrid();
                }
                finally
                {
                    sPopulating = false;
                }
            }
Example #6
0
        public static void OnUndoRedo()
        {
            try
            {
                CASClothingCategory ths = CASClothingCategory.gSingleton;
                if (ths == null)
                {
                    return;
                }

                if (ths.mClothingTypesGrid == null)
                {
                    return;
                }

                ths.mClothingTypesGrid.SelectedItem = -1;
                List <ItemGridCellItem> items = ths.mClothingTypesGrid.Items;
                int num = 0x0;
                if (ths.mCurrentFocusedRow != null)
                {
                    ths.mCurrentFocusedRow.SetArrowGlow(false);
                }

                ths.mCurrentFocusedRow = null;
                int sAccessoriesSelection = CASClothingCategory.sAccessoriesSelection;
                foreach (ItemGridCellItem item in items)
                {
                    CASClothingRow mWin = item.mWin as CASClothingRow;
                    if (mWin != null)
                    {
                        if (mWin.SelectedItem != -1)
                        {
                            // Custom
                            bool compactCAS = false;
                            if (ths.mCurrentPart == BodyTypes.Accessories)
                            {
                                compactCAS = MasterController.Settings.mCompactAccessoryCAS;
                            }
                            else
                            {
                                compactCAS = MasterController.Settings.mCompactClothingCAS;
                            }

                            if (!compactCAS)
                            {
                                mWin.CreateGridItems(true);
                                mWin.PopulateGrid(true);
                            }

                            if ((ths.mCurrentFocusedRow == null) || (((BodyTypes)sAccessoriesSelection) == mWin.CASPart.BodyType))
                            {
                                if (ths.mCurrentFocusedRow != null)
                                {
                                    ths.mCurrentFocusedRow.SetArrowGlow(false);
                                }
                                ths.mClothingTypesGrid.SelectedItem = num;
                                ths.mCurrentFocusedRow = mWin;
                                ths.mCurrentFocusedRow.SetArrowGlow(true);
                                ths.UpdateButtons(mWin.SelectedType);
                                if (ths.IsAccessoryType(mWin.CASPart.BodyType))
                                {
                                    CASClothingCategory.sAccessoriesSelection = (int)mWin.CASPart.BodyType;
                                }
                                ths.mCurrentPreset = mWin.Selection as CASPartPreset;
                            }
                        }
                        num++;
                    }
                }
            }
            catch (Exception e)
            {
                Common.Exception("OnUndoRedo", e);
            }
        }
Example #7
0
        public static bool AddGridItem(ItemGrid grid, object current, ResourceKey layoutKey, object context)
        {
            try
            {
                CASClothingCategory ths = CASClothingCategory.gSingleton;
                if (ths == null)
                {
                    return(false);
                }

                bool flag = false;
                if (current != null)
                {
                    if (current is List <CASParts.PartPreset> )
                    {
                        List <CASParts.PartPreset> parts = current as List <CASParts.PartPreset>;
                        if (parts.Count > 0)
                        {
                            CASClothingRow row = UIManager.LoadLayout(layoutKey).GetWindowByExportID(0x1) as CASClothingRow;
                            if (row == null)
                            {
                                return(false);
                            }

                            row.UseEp5AsBaseContent = ths.mIsEp5Base;
                            row.CASPart             = parts[0].mPart;
                            row.RowController       = ths;

                            ArrayList list = CASClothingRowEx.CreateGridItems(row, parts, true);

                            ths.mSortButton.Tag = ((bool)ths.mSortButton.Tag) | row.HasFilterableContent;

                            if (list.Count > 0x0)
                            {
                                sRows.Add(row);

                                grid.AddItem(new ItemGridCellItem(row, null));

                                flag = true;
                                if (row.SelectedItem == -1)
                                {
                                    return(flag);
                                }

                                if (ths.IsAccessoryType(row.CASPart.BodyType))
                                {
                                    if (CASClothingRowEx.IsWorn(row.CASPart))
                                    {
                                        if (row.CASPart.BodyType == ((BodyTypes)CASClothingCategory.sAccessoriesSelection))
                                        {
                                            grid.SelectedItem = grid.Count - 0x1;
                                            ths.mSelectedType = row.SelectedType;
                                            CASClothingCategory.sAccessoriesSelection = (int)row.CASPart.BodyType;
                                            ths.mCurrentPreset = row.Selection as CASPartPreset;
                                        }
                                    }
                                    else
                                    {
                                        grid.SelectedItem = grid.Count - 0x1;
                                        ths.mSelectedType = row.SelectedType;
                                        CASClothingCategory.sAccessoriesSelection = (int)row.CASPart.BodyType;
                                        ths.mCurrentPreset = row.Selection as CASPartPreset;
                                    }

                                    return(flag);
                                }

                                grid.SelectedItem  = grid.Count - 0x1;
                                ths.mSelectedType  = row.SelectedType;
                                ths.mCurrentPreset = row.Selection as CASPartPreset;
                            }
                        }

                        return(flag);
                    }
                    else
                    {
                        List <object> featured = current as List <object>;
                        if (featured == null)
                        {
                            return(flag);
                        }

                        CASClothingRow row = UIManager.LoadLayout(layoutKey).GetWindowByExportID(1) as CASClothingRow;
                        row.ObjectOfInterest = featured;
                        row.RowController    = ths;

                        ArrayList items = row.CreateGridItems(true);
                        ths.mSortButton.Tag = ((bool)ths.mSortButton.Tag) | row.HasFilterableContent;
                        if (items.Count > 0)
                        {
                            grid.AddItem(new ItemGridCellItem(row, null));
                        }
                        return(true);
                    }
                }

                ths.mContentTypeFilter.UpdateFilterButtonState();

                ths.UpdateButtons(ths.mSelectedType);
                if (CASClothingCategory.OnClothingGridFinishedPopulating != null)
                {
                    CASClothingCategory.OnClothingGridFinishedPopulating();
                }

                return(flag);
            }
            catch (Exception e)
            {
                Common.Exception("AddGridItem", e);
                return(false);
            }
        }
Example #8
0
        public static void RemoveItem(CASClothingCategory ths, CASPart part)
        {
            ths.mModel.RequestRemoveCASPart(part);

            Audio.StartSound("ui_tertiary_button");
        }
Example #9
0
        public static void SelectItem(CASClothingCategory ths, CASPart part, CASPartPreset preset, bool allowMultiple)
        {
            ICASModel      cASModel  = Responder.Instance.CASModel;
            List <CASPart> wornParts = cASModel.GetWornParts(part.BodyType);

            bool flag = false;

            if (ths.IsAccessoryType(ths.mCurrentPart))
            {
                if ((part.Key == ths.mInvalidCASPart.Key) && (!allowMultiple))
                {
                    ths.RemoveAllPartsOfType(ths.mCurrentPart);
                    CASClothingCategory.sAccessoriesSelection = (int)ths.mCurrentPart;
                }
                else
                {
                    flag = true;
                    CASClothingCategory.sAccessoriesSelection = (int)part.BodyType;
                    CASController.Singleton.SetAccessoryCam(part.BodyType, true);

                    if (!allowMultiple)
                    {
                        if (part.BodyType == BodyTypes.Earrings)
                        {
                            ths.RemoveAllPartsOfType(BodyTypes.LeftEarring);
                            ths.RemoveAllPartsOfType(BodyTypes.RightEarring);
                        }
                        else if ((part.BodyType == BodyTypes.LeftEarring) || (part.BodyType == BodyTypes.RightEarring))
                        {
                            ths.RemoveAllPartsOfType(BodyTypes.Earrings);
                        }
                    }
                }
            }
            else if (!wornParts.Contains(part))
            {
                flag = true;
            }

            if (preset != null)
            {
                ths.mCurrentPreset = preset;
                if (preset.mPresetString != null)
                {
                    if (flag)
                    {
                        ths.mModel.RequestAddCASPart(part, preset.mPresetString);
                    }
                    else
                    {
                        ths.mModel.RequestCommitPresetToPart(part, preset.mPresetString);
                    }
                }
            }
            else if (flag)
            {
                ths.mModel.RequestAddCASPart(part, false);
                CASSelectionGrid.SetSelectionIndex((uint)part.BodyType);
            }
            Audio.StartSound("ui_tertiary_button");
        }
Example #10
0
        protected static bool PopulateGrid()
        {
            CASClothingCategory ths = CASClothingCategory.gSingleton;

            if (ths == null)
            {
                return(false);
            }

            ths.mClothingTypesGrid.Clear();

            ths.mCurrentPreset       = null;
            ths.mCurrentFocusedRow   = null;
            ths.mTempFocusedRow      = null;
            ths.mSelectedType        = CASClothingRow.SelectedTypes.None;
            ths.mShareButton.Enabled = false;
            ths.mTrashButton.Enabled = false;
            ths.mSaveButton.Enabled  = false;
            ths.mSortButton.Enabled  = false;
            ths.mSortButton.Tag      = false;

            bool hasFilterableContent = false;

            List <object> parts = new List <object>();

            bool compactCAS = false;

            if (ths.mCurrentPart == BodyTypes.Accessories)
            {
                compactCAS = MasterController.Settings.mCompactAccessoryCAS;
            }
            else
            {
                compactCAS = MasterController.Settings.mCompactClothingCAS;
            }

            if (compactCAS)
            {
                List <CASParts.PartPreset> triPart = new List <CASParts.PartPreset>();
                parts.Add(triPart);

                foreach (object uncastPart in ths.mPartsList)
                {
                    if (uncastPart is CASPart)
                    {
                        CASPart part = (CASPart)uncastPart;

                        CASParts.PartPreset preset = new CASParts.PartPreset(part);
                        if (!preset.Valid)
                        {
                            uint num2 = CASUtils.PartDataNumPresets(part.Key);
                            if (num2 > 0)
                            {
                                preset = new CASParts.PartPreset(part, 0);
                                if (!preset.Valid)
                                {
                                    preset = null;
                                }
                            }
                        }

                        if (preset == null)
                        {
                            continue;
                        }

                        if (!ths.mContentTypeFilter.ObjectMatchesFilter(preset, ref hasFilterableContent))
                        {
                            continue;
                        }

                        triPart.Add(preset);

                        if (triPart.Count == 3)
                        {
                            triPart = new List <CASParts.PartPreset>();
                            parts.Add(triPart);
                        }
                    }
                }
            }
            else
            {
                foreach (object part in ths.mPartsList)
                {
                    if (part is CASPart)
                    {
                        List <CASParts.PartPreset> uniPart = new List <CASParts.PartPreset>();
                        uniPart.Add(new CASParts.PartPreset((CASPart)part));
                        parts.Add(uniPart);
                    }
                    else
                    {
                        parts.Add(part);
                    }
                }
            }

            if (ths.PartPresetsList != null)
            {
                ths.PartPresetsList.Clear();
            }

            sCompleted.Clear();
            sRows.Clear();

            ths.mClothingTypesGrid.ItemRowsChanged -= OnItemRowsChanged;
            ths.mClothingTypesGrid.ItemRowsChanged += OnItemRowsChanged;

            if (parts.Count == 0)
            {
                return(false);
            }

            ResourceKey layoutKey = ResourceKey.CreateUILayoutKey("CASClothingRow", 0x0);

            ths.mClothingTypesGrid.BeginPopulating(AddGridItem, parts, 0x3, layoutKey, null);
            return(true);
        }
Example #11
0
        public static void OnButtonMouseDown(WindowBase sender, UIMouseEventArgs eventArgs)
        {
            try
            {
                CASClothingCategory ths = CASClothingCategory.gSingleton;
                if (ths == null)
                {
                    return;
                }

                BodyTypes bodyType = BodyTypes.None;
                CASClothingCategory.Category category = CASClothingCategory.Category.Count;
                switch (sender.ID)
                {
                case 0x5dbcf11:
                    bodyType = BodyTypes.UpperBody;
                    category = CASClothingCategory.Category.Tops;
                    break;

                case 0x5dbcf12:
                    bodyType = BodyTypes.LowerBody;
                    category = CASClothingCategory.Category.Bottoms;
                    break;

                case 0x5dbcf13:
                    bodyType = BodyTypes.Shoes;
                    category = CASClothingCategory.Category.Shoes;
                    break;

                case 0x5dbcf14:
                    bodyType = BodyTypes.FullBody;
                    category = CASClothingCategory.Category.Outfits;
                    break;

                case 0x5dbcf90:
                    category = CASClothingCategory.Category.Accessories;
                    break;

                case 0x5dbcf1b:
                    category = CASClothingCategory.Category.CollarBridle;
                    break;

                case 0x5dbcf1c:
                    category = CASClothingCategory.Category.Saddles;
                    break;

                default:
                    return;
                }

                if (eventArgs.MouseKey == MouseKeys.kMouseLeft)
                {
                    if (CASClothingCategory.CurrentTypeCategory != category)
                    {
                        ths.SetTypeCategory(category);

                        eventArgs.mHandled = true;
                    }
                }
                else if (eventArgs.MouseKey == MouseKeys.kMouseRight)
                {
                    if (category != CASClothingCategory.Category.Accessories)
                    {
                        ArrayList list = ths.mModel.GetVisibleCASParts(bodyType, (uint)ths.mCurrentStyleCategory);

                        int count = list.Count;
                        if (count > 0)
                        {
                            CASPart part = (CASPart)list[(int)(count * RandomGen.NextDouble())];

                            ths.mModel.RequestAddCASPart(part, false);
                        }
                    }

                    eventArgs.mHandled = true;
                }
            }
            catch (Exception e)
            {
                Common.Exception("OnButtonMouseDown", e);
            }
        }
Example #12
0
        public override ArrayList GetVisibleCASParts(BodyTypes bodyType, uint categories)
        {
            try
            {
                List <CASParts.Wrapper> list = SubGetVisibleCASParts(bodyType, categories);
                //ArrayList list = base.GetVisibleCASParts(bodyType, categories);

                StackTrace trace = new StackTrace(false);

                int blackListCount = 0;

                CASClothingCategory clothingCategory = CASClothingCategory.gSingleton;
                if (clothingCategory != null)
                {
                    // Fix for an issue where this listing is never cleared by the Core
                    if (clothingCategory.PartPresetsList != null)
                    {
                        clothingCategory.PartPresetsList.Clear();
                    }
                }

                bool truncate = false;

                if (list.Count > 0)
                {
                    bool found = false;

                    foreach (StackFrame frame in trace.GetFrames())
                    {
                        if (frame.GetMethod().DeclaringType == sDelayedCategoryUpdate)
                        {
                            found = true;
                            break;
                        }
                    }

                    if (!found)
                    {
                        foreach (StackFrame frame in trace.GetFrames())
                        {
                            if ((frame.GetMethod().DeclaringType == sCASClothingCategory) &&
                                (frame.GetMethod().ToString() == "Void HideUnusedIcons()"))
                            {
                                truncate = true;
                                break;
                            }
                            else if ((frame.GetMethod().DeclaringType == sCASClothingCategory) &&
                                     (frame.GetMethod().ToString() == "Void LoadParts()"))
                            {
                                truncate = true;

                                if ((clothingCategory != null) && (clothingCategory.mClothingTypesGrid != null))
                                {
                                    clothingCategory.mClothingTypesGrid.Clear();
                                }

                                CASClothingCategoryEx.DelayedCategoryUpdate.Perform();
                                break;
                            }
                        }

                        if (truncate)
                        {
                            List <CASParts.Wrapper> newList = new List <CASParts.Wrapper>();

                            newList.Add(list[0]);

                            list = newList;
                        }
                    }
                }

                if ((!truncate) && (InvalidPartBooter.HasInvalidParts))
                {
                    SimBuilder builder = CASLogic.Instance.mBuilder;

                    CASAgeGenderFlags age     = builder.Age;
                    CASAgeGenderFlags gender  = builder.Gender;
                    CASAgeGenderFlags species = builder.Species;

                    List <CASParts.Wrapper> newList = new List <CASParts.Wrapper>();

                    foreach (CASParts.Wrapper part in list)
                    {
                        InvalidPartBase.Reason reason = InvalidPartBooter.Allow(part, age, gender, species, false, (OutfitCategories)categories);
                        if (reason == InvalidPartBase.Reason.None)
                        {
                            newList.Add(part);
                        }
                        else
                        {
                            blackListCount++;
                        }
                    }

                    list.Clear();
                    list = newList;
                }

                ArrayList results = new ArrayList();

                foreach (CASParts.Wrapper part in list)
                {
                    results.Add(part.mPart);
                }

                return(results);
            }
            catch (Exception e)
            {
                Common.Exception("GetVisibleCASParts", e);

                return(new ArrayList());
            }
        }
Example #13
0
            protected override bool OnPerform()
            {
                Common.StringBuilder msg = new Common.StringBuilder("EditTownCASTask" + Common.NewLine);

                try
                {
                    {
                        EditTownLibraryPanel panel = EditTownLibraryPanel.Instance;
                        if ((panel != null) && (panel.mCASButton != null))
                        {
                            panel.mCASButton.Click -= panel.OnCASClick;

                            panel.mCASButton.Click -= EditTownLibraryPanelEx.OnCASClick;
                            panel.mCASButton.Click += EditTownLibraryPanelEx.OnCASClick;
                        }
                    }

                    msg += "A";

                    {
                        PlayFlowMenuPanel playFlow = PlayFlowMenuPanel.gSingleton;
                        if ((playFlow != null) && (playFlow.mCASButton != null))
                        {
                            playFlow.mCASButton.Click -= playFlow.OnMenuButtonClick;

                            playFlow.mCASButton.Click -= PlayFlowMenuPanelEx.OnMenuButtonClick;
                            playFlow.mCASButton.Click += PlayFlowMenuPanelEx.OnMenuButtonClick;
                        }
                    }

                    msg += "C";

                    {
                        CASClothingCategory category = CASClothingCategory.gSingleton;
                        if (category != null)
                        {
                            category.mTopsButton.Click         -= category.OnCategoryButtonClick;
                            category.mBottomsButton.Click      -= category.OnCategoryButtonClick;
                            category.mShoesButton.Click        -= category.OnCategoryButtonClick;
                            category.mOutfitsButton.Click      -= category.OnCategoryButtonClick;
                            category.mAccessoriesButton.Click  -= category.OnCategoryButtonClick;
                            category.mHorseBridlesButton.Click -= category.OnCategoryButtonClick;
                            category.mHorseSaddleButton.Click  -= category.OnCategoryButtonClick;

                            category.mTopsButton.MouseDown         -= CASClothingCategoryEx.OnButtonMouseDown;
                            category.mTopsButton.MouseDown         += CASClothingCategoryEx.OnButtonMouseDown;
                            category.mBottomsButton.MouseDown      -= CASClothingCategoryEx.OnButtonMouseDown;
                            category.mBottomsButton.MouseDown      += CASClothingCategoryEx.OnButtonMouseDown;
                            category.mShoesButton.MouseDown        -= CASClothingCategoryEx.OnButtonMouseDown;
                            category.mShoesButton.MouseDown        += CASClothingCategoryEx.OnButtonMouseDown;
                            category.mOutfitsButton.MouseDown      -= CASClothingCategoryEx.OnButtonMouseDown;
                            category.mOutfitsButton.MouseDown      += CASClothingCategoryEx.OnButtonMouseDown;
                            category.mAccessoriesButton.MouseDown  -= CASClothingCategoryEx.OnButtonMouseDown;
                            category.mAccessoriesButton.MouseDown  += CASClothingCategoryEx.OnButtonMouseDown;
                            category.mHorseBridlesButton.MouseDown -= CASClothingCategoryEx.OnButtonMouseDown;
                            category.mHorseBridlesButton.MouseDown += CASClothingCategoryEx.OnButtonMouseDown;
                            category.mHorseSaddleButton.MouseDown  -= CASClothingCategoryEx.OnButtonMouseDown;
                            category.mHorseSaddleButton.MouseDown  += CASClothingCategoryEx.OnButtonMouseDown;
                        }
                    }

                    msg += "D";

                    CASPuck puck = CASPuck.gSingleton;
                    if (puck != null)
                    {
                        CASFamilyScreen familyScreen = CASFamilyScreen.gSingleton;
                        if (familyScreen != null)
                        {
                            Window topLevel = familyScreen.mFamilyTopLevelWin;

                            uint       index = 0;
                            WindowBase child = topLevel.GetChildByIndex(index);
                            while (child != null)
                            {
                                CAFThumb thumb = child as CAFThumb;
                                if (thumb != null)
                                {
                                    thumb.DragDrop -= familyScreen.OnCAFThumbDragDrop;
                                    thumb.DragDrop -= CASFamilyScreenEx.OnCAFThumbDragDrop;
                                    thumb.DragDrop += CASFamilyScreenEx.OnCAFThumbDragDrop;
                                }

                                index++;
                                child = topLevel.GetChildByIndex(index);
                            }
                        }

                        if (puck.mGeneticsButton != null)
                        {
                            puck.mGeneticsButton.Enabled = CASPuckEx.CanCreateChild();
                        }

                        ICASModel cASModel = Responder.Instance.CASModel;
                        if (cASModel != null)
                        {
                            if ((MasterController.Settings.mAllowOverStuffed) && (cASModel.NumInHousehold < CASPuck.kMaxPerHousehold))
                            {
                                if (puck.mCreateHorseButton != null)
                                {
                                    puck.mCreateHorseButton.Enabled = true;

                                    puck.mCreateHorseButton.Click -= puck.OnCreateSimClick;
                                    puck.mCreateHorseButton.Click -= CASPuckEx.OnCreateSimClick;
                                    puck.mCreateHorseButton.Click += CASPuckEx.OnCreateSimClick;
                                }

                                if (puck.mCreateDogButton != null)
                                {
                                    puck.mCreateDogButton.Enabled = true;

                                    puck.mCreateDogButton.Click -= puck.OnCreateSimClick;
                                    puck.mCreateDogButton.Click -= CASPuckEx.OnCreateSimClick;
                                    puck.mCreateDogButton.Click += CASPuckEx.OnCreateSimClick;
                                }

                                if (puck.mCreateCatButton != null)
                                {
                                    puck.mCreateCatButton.Enabled = true;

                                    puck.mCreateCatButton.Click -= puck.OnCreateSimClick;
                                    puck.mCreateCatButton.Click -= CASPuckEx.OnCreateSimClick;
                                    puck.mCreateCatButton.Click += CASPuckEx.OnCreateSimClick;
                                }

                                if (puck.mCreateSimButton != null)
                                {
                                    puck.mCreateSimButton.Enabled = true;

                                    puck.mCreateSimButton.Click -= puck.OnCreateSimClick;
                                    puck.mCreateSimButton.Click -= CASPuckEx.OnCreateSimClick;
                                    puck.mCreateSimButton.Click += CASPuckEx.OnCreateSimClick;
                                }
                            }

                            cASModel.OnSimUpdated -= puck.OnSimUpdated;
                            cASModel.OnSimUpdated -= CASPuckEx.OnSimUpdated;
                            cASModel.OnSimUpdated += CASPuckEx.OnSimUpdated;

                            cASModel.OnSimPreviewChange -= puck.OnSimPreviewChange;
                            cASModel.OnSimPreviewChange -= CASPuckEx.OnSimPreviewChange;
                            cASModel.OnSimPreviewChange += CASPuckEx.OnSimPreviewChange;
                        }
                    }

                    msg += "E";

                    CASCompositorController controller = CASCompositorController.sController;
                    if (controller != null)
                    {
                        if (controller.mColorsDragButton != null)
                        {
                            controller.mColorsDragButton.MouseDown -= controller.OnMaterialsColorDragMouseDown;
                            controller.mColorsDragButton.MouseDown -= CASCompositorControllerEx.OnMaterialsColorDragMouseDown;
                            controller.mColorsDragButton.MouseDown += CASCompositorControllerEx.OnMaterialsColorDragMouseDown;

                            controller.mColorsDragButton.MouseUp -= controller.OnMaterialsColorDragMouseUp;
                            controller.mColorsDragButton.MouseUp -= CASCompositorControllerEx.OnMaterialsColorDragMouseUp;
                            controller.mColorsDragButton.MouseUp += CASCompositorControllerEx.OnMaterialsColorDragMouseUp;

                            for (uint j = 0x0; j < 0x4; j++)
                            {
                                controller.mColorsPopupButton[j].MouseDown -= controller.OnMaterialsColorGridMouseDown;
                                controller.mColorsPopupButton[j].MouseDown -= CASCompositorControllerEx.OnMaterialsColorGridMouseDown;
                                controller.mColorsPopupButton[j].MouseDown += CASCompositorControllerEx.OnMaterialsColorGridMouseDown;

                                controller.mColorsPopupButton[j].MouseUp -= controller.OnMaterialsColorGridMouseUp;
                                controller.mColorsPopupButton[j].MouseUp -= CASCompositorControllerEx.OnMaterialsColorGridMouseUp;
                                controller.mColorsPopupButton[j].MouseUp += CASCompositorControllerEx.OnMaterialsColorGridMouseUp;
                            }
                        }

                        if (controller.mMaterialsSkewerPatternButton.Length == 4)
                        {
                            for (int i = 0; i < 4; i++)
                            {
                                if (controller.mMaterialsSkewerPatternButton[i] == null)
                                {
                                    continue;
                                }

                                controller.mMaterialsSkewerPatternButton[i].MouseDown -= controller.OnMaterialsSkewerGridMouseDown;

                                controller.mMaterialsSkewerPatternButton[i].MouseDown -= CASCompositorControllerEx.OnMaterialsSkewerGridMouseDown;
                                controller.mMaterialsSkewerPatternButton[i].MouseDown += CASCompositorControllerEx.OnMaterialsSkewerGridMouseDown;

                                controller.mMaterialsSkewerPatternButton[i].MouseUp -= controller.OnMaterialsSkewerGridMouseUp;

                                controller.mMaterialsSkewerPatternButton[i].MouseUp -= CASCompositorControllerEx.OnMaterialsSkewerGridMouseUp;
                                controller.mMaterialsSkewerPatternButton[i].MouseUp += CASCompositorControllerEx.OnMaterialsSkewerGridMouseUp;
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    Common.Exception(msg, e);
                }
                return(true);
            }