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
.execution
.impl
;
18 import com
.intellij
.execution
.ExecutionBundle
;
19 import com
.intellij
.execution
.RunnerAndConfigurationSettings
;
20 import com
.intellij
.execution
.configurations
.ConfigurationFactory
;
21 import com
.intellij
.execution
.configurations
.ConfigurationType
;
22 import com
.intellij
.openapi
.options
.Configurable
;
23 import com
.intellij
.openapi
.options
.ConfigurationException
;
24 import com
.intellij
.openapi
.options
.SettingsEditorConfigurable
;
25 import com
.intellij
.openapi
.project
.Project
;
26 import com
.intellij
.ui
.TabbedPaneWrapper
;
33 class TypeTemplatesConfigurable
implements Configurable
{
34 private final ConfigurationType myType
;
35 private final Configurable
[] myConfigurables
;
36 private TabbedPaneWrapper myTabbedPane
;
38 public TypeTemplatesConfigurable(final ConfigurationType type
, final RunManagerImpl runManager
, Project project
) {
40 myConfigurables
= new Configurable
[getFactories().length
];
41 myTabbedPane
= new TabbedPaneWrapper(project
);
42 final ConfigurationFactory
[] factories
= getFactories();
43 for (int i
= 0; i
< factories
.length
; i
++) {
44 final ConfigurationFactory factory
= factories
[i
];
45 final RunnerAndConfigurationSettingsImpl template
= runManager
.getConfigurationTemplate(factory
);
46 final Configurable configurable
= new TemplateConfigurable(template
);
47 myConfigurables
[i
] = configurable
;
48 myTabbedPane
.addTab(factory
.getName(), configurable
.getIcon(), configurable
.createComponent(), null);
52 private ConfigurationFactory
[] getFactories() {
53 return myType
.getConfigurationFactories();
56 public String
getDisplayName() {
57 return ExecutionBundle
.message("template.settings.configurable.display.name");
60 public Icon
getIcon() {
61 return myType
.getIcon();
64 public String
getHelpTopic() {
65 final int index
= myTabbedPane
.getSelectedIndex();
66 return myConfigurables
[index
].getHelpTopic();
69 public JComponent
createComponent() {
70 return myTabbedPane
.getComponent();
73 public boolean isModified() {
74 for (final Configurable configurable
: myConfigurables
) {
75 if (configurable
.isModified()) return true;
80 public void apply() throws ConfigurationException
{
81 for (final Configurable configurable
: myConfigurables
) {
87 for (final Configurable configurable
: myConfigurables
) {
92 public void disposeUIResources() {
93 for (int i
= 0; i
< myConfigurables
.length
; i
++) {
94 final Configurable configurable
= myConfigurables
[i
];
95 configurable
.disposeUIResources();
96 myConfigurables
[i
] = null;
101 public static Configurable
createConfigurable(final ConfigurationType type
, final Project project
) {
102 final ConfigurationFactory
[] factories
= type
.getConfigurationFactories();
103 final RunManagerImpl runManager
= RunManagerImpl
.getInstanceImpl(project
);
104 return factories
.length
== 1
105 ?
new TemplateConfigurable(runManager
.getConfigurationTemplate(factories
[0]))
106 : new TypeTemplatesConfigurable(type
, runManager
, project
);
109 private static class TemplateConfigurable
extends SettingsEditorConfigurable
<RunnerAndConfigurationSettingsImpl
> {
110 private final RunnerAndConfigurationSettings myTemplate
;
112 public TemplateConfigurable(RunnerAndConfigurationSettingsImpl template
) {
113 super(new ConfigurationSettingsEditorWrapper(template
), template
);
114 myTemplate
= template
;
117 public String
getDisplayName() {
118 return myTemplate
.getConfiguration().getName();
121 public Icon
getIcon() {
122 return myTemplate
.getConfiguration().getType().getIcon();
125 public String
getHelpTopic() {