예제 #1
0
 public SequenceViewModel(CategoryViewModel category, SequenceDescription desc)
 {
     Category = category;
     Category.IsEmpty = false;
     Result = desc.Result;
     Description = desc.Description;
     Sequence = desc.Sequence;
     Utf32 = desc.Utf32;
 }
예제 #2
0
        private void InitializeComponents()
        {
            var category_lut = new Dictionary <Category, CategoryViewModel>();

            // Fill category list
            foreach (var category in CodepointCategory.AllCategories)
            {
                m_categories.Add(category_lut[category] = new CategoryViewModel(this, category));
            }

            foreach (var category in EmojiCategory.AllCategories)
            {
                m_categories.Add(category_lut[category] = new CategoryViewModel(this, category));
            }

            var macro_viewmodel = new CategoryViewModel(this, new MacroCategory("User Macros"));

            m_categories.Add(macro_viewmodel);

            // Compute a list of sorted codepoint categories for faster lookups
            var sorted_categories = new SortedList <int, CategoryViewModel>();

            foreach (var category in m_categories)
            {
                if (category.RangeEnd > 0)
                {
                    sorted_categories.Add(category.RangeEnd, category);
                }
            }

            // Fill sequence list and assign them a category
            foreach (var desc in Settings.GetSequenceDescriptions())
            {
                CategoryViewModel main_viewmodel = null, emoji_viewmodel = null;

                var emoji_category = EmojiCategory.FromEmojiString(desc.Result);
                if (emoji_category != null)
                {
                    category_lut.TryGetValue(emoji_category, out emoji_viewmodel);
                    emoji_viewmodel.IsEmpty = false;
                }

                // TODO: optimize me
                if (desc.Utf32 != -1)
                {
                    foreach (var kv in sorted_categories)
                    {
                        if (kv.Key >= desc.Utf32)
                        {
                            main_viewmodel         = kv.Value;
                            main_viewmodel.IsEmpty = false;
                            break;
                        }
                    }
                }
                else if (emoji_category == null)
                {
                    macro_viewmodel.IsEmpty = false;
                    main_viewmodel          = macro_viewmodel;
                }

                m_sequences.Add(new SequenceViewModel(desc)
                {
                    Category      = main_viewmodel,
                    EmojiCategory = emoji_viewmodel,
                });
            }

            RefreshCategoryFilters();
            RefreshSequenceFilters();
        }
예제 #3
0
        private void InitializeComponents()
        {
            var category_lut = new Dictionary <Category, CategoryViewModel>();

            // Fill the category tree
            m_favorites = new CategoryViewModel(this, new TopCategory(i18n.Text.Favorites + " ⭐"));
            m_categories.Add(m_favorites);

            var all_unicode_vm = new CategoryViewModel(this, new TopCategory(i18n.Text.UnicodeCharacters + " — ŵ Ǿ à Ꝏ Σ ⍾ ꟿ"));

            foreach (var c in CodepointCategory.AllCategories)
            {
                all_unicode_vm.Children.Add(category_lut[c] = new CategoryViewModel(this, c));
            }
            m_categories.Add(all_unicode_vm);

            var all_emoji_vm = new CategoryViewModel(this, new TopCategory(i18n.Text.Emoji + " ☺🍄🐨"));

            foreach (var c in EmojiCategory.AllCategories)
            {
                all_emoji_vm.Children.Add(category_lut[c] = new CategoryViewModel(this, c));
            }
            m_categories.Add(all_emoji_vm);

            m_macros = new CategoryViewModel(this, new TopCategory(i18n.Text.UserMacros + " ( ͡° ͜ʖ ͡°)"));
            m_categories.Add(m_macros);

            // Compute a list of sorted codepoint categories for faster lookups
            var sorted_categories = new SortedList <int, CategoryViewModel>();

            foreach (var category in all_unicode_vm.Children)
            {
                if (category.RangeEnd > 0)
                {
                    sorted_categories.Add(category.RangeEnd, category);
                }
            }

            // Fill sequence list and assign them a category
            foreach (var desc in Settings.GetSequenceDescriptions())
            {
                CategoryViewModel main_viewmodel = null, emoji_viewmodel = null;

                var emoji_category = EmojiCategory.FromEmojiString(desc.Result);
                if (emoji_category != null)
                {
                    category_lut.TryGetValue(emoji_category, out emoji_viewmodel);
                    emoji_viewmodel.IsEmpty = false;
                }

                // TODO: optimize me
                if (desc.Utf32 != -1)
                {
                    foreach (var kv in sorted_categories)
                    {
                        if (kv.Key >= desc.Utf32)
                        {
                            main_viewmodel         = kv.Value;
                            main_viewmodel.IsEmpty = false;
                            break;
                        }
                    }
                }

                m_sequences.Add(new SequenceViewModel(desc)
                {
                    UnicodeCategoryVM = main_viewmodel,
                    EmojiCategoryVM   = emoji_viewmodel,
                });
            }

            RefreshSequenceFilters();
        }