| /* |
| * Copyright 2000-2009 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.jetbrains.idea.svn.dialogs; |
| |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.ui.DialogWrapper; |
| import com.intellij.openapi.ui.MultiLineLabelUI; |
| import com.intellij.util.ArrayUtil; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.idea.svn.SvnBundle; |
| import org.tmatesoft.svn.core.SVNException; |
| import org.tmatesoft.svn.core.SVNURL; |
| |
| import javax.swing.*; |
| import java.awt.*; |
| import java.awt.event.*; |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| |
| public class AddRepositoryLocationDialog extends DialogWrapper { |
| private final List<String> myPreviousLocations; |
| private JComboBox myCombo; |
| private String mySelected; |
| private JTextField myComboField; |
| |
| public AddRepositoryLocationDialog(final Project project, final List<String> values) { |
| super(project, true); |
| myPreviousLocations = new ArrayList<String>(values); |
| Collections.sort(myPreviousLocations); |
| |
| setTitle(getTitle()); |
| init(); |
| myComboField.setText(initText()); |
| } |
| |
| @Override |
| public String getTitle() { |
| return SvnBundle.message("repository.browser.add.location.title"); |
| } |
| |
| protected String initText() { |
| return "http://"; |
| } |
| |
| @Override |
| public JComponent getPreferredFocusedComponent() { |
| return myCombo; |
| } |
| |
| protected JComponent createCenterPanel() { |
| final JLabel selectText = new JLabel(SvnBundle.message("repository.browser.add.location.prompt")); |
| selectText.setUI(new MultiLineLabelUI()); |
| |
| final JPanel mainPanel = new JPanel(new GridBagLayout()); |
| final GridBagConstraints gb = |
| new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0); |
| |
| mainPanel.add(selectText, gb); |
| |
| ++ gb.gridy; |
| |
| myCombo = new JComboBox(ArrayUtil.toObjectArray(myPreviousLocations)); |
| myCombo.setEditable(true); |
| myCombo.setMinimumSize(new Dimension(250, 20)); |
| gb.fill = GridBagConstraints.HORIZONTAL; |
| mainPanel.add(myCombo, gb); |
| gb.fill = GridBagConstraints.NONE; |
| |
| myComboField = (JTextField)myCombo.getEditor().getEditorComponent(); |
| myComboField.addInputMethodListener(new InputMethodListener() { |
| public void inputMethodTextChanged(final InputMethodEvent event) { |
| validateMe(); |
| } |
| |
| public void caretPositionChanged(final InputMethodEvent event) { |
| validateMe(); |
| } |
| }); |
| myComboField.addKeyListener(new KeyListener() { |
| public void keyTyped(final KeyEvent e) { |
| validateMe(); |
| } |
| |
| public void keyPressed(final KeyEvent e) { |
| validateMe(); |
| } |
| |
| public void keyReleased(final KeyEvent e) { |
| validateMe(); |
| } |
| }); |
| |
| myCombo.addActionListener(new ActionListener() { |
| public void actionPerformed(final ActionEvent e) { |
| validateMe(); |
| } |
| }); |
| validateMe(); |
| |
| final JPanel wrapper = new JPanel(new GridBagLayout()); |
| wrapper.add(mainPanel, new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, |
| new Insets(0,0,0,0), 0,0)); |
| wrapper.setPreferredSize(new Dimension(400, 70)); |
| return wrapper; |
| } |
| |
| private void validateMe() { |
| final String inputString = myComboField.getText(); |
| setOKActionEnabled(urlValid(inputString)); |
| } |
| |
| private boolean urlValid(final String inputString) { |
| if (inputString == null) { |
| return false; |
| } |
| try { |
| final SVNURL svnurl = SVNURL.parseURIDecoded(inputString.trim()); |
| return svnurl != null; |
| } catch (SVNException e) { |
| // |
| } |
| return false; |
| } |
| |
| @Override |
| protected void doOKAction() { |
| mySelected = myComboField.getText().trim(); |
| super.doOKAction(); |
| } |
| |
| @NotNull |
| @Override |
| protected Action[] createActions() { |
| return new Action[]{getOKAction(), getCancelAction()}; |
| } |
| |
| public String getSelected() { |
| return mySelected; |
| } |
| } |