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
;
26 import java
.awt
.event
.ActionListener
;
27 import java
.awt
.event
.ActionEvent
;
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();
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
) {
91 myUseDefaultBrowser
.addActionListener(actionListener
);
92 myUseAlternativeBrowser
.addActionListener(actionListener
);
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();
118 for (BrowserSettingsProvider provider
: mySettingsProviders
) {
119 if (provider
.isModified()) {
127 private void updateBrowserField() {
128 if (!BrowserUtil
.canStartDefaultBrowser()) {
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
) {
148 public void reset() {
149 GeneralSettings settings
= GeneralSettings
.getInstance();
150 myBrowserPathField
.setText(settings
.getBrowserPath());
152 if (settings
.isUseDefaultBrowser()) {
153 myUseDefaultBrowser
.setSelected(true);
156 myUseAlternativeBrowser
.setSelected(true);
158 myConfirmExtractFiles
.setSelected(settings
.isConfirmExtractFiles());
160 updateBrowserField();
162 for (BrowserSettingsProvider provider
: mySettingsProviders
) {