private void UpdateSlaves(double newWidth)
        {
            double sizeAvailable = newWidth - 104;
            double boxWidth = 156;
            double spacing = 6;
            int boxesAvailable = Math.Max(1, Math.Min(pokePC != null ? (int)pokePC.NumBoxes : 1, (int)Math.Floor((sizeAvailable + spacing) / (boxWidth + spacing))));
            if (boxesVisible != boxesAvailable) {
                stackPanelBoxes.Width = boxesAvailable * (boxWidth + spacing) - spacing;

                if (boxesVisible < boxesAvailable) {
                    for (int i = boxesVisible; i < boxesAvailable; i++) {
                        PokeBoxControl slave = new PokeBoxControl();
                        slave.Margin = new Thickness(spacing, 0, 0, 0);
                        slave.PokemonViewer = pokemonViewer;
                        slaves.Add(slave);
                        stackPanelBoxes.Children.Add(slave);
                        if (pokeBoxControlMaster.Master != null)
                            pokeBoxControlMaster.Master.AddSlave(slave);
                        else
                            pokeBoxControlMaster.AddSlave(slave);
                        slave.MouseMoveTarget = ((FrameworkElement)this.Parent).Parent as UIElement;
                    }
                }
                else if (boxesVisible > boxesAvailable) {
                    for (int i = boxesVisible - 1; i >= boxesAvailable; i--) {
                        if (pokeBoxControlMaster.Master != null)
                            pokeBoxControlMaster.Master.RemoveSlave(slaves[i - 1]);
                        else
                            pokeBoxControlMaster.RemoveSlave(slaves[i - 1]);
                        slaves.RemoveAt(i - 1);
                        stackPanelBoxes.Children.RemoveAt(i);
                    }
                }
                boxesVisible = boxesAvailable;
            }

            if (pokePC != null) {
                pokeBoxControlMaster.LoadBox(GetWrappedBox(boxIndex + BoxOffset), gameIndex);
                for (int i = 0; i < slaves.Count; i++)
                    slaves[i].LoadBox(GetWrappedBox(boxIndex + i + 1 + BoxOffset), gameIndex);
                pokeBoxControlMaster.UnhighlightPokemon();
                if (gotoPokemon != null)
                    GotoPokemon(gotoPokemon);
                //if (partyMode)
                //	pokeBoxControlParty.LoadBox(pokePC.Party, gameIndex);
            }
        }
 public void AddSlave(PokeBoxControl slave)
 {
     slave.master = this;
     slave.Mode = mode;
     slave.IsPickupMode = pickupMode;
     slave.IsSummaryMode = summaryMode;
     slaves.Add(slave);
 }
 public void RemoveSlave(PokeBoxControl slave)
 {
     slaves.Remove(slave);
 }
 public PokeBoxTagStructure(PokeBoxControl control, int boxIndex)
 {
     this.Control = control;
     this.BoxIndex = boxIndex;
 }