public TailViewModelFactory([NotNull] IObjectProvider objectProvider, [NotNull] ISchedulerProvider schedulerProvider, [NotNull] IColourProvider colourProvider, [NotNull] ISearchMetadataFactory searchMetadataFactory, [NotNull] IIconProvider iconProvider, [NotNull] ITailViewStateControllerFactory tailViewStateControllerFactory, [NotNull] ITextAssociationCollection textAssociationCollection, [NotNull] IThemeProvider themeProvider) { if (objectProvider == null) throw new ArgumentNullException(nameof(objectProvider)); if (schedulerProvider == null) throw new ArgumentNullException(nameof(schedulerProvider)); if (colourProvider == null) throw new ArgumentNullException(nameof(colourProvider)); if (searchMetadataFactory == null) throw new ArgumentNullException(nameof(searchMetadataFactory)); if (iconProvider == null) throw new ArgumentNullException(nameof(iconProvider)); if (tailViewStateControllerFactory == null) throw new ArgumentNullException(nameof(tailViewStateControllerFactory)); _objectProvider = objectProvider; _schedulerProvider = schedulerProvider; _colourProvider = colourProvider; _searchMetadataFactory = searchMetadataFactory; _iconProvider = iconProvider; _tailViewStateControllerFactory = tailViewStateControllerFactory; _textAssociationCollection = textAssociationCollection; _themeProvider = themeProvider; }
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()); }
public SearchMetadataFactory(IDefaultIconSelector defaultIconSelector, IColourProvider colourProvider, IDefaultColourSelector defaultColourSelector) { _defaultIconSelector = defaultIconSelector; _colourProvider = colourProvider; _defaultColourSelector = defaultColourSelector; }
public DefaultColourSelector(IColourProvider colourProvider) { _hues = colourProvider.Hues.ToDictionary(h => h.Key); _defaultHighlight = colourProvider.Hues .Last(s => s.Swatch.Equals("amber", StringComparison.OrdinalIgnoreCase)); _defaults = Load().ToArray(); }
public SearchMetadataFactory(IDefaultIconSelector defaultIconSelector, IColourProvider colourProvider, IDefaultColourSelector defaultColourSelector, ITextAssociationCollection textAssociationCollection) { _defaultIconSelector = defaultIconSelector; _defaultColourSelector = defaultColourSelector; _textAssociationCollection = textAssociationCollection; }
public SearchMetadataFactory(IDefaultIconSelector defaultIconSelector, IColourProvider colourProvider, IDefaultColourSelector defaultColourSelector, ITextAssociationCollection textAssociationCollection) { _defaultIconSelector = defaultIconSelector; _defaultColourSelector = defaultColourSelector; _textAssociationCollection = textAssociationCollection; }
public TailViewModelFactory(IObjectProvider objectProvider, ISchedulerProvider schedulerProvider, IColourProvider colourProvider, ISearchMetadataFactory searchMetadataFactory, IIconProvider iconProvider) { _objectProvider = objectProvider; _schedulerProvider = schedulerProvider; _colourProvider = colourProvider; _searchMetadataFactory = searchMetadataFactory; _iconProvider = iconProvider; }
public SearchProxyCollectionFactory([NotNull] ISearchMetadataFactory searchMetadataFactory, [NotNull] ISchedulerProvider schedulerProvider, [NotNull] IColourProvider colourProvider, [NotNull] IIconProvider iconsProvider, [NotNull] ITextAssociationCollection textAssociationCollection, [NotNull] IThemeProvider themeProvider) { SearchMetadataFactory = searchMetadataFactory ?? throw new ArgumentNullException(nameof(searchMetadataFactory)); SchedulerProvider = schedulerProvider ?? throw new ArgumentNullException(nameof(schedulerProvider)); ColourProvider = colourProvider ?? throw new ArgumentNullException(nameof(colourProvider)); IconsProvider = iconsProvider ?? throw new ArgumentNullException(nameof(iconsProvider)); TextAssociationCollection = textAssociationCollection ?? throw new ArgumentNullException(nameof(textAssociationCollection)); ThemeProvider = themeProvider ?? throw new ArgumentNullException(nameof(themeProvider)); }
public TailViewModelFactory([NotNull] IObjectProvider objectProvider, [NotNull] ISchedulerProvider schedulerProvider, [NotNull] IColourProvider colourProvider, [NotNull] ISearchMetadataFactory searchMetadataFactory, [NotNull] IIconProvider iconProvider, [NotNull] ITailViewStateControllerFactory tailViewStateControllerFactory, [NotNull] ITextAssociationCollection textAssociationCollection, [NotNull] IThemeProvider themeProvider) { if (objectProvider == null) { throw new ArgumentNullException(nameof(objectProvider)); } if (schedulerProvider == null) { throw new ArgumentNullException(nameof(schedulerProvider)); } if (colourProvider == null) { throw new ArgumentNullException(nameof(colourProvider)); } if (searchMetadataFactory == null) { throw new ArgumentNullException(nameof(searchMetadataFactory)); } if (iconProvider == null) { throw new ArgumentNullException(nameof(iconProvider)); } if (tailViewStateControllerFactory == null) { throw new ArgumentNullException(nameof(tailViewStateControllerFactory)); } _objectProvider = objectProvider; _schedulerProvider = schedulerProvider; _colourProvider = colourProvider; _searchMetadataFactory = searchMetadataFactory; _iconProvider = iconProvider; _tailViewStateControllerFactory = tailViewStateControllerFactory; _textAssociationCollection = textAssociationCollection; _themeProvider = themeProvider; }
public ThemeProvider([NotNull] ISetting <GeneralOptions> setting, [NotNull] IColourProvider colourProvider) { if (setting == null) { throw new ArgumentNullException(nameof(setting)); } if (colourProvider == null) { throw new ArgumentNullException(nameof(colourProvider)); } Theme = setting.Value .Select(options => options.Theme) .Replay(1).RefCount(); Accent = setting.Value .Select(options => colourProvider.GetAccent(options.Theme)) .Replay(1).RefCount(); }
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); }
public SearchStateToMetadataMapper(IColourProvider colourProvider) { _colourProvider = colourProvider; }
public SearchOptionsViewModel(ISearchMetadataCollection metadataCollection, ISearchMetadataFactory searchMetadataFactory, ISchedulerProvider schedulerProvider, IColourProvider colourProvider, IIconProvider iconsProvider, SearchHints searchHints) { SearchHints = searchHints; var proxyItems = metadataCollection.Metadata.Connect() .WhereReasonsAre(ChangeReason.Add, ChangeReason.Remove) //ignore updates because we update from here .Transform(meta => { return(new SearchOptionsProxy(meta, colourProvider, new IconSelector(iconsProvider, schedulerProvider), m => metadataCollection.Remove(m.SearchText), iconsProvider.DefaultIconSelector, Id)); }) .SubscribeMany(so => { //when a value changes, write the original value back to the cache return(so.WhenAnyPropertyChanged() .Select(_ => (SearchMetadata)so) .Subscribe(metadataCollection.AddorUpdate)); }) .AsObservableCache(); var monitor = MonitorPositionalChanges() .Subscribe(positionChangedArgs => { positionChangedArgs.ForEach(metadataCollection.AddorUpdate); }); //load data onto grid var collection = new ObservableCollectionExtended <SearchOptionsProxy>(); var userOptions = proxyItems.Connect() .Sort(SortExpressionComparer <SearchOptionsProxy> .Ascending(proxy => proxy.Position)) .ObserveOn(schedulerProvider.MainThread) //force reset for each new or removed item dues to a bug in the underlying dragablz control which inserts in an incorrect position .Bind(collection, new ObservableCollectionAdaptor <SearchOptionsProxy, string>(0)) .DisposeMany() .Subscribe(); Data = new ReadOnlyObservableCollection <SearchOptionsProxy>(collection); //command to add the current search to the tail collection var searchInvoker = SearchHints.SearchRequested.Subscribe(request => { schedulerProvider.Background.Schedule(() => { var meta = searchMetadataFactory.Create(request.Text, request.UseRegEx, metadataCollection.NextIndex(), false); metadataCollection.AddorUpdate(meta); }); }); _cleanUp = new CompositeDisposable(searchInvoker, userOptions, searchInvoker, monitor, SearchHints); }
public DefaultColourSelector(IColourProvider colourProvider) { _colourProvider = colourProvider; _hues = colourProvider.Hues.ToDictionary(h => h.Key); _defaults = Load().ToArray(); }
public SearchStateToMetadataMapper(IColourProvider colourProvider) { _colourProvider = colourProvider; }
public DefaultColourSelector(IColourProvider colourProvider) { _colourProvider = colourProvider; _hues = colourProvider.Hues.ToDictionary(h => h.Key); _defaults = Load().ToArray(); }
public SearchProxyCollection(ISearchMetadataCollection metadataCollection, Guid id, Action<SearchMetadata> changeScopeAction, ISchedulerProvider schedulerProvider, IColourProvider colourProvider, IIconProvider iconsProvider, ITextAssociationCollection textAssociationCollection, IThemeProvider themeProvider) { var proxyItems = metadataCollection.Metadata.Connect() .WhereReasonsAre(ChangeReason.Add, ChangeReason.Remove) //ignore updates because we update from here .Transform(meta => { return new SearchOptionsProxy(meta, changeScopeAction, colourProvider, themeProvider, new IconSelector(iconsProvider, schedulerProvider), m => metadataCollection.Remove(m.SearchText), iconsProvider.DefaultIconSelector, id); }) .SubscribeMany(so => { //when a value changes, write the original value back to the metadata collection var anyPropertyHasChanged = so.WhenAnyPropertyChanged() .Select(_ => (SearchMetadata) so) .Subscribe(metadataCollection.AddorUpdate); //when an icon or colour has changed we need to record user choice so //the same choice can be used again var iconChanged = so.WhenValueChanged(proxy => proxy.IconKind, false).ToUnit(); var colourChanged = so.WhenValueChanged(proxy => proxy.HighlightHue, false).ToUnit(); var ignoreCaseChanged = so.WhenValueChanged(proxy => proxy.CaseSensitive, false).ToUnit(); var textAssociationChanged = iconChanged.Merge(colourChanged).Merge(ignoreCaseChanged) .Throttle(TimeSpan.FromMilliseconds(250)) .Select(_ => new TextAssociation(so.Text, so.CaseSensitive, so.UseRegex, so.HighlightHue.Swatch, so.IconKind.ToString(), so.HighlightHue.Name, DateTime.UtcNow)) .Subscribe(textAssociationCollection.MarkAsChanged); return new CompositeDisposable(anyPropertyHasChanged, textAssociationChanged); }) .AsObservableCache(); Count = proxyItems.CountChanged.StartWith(0).ForBinding(); var monitor = MonitorPositionalChanges().Subscribe(metadataCollection.Add); //load data onto grid var collection = new ObservableCollectionExtended<SearchOptionsProxy>(); var includedLoader = proxyItems .Connect(proxy => !proxy.IsExclusion) .Sort(SortExpressionComparer<SearchOptionsProxy>.Ascending(proxy => proxy.Position)) .ObserveOn(schedulerProvider.MainThread) //force reset for each new or removed item dues to a bug in the underlying dragablz control which inserts in an incorrect position .Bind(collection, new ObservableCollectionAdaptor<SearchOptionsProxy, string>(0)) .DisposeMany() .Subscribe(); ReadOnlyObservableCollection<SearchOptionsProxy> excluded; var excludedLoader = proxyItems .Connect(proxy => proxy.IsExclusion) .Sort(SortExpressionComparer<SearchOptionsProxy>.Ascending(proxy => proxy.Text)) .ObserveOn(schedulerProvider.MainThread) //force reset for each new or removed item dues to a bug in the underlying dragablz control which inserts in an incorrect position .Bind(out excluded) .DisposeMany() .Subscribe(); Excluded = excluded; Included = new ReadOnlyObservableCollection<SearchOptionsProxy>(collection); _cleanUp = new CompositeDisposable(proxyItems, includedLoader, excludedLoader, monitor); }
public SearchProxyCollection(ISearchMetadataCollection metadataCollection, Guid id, Action<SearchMetadata> changeScopeAction, ISchedulerProvider schedulerProvider, IColourProvider colourProvider, IIconProvider iconsProvider, ITextAssociationCollection textAssociationCollection, IThemeProvider themeProvider) { var proxyItems = metadataCollection.Metadata.Connect() .WhereReasonsAre(ChangeReason.Add, ChangeReason.Remove) //ignore updates because we update from here .Transform(meta => { return new SearchOptionsProxy(meta, changeScopeAction, colourProvider, themeProvider, new IconSelector(iconsProvider, schedulerProvider), m => metadataCollection.Remove(m.SearchText), iconsProvider.DefaultIconSelector, id); }) .SubscribeMany(so => { //when a value changes, write the original value back to the metadata collection var anyPropertyHasChanged = so.WhenAnyPropertyChanged() .Select(_ => (SearchMetadata) so) .Subscribe(metadataCollection.AddorUpdate); //when an icon or colour has changed we need to record user choice so //the same choice can be used again var iconChanged = so.WhenValueChanged(proxy => proxy.IconKind, false).ToUnit(); var colourChanged = so.WhenValueChanged(proxy => proxy.HighlightHue, false).ToUnit(); var ignoreCaseChanged = so.WhenValueChanged(proxy => proxy.CaseSensitive, false).ToUnit(); var textAssociationChanged = iconChanged.Merge(colourChanged).Merge(ignoreCaseChanged) .Throttle(TimeSpan.FromMilliseconds(250)) .Select(_ => new TextAssociation(so.Text, so.CaseSensitive, so.UseRegex, so.HighlightHue.Swatch, so.IconKind.ToString(), so.HighlightHue.Name, DateTime.UtcNow)) .Subscribe(textAssociationCollection.MarkAsChanged); return new CompositeDisposable(anyPropertyHasChanged, textAssociationChanged); }) .AsObservableCache(); Count = proxyItems.CountChanged.StartWith(0).ForBinding(); var monitor = MonitorPositionalChanges().Subscribe(metadataCollection.Add); //load data onto grid var collection = new ObservableCollectionExtended<SearchOptionsProxy>(); var includedLoader = proxyItems .Connect(proxy => !proxy.IsExclusion) .Sort(SortExpressionComparer<SearchOptionsProxy>.Ascending(proxy => proxy.Position)) .ObserveOn(schedulerProvider.MainThread) //force reset for each new or removed item dues to a bug in the underlying dragablz control which inserts in an incorrect position .Bind(collection, new ObservableCollectionAdaptor<SearchOptionsProxy, string>(0)) .DisposeMany() .Subscribe(); var excludedLoader = proxyItems .Connect(proxy => proxy.IsExclusion) .Sort(SortExpressionComparer<SearchOptionsProxy>.Ascending(proxy => proxy.Text)) .ObserveOn(schedulerProvider.MainThread) //force reset for each new or removed item dues to a bug in the underlying dragablz control which inserts in an incorrect position .Bind(out var excluded) .DisposeMany() .Subscribe(); Excluded = excluded; Included = new ReadOnlyObservableCollection<SearchOptionsProxy>(collection); _cleanUp = new CompositeDisposable(proxyItems, includedLoader, excludedLoader, monitor); }
public SearchOptionsViewModel(ISearchMetadataCollection metadataCollection, ISearchMetadataFactory searchMetadataFactory, ISchedulerProvider schedulerProvider, IColourProvider colourProvider, IIconProvider iconsProvider, ITextAssociationCollection textAssociationCollection, SearchHints searchHints, IThemeProvider themeProvider) { SearchHints = searchHints; var proxyItems = metadataCollection.Metadata.Connect() .WhereReasonsAre(ChangeReason.Add, ChangeReason.Remove) //ignore updates because we update from here .Transform(meta => { return new SearchOptionsProxy(meta, colourProvider, themeProvider, new IconSelector(iconsProvider, schedulerProvider), m => metadataCollection.Remove(m.SearchText), iconsProvider.DefaultIconSelector, Id); }) .SubscribeMany(so => { //when a value changes, write the original value back to the metadata collection var anyPropertyHasChanged = so.WhenAnyPropertyChanged() .Select(_ => (SearchMetadata) so) .Subscribe(metadataCollection.AddorUpdate); //when an icon or colour has changed we need to record user choice so //the same choice can be used again var iconChanged = so.WhenValueChanged(proxy => proxy.IconKind,false).ToUnit(); var colourChanged = so.WhenValueChanged(proxy => proxy.HighlightHue, false).ToUnit(); var ignoreCaseChanged = so.WhenValueChanged(proxy => proxy.IgnoreCase, false).ToUnit(); var textAssociationChanged = iconChanged.Merge(colourChanged).Merge(ignoreCaseChanged) .Throttle(TimeSpan.FromMilliseconds(250)) .Select(_=> new TextAssociation(so.Text, so.IgnoreCase, so.UseRegex, so.HighlightHue.Swatch, so.IconKind.ToString(), so.HighlightHue.Name, DateTime.Now)) .Subscribe(textAssociationCollection.MarkAsChanged); return new CompositeDisposable(anyPropertyHasChanged, textAssociationChanged); }) .AsObservableCache(); var monitor = MonitorPositionalChanges() .Subscribe(metadataCollection.Add); //load data onto grid var collection = new ObservableCollectionExtended<SearchOptionsProxy>(); var userOptions = proxyItems.Connect() .Sort(SortExpressionComparer<SearchOptionsProxy>.Ascending(proxy => proxy.Position)) .ObserveOn(schedulerProvider.MainThread) //force reset for each new or removed item dues to a bug in the underlying dragablz control which inserts in an incorrect position .Bind(collection, new ObservableCollectionAdaptor<SearchOptionsProxy, string>(0)) .DisposeMany() .Subscribe(); Data = new ReadOnlyObservableCollection<SearchOptionsProxy>(collection); //command to add the current search to the tail collection var searchInvoker = SearchHints.SearchRequested .ObserveOn(schedulerProvider.Background) .Subscribe(request => { var meta = searchMetadataFactory.Create(request.Text, request.UseRegEx, metadataCollection.NextIndex(), false); metadataCollection.AddorUpdate(meta); }); _cleanUp = new CompositeDisposable(searchInvoker, userOptions, searchInvoker, monitor, SearchHints); }
public SearchOptionsViewModel(ISearchMetadataCollection metadataCollection, ISearchMetadataFactory searchMetadataFactory, ISchedulerProvider schedulerProvider, IColourProvider colourProvider, IIconProvider iconsProvider, ITextAssociationCollection textAssociationCollection, SearchHints searchHints) { SearchHints = searchHints; var proxyItems = metadataCollection.Metadata.Connect() .WhereReasonsAre(ChangeReason.Add, ChangeReason.Remove) //ignore updates because we update from here .Transform(meta => { return(new SearchOptionsProxy(meta, colourProvider, new IconSelector(iconsProvider, schedulerProvider), m => metadataCollection.Remove(m.SearchText), iconsProvider.DefaultIconSelector, Id)); }) .SubscribeMany(so => { //when a value changes, write the original value back to the metadata collection var anyPropertyHasChanged = so.WhenAnyPropertyChanged() .Select(_ => (SearchMetadata)so) .Subscribe(metadataCollection.AddorUpdate); //when an icon or colour has changed we need to record user choice so //the same choice can be used again var iconChanged = so.WhenValueChanged(proxy => proxy.IconKind, false).ToUnit(); var colourChanged = so.WhenValueChanged(proxy => proxy.HighlightHue, false).ToUnit(); var ignoreCaseChanged = so.WhenValueChanged(proxy => proxy.IgnoreCase, false).ToUnit(); var textAssociationChanged = iconChanged.Merge(colourChanged).Merge(ignoreCaseChanged) .Throttle(TimeSpan.FromMilliseconds(250)) .Select(_ => new TextAssociation(so.Text, so.IgnoreCase, so.UseRegex, so.HighlightHue.Swatch, so.IconKind.ToString(), so.HighlightHue.Name, DateTime.Now)) .Subscribe(textAssociationCollection.MarkAsChanged); return(new CompositeDisposable(anyPropertyHasChanged, textAssociationChanged)); }) .AsObservableCache(); var monitor = MonitorPositionalChanges() .Subscribe(metadataCollection.Add); //load data onto grid var collection = new ObservableCollectionExtended <SearchOptionsProxy>(); var userOptions = proxyItems.Connect() .Sort(SortExpressionComparer <SearchOptionsProxy> .Ascending(proxy => proxy.Position)) .ObserveOn(schedulerProvider.MainThread) //force reset for each new or removed item dues to a bug in the underlying dragablz control which inserts in an incorrect position .Bind(collection, new ObservableCollectionAdaptor <SearchOptionsProxy, string>(0)) .DisposeMany() .Subscribe(); Data = new ReadOnlyObservableCollection <SearchOptionsProxy>(collection); //command to add the current search to the tail collection var searchInvoker = SearchHints.SearchRequested .ObserveOn(schedulerProvider.Background) .Subscribe(request => { var meta = searchMetadataFactory.Create(request.Text, request.UseRegEx, metadataCollection.NextIndex(), false); metadataCollection.AddorUpdate(meta); }); _cleanUp = new CompositeDisposable(searchInvoker, userOptions, searchInvoker, monitor, SearchHints); }
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); }
public SearchStateToMetadataMapper(IColourProvider colourProvider, IIconProvider iconProvider) { _colourProvider = colourProvider; _iconProvider = iconProvider; }
public DefaultColourSelector(IColourProvider colourProvider) { _colourProvider = colourProvider; _defaults = Load().ToArray(); }