diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/AppController.java b/src/main/java/org/gcube/portlets/user/workspace/client/AppController.java index 8ab8cdd..53eebe9 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/AppController.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/AppController.java @@ -71,6 +71,8 @@ import org.gcube.portlets.user.workspace.client.event.SearchTextEvent; import org.gcube.portlets.user.workspace.client.event.SearchTextEventHandler; import org.gcube.portlets.user.workspace.client.event.SendMessageEvent; import org.gcube.portlets.user.workspace.client.event.SendMessageEventHandler; +import org.gcube.portlets.user.workspace.client.event.StoreGridChangedEvent; +import org.gcube.portlets.user.workspace.client.event.StoreGridChangedEventHandler; import org.gcube.portlets.user.workspace.client.event.TrashEvent; import org.gcube.portlets.user.workspace.client.event.TrashEventHandler; import org.gcube.portlets.user.workspace.client.event.VREChangePermissionsEvent; @@ -82,7 +84,6 @@ import org.gcube.portlets.user.workspace.client.interfaces.EventsTypeEnum; import org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface; import org.gcube.portlets.user.workspace.client.model.FileGridModel; import org.gcube.portlets.user.workspace.client.model.FileModel; -import org.gcube.portlets.user.workspace.client.model.FileTrashedModel; import org.gcube.portlets.user.workspace.client.model.FolderModel; import org.gcube.portlets.user.workspace.client.model.ScopeModel; import org.gcube.portlets.user.workspace.client.view.WorskpacePortlet; @@ -174,6 +175,15 @@ public class AppController implements SubscriberInterface { private void bind() { + eventBus.addHandler(StoreGridChangedEvent.TYPE, new StoreGridChangedEventHandler() { + + @Override + public void onStoreChanged(StoreGridChangedEvent storeGridChangedEvent) { + + wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemDetails().updateItemsNumber(storeGridChangedEvent.getSize()); + } + }); + eventBus.addHandler(TrashEvent.TYPE, new TrashEventHandler() { @Override @@ -182,7 +192,7 @@ public class AppController implements SubscriberInterface { executeTrashOperation(trashEvent.getTrashOperation(), trashEvent.getTargetFileModels()); } }); - + //********EVENTS TO NOTIFY SUBSCRIBERS eventBus.addHandler(ActiveGroupingView.TYPE, new ActiveGroupingViewHandler() { diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/WorkspacePortlet.java b/src/main/java/org/gcube/portlets/user/workspace/client/WorkspacePortlet.java index 713655f..22ea3ea 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/WorkspacePortlet.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/WorkspacePortlet.java @@ -74,6 +74,7 @@ public class WorkspacePortlet implements EntryPoint { appController.getMainPanel().setHeight(rootHeight); appController.getMainPanel().setWidth(rootWidth); } + private void showGuidedTour() { GWT.log("oh"); GWT.runAsync(GCUBEGuidedTour.class, new RunAsyncCallback() { diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/event/StoreGridChangedEvent.java b/src/main/java/org/gcube/portlets/user/workspace/client/event/StoreGridChangedEvent.java new file mode 100644 index 0000000..7042091 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/event/StoreGridChangedEvent.java @@ -0,0 +1,37 @@ +package org.gcube.portlets.user.workspace.client.event; + +import com.google.gwt.event.shared.GwtEvent; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * + */ +public class StoreGridChangedEvent extends GwtEvent { + public static Type TYPE = new Type(); + + private int size = -1; + + + /** + * @param size + */ + public StoreGridChangedEvent(int size) { + this.size = size; + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(StoreGridChangedEventHandler handler) { + handler.onStoreChanged(this); + + } + + public int getSize() { + return size; + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/event/StoreGridChangedEventHandler.java b/src/main/java/org/gcube/portlets/user/workspace/client/event/StoreGridChangedEventHandler.java new file mode 100644 index 0000000..9eaee3b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/event/StoreGridChangedEventHandler.java @@ -0,0 +1,16 @@ +package org.gcube.portlets.user.workspace.client.event; + +import com.google.gwt.event.shared.EventHandler; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * + */ +public interface StoreGridChangedEventHandler extends EventHandler { + + /** + * @param storeGridChangedEvent + */ + void onStoreChanged(StoreGridChangedEvent storeGridChangedEvent); +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/model/GroupingStoreModel.java b/src/main/java/org/gcube/portlets/user/workspace/client/model/GroupingStoreModel.java index 5769ef1..9a3f468 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/model/GroupingStoreModel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/model/GroupingStoreModel.java @@ -43,6 +43,6 @@ public class GroupingStoreModel implements StoreOperationsInterface{ public void setListModel(List listModel) { this.store.removeAll(); this.store.add(listModel); - } + } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/WorskpacePortlet.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/WorskpacePortlet.java index 5b3e2e4..37ff009 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/WorskpacePortlet.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/WorskpacePortlet.java @@ -31,7 +31,7 @@ public class WorskpacePortlet { // Log.trace("Initializing WorskpacePortlet"); this.basicTabContainer = new GxtBasicTabPanel(); this.toolBarPathPanel = new GxtBreadcrumbPathPanel(); - this.searchAndFilterContainer = new GxtSeachAndFilterPanel(this.toolBarPathPanel.getToolBarPathPanel()); + this.searchAndFilterContainer = new GxtSeachAndFilterPanel(this.toolBarPathPanel); this.gridFilterGroupContainer = new GxtGridFilterGroupPanel(activeGroup); this.listViewContainer = new GxtListView(); diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/grids/GxtGridFilterGroupPanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/grids/GxtGridFilterGroupPanel.java index 947e019..f05bcf6 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/grids/GxtGridFilterGroupPanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/grids/GxtGridFilterGroupPanel.java @@ -14,6 +14,7 @@ import org.gcube.portlets.user.workspace.client.event.GridElementUnSelectedEvent import org.gcube.portlets.user.workspace.client.event.ImagePreviewEvent; import org.gcube.portlets.user.workspace.client.event.OpenContextMenuTreeEvent; import org.gcube.portlets.user.workspace.client.event.OpenReportsEvent; +import org.gcube.portlets.user.workspace.client.event.StoreGridChangedEvent; import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum; import org.gcube.portlets.user.workspace.client.model.FileGridModel; import org.gcube.portlets.user.workspace.client.model.FileModel; @@ -32,6 +33,8 @@ import com.extjs.gxt.ui.client.event.SelectionChangedListener; import com.extjs.gxt.ui.client.store.GroupingStore; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.store.Record; +import com.extjs.gxt.ui.client.store.Store; +import com.extjs.gxt.ui.client.store.StoreEvent; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.form.NumberField; @@ -49,6 +52,7 @@ import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.NumberFormat; +import com.google.gwt.user.client.Window; /** * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it @@ -257,14 +261,13 @@ public class GxtGridFilterGroupPanel extends LayoutContainer { } }); - - - new GridDragSource(grid); - cp.add(grid); add(cp); + + addDataChangedStoreListener(); + } public void disableGrouping() { @@ -512,4 +515,49 @@ public class GxtGridFilterGroupPanel extends LayoutContainer { } } + private void addDataChangedStoreListener(){ + + store.addListener(Store.Add, new Listener>(){ + + @Override + public void handleEvent(StoreEvent be) { + AppController.getEventBus().fireEvent(new StoreGridChangedEvent(storeSize())); + + } + }); + + store.addListener(Store.Remove, new Listener>(){ + + @Override + public void handleEvent(StoreEvent be) { + AppController.getEventBus().fireEvent(new StoreGridChangedEvent(storeSize())); + + } + }); + + store.addListener(Store.Clear, new Listener>(){ + + @Override + public void handleEvent(StoreEvent be) { + AppController.getEventBus().fireEvent(new StoreGridChangedEvent(storeSize())); + + } + }); + + } + + /** + * + * @return -1 if store is null. The size otherwise + */ + private int storeSize(){ + + if(store!=null && store.getModels()!=null){ + return store.getModels().size(); + } + + return -1; + + } + } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtBorderLayoutPanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtBorderLayoutPanel.java index 8bd3740..88ad5dc 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtBorderLayoutPanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtBorderLayoutPanel.java @@ -114,6 +114,16 @@ public class GxtBorderLayoutPanel extends ContentPanel { north.add(this.searchAndFilterContainer); west.add(this.expPanel); + + north.addListener(Events.Resize, new Listener(){ + + @Override + public void handleEvent(BoxComponentEvent be) { + + searchAndFilterContainer.getToolbarPathPanel().refreshSize(); + } + + }); // center.add(this.toolbarContainer); center.add(this.gxtCardLayoutResultPanel); diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtSeachAndFilterPanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtSeachAndFilterPanel.java index cc93a73..40dc794 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtSeachAndFilterPanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtSeachAndFilterPanel.java @@ -10,6 +10,8 @@ import org.gcube.portlets.user.workspace.client.event.ScopeChangeEvent; import org.gcube.portlets.user.workspace.client.event.SearchTextEvent; import org.gcube.portlets.user.workspace.client.model.ScopeModel; import org.gcube.portlets.user.workspace.client.view.GxtComboBox; +import org.gcube.portlets.user.workspace.client.view.toolbars.GxtBreadcrumbPathPanel; +import org.gcube.portlets.user.workspace.client.view.toolbars.GxtToolBarItemFunctionality; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.VerticalAlignment; @@ -44,7 +46,6 @@ public class GxtSeachAndFilterPanel extends LayoutContainer { private GxtComboBox comboBoxGxt = null; private ComboBox cbViewScope = null; -// 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); @@ -53,19 +54,17 @@ public class GxtSeachAndFilterPanel extends LayoutContainer { private DateField fromDate = new DateField(); private DateField toDate = new DateField(); private SimpleComboBox cbNameFilter = null; - private HorizontalPanel toolbarPathPanel = null; +// private HorizontalPanel hpToolbarPathPanel = null; private boolean isSearchActive = false; private VerticalPanel cp = new VerticalPanel(); - HorizontalPanel hp = new HorizontalPanel(); - HorizontalPanel hp2 = new HorizontalPanel(); + private HorizontalPanel hp = new HorizontalPanel(); + private HorizontalPanel hp2 = new HorizontalPanel(); - HorizontalPanel hpMain = new HorizontalPanel(); + private HorizontalPanel hpMain = new HorizontalPanel(); + private GxtBreadcrumbPathPanel toolbarPahtPanel; - public GxtSeachAndFilterPanel(HorizontalPanel toolbarContainer) { - -// txtViewScope.getElement().getStyle().setColor("#15428B"); -// txtViewScope.getElement().getStyle().setFontSize(12, Unit.PX); + public GxtSeachAndFilterPanel(GxtBreadcrumbPathPanel toolBarPathPanel) { setLayout(new FitLayout()); setBorders(true); @@ -77,15 +76,12 @@ public class GxtSeachAndFilterPanel extends LayoutContainer { this.cbViewScope.setWidth(360); // this.cbViewScope.setAutoWidth(true); - - this.toolbarPathPanel = toolbarContainer; - cp.add(this.toolbarPathPanel); + + this.toolbarPahtPanel = toolBarPathPanel; + cp.add(this.toolbarPahtPanel.getToolBarPathPanel()); hp.setStyleAttribute("padding", "2px"); - - // this.cbViewScope.setStyleAttribute("margin-right", "70px"); - seVisibleButtonsCancelSave(false); textSearch.setAllowBlank(true); @@ -244,7 +240,6 @@ public class GxtSeachAndFilterPanel extends LayoutContainer { public void searchCancel(){ resetFields(); seVisibleButtonsCancelSave(false); - // AppController.getEventBus().fireEvent(new SearchTextEvent(null)); } public boolean isSearchActive(){ @@ -262,7 +257,6 @@ public class GxtSeachAndFilterPanel extends LayoutContainer { } public void setSearchActive(boolean isSearchActive) { -// System.out.println("#################SET SEARCH ACTIVE in GRID " + isSearchActive); this.isSearchActive = isSearchActive; } @@ -274,4 +268,8 @@ public class GxtSeachAndFilterPanel extends LayoutContainer { textSearch.setEmptyText(emptyText); } + public GxtBreadcrumbPathPanel getToolbarPathPanel() { + return toolbarPahtPanel; + } + } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBottomToolBarItem.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBottomToolBarItem.java index 895b2b5..5bca83b 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBottomToolBarItem.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBottomToolBarItem.java @@ -10,14 +10,15 @@ import org.gcube.portlets.user.workspace.client.util.GetPermissionIconByACL; import org.gcube.portlets.user.workspace.shared.WorkspaceACL; import org.gcube.portlets.user.workspace.shared.WorkspaceTrashOperation; +import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; +import com.extjs.gxt.ui.client.widget.HorizontalPanel; +import com.extjs.gxt.ui.client.widget.Label; import com.extjs.gxt.ui.client.widget.Text; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.TextField; -import com.extjs.gxt.ui.client.widget.menu.SeparatorMenuItem; import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem; -import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.user.client.ui.AbstractImagePrototype; @@ -49,6 +50,8 @@ public class GxtBottomToolBarItem extends ToolBar{ private Button bRead; private Button btnGetTrash; private ACLDivInfo aclDivInfo; + private Label labelItemsNumber = new Label(); + private HorizontalPanel hpItemsNumber; public GxtBottomToolBarItem(){ super(); @@ -116,10 +119,18 @@ public class GxtBottomToolBarItem extends ToolBar{ add(btnGetTrash); - add(new SeparatorMenuItem()); +// add(new SeparatorMenuItem()); add(btnGetInfo); add(bHistory); - add(new FillToolItem()); + + hpItemsNumber = new HorizontalPanel(); + hpItemsNumber.setStyleAttribute("margin-left", "10px"); + hpItemsNumber.setHorizontalAlign(HorizontalAlignment.CENTER); + hpItemsNumber.add(labelItemsNumber); + +// add(new FillToolItem()); + add(hpItemsNumber); + add(new FillToolItem()); add(aclDivInfo); enableInfoHistoryButtons(false); @@ -182,4 +193,18 @@ public class GxtBottomToolBarItem extends ToolBar{ else btnGetTrash.setIcon(Resources.getTrashEmpty()); } + + /** + * @param size + */ + public void updateItemsNumber(int size) { + if(size<=0) + labelItemsNumber.setText("No Items"); + else if(size==1) + labelItemsNumber.setText("1 Item"); + else if(size>1) + labelItemsNumber.setText(size +" Items"); + + hpItemsNumber.layout(); + } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBreadcrumbPathPanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBreadcrumbPathPanel.java index 258cf69..3b0e1c2 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBreadcrumbPathPanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBreadcrumbPathPanel.java @@ -16,6 +16,7 @@ import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.Text; import com.extjs.gxt.ui.client.widget.WidgetComponent; import com.extjs.gxt.ui.client.widget.button.Button; +import com.google.gwt.core.shared.GWT; import com.google.gwt.user.client.ui.Image; /** @@ -26,7 +27,7 @@ public class GxtBreadcrumbPathPanel { private static final String ROOT_NAME = "Workspace"; - private HorizontalPanel toolBar = new HorizontalPanel(); + private HorizontalPanel hpToolBar = new HorizontalPanel(); private Text txtPath = new Text("PATH "); private LinkedHashMap hashFileModel = new LinkedHashMap();// Ordered-HashMap boolean rootAdded = false; @@ -35,19 +36,22 @@ public class GxtBreadcrumbPathPanel { private FileModel lastParent; public GxtBreadcrumbPathPanel() { - toolBar = new HorizontalPanel(); - toolBar.setHeight("25px"); + hpToolBar = new HorizontalPanel(); + hpToolBar.setId("myToolbarPath"); + hpToolBar.setHeight("25px"); initToolbar(); } public HorizontalPanel getToolBarPathPanel() { - return toolBar; + return hpToolBar; } public void setPath(List parents) { initToolbarWithoutFakeRoot(); + refreshSize(); + if (parents != null && parents.size() > 0) { ArrayList