update copyright
[fedora-idea.git] / xml / impl / src / com / intellij / ide / browsers / WebBrowsersPanel.java
blob55608f5c4b11ced5fd4136fe34a90ea64ec1e7bf
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.ide.browsers;
18 import com.intellij.ide.IdeBundle;
19 import com.intellij.openapi.fileChooser.FileChooserDescriptor;
20 import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
21 import com.intellij.openapi.ui.TextFieldWithBrowseButton;
22 import com.intellij.openapi.util.Pair;
23 import com.intellij.openapi.util.SystemInfo;
24 import com.intellij.openapi.options.ShowSettingsUtil;
25 import com.intellij.util.containers.HashMap;
26 import com.intellij.xml.XmlBundle;
27 import org.jetbrains.annotations.NotNull;
29 import javax.swing.*;
30 import java.awt.*;
31 import java.awt.event.ActionEvent;
32 import java.awt.event.ActionListener;
33 import java.util.Map;
35 /**
36 * @author spleaner
38 public class WebBrowsersPanel extends JPanel {
39 private final JPanel mySettingsPanel;
40 private Map<BrowsersConfiguration.BrowserFamily, Pair<JCheckBox, TextFieldWithBrowseButton>> myBrowserSettingsMap = new HashMap<BrowsersConfiguration.BrowserFamily, Pair<JCheckBox, TextFieldWithBrowseButton>>();
41 private final BrowsersConfiguration myConfiguration;
43 public WebBrowsersPanel(final BrowsersConfiguration configuration) {
44 setLayout(new BorderLayout());
46 myConfiguration = configuration;
48 mySettingsPanel = new JPanel();
49 mySettingsPanel.setLayout(new BoxLayout(mySettingsPanel, BoxLayout.Y_AXIS));
51 add(mySettingsPanel, BorderLayout.NORTH);
53 createIndividualSettings(BrowsersConfiguration.BrowserFamily.FIREFOX, mySettingsPanel);
54 createIndividualSettings(BrowsersConfiguration.BrowserFamily.EXPLORER, mySettingsPanel);
55 createIndividualSettings(BrowsersConfiguration.BrowserFamily.SAFARI, mySettingsPanel);
56 createIndividualSettings(BrowsersConfiguration.BrowserFamily.CHROME, mySettingsPanel);
57 createIndividualSettings(BrowsersConfiguration.BrowserFamily.OPERA, mySettingsPanel);
60 private void createIndividualSettings(@NotNull final BrowsersConfiguration.BrowserFamily family, final JPanel container) {
61 final JPanel result = new JPanel();
63 result.setBorder(BorderFactory.createTitledBorder(family.getName()));
65 result.setLayout(new BoxLayout(result, BoxLayout.Y_AXIS));
67 final TextFieldWithBrowseButton field = new TextFieldWithBrowseButton();
68 field.setEditable(false);
70 FileChooserDescriptor descriptor = SystemInfo.isMac
71 ? FileChooserDescriptorFactory.createSingleFolderDescriptor()
72 : FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor();
73 field.addBrowseFolderListener(IdeBundle.message("title.select.path.to.browser"), null, null, descriptor);
75 result.add(field);
77 final JPanel bottomPanel = new JPanel(new BorderLayout());
79 final JPanel activePanel = new JPanel();
80 activePanel.setLayout(new BoxLayout(activePanel, BoxLayout.X_AXIS));
82 final JCheckBox checkBox = new JCheckBox();
83 activePanel.add(checkBox);
84 final JLabel label = new JLabel(XmlBundle.message("browser.active"));
85 label.setLabelFor(checkBox);
86 activePanel.add(label);
87 bottomPanel.add(activePanel, BorderLayout.WEST);
89 final JButton resetButton = new JButton(XmlBundle.message("browser.default.settings"));
90 resetButton.addActionListener(new ActionListener() {
91 public void actionPerformed(final ActionEvent e) {
92 field.getTextField().setText(family.getExecutionPath());
94 });
96 JPanel buttonsPanel = new JPanel(new BorderLayout());
97 if (family.createBrowserSpecificSettings() != null) {
98 final JButton editSettingsButton = new JButton(XmlBundle.message("button.text.settings"));
99 editSettingsButton.addActionListener(new ActionListener() {
100 public void actionPerformed(ActionEvent e) {
101 editSettings(family);
104 buttonsPanel.add(editSettingsButton, BorderLayout.CENTER);
106 buttonsPanel.add(resetButton, BorderLayout.EAST);
108 bottomPanel.add(buttonsPanel, BorderLayout.EAST);
110 result.add(bottomPanel);
111 container.add(result);
113 final WebBrowserSettings settings = myConfiguration.getBrowserSettings(family);
114 field.getTextField().setText(settings.getPath());
115 checkBox.setSelected(settings.isActive());
117 myBrowserSettingsMap.put(family, Pair.create(checkBox, field));
120 private void editSettings(BrowsersConfiguration.BrowserFamily family) {
121 BrowserSpecificSettings settings = myConfiguration.getBrowserSettings(family).getBrowserSpecificSettings();
122 if (settings == null) {
123 settings = family.createBrowserSpecificSettings();
126 if (ShowSettingsUtil.getInstance().editConfigurable(mySettingsPanel, settings.createConfigurable())) {
127 myConfiguration.updateBrowserSpecificSettings(family, settings);
131 public void dispose() {
132 myBrowserSettingsMap = null;
135 public boolean isModified() {
136 for (BrowsersConfiguration.BrowserFamily family : BrowsersConfiguration.BrowserFamily.values()) {
137 final WebBrowserSettings old = myConfiguration.getBrowserSettings(family);
138 final Pair<JCheckBox, TextFieldWithBrowseButton> settings = myBrowserSettingsMap.get(family);
140 if (old.isActive() != settings.first.isSelected() || !old.getPath().equals(settings.second.getText())) {
141 return true;
145 return false;
148 public void apply() {
149 for (BrowsersConfiguration.BrowserFamily family : myBrowserSettingsMap.keySet()) {
150 final Pair<JCheckBox, TextFieldWithBrowseButton> buttonPair = myBrowserSettingsMap.get(family);
151 myConfiguration.updateBrowserValue(family, buttonPair.second.getText(), buttonPair.first.isSelected());
155 public void reset() {
156 for (BrowsersConfiguration.BrowserFamily family : myBrowserSettingsMap.keySet()) {
157 final Pair<JCheckBox, TextFieldWithBrowseButton> buttonPair = myBrowserSettingsMap.get(family);
158 final WebBrowserSettings settings = myConfiguration.getBrowserSettings(family);
159 buttonPair.first.setSelected(settings.isActive());
160 buttonPair.second.getTextField().setText(settings.getPath());