18dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye/* 28dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * Copyright (C) 2011 The Android Open Source Project 38dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * 48dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 58dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * you may not use this file except in compliance with the License. 68dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * You may obtain a copy of the License at 78dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * 88dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * http://www.eclipse.org/org/documents/epl-v10.php 98dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * 108dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * Unless required by applicable law or agreed to in writing, software 118dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * distributed under the License is distributed on an "AS IS" BASIS, 128dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * See the License for the specific language governing permissions and 148dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye * limitations under the License. 158dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye */ 168dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 178dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyepackage com.android.ide.eclipse.adt.internal.editors.layout.refactoring; 188dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1912d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.FQCN_GESTURE_OVERLAY_VIEW; 2012d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.FQCN_LINEAR_LAYOUT; 2112d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.FQCN_RADIO_BUTTON; 2212d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.GESTURE_OVERLAY_VIEW; 2312d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.RADIO_GROUP; 2412d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.VIEW_INCLUDE; 250757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye 26e50549f54810c29bffc681e39d33158ab2a8f26eRaphaelimport com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate; 278dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport com.android.ide.eclipse.adt.internal.editors.layout.descriptors.ViewElementDescriptor; 284563c4e2f168df1d6c97206a4ac6444dfa2264baTor Norbyeimport com.android.ide.eclipse.adt.internal.editors.layout.gle2.CustomViewFinder; 299e6db060854d0e890190919a27a1846f50f69d1aTor Norbyeimport com.android.ide.eclipse.adt.internal.editors.layout.gre.PaletteMetadataDescriptor; 308dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport com.android.ide.eclipse.adt.internal.editors.layout.gre.ViewMetadataRepository; 31e5fa05d3e4a7d9c002dff713d88456fd9e5a7965Tor Norbyeimport com.android.ide.eclipse.adt.internal.resources.ResourceNameValidator; 328dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; 338dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport com.android.ide.eclipse.adt.internal.sdk.Sdk; 348dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport com.android.resources.ResourceType; 358dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport com.android.sdklib.IAndroidTarget; 3685e4a1a9dd133abb879ec211ce8dd385004edf22Xavier Ducrohetimport com.android.utils.Pair; 378dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 388dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport org.eclipse.core.resources.IProject; 398dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport org.eclipse.swt.SWT; 408dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport org.eclipse.swt.layout.GridData; 418dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport org.eclipse.swt.layout.GridLayout; 428dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport org.eclipse.swt.widgets.Combo; 438dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport org.eclipse.swt.widgets.Composite; 448dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport org.eclipse.swt.widgets.Label; 458dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport org.eclipse.swt.widgets.Text; 468dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 470757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbyeimport java.util.ArrayList; 48adee9788a5ac646a39b516abe4cdd1022911a3f5Tor Norbyeimport java.util.Collections; 498dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbyeimport java.util.List; 50adee9788a5ac646a39b516abe4cdd1022911a3f5Tor Norbyeimport java.util.Set; 518dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 524563c4e2f168df1d6c97206a4ac6444dfa2264baTor Norbyepublic class WrapInWizard extends VisualRefactoringWizard { 530757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye private static final String SEPARATOR_LABEL = 540757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye "----------------------------------------"; //$NON-NLS-1$ 558dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 56e50549f54810c29bffc681e39d33158ab2a8f26eRaphael public WrapInWizard(WrapInRefactoring ref, LayoutEditorDelegate editor) { 570757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye super(ref, editor); 588dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye setDefaultPageTitle("Wrap in Container"); 598dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 608dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 618dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye @Override 628dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye protected void addUserInputPages() { 630757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye WrapInRefactoring ref = (WrapInRefactoring) getRefactoring(); 640757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye String oldType = ref.getOldType(); 65e50549f54810c29bffc681e39d33158ab2a8f26eRaphael addPage(new InputPage(mDelegate.getEditor().getProject(), oldType)); 668dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 678dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 688dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye /** Wizard page which inputs parameters for the {@link WrapInRefactoring} operation */ 699e6db060854d0e890190919a27a1846f50f69d1aTor Norbye private static class InputPage extends VisualRefactoringInputPage { 708dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye private final IProject mProject; 710757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye private final String mOldType; 728dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye private Text mIdText; 738dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye private Combo mTypeCombo; 749e6db060854d0e890190919a27a1846f50f69d1aTor Norbye private List<Pair<String, ViewElementDescriptor>> mClassNames; 758dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 760757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye public InputPage(IProject project, String oldType) { 778dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye super("WrapInInputPage"); //$NON-NLS-1$ 788dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye mProject = project; 790757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye mOldType = oldType; 808dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 818dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 82ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 838dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye public void createControl(Composite parent) { 848dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye Composite composite = new Composite(parent, SWT.NONE); 858dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye composite.setLayout(new GridLayout(2, false)); 868dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 878dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye Label typeLabel = new Label(composite, SWT.NONE); 888dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye typeLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); 898dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye typeLabel.setText("Type of Container:"); 908dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 918dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye mTypeCombo = new Combo(composite, SWT.READ_ONLY); 928dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye mTypeCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 939e6db060854d0e890190919a27a1846f50f69d1aTor Norbye mTypeCombo.addSelectionListener(mSelectionValidateListener); 948dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 958dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye Label idLabel = new Label(composite, SWT.NONE); 968dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye idLabel.setText("New Layout Id:"); 978dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye idLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); 988dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 998dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye mIdText = new Text(composite, SWT.BORDER); 1008dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye mIdText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 1019e6db060854d0e890190919a27a1846f50f69d1aTor Norbye mIdText.addModifyListener(mModifyValidateListener); 1028dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 103adee9788a5ac646a39b516abe4cdd1022911a3f5Tor Norbye Set<String> exclude = Collections.singleton(VIEW_INCLUDE); 104adee9788a5ac646a39b516abe4cdd1022911a3f5Tor Norbye mClassNames = addLayouts(mProject, mOldType, mTypeCombo, exclude, true); 1050757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye mTypeCombo.select(0); 1068dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1078dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye setControl(composite); 1088dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye validatePage(); 1098dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1108dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye mTypeCombo.setFocus(); 1118dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 1128dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1139e6db060854d0e890190919a27a1846f50f69d1aTor Norbye @Override 1149e6db060854d0e890190919a27a1846f50f69d1aTor Norbye protected boolean validatePage() { 1158dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye boolean ok = true; 1168dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1178dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye String id = mIdText.getText().trim(); 1188dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1198dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye if (id.length() == 0) { 1209e6db060854d0e890190919a27a1846f50f69d1aTor Norbye setErrorMessage("ID required"); 1219e6db060854d0e890190919a27a1846f50f69d1aTor Norbye ok = false; 1228dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } else { 1238dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye // ...but if you do, it has to be valid! 1248dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye ResourceNameValidator validator = ResourceNameValidator.create(false, mProject, 1258dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye ResourceType.ID); 1268dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye String message = validator.isValid(id); 1278dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye if (message != null) { 1288dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye setErrorMessage(message); 1298dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye ok = false; 1308dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 1318dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 1328dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1330757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye int selectionIndex = mTypeCombo.getSelectionIndex(); 1349e6db060854d0e890190919a27a1846f50f69d1aTor Norbye String type = selectionIndex != -1 ? mClassNames.get(selectionIndex).getFirst() : null; 1350757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye if (type == null) { 1368dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye setErrorMessage("Select a container type"); 1370757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye ok = false; // The user has chosen a separator 1388dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 1398dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1408dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye if (ok) { 1418dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye setErrorMessage(null); 1428dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1438dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye // Record state 1448dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye WrapInRefactoring refactoring = 1458dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye (WrapInRefactoring) getRefactoring(); 1468dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye refactoring.setId(id); 1470757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye refactoring.setType(type); 1489e6db060854d0e890190919a27a1846f50f69d1aTor Norbye 1499e6db060854d0e890190919a27a1846f50f69d1aTor Norbye ViewElementDescriptor descriptor = mClassNames.get(selectionIndex).getSecond(); 1509e6db060854d0e890190919a27a1846f50f69d1aTor Norbye if (descriptor instanceof PaletteMetadataDescriptor) { 1519e6db060854d0e890190919a27a1846f50f69d1aTor Norbye PaletteMetadataDescriptor paletteDescriptor = 1529e6db060854d0e890190919a27a1846f50f69d1aTor Norbye (PaletteMetadataDescriptor) descriptor; 1539e6db060854d0e890190919a27a1846f50f69d1aTor Norbye String initializedAttributes = paletteDescriptor.getInitializedAttributes(); 1549e6db060854d0e890190919a27a1846f50f69d1aTor Norbye refactoring.setInitializedAttributes(initializedAttributes); 1559e6db060854d0e890190919a27a1846f50f69d1aTor Norbye } else { 1569e6db060854d0e890190919a27a1846f50f69d1aTor Norbye refactoring.setInitializedAttributes(null); 1579e6db060854d0e890190919a27a1846f50f69d1aTor Norbye } 1588dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 1598dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1608dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye setPageComplete(ok); 1618dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye return ok; 1628dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 1638dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 1648dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1659e6db060854d0e890190919a27a1846f50f69d1aTor Norbye static List<Pair<String, ViewElementDescriptor>> addLayouts(IProject project, 1669e6db060854d0e890190919a27a1846f50f69d1aTor Norbye String oldType, Combo combo, 167adee9788a5ac646a39b516abe4cdd1022911a3f5Tor Norbye Set<String> exclude, boolean addGestureOverlay) { 1689e6db060854d0e890190919a27a1846f50f69d1aTor Norbye List<Pair<String, ViewElementDescriptor>> classNames = 1699e6db060854d0e890190919a27a1846f50f69d1aTor Norbye new ArrayList<Pair<String, ViewElementDescriptor>>(); 1700757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye 1719e6db060854d0e890190919a27a1846f50f69d1aTor Norbye if (oldType != null && oldType.equals(FQCN_RADIO_BUTTON)) { 1720757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(RADIO_GROUP); 1730757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye // NOT a fully qualified name since android widgets do not include the package 1749e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.of(RADIO_GROUP, (ViewElementDescriptor) null)); 1750757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye 1760757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(SEPARATOR_LABEL); 1779e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.<String,ViewElementDescriptor>of(null, null)); 1780757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye } 1790757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye 1804563c4e2f168df1d6c97206a4ac6444dfa2264baTor Norbye Pair<List<String>,List<String>> result = CustomViewFinder.findViews(project, true); 1810757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye List<String> customViews = result.getFirst(); 1820757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye List<String> thirdPartyViews = result.getSecond(); 1830757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye if (customViews.size() > 0) { 1840757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye for (String view : customViews) { 1850757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(view); 1869e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.of(view, (ViewElementDescriptor) null)); 1870757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye } 1880757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(SEPARATOR_LABEL); 1899e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.<String,ViewElementDescriptor>of(null, null)); 1900757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye } 1918dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 1928dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye // Populate type combo 1938dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye Sdk currentSdk = Sdk.getCurrent(); 1948dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye if (currentSdk != null) { 1958dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye IAndroidTarget target = currentSdk.getTarget(project); 1968dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye if (target != null) { 1978dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye AndroidTargetData targetData = currentSdk.getTargetData(target); 1988dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye if (targetData != null) { 1998dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye ViewMetadataRepository repository = ViewMetadataRepository.get(); 2008dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye List<Pair<String,List<ViewElementDescriptor>>> entries = 2018dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye repository.getPaletteEntries(targetData, false, true); 2028dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye // Find the layout category - it contains LinearLayout 2038dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye List<ViewElementDescriptor> layoutDescriptors = null; 2048dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 2058dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye search: for (Pair<String,List<ViewElementDescriptor>> pair : entries) { 2068dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye List<ViewElementDescriptor> list = pair.getSecond(); 2078dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye for (ViewElementDescriptor d : list) { 2088dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye if (d.getFullClassName().equals(FQCN_LINEAR_LAYOUT)) { 2098dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye // Found - use this list 2108dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye layoutDescriptors = list; 2118dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye break search; 2128dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2138dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2148dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2158dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye if (layoutDescriptors != null) { 2168dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye for (ViewElementDescriptor d : layoutDescriptors) { 2178dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye String className = d.getFullClassName(); 218adee9788a5ac646a39b516abe4cdd1022911a3f5Tor Norbye if (exclude == null || !exclude.contains(className)) { 2190757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(d.getUiName()); 2209e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.of(className, d)); 2218dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2228dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2238dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 2248dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye // SWT does not support separators in combo boxes 2258dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye combo.add(SEPARATOR_LABEL); 2260757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye classNames.add(null); 2270757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye 2280757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye if (thirdPartyViews.size() > 0) { 2290757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye for (String view : thirdPartyViews) { 2300757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(view); 2319e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.of(view, (ViewElementDescriptor) null)); 2320757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye } 2330757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(SEPARATOR_LABEL); 2340757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye classNames.add(null); 2350757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye } 2360757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye 2370757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye if (addGestureOverlay) { 2380757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(GESTURE_OVERLAY_VIEW); 2399e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.<String, ViewElementDescriptor> of( 2409e6db060854d0e890190919a27a1846f50f69d1aTor Norbye FQCN_GESTURE_OVERLAY_VIEW, null)); 2410757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye 2420757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(SEPARATOR_LABEL); 2439e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.<String,ViewElementDescriptor>of(null, null)); 2440757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye } 2458dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2468dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 2478dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye // Now add ALL known layout descriptors in case the user has 2488dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye // a special case 2498dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye layoutDescriptors = 2508dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye targetData.getLayoutDescriptors().getLayoutDescriptors(); 2518dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye 2528dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye for (ViewElementDescriptor d : layoutDescriptors) { 2538dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye String className = d.getFullClassName(); 25442b2f34604a3f8e8ac191831d8f01a0498760d38Tor Norbye if (exclude == null || !exclude.contains(className)) { 2550757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye combo.add(d.getUiName()); 2569e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.of(className, d)); 2578dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2588dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2598dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2608dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } 2618dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye } else { 2628dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye combo.add("SDK not initialized"); 2639e6db060854d0e890190919a27a1846f50f69d1aTor Norbye classNames.add(Pair.<String,ViewElementDescriptor>of(null, null)); 2640757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye } 2650757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye 2660757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye return classNames; 2670757ce4af2764e4dd564acc0b1a013e910abc8daTor Norbye } 2688dc4366bbaad39d56e1c2ded4046c86a95a17666Tor Norbye} 269