Changeset 4847

Show
Ignore:
Timestamp:
06/10/08 12:53:37 (6 months ago)
Author:
marc.englund@…
Message:

Usability improvements; no longer animates, #1678 and #1679 fixed.
Vertical & scrollbar mode also fixed.

Location:
trunk
Files:
2 modified

Legend:

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

    r4561 r4847  
    44 
    55.i-slider { 
    6         border: 1px solid #cccfd0; 
     6        border-top: 1px solid #cccfd0; 
     7        border-bottom: 1px solid #cccfd0; 
    78        height: 3px; 
    89        margin: 5px 0; 
     
    1314        border-top: 1px solid #cbcdce; 
    1415        background: #f3f3f4; 
     16        border-left: 1px solid #cccfd0; 
     17        border-right: 1px solid #cccfd0; 
     18         
    1519} 
    1620.i-slider-handle { 
     
    2529        background-position: left bottom; 
    2630} 
     31 
     32.i-slider-scrollbar .i-slider-handle, 
     33.i-slider-scrollbar.i-slider-vertical .i-slider-handle { 
     34        background: #ffffff; 
     35        border: 1px solid #cccfd0; 
     36        border-radius: 6px; 
     37        -moz-border-radius: 6px; 
     38        -webkit-border-radius: 6px; 
     39         
     40} 
     41 
    2742/* TODO 
    2843.i-slider-bigger { 
     
    6277        height: auto; 
    6378        margin: 0 5px; 
     79        border: none; 
     80        border-left: 1px solid #cccfd0; 
     81        border-right: 1px solid #cccfd0; 
    6482} 
    6583.i-slider-vertical .i-slider-base { 
    6684        width: 2px; 
    6785        border-left: 1px solid #cbcdce; 
     86        border-right: none; 
    6887        background: #f3f3f4; 
     88        border-top: 1px solid #cccfd0; 
     89        border-bottom: 1px solid #cccfd0;        
    6990} 
    7091.i-slider-vertical .i-slider-handle { 
  • trunk/src/com/itmill/toolkit/terminal/gwt/client/ui/ISlider.java

    r4531 r4847  
    22@ITMillApache2LicenseForJavaFiles@ 
    33 */ 
    4  
     4//  
    55package com.itmill.toolkit.terminal.gwt.client.ui; 
    66 
     
    1010import com.google.gwt.user.client.Element; 
    1111import com.google.gwt.user.client.Event; 
    12 import com.google.gwt.user.client.Timer; 
    1312import com.google.gwt.user.client.ui.Widget; 
    1413import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection; 
     
    6160    /* Temporary dragging/animation variables */ 
    6261    private boolean dragging = false; 
    63     private Timer anim; 
    6462 
    6563    public ISlider() { 
     
    138136 
    139137        handleSize = uidl.getIntAttribute("hsize"); 
    140  
    141         if (uidl.hasAttribute("size")) { 
    142             size = uidl.getIntAttribute("size"); 
    143         } 
    144138 
    145139        buildBase(); 
     
    231225            return; 
    232226        } 
     227 
    233228        if (value.doubleValue() < min) { 
    234229            value = new Double(min); 
     
    246241        final int range = baseSize - handleSize; 
    247242        double v = value.doubleValue(); 
     243        // Round value to resolution 
     244        if (resolution > 0) { 
     245            v = Math.round(v * Math.pow(10, resolution)); 
     246            v = v / Math.pow(10, resolution); 
     247        } else { 
     248            v = Math.round(v); 
     249        } 
    248250        final double valueRange = max - min; 
    249251        double p = 0; 
     
    263265        final int current = DOM.getIntStyleAttribute(handle, styleAttribute); 
    264266 
    265         if ((int) (Math.round(pos)) != current && animate) { 
    266             if (anim != null) { 
    267                 anim.cancel(); 
    268             } 
    269             anim = new Timer() { 
    270                 private int current; 
    271                 private final int goal = (int) Math.round(pos); 
    272                 private int dir = 0; 
    273  
    274                 public void run() { 
    275                     current = DOM.getIntStyleAttribute(handle, styleAttribute); 
    276  
    277                     // Determine direction 
    278                     if (dir == 0) { 
    279                         dir = (goal - current) / Math.abs(goal - current); 
    280                     } 
    281  
    282                     if ((dir > 0 && current >= goal) 
    283                             || (dir < 0 && current <= goal)) { 
    284                         cancel(); 
    285                         return; 
    286                     } 
    287                     final int increment = (goal - current) / 2; 
    288                     DOM.setStyleAttribute(handle, styleAttribute, 
    289                             (current + increment) + "px"); 
    290                 } 
    291             }; 
    292             anim.scheduleRepeating(50); 
    293         } else { 
    294             DOM.setStyleAttribute(handle, styleAttribute, ((int) pos) + "px"); 
    295         } 
    296  
    297         // Round value to resolution 
    298         if (resolution > 0) { 
    299             v = (int) (v * Math.pow(10, resolution)); 
    300             v = v / Math.pow(10, resolution); 
    301         } else { 
    302             v = Math.round(v); 
    303         } 
     267        DOM.setStyleAttribute(handle, styleAttribute, (Math.round(pos)) + "px"); 
    304268 
    305269        // TODO give more detailed info when dragging and do roundup 
     
    326290            processHandleEvent(event); 
    327291        } else if (DOM.compare(targ, smaller)) { 
    328             decreaseValue(event, true); 
     292            decreaseValue(event); 
    329293        } else if (DOM.compare(targ, bigger)) { 
    330             increaseValue(event, true); 
     294            increaseValue(event); 
    331295        } else { 
    332296            processBaseEvent(event); 
     
    337301        final int dir = DOM.eventGetMouseWheelVelocityY(event); 
    338302        if (dir < 0) { 
    339             increaseValue(event, false); 
    340         } else { 
    341             decreaseValue(event, false); 
     303            increaseValue(event); 
     304        } else { 
     305            decreaseValue(event); 
    342306        } 
    343307        DOM.eventPreventDefault(event); 
     
    349313        case Event.ONMOUSEDOWN: 
    350314            if (!disabled && !readonly) { 
    351                 if (anim != null) { 
    352                     anim.cancel(); 
    353                 } 
    354315                dragging = true; 
    355316                DOM.setCapture(getElement()); 
     
    387348    } 
    388349 
    389     private void decreaseValue(Event event, boolean animate) { 
     350    private void decreaseValue(Event event) { 
    390351        setValue(new Double(value.doubleValue() - Math.pow(10, -resolution)), 
    391352                false, true); 
    392         if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && animate) { 
    393             if (anim != null) { 
    394                 anim.cancel(); 
    395             } 
    396             anim = new Timer() { 
    397                 public void run() { 
    398                     if (value.doubleValue() - Math.pow(10, -resolution) > min) { 
    399                         setValue(new Double(value.doubleValue() 
    400                                 - Math.pow(10, -resolution)), false, true); 
    401                     } 
    402                 } 
    403             }; 
    404             anim.scheduleRepeating(100); 
    405             DOM.eventCancelBubble(event, true); 
    406         } else if (anim != null) { 
    407             anim.cancel(); 
    408         } 
    409     } 
    410  
    411     private void increaseValue(Event event, boolean animate) { 
     353    } 
     354 
     355    private void increaseValue(Event event) { 
    412356        setValue(new Double(value.doubleValue() + Math.pow(10, -resolution)), 
    413357                false, true); 
    414         if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && animate) { 
    415             if (anim != null) { 
    416                 anim.cancel(); 
    417             } 
    418             anim = new Timer() { 
    419                 public void run() { 
    420                     if (value.doubleValue() - Math.pow(10, -resolution) < max) { 
    421                         setValue(new Double(value.doubleValue() 
    422                                 + Math.pow(10, -resolution)), false, true); 
    423                     } 
    424                 } 
    425             }; 
    426             anim.scheduleRepeating(100); 
    427             DOM.eventCancelBubble(event, true); 
    428         } else if (anim != null) { 
    429             anim.cancel(); 
    430         } 
    431358    } 
    432359 
     
    475402            DOM.setStyleAttribute(base, "height", "0"); 
    476403            DOM.setStyleAttribute(base, "overflow", "hidden"); 
    477             final int decoHeight = DOM.getElementPropertyInt(getElement(), 
    478                     "offsetHeight"); 
    479             // Get available space size 
    480             final int availableHeight = DOM.getElementPropertyInt(DOM 
    481                     .getParent(getElement()), "offsetHeight"); 
    482             int h = availableHeight - decoHeight; 
     404            int h = DOM.getElementPropertyInt(getElement(), "offsetHeight"); 
    483405            if (h < MIN_SIZE) { 
    484406                h = MIN_SIZE;