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
129
130
131
132
package com.temp.client.foundation.util;

import java.util.*;

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

public abstract class AbstractSameSize extends com.google.gwt.user.client.Timer
{
    private static final int MAX_INT = Integer.MAX_VALUE / 2;

    private List<Widget> mWidgets;

    private int mDelay = 50;
    private int mMaxX, mMaxY;
    private boolean mProcessX, mProcessY;
    private boolean mAllAttached = false;
    private boolean mSizingWorking;
    private boolean mAnyResizingNeeded;

    protected AbstractSameSize( boolean pProcessX, boolean pProcessY, Widget... pWidgets )
    {
        mProcessX = pProcessX;
        mProcessY = pProcessY;
        if ( pWidgets != null )
        {
            mWidgets = new ArrayList<Widget>( pWidgets.length );
            for ( Widget zWidget : pWidgets )
            {
                if ( zWidget != null )
                {
                    mWidgets.add( zWidget );
                }
            }
            if ( mWidgets.size() > 1 )
            {
                run();
            }
        }
    }

    protected static Widget[] toArray( Collection<Widget> pWidgets )
    {
        return  (pWidgets != null) ? pWidgets.toArray( new Widget[pWidgets.size()] ) : null;
    }

    @Override
    public void run()
    {
        mAnyResizingNeeded = false;
        mSizingWorking = true;

        Widget zWidget;
        if ( !mAllAttached )
        {
            for ( int i = 0; i < mWidgets.size(); i++ )
            {
                if ( null == (zWidget = get( i )) )
                {
                    schedule( mDelay );
                    return;
                }
            }
            mAllAttached = true;
        }
        for ( int i = 0; i < mWidgets.size(); i++ )
        {
            if ( null == (zWidget = get( i )) )
            {
                return; // Lost Attachment
            }
            if ( mProcessX )
            {
                mMaxX = checkSize( mMaxX, zWidget.getOffsetWidth() );
            }
            if ( mProcessY )
            {
                mMaxY = checkSize( mMaxY, zWidget.getOffsetHeight() );
            }
        }
        if ( mSizingWorking )
        {
            if ( !mAnyResizingNeeded )
            {
                return; // Done!
            }
            for ( int i = 0; i < mWidgets.size(); i++ )
            {
                if ( null != (zWidget = get( i )) )
                {
                    if ( mProcessX && (mMaxX > zWidget.getOffsetWidth()) )
                    {
                        zWidget.setWidth( mMaxX + "px" );
                    }
                    if ( mProcessY && (mMaxY > zWidget.getOffsetHeight()) )
                    {
                        zWidget.setHeight( mMaxY + "px" );
                    }
                }
            }
        }
        if ( mDelay < MAX_INT )
        {
            schedule( mDelay += mDelay ); // Double each time
        }
    }

    private int checkSize( int pMaxSize, int pOffsetSize )
    {
        if ( pOffsetSize < 10 )
        {
            mSizingWorking = false;
            return pMaxSize;
        }
        if ( pMaxSize == 0 )
        {
            return pOffsetSize;
        }
        mAnyResizingNeeded |= (pOffsetSize != pMaxSize);
        return Math.max( pOffsetSize, pMaxSize );
    }

    private Widget get( int pIndex )
    {
        Widget zWidget = mWidgets.get( pIndex );
        if ( zWidget.isAttached() )
        {
            return zWidget;
        }
        System.out.println( "Not Attached: " + zWidget );
        return null;
    }
}

Commits for litesoft/trunk/GWT_Sandbox/FormEngine/src/com/temp/client/foundation/util/AbstractSameSize.java

Diff revisions: vs.
Revision Author Commited Message
626 GeorgeS picture GeorgeS Wed 11 Apr, 2012 19:39:41 +0000