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; }
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); }
private void showDiscussionForm(DataCache dataCache, ILocalCommitStorage storage, User currentUser, MergeRequestKey mrk, IEnumerable <Discussion> discussions, string title, User author, string webUrl, string customActionFileName) { if (currentUser == null || discussions == null || author == null || currentUser.Id == 0) { return; } bool doesMatchTag(object tag) => tag != null && ((MergeRequestKey)(tag)).Equals(mrk); Form formExisting = WinFormsHelpers.FindFormByTag("DiscussionsForm", doesMatchTag); if (formExisting is DiscussionsForm existingDiscussionsForm) { existingDiscussionsForm.Restore(); Trace.TraceInformation(String.Format("[MainForm] Activated an existing Discussions view for MR {0}", mrk.IId)); return; } addOperationRecord("Rendering discussion contexts has started"); labelOperationStatus.Refresh(); DiscussionsForm form; try { IAsyncGitCommandService git = storage?.Git; AsyncDiscussionLoader discussionLoader = new AsyncDiscussionLoader(mrk, dataCache, async(key, discussionsUpdated) => { if (storage != null && storage.Updater != null) { try { await storage.Updater.StartUpdate(new DiscussionBasedContextProvider(discussionsUpdated), status => onStorageUpdateProgressChange(status, mrk), () => onStorageUpdateStateChange()); } catch (LocalCommitStorageUpdaterException ex) { ExceptionHandlers.Handle("Cannot update a storage on refreshing discussions", ex); } } else { Trace.TraceInformation("[MainForm] User tried to refresh Discussions without a storage"); MessageBox.Show("Cannot update a storage, some context code snippets may be missing. ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }, this); AsyncDiscussionHelper discussionHelper = new AsyncDiscussionHelper(mrk, title, currentUser, _shortcuts); IEnumerable <ICommand> getCommands(ICommandCallback callback) => loadCustomCommands(customActionFileName, callback); DiscussionsForm discussionsForm = new DiscussionsForm( git, currentUser, mrk, discussions, title, author, _colorScheme, discussionLoader, discussionHelper, webUrl, _shortcuts, getCommands) { Tag = mrk }; form = discussionsForm; } catch (NoDiscussionsToShow) { MessageBox.Show("No discussions to show.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); Trace.TraceInformation(String.Format("[MainForm] No discussions to show for MR IID {0}", mrk.IId)); addOperationRecord("No discussions to show"); return; } addOperationRecord("Opening Discussions view has started"); labelOperationStatus.Refresh(); form.Show(); Trace.TraceInformation(String.Format("[MainForm] Opened Discussions for MR IId {0} (at {1})", mrk.IId, (storage?.Path ?? "null"))); addOperationRecord("Discussions view has opened"); ensureMergeRequestInRecentDataCache(mrk); }