--- /dev/null
+package gr.grnet.pithos.web.client;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.dom.client.Node;
+import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.cellview.client.AbstractCellTable;
+import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
+import com.google.gwt.user.client.Event.NativePreviewHandler;
+
+public class ColumnResizeHelper<T> implements NativePreviewHandler {
+
+ private HandlerRegistration handler;
+ private AbstractCellTable<T> table;
+ private Column<T, ?> col;
+ private Element el;
+
+ public static <T> void handleResize(AbstractCellTable<T> table, NativeEvent event) {
+ String eventType = event.getType();
+ if (eventType.equals("mousedown")) {
+ int clientX = event.getClientX();
+ Element eventTargetEl = event.getEventTarget().cast();
+ int absoluteLeft = eventTargetEl.getAbsoluteLeft();
+ int offsetWidth = eventTargetEl.getOffsetWidth();
+ if (clientX > absoluteLeft + offsetWidth - 10) {
+ // Get column
+ NodeList<Node> nodes = eventTargetEl.getParentElement().getChildNodes();
+ for (int i = 0; i < nodes.getLength(); i++) {
+ if (nodes.getItem(i).equals(eventTargetEl)) {
+ event.preventDefault();
+ event.stopPropagation();
+ new ColumnResizeHelper<T>(table, table.getColumn(i), eventTargetEl);
+ break;
+ }
+ }
+ return;
+ }
+ }
+ }
+
+ private ColumnResizeHelper(AbstractCellTable<T> table, Column<T, ?> col, Element el) {
+ this.el = el;
+ this.table = table;
+ this.col = col;
+ handler = Event.addNativePreviewHandler(this);
+ }
+
+ @Override
+ public void onPreviewNativeEvent(NativePreviewEvent event) {
+ NativeEvent nativeEvent = event.getNativeEvent();
+ nativeEvent.preventDefault();
+ nativeEvent.stopPropagation();
+
+ if (nativeEvent.getType().equals("mousemove")) {
+ int absoluteLeft = el.getAbsoluteLeft();
+ int clientX = nativeEvent.getClientX();
+ int newWidth = clientX - absoluteLeft;
+ newWidth = newWidth < 10 ? 10 : newWidth;
+ table.setColumnWidth(col, newWidth + "px");
+ } else if (nativeEvent.getType().equals("mouseup")) {
+ handler.removeHandler();
+ }
+ }
+}
return super.getCellStyleNames(context, object);
}
};
- celltable.addColumn(status,"");
+ celltable.addColumn(status, new ResizableHeader<File>("", celltable, status));
final Column<File,SafeHtml> nameColumn = new Column<File,SafeHtml>(new SafeHtmlCell()) {
}
};
- celltable.addColumn(nameColumn, nameHeader = new SortableHeader("Name"));
+ celltable.addColumn(nameColumn, nameHeader = new ResizableHeader<File>("Name", celltable, nameColumn));
allHeaders.add(nameHeader);
nameHeader.setUpdater(new FileValueUpdater(nameHeader, "name"));
import gr.grnet.pithos.web.client.rest.HeadRequest;
import gr.grnet.pithos.web.client.rest.PutRequest;
import gr.grnet.pithos.web.client.rest.RestException;
-import gr.grnet.pithos.web.client.tagtree.Tag;
import java.util.ArrayList;
import java.util.HashMap;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.RepeatingCommand;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
}
});
-// Scheduler.get().scheduleDeferred(new Command() {
-//
-// @Override
-// public void execute() {
-// displayError("lalala");
-//
-// }
-// });
+ Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
+
+ @Override
+ public boolean execute() {
+ Folder f = getSelection();
+ if (f != null) {
+ if (getSelectedTree().equals(folderTreeView))
+ updateFolder(f, true, null);
+ else if (getSelectedTree().equals(mysharedTreeView))
+ updateSharedFolder(f, true);
+ else if (getSelectedTree().equals(otherSharedTreeView))
+ updateOtherSharedFolder(f, true);
+ }
+ return true;
+ }
+ }, 3000);
}
public void applyPermissions(Folder f) {
--- /dev/null
+package gr.grnet.pithos.web.client;
+
+
+import com.google.gwt.cell.client.AbstractCell;
+import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.dom.client.Style.Cursor;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.google.gwt.user.cellview.client.AbstractCellTable;
+import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
+import com.google.gwt.user.client.Event.NativePreviewHandler;
+
+public class ResizableHeader<T> extends SortableHeader {
+
+ private Column<T, ?> column = null;
+ private AbstractCellTable<T> cellTable;
+ private String title = "";
+ static private final int width = 10;
+
+ public ResizableHeader(String title, AbstractCellTable<T> cellTable, Column<T, ?> column) {
+ super(title);
+ this.title = title;
+ this.cellTable = cellTable;
+ this.column = column;
+ }
+
+ @Override
+ public String getValue()
+ {
+ return title;
+ }
+
+ @Override
+ public void onBrowserEvent(Context context, Element target, NativeEvent event) {
+ String eventType = event.getType();
+ int clientX = event.getClientX();
+ int absoluteLeft = target.getAbsoluteLeft();
+ int offsetWidth = target.getOffsetWidth();
+ if (clientX > absoluteLeft + offsetWidth - width) {
+ setCursor(target, Cursor.COL_RESIZE);
+ } else {
+ setCursor(target, Cursor.DEFAULT);
+ }
+ if(eventType.equals("mousedown")) {
+ if (clientX > absoluteLeft + offsetWidth - width) {
+ new ColumnResizeHelper<T>(cellTable, column, target);
+ }
+ event.preventDefault();
+ event.stopPropagation();
+ } else {
+ return;
+ }
+ }
+
+ private void setCursor(Element element, Cursor cursor) {
+ element.getStyle().setCursor(cursor);
+ }
+
+class ColumnResizeHelper<T> implements NativePreviewHandler {
+
+ private HandlerRegistration handler;
+ private AbstractCellTable<T> table;
+ private Column<T, ?> col;
+ private Element el;
+
+ public ColumnResizeHelper(AbstractCellTable<T> table, Column<T, ?> col, Element el) {
+ this.el = el;
+ this.table = table;
+ this.col = col;
+ handler = Event.addNativePreviewHandler(this);
+ }
+
+ @Override
+ public void onPreviewNativeEvent(NativePreviewEvent event) {
+ NativeEvent nativeEvent = event.getNativeEvent();
+ nativeEvent.preventDefault();
+ nativeEvent.stopPropagation();
+
+ if (nativeEvent.getType().equals("mousemove")) {
+ int absoluteLeft = el.getAbsoluteLeft();
+ int clientX = nativeEvent.getClientX();
+ int newWidth = clientX - absoluteLeft;
+ newWidth = newWidth < 10 ? 10 : newWidth;
+ table.setColumnWidth(col, newWidth + "px");
+ } else if (nativeEvent.getType().equals("mouseup")) {
+ handler.removeHandler();
+ }
+ }
+ }
+
+ static class HeaderCell extends AbstractCell<String> {
+
+ public HeaderCell() {
+ super("click", "mousedown", "mousemove");
+ }
+
+ @Override
+ public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) {
+ sb.append(
+ new SafeHtmlBuilder()
+ .append(SafeHtmlUtils.fromString(value))
+ .toSafeHtml());
+ }
+
+ }
+};
+
+