package org.gcube.portlets.user.workspace.client.view.panels; import org.gcube.portlets.user.workspace.client.AppController; import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.client.ConstantsPortlet; import org.gcube.portlets.user.workspace.client.event.SaveSmartFolderEvent; import org.gcube.portlets.user.workspace.client.event.SearchTextEvent; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.KeyListener; import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.VerticalPanel; import com.extjs.gxt.ui.client.widget.form.DateField; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.RootPanel; /** * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @author Massimiliano Assante ISTI-CNR * * @version 1.0 May 14th 2012 */ public class GxtSeachAndFilterPanel extends LayoutContainer { // private HTML txtViewScope = new HTML(""+ConstantsPortlet.VIEWSPACE+":"); private final TextField textSearch = new TextField(); private Button bSearch = new Button(ConstantsPortlet.SEARCH); private Button bCancel = new Button(ConstantsPortlet.CANCEL); private Button bSave = new Button(ConstantsPortlet.SAVE); private TextField textFull = new TextField(); private DateField fromDate = new DateField(); private DateField toDate = new DateField(); private HorizontalPanel toolbarPathPanel = null; private boolean isSearchActive = false; private VerticalPanel cp = new VerticalPanel(); HorizontalPanel hp = new HorizontalPanel(); HorizontalPanel hpMain = new HorizontalPanel(); public GxtSeachAndFilterPanel(HorizontalPanel toolbarContainer) { // txtViewScope.getElement().getStyle().setColor("#15428B"); // txtViewScope.getElement().getStyle().setFontSize(12, Unit.PX); setLayout(new FitLayout()); setBorders(true); setId("SearchAndFilter"); // this.cbViewScope.setAutoWidth(true); this.toolbarPathPanel = toolbarContainer; cp.add(this.toolbarPathPanel); hp.setStyleAttribute("padding", "2px"); // this.cbViewScope.setStyleAttribute("margin-right", "70px"); seVisibleButtonsCancelSave(false); textSearch.setAllowBlank(true); textSearch.setEmptyText(ConstantsPortlet.SEARCHINWORSPACE); textSearch.setWidth(325); textSearch.setHeight(22); textSearch.setRegex("^[a-zA-Z0-9]+[ a-zA-Z0-9_().-]*"); //alphanumeric textSearch.getMessages().setRegexText(ConstantsExplorer.MESSAGE_SEARCH_FORCE_APHANUMERIC); textSearch.setAutoValidate(true); hp.add(textSearch); bSearch.setStyleName("wizardButton"); bSearch.getElement().getStyle().setMarginLeft(3, Unit.PX); bCancel.setStyleName("wizardButton"); bCancel.getElement().getStyle().setMarginLeft(3, Unit.PX); bSave.setStyleName("wizardButton"); bSave.getElement().getStyle().setMarginLeft(3, Unit.PX); hp.add(bSearch); // hp.add(bCancel); hp.add(bSave); bSearch.setWidth("70px"); bSave.setWidth("70px"); hpMain.setWidth("100%"); hp.setWidth("100%"); hpMain.add(hp); cp.add(hpMain); this.addListeners(); add(cp); updateSize(); Window.addResizeHandler(new ResizeHandler() { @Override public void onResize(ResizeEvent event) { updateSize(); } }); layout(); } /** * Update window size */ public void updateSize() { RootPanel workspace = RootPanel.get(ConstantsPortlet.WORKSPACEDIV); int leftBorder = workspace.getAbsoluteLeft(); int rootWidth = Window.getClientWidth() - 2* leftBorder; //- rightScrollBar; //SOLUTION FOR SCOPE INVISIBLE hpMain.setWidth(rootWidth-10); hp.setWidth("100%"); // ORIGINAL CODE // hp.setWidth(rootWidth - 500); } public void searchText(String value){ textSearch.setValue(value); seVisibleButtonsCancelSave(true); AppController.getEventBus().fireEvent(new SearchTextEvent(value)); } private void addListeners(){ bSearch.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if(textSearch.getValue()!=null && !textSearch.getValue().isEmpty() && textSearch.isValid()){ // seVisibleButtonsCancelSave(true); // AppController.getEventBus().fireEvent(new SearchTextEvent(textSearch.getValue())); searchText(textSearch.getValue()); } } }); KeyListener keyListener = new KeyListener() { public void componentKeyUp(ComponentEvent event) { if (event.getKeyCode() == 13) { // KEY_ENTER // seVisibleButtonsCancelSave(true); // AppController.getEventBus().fireEvent(new SearchTextEvent(textSearch.getValue())); searchText(textSearch.getValue()); } } }; textSearch.addKeyListener(keyListener); bSave.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if(textSearch.getValue()!=null && !textSearch.getValue().isEmpty() && textSearch.isValid()){ if (textSearch.getValue() != null && textSearch.getValue().length()>0) { AppController.getEventBus().fireEvent(new SaveSmartFolderEvent(null, textSearch.getValue(), null)); } } } }); } public void resetFields(){ this.textSearch.reset(); this.textFull.reset(); this.fromDate.reset(); this.toDate.reset(); } public void seVisibleButtonsCancelSave(boolean flag){ this.bCancel.setVisible(flag); this.bSave.setVisible(flag); } public void searchCancel(){ resetFields(); seVisibleButtonsCancelSave(false); // AppController.getEventBus().fireEvent(new SearchTextEvent(null)); } public boolean isSearchActive(){ return this.isSearchActive; } public void setSearchActive(boolean isSearchActive) { // System.out.println("#################SET SEARCH ACTIVE in GRID " + isSearchActive); this.isSearchActive = isSearchActive; } public void setVisibleButtonSave(boolean bool){ this.bSave.setVisible(bool); } public void setEmptyText(String emptyText){ textSearch.setEmptyText(emptyText); } }