Search in sources :

Example 11 with ISelectionListener

use of org.eclipse.ui.ISelectionListener in project hale by halestudio.

the class TaskTreeView method createPartControl.

/**
 * @see WorkbenchPart#createPartControl(Composite)
 */
@Override
public void createPartControl(Composite parent) {
    Composite page = new Composite(parent, SWT.NONE);
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    page.setLayoutData(data);
    // tree column layout
    TreeColumnLayout layout = new TreeColumnLayout();
    page.setLayout(layout);
    // tree viewer
    tree = new TreeViewer(page, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
    tree.setContentProvider(new CollectionTreeNodeContentProvider());
    tree.setUseHashlookup(true);
    tree.getTree().setHeaderVisible(true);
    tree.getTree().setLinesVisible(true);
    tree.setComparator(new TaskTreeComparator());
    taskService = HaleUI.getServiceProvider().getService(TaskService.class);
    // columns
    IColorProvider colorProvider = new TaskColorProvider(Display.getCurrent());
    // title/description
    TreeViewerColumn description = new TreeViewerColumn(tree, SWT.LEFT);
    description.getColumn().setText(Messages.TaskTreeView_TitleDescriptionText);
    description.getColumn().setToolTipText(Messages.TaskTreeView_description_tooltip);
    TreeColumnViewerLabelProvider descriptionLabelProvider = new TreeColumnViewerLabelProvider(new TaskDescriptionLabelProvider(0));
    descriptionLabelProvider.setProviders(colorProvider);
    description.setLabelProvider(descriptionLabelProvider);
    description.setEditingSupport(new ReadOnlyEditingSupport(tree, descriptionLabelProvider));
    layout.setColumnData(description.getColumn(), new ColumnWeightData(4));
    // number of tasks
    TreeViewerColumn number = new TreeViewerColumn(tree, SWT.RIGHT);
    // $NON-NLS-1$
    number.getColumn().setText("#");
    number.getColumn().setToolTipText(Messages.TaskTreeView_NumberText);
    TreeColumnViewerLabelProvider numberLabelProvider = new TreeColumnViewerLabelProvider(new TaskCountLabelProvider(0));
    numberLabelProvider.setProviders(colorProvider);
    number.setLabelProvider(numberLabelProvider);
    layout.setColumnData(number.getColumn(), new ColumnWeightData(0, 48));
    // user data: status
    TreeViewerColumn status = new TreeViewerColumn(tree, SWT.LEFT);
    status.getColumn().setText(Messages.TaskTreeView_StatusText);
    TreeColumnViewerLabelProvider statusLabelProvider = new TreeColumnViewerLabelProvider(new TaskStatusLabelProvider(0));
    statusLabelProvider.setProviders(colorProvider);
    status.setLabelProvider(statusLabelProvider);
    layout.setColumnData(status.getColumn(), new ColumnWeightData(1));
    status.setEditingSupport(new TaskStatusEditingSupport(tree, taskService));
    // user data: comment
    // TreeViewerColumn comment = new TreeViewerColumn(tree, SWT.LEFT);
    // comment.getColumn().setText(Messages.TaskTreeView_CommentText);
    // TreeColumnViewerLabelProvider commentLabelProvider = new TreeColumnViewerLabelProvider(
    // new TaskCommentLabelProvider(0));
    // commentLabelProvider.setProviders(colorProvider);
    // comment.setLabelProvider(commentLabelProvider);
    // layout.setColumnData(comment.getColumn(), new ColumnWeightData(4));
    // comment.setEditingSupport(new TaskCommentEditingSupport(tree, taskService));
    // listeners
    taskService.addListener(taskListener = new TaskServiceAdapter() {

        @Override
        public void tasksRemoved(final Iterable<Task<?>> tasks) {
            if (Display.getCurrent() != null) {
                removeTasks(tasks);
            } else {
                final Display display = PlatformUI.getWorkbench().getDisplay();
                display.syncExec(new Runnable() {

                    @Override
                    public void run() {
                        removeTasks(tasks);
                    }
                });
            }
        }

        @Override
        public void tasksAdded(final Iterable<Task<?>> tasks) {
            if (Display.getCurrent() != null) {
                addTasks(tasks);
            } else {
                final Display display = PlatformUI.getWorkbench().getDisplay();
                display.syncExec(new Runnable() {

                    @Override
                    public void run() {
                        addTasks(tasks);
                    }
                });
            }
        }

        @Override
        public void taskUserDataChanged(final ResolvedTask<?> task) {
            if (Display.getCurrent() != null) {
                updateNode(task);
            } else {
                final Display display = PlatformUI.getWorkbench().getDisplay();
                display.syncExec(new Runnable() {

                    @Override
                    public void run() {
                        updateNode(task);
                    }
                });
            }
        }
    });
    getSite().getWorkbenchWindow().getSelectionService().addPostSelectionListener(selectionListener = new ISelectionListener() {

        @Override
        public void selectionChanged(IWorkbenchPart part, ISelection selection) {
            if (!(part instanceof PropertiesViewPart)) {
                // selections
                return;
            }
            if (part != TaskTreeView.this) {
                update(selection);
            }
        }
    });
    createInput();
    configureActions();
    // interaction
    tree.addDoubleClickListener(new IDoubleClickListener() {

        @Override
        public void doubleClick(DoubleClickEvent event) {
            ISelection selection = event.getSelection();
            if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
                Object selected = ((IStructuredSelection) selection).getFirstElement();
                if (selected instanceof TreeNode) {
                    // determine value
                    Object tmp = ((TreeNode) selected).getValue();
                    Object value;
                    if (tmp.getClass().isArray()) {
                        value = ((Object[]) tmp)[0];
                    } else {
                        value = tmp;
                    }
                    if (value instanceof Task) {
                        // node is task node
                        Task<?> task = (Task<?>) value;
                        onDoubleClick(task.getMainContext());
                    } else if (value instanceof Cell) {
                        onDoubleClick(value);
                    }
                }
            }
        }
    });
}
Also used : ColumnWeightData(org.eclipse.jface.viewers.ColumnWeightData) ResolvedTask(eu.esdihumboldt.hale.common.tasks.ResolvedTask) Task(eu.esdihumboldt.hale.common.tasks.Task) TreeColumnLayout(org.eclipse.jface.layout.TreeColumnLayout) CollectionTreeNodeContentProvider(eu.esdihumboldt.hale.ui.util.tree.CollectionTreeNodeContentProvider) TreeViewer(org.eclipse.jface.viewers.TreeViewer) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) ISelectionListener(org.eclipse.ui.ISelectionListener) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) ResolvedTask(eu.esdihumboldt.hale.common.tasks.ResolvedTask) DefaultTreeNode(eu.esdihumboldt.hale.ui.util.tree.DefaultTreeNode) MapTreeNode(eu.esdihumboldt.hale.ui.util.tree.MapTreeNode) TreeNode(org.eclipse.jface.viewers.TreeNode) SortedMapTreeNode(eu.esdihumboldt.hale.ui.util.tree.SortedMapTreeNode) IDoubleClickListener(org.eclipse.jface.viewers.IDoubleClickListener) ISelection(org.eclipse.jface.viewers.ISelection) PropertiesViewPart(eu.esdihumboldt.hale.ui.views.properties.PropertiesViewPart) Cell(eu.esdihumboldt.hale.common.align.model.Cell) TreeColumnViewerLabelProvider(org.eclipse.jface.viewers.TreeColumnViewerLabelProvider) Composite(org.eclipse.swt.widgets.Composite) TaskService(eu.esdihumboldt.hale.common.tasks.TaskService) DoubleClickEvent(org.eclipse.jface.viewers.DoubleClickEvent) TreeViewerColumn(org.eclipse.jface.viewers.TreeViewerColumn) IColorProvider(org.eclipse.jface.viewers.IColorProvider) TaskServiceAdapter(eu.esdihumboldt.hale.ui.service.tasks.TaskServiceAdapter) ReadOnlyEditingSupport(eu.esdihumboldt.hale.ui.util.viewer.ReadOnlyEditingSupport) GridData(org.eclipse.swt.layout.GridData) Display(org.eclipse.swt.widgets.Display)

Example 12 with ISelectionListener

use of org.eclipse.ui.ISelectionListener in project hale by halestudio.

the class TypeHierarchyView method createViewControl.

/**
 * @see eu.esdihumboldt.hale.ui.views.properties.PropertiesViewPart#createViewControl(org.eclipse.swt.widgets.Composite)
 */
