KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > schema > abe > TitleWrapperPanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 /*
21  * TitleWrapperPanel.java
22  *
23  * Created on June 20, 2006, 3:41 PM
24  *
25  * To change this template, choose Tools | Template Manager
26  * and open the template in the editor.
27  */

28
29 package org.netbeans.modules.xml.schema.abe;
30
31 import java.awt.BorderLayout JavaDoc;
32 import java.awt.Color JavaDoc;
33 import java.awt.Cursor JavaDoc;
34 import java.awt.Font JavaDoc;
35 import java.awt.dnd.DropTarget JavaDoc;
36 import java.awt.dnd.DropTargetDragEvent JavaDoc;
37 import java.awt.dnd.DropTargetDropEvent JavaDoc;
38 import java.awt.dnd.DropTargetEvent JavaDoc;
39 import java.awt.dnd.DropTargetListener JavaDoc;
40 import java.awt.event.ActionEvent JavaDoc;
41 import java.awt.event.ActionListener JavaDoc;
42 import java.awt.event.ComponentAdapter JavaDoc;
43 import java.awt.event.ComponentEvent JavaDoc;
44 import java.awt.event.MouseAdapter JavaDoc;
45 import java.awt.event.MouseEvent JavaDoc;
46 import java.beans.PropertyChangeEvent JavaDoc;
47 import javax.swing.JLabel JavaDoc;
48 import javax.swing.JPanel JavaDoc;
49 import javax.swing.JSeparator JavaDoc;
50 import javax.swing.SpringLayout JavaDoc;
51 import javax.swing.SwingUtilities JavaDoc;
52 import org.netbeans.modules.xml.axi.AXIComponent;
53 import org.openide.util.NbBundle;
54
55 /**
56  *
57  * @author girix
58  */

