Package blackberry.web.widget.bf

Source Code of blackberry.web.widget.bf.WidgetFieldManager

/*
* Copyright 2010-2011 Research In Motion Limited.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package blackberry.web.widget.bf;

import net.rim.device.api.browser.field2.BrowserField;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.TouchEvent;
import net.rim.device.api.ui.container.VerticalFieldManager;
import blackberry.web.widget.bf.navigationcontroller.NavigationController;

/**
*
*/
public class WidgetFieldManager extends VerticalFieldManager {

    /* Creates a new WidgetFieldManager. */
    public WidgetFieldManager() {
        this( 0 );
    }

    /* Creates a new WidgetFieldManager with a style. */
    public WidgetFieldManager( long style ) {
        super( style );
    }

    private BrowserFieldScreen getBrowserFieldScreen() {
        Screen bfScreen = getScreen();

        // Get the screen object.
        if( bfScreen instanceof BrowserFieldScreen ) {
            return (BrowserFieldScreen) bfScreen;
        }

        return null;
    }

    /* override */public boolean navigationMovement( int dx, int dy, int status, int time ) {
        if( getBrowserFieldScreen().getAppNavigationMode() ) {
            if( dx == 0 && dy == 0 )
                return true;

            boolean handled = super.navigationMovement( dx, dy, status, time );
            if( handled ) {
                return true;
            }

            // Handle the directional event.
            int direction = -1;
            int delta = 0;
            if( Math.abs( dx ) >= Math.abs( dy ) ) {
                if( dx > 0 ) {
                    direction = NavigationController.FOCUS_NAVIGATION_RIGHT;
                } else {
                    direction = NavigationController.FOCUS_NAVIGATION_LEFT;
                }
                delta = dx;
            } else {
                if( dy > 0 ) {
                    direction = NavigationController.FOCUS_NAVIGATION_DOWN;
                } else {
                    direction = NavigationController.FOCUS_NAVIGATION_UP;
                }
                delta = dy;
            }

            try {
                getBrowserFieldScreen().getNavigationController().handleDirection( direction, delta );
            } catch( Exception e ) {
            }

            return true;
        }

        return super.navigationMovement( dx, dy, status, time );
    }

    protected boolean navigationClick( int status, int time ) {
        if( getBrowserFieldScreen().getAppNavigationMode() ) {
            // TODO: [RT] figure out what to do with this
//            if( getBrowserFieldScreen().getNavigationController().requiresDefaultNavigation() ) {
//                super.navigationClick( status, time );
//            }

            try {
                getBrowserFieldScreen().getNavigationController().handleClick();
            } catch( Exception e ) {
            }

            return true;
        }

        return super.navigationClick( status, time );
    }

    protected boolean navigationUnclick( int status, int time ) {
        if( getBrowserFieldScreen().getAppNavigationMode() ) {
            // TODO: [RT] figure out what to do with this
//            if( getBrowserFieldScreen().getNavigationController().requiresDefaultNavigation() ) {
//                super.navigationUnclick( status, time );
//            }

            try {
                getBrowserFieldScreen().getNavigationController().handleUnclick();
            } catch( Exception e ) {
            }

            return true;
        }

        return super.navigationUnclick( status, time );
    }

