diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/sharing/multisuggest/MultiDragContact.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/sharing/multisuggest/MultiDragContact.java index a33a238..173c9db 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/sharing/multisuggest/MultiDragContact.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/sharing/multisuggest/MultiDragContact.java @@ -7,6 +7,7 @@ import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.client.model.ExtendedInfoContactModel; import org.gcube.portlets.user.workspace.client.model.InfoContactModel; import org.gcube.portlets.user.workspace.client.resources.Resources; +import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxConfirm; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.Orientation; @@ -15,7 +16,11 @@ import com.extjs.gxt.ui.client.Style.SortDir; import com.extjs.gxt.ui.client.Style.VerticalAlignment; import com.extjs.gxt.ui.client.dnd.GridDragSource; import com.extjs.gxt.ui.client.dnd.GridDropTarget; +import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.event.MessageBoxEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.store.Store; @@ -25,6 +30,7 @@ import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.Label; +import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.VerticalPanel; import com.extjs.gxt.ui.client.widget.button.Button; @@ -35,6 +41,7 @@ import com.extjs.gxt.ui.client.widget.grid.ColumnData; import com.extjs.gxt.ui.client.widget.grid.ColumnModel; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; +import com.extjs.gxt.ui.client.widget.layout.CenterLayout; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.layout.RowData; import com.extjs.gxt.ui.client.widget.layout.RowLayout; @@ -42,20 +49,38 @@ import com.extjs.gxt.ui.client.widget.tips.QuickTip; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; public class MultiDragContact extends Dialog { - - private GridDropTarget dropSource; - private GridDropTarget dropTarget; - private ListStore storeSource = new ListStore(); - private ListStore storeTarget = new ListStore(); - private TextArea textAreaAlreadyShared; - private Grid gridAllContacts; - private Grid gridShareWith; - private ColumnConfig columnConfigDisplayName; + + + + /** + * + */ +// protected static final int _247 = 247; + private static final int WIDTH_CP = 597; + private static final int HEIGHT_DIALOG = 542; + private static final int WIDTH_DIALOG = 625; + private static final int HEIGHT_GRID = 310; +// private static final int WIDTH_GRID = 250; + + private GridDropTarget dropSource; + private GridDropTarget dropTarget; + private ListStore storeSource = new ListStore(); + private ListStore storeTarget = new ListStore(); + private TextArea textAreaAlreadyShared; + private Grid gridAllContacts; + private Grid gridShareWith; + private ColumnConfig columnConfigDisplayName; + private Button buttonSelectedLeft; + private Button buttonSelectedRight; + private Button buttonAllRight; + private Button buttonAllLeft; public MultiDragContact() { setStyleAttribute("margin", "10px"); - setSize(563, 542); + setSize(WIDTH_DIALOG, HEIGHT_DIALOG); setHeading("Group dragging contacts"); + setResizable(false); + setMaximizable(false); setIcon(Resources.getIconUsers()); setModal(true); setScrollMode(Scroll.AUTOY); @@ -69,7 +94,7 @@ public class MultiDragContact extends Dialog { ContentPanel cpAlreadyShared = new ContentPanel(); - cpAlreadyShared.setSize(530, 60); + cpAlreadyShared.setSize(WIDTH_CP, 60); cpAlreadyShared.setHeaderVisible(false); cpAlreadyShared.setLayout(new FitLayout()); @@ -85,7 +110,7 @@ public class MultiDragContact extends Dialog { textAreaAlreadyShared = new TextArea(); // textField.setFieldLabel("Already shared with"); // textField.setHeight(30); - textAreaAlreadyShared.setWidth(401); + textAreaAlreadyShared.setWidth(501); textAreaAlreadyShared.setHeight(43); cpAlreadyShared.setStyleAttribute("padding-bottom", "5px"); textAreaAlreadyShared.setReadOnly(true); @@ -101,8 +126,8 @@ public class MultiDragContact extends Dialog { add(cpAlreadyShared); - ContentPanel cp = new ContentPanel(); - cp.setSize(530, 370); + final ContentPanel cp = new ContentPanel(); + cp.setSize(WIDTH_CP, 370); cp.setHeaderVisible(false); cp.setLayout(new RowLayout(Orientation.HORIZONTAL)); @@ -122,9 +147,9 @@ public class MultiDragContact extends Dialog { toolBar.add(buttonHelp); setTopComponent(toolBar); - VerticalPanel vp = new VerticalPanel(); - vp.setHorizontalAlign(HorizontalAlignment.CENTER); - vp.add(new Label("All Contacts")); + final VerticalPanel vpAllContacts = new VerticalPanel(); + vpAllContacts.setHorizontalAlign(HorizontalAlignment.CENTER); + vpAllContacts.add(new Label("All Contacts")); gridAllContacts = new Grid(storeSource, createColumnModel()); @@ -153,7 +178,7 @@ public class MultiDragContact extends Dialog { storeTarget.sort(InfoContactModel.FULLNAME, SortDir.ASC); - StoreFilterField filter = new StoreFilterField() { + final StoreFilterField filter = new StoreFilterField() { @Override protected boolean doSelect(Store store, @@ -170,8 +195,6 @@ public class MultiDragContact extends Dialog { }; -// filter.setFieldLabel("Filter Contacts"); - filter.setWidth(247); filter.setEmptyText("Filter All Contacts"); HorizontalPanel hp = new HorizontalPanel(); hp.setStyleAttribute("padding-top", "5px"); @@ -179,27 +202,32 @@ public class MultiDragContact extends Dialog { hp.add(filter); filter.bind(storeSource); - gridAllContacts.setSize(250,310); + gridAllContacts.setHeight(HEIGHT_GRID); gridAllContacts.setBorders(false); gridAllContacts.getView().setAutoFill(true); -// gridAllContacts.setAutoExpandColumn(InfoContactModel.FULLNAME); gridAllContacts.setBorders(true); - vp.add(hp); - vp.add(gridAllContacts); - - - - RowData rowData = new RowData(.5, 1); + vpAllContacts.add(hp); + vpAllContacts.add(gridAllContacts); + + RowData rowData = new RowData(.4, 1); rowData.setMargins(new Margins(6)); - cp.add(vp, rowData); - - vp = new VerticalPanel(); - vp.setHorizontalAlign(HorizontalAlignment.CENTER); - vp.add(new Label("Share with...")); + cp.add(vpAllContacts, rowData); + + rowData = new RowData(.2, 1); + rowData.setMargins(new Margins(6)); + LayoutContainer lc = createMoveContactsContainer(); + cp.add(lc, rowData); + + rowData = new RowData(.4, 1); + rowData.setMargins(new Margins(6, 6, 6, 0)); + + final VerticalPanel vpShareWith = new VerticalPanel(); + vpShareWith.setHorizontalAlign(HorizontalAlignment.CENTER); + vpShareWith.add(new Label("Share with...")); gridShareWith = new Grid(storeTarget, createColumnModel()); - StoreFilterField filter2 = new StoreFilterField() { + final StoreFilterField filter2 = new StoreFilterField() { @Override protected boolean doSelect(Store store, @@ -216,8 +244,6 @@ public class MultiDragContact extends Dialog { }; -// filter.setFieldLabel("Filter Contacts"); - filter2.setWidth(247); filter2.setEmptyText("Filter Share with"); hp = new HorizontalPanel(); @@ -226,18 +252,15 @@ public class MultiDragContact extends Dialog { hp.add(filter2); filter2.bind(storeTarget); - - gridShareWith.setSize(250, 310); + gridShareWith.setHeight(HEIGHT_GRID); gridShareWith.setBorders(false); gridShareWith.getView().setAutoFill(true); // gridShareWith.setAutoExpandColumn(InfoContactModel.FULLNAME); gridShareWith.setBorders(true); - vp.add(hp); - vp.add(gridShareWith); + vpShareWith.add(hp); + vpShareWith.add(gridShareWith); - rowData = new RowData(.5, 1); - rowData.setMargins(new Margins(6, 6, 6, 0)); - cp.add(vp, rowData); + cp.add(vpShareWith, rowData); new GridDragSource(gridAllContacts); new GridDragSource(gridShareWith); @@ -263,15 +286,171 @@ public class MultiDragContact extends Dialog { @Override public void componentSelected(ButtonEvent ce) { + List shareContacts = storeTarget.getModels(); + + if(shareContacts==null || shareContacts.isEmpty()){ + + MessageBoxConfirm mbc = new MessageBoxConfirm("Confirm exit?", "You have not selected any contact to share, confirm exit?"); + + mbc.getMessageBoxConfirm().addCallback(new Listener() { + + @Override + public void handleEvent(MessageBoxEvent be) { + String clickedButton = be.getButtonClicked().getItemId(); + if(clickedButton.equals(Dialog.YES)){ + hide(); + } + } + }); + }else hide(); } }); // needed to enable quicktips (qtitle for the heading and qtip for the // content) that are setup in the change GridCellRenderer + + cp.addListener(Events.Render, new Listener() { + + @Override + public void handleEvent(BaseEvent be) { + int width = gridAllContacts.getWidth(); + filter.setWidth(width-2); + filter2.setWidth(width-2); + gridShareWith.setWidth(width+5); + vpShareWith.setWidth(width+15); + gridAllContacts.setWidth(width+5); + vpAllContacts.setWidth(width+15); + vpShareWith.layout(); + vpAllContacts.layout(); + cp.layout(); + } + }); + new QuickTip(gridAllContacts); } + private LayoutContainer createMoveContactsContainer() { + + LayoutContainer lc = new LayoutContainer(); + lc.setLayout(new CenterLayout()); + VerticalPanel vp1 = new VerticalPanel(); + vp1.setHorizontalAlign(HorizontalAlignment.CENTER); + vp1.setVerticalAlign(VerticalAlignment.MIDDLE); + + buttonSelectedLeft = new Button(); + buttonSelectedLeft.setIcon(Resources.getSelectedLeft()); + buttonSelectedLeft + .setToolTip("Move selected contact/s from 'All Contact' to 'Share with'"); + buttonSelectedLeft + .addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + + List selectedItems = gridAllContacts + .getSelectionModel().getSelectedItems(); + + if (selectedItems != null && selectedItems.size() > 0) { + + for (ExtendedInfoContactModel extendedInfoContactModel : selectedItems) { + storeTarget.add(extendedInfoContactModel); + storeSource.remove(extendedInfoContactModel); + } + } + } + }); + + buttonSelectedRight = new Button(); + buttonSelectedRight.setIcon(Resources.getSelectedRight()); + buttonSelectedRight + .setToolTip("Move selected contact/s from 'Share with' to 'All Contact'"); + + buttonSelectedRight + .addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + + List selectedItems = gridShareWith + .getSelectionModel().getSelectedItems(); + + if (selectedItems != null && selectedItems.size() > 0) { + + for (ExtendedInfoContactModel extendedInfoContactModel : selectedItems) { + storeSource.add(extendedInfoContactModel); + storeTarget.remove(extendedInfoContactModel); + } + } + } + }); + + buttonAllLeft = new Button(); + buttonAllLeft.setIcon(Resources.getAllLeft()); + buttonAllLeft + .setToolTip("Move all contact/s from 'All Contact' to 'Share with'"); + + buttonAllLeft + .addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + + if (storeSource != null && storeSource.getCount() > 0) { + for (ExtendedInfoContactModel extendedInfoContactModel : storeSource + .getModels()) { + storeTarget.add(extendedInfoContactModel); + storeSource.remove(extendedInfoContactModel); + } + } + + } + }); + + buttonAllRight = new Button(); + buttonAllRight.setIcon(Resources.getAllRight()); + buttonAllRight + .setToolTip("Move all contact/s from 'Share with' to 'All Contact'"); + + buttonAllRight + .addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + + if (storeTarget != null && storeTarget.getCount() > 0) { + for (ExtendedInfoContactModel extendedInfoContactModel : storeTarget + .getModels()) { + storeSource.add(extendedInfoContactModel); + storeTarget.remove(extendedInfoContactModel); + } + } + + } + }); + + vp1.add(buttonSelectedLeft); + vp1.add(buttonAllLeft); + vp1.add(buttonSelectedRight); + vp1.add(buttonAllRight); + + lc.add(vp1); + + vp1.addListener(Events.Render, new Listener() { + + @Override + public void handleEvent(BaseEvent be) { + buttonSelectedLeft.el().setStyleAttribute("margin-top", "40px"); + buttonAllLeft.el().setStyleAttribute("margin-top", "5px"); + buttonSelectedRight.el().setStyleAttribute("margin-top", "20px"); + buttonAllRight.el().setStyleAttribute("margin", "5px"); + + } + }); + + return lc; + } + private ColumnModel createColumnModel() { List configs = new ArrayList(); @@ -320,7 +499,9 @@ public class MultiDragContact extends Dialog { storeSource.add(listExtended); } + gridAllContacts.unmask(); + gridAllContacts.repaint(); } public void addAlreadySharedContacts(List listContact){