package com.mobilesorcery.sdk.ui.internal.actions;
import java.beans.PropertyChangeEvent;
import java.text.MessageFormat;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import com.mobilesorcery.sdk.core.IBuildConfiguration;
import com.mobilesorcery.sdk.core.MoSyncProject;
import com.mobilesorcery.sdk.ui.BuildConfigurationsContentProvider;
import com.mobilesorcery.sdk.ui.BuildConfigurationsLabelProvider;
import com.mobilesorcery.sdk.ui.MosyncUIPlugin;
public class ChangeBuildConfigWidget extends MoSyncProjectWidget implements ISelectionChangedListener {
private ComboViewer combo;
@Override
public boolean shouldUpdateProject(PropertyChangeEvent event) {
// Project changed
return MosyncUIPlugin.CURRENT_PROJECT_CHANGED == event.getPropertyName() || MoSyncProject.BUILD_CONFIGURATION_CHANGED == event.getPropertyName();
}
@Override
public Control createControl(Composite parent) {
attachListeners();
ComboViewer ui = new ComboViewer(parent, SWT.READ_ONLY);
ui.addSelectionChangedListener(this);
this.combo = ui;
updateUI();
return ui.getControl();
}
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
String cfgId = (String) selection.getFirstElement();
if (cfgId != null) {
project.setActiveBuildConfiguration(cfgId);
}
}
@Override
protected void noProjectSelected() {
combo.getCombo().setItems( new String[] {"No project selected"} );
combo.getCombo().select(0);
}
@Override
public void updateUI() {
boolean activeCombo = project != null && project.areBuildConfigurationsSupported() && !project.getBuildConfigurations().isEmpty();
if (activeCombo) {
combo.setContentProvider(new BuildConfigurationsContentProvider(project));
combo.setLabelProvider(new BuildConfigurationsLabelProvider(project, false));
combo.setInput(project);
IBuildConfiguration cfg = project.getActiveBuildConfiguration();
combo.setSelection(cfg == null ? new StructuredSelection() : new StructuredSelection(cfg.getId()));
combo.getControl().setToolTipText(MessageFormat.format("Set configuration for project {0}", project.getName()));
} else {
noProjectSelected();
}
combo.getControl().setEnabled(activeCombo);
}
}