예제 #1
0
        public SearchOptionsProxy([NotNull] SearchMetadata searchMetadata,
                                  [NotNull] Action <SearchMetadata> changeScopeAction,
                                  [NotNull] IColourProvider colourProvider,
                                  [NotNull] IThemeProvider themeProvider,
                                  [NotNull] IconSelector iconSelector,
                                  [NotNull] Action <SearchMetadata> removeAction,
                                  [NotNull] IDefaultIconSelector defaultIconSelector,
                                  Guid parentId)
        {
            if (changeScopeAction == null)
            {
                throw new ArgumentNullException(nameof(changeScopeAction));
            }
            if (colourProvider == null)
            {
                throw new ArgumentNullException(nameof(colourProvider));
            }
            if (themeProvider == null)
            {
                throw new ArgumentNullException(nameof(themeProvider));
            }
            if (removeAction == null)
            {
                throw new ArgumentNullException(nameof(removeAction));
            }

            _searchMetadata      = searchMetadata ?? throw new ArgumentNullException(nameof(searchMetadata));
            _defaultIconSelector = defaultIconSelector ?? throw new ArgumentNullException(nameof(defaultIconSelector));

            IconSelector  = iconSelector ?? throw new ArgumentNullException(nameof(iconSelector));
            ParentId      = parentId;
            Highlight     = _searchMetadata.Highlight;
            Filter        = _searchMetadata.Filter;
            UseRegex      = searchMetadata.UseRegex;
            CaseSensitive = !searchMetadata.IgnoreCase;
            Position      = searchMetadata.Position;
            Hues          = colourProvider.Hues;
            HighlightHue  = searchMetadata.HighlightHue;
            IsGlobal      = searchMetadata.IsGlobal;
            IsExclusion   = searchMetadata.IsExclusion;

            ShowIconSelectorCommand = new Command(async() => await ShowIconSelector());
            RemoveCommand           = new Command(() => removeAction(searchMetadata));
            ChangeScopeCommand      = new Command(() => changeScopeAction((SearchMetadata)this));
            HighlightCommand        = new Command <Hue>(newHue => { HighlightHue = newHue; });

            IconKind = _searchMetadata.IconKind.ParseEnum <PackIconKind>()
                       .ValueOr(() => PackIconKind.ArrowRightBold);

            //combine system with user choice.
            var defaultHue = this.WhenValueChanged(vm => vm.HighlightHue)
                             .CombineLatest(themeProvider.Accent, (user, system) => user == Hue.NotSpecified ? system : user)
                             .Publish();

            Foreground = defaultHue.Select(h => h.ForegroundBrush).ForBinding();
            Background = defaultHue.Select(h => h.BackgroundBrush).ForBinding();

            _cleanUp = new CompositeDisposable(IconSelector, Foreground, Background, defaultHue.Connect());
        }
예제 #2
0
 public SearchMetadataFactory(IDefaultIconSelector defaultIconSelector,
                              IDefaultColourSelector defaultColourSelector,
                              ITextAssociationCollection textAssociationCollection)
 {
     _defaultIconSelector       = defaultIconSelector;
     _defaultColourSelector     = defaultColourSelector;
     _textAssociationCollection = textAssociationCollection;
 }
예제 #3
0
 public SearchMetadataFactory(IDefaultIconSelector defaultIconSelector,
                              IColourProvider colourProvider,
                              IDefaultColourSelector defaultColourSelector)
 {
     _defaultIconSelector   = defaultIconSelector;
     _colourProvider        = colourProvider;
     _defaultColourSelector = defaultColourSelector;
 }
 public SearchMetadataFactory(IDefaultIconSelector defaultIconSelector, 
     IDefaultColourSelector defaultColourSelector,
     ITextAssociationCollection textAssociationCollection)
 {
     _defaultIconSelector = defaultIconSelector;
     _defaultColourSelector = defaultColourSelector;
     _textAssociationCollection = textAssociationCollection;
 }
예제 #5
0
        public IconProvider(IDefaultIconSelector defaultIconSelector)
        {
            DefaultIconSelector = defaultIconSelector;

            Icons = _icons.AsObservableList();

            var icons = Enum.GetNames(typeof(PackIconKind))
                        .Select(str =>
                        {
                            var value = (PackIconKind) Enum.Parse(typeof (PackIconKind), str);
                            return new IconDescription(value, str);
                        });

            _icons.AddRange(icons);

            _cleanUp = new CompositeDisposable(Icons, _icons);
        }