59 public abstract class TitleWrapperPanel extends ABEBaseDropPanel{
60     private static final long serialVersionUID = 7526472295622776147L;
61     ContainerPanel child;
62     String JavaDoc titleString;
63     AXIComponent countComponent;
64     ExpandCollapseButton expandCollapseButton;
65     JLabel JavaDoc countLabel;
66     private boolean openByDefault;
67     
68     
69     /** Creates a new instance of TitleWrapperPanel */
70     public TitleWrapperPanel(ContainerPanel child, String JavaDoc titleString, AXIComponent
71             countComponent, boolean openByDefault, InstanceUIContext context) {
72         super(context);
73         this.child = child;
74         this.titleString = titleString;
75         this.countComponent = countComponent;
76         this.openByDefault = openByDefault;
77         initialize();
78         
79         this.addMouseListener(new MouseAdapter JavaDoc(){
80             public void mouseClicked(MouseEvent JavaDoc e) {
81                 TitleWrapperPanel.this.child.dispatchEvent(e);
82             }
83             
84             public void mousePressed(MouseEvent JavaDoc e) {
85                 TitleWrapperPanel.this.child.dispatchEvent(e);
86             }
87             
88             public void mouseReleased(MouseEvent JavaDoc e) {
89                 TitleWrapperPanel.this.child.dispatchEvent(e);
90             }
91         });
92     }
93     
94     private void initialize(){
95         setLayout(new BorderLayout JavaDoc());
96         setOpaque(false);
97         SpringLayout JavaDoc titlePanelLayout = new SpringLayout JavaDoc();
98         AutoSizingPanel titlePanel = new AutoSizingPanel(this.context);
99         titlePanel.setLayout(titlePanelLayout);
100         titlePanel.setHorizontalScaling(true);
101         titlePanel.setOpaque(false);
102         
103         expandCollapseButton = new ExpandCollapseButton("-");
104         if(openByDefault)
105             expandCollapseButton.setText("-");
106         else
107             expandCollapseButton.setText("+");
108         
109         expandCollapseButton.setWatchForComponent(child);
110         
111         titlePanel.add(expandCollapseButton);
112         titlePanelLayout.putConstraint(SpringLayout.WEST, expandCollapseButton,
113                 0, SpringLayout.WEST, titlePanel);
114         titlePanelLayout.putConstraint(SpringLayout.NORTH, expandCollapseButton,
115                 3, SpringLayout.NORTH, titlePanel);
116         
117         
118         expandCollapseButton.addActionListener(new ActionListener JavaDoc(){
119             public void actionPerformed(ActionEvent JavaDoc ae){
120                 String JavaDoc state = expandCollapseButton.getText();
121                 setCursor(new Cursor JavaDoc(Cursor.WAIT_CURSOR));
122                 try{
123                     if(state.equals("-")){
124                         //means the panle has to be collapsed
125
child.setVisible(false);
126                     } else {
127                         child.addAllChildren();
128                         child.setVisible(true);
129                     }
130                     setCountString();
131                 }finally{
132                     setCursor(new Cursor JavaDoc(Cursor.DEFAULT_CURSOR));
133                 }
134             }
135         });
136         
137         JLabel JavaDoc titleLabel = new JLabel JavaDoc(titleString);
138         titleLabel.setDropTarget(new DropTarget JavaDoc(titleLabel, new DropTargetListener JavaDoc() {
139             public void dragEnter(DropTargetDragEvent JavaDoc dtde) {
140                 TitleWrapperPanel.this.dragEnter(dtde);
141             }
142             public void dragExit(DropTargetEvent JavaDoc dte) {
143                 TitleWrapperPanel.this.dragExit(dte);
144             }
145             public void dragOver(DropTargetDragEvent JavaDoc dtde) {
146                 TitleWrapperPanel.this.dragOver(dtde);
147             }
148             public void drop(DropTargetDropEvent JavaDoc dtde) {
149                 TitleWrapperPanel.this.drop(dtde);
150             }
151             public void dropActionChanged(DropTargetDragEvent JavaDoc dtde) {
152                 TitleWrapperPanel.this.dropActionChanged(dtde);
153             }
154         }));
155         Font JavaDoc font = titleLabel.getFont();
156         font = new Font JavaDoc(font.getName(), Font.BOLD, font.getSize());
157         titleLabel.setFont(font);
158         titleLabel.setForeground(InstanceDesignConstants.TAG_NAME_COLOR);
159         
160         titlePanel.add(titleLabel);
161         titlePanelLayout.putConstraint(SpringLayout.WEST, titleLabel,
162                 (TITLE_BEGIN_FUDGE - ExpandCollapseButton.WIDTH), SpringLayout.EAST, expandCollapseButton);
163         titlePanelLayout.putConstraint(SpringLayout.NORTH, titleLabel,
164                 0, SpringLayout.NORTH, titlePanel);
165         
166         countLabel = getCountLabel();
167         
168         titlePanel.add(countLabel);
169         titlePanelLayout.putConstraint(SpringLayout.WEST, countLabel,
170                 5, SpringLayout.EAST, titleLabel);
171         titlePanelLayout.putConstraint(SpringLayout.NORTH, titleLabel,
172                 0, SpringLayout.NORTH, titlePanel);
173         
174         JSeparator JavaDoc separator = new JSeparator JavaDoc();
175         
176         //I add a new redundant panel explicitly for the separator to scale till the
177
//right view end
178
JPanel JavaDoc tempPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
179         tempPanel.setOpaque(false);
180         tempPanel.add(titlePanel, BorderLayout.CENTER);
181         tempPanel.add(separator, BorderLayout.SOUTH);
182         
183         
184         
185         add(tempPanel, BorderLayout.NORTH);
186         
187         //add child now itself
188
add(child, BorderLayout.CENTER);
189         if(openByDefault)
190             child.setVisible(true);
191         else
192             child.setVisible(false);
193         setCountString();
194         
195         child.addComponentListener(new ComponentAdapter JavaDoc() {
196             public void componentHidden(ComponentEvent JavaDoc e) {
197                 componentShown(e);
198             }
199             public void componentShown(ComponentEvent JavaDoc e) {
200                 SwingUtilities.invokeLater(new Runnable JavaDoc(){
201                     public void run() {
202                         setCountString();
203                     }
204                 });
205             }
206         });
207     }
208     
209     public JLabel JavaDoc getCountLabel(){
210         int size = getChildrenItemsCount();
211         countLabel = new JLabel JavaDoc(getCountString(size));
212         countComponent.addPropertyChangeListener( new ModelEventMediator(this, countComponent) {
213             public void _propertyChange(PropertyChangeEvent JavaDoc evt) {
214                 //for any event just refresh the label
215
setCountString();
216             }
217         });
218         countLabel.setForeground(Color.GRAY);
219         return countLabel;
220     }
221     
222     
223     public void setCountString(){
224         countLabel.setText(getCountString(getChildrenItemsCount()));
225     }
226     
227     public abstract int getChildrenItemsCount();
228     
229     public String JavaDoc getCountString(int i){
230         String JavaDoc hiddenStr = (child.isVisible() || i == 0) ? "" : " "+locHidden;
231         String JavaDoc str = (i == 1) ? "["+i+" "+locItem+hiddenStr+"]" : "["+i+" "+locItems+hiddenStr+"]";
232         return str;
233     }
234     
235     
236     
237     private static final String JavaDoc locItem = NbBundle.getMessage(TitleWrapperPanel.class, "LBL_ITEM_STRING");
238     private static final String JavaDoc locItems = NbBundle.getMessage(TitleWrapperPanel.class, "LBL_ITEMS_STRING");
239     private static final String JavaDoc locHidden = NbBundle.getMessage(TitleWrapperPanel.class, "LBL_HIDDEN");
240     public static final int TITLE_BEGIN_FUDGE = ExpandCollapseButton.WIDTH + 2;
241     
242     
243     public void drop(DropTargetDropEvent JavaDoc event) {
244         context.getNamespacePanel().drop(event);
245     }
246     
247     public void dragExit(DropTargetEvent JavaDoc event) {
248         context.getNamespacePanel().dragExit(event);
249     }
250     
251     public void dragOver(DropTargetDragEvent JavaDoc event) {
252         context.getNamespacePanel().dragOver(event);
253     }
254     
255     public void dragEnter(DropTargetDragEvent JavaDoc event) {
256         context.getNamespacePanel().dragEnter(event);
257     }
258     
259     
260     public void accept(UIVisitor visitor) {
261     }
262 }
263
Popular Tags