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
.uiDesigner
.radComponents
;
18 import com
.intellij
.openapi
.module
.Module
;
19 import com
.intellij
.openapi
.util
.Comparing
;
20 import com
.intellij
.uiDesigner
.FormEditingUtil
;
21 import com
.intellij
.uiDesigner
.UIFormXmlConstants
;
22 import com
.intellij
.uiDesigner
.XmlWriter
;
23 import com
.intellij
.uiDesigner
.compiler
.Utils
;
24 import com
.intellij
.uiDesigner
.lw
.*;
25 import org
.jetbrains
.annotations
.NonNls
;
26 import org
.jetbrains
.annotations
.NotNull
;
27 import org
.jetbrains
.annotations
.Nullable
;
30 import java
.awt
.Color
;
31 import java
.util
.ArrayList
;
32 import java
.util
.List
;
33 import java
.util
.Locale
;
34 import java
.util
.Collections
;
37 * @author Anton Katilin
38 * @author Vladimir Kondratyev
40 public final class RadRootContainer
extends RadContainer
implements IRootContainer
{
41 private String myClassToBind
;
42 private String myMainComponentBinding
;
43 private Locale myStringDescriptorLocale
;
44 private final List
<RadButtonGroup
> myButtonGroups
= new ArrayList
<RadButtonGroup
>();
45 private final List
<LwInspectionSuppression
> myInspectionSuppressions
= new ArrayList
<LwInspectionSuppression
>();
47 public RadRootContainer(final Module module
, final String id
) {
48 super(module
, JPanel
.class, id
);
49 getDelegee().setBackground(Color
.WHITE
);
53 * Always returns <code>false</code> because root group isn't selectable.
55 public boolean isSelected() {
60 * <code>RadRootContainer</code> is not selectable
62 public void setSelected(final boolean ignored
) { }
65 * @return full qualified name of the class. If there is no bound class
66 * then the method returns <code>null</code>.
69 public String
getClassToBind(){
73 public void setClassToBind(final String classToBind
){
74 myClassToBind
= classToBind
;
77 public String
getMainComponentBinding(){
78 return myMainComponentBinding
;
81 public void setMainComponentBinding(final String mainComponentBinding
){
82 myMainComponentBinding
= mainComponentBinding
;
85 public void write(final XmlWriter writer
) {
86 writer
.startElement("form", Utils
.FORM_NAMESPACE
);
88 writer
.addAttribute("version", 1);
89 final String classToBind
= getClassToBind();
90 if (classToBind
!= null){
91 writer
.addAttribute("bind-to-class", classToBind
);
93 final String mainComponentBinding
= getMainComponentBinding();
94 if (mainComponentBinding
!= null) {
95 writer
.addAttribute("stored-main-component-binding", mainComponentBinding
);
97 writeChildrenImpl(writer
);
98 if (myButtonGroups
.size() > 0) {
99 writer
.startElement(UIFormXmlConstants
.ELEMENT_BUTTON_GROUPS
);
100 for(RadButtonGroup group
: myButtonGroups
) {
105 writeInspectionSuppressions(writer
);
108 writer
.endElement(); // form
112 private void writeInspectionSuppressions(final XmlWriter writer
) {
113 if (myInspectionSuppressions
.size() > 0) {
114 writer
.startElement(UIFormXmlConstants
.ELEMENT_INSPECTION_SUPPRESSIONS
);
115 for(LwInspectionSuppression suppression
: myInspectionSuppressions
) {
116 writer
.startElement(UIFormXmlConstants
.ELEMENT_SUPPRESS
);
117 writer
.addAttribute(UIFormXmlConstants
.ATTRIBUTE_INSPECTION
, suppression
.getInspectionId());
118 if (suppression
.getComponentId() != null) {
119 writer
.addAttribute(UIFormXmlConstants
.ATTRIBUTE_ID
, suppression
.getComponentId());
127 @Override public void writeConstraints(final XmlWriter writer
) {
128 writer
.startElement("constraints");
130 myLayoutManager
.writeChildConstraints(writer
, this);
132 writer
.endElement(); // constraints
137 protected RadLayoutManager
createInitialLayoutManager() {
138 return RadXYLayoutManager
.INSTANCE
;
141 public void setGroupForComponent(@NotNull RadComponent component
, @Nullable RadButtonGroup value
) {
142 for(int i
=myButtonGroups
.size()-1; i
>= 0; i
--) {
143 RadButtonGroup group
= myButtonGroups
.get(i
);
144 if (group
== value
) {
145 group
.add(component
);
148 group
.remove(component
);
149 if (group
.isEmpty()) {
150 myButtonGroups
.remove(i
);
156 public RadButtonGroup
[] getButtonGroups() {
157 return myButtonGroups
.toArray(new RadButtonGroup
[myButtonGroups
.size()]);
160 public String
suggestGroupName() {
163 @NonNls String suggestedName
= "buttonGroup" + groupNumber
;
164 for(RadButtonGroup group
: myButtonGroups
) {
165 if (group
.getName().equals(suggestedName
)) {
170 return suggestedName
;
174 public RadButtonGroup
createGroup(final String groupName
) {
175 RadButtonGroup group
= new RadButtonGroup(groupName
);
176 myButtonGroups
.add(group
);
180 public void deleteGroup(RadButtonGroup group
) {
181 myButtonGroups
.remove(group
);
184 public void setButtonGroups(final IButtonGroup
[] buttonGroups
) {
185 myButtonGroups
.clear();
186 for(IButtonGroup lwGroup
: buttonGroups
) {
187 final String
[] componentIds
= lwGroup
.getComponentIds();
188 if (componentIds
.length
> 0) {
189 RadButtonGroup group
= createGroup(lwGroup
.getName());
190 group
.setBound(lwGroup
.isBound());
191 group
.addComponentIds(componentIds
);
196 public List
<RadComponent
> getGroupContents(final RadButtonGroup group
) {
197 ArrayList
<RadComponent
> result
= new ArrayList
<RadComponent
>();
198 for(String id
: group
.getComponentIds()) {
199 RadComponent component
= (RadComponent
) FormEditingUtil
.findComponent(this, id
);
200 if (component
!= null) {
201 result
.add(component
);
207 public String
getButtonGroupName(IComponent component
) {
208 for(RadButtonGroup group
: myButtonGroups
) {
209 if (group
.contains((RadComponent
)component
)) {
210 return group
.getName();
216 public String
[] getButtonGroupComponentIds(String groupName
) {
217 for(RadButtonGroup group
: myButtonGroups
) {
218 if (group
.getName().equals(groupName
)) {
219 return group
.getComponentIds();
222 throw new IllegalArgumentException("Cannot find group " + groupName
);
225 public Locale
getStringDescriptorLocale() {
226 return myStringDescriptorLocale
;
229 public void setStringDescriptorLocale(final Locale stringDescriptorLocale
) {
230 myStringDescriptorLocale
= stringDescriptorLocale
;
233 public void suppressInspection(String inspectionId
, @Nullable RadComponent component
) {
234 for(int i
=myInspectionSuppressions
.size()-1; i
>= 0; i
--) {
235 LwInspectionSuppression suppression
= myInspectionSuppressions
.get(i
);
236 if (suppression
.getInspectionId().equals(inspectionId
)) {
237 if (component
!= null && (component
.getId().equals(suppression
.getComponentId()) || suppression
.getComponentId() == null)) {
240 if (component
== null && suppression
.getComponentId() != null) {
241 myInspectionSuppressions
.remove(i
);
245 myInspectionSuppressions
.add(new LwInspectionSuppression(inspectionId
, component
== null ?
null : component
.getId()));
248 public boolean isInspectionSuppressed(final String inspectionId
, final String componentId
) {
249 for(LwInspectionSuppression suppression
: myInspectionSuppressions
) {
250 if ((suppression
.getComponentId() == null || suppression
.getComponentId().equals(componentId
)) &&
251 suppression
.getInspectionId().equals(inspectionId
)) {
258 public LwInspectionSuppression
[] getInspectionSuppressions() {
259 return myInspectionSuppressions
.toArray(new LwInspectionSuppression
[myInspectionSuppressions
.size()]);
262 public void setInspectionSuppressions(final LwInspectionSuppression
[] inspectionSuppressions
) {
263 myInspectionSuppressions
.clear();
264 Collections
.addAll(myInspectionSuppressions
, inspectionSuppressions
);
267 public void removeInspectionSuppression(final LwInspectionSuppression suppression
) {
268 for(LwInspectionSuppression existing
: myInspectionSuppressions
) {
269 if (existing
.getInspectionId().equals(suppression
.getInspectionId()) &&
270 Comparing
.equal(existing
.getComponentId(), suppression
.getComponentId())) {
271 myInspectionSuppressions
.remove(existing
);