    // TODO: [RT] Confirm with Tim that it is ok to lose default hover
//    /* override */public void paint( Graphics graphics ) {
//        super.paint( graphics );
//
//        // Paint current node if it exists, is not focused, and does not have a hover style.
//        if( getBrowserFieldScreen().getAppNavigationMode() ) {
//            if( getBrowserFieldScreen().getNavigationController().requiresDefaultHover() ) {
//                Node currentNode = getBrowserFieldScreen().getNavigationController().getCurrentFocusNode();
//                if( currentNode != null ) {
//                    XYRect position = getPosition( currentNode );
//                    if( position != null ) {
//                        position = scaleRect( position );
//                        int oldColor = graphics.getColor();
//                        graphics.setColor( 0xBBDDFF );
//                        graphics.drawRoundRect( position.x - 1, position.y - 1, position.width + 2, position.height + 2, 4, 4 );
//                        graphics.setColor( 0x88AAFF );
//                        graphics.drawRoundRect( position.x, position.y, position.width, position.height, 4, 4 );
//                        graphics.setColor( oldColor );
//                    }
//                }
//            }
//        }
//    }

//    public void invalidateNode( Node node ) {
//        if( node == null )
//            return;
//        XYRect position = getPosition( node );
//        if( position == null )
//            return;
//
//        position = scaleRect( position );
//        invalidate( position.x - 1, position.y - 1, position.width + 2, position.height + 2 );
//    }
//
//    public void scrollToNode( Node node ) {
//        if( node == null )
//            return;
//        XYRect position = getPosition( node );
//        if( position == null )
//            return;
//
//        position = scaleRect( position );
//        scrollToRect( position );
//    }
//
//    public void scrollDown() {
//        int newVerticalScroll = Math.min( getVerticalScroll() + scaleValue( SAFE_MARGIN ), getVirtualHeight() - getHeight() );
//        setVerticalScroll( newVerticalScroll );
//    }
//
//    public void scrollUp() {
//        int newVerticalScroll = Math.max( getVerticalScroll() - scaleValue( SAFE_MARGIN ), 0 );
//        setVerticalScroll( newVerticalScroll );
//    }
//
//    public void scrollRight() {
//        int newHorizontalScroll = Math.min( getHorizontalScroll() + scaleValue( SAFE_MARGIN ), getVirtualWidth() - getWidth() );
//        setHorizontalScroll( newHorizontalScroll );
//    }
//
//    public void scrollLeft() {
//        int newHorizontalScroll = Math.max( getHorizontalScroll() - scaleValue( SAFE_MARGIN ), 0 );
//        setHorizontalScroll( newHorizontalScroll );
//    }
//
//    public static final int SAFE_MARGIN = 30;
//
//    private void scrollToRect( XYRect rect ) {
//        // Check vertical scroll.
//        int verticalScroll = getVerticalScroll();
//        int newVerticalScroll = verticalScroll;
//
//        if( rect.y < verticalScroll ) {
//            newVerticalScroll = Math.max( rect.y - scaleValue( SAFE_MARGIN ), 0 );
//        } else if( rect.y + rect.height > verticalScroll + getHeight() ) {
//            newVerticalScroll = Math.min( rect.y + rect.height - getHeight() + scaleValue( SAFE_MARGIN ), getVirtualHeight()
//                    - getHeight() );
//        }
//
//        if( newVerticalScroll - verticalScroll != 0 ) {
//            setVerticalScroll( newVerticalScroll );
//        }
//
//        // Check horizontal scroll.
//        int horizontalScroll = getHorizontalScroll();
//        int newHorizontalScroll = horizontalScroll;
//
//        if( rect.width >= getWidth() ) {
//            newHorizontalScroll = Math.max( rect.x, 0 );
//        } else if( rect.x < horizontalScroll ) {
//            newHorizontalScroll = Math.max( rect.x - scaleValue( SAFE_MARGIN ), 0 );
//        } else if( rect.x + rect.width > horizontalScroll + getWidth() ) {
//            newHorizontalScroll = Math.min( rect.x + rect.width - getWidth() + scaleValue( SAFE_MARGIN ), getVirtualWidth()
//                    - getWidth() );
//        }
//
//        if( newHorizontalScroll - horizontalScroll != 0 ) {
//            setHorizontalScroll( newHorizontalScroll );
//        }
//    }
//
//    private int scaleValue( int value ) {
//        BrowserField bf = getBrowserFieldScreen().getWidgetBrowserField();
//        float scale = bf.getZoomScale();
//        return MathUtilities.round( value * scale );
//    }
//
//    private XYRect scaleRect( XYRect rect ) {
//        return new XYRect( scaleValue( rect.x ), scaleValue( rect.y ), scaleValue( rect.width ), scaleValue( rect.height ) );
//    }
//
//    public int unscaleValue( int value ) {
//        BrowserField bf = getBrowserFieldScreen().getWidgetBrowserField();
//        float scale = bf.getZoomScale();
//        return MathUtilities.round( value / scale );
//    }
//
//    public XYRect unscaleRect( XYRect rect ) {
//        return new XYRect( unscaleValue( rect.x ), unscaleValue( rect.y ), unscaleValue( rect.width ), unscaleValue( rect.height ) );
//    }
//
//    public XYRect getPosition( Node node ) {
//        BrowserField bf = getBrowserFieldScreen().getWidgetBrowserField();
//        XYRect nodeRect = bf.getNodePosition( node );
//      
//        // Check for iframe parent and adjust the coordinates if found       
//        HTMLIFrameElement iframeRect = getIFrameForNode( node );
//        if( iframeRect != null && nodeRect != null ){
//            nodeRect.x = nodeRect.x + bf.getNodePosition( iframeRect ).x;
//            nodeRect.y = nodeRect.y + bf.getNodePosition( iframeRect ).y;
//        }         
//       
//        return nodeRect;
//    }
   
    /**
  * Overrides the touch event handler. 
  * Deselects the currently focused node of navigation mode on
  * Touch Down event.  Does not consume the event.
  */
    protected boolean touchEvent( TouchEvent message ){
      super.touchEvent( message );     
   
      // Check for the Touch down event
        if( message.getEvent() == TouchEvent.DOWN ){
         
          // Check if navigation mode is turned on
          if( getBrowserFieldScreen().getAppNavigationMode() ){
            NavigationController navControl =
              getBrowserFieldScreen().getNavigationController();
            // Deselect currently focused node
            if( navControl != null ){
              navControl.deselectFocusedNode();
            }
          }
        }     
    return false;
    }   
       
//    /**
//     * Get the iframe parent of the specified node.
//     * Returns null if the node does not have an iframe parent.
//     * @param node
//     * @return HTMLIFrameElement parent of the specified node
//     */
//    private HTMLIFrameElement getIFrameForNode( Node node ){
//        Hashtable iframeHashtable = getBrowserFieldScreen().getNavigationController().getIFrameHashtable();
//        HTMLIFrameElement iframe = null;
//        Object potentialIframe = iframeHashtable.get( node );
//        if( potentialIframe instanceof HTMLIFrameElement ){
//          iframe = ( HTMLIFrameElement ) potentialIframe;
//        }
//      return iframe;
//   }
   
    public float getZoomScale() {
        BrowserField bf = getBrowserFieldScreen().getWidgetBrowserField();
        return bf.getZoomScale();
    }
}
TOP

Related Classes of blackberry.web.widget.bf.WidgetFieldManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.