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;
        }
Example #2
0
        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;
        }
Example #3
0
        /// <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);
        }
Example #6
0
        /// <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();
            }
        }