@Override
public void createViewControl(Composite parent) {
    viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new TypeHierarchyContentProvider());
    viewer.setLabelProvider(new TypeHierarchyLabelProvider(viewer));
    viewer.setComparator(new DefinitionComparator());
    contributeToActionBars();
    viewer.addDoubleClickListener(new IDoubleClickListener() {

        @Override
        public void doubleClick(DoubleClickEvent event) {
            update(event.getSelection());
        }
    });
    getSite().getWorkbenchWindow().getSelectionService().addPostSelectionListener(selectionListener = new ISelectionListener() {

        @Override
        public void selectionChanged(IWorkbenchPart part, ISelection selection) {
            if (!(part instanceof PropertiesViewPart)) {
                // selections
                return;
            }
            if (part != TypeHierarchyView.this) {
                update(selection);
            }
        }
    });
    getSite().setSelectionProvider(selectionProvider = new SelectionFilter(viewer) {

        @Override
        protected ISelection filter(ISelection selection) {
            if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
                List<Object> elements = new ArrayList<Object>();
                for (Object element : ((IStructuredSelection) selection).toList()) {
                    if (element instanceof ParentPath) {
                        // add parent path head instead of parent path
                        elements.add(((ParentPath) element).getHead());
                    } else {
                        elements.add(element);
                    }
                }
                return new StructuredSelection(elements);
            } else {
                return selection;
            }
        }
    });
    new ViewerMenu(getSite(), viewer);
}
Also used : TreeViewer(org.eclipse.jface.viewers.TreeViewer) DefinitionComparator(eu.esdihumboldt.hale.ui.common.definition.viewer.DefinitionComparator) ArrayList(java.util.ArrayList) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) DoubleClickEvent(org.eclipse.jface.viewers.DoubleClickEvent) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) SelectionFilter(eu.esdihumboldt.hale.ui.util.selection.SelectionFilter) ISelectionListener(org.eclipse.ui.ISelectionListener) ViewerMenu(eu.esdihumboldt.hale.ui.util.viewer.ViewerMenu) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) ParentPath(eu.esdihumboldt.hale.ui.views.typehierarchy.TypeHierarchyContentProvider.ParentPath) IDoubleClickListener(org.eclipse.jface.viewers.IDoubleClickListener) ISelection(org.eclipse.jface.viewers.ISelection) PropertiesViewPart(eu.esdihumboldt.hale.ui.views.properties.PropertiesViewPart)

Example 13 with ISelectionListener

use of org.eclipse.ui.ISelectionListener in project hale by halestudio.

the class ExtendedMapKit method setMapTool.

/**
 * @see BasicMapKit#setMapTool(MapTool)
 */
@Override
public void setMapTool(MapTool tool) {
    ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
    MapTool oldTool = getMapTool();
    if (oldTool != null && oldTool instanceof ISelectionListener) {
        service.removeSelectionListener((ISelectionListener) oldTool);
    }
    super.setMapTool(tool);
    if (tool instanceof ISelectionListener) {
        service.addSelectionListener((ISelectionListener) tool);
    }
    // set the tool as selection provider
    if (tool instanceof ISelectionProvider) {
        view.setSelectionProvider((ISelectionProvider) tool);
    } else {
        view.setSelectionProvider(null);
    }
}
Also used : ISelectionProvider(org.eclipse.jface.viewers.ISelectionProvider) ISelectionService(org.eclipse.ui.ISelectionService) MapTool(de.fhg.igd.mapviewer.MapTool) ISelectionListener(org.eclipse.ui.ISelectionListener)

Example 14 with ISelectionListener

use of org.eclipse.ui.ISelectionListener in project egit by eclipse.

the class StagingView method createPartControl.

