Subversion Repository Public Repository

litesoft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package org.litesoft.GWT.client.widgets.nonpublic;

import org.litesoft.GWT.client.widgets.nonpublic.external.*;

import com.google.gwt.user.client.ui.*;

public abstract class AbstractSizeableVerticalSplitPairPanel extends AbstractSizeableVerticalPanel
{
    private VerticalSplitterDragger mDragger;

    protected void initialize()
    {
        super.initialize();
        LLstretchableVertically();
    }

    protected boolean aboutToAdopt( Widget pWidget, int pBeforeIndex )
    {
        if ( pWidget instanceof Splitter )
        {
            throw new IllegalArgumentException( "Attempt to add Splitter directly" );
        }
        if ( !getSizeableWidget( pWidget ).getHeightHelper().isStretchable() )
        {
            throw new IllegalArgumentException( "Attempt to add widget to Vertical Split Pair Panel that does NOT support Vertical Stretchability" );
        }
        if ( !isOur( pWidget ) && (getWidgetCount() == 3) )
        {
            throw new IllegalArgumentException( "Vertical Split Pair Panel only supports TWO Vertical Stretchables" );
        }
        return super.aboutToAdopt( pWidget, pBeforeIndex );
    }

    protected void justAdopted( Widget pWidget, int pWidgetIndex )
    {
        super.justAdopted( pWidget, pWidgetIndex );

        // Since we only support 2 real widgets, they could be disordered in regards to the splitter
        dropSplitters();
        if ( getWidgetCount() == 2 )
        {
            LLadopt( createSplitter( 1 ), 1 );
        }
    }

    protected void justDisowned( Widget pWidget, int pWidgetIndex )
    {
        super.justDisowned( pWidget, pWidgetIndex );

        // Since we only support 2 real widgets, any disowned should remove the splitter
        dropSplitters();
    }

    private void dropSplitters()
    {
        for ( int i = getWidgetCount(); --i >= 0; )
        {
            Widget widget = getWidget( i );
            if ( widget instanceof Splitter )
            {
                LLdisown( widget, i );
            }
        }
    }

    protected Widget createSplitter( int pIndex )
    {
        Splitter result = new Splitter( "litesoft-SplitterForVerticalPair" );
        result.stretchableHorizontally();
        mDragger = new VerticalSplitterDragger( this, pIndex );
        result.addController( new DragController( new MousePerformanceFilter( new MouseDragHandler( mDragger ) ) ) );
        return result;
    }

    private class VerticalSplitterDragger extends AbstractSplitterDragger
    {
        public VerticalSplitterDragger( AbstractSizeableOneDimensionalPanel panel, int pIndex )
        {
            super( panel, pIndex );
        }

        protected boolean dragBy( int pDeltaX, int pDeltaY )
        {
            return adjustSizesBy( getSizeableAt( mIndex - 1 ).getHeightHelper(), //
                                  getSizeableAt( mIndex + 1 ).getHeightHelper(), //
                                  pDeltaY );
        }
    }

    public void setWidth( String width )
    {
        super.setWidth( width ); // for stacktrace Debugging
    }

    public void setHeight( String height )
    {
        super.setHeight( height ); // for stacktrace Debugging
    }

    private boolean mFavorFirstWidget;

    protected void setFavorFirstWidget()
    {
        mFavorFirstWidget = true;
    }

    public boolean setFirstWidgetHeight( int pPixels )
    {
        if ( (pPixels > 20) && anyChildren() )
        {
            int zDimension = getHeightHelper().getDimension();
            if ( (zDimension > 20) && (zDimension != pPixels) )
            {
                mDragger.dragBy( 0, pPixels - zDimension );
                return true;
            }
        }
        return false;
    }

    protected void distributeToChildrenChangedHeight()
    {
        if ( anyChildren() )
        {
            getHelper().distributeDimensionToChild( this, getHeightHelper(), mFavorFirstWidget ? getFirstWidget() : getLastWidget() );
        }
    }
}

Commits for litesoft/trunk/Java/GWT/Client/src/org/litesoft/GWT/client/widgets/nonpublic/AbstractSizeableVerticalSplitPairPanel.java

Diff revisions: vs.
Revision Author Commited Message
2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000