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

(-)graph/lib/apichanges.xml (+14 lines)
Lines 573-578 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="7" month="1" 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>
(-)graph/lib/manifest.mf (-2 / +1 lines)
Lines 1-6 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
(-)graph/lib/src/org/netbeans/api/visual/widget/Widget.java (+34 lines)
Lines 335-340 Link Here
335
    }
335
    }
336
336
337
    /**
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
     */
341
    public final void orderChildren(List<Integer> permutation) {
342
        assert permutation != null;
343
344
        int size = children.size ();
345
        assert permutation.size() == size;
346
347
        Widget[] previous = children.toArray (new Widget[size]);
348
        Widget[] newOrder = new Widget[size];
349
350
        children.clear ();
351
        for (int j = 0 ; j < size; j++) {
352
            int index = permutation.get(j);
353
            Widget child = previous[index];
354
            if (child == null)
355
                throw new IllegalArgumentException("Invalid permutation: " + permutation);
356
            newOrder[j] = child;
357
            previous[index] = null;
358
        }
359
        for (int j = 0; j < size; j ++)
360
            if (previous[j] != null)
361
                throw new IllegalArgumentException("Invalid permutation: " + permutation);
362
363
        children.clear();
364
        children.addAll(Arrays.asList (newOrder));
365
        
366
        revalidate ();
367
        for (int j = 0; j < size; j ++)
368
            newOrder[j].revalidate ();
369
    }
370
    
371
    /**
338
     * Brings the widget to the front. Means: the widget becomes the last child in the list of children of the parent widget.
372
     * Brings the widget to the front. Means: the widget becomes the last child in the list of children of the parent widget.
339
     */
373
     */
340
    public final void bringToFront () {
374
    public final void bringToFront () {
(-)graph/lib/src/org/netbeans/api/visual/widget/WidgetSupport.java (+106 lines)
Added 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
 */
51
public final class WidgetSupport {
52
53
    private WidgetSupport() {
54
    }
55
56
    /**
57
     * Brings the widget 1 slot backward in the parent Widget child array. 
58
     * Means: the widget is moving towards the first child in the list of children of the parent widget.
59
     * @param childWidget Widget that is sent backwards in the list of children
60
     */
61
    public static void bringBackward (Widget childWidget) {
62
        if (childWidget == null)
63
            return;
64
        Widget parentWidget = childWidget.getParentWidget ();
65
        if (parentWidget == null)
66
            return;
67
68
        List<Widget> children = parentWidget.getChildren();
69
        int i = children.indexOf (childWidget);
70
        if (i <= 0)
71
            return;
72
        
73
        List<Integer> permutation = new ArrayList<Integer>();
74
        for ( int j = 0; j < children.size() ; j++ )
75
            permutation.add (j);
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
     */
86
    public static void bringForward (Widget childWidget) {
87
        if (childWidget == null)
88
            return;
89
        Widget parentWidget = childWidget.getParentWidget ();
90
        if (parentWidget == null)
91
            return;
92
93
        List<Widget> children = parentWidget.getChildren();
94
        int i = children.indexOf (childWidget);
95
        if (i < 0 || i == (children.size()-1) )
96
            return;
97
98
        List<Integer> permutation = new ArrayList<Integer>();
99
        for ( int j = 0; j < children.size() ; j++ )
100
            permutation.add(j);
101
        permutation.add(i+1,permutation.remove(i));
102
103
        parentWidget.orderChildren(permutation);
104
    }
105
    
106
}
(-)graph/lib/src/org/netbeans/api/visual/widget/doc-files/documentation.html (-2 / +2 lines)
Lines 309-316 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 are available in <code>WidgetSupport</code>.
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.
(-)graph/lib/test/unit/src/apichanges/WidgetOrderTest.java (+92 lines)
Added 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
73
        scene.orderChildren (Arrays.asList (2, 3, 0, 1));
74
        assertEquals ("2,3,0,1,", dumpOrder (scene));
75
76
        WidgetSupport.bringForward (label0);
77
        assertEquals ("2,3,1,0,", dumpOrder (scene));
78
79
        WidgetSupport.bringBackward (label3);
80
        assertEquals ("3,2,1,0,", dumpOrder (scene));
81
    }
82
83
    private static String dumpOrder (Scene scene) {
84
        StringBuffer buffer = new StringBuffer ();
85
        for (Widget child : scene.getChildren ()) {
86
            LabelWidget label = (LabelWidget) child;
87
            buffer.append (label.getLabel ()).append (',');
88
        }
89
        return buffer.toString ();
90
    }
91
92
}

Return to bug 121525