public AllPostprocessorsControlHandler( IManagerInternal postprocessorsManager, ICorrelationManager correlationManager ) { this.postprocessorsManager = postprocessorsManager; this.getOutputs = Selectors.Create( () => postprocessorsManager.LogSourcePostprocessors, () => correlationManager.StateSummary, (outputs, correlatorSummary) => outputs.GetAutoPostprocessingCapableOutputs() .Union(GetCorrelationOutputs(outputs, correlatorSummary)) .ToArray() ); this.getControlData = Selectors.Create( getOutputs, outputs => { var relevantPostprocessorExists = outputs.Any(); return(new ControlData( !relevantPostprocessorExists, "*action Run all postprocessors*", ControlData.StatusColor.Neutral )); } ); }
public SearchResultMessagesModel( ILogSourcesManager logSources, ISearchManager searchManager, IFiltersFactory filtersFactory ) { this.searchManager = searchManager; logSources.OnLogSourceColorChanged += (s, e) => { OnLogSourceColorChanged?.Invoke(s, e); }; int searchFiltersListVersion = 0; searchManager.SearchResultsChanged += (s, e) => ++ searchFiltersListVersion; searchManager.SearchResultChanged += (s, e) => searchFiltersListVersion += ((e.Flags & SearchResultChangeFlag.VisibleChanged) != 0 ? 1 : 0); this.getSearchFiltersList = Selectors.Create( () => searchFiltersListVersion, _ => { var list = filtersFactory.CreateFiltersList(FilterAction.Exclude, FiltersListPurpose.Search); foreach (var f in searchManager .Results .Where(r => r.Visible && r.OptionsFilter != null) .Select(r => r.OptionsFilter)) { list.Insert(list.Items.Count, f.Clone()); } return(list); } ); }
public LoadedMessagesViewModeStrategy( ILogSourcesManager logSourcesManager, IChangeNotification changeNotification ) { this.logSourcesManager = logSourcesManager; this.changeNotification = changeNotification; this.rawModeAllowed = Selectors.Create( () => logSourcesManager.VisibleItems, sources => sources.Any(s => s.Provider.Factory.ViewOptions.RawViewAllowed) ); this.isRawMode = Selectors.Create( rawModeAllowed, () => manuallySetRawMode, () => logSourcesManager.VisibleItems, (allowed, set, sources) => { return (!allowed ? false : set != null ? set.Value : sources.All(s => s.Provider.Factory.ViewOptions.PreferredView == PreferredViewMode.Raw)); } ); logSourceRemovedHandler = (s, e) => { if (logSourcesManager.Items.Count == 0 && manuallySetRawMode.HasValue) { manuallySetRawMode = null; // reset automatic mode when last source is gone changeNotification.Post(); } }; logSourcesManager.OnLogSourceRemoved += logSourceRemovedHandler; }
public PresenterPersistentState( Persistence.IStorageManager storageManager, string globalStateStorageEntryName, string logSourceSpecificStateSectionName, IChangeNotification changeNotification, Func <ImmutableHashSet <string> > availableTagsSelector, Func <IEnumerable <ILogSource> > sourcesSelector ) { this.changeNotification = changeNotification; this.stateEntry = storageManager.GetEntry(globalStateStorageEntryName); this.logSourceStateSectionName = logSourceSpecificStateSectionName; this.availableTagsSelector = CreateAvailableTagsSelectorAdapter(availableTagsSelector); this.sourcesSelector = sourcesSelector; this.getDefaultPredicate = Selectors.Create( this.availableTagsSelector, availableTags => TagsPredicate.MakeMatchAnyPredicate(availableTags) ); this.getTagsPredicate = Selectors.Create( getDefaultPredicate, sourcesSelector, () => savedTagsRevision, (defaultPredicate, sources, _revision) => LoadPredicate(sources, defaultPredicate, logSourceStateSectionName) ); }
async void IPresenter.ShowWindow(ILogSource source) { this.source = source; this.annotation = source.Annotation; this.timeOffset = source.TimeOffsets.ToString(); this.getViewState = Selectors.Create( () => annotation, () => timeOffset, () => (source.Visible, source.TrackingEnabled, source.ColorIndex, source.DisplayName), () => theme.ThreadColors, () => forceUpdateRevision, (annotation, timeOffset, sourceProps, themeThreadColors, rev) => MakeViewState( annotation, timeOffset, sourceProps.Visible, sourceProps.TrackingEnabled, sourceProps.ColorIndex, sourceProps.DisplayName, source.Provider, preprocessings, themeThreadColors, source.Threads.Items ) ); currentWindow = view.CreateWindow(); var autoCloseDialog = Updaters.Create( () => this.source.IsDisposed, disposed => { if (disposed) { currentWindow.Close(); } } ); using (changeNotification.CreateSubscription(autoCloseDialog)) { try { changeNotification.Active = true; await currentWindow.ShowModalDialog(); } finally { changeNotification.Active = false; this.getViewState = () => emptyViewState; currentWindow = null; } } }
void IView.SetViewModel(IViewModel viewModel) { this.viewModel = viewModel; res = new GraphicsResources( viewModel, Font.FontFamily.Name, Font.Size, 8f, 6f, new LJD.Image(TimelineVisualizerControlResources.UserAction), new LJD.Image(TimelineVisualizerControlResources.APICall), new LJD.Image(TimelineVisualizerControlResources.TimelineBookmark), new LJD.Image(TimelineVisualizerControlResources.FocusedMsgSlaveVert), UIUtils.Dpi.ScaleUp(1, 120), new LJD.Brush(System.Drawing.SystemColors.Control.ToColor()) ); drawing = new ControlDrawing(res); var vm = GetUpToDateViewMetrics(); var rulersPanelHeight = vm.RulersPanelHeight; activitiesScrollBar.SmallChange = vm.LineHeight; activitiesScrollBar.Top = rulersPanelHeight; quickSearchEditBox.Top = rulersPanelHeight - quickSearchEditBox.Height; panel5.Height = rulersPanelHeight; this.changeNotification = viewModel.ChangeNotification; var updateNotificationsButton = Updaters.Create(() => viewModel.NotificationsIconVisibile, v => notificationsButton.Visible = v); var updateNoContentMessage = Updaters.Create(() => viewModel.NoContentMessageVisibile, SetNoContentMessageVisibility); var updateVertScroller = Updaters.Create( Selectors.Create(() => viewModel.ActivitiesCount, () => activitiesViewPanelSize, (activitiesCount, sz) => new { activitiesCount, sz }), key => UpdateActivitiesScroller(key.activitiesCount, key.sz.Value)); var updateCurrentActivityInfo = Updaters.Create(() => viewModel.CurrentActivity, UpdateCurrentActivityControls); this.changeNotificationSubscription = changeNotification.CreateSubscription(() => { updateNotificationsButton(); updateNoContentMessage(); updateVertScroller(); updateCurrentActivityInfo(); }); this.ParentForm.VisibleChanged += (s, e) => { if (this.ParentForm.Visible) { viewModel.OnWindowShown(); } else { viewModel.OnWindowHidden(); } }; }
public PostprocessorsManager( ILogSourcesManager logSources, Telemetry.ITelemetryCollector telemetry, ISynchronizationContext modelSyncContext, ISynchronizationContext threadPoolSyncContext, IHeartBeatTimer heartbeat, Progress.IProgressAggregator progressAggregator, Settings.IGlobalSettingsAccessor settingsAccessor, IOutputDataDeserializer outputDataDeserializer, ITraceSourceFactory traceSourceFactory, ILogPartTokenFactories logPartTokenFactories, Correlation.ISameNodeDetectionTokenFactories sameNodeDetectionTokenFactories, IChangeNotification changeNotification, LogMedia.IFileSystem logFileSystem ) { this.logSources = logSources; this.telemetry = telemetry; this.progressAggregator = progressAggregator; this.settingsAccessor = settingsAccessor; this.modelSyncContext = modelSyncContext; this.threadPoolSyncContext = threadPoolSyncContext; this.heartbeat = heartbeat; this.outputDataDeserializer = outputDataDeserializer; this.logPartTokenFactories = logPartTokenFactories; this.sameNodeDetectionTokenFactories = sameNodeDetectionTokenFactories; this.changeNotification = changeNotification; this.logFileSystem = logFileSystem; this.tracer = traceSourceFactory.CreateTraceSource("App", "ppm"); this.updater = new AsyncInvokeHelper(modelSyncContext, Refresh); logSources.OnLogSourceAdded += (sender, args) => updater.Invoke(); logSources.OnLogSourceRemoved += (sender, args) => updater.Invoke(); logSources.OnLogSourceAnnotationChanged += (sender, args) => updater.Invoke(); logSources.OnLogSourceStatsChanged += (object sender, LogSourceStatsEventArgs e) => { if ((e.Flags & LogProviderStatsFlag.ContentsEtag) != 0) { updater.Invoke(); } }; this.visiblePostprocessorsOutputs = Selectors.Create( () => postprocessorsOutputs, () => logSources.Items, (outputs, sources) => { var sourcesMap = sources.ToLookup(s => s); return(ImmutableArray.CreateRange(outputs.Where(output => sourcesMap.Contains(output.LogSource)))); } ); Refresh(); }
public CorrelatorPostprocessorControlHandler( ICorrelationManager correlationManager, ITempFilesManager tempFilesManager, IShellOpen shellOpen ) { this.correlationManager = correlationManager; this.tempFilesManager = tempFilesManager; this.shellOpen = shellOpen; this.getControlData = Selectors.Create( () => correlationManager.StateSummary, GetCurrentData ); }
public Presenter( IView view, IPluginsManagerInternal pluginsManager, IChangeNotification changeNotification, AutoUpdate.IAutoUpdater autoUpdater ) { this.pluginsManager = pluginsManager; this.view = view; this.autoUpdater = autoUpdater; this.changeNotification = changeNotification.CreateChainedChangeNotification(); this.fetchCancellation = new CancellationTokenSource(); this.pluginInstallationRequestsBuilder = pluginsManager.CreatePluginInstallationRequestsBuilder(); this.listItemsSelector = Selectors.Create( () => pluginInstallationRequestsBuilder.InstallationRequests, () => pluginsInfo, () => selectedPlugin, (requests, all, selected) => { return(ImmutableArray.CreateRange(all.Select(p => new ListItem(p, requests, selected?.Id)))); } ); this.selectedPluginDataSelector = Selectors.Create( listItemsSelector, list => { var itemData = list.Select(i => i.MakeSelectedPluginData()).FirstOrDefault(i => i != null); return(itemData ?? new SelectedPluginData { actionCaption = "Install", actionEnabled = false, caption = "", description = "" }); } ); view.SetViewModel(this); this.FetchPlugins(); }
public HighlightBackgroundColorsTable( IColorTheme colorTheme ) { var numColors = FilterAction.IncludeAndColorizeLast - FilterAction.IncludeAndColorizeFirst + 1; if (lightThemeColors.Length != numColors) { throw new Exception("inconsistent constants"); } colorsSelector = Selectors.Create( () => colorTheme.Mode, theme => ImmutableArray.CreateRange(( theme == ColorThemeMode.Light ? lightThemeColors : HSLColorsGenerator.Generate(numHues: numColors, saturation: 0.80, lightness: 0.30) ).Select(ColorTableUtils.FromRGB)) ); }
public HighlightingManager( ISearchResultModel searchResultModel, Func <MessageTextGetter> displayTextGetterSelector, Func <int> viewSizeSelector, IFiltersList highlightFilters, ISelectionManager selectionManager, IWordSelection wordSelection, IColorTheme theme, RegularExpressions.IRegexFactory regexFactory ) { var viewSizeQuantizedSelector = Selectors.Create( viewSizeSelector, viewSize => (1 + (viewSize / 16)) * 16 ); this.getHighlightingHandler = Selectors.Create( () => (highlightFilters?.FilteringEnabled, highlightFilters?.Items, highlightFilters?.FiltersVersion), displayTextGetterSelector, viewSizeQuantizedSelector, () => theme.HighlightingColors, (filtersData, displayTextGetter, viewSize, hlColors) => filtersData.FilteringEnabled == true ? new CachingHighlightingHandler(msg => GetHlHighlightingRanges(msg, filtersData.Items, displayTextGetter, hlColors), ViewSizeToCacheSize(viewSize)) : (IHighlightingHandler) new DummyHandler() ); this.getSearchResultHandler = Selectors.Create( () => searchResultModel?.SearchFiltersList, displayTextGetterSelector, viewSizeQuantizedSelector, (filters, displayTextGetter, viewSize) => filters != null ? new CachingHighlightingHandler(msg => GetSearchResultsHighlightingRanges(msg, filters, displayTextGetter), ViewSizeToCacheSize(viewSize)) : null ); this.getSelectionHandler = Selectors.Create( () => selectionManager.Selection, displayTextGetterSelector, viewSizeQuantizedSelector, (selection, displayTextGetter, viewSize) => MakeSelectionInplaceHighlightingHander(selection, displayTextGetter, wordSelection, ViewSizeToCacheSize(viewSize), regexFactory) ); }
public CorrelationManager( IManagerInternal postprocessingManager, Func <Solver.ISolver> solverFactory, ISynchronizationContext modelThreadSync, ILogSourcesManager logSourcesManager, IChangeNotification changeNotification, Telemetry.ITelemetryCollector telemetryCollector ) { this.postprocessingManager = postprocessingManager; this.solverFactory = solverFactory; this.modelThreadSync = modelThreadSync; this.logSourcesManager = logSourcesManager; this.changeNotification = changeNotification; this.telemetryCollector = telemetryCollector; logSourcesManager.OnLogSourceTimeOffsetChanged += (s, e) => { ++logSourceTimeOffsetRevision; changeNotification.Post(); }; this.getOutputs = Selectors.Create( () => postprocessingManager.LogSourcePostprocessors, outputs => ImmutableArray.CreateRange( outputs.Where(output => output.Postprocessor.Kind == PostprocessorKind.Correlator) ) ); this.getStateSummary = Selectors.Create( getOutputs, () => logConnectionIdToLastRunResult, () => lastRunSummary, () => logSourceTimeOffsetRevision, GetCorrelatorStateSummary ); }