This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 121525
Collapse All | Expand All

(-)a/api.visual/apichanges.xml (+14 lines)
Lines 573-578 made subject to such option by the copyr Link Here
573
            <class package="org.netbeans.api.visual.widget" name="ConnectionWidget" link="yes"/>
573
            <class package="org.netbeans.api.visual.widget" name="ConnectionWidget" link="yes"/>
574
            <issue number="113573"/>
574
            <issue number="113573"/>
575
        </change>
575
        </change>
576
577
        <change>
578
            <api name="general"/>
579
            <summary>Support of Widget children ordering</summary>
580
            <version major="2" minor="11"/>
581
            <date day="15" month="2" year="2008"/>
582
            <author login="dkaspar"/>
583
            <compatibility addition="yes"/>
584
            <description>
585
                New methods of Widget children ordering introduced: Widget.orderChildren, WidgetSupport.bringBackward and WidgetSupport.bringForward.
586
            </description>
587
            <class package="org.netbeans.api.visual.widget" name="Widget" link="yes"/>
588
            <issue number="121525"/>
589
        </change>
576
    </changes>
590
    </changes>
577
591
578
    <htmlcontents>
592
    <htmlcontents>
(-)a/api.visual/manifest.mf (-1 / +1 lines)
Lines 1-6 Manifest-Version: 1.0 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.netbeans.api.visual
2
OpenIDE-Module: org.netbeans.api.visual
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/visual/resources/Bundle.properties
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/visual/resources/Bundle.properties
4
OpenIDE-Module-Specification-Version: 2.10
4
OpenIDE-Module-Specification-Version: 2.11
5
AutoUpdate-Essential-Module: true
5
AutoUpdate-Essential-Module: true
6
6
(-)a/api.visual/src/org/netbeans/api/visual/widget/Widget.java (-1 / +24 lines)
Lines 50-57 import org.netbeans.modules.visual.widge Link Here
50
import org.netbeans.modules.visual.widget.WidgetAccessibleContext;
50
import org.netbeans.modules.visual.widget.WidgetAccessibleContext;
51
import org.openide.util.Lookup;
51
import org.openide.util.Lookup;
52
52
53
import javax.accessibility.Accessible;
53
import javax.accessibility.AccessibleContext;
54
import javax.accessibility.AccessibleContext;
54
import javax.accessibility.Accessible;
55
import java.awt.*;
55
import java.awt.*;
56
import java.awt.geom.AffineTransform;
56
import java.awt.geom.AffineTransform;
57
import java.util.*;
57
import java.util.*;
Lines 334-339 public class Widget implements Accessibl Link Here
334
    protected void notifyRemoved () {
334
    protected void notifyRemoved () {
335
    }
335
    }
336
336
337
    /**
338
     * Reorders children with specified permutation.
339
     * @param permutation List<Integer> consisting of new order. Each array slot contains Integer value pointing to a Widget at particular index in previous order.
340
     * @since 2.11
341
     */
342
    public final void orderChildren(List<? extends Widget> permutation) {
343
        if (permutation == null  ||  permutation.size() != children.size ())
344
            throw new IllegalArgumentException("Invalid permutation: " + permutation);
345
        for (Widget widget : permutation)
346
            if (! children.contains (widget))
347
                throw new IllegalArgumentException("Invalid permutation: " + permutation);
348
        for (Widget widget : children)
349
            if (! permutation.contains (widget))
350
                throw new IllegalArgumentException("Invalid permutation: " + permutation);
351
352
        children.clear ();
353
        children.addAll (permutation);
354
355
        revalidate ();
356
        for (Widget child : children)
357
            child.revalidate ();
358
    }
359
    
337
    /**
360
    /**
338
     * Brings the widget to the front. Means: the widget becomes the last child in the list of children of the parent widget.
361
     * Brings the widget to the front. Means: the widget becomes the last child in the list of children of the parent widget.
339
     */
362
     */