@Override
public void createPartControl(final Composite parent) {
    GridLayoutFactory.fillDefaults().applyTo(parent);
    toolkit = new FormToolkit(parent.getDisplay());
    parent.addDisposeListener(new DisposeListener() {

        @Override
        public void widgetDisposed(DisposeEvent e) {
            if (commitMessageComponent.isAmending() || userEnteredCommitMessage())
                saveCommitMessageComponentState();
            else
                deleteCommitMessageComponentState();
            resources.dispose();
            toolkit.dispose();
        }
    });
    form = toolkit.createForm(parent);
    parent.addControlListener(new ControlListener() {

        private int[] defaultWeights = { 1, 1 };

        @Override
        public void controlResized(ControlEvent e) {
            org.eclipse.swt.graphics.Rectangle b = parent.getBounds();
            int oldOrientation = mainSashForm.getOrientation();
            if ((oldOrientation == SWT.HORIZONTAL) && (b.height > b.width)) {
                mainSashForm.setOrientation(SWT.VERTICAL);
                mainSashForm.setWeights(defaultWeights);
            } else if ((oldOrientation == SWT.VERTICAL) && (b.height <= b.width)) {
                mainSashForm.setOrientation(SWT.HORIZONTAL);
                mainSashForm.setWeights(defaultWeights);
            }
        }

        @Override
        public void controlMoved(ControlEvent e) {
        // ignore
        }
    });
    form.setImage(getImage(UIIcons.REPOSITORY));
    form.setText(UIText.StagingView_NoSelectionTitle);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(form);
    toolkit.decorateFormHeading(form);
    GridLayoutFactory.swtDefaults().applyTo(form.getBody());
    mainSashForm = new SashForm(form.getBody(), SWT.HORIZONTAL);
    saveSashFormWeightsOnDisposal(mainSashForm, HORIZONTAL_SASH_FORM_WEIGHT);
    toolkit.adapt(mainSashForm, true, true);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(mainSashForm);
    stagingSashForm = new SashForm(mainSashForm, getStagingFormOrientation());
    saveSashFormWeightsOnDisposal(stagingSashForm, STAGING_SASH_FORM_WEIGHT);
    toolkit.adapt(stagingSashForm, true, true);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(stagingSashForm);
    unstageAction = new Action(UIText.StagingView_UnstageItemMenuLabel, UIIcons.UNSTAGE) {

        @Override
        public void run() {
            unstage((IStructuredSelection) stagedViewer.getSelection());
        }
    };
    unstageAction.setToolTipText(UIText.StagingView_UnstageItemTooltip);
    stageAction = new Action(UIText.StagingView_StageItemMenuLabel, UIIcons.ELCL16_ADD) {

        @Override
        public void run() {
            stage((IStructuredSelection) unstagedViewer.getSelection());
        }
    };
    stageAction.setToolTipText(UIText.StagingView_StageItemTooltip);
    unstageAction.setEnabled(false);
    stageAction.setEnabled(false);
    unstageAllAction = new Action(UIText.StagingView_UnstageAllItemMenuLabel, UIIcons.UNSTAGE_ALL) {

        @Override
        public void run() {
            stagedViewer.getTree().selectAll();
            unstage((IStructuredSelection) stagedViewer.getSelection());
        }
    };
    unstageAllAction.setToolTipText(UIText.StagingView_UnstageAllItemTooltip);
    stageAllAction = new Action(UIText.StagingView_StageAllItemMenuLabel, UIIcons.ELCL16_ADD_ALL) {

        @Override
        public void run() {
            unstagedViewer.getTree().selectAll();
            stage((IStructuredSelection) unstagedViewer.getSelection());
        }
    };
    stageAllAction.setToolTipText(UIText.StagingView_StageAllItemTooltip);
    unstageAllAction.setEnabled(false);
    stageAllAction.setEnabled(false);
    unstagedSection = toolkit.createSection(stagingSashForm, ExpandableComposite.SHORT_TITLE_BAR);
    unstagedSection.clientVerticalSpacing = 0;
    unstagedSection.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    createUnstagedToolBarComposite();
    Composite unstagedComposite = toolkit.createComposite(unstagedSection);
    toolkit.paintBordersFor(unstagedComposite);
    unstagedSection.setClient(unstagedComposite);
    GridLayoutFactory.fillDefaults().applyTo(unstagedComposite);
    unstagedViewer = createViewer(unstagedComposite, true, selection -> unstage(selection), stageAction);
    unstagedViewer.addSelectionChangedListener(event -> {
        boolean hasSelection = !event.getSelection().isEmpty();
        if (hasSelection != stageAction.isEnabled()) {
            stageAction.setEnabled(hasSelection);
            unstagedToolBarManager.update(true);
        }
    });
    Composite rebaseAndCommitComposite = toolkit.createComposite(mainSashForm);
    rebaseAndCommitComposite.setLayout(GridLayoutFactory.fillDefaults().create());
    rebaseSection = toolkit.createSection(rebaseAndCommitComposite, ExpandableComposite.SHORT_TITLE_BAR);
    rebaseSection.clientVerticalSpacing = 0;
    rebaseSection.setText(UIText.StagingView_RebaseLabel);
    Composite rebaseComposite = toolkit.createComposite(rebaseSection);
    toolkit.paintBordersFor(rebaseComposite);
    rebaseSection.setClient(rebaseComposite);
    rebaseSection.setLayoutData(GridDataFactory.fillDefaults().create());
    rebaseComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(true).create());
    GridDataFactory buttonGridData = GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER);
    this.rebaseAbortButton = toolkit.createButton(rebaseComposite, UIText.StagingView_RebaseAbort, SWT.PUSH);
    rebaseAbortButton.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            rebaseAbort();
        }
    });
    rebaseAbortButton.setImage(getImage(UIIcons.REBASE_ABORT));
    buttonGridData.applyTo(rebaseAbortButton);
    this.rebaseSkipButton = toolkit.createButton(rebaseComposite, UIText.StagingView_RebaseSkip, SWT.PUSH);
    rebaseSkipButton.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            rebaseSkip();
        }
    });
    rebaseSkipButton.setImage(getImage(UIIcons.REBASE_SKIP));
    buttonGridData.applyTo(rebaseSkipButton);
    this.rebaseContinueButton = toolkit.createButton(rebaseComposite, UIText.StagingView_RebaseContinue, SWT.PUSH);
    rebaseContinueButton.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            rebaseContinue();
        }
    });
    rebaseContinueButton.setImage(getImage(UIIcons.REBASE_CONTINUE));
    buttonGridData.applyTo(rebaseContinueButton);
    showControl(rebaseSection, false);
    commitMessageSection = toolkit.createSection(rebaseAndCommitComposite, ExpandableComposite.SHORT_TITLE_BAR);
    commitMessageSection.clientVerticalSpacing = 0;
    commitMessageSection.setText(UIText.StagingView_CommitMessage);
    commitMessageSection.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    Composite commitMessageToolbarComposite = toolkit.createComposite(commitMessageSection);
    commitMessageToolbarComposite.setBackground(null);
    commitMessageToolbarComposite.setLayout(createRowLayoutWithoutMargin());
    commitMessageSection.setTextClient(commitMessageToolbarComposite);
    ToolBarManager commitMessageToolBarManager = new ToolBarManager(SWT.FLAT | SWT.HORIZONTAL);
    amendPreviousCommitAction = new Action(UIText.StagingView_Ammend_Previous_Commit, IAction.AS_CHECK_BOX) {

        @Override
        public void run() {
            commitMessageComponent.setAmendingButtonSelection(isChecked());
            updateMessage();
        }
    };
    amendPreviousCommitAction.setImageDescriptor(UIIcons.AMEND_COMMIT);
    commitMessageToolBarManager.add(amendPreviousCommitAction);
    signedOffByAction = new Action(UIText.StagingView_Add_Signed_Off_By, IAction.AS_CHECK_BOX) {

        @Override
        public void run() {
            commitMessageComponent.setSignedOffButtonSelection(isChecked());
        }
    };
    signedOffByAction.setImageDescriptor(UIIcons.SIGNED_OFF);
    commitMessageToolBarManager.add(signedOffByAction);
    addChangeIdAction = new Action(UIText.StagingView_Add_Change_ID, IAction.AS_CHECK_BOX) {

        @Override
        public void run() {
            commitMessageComponent.setChangeIdButtonSelection(isChecked());
        }
    };
    addChangeIdAction.setImageDescriptor(UIIcons.GERRIT);
    commitMessageToolBarManager.add(addChangeIdAction);
    commitMessageToolBarManager.createControl(commitMessageToolbarComposite);
    Composite commitMessageComposite = toolkit.createComposite(commitMessageSection);
    commitMessageSection.setClient(commitMessageComposite);
    GridLayoutFactory.fillDefaults().numColumns(1).applyTo(commitMessageComposite);
    warningLabel = new ToggleableWarningLabel(commitMessageComposite, SWT.NONE);
    GridDataFactory.fillDefaults().grab(true, false).exclude(true).applyTo(warningLabel);
    Composite commitMessageTextComposite = toolkit.createComposite(commitMessageComposite);
    toolkit.paintBordersFor(commitMessageTextComposite);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(commitMessageTextComposite);
    GridLayoutFactory.fillDefaults().numColumns(1).extendedMargins(2, 2, 2, 2).applyTo(commitMessageTextComposite);
    final CommitProposalProcessor commitProposalProcessor = new CommitProposalProcessor() {

        @Override
        protected Collection<String> computeFileNameProposals() {
            return getStagedFileNames();
        }

        @Override
        protected Collection<String> computeMessageProposals() {
            return CommitMessageHistory.getCommitHistory();
        }
    };
    commitMessageText = new CommitMessageArea(commitMessageTextComposite, EMPTY_STRING, SWT.NONE) {

        @Override
        protected CommitProposalProcessor getCommitProposalProcessor() {
            return commitProposalProcessor;
        }

        @Override
        protected IHandlerService getHandlerService() {
            return CommonUtils.getService(getSite(), IHandlerService.class);
        }
    };
    commitMessageText.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(commitMessageText);
    UIUtils.addBulbDecorator(commitMessageText.getTextWidget(), UIText.CommitDialog_ContentAssist);
    Composite composite = toolkit.createComposite(commitMessageComposite);
    toolkit.paintBordersFor(composite);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(composite);
    GridLayoutFactory.swtDefaults().numColumns(2).applyTo(composite);
    toolkit.createLabel(composite, UIText.StagingView_Author).setForeground(toolkit.getColors().getColor(IFormColors.TB_TOGGLE));
    authorText = toolkit.createText(composite, null);
    authorText.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
    authorText.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
    toolkit.createLabel(composite, UIText.StagingView_Committer).setForeground(toolkit.getColors().getColor(IFormColors.TB_TOGGLE));
    committerText = toolkit.createText(composite, null);
    committerText.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
    committerText.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
    Composite buttonsContainer = toolkit.createComposite(composite);
    GridDataFactory.fillDefaults().grab(true, false).span(2, 1).indent(0, 8).applyTo(buttonsContainer);
    GridLayoutFactory.fillDefaults().numColumns(2).applyTo(buttonsContainer);
    ignoreErrors = toolkit.createButton(buttonsContainer, UIText.StagingView_IgnoreErrors, SWT.CHECK);
    ignoreErrors.setSelection(false);
    ignoreErrors.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            updateMessage();
            updateCommitButtons();
        }
    });
    getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() {

        @Override
        public void propertyChange(PropertyChangeEvent event) {
            if (isDisposed()) {
                getPreferenceStore().removePropertyChangeListener(this);
                return;
            }
            asyncExec(() -> {
                updateIgnoreErrorsButtonVisibility();
                updateMessage();
                updateCommitButtons();
            });
        }
    });
    GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.BEGINNING).grab(true, true).applyTo(ignoreErrors);
    updateIgnoreErrorsButtonVisibility();
    // $NON-NLS-1$
    Label filler = toolkit.createLabel(buttonsContainer, "");
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(filler);
    Composite commitButtonsContainer = toolkit.createComposite(buttonsContainer);
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(commitButtonsContainer);
    GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(true).applyTo(commitButtonsContainer);
    this.commitAndPushButton = toolkit.createButton(commitButtonsContainer, UIText.StagingView_CommitAndPush, SWT.PUSH);
    commitAndPushButton.setImage(getImage(UIIcons.PUSH));
    commitAndPushButton.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            commit(true);
        }
    });
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(commitAndPushButton);
    this.commitButton = toolkit.createButton(commitButtonsContainer, UIText.StagingView_Commit, SWT.PUSH);
    commitButton.setImage(getImage(UIIcons.COMMIT));
    commitButton.setText(UIText.StagingView_Commit);
    commitButton.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            commit(false);
        }
    });
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(commitButton);
    stagedSection = toolkit.createSection(stagingSashForm, ExpandableComposite.SHORT_TITLE_BAR);
    stagedSection.clientVerticalSpacing = 0;
    createStagedToolBarComposite();
    Composite stagedComposite = toolkit.createComposite(stagedSection);
    toolkit.paintBordersFor(stagedComposite);
    stagedSection.setClient(stagedComposite);
    GridLayoutFactory.fillDefaults().applyTo(stagedComposite);
    stagedViewer = createViewer(stagedComposite, false, selection -> stage(selection), unstageAction);
    stagedViewer.getLabelProvider().addListener(event -> {
        updateMessage();
        updateCommitButtons();
    });
    stagedViewer.addSelectionChangedListener(event -> {
        boolean hasSelection = !event.getSelection().isEmpty();
        if (hasSelection != unstageAction.isEnabled()) {
            unstageAction.setEnabled(hasSelection);
            stagedToolBarManager.update(true);
        }
    });
    selectionChangedListener = new ISelectionListener() {

        @Override
        public void selectionChanged(IWorkbenchPart part, ISelection selection) {
            if (part == getSite().getPart()) {
                return;
            }
            // don't accept text selection, only structural one
            if (selection instanceof StructuredSelection) {
                reactOnSelection((StructuredSelection) selection);
            }
        }
    };
    partListener = new PartListener();
    IPreferenceStore preferenceStore = getPreferenceStore();
    if (preferenceStore.contains(UIPreferences.STAGING_VIEW_SYNC_SELECTION))
        reactOnSelection = preferenceStore.getBoolean(UIPreferences.STAGING_VIEW_SYNC_SELECTION);
    else
        preferenceStore.setDefault(UIPreferences.STAGING_VIEW_SYNC_SELECTION, true);
    preferenceStore.addPropertyChangeListener(uiPrefsListener);
    InstanceScope.INSTANCE.getNode(org.eclipse.egit.core.Activator.getPluginId()).addPreferenceChangeListener(prefListener);
    updateSectionText();
    stagedSection.setToolTipText(UIText.StagingView_StagedChangesTooltip);
    unstagedSection.setToolTipText(UIText.StagingView_UnstagedChangesTooltip);
    updateToolbar();
    enableCommitWidgets(false);
    refreshAction.setEnabled(false);
    createPopupMenu(unstagedViewer);
    createPopupMenu(stagedViewer);
    final ICommitMessageComponentNotifications listener = new ICommitMessageComponentNotifications() {

        @Override
        public void updateSignedOffToggleSelection(boolean selection) {
            signedOffByAction.setChecked(selection);
        }

        @Override
        public void updateChangeIdToggleSelection(boolean selection) {
            addChangeIdAction.setChecked(selection);
            commitAndPushButton.setImage(getImage(selection ? UIIcons.GERRIT : UIIcons.PUSH));
        }

        @Override
        public void statusUpdated() {
            updateMessage();
        }
    };
    commitMessageComponent = new CommitMessageComponent(listener);
    commitMessageComponent.attachControls(commitMessageText, authorText, committerText);
    // allow to commit with ctrl-enter
    commitMessageText.getTextWidget().addVerifyKeyListener(new VerifyKeyListener() {

        @Override
        public void verifyKey(VerifyEvent event) {
            if (UIUtils.isSubmitKeyEvent(event)) {
                event.doit = false;
                commit(false);
            }
        }
    });
    commitMessageText.getTextWidget().addFocusListener(new FocusListener() {

        @Override
        public void focusGained(FocusEvent e) {
            // Ctrl+Enter shortcut only works when the focus is on the commit message text
            String commitButtonTooltip = MessageFormat.format(UIText.StagingView_CommitToolTip, UIUtils.SUBMIT_KEY_STROKE.format());
            commitButton.setToolTipText(commitButtonTooltip);
        }

        @Override
        public void focusLost(FocusEvent e) {
            commitButton.setToolTipText(null);
        }
    });
    // react on selection changes
    IWorkbenchPartSite site = getSite();
    ISelectionService srv = CommonUtils.getService(site, ISelectionService.class);
    srv.addPostSelectionListener(selectionChangedListener);
    CommonUtils.getService(site, IPartService.class).addPartListener(partListener);
    // Use current selection to populate staging view
    UIUtils.notifySelectionChangedWithCurrentSelection(selectionChangedListener, site);
    site.setSelectionProvider(new RepositorySelectionProvider(new MultiViewerSelectionProvider(unstagedViewer, stagedViewer), () -> realRepository));
    ViewerFilter filter = new ViewerFilter() {

        @Override
        public boolean select(Viewer viewer, Object parentElement, Object element) {
            StagingViewContentProvider contentProvider = getContentProvider((TreeViewer) viewer);
            if (element instanceof StagingEntry)
                return contentProvider.isInFilter((StagingEntry) element);
            else if (element instanceof StagingFolderEntry)
                return contentProvider.hasVisibleChildren((StagingFolderEntry) element);
            return true;
        }
    };
    unstagedViewer.addFilter(filter);
    stagedViewer.addFilter(filter);
    restoreSashFormWeights();
    reactOnInitialSelection();
    IWorkbenchSiteProgressService service = CommonUtils.getService(getSite(), IWorkbenchSiteProgressService.class);
    if (service != null && reactOnSelection)
        // If we are linked, each time IndexDiffUpdateJob starts, indicate
        // that the view is busy (e.g. reload() will trigger this job in
        // background!).
        service.showBusyForFamily(org.eclipse.egit.core.JobFamilies.INDEX_DIFF_CACHE_UPDATE);
}
Also used : SashForm(org.eclipse.swt.custom.SashForm) IWorkbenchPartSite(org.eclipse.ui.IWorkbenchPartSite) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) RepositoryState(org.eclipse.jgit.lib.RepositoryState) DiffViewer(org.eclipse.egit.ui.internal.commit.DiffViewer) Point(org.eclipse.swt.graphics.Point) Clipboard(org.eclipse.swt.dnd.Clipboard) DropTargetEvent(org.eclipse.swt.dnd.DropTargetEvent) PropertyChangeEvent(org.eclipse.jface.util.PropertyChangeEvent) Composite(org.eclipse.swt.widgets.Composite) Map(java.util.Map) ISelectionProvider(org.eclipse.jface.viewers.ISelectionProvider) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) Cursor(org.eclipse.swt.graphics.Cursor) IEditorPart(org.eclipse.ui.IEditorPart) EnumSet(java.util.EnumSet) Nullable(org.eclipse.jgit.annotations.Nullable) AbortRebaseCommand(org.eclipse.egit.ui.internal.commands.shared.AbortRebaseCommand) JobFamilies(org.eclipse.egit.ui.JobFamilies) GitAPIException(org.eclipse.jgit.api.errors.GitAPIException) IEditorInput(org.eclipse.ui.IEditorInput) PlatformUI(org.eclipse.ui.PlatformUI) Constants(org.eclipse.jgit.lib.Constants) Transfer(org.eclipse.swt.dnd.Transfer) ILabelProvider(org.eclipse.jface.viewers.ILabelProvider) Window(org.eclipse.jface.window.Window) InstanceScope(org.eclipse.core.runtime.preferences.InstanceScope) Path(org.eclipse.core.runtime.Path) DragSourceAdapter(org.eclipse.swt.dnd.DragSourceAdapter) ResourcesPlugin(org.eclipse.core.resources.ResourcesPlugin) RevCommit(org.eclipse.jgit.revwalk.RevCommit) ControlListener(org.eclipse.swt.events.ControlListener) IFileEditorInput(org.eclipse.ui.IFileEditorInput) LinkedHashMap(java.util.LinkedHashMap) TreeExpansionEvent(org.eclipse.jface.viewers.TreeExpansionEvent) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) LaunchFinder(org.eclipse.egit.ui.internal.branch.LaunchFinder) CommitMessageArea(org.eclipse.egit.ui.internal.dialogs.CommitMessageArea) TextTransfer(org.eclipse.swt.dnd.TextTransfer) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) ILabelDecorator(org.eclipse.jface.viewers.ILabelDecorator) Section(org.eclipse.ui.forms.widgets.Section) ControlContribution(org.eclipse.jface.action.ControlContribution) IPreferenceChangeListener(org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener) IMemento(org.eclipse.ui.IMemento) GridDataFactory(org.eclipse.jface.layout.GridDataFactory) IBaseLabelProvider(org.eclipse.jface.viewers.IBaseLabelProvider) IActionBars(org.eclipse.ui.IActionBars) ImageDescriptor(org.eclipse.jface.resource.ImageDescriptor) Form(org.eclipse.ui.forms.widgets.Form) ICommitMessageComponentNotifications(org.eclipse.egit.ui.internal.dialogs.ICommitMessageComponentNotifications) NoFilepatternException(org.eclipse.jgit.api.errors.NoFilepatternException) UntrackOperation(org.eclipse.egit.core.op.UntrackOperation) ModifyListener(org.eclipse.swt.events.ModifyListener) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) DisposeEvent(org.eclipse.swt.events.DisposeEvent) IProblemDecoratable(org.eclipse.egit.ui.internal.decorators.IProblemDecoratable) PushMode(org.eclipse.egit.ui.internal.push.PushMode) DisposeListener(org.eclipse.swt.events.DisposeListener) MultiViewerSelectionProvider(org.eclipse.egit.ui.internal.selection.MultiViewerSelectionProvider) IAction(org.eclipse.jface.action.IAction) IToolBarManager(org.eclipse.jface.action.IToolBarManager) ILaunchConfiguration(org.eclipse.debug.core.ILaunchConfiguration) AddCommand(org.eclipse.jgit.api.AddCommand) RuleUtil(org.eclipse.egit.core.internal.job.RuleUtil) IStatus(org.eclipse.core.runtime.IStatus) ISelectionListener(org.eclipse.ui.ISelectionListener) ViewerComparator(org.eclipse.jface.viewers.ViewerComparator) IPartListener2(org.eclipse.ui.IPartListener2) UndoRedoActionGroup(org.eclipse.ui.operations.UndoRedoActionGroup) ModifyEvent(org.eclipse.swt.events.ModifyEvent) Button(org.eclipse.swt.widgets.Button) ActionUtils(org.eclipse.egit.ui.internal.ActionUtils) Collection(java.util.Collection) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) AssumeUnchangedOperation(org.eclipse.egit.core.op.AssumeUnchangedOperation) CommitProposalProcessor(org.eclipse.egit.ui.internal.commit.CommitProposalProcessor) GitLabels(org.eclipse.egit.ui.internal.GitLabels) ISelection(org.eclipse.jface.viewers.ISelection) TreeViewer(org.eclipse.jface.viewers.TreeViewer) IShowInTarget(org.eclipse.ui.part.IShowInTarget) UIIcons(org.eclipse.egit.ui.internal.UIIcons) DragSourceEvent(org.eclipse.swt.dnd.DragSourceEvent) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) Label(org.eclipse.swt.widgets.Label) OpenEvent(org.eclipse.jface.viewers.OpenEvent) ToggleableWarningLabel(org.eclipse.egit.ui.internal.components.ToggleableWarningLabel) Activator(org.eclipse.egit.ui.Activator) Image(org.eclipse.swt.graphics.Image) MessageFormat(java.text.MessageFormat) CommitOperation(org.eclipse.egit.core.op.CommitOperation) IPersistentPreferenceStore(org.eclipse.jface.preference.IPersistentPreferenceStore) HashSet(java.util.HashSet) ContinueRebaseCommand(org.eclipse.egit.ui.internal.commands.shared.ContinueRebaseCommand) IMarker(org.eclipse.core.resources.IMarker) JobChangeAdapter(org.eclipse.core.runtime.jobs.JobChangeAdapter) ContentViewer(org.eclipse.jface.viewers.ContentViewer) Action(org.eclipse.jface.action.Action) IgnoreOperationUI(org.eclipse.egit.ui.internal.operations.IgnoreOperationUI) CheckoutCommand(org.eclipse.jgit.api.CheckoutCommand) Consumer(java.util.function.Consumer) JGitInternalException(org.eclipse.jgit.api.errors.JGitInternalException) ToolBarManager(org.eclipse.jface.action.ToolBarManager) IContributionItem(org.eclipse.jface.action.IContributionItem) IWorkbenchSiteProgressService(org.eclipse.ui.progress.IWorkbenchSiteProgressService) LocalResourceManager(org.eclipse.jface.resource.LocalResourceManager) SelectionEvent(org.eclipse.swt.events.SelectionEvent) Comparator(java.util.Comparator) SkipRebaseCommand(org.eclipse.egit.ui.internal.commands.shared.SkipRebaseCommand) AdapterUtils(org.eclipse.egit.core.AdapterUtils) UIPreferences(org.eclipse.egit.ui.UIPreferences) DialogSettings(org.eclipse.jface.dialogs.DialogSettings) DND(org.eclipse.swt.dnd.DND) CoreException(org.eclipse.core.runtime.CoreException) IDialogConstants(org.eclipse.jface.dialogs.IDialogConstants) FocusEvent(org.eclipse.swt.events.FocusEvent) ReplaceWithOursTheirsMenu(org.eclipse.egit.ui.internal.actions.ReplaceWithOursTheirsMenu) LocalSelectionTransfer(org.eclipse.jface.util.LocalSelectionTransfer) ResetCommand(org.eclipse.jgit.api.ResetCommand) Matcher(java.util.regex.Matcher) CommitHelper(org.eclipse.egit.ui.internal.commit.CommitHelper) PartInitException(org.eclipse.ui.PartInitException) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) Separator(org.eclipse.jface.action.Separator) Text(org.eclipse.swt.widgets.Text) MenuManager(org.eclipse.jface.action.MenuManager) Set(java.util.Set) Status(org.eclipse.core.runtime.Status) DeletePathsOperationUI(org.eclipse.egit.ui.internal.operations.DeletePathsOperationUI) AbstractRebaseCommandHandler(org.eclipse.egit.ui.internal.commands.shared.AbstractRebaseCommandHandler) IJobChangeEvent(org.eclipse.core.runtime.jobs.IJobChangeEvent) GridLayoutFactory(org.eclipse.jface.layout.GridLayoutFactory) ListenerHandle(org.eclipse.jgit.events.ListenerHandle) CommitMessageComponentState(org.eclipse.egit.ui.internal.dialogs.CommitMessageComponentState) UIText(org.eclipse.egit.ui.internal.UIText) PreferenceChangeEvent(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent) JobUtil(org.eclipse.egit.core.internal.job.JobUtil) ActionCommands(org.eclipse.egit.ui.internal.actions.ActionCommands) SWT(org.eclipse.swt.SWT) BooleanPrefAction(org.eclipse.egit.ui.internal.actions.BooleanPrefAction) RepositorySelectionProvider(org.eclipse.egit.ui.internal.selection.RepositorySelectionProvider) IWorkbenchPartReference(org.eclipse.ui.IWorkbenchPartReference) ViewPart(org.eclipse.ui.part.ViewPart) JFaceResources(org.eclipse.jface.resource.JFaceResources) AbstractTreeViewer(org.eclipse.jface.viewers.AbstractTreeViewer) WorkbenchJob(org.eclipse.ui.progress.WorkbenchJob) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) ArrayList(java.util.ArrayList) ControlEvent(org.eclipse.swt.events.ControlEvent) IContainer(org.eclipse.core.resources.IContainer) CommitMessageHistory(org.eclipse.egit.ui.internal.commit.CommitMessageHistory) IShowInSource(org.eclipse.ui.part.IShowInSource) ShowInContext(org.eclipse.ui.part.ShowInContext) IFile(org.eclipse.core.resources.IFile) GridData(org.eclipse.swt.layout.GridData) LinkedHashSet(java.util.LinkedHashSet) BaseLabelProvider(org.eclipse.jface.viewers.BaseLabelProvider) ViewerFilter(org.eclipse.jface.viewers.ViewerFilter) IViewSite(org.eclipse.ui.IViewSite) ExecutionException(org.eclipse.core.commands.ExecutionException) CommonUtils(org.eclipse.egit.ui.internal.CommonUtils) File(java.io.File) IURIEditorInput(org.eclipse.ui.IURIEditorInput) IMenuManager(org.eclipse.jface.action.IMenuManager) ActionFactory(org.eclipse.ui.actions.ActionFactory) RepositoryToolbarAction(org.eclipse.egit.ui.internal.components.RepositoryMenuUtil.RepositoryToolbarAction) IPartService(org.eclipse.ui.IPartService) Repository(org.eclipse.jgit.lib.Repository) GridLayout(org.eclipse.swt.layout.GridLayout) VerifyKeyListener(org.eclipse.swt.custom.VerifyKeyListener) IndexDiffData(org.eclipse.egit.core.internal.indexdiff.IndexDiffData) IndexDiffChangedListener(org.eclipse.egit.core.internal.indexdiff.IndexDiffChangedListener) IDialogSettings(org.eclipse.jface.dialogs.IDialogSettings) DropTargetAdapter(org.eclipse.swt.dnd.DropTargetAdapter) IPath(org.eclipse.core.runtime.IPath) IndexDiffCacheEntry(org.eclipse.egit.core.internal.indexdiff.IndexDiffCacheEntry) IWorkbenchAction(org.eclipse.ui.actions.ActionFactory.IWorkbenchAction) ITreeViewerListener(org.eclipse.jface.viewers.ITreeViewerListener) CommitMessageComponentStateManager(org.eclipse.egit.ui.internal.dialogs.CommitMessageComponentStateManager) Display(org.eclipse.swt.widgets.Display) IUndoContext(org.eclipse.core.commands.operations.IUndoContext) IHandlerService(org.eclipse.ui.handlers.IHandlerService) List(java.util.List) ILabelProviderListener(org.eclipse.jface.viewers.ILabelProviderListener) Tree(org.eclipse.swt.widgets.Tree) IFormColors(org.eclipse.ui.forms.IFormColors) CommitJob(org.eclipse.egit.ui.internal.commit.CommitJob) Pattern(java.util.regex.Pattern) IMenuListener(org.eclipse.jface.action.IMenuListener) RmCommand(org.eclipse.jgit.api.RmCommand) ExpandableComposite(org.eclipse.ui.forms.widgets.ExpandableComposite) ISelectionService(org.eclipse.ui.ISelectionService) RepositoryMapping(org.eclipse.egit.core.project.RepositoryMapping) RepositoryTreeNode(org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode) CommonUtils.runCommand(org.eclipse.egit.ui.internal.CommonUtils.runCommand) RepositoryUtil(org.eclipse.egit.core.RepositoryUtil) FocusListener(org.eclipse.swt.events.FocusListener) VerifyEvent(org.eclipse.swt.events.VerifyEvent) FileTransfer(org.eclipse.swt.dnd.FileTransfer) SpellcheckableMessageArea(org.eclipse.egit.ui.internal.dialogs.SpellcheckableMessageArea) Iterator(java.util.Iterator) Viewer(org.eclipse.jface.viewers.Viewer) Job(org.eclipse.core.runtime.jobs.Job) ProblemLabelDecorator(org.eclipse.egit.ui.internal.decorators.ProblemLabelDecorator) FormToolkit(org.eclipse.ui.forms.widgets.FormToolkit) DecoratingLabelProvider(org.eclipse.jface.viewers.DecoratingLabelProvider) TreeItem(org.eclipse.swt.widgets.TreeItem) ObjectId(org.eclipse.jgit.lib.ObjectId) RowLayout(org.eclipse.swt.layout.RowLayout) CommitMessageComponent(org.eclipse.egit.ui.internal.dialogs.CommitMessageComponent) IResource(org.eclipse.core.resources.IResource) GerritUtil(org.eclipse.egit.core.internal.gerrit.GerritUtil) UIUtils(org.eclipse.egit.ui.UIUtils) NonNull(org.eclipse.jgit.annotations.NonNull) Git(org.eclipse.jgit.api.Git) Collections(java.util.Collections) Control(org.eclipse.swt.widgets.Control) VerifyKeyListener(org.eclipse.swt.custom.VerifyKeyListener) Label(org.eclipse.swt.widgets.Label) ToggleableWarningLabel(org.eclipse.egit.ui.internal.components.ToggleableWarningLabel) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) RepositorySelectionProvider(org.eclipse.egit.ui.internal.selection.RepositorySelectionProvider) CommitProposalProcessor(org.eclipse.egit.ui.internal.commit.CommitProposalProcessor) DiffViewer(org.eclipse.egit.ui.internal.commit.DiffViewer) TreeViewer(org.eclipse.jface.viewers.TreeViewer) ContentViewer(org.eclipse.jface.viewers.ContentViewer) AbstractTreeViewer(org.eclipse.jface.viewers.AbstractTreeViewer) Viewer(org.eclipse.jface.viewers.Viewer) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) DisposeEvent(org.eclipse.swt.events.DisposeEvent) FocusEvent(org.eclipse.swt.events.FocusEvent) ISelectionListener(org.eclipse.ui.ISelectionListener) IWorkbenchPartSite(org.eclipse.ui.IWorkbenchPartSite) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) SelectionEvent(org.eclipse.swt.events.SelectionEvent) ControlListener(org.eclipse.swt.events.ControlListener) ISelectionService(org.eclipse.ui.ISelectionService) MultiViewerSelectionProvider(org.eclipse.egit.ui.internal.selection.MultiViewerSelectionProvider) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) PropertyChangeEvent(org.eclipse.jface.util.PropertyChangeEvent) ToggleableWarningLabel(org.eclipse.egit.ui.internal.components.ToggleableWarningLabel) ICommitMessageComponentNotifications(org.eclipse.egit.ui.internal.dialogs.ICommitMessageComponentNotifications) IHandlerService(org.eclipse.ui.handlers.IHandlerService) FocusListener(org.eclipse.swt.events.FocusListener) DisposeListener(org.eclipse.swt.events.DisposeListener) IAction(org.eclipse.jface.action.IAction) Action(org.eclipse.jface.action.Action) BooleanPrefAction(org.eclipse.egit.ui.internal.actions.BooleanPrefAction) RepositoryToolbarAction(org.eclipse.egit.ui.internal.components.RepositoryMenuUtil.RepositoryToolbarAction) IWorkbenchAction(org.eclipse.ui.actions.ActionFactory.IWorkbenchAction) FormToolkit(org.eclipse.ui.forms.widgets.FormToolkit) ViewerFilter(org.eclipse.jface.viewers.ViewerFilter) IPartService(org.eclipse.ui.IPartService) IToolBarManager(org.eclipse.jface.action.IToolBarManager) ToolBarManager(org.eclipse.jface.action.ToolBarManager) ISelection(org.eclipse.jface.viewers.ISelection) VerifyEvent(org.eclipse.swt.events.VerifyEvent) Composite(org.eclipse.swt.widgets.Composite) ExpandableComposite(org.eclipse.ui.forms.widgets.ExpandableComposite) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) SashForm(org.eclipse.swt.custom.SashForm) GridDataFactory(org.eclipse.jface.layout.GridDataFactory) IWorkbenchSiteProgressService(org.eclipse.ui.progress.IWorkbenchSiteProgressService) ControlEvent(org.eclipse.swt.events.ControlEvent) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) CommitMessageComponent(org.eclipse.egit.ui.internal.dialogs.CommitMessageComponent) CommitMessageArea(org.eclipse.egit.ui.internal.dialogs.CommitMessageArea)

