RTSDK : new project from git wizard's UX modified
authordaeryong.park <bdragon.park@samsung.com>
Mon, 27 Mar 2017 07:32:25 +0000 (16:32 +0900)
committerdaeryong.park <bdragon.park@samsung.com>
Mon, 27 Mar 2017 07:32:25 +0000 (16:32 +0900)
- Change UI with dynamic radio button instead of filtered tree on
RepositoryLocationPage

Change-Id: I49bdabdeef0b973b406cb4dbb265ce50c3237894
Signed-off-by: daeryong.park <bdragon.park@samsung.com>
rt-ide/tizen.rt.product.plugin/src/org/eclipse/egit/ui/internal/clone/AbstractRtGitCloneWizard.java
rt-ide/tizen.rt.product.plugin/src/org/eclipse/egit/ui/internal/clone/RtRepositoryLocationPage.java [new file with mode: 0644]

index 874f1bb..6734066 100644 (file)
@@ -183,7 +183,9 @@ public abstract class AbstractRtGitCloneWizard extends Wizard {
                 Activator.logError(e.getLocalizedMessage(), e);\r
             }\r
         else\r
-            addPage(new RepositoryLocationPage(cloneSourceProviders));\r
+            /* Tizen */\r
+            addPage(new RtRepositoryLocationPage(cloneSourceProviders));\r
+            /* ===== */\r
     }\r
 \r
     private boolean hasSingleCloneSourceProviderWithFixedLocation(\r
diff --git a/rt-ide/tizen.rt.product.plugin/src/org/eclipse/egit/ui/internal/clone/RtRepositoryLocationPage.java b/rt-ide/tizen.rt.product.plugin/src/org/eclipse/egit/ui/internal/clone/RtRepositoryLocationPage.java
new file mode 100644 (file)
index 0000000..c7e9b1c
--- /dev/null
@@ -0,0 +1,242 @@
+/*******************************************************************************
+ * Copyright (c) 2012 SAP AG.
+ * 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:
+ *    Stefan Lay (SAP AG) - initial implementation
+ *******************************************************************************/
+package org.eclipse.egit.ui.internal.clone;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.internal.UIText;
+import org.eclipse.egit.ui.internal.clone.GitCloneSourceProviderExtension.CloneSourceProvider;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Displays the possible locations of git repositories
+ * <p>
+ * Original source : {@link RepositoryLocationPage}
+ * </p>
+ */
+public class RtRepositoryLocationPage extends WizardPage {
+
+    private final List<CloneSourceProvider> repositoryImports;
+
+    // local cache for contributed WizardPages
+    private Map<CloneSourceProvider, WizardPage> resolvedWizardPages;
+
+    /* Tizen */
+    // private TreeViewer tv;
+    private Button selectedRadioButton;
+    /* ===== */
+
+    /**
+     * @param cloneSourceProvider all contributed CloneSourceProviders
+     */
+    public RtRepositoryLocationPage(List<CloneSourceProvider> cloneSourceProvider) {
+        super(RtRepositoryLocationPage.class.getName());
+        this.repositoryImports = cloneSourceProvider;
+        resolvedWizardPages = new HashMap<CloneSourceProvider, WizardPage>();
+        setTitle(UIText.RepositoryLocationPage_title);
+        setMessage(UIText.RepositoryLocationPage_info);
+    }
+
+    @Override
+    public void createControl(Composite parent) {
+        Composite main = new Composite(parent, SWT.NONE);
+
+        /* Tizen - Remove FilteredTree */
+        RowLayout layout = new RowLayout(SWT.VERTICAL);
+        layout.marginHeight = 5;
+        layout.marginWidth = 10;
+        layout.fill = true;
+        main.setLayout(layout);
+
+        // GridLayoutFactory.fillDefaults().numColumns(2).margins(0, 0)
+        // .applyTo(main);
+        // GridDataFactory.fillDefaults().grab(true, true).applyTo(main);
+        // // use a filtered tree
+        // FilteredTree tree = new FilteredTree(main, SWT.SINGLE | SWT.BORDER
+        // | SWT.H_SCROLL | SWT.V_SCROLL, new PatternFilter(), true);
+        //
+        // tv = tree.getViewer();
+        // GridDataFactory.fillDefaults().grab(true, true).applyTo(tree);
+        //
+        // tv.setContentProvider(new RtRepositoryLocationContentProvider());
+        //
+        // tv.setLabelProvider(new RtRepositoryLocationLabelProvider());
+        //
+        // tv.addSelectionChangedListener(new ISelectionChangedListener() {
+        //
+        // @Override
+        // public void selectionChanged(SelectionChangedEvent event) {
+        // checkPage();
+        // }
+        // });
+        //
+        // tv.addDoubleClickListener(new IDoubleClickListener() {
+        //
+        // @Override
+        // public void doubleClick(DoubleClickEvent event) {
+        // checkPage();
+        // if (isPageComplete())
+        // getContainer().showPage(getNextPage());
+        // }
+        // });
+        //
+        // tv.setInput(repositoryImports);
+
+        createRadioButtonsArea(main);
+
+        /* ===== */
+
+        setControl(main);
+    }
+
+    /* Tizen - Add methods */
+    private void createRadioButtonsArea(Composite parent) {
+        if (repositoryImports != null && repositoryImports.size() > 0) {
+            for (int i = 0; i < repositoryImports.size(); i++) {
+                CloneSourceProvider provider = repositoryImports.get(i);
+                Button btn = createRadioButton(parent, provider);
+                // first radio selection
+                if (i == 0) {
+                    btn.setSelection(true);
+                    selectedRadioButton = btn;
+                    checkPage();
+                }
+            }
+        }
+    }
+
+    private Button createRadioButton(Composite parent, CloneSourceProvider provider) {
+        final Button btn = new Button(parent, SWT.RADIO);
+        btn.setText(provider.getLabel());
+        btn.setImage(provider.getImage().createImage());
+        btn.setBackground(parent.getBackground());
+        btn.setData(provider);
+        btn.addSelectionListener(new SelectionListener() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                selectedRadioButton = btn;
+                checkPage();
+            }
+
+            @Override
+            public void widgetDefaultSelected(SelectionEvent e) {
+                // Do nothing
+            }
+        });
+        return btn;
+    }
+    /* ===== */
+
+    private void checkPage() {
+        setErrorMessage(null);
+        boolean complete = false;
+        /* Tizen - modified */
+        // IStructuredSelection selection = (IStructuredSelection) tv
+        // .getSelection();
+        // if (selection.size() == 1) {
+        // Object element = selection.getFirstElement();
+        // if (element instanceof CloneSourceProvider) {
+        // CloneSourceProvider repositoryImport = (CloneSourceProvider) element;
+        // if (repositoryImport.equals(CloneSourceProvider.LOCAL)
+        // || repositoryImport.hasFixLocation())
+        // complete = true;
+        // } else if (element instanceof RepositoryServerInfo) {
+        // complete = true;
+        // }
+        // }
+        if (selectedRadioButton != null) {
+            Object element = selectedRadioButton.getData();
+            if (element instanceof CloneSourceProvider) {
+                CloneSourceProvider repositoryImport = (CloneSourceProvider) element;
+                if (repositoryImport.equals(CloneSourceProvider.LOCAL)
+                        || repositoryImport.hasFixLocation())
+                    complete = true;
+            }
+            // Not occurred
+            // else if (element instanceof RepositoryServerInfo) {
+            // complete = true;
+            // }
+        }
+        /* ===== */
+
+        setPageComplete(complete);
+    }
+
+    @Override
+    public IWizardPage getNextPage() {
+        /* Tizen - modified */
+        // IStructuredSelection selection = (IStructuredSelection) tv
+        // .getSelection();
+        //
+        // if (selection.size() == 1) {
+        // Object element = selection.getFirstElement();
+        // if (element instanceof CloneSourceProvider) {
+        // return getNextPage((CloneSourceProvider) element);
+        // } else if (element instanceof RepositoryServerInfo) {
+        // Object parent = ((ITreeContentProvider) tv.getContentProvider())
+        // .getParent(element);
+        // if (parent instanceof CloneSourceProvider)
+        // return getNextPage((CloneSourceProvider) parent);
+        // }
+        // }
+
+        if (selectedRadioButton != null) {
+            Object element = selectedRadioButton.getData();
+            if (element instanceof CloneSourceProvider) {
+                return getNextPage((CloneSourceProvider) element);
+            }
+            // Not occurred
+            // else if (element instanceof RepositoryServerInfo) {
+            // Object parent = ((ITreeContentProvider) tv.getContentProvider())
+            // .getParent(element);
+            // if (parent instanceof CloneSourceProvider)
+            // return getNextPage((CloneSourceProvider) parent);
+            // }
+        }
+        /* ===== */
+        return null;
+    }
+
+    private IWizardPage getNextPage(CloneSourceProvider repositoryImport) {
+        if (repositoryImport.equals(CloneSourceProvider.LOCAL))
+            return getWizard().getNextPage(this);
+        else
+            return getWizardPage(repositoryImport);
+    }
+
+    private WizardPage getWizardPage(CloneSourceProvider repositoryImport) {
+        WizardPage nextPage;
+        nextPage = resolvedWizardPages.get(repositoryImport);
+        if (nextPage == null) {
+            try {
+                nextPage = repositoryImport.getRepositorySearchPage();
+            } catch (CoreException e) {
+                Activator.error(e.getLocalizedMessage(), e);
+            }
+            if (nextPage != null) {
+                nextPage.setWizard(getWizard());
+                resolvedWizardPages.put(repositoryImport, nextPage);
+            }
+        }
+        return nextPage;
+    }
+}