(-)a/api.visual/src/org/netbeans/api/visual/widget/WidgetSupport.java (+105 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of either the GNU
7
 * General Public License Version 2 only ("GPL") or the Common
8
 * Development and Distribution License("CDDL") (collectively, the
9
 * "License"). You may not use this file except in compliance with the
10
 * License. You can obtain a copy of the License at
11
 * http://www.netbeans.org/cddl-gplv2.html
12
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13
 * specific language governing permissions and limitations under the
14
 * License.  When distributing the software, include this License Header
15
 * Notice in each file and include the License file at
16
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
17
 * particular file as subject to the "Classpath" exception as provided
18
 * by Sun in the GPL Version 2 section of the License file that
19
 * accompanied this code. If applicable, add the following below the
20
 * License Header, with the fields enclosed by brackets [] replaced by
21
 * your own identifying information:
22
 * "Portions Copyrighted [year] [name of copyright owner]"
23
 *
24
 * Contributor(s):
25
 *
26
 * The Original Software is NetBeans. The Initial Developer of the Original
27
 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
28
 * Microsystems, Inc. All Rights Reserved.
29
 *
30
 * If you wish your version of this file to be governed by only the CDDL
31
 * or only the GPL Version 2, indicate your decision by adding
32
 * "[Contributor] elects to include this software in this distribution
33
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
34
 * single choice of license, a recipient has the option to distribute
35
 * your version of this file under either the CDDL, the GPL Version 2 or
36
 * to extend the choice of license to its licensees as provided above.
37
 * However, if you add GPL Version 2 code and therefore, elected the GPL
38
 * Version 2 license, then the option applies only if the new code is
39
 * made subject to such option by the copyright holder.
40
 */
41
package org.netbeans.api.visual.widget;
42
43
import java.util.ArrayList;
44
import java.util.List;
45
46
/**
47
 * Support methods for Widget manipulation.
48
 *
49
 * @author cpalmer
50
 * @since 2.11
51
 */
52
public final class WidgetSupport {
53
54
    private WidgetSupport() {
55
    }
56
57
    /**
58
     * Brings the widget 1 slot backward in the parent Widget child array. 
59
     * Means: the widget is moving towards the first child in the list of children of the parent widget.
60
     * @param childWidget Widget that is sent backwards in the list of children
61
     * @since 2.11
62
     */
63
    public static void bringBackward (Widget childWidget) {
64
        if (childWidget == null)
65
            return;
66
        Widget parentWidget = childWidget.getParentWidget ();
67
        if (parentWidget == null)
68
            return;
69
70
        List<Widget> children = parentWidget.getChildren();
71
        int i = children.indexOf (childWidget);
72
        if (i <= 0)
73
            return;
74
        
75
        List<Widget> permutation = new ArrayList<Widget>(children);
76
        permutation.add(i-1,permutation.remove(i));
77
        
78
        parentWidget.orderChildren(permutation);
79
    }
80
81
    /**
82
     * Brings the widget 1 slot forward in the parent Widget child array. 
83
     * Means: the widget is moving towards the last child in the list of children of the parent widget.
84
     * @param childWidget Widget that is brought forward in the list of children
85
     * @since 2.11
86
     */
87
    public static void bringForward (Widget childWidget) {
88
        if (childWidget == null)
89
            return;
90
        Widget parentWidget = childWidget.getParentWidget ();
91
        if (parentWidget == null)
92
            return;
93
94
        List<Widget> children = parentWidget.getChildren();
95
        int i = children.indexOf (childWidget);
96
        if (i < 0  ||  i >= children.size() - 1)
97
            return;
98
99
        List<Widget> permutation = new ArrayList<Widget>(children);
100
        permutation.add(i+1,permutation.remove(i));
101
102
        parentWidget.orderChildren(permutation);
103
    }
104
    
105
}
(-)a/api.visual/src/org/netbeans/api/visual/widget/doc-files/documentation.html (-2 / +2 lines)
Lines 309-316 A widget placement is resolved by a layo Link Here
309
<td>getScene
309
<td>getScene
310
<td>Returns a scene where the widget belongs. The scene instance is assigned in the constructor and could not be changed anymore.
310
<td>Returns a scene where the widget belongs. The scene instance is assigned in the constructor and could not be changed anymore.
311
<tr>
311
<tr>
312
<td>getParentWidget<br>getChildren<br>addChild<br>removeChild<br>removeFromParent<br>addChildren<br>removeChildren<br>bringToFront<br>bringToBack
312
<td>getParentWidget<br>getChildren<br>addChild<br>removeChild<br>removeFromParent<br>addChildren<br>removeChildren<br>bringToFront<br>bringToBack<br>orderChildren
313
<td>Methods for manipulation with the tree hierarchy of widgets.
313
<td>Methods for manipulation with the tree hierarchy of widgets. The <code>Widget.orderChildren</code> allows to change order of children. Additional tree-manipulation methods
314
<tr>
314
<tr>
315
<td>getChildConstraint<br>setChildConstraint
315
<td>getChildConstraint<br>setChildConstraint
316
<td>Controls constraints assigned to child widgets. Used by Layouts similarly to Swing. See <a href="#Layout">Layout</a> section.
316
<td>Controls constraints assigned to child widgets. Used by Layouts similarly to Swing. See <a href="#Layout">Layout</a> section.
(-)a/api.visual/test/unit/src/apichanges/WidgetOrderTest.java (+117 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of either the GNU
7
 * General Public License Version 2 only ("GPL") or the Common
8
 * Development and Distribution License("CDDL") (collectively, the
9
 * "License"). You may not use this file except in compliance with the
10
 * License. You can obtain a copy of the License at
11
 * http://www.netbeans.org/cddl-gplv2.html
12
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13
 * specific language governing permissions and limitations under the
14
 * License.  When distributing the software, include this License Header
15
 * Notice in each file and include the License file at
16
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
17
 * particular file as subject to the "Classpath" exception as provided
18
 * by Sun in the GPL Version 2 section of the License file that
19
 * accompanied this code. If applicable, add the following below the
20
 * License Header, with the fields enclosed by brackets [] replaced by
21
 * your own identifying information:
22
 * "Portions Copyrighted [year] [name of copyright owner]"
23
 *
24
 * Contributor(s):
25
 *
26
 * The Original Software is NetBeans. The Initial Developer of the Original
27
 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
28
 * Microsystems, Inc. All Rights Reserved.
29
 *
30
 * If you wish your version of this file to be governed by only the CDDL
31
 * or only the GPL Version 2, indicate your decision by adding
32
 * "[Contributor] elects to include this software in this distribution
33
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
34
 * single choice of license, a recipient has the option to distribute
35
 * your version of this file under either the CDDL, the GPL Version 2 or
36
 * to extend the choice of license to its licensees as provided above.
37
 * However, if you add GPL Version 2 code and therefore, elected the GPL
38
 * Version 2 license, then the option applies only if the new code is
39
 * made subject to such option by the copyright holder.
40
 */
41
package apichanges;
42
43
import org.netbeans.api.visual.widget.LabelWidget;
44
import org.netbeans.api.visual.widget.Scene;
45
import org.netbeans.api.visual.widget.Widget;
46
import org.netbeans.api.visual.widget.WidgetSupport;
47
import org.netbeans.junit.NbTestCase;
48
49
import java.util.Arrays;
50
51
/**
52
 * Test for #121525 - Widget.orderChildren
53
 * @author David Kaspar
54
 */
55
public class WidgetOrderTest extends NbTestCase {
56
57
    public WidgetOrderTest (String testName) {
58
        super (testName);
59
    }
60
61
    public void testOrder () {
62
        Scene scene = new Scene ();
63
64
        LabelWidget label0 = new LabelWidget (scene, "0");
65
        scene.addChild (label0);
66
        LabelWidget label1 = new LabelWidget (scene, "1");
67
        scene.addChild (label1);
68
        LabelWidget label2 = new LabelWidget (scene, "2");
69
        scene.addChild (label2);
70
        LabelWidget label3 = new LabelWidget (scene, "3");
71
        scene.addChild (label3);
72
        LabelWidget label4 = new LabelWidget (scene, "4");
73
74
        scene.orderChildren (Arrays.asList (label2, label3, label0, label1));
75
        assertEquals ("2,3,0,1,", dumpOrder (scene));
76
77
        WidgetSupport.bringForward (label0);
78
        assertEquals ("2,3,1,0,", dumpOrder (scene));
79
80
        WidgetSupport.bringBackward (label3);
81
        assertEquals ("3,2,1,0,", dumpOrder (scene));
82
83
        try {
84
            scene.orderChildren (Arrays.asList (label3, label0, label1));
85
            assertTrue (false);
86
        } catch (IllegalArgumentException e) {
87
//            e.printStackTrace ();
88
        }
89
        assertEquals ("3,2,1,0,", dumpOrder (scene));
90
91
        try {
92
            scene.orderChildren (Arrays.asList (label3, label0, label1, label4));
93
            assertTrue (false);
94
        } catch (IllegalArgumentException e) {
95
//            e.printStackTrace ();
96
        }
97
        assertEquals ("3,2,1,0,", dumpOrder (scene));
98
99
        try {
100
            scene.orderChildren (Arrays.asList (label0, label1, label2, label3, label4));
101
            assertTrue (false);
102
        } catch (IllegalArgumentException e) {
103
//            e.printStackTrace ();
104
        }
105
        assertEquals ("3,2,1,0,", dumpOrder (scene));
106
    }
107
108
    private static String dumpOrder (Scene scene) {
109
        StringBuffer buffer = new StringBuffer ();
110
        for (Widget child : scene.getChildren ()) {
111
            LabelWidget label = (LabelWidget) child;
112
            buffer.append (label.getLabel ()).append (',');
113
        }
114
        return buffer.toString ();
115
    }
116
117
}

Return to bug 121525