예제 #1
0
        public void CompareNatural()
        {
            Assert.AreEqual(0, StringUtility.CompareNatural(null, null));
            Assert.AreEqual(1, StringUtility.CompareNatural("", null));
            Assert.AreEqual(-1, StringUtility.CompareNatural(null, ""));

            Assert.AreEqual(0, StringUtility.CompareNatural("", ""));
            Assert.AreEqual(1, StringUtility.CompareNatural("b", ""));
            Assert.AreEqual(-1, StringUtility.CompareNatural("", "c"));

            Assert.AreEqual(0, StringUtility.CompareNatural("b", "b"));
            Assert.AreEqual(1, StringUtility.CompareNatural("b", "a"));
            Assert.AreEqual(-1, StringUtility.CompareNatural("b", "1"));
            Assert.AreEqual(-1, StringUtility.CompareNatural("b", "c"));

            Assert.AreEqual(0, StringUtility.CompareNatural("2", "02"));
            Assert.AreEqual(1, StringUtility.CompareNatural("2", "01"));
            Assert.AreEqual(-1, StringUtility.CompareNatural("2", "03"));

            Assert.AreEqual(0, StringUtility.CompareNatural("b-2", "b-02"));
            Assert.AreEqual(1, StringUtility.CompareNatural("b-2-xa", "b-02-x"));
            Assert.AreEqual(1, StringUtility.CompareNatural("b-2", "b-01"));
            Assert.AreEqual(1, StringUtility.CompareNatural("b-2", "b-01-x"));
            Assert.AreEqual(-1, StringUtility.CompareNatural("b-2", "b-03"));

            Assert.AreEqual(0, StringUtility.CompareNatural("2-b", "02-b"));
            Assert.AreEqual(1, StringUtility.CompareNatural("02-b-2", "2-b-1"));
            Assert.AreEqual(1, StringUtility.CompareNatural("2-ba", "02-b"));
            Assert.AreEqual(1, StringUtility.CompareNatural("02-b", "02-ax"));
            Assert.AreEqual(-1, StringUtility.CompareNatural("2-b", "2-c"));
        }
예제 #2
0
        /// <summary>
        /// Updates the "Entity" <see cref="ListView"/> with the current "Category" and "Filter"
        /// choices.</summary>
        /// <param name="select">
        /// <c>true</c> to select the previously selected item, if any, or else the first item in
        /// the "Entity" <see cref="ListView"/>; <c>false</c> to not select any item.</param>

        private void UpdateEntities(bool select)
        {
            // remember selected item, if any
            EntityListItem selectedItem = null;

            if (select)
            {
                int index = EntityList.SelectedIndex;
                if (index >= 0)
                {
                    selectedItem = (EntityListItem)EntityList.Items[index];
                }
            }

            // clear Entity & Property list views
            EntityList.ItemsSource = null;
            PropertyList.ShowEntity(null);

            // get current general filter settings
            bool?showSite   = SiteToggle.IsChecked;
            bool?showPlaced = PlacedToggle.IsChecked;

            // get category-specific filter settings
            EntityCategory category     = CurrentCategory;
            bool?          showCategory = null;

            switch (category)
            {
            case EntityCategory.Unit:
                showCategory = MobileToggle.IsChecked;
                break;

            case EntityCategory.Terrain:
                showCategory = CaptureToggle.IsChecked;
                break;
            }

            // get currently selected site
            PointI selected = this._mapView.SelectedSite;

            // get all owned faction entities for current category
            var entities = this._faction.GetEntities(category);
            var list     = new List <EntityListItem>(entities.Count);

            foreach (Entity entity in entities)
            {
                // Site filter: skip entities on other sites
                if (showSite == true && (entity.Site == null || entity.Site.Location != selected))
                {
                    continue;
                }

                // Placed filter: skip placed or unplaced entities
                if ((showPlaced == true && !entity.IsPlaced) ||
                    (showPlaced == false && entity.IsPlaced))
                {
                    continue;
                }

                // get value that matches category-specific filter
                bool showEntity = false;
                switch (category)
                {
                case EntityCategory.Unit:
                    showEntity = ((Unit)entity).IsMobile;
                    break;

                case EntityCategory.Terrain:
                    showEntity = ((Terrain)entity).CanCapture;
                    break;
                }

                // skip entities that don't match category-specific filter
                if ((showCategory == true && !showEntity) ||
                    (showCategory == false && showEntity))
                {
                    continue;
                }

                // show entity name with current site
                string site = (entity.Site == null ? "—" : entity.Site.ToString());
                list.Add(new EntityListItem(entity, site));
            }

            // use ItemsSource for sorting & virtualization
            list.Sort((x, y) => StringUtility.CompareNatural(x.Item1.ToString(), y.Item1.ToString()));
            EntityList.ItemsSource = list;

            // select remembered or first item, if any
            if (select && EntityList.Items.Count > 0)
            {
                if (selectedItem != null)
                {
                    EntityList.SelectAndShow(selectedItem);
                }

                if (EntityList.SelectedIndex < 0)
                {
                    EntityList.SelectedIndex = 0;
                }
            }
        }