Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Unable to click icon

    Hi,

    SC_SNAPSHOT-2011-04-10/EVAL Deployment
    Internet Explorer 8.0

    When running the below test case in Internet Explorer 8, I am unable to click
    the icon that will show our custom dialog. In FireFox 3.6.16 it works perfectly.

    Repo case, click in the testitem => icon is shown.
    Move mouse pointer over icon and click icon => icon is hidden again!

    Regards,
    Bart


    Code:
    public class Standalone implements EntryPoint {
    		
    	private static Canvas masterPanel = null;
    	
    	public void onModuleLoad() {
    		  		
    		//masterPanel should be a Layout
    		masterPanel = new Canvas(); 
    		masterPanel.setHeight100();
    		masterPanel.setWidth100();
    		masterPanel.setStyleName("pageBackground"); //background style from skin
    		
    		masterPanel.addChild(testCase1());
    		masterPanel.draw();	
    	}
    
    	    public DynamicForm testCase1() {   
    	  	  
    	        DataSource dataSource = new DataSource();   
    	  
    	        DataSourceField myTextField = new DataSourceField();   
    	        myTextField.setName("textField");   
    	        myTextField.setTitle("textField");   
    	        myTextField.setType(new MyTextType());   
    	        myTextField.setEditorType(new MyTextEditor());
    	  
    	        dataSource.setFields(myTextField);   
    	          
    	        DynamicForm form = new DynamicForm();   
    	        form.setHeight(170);   
    	        form.setWidth(500);
    	        form.setDataSource(dataSource);
       	        return form;
    	    }
    
    }
    
        public static class MyTextType extends SimpleType {   
            public MyTextType() {   
                super("myTextType", FieldType.ANY);   
     
            }   
        }  
    
        private class MyTextEditor extends TextItem {
    
        	private Dialog dialog;
        	private FormItem currentItem;
        	
        	/*
        	 * Setting the picker to show causes an onBlur event. So we would be stuck in a loop.
        	 */
        	private boolean ignoreFocusInBlurEvent = false;
        	/*
        	 * The onFocus might actually trigger a lot of events for the full duration of having focus. So omit unnecessary redraws()s.
        	 */
        	private boolean isPickerShowing = false;
    
        	public MyTextEditor() {
        		super();
        		setChangeOnKeypress(false);
        		setSelectOnFocus(true);
        		setValidateOnExit(true);
        		
        		FormItemIcon icon = new FormItemIcon();
        		icon.setSrc("[SKIN]/actions/edit.png");
        		icon.setTabIndex(-1);    		
        		setIcons(icon);
        		setShowIcons(false);
        		
        		// If user clicks in this field
        		addFocusHandler(new FocusHandler() {		
        			public void onFocus(FocusEvent event) {	
        				if (isPickerShowing) return;
        				ignoreFocusInBlurEvent = true;
        				event.getItem().setShowIcons(true);
        				event.getItem().getContainerWidget().redraw();
        				event.getItem().focusInItem();
        				
        				isPickerShowing = true;
        				ignoreFocusInBlurEvent = false;
        			}
        		});
    
        		//If focus gone
        		addBlurHandler(new BlurHandler() {
    
        			public void onBlur(BlurEvent event) {					 
        				if (!isPickerShowing) return;
        				if (ignoreFocusInBlurEvent)	return;				
        				
        				event.getItem().setShowIcons(false);
        				event.getItem().redraw();
        				isPickerShowing = false;
        			}
        		});
        		
        		addIconClickHandler(new IconClickHandler() {
    
        			public void onIconClick(IconClickEvent event) {
        				// get global coordinates of the clicked picker icon
        				Rectangle iconRect = getIconPageRect(event.getIcon());
    
        				Object source = event.getSource();
    
        				if (source != null) {
        					currentItem = event.getItem();
        					// show the picker dialog
        					if (iconRect != null) {
        						showDialog(iconRect.getLeft(), iconRect.getTop());
        					} else {
        						showDialog(EventHandler.getX(), EventHandler.getY());
        					}
        				}
        			}
    
        		});
    
        	}
        	
        	private void showDialog(int left, int top) {
        		
        		if (dialog == null) {
        			createDialog(currentItem, currentItem.getValue());
        		}    		
    
        		// don't put dialog outside pageRight
        		if (left + dialog.getWidth() > Page.getWidth()) {
        			left = Page.getWidth() - dialog.getWidth() - 5; // margin
        			if (left < 0)
        				left = 5;
        		}
        		// don't put dialog outside pageBottom
        		if (top + dialog.getHeight() > Page.getHeight()) {
        			top = Page.getHeight() - dialog.getHeight() - 5; // margin
        			if (top < 0)
        				top = 5;
        		}
        		dialog.moveTo(left, top);
        		dialog.show();
        	}
        	
        	private void createDialog(final FormItem item, final Object enteredValue) {
    
        		dialog = new Dialog();
        		dialog.setDismissOnEscape(true); // close on esc
        		dialog.setDismissOnOutsideClick(true); // close when clicked outside
        		dialog.setAutoCenter(true);
        		dialog.setIsModal(true);
        		dialog.setShowEdges(false);
        		dialog.setBorder("1px solid #555555"); // show a line around the box
        		dialog.setShowHeader(false);
        		dialog.setShowToolbar(false);
        		dialog.setAutoSize(true);
        		dialog.setBackgroundColor("#FFFFFF"); // without this you could see true
        		
        		// the dialog in some browsers
    
        		final DynamicForm dialogForm = new DynamicForm();
        		dialogForm.setAutoFocus(true);    	
    
        		final TextItem txtRefAmount = new TextItem("input");
        		txtRefAmount.setChangeOnKeypress(false);
        		txtRefAmount.setValidateOnChange(true);
        		txtRefAmount.setValidateOnExit(true);
        		txtRefAmount.setValidators(new IsFloatValidator());
        		txtRefAmount.setSelectOnFocus(true);
        		txtRefAmount.setTitle("Amount");
        		txtRefAmount.setValue(enteredValue);
    
        		dialogForm.addSubmitValuesHandler(new SubmitValuesHandler() {
        			public void onSubmitValues(SubmitValuesEvent event) {
        					
        					dialog.hide();	
        			}
        		});
    
        		final ButtonItem btnItem = new ButtonItem("Ok");
        		btnItem.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
    				
    				public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {				
    					dialogForm.submit();
    				}			
        		});
        		btnItem.setColSpan(2);
        		btnItem.setAlign(Alignment.RIGHT);
        		btnItem.setWidth(100);
    
        		dialogForm.setItems(txtRefAmount, btnItem);
    
        		dialog.addItem(dialogForm);
        		dialog.setVisibility(Visibility.HIDDEN);
        		dialog.draw();
        		
        	}
        	
        }
    }
    Last edited by bade; 12 Apr 2011, 02:16.

    #2
    Hi,

    Did you guys see the issue?

    Regards,
    Bart

    Comment


      #3
      Hi Bart,

      This is connected to your general desire to show icons on focus and hide them on blur - we owe you an estimate for Feature Sponsorship on that.

      Comment


        #4
        Ok thanx! Might be more pressing now as this is a bit of a show stopper :-/
        Anyways, always good to have a standalone test case right ;-)

        Regards,
        Bart

        Comment

        Working...
        X