org.eclipse.egit.ui.internal.components.TitleAndImageDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.egit.ui.internal.components.TitleAndImageDialog.java

Source

/*******************************************************************************
 * Copyright (C) 2017, Thomas Wolf <thomas.wolf@paranor.ch>
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *******************************************************************************/
package org.eclipse.egit.ui.internal.components;

import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.resource.ResourceManager;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;

/**
 * A {@link TitleAreaDialog} with a default image.
 */
public class TitleAndImageDialog extends TitleAreaDialog {

    private ResourceManager resourceManager;

    private ImageDescriptor defaultImageDescriptor;

    private boolean explicitImageSet;

    /**
     * Creates a new {@link TitleAndImageDialog} with the given default image.
     *
     * @param parent
     *            the parent SWT {@link Shell}
     * @param defaultImageDescriptor
     *            to use for the default image used if no image is explicitly
     *            set, or {@code null} if none
     */
    public TitleAndImageDialog(Shell parent, ImageDescriptor defaultImageDescriptor) {
        super(parent);
        this.defaultImageDescriptor = defaultImageDescriptor;
    }

    @Override
    protected Control createContents(Composite parent) {
        if (defaultImageDescriptor != null && !explicitImageSet) {
            super.setTitleImage(getResourceManager().createImage(defaultImageDescriptor));
        }
        Control control = super.createContents(parent);
        control.addDisposeListener(event -> {
            if (resourceManager != null) {
                resourceManager.dispose();
                resourceManager = null;
            }
        });
        return control;
    }

    @Override
    public void setTitleImage(Image newTitleImage) {
        explicitImageSet = true;
        super.setTitleImage(newTitleImage);
    }

    /**
     * Retrieves this dialog's {@link LocalResourceManager}.
     *
     * @return the {@link LocalResourceManager}
     */
    protected ResourceManager getResourceManager() {
        if (resourceManager == null) {
            resourceManager = new LocalResourceManager(JFaceResources.getResources());
        }
        return resourceManager;
    }
}