/*******************************************************************************
* Copyright (c) 2011, 2017 Red Hat, Inc.
* 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:
* Alexander Kurtakov - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.rpm.ui;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.linuxtools.rpm.core.RPMProjectLayout;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
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.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* Custom panel to be reused by different RPM project creation and import
* wizards. Contains the path and project type.
*
*/
public class RPMDetailsPanel {
private Text locationPath;
private ComboViewer typeCombo;
private Composite parent;
/**
* Initializes the panel with all the needed components and listeners.
*
* @param parent
* The composite that will handle the childrens
*/
public RPMDetailsPanel(Composite parent) {
this.parent = parent;
initialize();
}
private void initialize() {
Button defaultSettings = new Button(parent, SWT.CHECK);
defaultSettings.setText(Messages.getString("SRPMImportPage.0")); //$NON-NLS-1$
defaultSettings.setSelection(true);
final Group specGrid = new Group(parent, SWT.NONE);
defaultSettings.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
if (defaultSettings.getSelection()) {
for (Control control : specGrid.getChildren()) {
specGrid.setEnabled(false);
control.setEnabled(false);
}
} else {
for (Control control : specGrid.getChildren()) {
specGrid.setEnabled(true);
control.setEnabled(true);
}
}
}));
GridLayout layout = new GridLayout();
layout.numColumns = 3;
specGrid.setLayout(layout);
specGrid.setText(Messages.getString("SRPMImportPage.1")); //$NON-NLS-1$
specGrid.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
specGrid.setEnabled(false);
Label locationLabel = new Label(specGrid, SWT.NULL);
locationLabel.setText(Messages.getString("SRPMImportPage.2")); //$NON-NLS-1$
locationLabel.setEnabled(false);
locationPath = new Text(specGrid, SWT.SINGLE | SWT.BORDER);
locationPath.setEnabled(false);
locationPath.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
Button containerBrowseButton = new Button(specGrid, SWT.PUSH);
containerBrowseButton.setText(Messages.getString("SRPMImportPage.3")); //$NON-NLS-1$
containerBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
containerBrowseButton.setEnabled(false);
final Composite projectTypeGroup = new Composite(parent, SWT.NONE);
layout = new GridLayout();
layout.numColumns = 2;
projectTypeGroup.setLayout(layout);
projectTypeGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label typeLabel = new Label(projectTypeGroup, SWT.NULL);
typeLabel.setText(Messages.getString("SRPMImportPage.4")); //$NON-NLS-1$
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
typeCombo = new ComboViewer(projectTypeGroup, SWT.READ_ONLY);
typeCombo.getCombo().setLayoutData(gridData);
typeCombo.setContentProvider(ArrayContentProvider.getInstance());
typeCombo.setInput(RPMProjectLayout.values());
typeCombo.setSelection(new StructuredSelection(RPMProjectLayout.RPMBUILD));
}
/**
* Returns the selected layout if any or the default one - RPMBUILD.
*
* @return The selected project layout.
*/
public RPMProjectLayout getSelectedLayout() {
return RPMProjectLayout.valueOf(typeCombo.getCombo().getItem(typeCombo.getCombo().getSelectionIndex()));
}
/**
* Sets the location path to given absolute path.
*
* @param absolutePath
* The path to be shown.
*/
public void setLocationPath(String absolutePath) {
locationPath.setText(absolutePath);
}
/**
* Returns the default path or whatever is entered.
*
* @return The location path to use for the project.
*/
public IPath getLocationPath() {
return Path.fromOSString(locationPath.getText());
}
}