예제 #6
0
        public IconProvider(IDefaultIconSelector defaultIconSelector)
        {
            DefaultIconSelector = defaultIconSelector;

            Icons = _icons.AsObservableList();

            var icons = Enum.GetNames(typeof(PackIconKind))
                        .Select(str =>
            {
                var value = (PackIconKind)Enum.Parse(typeof(PackIconKind), str);
                return(new IconDescription(value, str));
            });

            _icons.AddRange(icons);

            _cleanUp = new CompositeDisposable(Icons, _icons);
        }
        public SearchInfoCollection(ISearchMetadataCollection searchMetadataCollection,
                                    ISearchMetadataFactory searchMetadataFactory,
                                    IColourProvider colourProvider,
                                    IEnumerable <IFileWatcher> filesWatcher,
                                    IDefaultIconSelector defaultIconSelector)
        {
            _metadataCollection    = searchMetadataCollection;
            _searchMetadataFactory = searchMetadataFactory;
            _colourProvider        = colourProvider;
            _filesWatcher          = filesWatcher;
            _defaultIconSelector   = defaultIconSelector;

            //Add a complete file display
            All = _filesWatcher.Select(t => t.Latest).Index();

            //create a collection with 1 item, which is used to show entire file
            var systemSearches = new SourceCache <SearchInfo, string>(t => t.SearchText);

            systemSearches.AddOrUpdate(new SearchInfo("<All>", All, SearchType.All));

            //create a collection of all possible user filters
            var userSearches = searchMetadataCollection.Metadata
                               .Connect(meta => meta.Filter)
                               .IgnoreUpdateWhen((current, previous) => SearchMetadata.EffectsFilterComparer.Equals(current, previous))
                               .Transform(meta =>
            {
                var latest = _filesWatcher
                             .Select(t => t.Latest)
                             .Merge()
                             .Search(meta.BuildPredicate());

                return(new SearchInfo(meta.SearchText, latest, SearchType.User));
            });

            //combine te results into a single collection
            Searches = systemSearches.Connect()
                       .Or(userSearches)
                       .AsObservableCache();

            _cleanUp = new CompositeDisposable(Searches, systemSearches);
        }
예제 #8
0
        public SearchOptionsProxy([NotNull] SearchMetadata searchMetadata,
                                  [NotNull] IColourProvider colourProvider,
                                  [NotNull] IconSelector iconSelector,
                                  [NotNull] Action <SearchMetadata> removeAction,
                                  [NotNull] IDefaultIconSelector defaultIconSelector,
                                  Guid parentId)
        {
            if (searchMetadata == null)
            {
                throw new ArgumentNullException(nameof(searchMetadata));
            }
            if (colourProvider == null)
            {
                throw new ArgumentNullException(nameof(colourProvider));
            }
            if (iconSelector == null)
            {
                throw new ArgumentNullException(nameof(iconSelector));
            }
            if (removeAction == null)
            {
                throw new ArgumentNullException(nameof(removeAction));
            }
            if (defaultIconSelector == null)
            {
                throw new ArgumentNullException(nameof(defaultIconSelector));
            }


            _searchMetadata      = searchMetadata;
            _defaultIconSelector = defaultIconSelector;
            IconSelector         = iconSelector;

            ShowIconSelectorCommand = new Command(ShowIconSelector);
            RemoveCommand           = new Command(() => removeAction(searchMetadata));
            HighlightCommand        = new Command <Hue>(newHue =>
            {
                HighlightHue = newHue;
            });

            ParentId     = parentId;
            Highlight    = _searchMetadata.Highlight;
            Filter       = _searchMetadata.Filter;
            UseRegex     = searchMetadata.UseRegex;
            IgnoreCase   = searchMetadata.IgnoreCase;
            Position     = searchMetadata.Position;
            Hues         = colourProvider.Hues;
            HighlightHue = searchMetadata.HighlightHue;

            IconKind = _searchMetadata.IconKind.ParseEnum <PackIconKind>()
                       .ValueOr(() => PackIconKind.ArrowRightBold);

            Foreground = this.WhenValueChanged(vm => vm.HighlightHue)
                         .Select(h => h.ForegroundBrush)
                         .ForBinding();

            Background = this.WhenValueChanged(vm => vm.HighlightHue)
                         .Select(h => h.BackgroundBrush)
                         .ForBinding();

            _cleanUp = new CompositeDisposable(IconSelector, Foreground, Background);
        }