package com.mobilesorcery.sdk.ui.internal.actions; import java.beans.PropertyChangeEvent; import java.text.MessageFormat; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import com.mobilesorcery.sdk.core.MoSyncProject; import com.mobilesorcery.sdk.core.MoSyncTool; import com.mobilesorcery.sdk.profiles.IDeviceFilter; import com.mobilesorcery.sdk.profiles.filter.CompositeDeviceFilter; import com.mobilesorcery.sdk.ui.MosyncUIPlugin; import com.mobilesorcery.sdk.ui.PlatformSelectionComposite; import com.mobilesorcery.sdk.ui.ProfileLabelProvider; import com.mobilesorcery.sdk.ui.UIUtils; public class ChangeProfileWidget extends MoSyncProjectWidget { private Button profileButton; private ProfileLabelProvider lp; @Override protected Control createControl(Composite parent) { lp = new ProfileLabelProvider(SWT.NONE); lp.setImageSize(new Point(12, 12)); attachListeners(); final Composite dummy = new Composite(parent, SWT.NONE); GridLayout layout = UIUtils.newPrefsLayout(1); dummy.setLayout(layout); GridData dummyData = new GridData(UIUtils.getDefaultFieldSize(), SWT.DEFAULT); dummy.setLayoutData(dummyData); Combo justToGetTheHeight = new Combo(dummy, SWT.READ_ONLY); int height = justToGetTheHeight.computeSize(SWT.DEFAULT, SWT.DEFAULT).y + 2; Listener listener = new Listener() { @Override public void handleEvent(Event event) { if (event.type == SWT.Selection) { PlatformSelectionComposite psc = new PlatformSelectionComposite(dummy, SWT.SEARCH | SWT.BACKGROUND); psc.setProject(project); psc.show(SWT.NONE); } } }; profileButton = new Button(dummy, SWT.PUSH); profileButton.setLayoutData(new GridData(SWT.DEFAULT, height)); profileButton.addListener(SWT.Selection, listener); profileButton.setAlignment(SWT.CENTER); GridData profileButtonData = new GridData(UIUtils.getDefaultFieldSize(), height); profileButtonData.verticalIndent = 2; profileButton.setLayoutData(profileButtonData); profileButton.setFont(justToGetTheHeight.getFont()); dummy.pack(); justToGetTheHeight.dispose(); updateUI(true); return dummy; } @Override public boolean shouldUpdateProject(PropertyChangeEvent event) { String prop = event.getPropertyName(); return MosyncUIPlugin.CURRENT_PROJECT_CHANGED == prop || IDeviceFilter.FILTER_CHANGED == prop || CompositeDeviceFilter.FILTER_ADDED == prop || CompositeDeviceFilter.FILTER_REMOVED == prop || MoSyncProject.PROFILE_MANAGER_TYPE_KEY == prop || MoSyncProject.TARGET_PROFILE_CHANGED == prop; } @Override public void updateUI() { updateUI(false); } public void updateUI(boolean force) { String projectName = project == null ? "" : project.getName(); Image image = project == null ? null : lp.getImage(project.getTargetProfile().getVendor()); profileButton.setImage(image); String profileName = project == null ? "No project selected" : MoSyncTool.toString(project.getTargetProfile()); profileButton.setText(profileName); profileButton.setToolTipText(MessageFormat.format("Set active profile for project {0}", projectName)); profileButton.setEnabled(project != null); } }