blob: 746c9d05466670ce2cc71d939b1f776e64999efe [file] [log] [blame]
/*
* 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;
}
}