Coverage Report - org.kuali.student.common.ui.client.widgets.KSLightBox
 
Classes in this File Line Coverage Branch Coverage Complexity
KSLightBox
0%
0/120
0%
0/32
1.667
KSLightBox$1
0%
0/3
N/A
1.667
KSLightBox$KSDialogResizeHandler
0%
0/3
N/A
1.667
KSLightBox$KSDialogResizeHandler$1
0%
0/6
N/A
1.667
 
 1  
 
 2  
 /**
 3  
  * Copyright 2010 The Kuali Foundation Licensed under the
 4  
  * Educational Community License, Version 2.0 (the "License"); you may
 5  
  * not use this file except in compliance with the License. You may
 6  
  * obtain a copy of the License at
 7  
  *
 8  
  * http://www.osedu.org/licenses/ECL-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing,
 11  
  * software distributed under the License is distributed on an "AS IS"
 12  
  * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 13  
  * or implied. See the License for the specific language governing
 14  
  * permissions and limitations under the License.
 15  
  */
 16  
 
 17  
 package org.kuali.student.common.ui.client.widgets;
 18  
 
 19  
 import java.util.Arrays;
 20  
 import java.util.List;
 21  
 
 22  
 import org.kuali.student.common.ui.client.widgets.field.layout.button.ButtonGroup;
 23  
 
 24  
 import com.google.gwt.dom.client.Element;
 25  
 import com.google.gwt.dom.client.NativeEvent;
 26  
 import com.google.gwt.dom.client.NodeList;
 27  
 import com.google.gwt.event.dom.client.ClickEvent;
 28  
 import com.google.gwt.event.dom.client.ClickHandler;
 29  
 import com.google.gwt.event.dom.client.KeyCodes;
 30  
 import com.google.gwt.event.logical.shared.ResizeEvent;
 31  
 import com.google.gwt.event.logical.shared.ResizeHandler;
 32  
 import com.google.gwt.event.shared.HandlerRegistration;
 33  
 import com.google.gwt.user.client.Command;
 34  
 import com.google.gwt.user.client.DeferredCommand;
 35  
 import com.google.gwt.user.client.Window;
 36  
 import com.google.gwt.user.client.Event.NativePreviewEvent;
 37  
 import com.google.gwt.user.client.ui.Anchor;
 38  
 import com.google.gwt.user.client.ui.Composite;
 39  
 import com.google.gwt.user.client.ui.DialogBox;
 40  
 import com.google.gwt.user.client.ui.FlexTable;
 41  
 import com.google.gwt.user.client.ui.FlowPanel;
 42  
 import com.google.gwt.user.client.ui.FocusWidget;
 43  
 import com.google.gwt.user.client.ui.HasWidgets;
 44  
 import com.google.gwt.user.client.ui.HorizontalPanel;
 45  
 import com.google.gwt.user.client.ui.ScrollPanel;
 46  
 import com.google.gwt.user.client.ui.Widget;
 47  
 
 48  
 /**
 49  
  *
 50  
  * */
 51  0
 public class KSLightBox extends DialogBox /*implements HasCloseHandlers<KSLightBox> */{
 52  
 //  private final HandlerManager handlers = new HandlerManager(this);
 53  
 
 54  0
     private static final List<String> FOCUSABLE_TAGS = Arrays.asList("INPUT", "SELECT", "BUTTON", "TEXTAREA");
 55  
 
 56  0
     private int maxWidth = 800;
 57  0
     private int maxHeight = 0;
 58  0
     private int minWidth = 400;
 59  0
     private int minHeight = 200;
 60  0
     private int permWidth = -1;
 61  0
     private int permHeight = -1;
 62  0
     private FlowPanel mainPanel = new FlowPanel();
 63  0
     private FlowPanel titlePanel = new FlowPanel();
 64  0
     private ScrollPanel scrollPanel = new ScrollPanel();
 65  
 
 66  0
     private Anchor closeLink = new Anchor();
 67  0
     private KSDialogResizeHandler resizeHandler = new KSDialogResizeHandler();
 68  
     private HandlerRegistration resizeHandlerRegistrater;
 69  
 
 70  0
     private FlexTable verticalPanel = new FlexTable();
 71  0
     private HorizontalPanel buttonPanel = new HorizontalPanel();
 72  0
     public KSLightBox() {
 73  0
             ((Widget) this.getCaption()).setVisible(false);
 74  0
         init();
 75  0
     }
 76  
     private void init(){
 77  0
         super.setStyleName("ks-lightbox");
 78  
 
 79  0
         mainPanel.setStyleName("ks-lightbox-mainPanel");
 80  0
         titlePanel.setStyleName("ks-lightbox-titlePanel");
 81  0
         closeLink.setStyleName("ks-lightbox-title-closeLink");
 82  0
         scrollPanel.setStyleName("ks-lightbox-title-scrollPanel");
 83  
 
 84  0
         setGlassEnabled(true);
 85  0
         super.setWidget(mainPanel);
 86  0
         mainPanel.add(titlePanel);
 87  0
         mainPanel.add(scrollPanel);
 88  0
         titlePanel.add(closeLink);
 89  
 
 90  0
         verticalPanel.setStyleName("ks-lightbox-layoutTable");
 91  0
         verticalPanel.setWidget(1, 0, buttonPanel);
 92  0
         verticalPanel.getRowFormatter().setStyleName(1, "ks-lightbox-buttonRow");
 93  0
         scrollPanel.add(verticalPanel);
 94  
 
 95  0
         installResizeHandler();
 96  
         //super.
 97  0
         closeLink.addClickHandler(new ClickHandler(){
 98  
 
 99  
             @Override
 100  
             public void onClick(ClickEvent event) {
 101  0
                hide();
 102  0
             }
 103  
         });
 104  
 
 105  
 
 106  0
     }
 107  0
     public KSLightBox(boolean addCloseLink) {
 108  0
             ((Widget) this.getCaption()).setVisible(false);
 109  0
         init();
 110  0
         closeLink.setVisible(addCloseLink);
 111  0
     }
 112  0
     public KSLightBox(String title) {
 113  0
         init();
 114  0
         super.setText(title);
 115  0
     }
 116  
     public void uninstallResizeHandler(){
 117  0
         if(resizeHandlerRegistrater != null){
 118  0
             resizeHandlerRegistrater.removeHandler();
 119  0
             resizeHandlerRegistrater = null;
 120  
 
 121  
         }
 122  0
     }
 123  
     public void installResizeHandler(){
 124  0
         if(resizeHandlerRegistrater == null){
 125  0
             resizeHandlerRegistrater =  Window.addResizeHandler(resizeHandler);
 126  
         }
 127  0
     }
 128  
     public void setCloseLinkVisible(boolean visible){
 129  0
         closeLink.setVisible(visible);
 130  0
     }
 131  
     public void addButton(Widget button){
 132  0
             button.addStyleName("ks-button-spacing");
 133  0
         buttonPanel.add(button);
 134  0
     }
 135  
 
 136  
     @SuppressWarnings("unchecked")
 137  
         public void addButtonGroup(ButtonGroup group){
 138  0
             buttonPanel.add(group);
 139  0
     }
 140  
 
 141  
     public void setWidget(Widget content){
 142  0
         verticalPanel.setWidget(0, 0, content);
 143  0
         verticalPanel.getRowFormatter().setStyleName(0, "ks-lightbox-contentRow");
 144  0
     }
 145  
     public void setMaxWidth(int width){
 146  0
         this.maxWidth = width;
 147  0
     }
 148  
     public void setMaxHeight(int height){
 149  0
         this.maxHeight = height;
 150  0
     }
 151  
     public void setSize(int width, int height){
 152  0
         super.setSize(width+"px", height+"px");
 153  0
         this.permHeight = height;
 154  0
         this.permWidth = width;
 155  0
         scrollPanel.setSize((width+10)+"px", (height+10)+"px");
 156  0
     }
 157  
 
 158  
     public void showButtons(boolean show){
 159  0
             buttonPanel.setVisible(show);
 160  0
     }
 161  
 
 162  
     @Override
 163  
     public void hide(){
 164  0
         super.hide();
 165  0
         uninstallResizeHandler();
 166  0
     }
 167  
     @Override
 168  
     public void show(){
 169  0
         resizeDialog();
 170  0
         installResizeHandler();
 171  0
         super.show();
 172  0
         super.center();
 173  0
         grabFocus();
 174  0
     }
 175  
 
 176  
     private void grabFocus() {
 177  0
         Widget mainContent = verticalPanel.getWidget(0, 0);
 178  0
         NodeList<Element> nodeList = mainContent.getElement().getElementsByTagName("*");
 179  0
         for (int i = 0; i < nodeList.getLength(); i++) {
 180  0
             Element e = nodeList.getItem(i);
 181  0
             if (FOCUSABLE_TAGS.contains(e.getTagName().toUpperCase())) {
 182  0
                 e.focus();
 183  0
                 return;
 184  
             }
 185  
         }
 186  
 
 187  
 
 188  
 /*
 189  
         Widget mainContent = verticalPanel.getWidget(0, 0);
 190  
         if(mainContent instanceof HasWidgets){
 191  
             HasWidgets hasWidget = (HasWidgets) mainContent;
 192  
             Iterator<Widget> iter =  hasWidget.iterator();
 193  
             
 194  
             for(;iter.hasNext();){
 195  
                 Widget w = iter.next();
 196  
               //  if(w instanceof Composite ){
 197  
                 //    Composite c = (Composite)w;
 198  
                   //  c.
 199  
                // }
 200  
                 if(w instanceof FocusWidget){
 201  
                     ((FocusWidget)w).setFocus(true);
 202  
                     return;
 203  
                 }else if(w instanceof HasWidgets){
 204  
                     grabFocus((HasWidgets) w);
 205  
                 }
 206  
             }
 207  
         }
 208  
 */
 209  0
     }
 210  
 /*    private void grabFocus(HasWidgets hasWidgets){
 211  
         Iterator<Widget> iter =  hasWidgets.iterator();
 212  
         for(;iter.hasNext();){
 213  
             Widget w = iter.next();
 214  
             if(w instanceof FocusWidget){
 215  
                 ((FocusWidget)w).setFocus(true);
 216  
                 return;
 217  
             }else if(w instanceof HasWidgets){
 218  
                 grabFocus((HasWidgets) w);
 219  
             }
 220  
         }
 221  
     }
 222  
 */
 223  
     @Override
 224  
     protected void onPreviewNativeEvent(NativePreviewEvent preview) {
 225  0
         super.onPreviewNativeEvent(preview);
 226  0
         NativeEvent evt = preview.getNativeEvent();
 227  0
         if (evt.getType().equals("keydown")) {
 228  0
             switch (evt.getKeyCode()) {
 229  
             case KeyCodes.KEY_ESCAPE:
 230  0
                 hide();
 231  
                 break;
 232  
             }
 233  
         }
 234  0
     }
 235  
     public Widget getWidget() {
 236  0
             return verticalPanel.getWidget(0, 0);
 237  
     }
 238  
 
 239  
     public void removeCloseLink(){
 240  0
         closeLink.setVisible(false);
 241  0
     }
 242  
 //    public HandlerRegistration addCloseHandler(CloseHandler<KSLightBox> handler){
 243  
   //      return handlers.addHandler(CloseEvent.getType(), handler);
 244  
    // }
 245  
 
 246  
     private void resizeDialog(){
 247  
 
 248  0
             int width = maxWidth;
 249  0
         int height = maxHeight;
 250  
 
 251  
         //Width calculation
 252  0
         if(permWidth != -1){
 253  0
                     width = permWidth;
 254  
             }
 255  
         else{
 256  0
                 if (Window.getClientWidth() < 850){
 257  0
                 width = Window.getClientWidth() - 160;
 258  
             }
 259  0
                 if(width > maxWidth){
 260  0
                 width = maxWidth;
 261  
             }
 262  0
                 if(width < minWidth){
 263  0
                         width = minWidth;
 264  
                 }
 265  
         }
 266  
 
 267  
         //Height calculation
 268  0
         if(permHeight != -1){
 269  0
                     height = permHeight;
 270  
             }
 271  
         else{
 272  0
                 height = Window.getClientHeight() - 160;
 273  
 
 274  0
                 if(height > maxHeight && maxHeight != 0){
 275  0
                 height = maxHeight;
 276  
             }
 277  0
                 if(height < minHeight){
 278  0
                         height = minHeight;
 279  
                 }
 280  
         }
 281  
 
 282  0
         if(width > 0 && height > 0){
 283  0
             super.setSize(width + "px", height + "px");
 284  0
             scrollPanel.setSize((width+10)+"px", (height+10)+"px");
 285  
         }
 286  
 
 287  
 /*        DeferredCommand.addCommand(new Command(){
 288  
 
 289  
             @Override
 290  
             public void execute() {
 291  
                     //center();
 292  
                 int left = (Window.getClientWidth() - getOffsetWidth()) >> 1;
 293  
                 int top = (Window.getClientHeight() - getOffsetHeight()) >> 1;
 294  
                 setPopupPosition(Math.max(Window.getScrollLeft() + left, 0), Math.max(
 295  
                     Window.getScrollTop() + top, 0));
 296  
             }
 297  
         });  */
 298  0
     }
 299  
 
 300  0
     class KSDialogResizeHandler implements ResizeHandler{
 301  
         @Override
 302  
         public void onResize(ResizeEvent event) {
 303  0
             DeferredCommand.addCommand(new Command(){
 304  
 
 305  
                 @Override
 306  
                 public void execute() {
 307  0
                     resizeDialog();
 308  0
                     int left = (Window.getClientWidth() - getOffsetWidth()) >> 1;
 309  0
                     int top = (Window.getClientHeight() - getOffsetHeight()) >> 1;
 310  0
                     setPopupPosition(Math.max(Window.getScrollLeft() + left, 0), Math.max(
 311  
                         Window.getScrollTop() + top, 0));
 312  0
                 }
 313  
             });
 314  0
         }
 315  
     }
 316  
 
 317  
 }