blob: 43b0dbef03bb0572a7cdae3335fb93c0b6a659c9 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2012, 2020 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.internal.r.ui.pkgmanager;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils.TableComposite;
import org.eclipse.statet.r.core.pkgmanager.IRPkgManager;
import org.eclipse.statet.r.core.pkgmanager.RPkgAction;
import org.eclipse.statet.r.core.pkgmanager.RPkgResolver;
import org.eclipse.statet.r.core.pkgmanager.RRepo;
import org.eclipse.statet.r.ui.REnvLabelProvider;
abstract class SummaryPage extends WizardPage {
private final IRPkgManager.Ext pkgManager;
private final RPkgResolver resolver;
private TableComposite table;
public SummaryPage(final IRPkgManager.Ext pkgManager, final RPkgResolver resolver,
final String title) {
super("InstallPkgsSummaryPage"); //$NON-NLS-1$
this.pkgManager= pkgManager;
this.resolver= resolver;
setTitle(title);
setDescription("Summary packages to install/update.");
}
@Override
public void createControl(final Composite parent) {
initializeDialogUnits(parent);
final Composite composite= new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
composite.setLayout(LayoutUtils.newContentGrid(1));
{ final Label label= new Label(composite, SWT.NONE);
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
label.setText("Packages to install:");
}
this.table= new TableComposite(composite, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION
| SWT.VIRTUAL );
this.table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
this.table.viewer.setContentProvider(ArrayContentProvider.getInstance());
{ final TableViewerColumn column= this.table.addColumn("Name", SWT.LEFT,
new ColumnWeightData(60, true) );
column.setLabelProvider(new CellLabelProvider() {
@Override
public void update(final ViewerCell cell) {
final RPkgAction action= (RPkgAction) cell.getElement();
cell.setText(action.getPkg().getName());
}
});
}
{ final TableViewerColumn column= this.table.addColumn("", SWT.LEFT,
new ColumnPixelData(LayoutUtils.hintColWidth(this.table.table, 10), true, true) );
column.setLabelProvider(new CellLabelProvider() {
@Override
public void update(final ViewerCell cell) {
final RPkgAction action= (RPkgAction) cell.getElement();
cell.setText(SummaryPage.this.resolver.getReason(action.getPkg()));
}
});
}
{ final TableViewerColumn column= this.table.addColumn("Version", SWT.LEFT,
new ColumnPixelData(LayoutUtils.hintColWidth(this.table.table, 10), true, true) );
column.setLabelProvider(new CellLabelProvider() {
@Override
public void update(final ViewerCell cell) {
final RPkgAction action= (RPkgAction) cell.getElement();
cell.setText(action.getPkg().getVersion().toString());
}
});
}
{ final TableViewerColumn column= this.table.addColumn("From", SWT.LEFT,
new ColumnWeightData(40, true) );
column.setLabelProvider(new CellLabelProvider() {
@Override
public void update(final ViewerCell cell) {
final RPkgAction action= (RPkgAction) cell.getElement();
final RRepo repo= SummaryPage.this.pkgManager.getRepo(action.getRepoId());
if (repo.getPkgType() != null) {
final StringBuilder sb= new StringBuilder(repo.getName());
sb.append(" (");
sb.append(repo.getPkgType().getLabel());
sb.append(")");
cell.setText(sb.toString());
}
else {
cell.setText(repo.getName());
}
}
});
}
{ final TableViewerColumn column= this.table.addColumn("To", SWT.LEFT,
new ColumnWeightData(40, true) );
column.setLabelProvider(new CellLabelProvider() {
@Override
public void update(final ViewerCell cell) {
cell.setText(REnvLabelProvider.getSafeLabel(
((RPkgAction) cell.getElement()).getLibLocation() ));
}
});
}
this.table.table.setHeaderVisible(true);
this.table.table.setLinesVisible(true);
Dialog.applyDialogFont(composite);
setControl(composite);
}
@Override
public void setVisible(final boolean visible) {
super.setVisible(visible);
if (visible) {
updateInput();
}
}
public abstract void updateInput();
protected void setActions(final List<? extends RPkgAction> list) {
this.table.viewer.setInput(list);
}
}