sticky documentation popup [take 1]
[fedora-idea.git] / platform / platform-impl / src / com / intellij / ide / BrowserSettingsPanel.java
blobb7cfa7d892bf04b5578b1fa3577c22c4e2ddbdb0
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;
18 import com.intellij.openapi.ui.TextFieldWithBrowseButton;
19 import com.intellij.openapi.options.ConfigurationException;
20 import com.intellij.openapi.util.Comparing;
21 import com.intellij.openapi.fileChooser.FileChooserDescriptor;
22 import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
24 import javax.swing.*;
25 import java.awt.*;
26 import java.awt.event.ActionListener;
27 import java.awt.event.ActionEvent;
29 /**
30 * @author spleaner
32 public class BrowserSettingsPanel extends JPanel {
33 private final JRadioButton myUseDefaultBrowser;
34 private final JRadioButton myUseAlternativeBrowser;
35 private final BrowserSettingsProvider[] mySettingsProviders;
36 private final TextFieldWithBrowseButton myBrowserPathField;
37 private final JCheckBox myConfirmExtractFiles;
38 private final JButton myClearExtractedFiles;
40 public BrowserSettingsPanel() {
41 setLayout(new BorderLayout());
43 final JPanel outerPanel = new JPanel();
44 outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS));
46 // generic system browser
47 final JPanel genericPanel = new JPanel();
48 genericPanel.setBorder(BorderFactory.createTitledBorder("Default Web Browser"));
49 genericPanel.setLayout(new BoxLayout(genericPanel, BoxLayout.Y_AXIS));
50 final JPanel innerPanel1 = new JPanel(new BorderLayout());
52 final ButtonGroup group = new ButtonGroup();
53 myUseDefaultBrowser = new JRadioButton("Use system default browser");
54 group.add(myUseDefaultBrowser);
56 innerPanel1.add(myUseDefaultBrowser, BorderLayout.WEST);
57 genericPanel.add(innerPanel1);
58 final JPanel innerPanel2 = new JPanel(new BorderLayout());
60 myUseAlternativeBrowser = new JRadioButton("Use");
61 group.add(myUseAlternativeBrowser);
63 innerPanel2.add(myUseAlternativeBrowser, BorderLayout.WEST);
64 myBrowserPathField = new TextFieldWithBrowseButton();
65 innerPanel2.add(myBrowserPathField, BorderLayout.CENTER);
66 genericPanel.add(innerPanel2);
68 JPanel innerPanel3 = new JPanel(new BorderLayout());
69 myConfirmExtractFiles = new JCheckBox("Show confirmation before extracting files");
70 myClearExtractedFiles = new JButton("Clear extracted files");
71 myClearExtractedFiles.addActionListener(new ActionListener() {
72 public void actionPerformed(ActionEvent e) {
73 BrowserUtil.clearExtractedFiles();
75 });
76 innerPanel3.add(myConfirmExtractFiles, BorderLayout.CENTER);
77 innerPanel3.add(myClearExtractedFiles, BorderLayout.EAST);
78 genericPanel.add(innerPanel3);
80 outerPanel.add(genericPanel);
82 FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor();
83 myBrowserPathField.addBrowseFolderListener(IdeBundle.message("title.select.path.to.browser"), null, null, descriptor);
85 if (BrowserUtil.canStartDefaultBrowser()) {
86 ActionListener actionListener = new ActionListener() {
87 public void actionPerformed(ActionEvent e) {
88 updateBrowserField();
91 myUseDefaultBrowser.addActionListener(actionListener);
92 myUseAlternativeBrowser.addActionListener(actionListener);
94 else {
95 myUseDefaultBrowser.setVisible(false);
96 myUseAlternativeBrowser.setVisible(false);
99 mySettingsProviders = BrowserSettingsProvider.EP_NAME.getExtensions();
100 for (BrowserSettingsProvider settingsProvider : mySettingsProviders) {
101 outerPanel.add(settingsProvider.createComponent());
104 add(outerPanel, BorderLayout.NORTH);
107 public boolean isModified() {
108 boolean isModified = false;
109 GeneralSettings settings = GeneralSettings.getInstance();
110 isModified |= !Comparing.strEqual(settings.getBrowserPath(), myBrowserPathField.getText());
111 isModified |= settings.isUseDefaultBrowser() != myUseDefaultBrowser.isSelected();
112 isModified |= settings.isConfirmExtractFiles() != myConfirmExtractFiles.isSelected();
114 if (isModified) {
115 return true;
118 for (BrowserSettingsProvider provider : mySettingsProviders) {
119 if (provider.isModified()) {
120 return true;
124 return false;
127 private void updateBrowserField() {
128 if (!BrowserUtil.canStartDefaultBrowser()) {
129 return;
132 myBrowserPathField.getTextField().setEnabled(myUseAlternativeBrowser.isSelected());
133 myBrowserPathField.getButton().setEnabled(myUseAlternativeBrowser.isSelected());
136 public void apply() throws ConfigurationException {
137 GeneralSettings settings = GeneralSettings.getInstance();
139 settings.setBrowserPath(myBrowserPathField.getText());
140 settings.setUseDefaultBrowser(myUseDefaultBrowser.isSelected());
141 settings.setConfirmExtractFiles(myConfirmExtractFiles.isSelected());
143 for (BrowserSettingsProvider provider : mySettingsProviders) {
144 provider.apply();
148 public void reset() {
149 GeneralSettings settings = GeneralSettings.getInstance();
150 myBrowserPathField.setText(settings.getBrowserPath());
152 if (settings.isUseDefaultBrowser()) {
153 myUseDefaultBrowser.setSelected(true);
155 else {
156 myUseAlternativeBrowser.setSelected(true);
158 myConfirmExtractFiles.setSelected(settings.isConfirmExtractFiles());
160 updateBrowserField();
162 for (BrowserSettingsProvider provider : mySettingsProviders) {
163 provider.reset();