public void createPartControl()

in org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogView.java [168:449]


	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.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
				new TreeColumnPatternFilter(), true, true) {

			@Override
			protected void createControl(Composite composite, int treeStyle) {
				super.createControl(composite, treeStyle);
				treeComposite.setLayout(layout);
			}
		};

		toolkit.adapt(filteredTree);
		refLogTreeViewer = filteredTree.getViewer();
		refLogTreeViewer.getTree().setLinesVisible(true);
		refLogTreeViewer.getTree().setHeaderVisible(true);
		refLogTreeViewer
				.setContentProvider(new ReflogViewContentProvider());

		ColumnViewerToolTipSupport.enableFor(refLogTreeViewer);

		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 Utils.getShortObjectId(entry.getNewId());
				}
				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 ReflogItem) {
					ReflogItem entry = (ReflogItem) element;
					String c = entry.getCommitMessage();
					return c == null ? "" : c; //$NON-NLS-1$
				} else if (element instanceof IWorkbenchAdapter) {
					return ((IWorkbenchAdapter) element).getLabel(element);
				}
				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;
			}

		});

		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 (comment.startsWith("commit:") || comment.startsWith("commit (initial):")) //$NON-NLS-1$ //$NON-NLS-2$
					return (Image) resourceManager.get(UIIcons.COMMIT);
				if (comment.startsWith("commit (amend):")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.AMEND_COMMIT);
				if (comment.startsWith("pull")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.PULL);
				if (comment.startsWith("clone")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.CLONEGIT);
				if (comment.startsWith("rebase")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.REBASE);
				if (comment.startsWith("merge")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.MERGE);
				if (comment.startsWith("fetch")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.FETCH);
				if (comment.startsWith("branch")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.CREATE_BRANCH);
				if (comment.startsWith("checkout")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.CHECKOUT);
				if (comment.startsWith("cherry-pick")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.CHERRY_PICK);
				if (comment.startsWith("Branch: renamed ")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.EDITCONFIG);
				if (comment.startsWith("reset") //$NON-NLS-1$
						|| comment.endsWith(": updating HEAD")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.RESET);
				if (comment.startsWith("revert:")) //$NON-NLS-1$
					return (Image) resourceManager.get(UIIcons.REVERT);
				return null;
			}

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

		new OpenAndLinkWithEditorHelper(refLogTreeViewer) {
			@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();
					refLogTreeViewer.refresh();
				}
			}
		};
		Activator.getDefault().getPreferenceStore()
				.addPropertyChangeListener(uiPrefsListener);
		InstanceScope.INSTANCE
				.getNode(org.eclipse.egit.core.Activator.PLUGIN_ID)
				.addPreferenceChangeListener(prefListener);

		selectionChangedListener = new ISelectionListener() {
			@Override
			public void selectionChanged(IWorkbenchPart part,
					ISelection selection) {
				if (part == ReflogView.this) {
					return;
				}
				if (part instanceof IEditorPart) {
					IEditorInput input = ((IEditorPart) part).getEditorInput();
					Repository repository = Adapters.adapt(input,
							Repository.class);
					if (repository != null) {
						reactOnSelection(new StructuredSelection(repository));
					}
				} else {
					reactOnSelection(selection);
				}
			}
		};

		partListener = new VisibilityListener();
		IWorkbenchPartSite site = getSite();
		site.getService(IPartService.class)
				.addPartListener(partListener);
		ISelectionService service = site.getService(ISelectionService.class);
		service.addPostSelectionListener(selectionChangedListener);

		// Use current selection to populate reflog view
		UIUtils.notifySelectionChangedWithCurrentSelection(
				selectionChangedListener, site);

		site.setSelectionProvider(new RepositorySelectionProvider(
				refLogTreeViewer, this::getRepository));

		addRefsChangedListener = RepositoryCache.INSTANCE
				.getGlobalListenerList().addRefsChangedListener(this);

		// Toolbar
		IToolBarManager toolbar = getViewSite().getActionBars()
				.getToolBarManager();
		switchRepositoriesAction = new RepositoryToolbarAction(false,
				this::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 = refLogTreeViewer.getTree();
		tree.setMenu(menuManager.createContextMenu(tree));

		getSite().registerContextMenu(POPUP_MENU_ID, menuManager, refLogTreeViewer);
	}