litesoft
@ 948
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 |
// This Source Code is in the Public Domain per: http://unlicense.org package org.litesoft.GWT.client; import org.litesoft.commonfoundation.typeutils.*; /** * Window Name is the name of the window. * <p/> * This name cannot contain spaces or special characters, but can be quite long (on the order of 2MB). * <p/> * Known good characters are US Letters (both upper & lower case), digits, and underscore ('_'). * <p/> * Special / reserved Names when used as a 'target' in an 'href' (will load the document into...) are: * . . . _blank . . a new blank window. This window is not named. * . . . _parent . . the immediate parent of the document the link is in. * . . . _self . . . the same window the link was clicked in (the active window). * . . . _top . . . the topmost window. * . . . _search . . the browser's search pane. (Available in IE 5+) */ public class WindowName { public interface Listener { public void windowNameChanged(); } public static final String[] RESERVED_NAMES = // { // "_blank", //. . new blank window. This window is not named. "_parent", // . immediate parent of the document the link is in. "_self", // . . same window the link was clicked in (the active window). "_top", //. . . topmost window. "_search", // . browser's search pane. (Available in Internet Explorer 5 or later) }; public static void add( Listener pListener ) { if ( (pListener != null) && (-1 == indexOf( pListener )) ) { sListeners = append( sListeners, pListener ); } } public static void remove( Listener pListener ) { if ( pListener != null ) { int zAt = indexOf( pListener ); if ( zAt != -1 ) { sListeners = removeAt( sListeners, zAt ); } } } public static void set( String pWinName ) throws IllegalArgumentException { if ( (pWinName == null) || (pWinName.length() == 0) ) { throw new IllegalArgumentException( "WinName null or empty" ); } if ( -1 != pWinName.indexOf( ' ' ) ) { throw new IllegalArgumentException( "WinName '" + pWinName + "' contains a space" ); } if ( pWinName.charAt( 0 ) == '_' ) { for ( String zReservedName : RESERVED_NAMES ) { if ( zReservedName.equals( pWinName ) ) { throw new IllegalArgumentException( "WinName '" + pWinName + "' is a reserved name" ); } } } if ( !pWinName.equals( get() ) ) { LLset( pWinName ); Listener[] zListeners = sListeners; // Snag the List for ( Listener zListener : zListeners ) { zListener.windowNameChanged(); } } } /** * @return null or a non-Empty WindowName */ public static String get() { return Strings.noEmpty( LLget() ); } private static native String LLget()/*-{ return $wnd.name; }-*/; private static native void LLset( String pWinName )/*-{ $wnd.name = pWinName; }-*/; private static Listener[] sListeners = new Listener[0]; private static int indexOf( Listener pListener ) { for ( int i = 0; i < sListeners.length; i++ ) { Listener zListener = sListeners[i]; if ( zListener == pListener ) // Identity { return i; } } return -1; } private static Listener[] append( Listener[] pArray, Listener pListener ) { int zLength = pArray.length; if ( zLength == 0 ) { return new Listener[]{pListener}; } Listener[] zNew = new Listener[zLength + 1]; System.arraycopy( pArray, 0, zNew, 1, zLength ); zNew[0] = pListener; return zNew; } private static Listener[] removeAt( Listener[] pArray, int pIndexToRemove ) { int zNewLength = pArray.length - 1; Listener[] zNew = new Listener[zNewLength]; if ( pIndexToRemove != 0 ) { System.arraycopy( pArray, 0, zNew, 0, pIndexToRemove ); } if ( pIndexToRemove != zNewLength ) { System.arraycopy( pArray, pIndexToRemove + 1, zNew, pIndexToRemove, zNewLength - pIndexToRemove ); } return zNew; } } |
Commits for litesoft/trunk/Java/GWT/Client/src/org/litesoft/GWT/client/WindowName.java
Revision | Author | Commited | Message |
---|---|---|---|
948 Diff | GeorgeS | Sat 07 Jun, 2014 23:42:39 +0000 | Jusefuls Formatter Updated to New Code Format |
947 Diff | GeorgeS | Fri 06 Jun, 2014 23:36:56 +0000 | Correct Spelling of package! |
939 Diff | GeorgeS | Mon 02 Jun, 2014 21:30:31 +0000 | Extracting commonfoundation |
801 Diff | GeorgeS | Wed 15 Aug, 2012 03:59:02 +0000 | |
49 Diff | GeorgeS | Mon 12 Apr, 2010 02:59:10 +0000 | License Text |
2 | GeorgeS | Sun 07 Feb, 2010 12:50:58 +0000 |