View Javadoc

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      /// Implementation of Visible
60      /// ....................................................................................................
61  
62      public JComponent getView() {
63  	return _view;
64      }
65  
66      ///
67      /// Implementation of Member 
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      /// Special add for LayoutGroup
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     /// Implementation of VisibleGroup
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     /// Overridden Methods of AbstractGroup
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 }