Example 15 with ISelectionListener

use of org.eclipse.ui.ISelectionListener in project egit by eclipse.

the class ReflogView method createPartControl.

@Override
public void createPartControl(Composite parent) {
    dateFormatter = PreferenceBasedDateFormatter.create();
    GridLayoutFactory.fillDefaults().applyTo(parent);
    toolkit = new FormToolkit(parent.getDisplay());
    parent.addDisposeListener(new DisposeListener() {

        @Override
        public void widgetDisposed(DisposeEvent e) {
            toolkit.dispose();
        }
    });
    form = toolkit.createForm(parent);
    Image repoImage = UIIcons.REPOSITORY.createImage();
    UIUtils.hookDisposal(form, repoImage);
    Image commitImage = UIIcons.CHANGESET.createImage();
    UIUtils.hookDisposal(form, commitImage);
    form.setImage(repoImage);
    form.setText(UIText.StagingView_NoSelectionTitle);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(form);
    toolkit.decorateFormHeading(form);
    GridLayoutFactory.fillDefaults().applyTo(form.getBody());
    Composite tableComposite = toolkit.createComposite(form.getBody());
    tableComposite.setLayout(new GridLayout());
    GridDataFactory.fillDefaults().grab(true, true).applyTo(tableComposite);
    final TreeColumnLayout layout = new TreeColumnLayout();
    FilteredTree filteredTree = new FilteredTree(tableComposite, SWT.NONE | SWT.BORDER | SWT.FULL_SELECTION, new PatternFilter(), true) {

        @Override
        protected void createControl(Composite composite, int treeStyle) {
            super.createControl(composite, treeStyle);
            treeComposite.setLayout(layout);
        }
    };
    toolkit.adapt(filteredTree);
    refLogTableTreeViewer = filteredTree.getViewer();
    refLogTableTreeViewer.getTree().setLinesVisible(true);
    refLogTableTreeViewer.getTree().setHeaderVisible(true);
    refLogTableTreeViewer.setContentProvider(new ReflogViewContentProvider());
    ColumnViewerToolTipSupport.enableFor(refLogTableTreeViewer);
    TreeViewerColumn toColumn = createColumn(layout, UIText.ReflogView_CommitColumnHeader, 10, SWT.LEFT);
    toColumn.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public String getText(Object element) {
            if (element instanceof ReflogEntry) {
                final ReflogEntry entry = (ReflogEntry) element;
                return entry.getNewId().abbreviate(7).name();
            }
            return null;
        }

        @Override
        public String getToolTipText(Object element) {
            if (element instanceof ReflogEntry) {
                final ReflogEntry entry = (ReflogEntry) element;
                return entry.getNewId().name();
            }
            return null;
        }

        @Override
        public Image getImage(Object element) {
            if (element instanceof ReflogEntry) {
                return commitImage;
            }
            return null;
        }
    });
    TreeViewerColumn commitMessageColumn = createColumn(layout, UIText.ReflogView_CommitMessageColumnHeader, 40, SWT.LEFT);
    commitMessageColumn.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public String getText(Object element) {
            if (element instanceof ReflogEntry) {
                final ReflogEntry entry = (ReflogEntry) element;
                RevCommit c = getCommit(entry);
                // $NON-NLS-1$
                return c == null ? "" : c.getShortMessage();
            } else if (element instanceof IWorkbenchAdapter) {
                return ((IWorkbenchAdapter) element).getLabel(element);
            }
            return null;
        }

        private RevCommit getCommit(final ReflogEntry entry) {
            try (RevWalk walk = new RevWalk(getRepository())) {
                walk.setRetainBody(true);
                return walk.parseCommit(entry.getNewId());
            } catch (IOException ignored) {
                // ignore
                return null;
            }
        }
    });
    TreeViewerColumn dateColumn = createColumn(layout, UIText.ReflogView_DateColumnHeader, 15, SWT.LEFT);
    dateColumn.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public String getText(Object element) {
            if (element instanceof ReflogEntry) {
                final ReflogEntry entry = (ReflogEntry) element;
                final PersonIdent who = entry.getWho();
                return dateFormatter.formatDate(who);
            }
            return null;
        }

        @Override
        public Image getImage(Object element) {
            return null;
        }
    });
    TreeViewerColumn messageColumn = createColumn(layout, UIText.ReflogView_MessageColumnHeader, 40, SWT.LEFT);
    messageColumn.setLabelProvider(new ColumnLabelProvider() {

        private ResourceManager resourceManager = new LocalResourceManager(JFaceResources.getResources());

        @Override
        public String getText(Object element) {
            if (element instanceof ReflogEntry) {
                final ReflogEntry entry = (ReflogEntry) element;
                return entry.getComment();
            }
            return null;
        }

        @Override
        public Image getImage(Object element) {
            if (!(element instanceof ReflogEntry)) {
                return null;
            }
            String comment = ((ReflogEntry) element).getComment();
            if (// $NON-NLS-1$ //$NON-NLS-2$
            comment.startsWith("commit:") || comment.startsWith("commit (initial):"))
                return (Image) resourceManager.get(UIIcons.COMMIT);
            if (// $NON-NLS-1$
            comment.startsWith("commit (amend):"))
                return (Image) resourceManager.get(UIIcons.AMEND_COMMIT);
            if (// $NON-NLS-1$
            comment.startsWith("pull"))
                return (Image) resourceManager.get(UIIcons.PULL);
            if (// $NON-NLS-1$
            comment.startsWith("clone"))
                return (Image) resourceManager.get(UIIcons.CLONEGIT);
            if (// $NON-NLS-1$
            comment.startsWith("rebase"))
                return (Image) resourceManager.get(UIIcons.REBASE);
            if (// $NON-NLS-1$
            comment.startsWith("merge"))
                return (Image) resourceManager.get(UIIcons.MERGE);
            if (// $NON-NLS-1$
            comment.startsWith("fetch"))
                return (Image) resourceManager.get(UIIcons.FETCH);
            if (// $NON-NLS-1$
            comment.startsWith("branch"))
                return (Image) resourceManager.get(UIIcons.CREATE_BRANCH);
            if (// $NON-NLS-1$
            comment.startsWith("checkout"))
                return (Image) resourceManager.get(UIIcons.CHECKOUT);
            return null;
        }

        @Override
        public void dispose() {
            resourceManager.dispose();
            super.dispose();
        }
    });
    new OpenAndLinkWithEditorHelper(refLogTableTreeViewer) {

        @Override
        protected void linkToEditor(ISelection selection) {
        // Not supported
        }

        @Override
        protected void open(ISelection sel, boolean activate) {
            handleOpen(sel, OpenStrategy.activateOnOpen());
        }

        @Override
        protected void activate(ISelection selection) {
            handleOpen(selection, true);
        }

        private void handleOpen(ISelection selection, boolean activateOnOpen) {
            if (selection instanceof IStructuredSelection)
                if (selection.isEmpty())
                    return;
            Repository repo = getRepository();
            if (repo == null)
                return;
            try (RevWalk walk = new RevWalk(repo)) {
                for (Object element : ((IStructuredSelection) selection).toArray()) {
                    ReflogEntry entry = (ReflogEntry) element;
                    ObjectId id = entry.getNewId();
                    if (id == null || id.equals(ObjectId.zeroId()))
                        id = entry.getOldId();
                    if (id != null && !id.equals(ObjectId.zeroId()))
                        CommitEditor.openQuiet(new RepositoryCommit(repo, walk.parseCommit(id)), activateOnOpen);
                }
            } catch (IOException e) {
                Activator.logError(UIText.ReflogView_ErrorOnOpenCommit, e);
            }
        }
    };
    uiPrefsListener = new IPropertyChangeListener() {

        @Override
        public void propertyChange(PropertyChangeEvent event) {
            String property = event.getProperty();
            if (UIPreferences.DATE_FORMAT.equals(property) || UIPreferences.DATE_FORMAT_CHOICE.equals(property)) {
                dateFormatter = PreferenceBasedDateFormatter.create();
                refLogTableTreeViewer.refresh();
            }
        }
    };
    Activator.getDefault().getPreferenceStore().addPropertyChangeListener(uiPrefsListener);
    selectionChangedListener = new ISelectionListener() {

        @Override
        public void selectionChanged(IWorkbenchPart part, ISelection selection) {
            if (part instanceof IEditorPart) {
                IEditorInput input = ((IEditorPart) part).getEditorInput();
                if (input instanceof IFileEditorInput)
                    reactOnSelection(new StructuredSelection(((IFileEditorInput) input).getFile()));
            } else
                reactOnSelection(selection);
        }
    };
    IWorkbenchPartSite site = getSite();
    ISelectionService service = CommonUtils.getService(site, ISelectionService.class);
    service.addPostSelectionListener(selectionChangedListener);
    // Use current selection to populate reflog view
    UIUtils.notifySelectionChangedWithCurrentSelection(selectionChangedListener, site);
    site.setSelectionProvider(new RepositorySelectionProvider(refLogTableTreeViewer, () -> getRepository()));
    addRefsChangedListener = Repository.getGlobalListenerList().addRefsChangedListener(this);
    // Toolbar
    IToolBarManager toolbar = getViewSite().getActionBars().getToolBarManager();
    switchRepositoriesAction = new RepositoryToolbarAction(false, () -> getRepository(), repo -> reactOnSelection(new StructuredSelection(repo)));
    toolbar.add(switchRepositoriesAction);
    getViewSite().getActionBars().updateActionBars();
    // register context menu
    MenuManager menuManager = new MenuManager();
    menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    Tree tree = refLogTableTreeViewer.getTree();
    tree.setMenu(menuManager.createContextMenu(tree));
    MenuManager resetManager = ResetMenu.createMenu(getSite());
    menuManager.add(resetManager);
    getSite().registerContextMenu(POPUP_MENU_ID, menuManager, refLogTableTreeViewer);
}
Also used : OpenAndLinkWithEditorHelper(org.eclipse.ui.OpenAndLinkWithEditorHelper) AdapterUtils(org.eclipse.egit.core.AdapterUtils) DisposeEvent(org.eclipse.swt.events.DisposeEvent) UIPreferences(org.eclipse.egit.ui.UIPreferences) IWorkbenchPartSite(org.eclipse.ui.IWorkbenchPartSite) ResourceManager(org.eclipse.jface.resource.ResourceManager) DisposeListener(org.eclipse.swt.events.DisposeListener) IToolBarManager(org.eclipse.jface.action.IToolBarManager) HyperlinkEvent(org.eclipse.ui.forms.events.HyperlinkEvent) CommitEditor(org.eclipse.egit.ui.internal.commit.CommitEditor) RepositoryState(org.eclipse.jgit.lib.RepositoryState) OpenAndLinkWithEditorHelper(org.eclipse.ui.OpenAndLinkWithEditorHelper) RevWalk(org.eclipse.jgit.revwalk.RevWalk) PropertyChangeEvent(org.eclipse.jface.util.PropertyChangeEvent) ISelectionListener(org.eclipse.ui.ISelectionListener) Composite(org.eclipse.swt.widgets.Composite) PreferenceBasedDateFormatter(org.eclipse.egit.ui.internal.PreferenceBasedDateFormatter) ColumnViewerToolTipSupport(org.eclipse.jface.viewers.ColumnViewerToolTipSupport) RepositoryCommit(org.eclipse.egit.ui.internal.commit.RepositoryCommit) IEditorPart(org.eclipse.ui.IEditorPart) IWorkbenchAction(org.eclipse.ui.actions.ActionFactory.IWorkbenchAction) IWorkbenchAdapter(org.eclipse.ui.model.IWorkbenchAdapter) TreeViewerColumn(org.eclipse.jface.viewers.TreeViewerColumn) TreeColumn(org.eclipse.swt.widgets.TreeColumn) RefsChangedListener(org.eclipse.jgit.events.RefsChangedListener) Separator(org.eclipse.jface.action.Separator) IEditorInput(org.eclipse.ui.IEditorInput) PlatformUI(org.eclipse.ui.PlatformUI) MenuManager(org.eclipse.jface.action.MenuManager) Constants(org.eclipse.jgit.lib.Constants) ColumnLabelProvider(org.eclipse.jface.viewers.ColumnLabelProvider) ResetMenu(org.eclipse.egit.ui.internal.actions.ResetMenu) GridLayoutFactory(org.eclipse.jface.layout.GridLayoutFactory) ListenerHandle(org.eclipse.jgit.events.ListenerHandle) OpenStrategy(org.eclipse.jface.util.OpenStrategy) PersonIdent(org.eclipse.jgit.lib.PersonIdent) Window(org.eclipse.jface.window.Window) UIText(org.eclipse.egit.ui.internal.UIText) ReflogInput(org.eclipse.egit.ui.internal.reflog.ReflogViewContentProvider.ReflogInput) Tree(org.eclipse.swt.widgets.Tree) IFormColors(org.eclipse.ui.forms.IFormColors) SWT(org.eclipse.swt.SWT) ISelection(org.eclipse.jface.viewers.ISelection) TreeViewer(org.eclipse.jface.viewers.TreeViewer) IShowInTarget(org.eclipse.ui.part.IShowInTarget) UIIcons(org.eclipse.egit.ui.internal.UIIcons) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) ISelectionService(org.eclipse.ui.ISelectionService) RepositoryMapping(org.eclipse.egit.core.project.RepositoryMapping) RepositoryTreeNode(org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode) RepositorySelectionProvider(org.eclipse.egit.ui.internal.selection.RepositorySelectionProvider) ViewPart(org.eclipse.ui.part.ViewPart) RevCommit(org.eclipse.jgit.revwalk.RevCommit) Activator(org.eclipse.egit.ui.Activator) Image(org.eclipse.swt.graphics.Image) JFaceResources(org.eclipse.jface.resource.JFaceResources) ImageHyperlink(org.eclipse.ui.forms.widgets.ImageHyperlink) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) IFileEditorInput(org.eclipse.ui.IFileEditorInput) FilteredTree(org.eclipse.ui.dialogs.FilteredTree) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) ShowInContext(org.eclipse.ui.part.ShowInContext) ReflogEntry(org.eclipse.jgit.lib.ReflogEntry) ColumnWeightData(org.eclipse.jface.viewers.ColumnWeightData) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) IWorkbenchActionConstants(org.eclipse.ui.IWorkbenchActionConstants) ControlContribution(org.eclipse.jface.action.ControlContribution) GridDataFactory(org.eclipse.jface.layout.GridDataFactory) RefsChangedEvent(org.eclipse.jgit.events.RefsChangedEvent) FormToolkit(org.eclipse.ui.forms.widgets.FormToolkit) IOException(java.io.IOException) CommonUtils(org.eclipse.egit.ui.internal.CommonUtils) ObjectId(org.eclipse.jgit.lib.ObjectId) Form(org.eclipse.ui.forms.widgets.Form) RowLayout(org.eclipse.swt.layout.RowLayout) PatternFilter(org.eclipse.ui.dialogs.PatternFilter) IContextService(org.eclipse.ui.contexts.IContextService) IResource(org.eclipse.core.resources.IResource) UIUtils(org.eclipse.egit.ui.UIUtils) TreeColumnLayout(org.eclipse.jface.layout.TreeColumnLayout) RepositoryToolbarAction(org.eclipse.egit.ui.internal.components.RepositoryMenuUtil.RepositoryToolbarAction) LocalResourceManager(org.eclipse.jface.resource.LocalResourceManager) HyperlinkAdapter(org.eclipse.ui.forms.events.HyperlinkAdapter) Repository(org.eclipse.jgit.lib.Repository) Control(org.eclipse.swt.widgets.Control) GridLayout(org.eclipse.swt.layout.GridLayout) DisposeListener(org.eclipse.swt.events.DisposeListener) PatternFilter(org.eclipse.ui.dialogs.PatternFilter) FormToolkit(org.eclipse.ui.forms.widgets.FormToolkit) TreeColumnLayout(org.eclipse.jface.layout.TreeColumnLayout) LocalResourceManager(org.eclipse.jface.resource.LocalResourceManager) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) RepositorySelectionProvider(org.eclipse.egit.ui.internal.selection.RepositorySelectionProvider) FilteredTree(org.eclipse.ui.dialogs.FilteredTree) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) DisposeEvent(org.eclipse.swt.events.DisposeEvent) Image(org.eclipse.swt.graphics.Image) ISelectionListener(org.eclipse.ui.ISelectionListener) IWorkbenchPartSite(org.eclipse.ui.IWorkbenchPartSite) ColumnLabelProvider(org.eclipse.jface.viewers.ColumnLabelProvider) GridLayout(org.eclipse.swt.layout.GridLayout) ReflogEntry(org.eclipse.jgit.lib.ReflogEntry) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) IFileEditorInput(org.eclipse.ui.IFileEditorInput) ISelection(org.eclipse.jface.viewers.ISelection) ISelectionService(org.eclipse.ui.ISelectionService) Tree(org.eclipse.swt.widgets.Tree) FilteredTree(org.eclipse.ui.dialogs.FilteredTree) RevCommit(org.eclipse.jgit.revwalk.RevCommit) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) RepositoryToolbarAction(org.eclipse.egit.ui.internal.components.RepositoryMenuUtil.RepositoryToolbarAction) PropertyChangeEvent(org.eclipse.jface.util.PropertyChangeEvent) Composite(org.eclipse.swt.widgets.Composite) ObjectId(org.eclipse.jgit.lib.ObjectId) IOException(java.io.IOException) ResourceManager(org.eclipse.jface.resource.ResourceManager) LocalResourceManager(org.eclipse.jface.resource.LocalResourceManager) IEditorPart(org.eclipse.ui.IEditorPart) RevWalk(org.eclipse.jgit.revwalk.RevWalk) RepositoryCommit(org.eclipse.egit.ui.internal.commit.RepositoryCommit) TreeViewerColumn(org.eclipse.jface.viewers.TreeViewerColumn) Repository(org.eclipse.jgit.lib.Repository) PersonIdent(org.eclipse.jgit.lib.PersonIdent) IToolBarManager(org.eclipse.jface.action.IToolBarManager) IWorkbenchAdapter(org.eclipse.ui.model.IWorkbenchAdapter) MenuManager(org.eclipse.jface.action.MenuManager) IEditorInput(org.eclipse.ui.IEditorInput) Separator(org.eclipse.jface.action.Separator)

