Changeset 5238

Show
Ignore:
Timestamp:
08/21/08 11:59:09 (3 months ago)
Author:
jouni.koivuviita@…
Message:

API changes:
Window.setResizable(boolean resizability) now allows to disable end-user sub-window resizing.
Window.center() allows to request a sub-window to be centered on screen.

Improved theming capabilities for IWindow: window borders are now calculated dynamically for every sub-window instance, previously only one final static was specified.

Location:
trunk
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/WebContent/ITMILL/themes/default/styles.css

    r5174 r5238  
    22812281} 
    22822282 
     2283.i-window-resizebox-disabled { 
     2284        cursor: default; 
     2285        background: transparent; 
     2286} 
     2287 
    22832288.i-window-closebox { 
    22842289        position:absolute; 
     
    23562361        background: url(window/img/resize.png); 
    23572362} 
     2363* html .i-window-resizebox-disabled { 
     2364        background: transparent; 
     2365} 
    23582366*+html .i-window-resizebox { 
    23592367        bottom: 0; 
  • trunk/WebContent/ITMILL/themes/default/window/window.css

    r5105 r5238  
    9898} 
    9999 
     100.i-window-resizebox-disabled { 
     101        cursor: default; 
     102        background: transparent; 
     103} 
     104 
    100105.i-window-closebox { 
    101106        position:absolute; 
     
    173178        background: url(img/resize.png); 
    174179} 
     180* html .i-window-resizebox-disabled { 
     181        background: transparent; 
     182} 
    175183*+html .i-window-resizebox { 
    176184        bottom: 0; 
  • trunk/src/com/itmill/toolkit/terminal/gwt/client/DebugConsole.java

    r5147 r5238  
    6464        setPixelSize(60, 60); 
    6565        setPopupPosition(Window.getClientWidth() 
    66                 - (100 + IWindow.BORDER_WIDTH_HORIZONTAL), 0); 
     66                - 142, 0); 
    6767    } 
    6868 
  • trunk/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java

    r5222 r5238  
    4343    public static final String CLASSNAME = "i-window"; 
    4444 
    45     /** pixels used by inner borders and paddings horizontally */ 
    46     protected static final int BORDER_WIDTH_HORIZONTAL = 41; 
    47  
    48     /** pixels used by headers, footers, inner borders and paddings vertically */ 
    49     protected static final int BORDER_WIDTH_VERTICAL = 58; 
     45    /** 
     46     * pixels used by inner borders and paddings horizontally (calculated on 
     47     * attach) 
     48    */ 
     49    private int borderWidthHorizontal = 0; 
    5050 
    5151    private static final int STACKING_OFFSET_PIXELS = 15; 
     
    9696 
    9797    private boolean modal = false; 
     98 
     99    private boolean resizable = true; 
    98100 
    99101    private Element modalityCurtain; 
     
    206208        if (uidl.getBooleanAttribute("modal") != modal) { 
    207209            setModal(!modal); 
     210        } 
     211 
     212        if (uidl.getBooleanAttribute("resizable") != resizable) { 
     213            setResizable(!resizable); 
    208214        } 
    209215 
     
    368374                .getIntVariable("scrollLeft")); 
    369375 
     376        // Center this window on screen if requested 
     377        // This has to be here because we might not know the content size before 
     378        // everything is painted into the window 
     379        if (uidl.getBooleanAttribute("center")) { 
     380            center(); 
     381        } 
     382 
    370383    } 
    371384 
     
    491504    } 
    492505 
     506    private void setResizable(boolean resizability) { 
     507        resizable = resizability; 
     508        if (resizability) { 
     509            DOM.setElementProperty(resizeBox, "className", CLASSNAME 
     510                    + "-resizebox"); 
     511        } else { 
     512            DOM.setElementProperty(resizeBox, "className", CLASSNAME 
     513                    + "-resizebox " + CLASSNAME + "-resizebox-disabled"); 
     514        } 
     515    } 
     516 
    493517    public void setPopupPosition(int left, int top) { 
    494518        super.setPopupPosition(left, top); 
     
    563587 
    564588    private void onResizeEvent(Event event) { 
    565         switch (DOM.eventGetType(event)) { 
    566         case Event.ONMOUSEDOWN: 
    567             if (!isActive()) { 
    568                 bringToFront(); 
    569             } 
    570             showDraggingCurtain(true); 
    571             resizing = true; 
    572             startX = DOM.eventGetScreenX(event); 
    573             startY = DOM.eventGetScreenY(event); 
    574             origW = getWidget().getOffsetWidth(); 
    575             origH = getWidget().getOffsetHeight(); 
    576             DOM.setCapture(getElement()); 
    577             DOM.eventPreventDefault(event); 
    578             break; 
    579         case Event.ONMOUSEUP: 
    580             showDraggingCurtain(false); 
    581             resizing = false; 
    582             DOM.releaseCapture(getElement()); 
    583             setSize(event, true); 
    584             break; 
    585         case Event.ONLOSECAPTURE: 
    586             showDraggingCurtain(false); 
    587             resizing = false; 
    588         case Event.ONMOUSEMOVE: 
    589             if (resizing) { 
    590                 setSize(event, false); 
     589        if (resizable) { 
     590            switch (DOM.eventGetType(event)) { 
     591            case Event.ONMOUSEDOWN: 
     592                if (!isActive()) { 
     593                    bringToFront(); 
     594                } 
     595                showDraggingCurtain(true); 
     596                resizing = true; 
     597                startX = DOM.eventGetScreenX(event); 
     598                startY = DOM.eventGetScreenY(event); 
     599                origW = getWidget().getOffsetWidth(); 
     600                origH = getWidget().getOffsetHeight(); 
     601                DOM.setCapture(getElement()); 
    591602                DOM.eventPreventDefault(event); 
    592             } 
    593             break; 
    594         default: 
    595             DOM.eventPreventDefault(event); 
    596             break; 
     603                break; 
     604            case Event.ONMOUSEUP: 
     605                showDraggingCurtain(false); 
     606                resizing = false; 
     607                DOM.releaseCapture(getElement()); 
     608                setSize(event, true); 
     609                break; 
     610            case Event.ONLOSECAPTURE: 
     611                showDraggingCurtain(false); 
     612                resizing = false; 
     613            case Event.ONMOUSEMOVE: 
     614                if (resizing) { 
     615                    setSize(event, false); 
     616                    DOM.eventPreventDefault(event); 
     617                } 
     618                break; 
     619            default: 
     620                DOM.eventPreventDefault(event); 
     621                break; 
     622            } 
    597623        } 
    598624    } 
     
    625651                            "width", 
    626652                            (Integer.parseInt(width.substring(0, 
    627                                     width.length() - 2)) + BORDER_WIDTH_HORIZONTAL) 
     653                                    width.length() - 2)) + borderWidthHorizontal) 
    628654                                    + "px"); 
    629655        } 
     
    696722    } 
    697723 
     724    protected void onAttach() { 
     725        super.onAttach(); 
     726        // Calculate space required by window borders, so we can accurately 
     727        // calculate space for content 
     728        final int contentWidth = DOM.getElementPropertyInt(contentPanel 
     729                .getElement(), "offsetWidth"); 
     730        final int windowWidth = DOM.getElementPropertyInt(getElement(), 
     731                "offsetWidth"); 
     732        borderWidthHorizontal = windowWidth - contentWidth; 
     733    } 
     734 
    698735} 
  • trunk/src/com/itmill/toolkit/ui/Window.java

    r5076 r5238  
    108108 
    109109    private boolean modal = false; 
     110 
     111    private boolean resizable = true; 
     112 
     113    private boolean centerRequested = false; 
    110114 
    111115    /* ********************************************************************* */ 
     
    469473        if (modal) { 
    470474            target.addAttribute("modal", true); 
     475        } 
     476 
     477        if (resizable) { 
     478            target.addAttribute("resizable", true); 
     479        } 
     480         
     481        if(centerRequested) { 
     482            target.addAttribute("center", true); 
     483            centerRequested = false; 
    471484        } 
    472485 
     
    10241037    /** 
    10251038     * Sets sub-window modal, so that widgets behind it cannot be accessed. 
     1039     * <b>Note:</b> affects sub-windows only. 
    10261040     *  
    10271041     * @param modality 
     
    10301044    public void setModal(boolean modality) { 
    10311045        modal = modality; 
     1046        center(); 
     1047        requestRepaint(); 
     1048    } 
     1049 
     1050    /** 
     1051     * @return true if this window is modal. 
     1052     */ 
     1053    public boolean isModal() { 
     1054        return modal; 
     1055    } 
     1056 
     1057    /** 
     1058     * Sets sub-window resizable. 
     1059     * <b>Note:</b> affects sub-windows only. 
     1060     *  
     1061     * @param resizable 
     1062     *                true if resizability is to be turned on 
     1063     */ 
     1064    public void setResizable(boolean resizeability) { 
     1065        resizable = resizeability; 
     1066        requestRepaint(); 
     1067    } 
     1068 
     1069    /** 
     1070     *  
     1071     * @return true if window is resizable by the end-user, otherwise false. 
     1072     */ 
     1073    public boolean isResizable() { 
     1074        return resizable; 
     1075    } 
     1076 
     1077    /** 
     1078     * Request to center this window on the screen. 
     1079     * <b>Note:</b> affects sub-windows only. 
     1080     */ 
     1081    public void center() { 
     1082        centerRequested = true; 
    10321083    } 
    10331084