Showing posts with label GWT GXT. Show all posts
Showing posts with label GWT GXT. Show all posts
0

Multi Form Button Binding

I have to break the form into 2 columns that need to use a separate form panels.
But FormButtonBinding not support more than 1 form panels. So I decided to write a new one based on GXT FormButtonBinding

package com.vcari.client;

import java.util.ArrayList;
import java.util.List;

import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.google.gwt.user.client.Timer;

/**
 * Monitors the valid state of a form and enabled / disabled all buttons.
 */
public class MultiFormButtonBinding {

  // private FormPanel panel;
  private List<FormPanel> panels = new ArrayList<FormPanel>();
  private Timer timer;
  private int interval = 500;
  private Listener<ComponentEvent> listener;
  private List<Button> buttons;

  public MultiFormButtonBinding(List<FormPanel> panels) {
    this.panels = panels;

    buttons = new ArrayList<Button>();
    timer = new Timer() {
      @Override
      public void run() {
        MultiFormButtonBinding.this.checkPanel();
      }
    };
    listener = new Listener<ComponentEvent>() {
      public void handleEvent(ComponentEvent be) {
        if (be.getType() == Events.Attach) {
          MultiFormButtonBinding.this.startMonitoring();
        } else if (be.getType() == Events.Detach) {
          MultiFormButtonBinding.this.stopMonitoring();
        }
      }
    };

    for (FormPanel formPanel : panels) {
      formPanel.addListener(Events.Attach, listener);
      formPanel.addListener(Events.Detach, listener);
      if (formPanel.isAttached()) {
        startMonitoring();
      }
    }

    // panel.addListener(Events.Attach, listener);
    // panel.addListener(Events.Detach, listener);

  }

  public void addButton(Button button) {
    buttons.add(button);
  }

  public int getInterval() {
    return interval;
  }

  public void removeButton(Button button) {
    buttons.remove(button);
  }

  public void setInterval(int interval) {
    this.interval = interval;
  }

  public void startMonitoring() {
    for (FormPanel formPanel : panels) {
      if (formPanel.isAttached()) {
        timer.run();
        timer.scheduleRepeating(interval);
        break;
      }      
    }    
  }

  public void stopMonitoring() {
    timer.cancel();
  }

  protected boolean checkPanel() {
    boolean v=true;
    for (FormPanel formPanel : panels) {
      boolean v1 = formPanel.isValid(true);
      v=v && v1;
      
    }  
    
    for (Button button : buttons) {
      if (v != button.isEnabled()) {
        button.setEnabled(v);
      }
    }
    return v;
  }

}

Example :

List<FormPanel> panels=new ArrayList<FormPanel>();
panels.add(form);
panels.add(form2);
MultiFormButtonBinding buttonBinding=new MultiFormButtonBinding(panels);
buttonBinding.addButton(btnSubmit);
0

GXT Form AutoFocus

I have a login form and want it focus on the username textfield when it loads.
The solution is very simple, just need to set an event (onFocus) for the container.


 addListener(Events.OnFocus, new Listener<ComponentEvent>() {
    public void handleEvent(ComponentEvent e) {
        txtFldUsername.focus();
    }
});


Source : http://code.google.com/p/topcat/source/browse/trunk/Code/TopCAT/src/main/java/uk/ac/stfc/topcat/gwt/client/widget/LoginWidget.java?r=74
0

GWT/GXT UTF-8

One of my project require to use Thai character (UTF-8).
The solution is very simple. In order to use internationalized characters, make sure that the host HTML file contains the charset=utf8 content type in the meta tag in the header:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />


Source : https://developers.google.com/web-toolkit/doc/latest/DevGuideI18n#DevGuideStaticStringInternationalization
1

GXT set DateField value from string

Here is the code to set GXT datefield value from the date string.

String sdate="24-01-2012";  //24 Jan 2012
DateTimeFormat dformat = DateTimeFormat.getFormat("dd-MM-yyyy");
DateField date2 = new DateField();
date2.getPropertyEditor().setFormat(dtFormat);
Date dDate= dformat.parse(sdate);
date2.setValue(dDate);
 
Copyright © peyotest