Honor workbench setting for Dialog font
[egit/spearce.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / repository / ConfigureUriPage.java
blob34c002c61b06f5d58d67c6cb6330dd4405007af2
1 /*******************************************************************************
2 * Copyright (c) 2010 SAP AG.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
8 * Contributors:
9 * Mathias Kinzler (SAP AG) - initial implementation
10 *******************************************************************************/
11 package org.eclipse.egit.ui.internal.repository;
13 import java.net.URISyntaxException;
14 import java.util.ArrayList;
15 import java.util.List;
17 import org.eclipse.egit.ui.UIText;
18 import org.eclipse.jface.dialogs.Dialog;
19 import org.eclipse.jface.layout.GridDataFactory;
20 import org.eclipse.jface.viewers.BaseLabelProvider;
21 import org.eclipse.jface.viewers.ISelectionChangedListener;
22 import org.eclipse.jface.viewers.IStructuredContentProvider;
23 import org.eclipse.jface.viewers.IStructuredSelection;
24 import org.eclipse.jface.viewers.ITableLabelProvider;
25 import org.eclipse.jface.viewers.SelectionChangedEvent;
26 import org.eclipse.jface.viewers.TableViewer;
27 import org.eclipse.jface.viewers.Viewer;
28 import org.eclipse.jface.window.Window;
29 import org.eclipse.jface.wizard.WizardDialog;
30 import org.eclipse.jface.wizard.WizardPage;
31 import org.eclipse.jgit.transport.RemoteConfig;
32 import org.eclipse.jgit.transport.URIish;
33 import org.eclipse.swt.SWT;
34 import org.eclipse.swt.events.SelectionAdapter;
35 import org.eclipse.swt.events.SelectionEvent;
36 import org.eclipse.swt.graphics.Image;
37 import org.eclipse.swt.layout.GridLayout;
38 import org.eclipse.swt.widgets.Button;
39 import org.eclipse.swt.widgets.Composite;
40 import org.eclipse.swt.widgets.Label;
41 import org.eclipse.swt.widgets.Text;
42 import org.eclipse.swt.widgets.ToolBar;
43 import org.eclipse.swt.widgets.ToolItem;
45 /**
48 public class ConfigureUriPage extends WizardPage {
50 private final boolean myFetchMode;
52 Text uriText;
54 TableViewer tv;
56 private URIish myUri;
58 private final List<URIish> myUris = new ArrayList<URIish>();
60 private final RemoteConfig myConfig;
62 /**
63 * @param fetchMode
65 public ConfigureUriPage(boolean fetchMode) {
66 this(fetchMode, null);
69 /**
70 * @param fetchMode
71 * @param remoteConfig
74 public ConfigureUriPage(boolean fetchMode, RemoteConfig remoteConfig) {
76 super(ConfigureUriPage.class.getName());
78 myFetchMode = fetchMode;
79 myConfig = remoteConfig;
80 // myRepository = repository;
82 if (fetchMode)
83 setTitle(UIText.ConfigureUriPage_ConfigureFetch_pagetitle);
84 else
85 setTitle(UIText.ConfigureUriPage_ConfigurePush_pagetitle);
88 public void createControl(Composite parent) {
90 Composite main = new Composite(parent, SWT.NONE);
91 GridDataFactory.fillDefaults().grab(true, true).applyTo(main);
93 if (myFetchMode) {
94 main.setLayout(new GridLayout(3, false));
95 // we only use the first URI
96 Label uriLabel = new Label(main, SWT.NONE);
97 uriLabel.setText(UIText.ConfigureUriPage_FetchUri_label);
98 uriText = new Text(main, SWT.BORDER);
99 // manual entry is dangerous, as the validate may wait forever
100 uriText.setEnabled(false);
102 Button change = new Button(main, SWT.PUSH);
103 change.setText(UIText.ConfigureUriPage_Change_button);
104 change.addSelectionListener(new SelectionAdapter() {
106 @Override
107 public void widgetSelected(SelectionEvent e) {
108 SelectUriWiazrd slwz = new SelectUriWiazrd(false, uriText
109 .getText());
110 WizardDialog dlg = new WizardDialog(getShell(), slwz);
111 if (dlg.open() == Window.OK) {
112 URIish uri = slwz.getUri();
113 uriText.setText(uri.toPrivateString());
114 checkPage();
120 if (myConfig != null && !myConfig.getURIs().isEmpty()) {
122 uriText.setText(myConfig.getURIs().get(0).toPrivateString());
123 checkPage();
124 } else {
125 setPageComplete(false);
128 GridDataFactory.fillDefaults().grab(true, false).applyTo(uriText);
130 } else {
131 main.setLayout(new GridLayout(1, false));
132 tv = new TableViewer(main);
134 GridDataFactory.fillDefaults().grab(true, true).applyTo(
135 tv.getTable());
137 tv.setLabelProvider(new LabelProvider());
138 tv.setContentProvider(new ContentProvider());
140 ToolBar tb = new ToolBar(main, SWT.HORIZONTAL);
141 ToolItem add = new ToolItem(tb, SWT.PUSH);
142 add.setText(UIText.ConfigureUriPage_Add_button);
144 add.addSelectionListener(new SelectionAdapter() {
146 @Override
147 public void widgetSelected(SelectionEvent e) {
148 SelectUriWiazrd slwz = new SelectUriWiazrd(false);
149 WizardDialog dlg = new WizardDialog(getShell(), slwz);
150 if (dlg.open() == Window.OK) {
151 URIish uri = slwz.getUri();
152 if (!myUris.contains(uri))
153 myUris.add(uri);
154 tv.setInput(myUris);
155 checkPage();
161 final ToolItem remove = new ToolItem(tb, SWT.PUSH);
162 remove.setText(UIText.ConfigureUriPage_Remove_button);
163 remove.setEnabled(false);
165 remove.addSelectionListener(new SelectionAdapter() {
167 @Override
168 public void widgetSelected(SelectionEvent e) {
169 for (Object o : ((IStructuredSelection) tv.getSelection())
170 .toArray())
171 myUris.remove(o);
172 tv.setInput(myUris);
173 checkPage();
178 tv.addSelectionChangedListener(new ISelectionChangedListener() {
180 public void selectionChanged(SelectionChangedEvent event) {
181 remove.setEnabled(!tv.getSelection().isEmpty());
186 if (myConfig != null && !myConfig.getPushURIs().isEmpty()) {
188 for (URIish uri : myConfig.getPushURIs())
189 myUris.add(uri);
190 tv.setInput(myUris);
191 checkPage();
192 } else {
193 setPageComplete(false);
197 Dialog.applyDialogFont(main);
198 setControl(main);
202 private void checkPage() {
203 try {
204 setErrorMessage(null);
206 if (myFetchMode) {
207 if (uriText.getText().equals("")) { //$NON-NLS-1$
208 setErrorMessage(UIText.ConfigureUriPage_MissingUri_message);
209 return;
211 try {
212 myUri = new URIish(uriText.getText());
213 } catch (URISyntaxException e) {
214 setErrorMessage(UIText.ConfigureUriPage_ParsingProblem_message);
215 return;
218 } else {
219 if (myUris.isEmpty()) {
220 setErrorMessage(UIText.ConfigureUriPage_MissingUris_message);
221 return;
225 } finally {
226 setPageComplete(getErrorMessage() == null);
230 private static final class ContentProvider implements
231 IStructuredContentProvider {
233 public Object[] getElements(Object inputElement) {
234 return ((List) inputElement).toArray();
237 public void dispose() {
238 // nothing
241 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
242 // nothing
247 private static final class LabelProvider extends BaseLabelProvider
248 implements ITableLabelProvider {
250 public Image getColumnImage(Object element, int columnIndex) {
251 return null;
254 public String getColumnText(Object element, int columnIndex) {
255 return ((URIish) element).toPrivateString();
261 * @return the URI
263 public URIish getUri() {
264 if (myFetchMode) {
265 return myUri;
267 throw new IllegalStateException();
271 * @return the URI
273 public List<URIish> getUris() {
274 if (myFetchMode) {
275 throw new IllegalStateException();
277 return myUris;