1/*
2 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25package javax.swing.plaf.multi;
26
27import java.util.Vector;
28import javax.swing.plaf.TreeUI;
29import java.awt.Rectangle;
30import javax.swing.JTree;
31import javax.swing.tree.TreePath;
32import javax.swing.plaf.ComponentUI;
33import javax.swing.JComponent;
34import java.awt.Graphics;
35import java.awt.Dimension;
36import javax.accessibility.Accessible;
37
38/**
39 * A multiplexing UI used to combine <code>TreeUI</code>s.
40 *
41 * <p>This file was automatically generated by AutoMulti.
42 *
43 * @author  Otto Multey
44 */
45public class MultiTreeUI extends TreeUI {
46
47    /**
48     * The vector containing the real UIs.  This is populated
49     * in the call to <code>createUI</code>, and can be obtained by calling
50     * the <code>getUIs</code> method.  The first element is guaranteed to be the real UI
51     * obtained from the default look and feel.
52     */
53    protected Vector<ComponentUI> uis = new Vector<>();
54
55////////////////////
56// Common UI methods
57////////////////////
58
59    /**
60     * Returns the list of UIs associated with this multiplexing UI.  This
61     * allows processing of the UIs by an application aware of multiplexing
62     * UIs on components.
63     *
64     * @return an array of the UI delegates
65     */
66    public ComponentUI[] getUIs() {
67        return MultiLookAndFeel.uisToArray(uis);
68    }
69
70////////////////////
71// TreeUI methods
72////////////////////
73
74    /**
75     * Invokes the <code>getPathBounds</code> method on each UI handled by this object.
76     *
77     * @return the value obtained from the first UI, which is
78     * the UI obtained from the default <code>LookAndFeel</code>
79     */
80    public Rectangle getPathBounds(JTree a, TreePath b) {
81        Rectangle returnValue =
82            ((TreeUI) (uis.elementAt(0))).getPathBounds(a,b);
83        for (int i = 1; i < uis.size(); i++) {
84            ((TreeUI) (uis.elementAt(i))).getPathBounds(a,b);
85        }
86        return returnValue;
87    }
88
89    /**
90     * Invokes the <code>getPathForRow</code> method on each UI handled by this object.
91     *
92     * @return the value obtained from the first UI, which is
93     * the UI obtained from the default <code>LookAndFeel</code>
94     */
95    public TreePath getPathForRow(JTree a, int b) {
96        TreePath returnValue =
97            ((TreeUI) (uis.elementAt(0))).getPathForRow(a,b);
98        for (int i = 1; i < uis.size(); i++) {
99            ((TreeUI) (uis.elementAt(i))).getPathForRow(a,b);
100        }
101        return returnValue;
102    }
103
104    /**
105     * Invokes the <code>getRowForPath</code> method on each UI handled by this object.
106     *
107     * @return the value obtained from the first UI, which is
108     * the UI obtained from the default <code>LookAndFeel</code>
109     */
110    public int getRowForPath(JTree a, TreePath b) {
111        int returnValue =
112            ((TreeUI) (uis.elementAt(0))).getRowForPath(a,b);
113        for (int i = 1; i < uis.size(); i++) {
114            ((TreeUI) (uis.elementAt(i))).getRowForPath(a,b);
115        }
116        return returnValue;
117    }
118
119    /**
120     * Invokes the <code>getRowCount</code> method on each UI handled by this object.
121     *
122     * @return the value obtained from the first UI, which is
123     * the UI obtained from the default <code>LookAndFeel</code>
124     */
125    public int getRowCount(JTree a) {
126        int returnValue =
127            ((TreeUI) (uis.elementAt(0))).getRowCount(a);
128        for (int i = 1; i < uis.size(); i++) {
129            ((TreeUI) (uis.elementAt(i))).getRowCount(a);
130        }
131        return returnValue;
132    }
133
134    /**
135     * Invokes the <code>getClosestPathForLocation</code> method on each UI handled by this object.
136     *
137     * @return the value obtained from the first UI, which is
138     * the UI obtained from the default <code>LookAndFeel</code>
139     */
140    public TreePath getClosestPathForLocation(JTree a, int b, int c) {
141        TreePath returnValue =
142            ((TreeUI) (uis.elementAt(0))).getClosestPathForLocation(a,b,c);
143        for (int i = 1; i < uis.size(); i++) {
144            ((TreeUI) (uis.elementAt(i))).getClosestPathForLocation(a,b,c);
145        }
146        return returnValue;
147    }
148
149    /**
150     * Invokes the <code>isEditing</code> method on each UI handled by this object.
151     *
152     * @return the value obtained from the first UI, which is
153     * the UI obtained from the default <code>LookAndFeel</code>
154     */
155    public boolean isEditing(JTree a) {
156        boolean returnValue =
157            ((TreeUI) (uis.elementAt(0))).isEditing(a);
158        for (int i = 1; i < uis.size(); i++) {
159            ((TreeUI) (uis.elementAt(i))).isEditing(a);
160        }
161        return returnValue;
162    }
163
164    /**
165     * Invokes the <code>stopEditing</code> method on each UI handled by this object.
166     *
167     * @return the value obtained from the first UI, which is
168     * the UI obtained from the default <code>LookAndFeel</code>
169     */
170    public boolean stopEditing(JTree a) {
171        boolean returnValue =
172            ((TreeUI) (uis.elementAt(0))).stopEditing(a);
173        for (int i = 1; i < uis.size(); i++) {
174            ((TreeUI) (uis.elementAt(i))).stopEditing(a);
175        }
176        return returnValue;
177    }
178
179    /**
180     * Invokes the <code>cancelEditing</code> method on each UI handled by this object.
181     */
182    public void cancelEditing(JTree a) {
183        for (int i = 0; i < uis.size(); i++) {
184            ((TreeUI) (uis.elementAt(i))).cancelEditing(a);
185        }
186    }
187
188    /**
189     * Invokes the <code>startEditingAtPath</code> method on each UI handled by this object.
190     */
191    public void startEditingAtPath(JTree a, TreePath b) {
192        for (int i = 0; i < uis.size(); i++) {
193            ((TreeUI) (uis.elementAt(i))).startEditingAtPath(a,b);
194        }
195    }
196
197    /**
198     * Invokes the <code>getEditingPath</code> method on each UI handled by this object.
199     *
200     * @return the value obtained from the first UI, which is
201     * the UI obtained from the default <code>LookAndFeel</code>
202     */
203    public TreePath getEditingPath(JTree a) {
204        TreePath returnValue =
205            ((TreeUI) (uis.elementAt(0))).getEditingPath(a);
206        for (int i = 1; i < uis.size(); i++) {
207            ((TreeUI) (uis.elementAt(i))).getEditingPath(a);
208        }
209        return returnValue;
210    }
211
212////////////////////
213// ComponentUI methods
214////////////////////
215
216    /**
217     * Invokes the <code>contains</code> method on each UI handled by this object.
218     *
219     * @return the value obtained from the first UI, which is
220     * the UI obtained from the default <code>LookAndFeel</code>
221     */
222    public boolean contains(JComponent a, int b, int c) {
223        boolean returnValue =
224            uis.elementAt(0).contains(a,b,c);
225        for (int i = 1; i < uis.size(); i++) {
226            uis.elementAt(i).contains(a,b,c);
227        }
228        return returnValue;
229    }
230
231    /**
232     * Invokes the <code>update</code> method on each UI handled by this object.
233     */
234    public void update(Graphics a, JComponent b) {
235        for (int i = 0; i < uis.size(); i++) {
236            uis.elementAt(i).update(a,b);
237        }
238    }
239
240    /**
241     * Returns a multiplexing UI instance if any of the auxiliary
242     * <code>LookAndFeel</code>s supports this UI.  Otherwise, just returns the
243     * UI object obtained from the default <code>LookAndFeel</code>.
244     *
245     * @param  a the component to create the UI for
246     * @return the UI delegate created
247     */
248    public static ComponentUI createUI(JComponent a) {
249        MultiTreeUI mui = new MultiTreeUI();
250        return MultiLookAndFeel.createUIs(mui, mui.uis, a);
251    }
252
253    /**
254     * Invokes the <code>installUI</code> method on each UI handled by this object.
255     */
256    public void installUI(JComponent a) {
257        for (int i = 0; i < uis.size(); i++) {
258            uis.elementAt(i).installUI(a);
259        }
260    }
261
262    /**
263     * Invokes the <code>uninstallUI</code> method on each UI handled by this object.
264     */
265    public void uninstallUI(JComponent a) {
266        for (int i = 0; i < uis.size(); i++) {
267            uis.elementAt(i).uninstallUI(a);
268        }
269    }
270
271    /**
272     * Invokes the <code>paint</code> method on each UI handled by this object.
273     */
274    public void paint(Graphics a, JComponent b) {
275        for (int i = 0; i < uis.size(); i++) {
276            uis.elementAt(i).paint(a,b);
277        }
278    }
279
280    /**
281     * Invokes the <code>getPreferredSize</code> method on each UI handled by this object.
282     *
283     * @return the value obtained from the first UI, which is
284     * the UI obtained from the default <code>LookAndFeel</code>
285     */
286    public Dimension getPreferredSize(JComponent a) {
287        Dimension returnValue =
288            uis.elementAt(0).getPreferredSize(a);
289        for (int i = 1; i < uis.size(); i++) {
290            uis.elementAt(i).getPreferredSize(a);
291        }
292        return returnValue;
293    }
294
295    /**
296     * Invokes the <code>getMinimumSize</code> method on each UI handled by this object.
297     *
298     * @return the value obtained from the first UI, which is
299     * the UI obtained from the default <code>LookAndFeel</code>
300     */
301    public Dimension getMinimumSize(JComponent a) {
302        Dimension returnValue =
303            uis.elementAt(0).getMinimumSize(a);
304        for (int i = 1; i < uis.size(); i++) {
305            uis.elementAt(i).getMinimumSize(a);
306        }
307        return returnValue;
308    }
309
310    /**
311     * Invokes the <code>getMaximumSize</code> method on each UI handled by this object.
312     *
313     * @return the value obtained from the first UI, which is
314     * the UI obtained from the default <code>LookAndFeel</code>
315     */
316    public Dimension getMaximumSize(JComponent a) {
317        Dimension returnValue =
318            uis.elementAt(0).getMaximumSize(a);
319        for (int i = 1; i < uis.size(); i++) {
320            uis.elementAt(i).getMaximumSize(a);
321        }
322        return returnValue;
323    }
324
325    /**
326     * Invokes the <code>getAccessibleChildrenCount</code> method on each UI handled by this object.
327     *
328     * @return the value obtained from the first UI, which is
329     * the UI obtained from the default <code>LookAndFeel</code>
330     */
331    public int getAccessibleChildrenCount(JComponent a) {
332        int returnValue =
333            uis.elementAt(0).getAccessibleChildrenCount(a);
334        for (int i = 1; i < uis.size(); i++) {
335            uis.elementAt(i).getAccessibleChildrenCount(a);
336        }
337        return returnValue;
338    }
339
340    /**
341     * Invokes the <code>getAccessibleChild</code> method on each UI handled by this object.
342     *
343     * @return the value obtained from the first UI, which is
344     * the UI obtained from the default <code>LookAndFeel</code>
345     */
346    public Accessible getAccessibleChild(JComponent a, int b) {
347        Accessible returnValue =
348            uis.elementAt(0).getAccessibleChild(a,b);
349        for (int i = 1; i < uis.size(); i++) {
350            uis.elementAt(i).getAccessibleChild(a,b);
351        }
352        return returnValue;
353    }
354}
355