org.eclipse.buildship.ui.wizard.project.GradleWelcomeWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.buildship.ui.wizard.project.GradleWelcomeWizardPage.java

Source

/*
 * Copyright (c) 2015 the original author or authors.
 * 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
 *
 * Contributors:
 *     Etienne Studer & Dont Csiks (Gradle Inc.) - initial API and implementation and initial documentation
 */

package org.eclipse.buildship.ui.wizard.project;

import org.eclipse.buildship.core.projectimport.ProjectImportConfiguration;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;

import com.google.common.collect.ImmutableList;
import com.gradleware.tooling.toolingutils.binding.Property;

/**
 * Page on a {@link AbstractProjectWizard} that welcomes the user and provides some information about the wizard.
 */
public final class GradleWelcomeWizardPage extends AbstractWizardPage {

    private static final String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$

    private final WelcomePageContent welcomePageContent;
    private final Font headerFont;

    public GradleWelcomeWizardPage(ProjectImportConfiguration configuration,
            WelcomePageContent welcomePageContent) {
        super(welcomePageContent.getName(), welcomePageContent.getTitle(), welcomePageContent.getMessage(),
                configuration, ImmutableList.<Property<?>>of());
        this.welcomePageContent = welcomePageContent;
        this.headerFont = createHeaderFont();
    }

    private Font createHeaderFont() {
        FontData[] fontData = JFaceResources.getDialogFont().getFontData();
        for (FontData font : fontData) {
            font.setHeight(18);
        }
        return new Font(PlatformUI.getWorkbench().getDisplay(), fontData);
    }

    @Override
    protected void createWidgets(Composite root) {
        root.setLayout(new GridLayout(1, false));

        Composite container = new Composite(root, SWT.NONE);
        container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        GridLayout containerLayout = new GridLayout(1, false);
        containerLayout.marginLeft = containerLayout.marginRight = 50;
        container.setLayout(containerLayout);

        StyledText welcomeText = new StyledText(container, SWT.WRAP | SWT.MULTI | SWT.CENTER);
        GridData welcomeTextLayoutData = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
        welcomeTextLayoutData.widthHint = 500;
        welcomeText.setLayoutData(welcomeTextLayoutData);
        welcomeText.setBackground(welcomeText.getParent().getBackground());
        welcomeText.setEnabled(false);
        welcomeText.setEditable(false);
        fillWelcomeText(welcomeText);

        final Button showWelcomePageCheckbox = new Button(container, SWT.CHECK);
        showWelcomePageCheckbox.setText(ProjectWizardMessages.CheckButton_ShowWelcomePageNextTime);
        GridData showWelcomePageCheckboxLayoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        showWelcomePageCheckboxLayoutData.widthHint = welcomeTextLayoutData.widthHint;
        showWelcomePageCheckboxLayoutData.verticalIndent = 15;
        showWelcomePageCheckbox.setLayoutData(showWelcomePageCheckboxLayoutData);
        showWelcomePageCheckbox.setSelection(((AbstractProjectWizard) getWizard()).isShowWelcomePage());
        showWelcomePageCheckbox.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent event) {
                ((AbstractProjectWizard) getWizard()).setWelcomePageEnabled(showWelcomePageCheckbox.getSelection());
            }
        });
    }

    private void fillWelcomeText(StyledText welcomeText) {
        // add content title
        StringBuilder welcomeContent = new StringBuilder();
        welcomeContent.append(this.welcomePageContent.getParagraphTitle());

        // add content paragraphs
        for (WelcomePageContent.PageParagraph paragraph : this.welcomePageContent.getParagraphs()) {
            welcomeContent.append(LINE_SEPARATOR);
            welcomeContent.append(LINE_SEPARATOR);
            welcomeContent.append(paragraph.getTitle());
            welcomeContent.append(paragraph.getContent());
        }

        // justify content text
        welcomeText.setText(welcomeContent.toString());
        welcomeText.setLineJustify(1, welcomeText.getLineCount() - 1, true);

        // make content title and paragraph titles bold
        setBoldTitle(welcomeText, this.welcomePageContent.getParagraphTitle(), this.headerFont);
        for (WelcomePageContent.PageParagraph welcomePageParagraph : this.welcomePageContent.getParagraphs()) {
            setBoldTitle(welcomeText, welcomePageParagraph.getTitle(), null);
        }
    }

    private void setBoldTitle(StyledText welcomeText, String title, Font font) {
        StyleRange titleStyle = new StyleRange();
        titleStyle.start = welcomeText.getText().indexOf(title);
        titleStyle.length = title.length();
        titleStyle.font = font;
        titleStyle.fontStyle = SWT.BOLD;
        welcomeText.setStyleRange(titleStyle);
    }

    @Override
    protected String getPageContextInformation() {
        return this.welcomePageContent.getPageContextInformation();
    }

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

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);

        // if the welcome page is visible, disable the Finish button
        ((AbstractProjectWizard) getWizard()).setFinishGloballyEnabled(!visible);
    }

}