Aggregations

ISelectionListener (org.eclipse.ui.ISelectionListener)15 ISelection (org.eclipse.jface.viewers.ISelection)12 IWorkbenchPart (org.eclipse.ui.IWorkbenchPart)12 IStructuredSelection (org.eclipse.jface.viewers.IStructuredSelection)11 Composite (org.eclipse.swt.widgets.Composite)6 TreeViewer (org.eclipse.jface.viewers.TreeViewer)4 ArrayList (java.util.ArrayList)3 StructuredSelection (org.eclipse.jface.viewers.StructuredSelection)3 IEditorInput (org.eclipse.ui.IEditorInput)3 ISelectionService (org.eclipse.ui.ISelectionService)3 Cell (eu.esdihumboldt.hale.common.align.model.Cell)2 DefaultCell (eu.esdihumboldt.hale.common.align.model.impl.DefaultCell)2 ResolvedTask (eu.esdihumboldt.hale.common.tasks.ResolvedTask)2 TaskService (eu.esdihumboldt.hale.common.tasks.TaskService)2 TaskServiceListener (eu.esdihumboldt.hale.common.tasks.TaskServiceListener)2 SchemaSelection (eu.esdihumboldt.hale.ui.selection.SchemaSelection)2 AlignmentService (eu.esdihumboldt.hale.ui.service.align.AlignmentService)2 AlignmentServiceAdapter (eu.esdihumboldt.hale.ui.service.align.AlignmentServiceAdapter)2 PropertiesViewPart (eu.esdihumboldt.hale.ui.views.properties.PropertiesViewPart)2 Map (java.util.Map)2