public SortButton(SortButton sb, string text)
 {
     this.Text = text;
     if(sb!=null && sb.Text == this.Text)
     {
         this.Ascending = sb.Ascending;
         this.saved = true;
     }
     this.saveButton = sb;
 }
        //private bool AutoButtonHover;
        public ShipListScreen(Ship_Game.ScreenManager ScreenManager, EmpireUIOverlay empUI)
        {
            this.empUI = empUI;
            base.TransitionOnTime = TimeSpan.FromSeconds(0.25);
            base.TransitionOffTime = TimeSpan.FromSeconds(0.25);
            base.IsPopup = true;
            this.eui = empUI;
            base.ScreenManager = ScreenManager;
            if (base.ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth <= 1280)
            {
                //this.LowRes = true;
            }
            Rectangle titleRect = new Rectangle(2, 44, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth * 2 / 3, 80);
            this.TitleBar = new Menu2(ScreenManager, titleRect);
            this.TitlePos = new Vector2((float)(titleRect.X + titleRect.Width / 2) - Fonts.Laserian14.MeasureString(Localizer.Token(190)).X / 2f, (float)(titleRect.Y + titleRect.Height / 2 - Fonts.Laserian14.LineSpacing / 2));
            this.leftRect = new Rectangle(2, titleRect.Y + titleRect.Height + 5, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth - 10, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferHeight - (titleRect.Y + titleRect.Height) - 7);
            this.EMenu = new Menu2(ScreenManager, this.leftRect);
            this.close = new CloseButton(new Rectangle(this.leftRect.X + this.leftRect.Width - 40, this.leftRect.Y + 20, 20, 20));
            this.eRect = new Rectangle(2, titleRect.Y + titleRect.Height + 25, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth - 40, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferHeight - (titleRect.Y + titleRect.Height) - 7);
            while (this.eRect.Height % 80 != 0)
            {
                this.eRect.Height = this.eRect.Height - 1;
            }
            this.ShipSubMenu = new Submenu(ScreenManager, this.eRect);
            this.ShipSL = new ScrollList(this.ShipSubMenu, 30);
            if (EmpireManager.GetEmpireByName(empUI.screen.PlayerLoyalty).GetShips().Count > 0)
            {
                foreach (Ship ship in EmpireManager.GetEmpireByName(empUI.screen.PlayerLoyalty).GetShips())
                {
                    if (!ship.IsPlayerDesign && this.HidePlatforms)
                    {
                        continue;
                    }
                    ShipListScreenEntry entry = new ShipListScreenEntry(ship, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 30, this);
                    this.ShipSL.AddItem(entry);
                }
                if (this.ShipSL.Entries.Count<ScrollList.Entry>() > 0)
                {
                    this.SelectedShip = (this.ShipSL.Entries[this.ShipSL.indexAtTop].item as ShipListScreenEntry).ship;
                }
                else
                    this.SelectedShip = null;
            }
            Ref<bool> aeRef = new Ref<bool>(() => this.HidePlatforms, (bool x) => {
                this.HidePlatforms = x;
               this.ResetList(this.ShowRoles.Options[this.ShowRoles.ActiveIndex].@value);
            });
            this.cb_hide_proj = new Checkbox(new Vector2((float)(this.TitleBar.Menu.X + this.TitleBar.Menu.Width + 10), (float)(this.TitleBar.Menu.Y + 15)), Localizer.Token(191), aeRef, Fonts.Arial12Bold);
            this.ShowRoles = new DropOptions(new Rectangle(this.TitleBar.Menu.X + this.TitleBar.Menu.Width + 175, this.TitleBar.Menu.Y + 15, 175, 18));
            this.ShowRoles.AddOption("All Ships", 1);
            this.ShowRoles.AddOption("Fighters", 2);
            this.ShowRoles.AddOption("Corvettes", 10);
            this.ShowRoles.AddOption("Frigates", 3);
            this.ShowRoles.AddOption("Cruisers", 4);
            this.ShowRoles.AddOption("Capitals", 5);
            this.ShowRoles.AddOption("Civilian", 8);
            this.ShowRoles.AddOption("All Structures", 9);
            this.ShowRoles.AddOption("Fleets Only", 6);

            // Replaced using the tick-box for player design filtering. Platforms now can be browsed with 'structures'
            // this.ShowRoles.AddOption("Player Designs Only", 7);

            this.AutoButton = new Rectangle(0, 0, 243, 33);
            this.SortSystem = new SortButton(this.empUI.empire.data.SLSort,Localizer.Token(192));
            this.SortName = new SortButton(this.empUI.empire.data.SLSort, Localizer.Token(193));
            this.SortRole = new SortButton(this.empUI.empire.data.SLSort,Localizer.Token(194));
            //Localizer.Token(193)
            this.Maint = new SortButton(this.empUI.empire.data.SLSort, "maint");
            this.SB_FTL = new SortButton(this.empUI.empire.data.SLSort, "FTL");
            this.SB_STL = new SortButton(this.empUI.empire.data.SLSort, "STL");
            this.SB_Troop = new SortButton(this.empUI.empire.data.SLSort, "Troop");
            this.SB_STR = new SortButton(this.empUI.empire.data.SLSort, "STR");
            //this.Maint.rect = this.MaintRect;
            ResetList(1);  //fbedard: initial filter
        }
        public EmpireScreen(Ship_Game.ScreenManager ScreenManager, EmpireUIOverlay empUI)
        {
            base.TransitionOnTime = TimeSpan.FromSeconds(0.25);
            base.TransitionOffTime = TimeSpan.FromSeconds(0.25);
            base.IsPopup = true;
            this.eui = empUI;
            base.ScreenManager = ScreenManager;
            if (base.ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth <= 1280)
            {
                //this.LowRes = true;
            }

            Rectangle titleRect = new Rectangle(2, 44, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth * 2 / 3, 80);
            this.TitleBar = new Menu2(ScreenManager, titleRect);
            this.TitlePos = new Vector2((float)(titleRect.X + titleRect.Width / 2) - Fonts.Laserian14.MeasureString(Localizer.Token(383)).X / 2f, (float)(titleRect.Y + titleRect.Height / 2 - Fonts.Laserian14.LineSpacing / 2));
            this.leftRect = new Rectangle(2, titleRect.Y + titleRect.Height + 5, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth - 10, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferHeight - (titleRect.Y + titleRect.Height) - 7);
            this.close = new CloseButton(new Rectangle(this.leftRect.X + this.leftRect.Width - 40, this.leftRect.Y + 20, 20, 20));
            this.EMenu = new Menu2(ScreenManager, this.leftRect);
            this.eRect = new Rectangle(2, titleRect.Y + titleRect.Height + 25, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth - 40, (int)(0.66f * (float)(ScreenManager.GraphicsDevice.PresentationParameters.BackBufferHeight - (titleRect.Y + titleRect.Height) - 7)));
            while (this.eRect.Height % 80 != 0)
            {
                this.eRect.Height = this.eRect.Height - 1;
            }
            this.ColonySubMenu = new Submenu(ScreenManager, this.eRect);
            this.ColoniesList = new ScrollList(this.ColonySubMenu, 80);
            //if (!this.firstSort || this.pop.Ascending !=true)
            {
                foreach (Planet p in EmpireManager.GetEmpireByName(empUI.screen.PlayerLoyalty).GetPlanets())
                {
                    EmpireScreenEntry entry = new EmpireScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 80, this);
                    this.ColoniesList.AddItem(entry);
                }
            }
            this.pop = new SortButton(this.eui.empire.data.ESSort, "pop");
            this.food = new SortButton(this.eui.empire.data.ESSort, "food");
            this.prod = new SortButton(this.eui.empire.data.ESSort, "prod");
            this.res = new SortButton(this.eui.empire.data.ESSort, "res");
            this.money = new SortButton(this.eui.empire.data.ESSort, "money");
            this.SelectedPlanet = (this.ColoniesList.Entries[this.ColoniesList.indexAtTop].item as EmpireScreenEntry).p;
            this.GovernorDropdown = new DropOptions(new Rectangle(0, 0, 100, 18));
            this.GovernorDropdown.AddOption("--", 1);
            this.GovernorDropdown.AddOption(Localizer.Token(4064), 0);
            this.GovernorDropdown.AddOption(Localizer.Token(4065), 2);
            this.GovernorDropdown.AddOption(Localizer.Token(4066), 4);
            this.GovernorDropdown.AddOption(Localizer.Token(4067), 3);
            this.GovernorDropdown.AddOption(Localizer.Token(4068), 5);
            this.GovernorDropdown.AddOption(Localizer.Token(393), 6);
            this.GovernorDropdown.ActiveIndex = ColonyScreen.GetIndex(this.SelectedPlanet);
            if (this.GovernorDropdown.Options[this.GovernorDropdown.ActiveIndex].@value != (int)this.SelectedPlanet.colonyType)
            {
                this.SelectedPlanet.colonyType = (Planet.ColonyType)this.GovernorDropdown.Options[this.GovernorDropdown.ActiveIndex].@value;
                if (this.SelectedPlanet.colonyType != Planet.ColonyType.Colony)
                {
                    this.SelectedPlanet.FoodLocked = true;
                    this.SelectedPlanet.ProdLocked = true;
                    this.SelectedPlanet.ResLocked = true;
                    this.SelectedPlanet.GovernorOn = true;
                }
                else
                {
                    this.SelectedPlanet.GovernorOn = false;
                    this.SelectedPlanet.FoodLocked = false;
                    this.SelectedPlanet.ProdLocked = false;
                    this.SelectedPlanet.ResLocked = false;
                }
            }
            this.AutoButton = new Rectangle(0, 0, 140, 33);
            this.firstSort = true;
        }
        public void ResetList()
        {
            List<Planet> pList = new List<Planet>();
            foreach (ScrollList.Entry entry in this.PlanetSL.Entries)
            {
                pList.Add((entry.item as PlanetListScreenEntry).planet);
            }
            this.PlanetSL.Entries.Clear();
            this.PlanetSL.Copied.Clear();
            this.PlanetSL.indexAtTop = 0;
            if (this.LastSorted == null)
            {
                foreach (Planet p in this.planets)
                {
                    if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                    {
                        continue;
                    }
                    PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                    this.PlanetSL.AddItem(entry);
                }
            }
            else
            {
                if (this.LastSorted.Text == this.sb_Sys.Text)   // (this.sb_Sys == this.LastSorted)
                {
                    if (!this.sb_Sys.Ascending)
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.system.Name descending
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                    else
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.system.Name
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                }
                if (this.sb_Name.Text == this.LastSorted.Text)
                {
                    if (!this.sb_Name.Ascending)
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.Name descending
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                    else
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.Name
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                }
                if (this.sb_Fert.Text == this.LastSorted.Text)
                {
                    AudioManager.PlayCue("blip_click");

                    this.PlanetSL.Entries.Clear();
                    this.PlanetSL.Copied.Clear();
                    if (!this.sb_Fert.Ascending)
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.Fertility descending
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                    else
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.Fertility
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                }
                if (this.LastSorted.Text == this.sb_Rich.Text   )//1this.sb_Rich == this.LastSorted)
                {
                    this.LastSorted = this.sb_Rich;
                    AudioManager.PlayCue("blip_click");
                    //this.sb_Rich.Ascending = !this.sb_Rich.Ascending;
                    this.PlanetSL.Entries.Clear();
                    this.PlanetSL.Copied.Clear();
                    if (!this.sb_Rich.Ascending)
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.MineralRichness descending
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                    else
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.MineralRichness
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                }
                if (this.sb_Pop.Text == this.LastSorted.Text)
                {
                    this.LastSorted = this.sb_Pop;
                    AudioManager.PlayCue("blip_click");
                    //this.sb_Pop.Ascending = !this.sb_Pop.Ascending;
                    this.PlanetSL.Entries.Clear();
                    this.PlanetSL.Copied.Clear();
                    if (!this.sb_Pop.Ascending)
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.MaxPopulation descending
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                    else
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.MaxPopulation
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                }
                if (this.sb_Owned.Text == this.LastSorted.Text)
                {
                    this.LastSorted = this.sb_Owned;
                    AudioManager.PlayCue("blip_click");
                    //this.sb_Owned.Ascending = !this.sb_Owned.Ascending;
                    this.PlanetSL.Entries.Clear();
                    this.PlanetSL.Copied.Clear();
                    if (!this.sb_Owned.Ascending)
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.GetOwnerName() descending
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                    else
                    {
                        IOrderedEnumerable<Planet> sortedList =
                            from planet in this.planets
                            orderby planet.GetOwnerName()
                            select planet;
                        foreach (Planet p in sortedList)
                        {
                            if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                            {
                                continue;
                            }
                            PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                            this.PlanetSL.AddItem(entry);
                        }
                    }
                }
            }
            if (this.PlanetSL.Entries.Count <= 0)
            {
                this.SelectedPlanet = null;
                return;
            }
            this.SelectedPlanet = (this.PlanetSL.Entries[this.PlanetSL.indexAtTop].item as PlanetListScreenEntry).planet;

            //this.empUI.empire.data.PLSort = this.LastSorted;
        }
        //private bool AutoButtonHover;
        public PlanetListScreen(Ship_Game.ScreenManager ScreenManager, EmpireUIOverlay empUI)
        {
            this.empUI = empUI;
            base.TransitionOnTime = TimeSpan.FromSeconds(0.25);
            base.TransitionOffTime = TimeSpan.FromSeconds(0.25);
            base.IsPopup = true;
            base.ScreenManager = ScreenManager;
            if (base.ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth <= 1280)
            {
                //this.LowRes = true;
            }
            Rectangle titleRect = new Rectangle(2, 44, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth * 2 / 3, 80);
            this.TitleBar = new Menu2(ScreenManager, titleRect);
            this.TitlePos = new Vector2((float)(titleRect.X + titleRect.Width / 2) - Fonts.Laserian14.MeasureString(Localizer.Token(1402)).X / 2f, (float)(titleRect.Y + titleRect.Height / 2 - Fonts.Laserian14.LineSpacing / 2));
            this.leftRect = new Rectangle(2, titleRect.Y + titleRect.Height + 5, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth - 10, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferHeight - (titleRect.Y + titleRect.Height) - 7);
            this.EMenu = new Menu2(ScreenManager, this.leftRect);
            this.close = new CloseButton(new Rectangle(this.leftRect.X + this.leftRect.Width - 40, this.leftRect.Y + 20, 20, 20));
            this.eRect = new Rectangle(2, titleRect.Y + titleRect.Height + 25, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth - 40, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferHeight - (titleRect.Y + titleRect.Height) - 15);
            this.sb_Sys = new SortButton(this.empUI.empire.data.PLSort, Localizer.Token(192));
            this.sb_Name = new SortButton(this.empUI.empire.data.PLSort, Localizer.Token(389));
            this.sb_Fert = new SortButton(this.empUI.empire.data.PLSort,Localizer.Token(386) );
            this.sb_Rich = new SortButton(this.empUI.empire.data.PLSort,Localizer.Token(387));
            this.sb_Pop = new SortButton(this.empUI.empire.data.PLSort,Localizer.Token(1403));
            this.sb_Owned = new SortButton(this.empUI.empire.data.PLSort, "Owner");

            while (this.eRect.Height % 40 != 0)
            {
                this.eRect.Height = this.eRect.Height - 1;
            }
            this.eRect.Height = this.eRect.Height - 20;
            this.ShipSubMenu = new Submenu(ScreenManager, this.eRect);
            this.PlanetSL = new ScrollList(this.ShipSubMenu, 40);
               // this.LastSorted = this.empUI.empire.data.PLSort;

            foreach (SolarSystem system in UniverseScreen.SolarSystemList.OrderBy(distance => Vector2.Distance(distance.Position, EmpireManager.GetEmpireByName(empUI.screen.PlayerLoyalty).GetWeightedCenter())))
            {
                foreach (Planet p in system.PlanetList)
                {
                    if (!p.ExploredDict[EmpireManager.GetEmpireByName(empUI.screen.PlayerLoyalty)])
                    {
                        continue;
                    }
                    this.planets.Add(p);
                }
            }
            //foreach (Planet p in this.planets)
            //{
            //    if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
            //    {
            //        continue;
            //    }
            //    PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
            //    this.PlanetSL.AddItem(entry);
            //}

            //this.ResetList();
            //this.SelectedPlanet = (this.PlanetSL.Entries[this.PlanetSL.indexAtTop].item as PlanetListScreenEntry).planet;
            Ref<bool> aeRef = new Ref<bool>(() => this.HideOwned, (bool x) => {
                this.HideOwned = x;
                this.ResetList();
            });
            this.cb_hideOwned = new Checkbox(new Vector2((float)(this.TitleBar.Menu.X + this.TitleBar.Menu.Width + 15), (float)(this.TitleBar.Menu.Y + 15)), "Hide Owned", aeRef, Fonts.Arial12Bold);
            aeRef = new Ref<bool>(() => this.HideUninhab, (bool x) => {
                this.HideUninhab = x;
                this.ResetList();
            });
            this.cb_hideUninhabitable = new Checkbox(new Vector2((float)(this.TitleBar.Menu.X + this.TitleBar.Menu.Width + 15), (float)(this.TitleBar.Menu.Y + 35)), "Hide Uninhabitable", aeRef, Fonts.Arial12Bold);
            this.AutoButton = new Rectangle(0, 0, 243, 33);
        }
        public override void HandleInput(InputState input)
        {
            //this.LastSorted = empUI.empire.data.PLSort;
            if (this.PlanetSL.Entries.Count == 0)
                this.ResetList();
            this.PlanetSL.HandleInput(input);
            this.cb_hideOwned.HandleInput(input);
            this.cb_hideUninhabitable.HandleInput(input);
            if (this.sb_Sys.HandleInput(input))
            {
                this.LastSorted = this.sb_Sys;
                AudioManager.PlayCue("blip_click");
                this.sb_Sys.Ascending = !this.sb_Sys.Ascending;
                this.PlanetSL.Entries.Clear();
                this.PlanetSL.Copied.Clear();
                if (!this.sb_Sys.Ascending)
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.system.Name descending
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
                else
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.system.Name
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
            }
            if (this.sb_Name.HandleInput(input))
            {
                this.LastSorted = this.sb_Name;
                AudioManager.PlayCue("blip_click");
                this.sb_Name.Ascending = !this.sb_Name.Ascending;
                this.PlanetSL.Entries.Clear();
                this.PlanetSL.Copied.Clear();
                if (!this.sb_Name.Ascending)
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.Name descending
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
                else
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.Name
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
            }
            if (this.sb_Fert.HandleInput(input))
            {
                this.LastSorted = this.sb_Fert;
                AudioManager.PlayCue("blip_click");
                this.sb_Fert.Ascending = !this.sb_Fert.Ascending;
                this.PlanetSL.Entries.Clear();
                this.PlanetSL.Copied.Clear();
                if (!this.sb_Fert.Ascending)
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.Fertility descending
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
                else
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.Fertility
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
            }
            if (this.sb_Rich.HandleInput(input))
            {
                this.LastSorted = this.sb_Rich;
                AudioManager.PlayCue("blip_click");
                this.sb_Rich.Ascending = !this.sb_Rich.Ascending;
                this.PlanetSL.Entries.Clear();
                this.PlanetSL.Copied.Clear();
                if (!this.sb_Rich.Ascending)
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.MineralRichness descending
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
                else
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.MineralRichness
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
            }
            if (this.sb_Pop.HandleInput(input))
            {
                //this.LastSorted = this.sb_Pop;
                AudioManager.PlayCue("blip_click");
                this.sb_Pop.Ascending = !this.sb_Pop.Ascending;
                this.PlanetSL.Entries.Clear();
                this.PlanetSL.Copied.Clear();
                if (!this.sb_Pop.Ascending)
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.MaxPopulation descending
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
                else
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.MaxPopulation
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
            }
            if (this.sb_Owned.HandleInput(input))
            {
                this.LastSorted = this.sb_Owned;
                AudioManager.PlayCue("blip_click");
                this.sb_Owned.Ascending = !this.sb_Owned.Ascending;
                this.PlanetSL.Entries.Clear();
                this.PlanetSL.Copied.Clear();
                if (!this.sb_Owned.Ascending)
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.GetOwnerName() descending
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
                else
                {
                    IOrderedEnumerable<Planet> sortedList =
                        from planet in this.planets
                        orderby planet.GetOwnerName()
                        select planet;
                    foreach (Planet p in sortedList)
                    {
                        if (this.HideOwned && p.Owner != null || this.HideUninhab && !p.habitable)
                        {
                            continue;
                        }
                        PlanetListScreenEntry entry = new PlanetListScreenEntry(p, this.eRect.X + 22, this.leftRect.Y + 20, this.EMenu.Menu.Width - 30, 40, this);
                        this.PlanetSL.AddItem(entry);
                    }
                }
            }

            for (int i = this.PlanetSL.indexAtTop; i < this.PlanetSL.Entries.Count && i < this.PlanetSL.indexAtTop + this.PlanetSL.entriesToDisplay; i++)
            {
                PlanetListScreenEntry entry = this.PlanetSL.Entries[i].item as PlanetListScreenEntry;
                entry.HandleInput(input);
                entry.SetNewPos(this.eRect.X + 22, this.PlanetSL.Entries[i].clickRect.Y);
                if (!GlobalStats.TakingInput
                    && HelperFunctions.CheckIntersection(entry.TotalEntrySize, input.CursorPosition) && input.CurrentMouseState.LeftButton == ButtonState.Pressed && input.LastMouseState.LeftButton == ButtonState.Released)
                {
                    if (this.ClickTimer >= this.ClickDelay)
                    {
                        this.ClickTimer = 0f;
                    }
                    else
                    {
                        {
                            this.ExitScreen();
                            this.empUI.screen.SelectedPlanet = entry.planet;
                            this.empUI.screen.ViewPlanet(null);
                            this.empUI.screen.transitionStartPosition = new Vector3(this.SelectedPlanet.Position.X, this.SelectedPlanet.Position.Y, 10000f);
                            this.empUI.screen.returnToShip = false;
                        }
                        if (this.SelectedPlanet != entry.planet)
                        {
                            AudioManager.PlayCue("sd_ui_accept_alt3");
                            this.SelectedPlanet = entry.planet;
                        }
                    }
                }
            }
            if (input.CurrentKeyboardState.IsKeyDown(Keys.L) && !input.LastKeyboardState.IsKeyDown(Keys.L) && !GlobalStats.TakingInput)
            {
                AudioManager.PlayCue("echo_affirm");
                this.ExitScreen();
                return;
            }
            if (input.Escaped || input.RightMouseClick || this.close.HandleInput(input) )
            {
                //this.empUI.empire.data.PLSort = this.LastSorted;
                this.ExitScreen();
            }
            //if(this.LastSorted !=null && this.empUI.empire.data.PLSort != this.LastSorted)
        }