1 package org.glassbox.gui;
2
3 import org.glassbox.SwingFactory;
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 import org.apache.log4j.Logger;
9
10 /***
11 A group with the possibility to layout its visible members.
12 */
13 public class LayoutGroup extends AbstractGroup implements VisibleMember, VisibleGroup {
14 protected JPanel _view;
15 protected String _identifier;
16 protected Group _parent;
17 protected boolean _resize;
18
19 protected LayoutGroup(String themeprefix, String identifier, boolean resize) {
20 this (null, themeprefix, identifier, resize);
21 }
22
23 protected void setLayout(LayoutManager layout) {
24 _view.setLayout(layout);
25 }
26
27 /***
28 Constructor.
29 @param layout The layout manager of this group.
30 @param themepath The prefix of the theme configuration of the view of this group.
31 See <code>SwingFactory.createPanel(String)</code> for information about the possible
32 configurations of the view of this group.
33 @param identifier The identifier of this member.
34 */
35 public LayoutGroup(LayoutManager layout, String themeprefix, String identifier) {
36 this(layout, themeprefix, identifier, false);
37 }
38
39 /***
40 Constructor.
41 @param layout The layout manager of this group.
42 @param themepath The prefix of the theme configuration of the view of this group.
43 See <code>SwingFactory.createPanel(String)</code> for information about the possible
44 configurations of the view of this group.
45 @param identifier The identifier of this member.
46 @param resize Indicates if this group should resize it's view if one of it's members views has been updated.
47 */
48 public LayoutGroup(LayoutManager layout, String themeprefix, String identifier, boolean resize) {
49 super();
50 _view = SwingFactory.createPanel(themeprefix);
51 _view.setLayout(layout);
52 _identifier = identifier;
53 _parent = null;
54 _resize = resize;
55 _view.setEnabled(false);
56 }
57
58
59
60
61
62 public JComponent getView() {
63 return _view;
64 }
65
66
67
68
69
70 public String getIdentifier() {
71 return _identifier;
72 }
73
74 public Group getGroup() {
75 return _parent;
76 }
77
78 public void setGroup(Group parent) {
79 _parent = parent;
80 }
81
82 /***
83 Forward all property changes to the members of this group.
84 */
85 public void groupPropertyChanged(String name, Object oldvalue, Object newvalue) {
86 Logger.getLogger(LayoutGroup.class).debug("groupPropertyChanged("+name+", "+oldvalue+", "+newvalue+")");
87
88 if (VisibleGroup.VIEWPORT_SIZE_KEY.equals(name)) {
89 _view.setSize((Dimension)newvalue);
90 }
91 setProperty(name, newvalue);
92
93 Logger.getLogger(LayoutGroup.class).debug("groupPropertyChanged.exit()");
94 }
95
96
97
98
99
100 /***
101 Add a visible member to this group.
102 */
103 public void addMember(VisibleMember member, Object layout) {
104 _view.add(member.getView(), layout);
105 super.addMember(member);
106 }
107
108
109
110
111
112 /***
113 Invalidate the view and layout it again.
114 */
115 public void memberViewUpdated(VisibleMember member) {
116 _view.invalidate();
117 if (_resize)
118 _view.setSize(_view.getLayout().preferredLayoutSize(_view));
119 _view.doLayout();
120 if (_resize)
121 ((VisibleGroup)getGroup()).memberViewUpdated(this);
122 }
123
124
125
126
127
128 public void addMember(Member member) {
129 if (member instanceof VisibleMember) _view.add(((VisibleMember)member).getView());
130 super.addMember(member);
131 }
132
133
134 /***
135 Overridden to remove the view of a visible member.
136 */
137 public void removeMember(String identifier) {
138 Member member = getMember(identifier);
139 if (member instanceof VisibleMember) {
140 JComponent view = ((VisibleMember)member).getView();
141 _view.remove(view);
142 }
143 super.removeMember(identifier);
144 }
145 }