internal void Initialize( DiscussionSort discussionSort, DiscussionFilter displayFilter, DiscussionLayout discussionLayout, AsyncDiscussionLoader discussionLoader, AsyncDiscussionHelper discussionHelper, IEnumerable <ICommand> commands, Action <string> onFontSelected) { _discussionSort = discussionSort; setDiscussionSortStateInControls(_discussionSort.SortState); _displayFilter = displayFilter; setDiscussionFilterStateInControls(_displayFilter.FilterState); _discussionLayout = discussionLayout; setDiscussionLayoutStateInControls(); updateColumnWidthSizeMenuItemState(); _discussionLoader = discussionLoader; _discussionHelper = discussionHelper; addCustomActions(commands); addFontSizes(); _onFontSelected = onFontSelected; }
public DiscussionsForm( IGitCommandService git, User currentUser, MergeRequestKey mrk, IEnumerable <Discussion> discussions, string mergeRequestTitle, User mergeRequestAuthor, ColorScheme colorScheme, AsyncDiscussionLoader discussionLoader, AsyncDiscussionHelper discussionHelper, string webUrl, Shortcuts shortcuts, Func <ICommandCallback, IEnumerable <ICommand> > getCommands) { _mergeRequestKey = mrk; _mergeRequestTitle = mergeRequestTitle; _discussionLoader = discussionLoader; _discussionLoader.StatusChanged += onDiscussionLoaderStatusChanged; CommonControls.Tools.WinFormsHelpers.FixNonStandardDPIIssue(this, (float)Common.Constants.Constants.FontSizeChoices["Design"]); InitializeComponent(); applyFont(Program.Settings.MainWindowFontSizeName); applyTheme(Program.Settings.VisualThemeName); var discussionLayout = new DiscussionLayout( ConfigurationHelper.GetDiffContextPosition(Program.Settings), ConfigurationHelper.GetDiscussionColumnWidth(Program.Settings), Program.Settings.NeedShiftReplies); _discussionLayout = discussionLayout; _discussionLayout.DiffContextPositionChanged += updateSaveDefaultLayoutState; _discussionLayout.DiscussionColumnWidthChanged += updateSaveDefaultLayoutState; _discussionLayout.NeedShiftRepliesChanged += updateSaveDefaultLayoutState; updateSaveDefaultLayoutState(); Program.Settings.PropertyChanged += onSettingsPropertyChanged; var displayFilter = new DiscussionFilter(currentUser, mergeRequestAuthor, DiscussionFilterState.Default); var discussionSort = new DiscussionSort(DiscussionSortState.Default); // Includes making some boxes visible. This does not paint them because their parent (Form) is hidden so far. discussionPanel.Initialize(discussionSort, displayFilter, discussionLoader, discussions, shortcuts, git, colorScheme, mrk, mergeRequestAuthor, currentUser, discussionLayout); if (discussionPanel.DiscussionCount < 1) { throw new NoDiscussionsToShow(); } searchPanel.Initialize(discussionPanel); discussionMenu.Initialize(discussionSort, displayFilter, discussionLayout, discussionLoader, discussionHelper, getCommands(this), applyFont); linkLabelGitLabURL.Text = webUrl; toolTip.SetToolTip(linkLabelGitLabURL, webUrl); linkLabelGitLabURL.SetLinkLabelClicked(UrlHelper.OpenBrowser); Text = DefaultCaption; MainMenuStrip = discussionMenu.MenuStrip; }
/// <summary> /// Throws: /// ArgumentException /// </summary> internal DiscussionsForm(MergeRequestDescriptor mrd, string mrTitle, User mergeRequestAuthor, IGitRepository gitRepository, int diffContextDepth, ColorScheme colorScheme, List <Discussion> discussions, DiscussionManager manager, User currentUser, Func <MergeRequestDescriptor, Task> updateGitRepository) { _mergeRequestDescriptor = mrd; _mergeRequestTitle = mrTitle; _mergeRequestAuthor = mergeRequestAuthor; _gitRepository = gitRepository; _diffContextDepth = diffContextDepth; _colorScheme = colorScheme; _manager = manager; _updateGitRepository = updateGitRepository; _currentUser = currentUser; if (_currentUser.Id == 0) { throw new ArgumentException("Bad user Id"); } InitializeComponent(); DiscussionFilterState state = new DiscussionFilterState { ByCurrentUserOnly = false, ByAnswers = FilterByAnswers.Answered | FilterByAnswers.Unanswered, ByResolution = FilterByResolution.Resolved | FilterByResolution.NotResolved }; DisplayFilter = new DiscussionFilter(_currentUser, _mergeRequestAuthor, state); SystemFilter = new DiscussionFilter(_currentUser, _mergeRequestAuthor, state); FilterPanel = new DiscussionFilterPanel(DisplayFilter.Filter, () => { DisplayFilter.Filter = FilterPanel.Filter; updateLayout(null); }); ActionsPanel = new DiscussionActionsPanel(async() => await onRefresh()); Controls.Add(FilterPanel); Controls.Add(ActionsPanel); if (!renderDiscussions(discussions)) { throw new NoDiscussionsToShow(); } }
private IEnumerable <ReportedDiscussionNote> getReportedDiscussions(MergeRequestKey mrk) { DiscussionFilter discussionFilter = new DiscussionFilter( _currentUser, null, DiscussionFilterState.CurrentUserOnly); return(_getDiscussions(mrk) .Where(discussion => discussionFilter.DoesMatchFilter(discussion)) .Where(discussion => !discussion.Notes.First().System) .Select(discussion => { DiscussionNote firstNote = discussion.Notes.First(); Core.Matching.DiffPosition firstNotePosition = PositionConverter.Convert(firstNote.Position); return new ReportedDiscussionNote(firstNote.Id, discussion.Id, firstNotePosition, firstNote.Body, firstNote.Author.Name, firstNote.Created_At); })); }
internal void Initialize( DiscussionSort discussionSort, DiscussionFilter displayFilter, AsyncDiscussionLoader discussionLoader, IEnumerable <Discussion> discussions, Shortcuts shortcuts, IGitCommandService git, ColorScheme colorScheme, MergeRequestKey mergeRequestKey, User mergeRequestAuthor, User currentUser, DiscussionLayout discussionLayout) { _shortcuts = shortcuts; _git = git; _colorScheme = colorScheme; _mergeRequestKey = mergeRequestKey; _mergeRequestAuthor = mergeRequestAuthor; _currentUser = currentUser; _discussionSort = discussionSort; _discussionSort.SortStateChanged += onSortStateChanged; _displayFilter = displayFilter; _displayFilter.FilterStateChanged += onFilterChanged; _discussionLoader = discussionLoader; _discussionLoader.Loaded += onDiscussionsLoaded; _discussionLayout = discussionLayout; _discussionLayout.DiffContextPositionChanged += onDiffContextPositionChanged; _discussionLayout.DiscussionColumnWidthChanged += onDiscussionColumnWidthChanged; _discussionLayout.NeedShiftRepliesChanged += onNeedShiftRepliesChanged; apply(discussions); }
/// <summary> /// Throws: /// ArgumentException /// </summary> internal DiscussionsForm( DataCache dataCache, GitLabInstance gitLabInstance, IModificationListener modificationListener, IGitCommandService git, User currentUser, MergeRequestKey mrk, IEnumerable <Discussion> discussions, string mergeRequestTitle, User mergeRequestAuthor, int diffContextDepth, ColorScheme colorScheme, Func <MergeRequestKey, IEnumerable <Discussion>, Task> updateGit, Action onDiscussionModified) { _mergeRequestKey = mrk; _mergeRequestTitle = mergeRequestTitle; _mergeRequestAuthor = mergeRequestAuthor; _git = git; _diffContextDepth = diffContextDepth; _colorScheme = colorScheme; _dataCache = dataCache; _gitLabInstance = gitLabInstance; _modificationListener = modificationListener; _updateGit = updateGit; _onDiscussionModified = onDiscussionModified; _currentUser = currentUser; if (_currentUser.Id == 0) { throw new ArgumentException("Bad user Id"); } CommonControls.Tools.WinFormsHelpers.FixNonStandardDPIIssue(this, (float)Common.Constants.Constants.FontSizeChoices["Design"], 96); InitializeComponent(); CommonControls.Tools.WinFormsHelpers.LogScaleDimensions(this); DisplayFilter = new DiscussionFilter(_currentUser, _mergeRequestAuthor, DiscussionFilterState.Default); SystemFilter = new DiscussionFilter(_currentUser, _mergeRequestAuthor, DiscussionFilterState.AllExceptSystem); FilterPanel = new DiscussionFilterPanel(DisplayFilter.Filter, () => { DisplayFilter.Filter = FilterPanel.Filter; updateLayout(null, true, true); updateSearch(); }); ActionsPanel = new DiscussionActionsPanel(() => BeginInvoke(new Action(async() => await onRefresh()))); SearchPanel = new DiscussionSearchPanel( (query, forward) => { if (query.Text == String.Empty) { resetSearch(); } else if (TextSearch == null || !query.Equals(TextSearch.Query)) { startSearch(query, true); } else { MostRecentFocusedDiscussionControl?.Focus(); continueSearch(forward); } }); DiscussionSortState sortState = DiscussionSortState.Default; DisplaySort = new DiscussionSort(sortState); SortPanel = new DiscussionSortPanel(DisplaySort.SortState, () => { DisplaySort.SortState = SortPanel.SortState; updateLayout(null, true, true); updateSearch(); }); FontSelectionPanel = new DiscussionFontSelectionPanel(font => applyFont(font)); Controls.Add(FilterPanel); Controls.Add(ActionsPanel); Controls.Add(SearchPanel); Controls.Add(SortPanel); Controls.Add(FontSelectionPanel); applyFont(Program.Settings.MainWindowFontSizeName); applyTheme(Program.Settings.VisualThemeName); if (!renderDiscussions(discussions, false)) { throw new NoDiscussionsToShow(); } }