.v-drag-element {
z-index:60000;
position:absolute;
- opacity: 0.4;
- filter: alpha(opacity=40);
- border: 1px solid #999;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
}
.v-ddwrapper {
-.v-theme-version:after {content:"6_3_0_dev-20100305";}
-.v-theme-version-6_3_0_dev-20100305 {display: none;}
+.v-theme-version:after {content:"6_3_0_dev-20100309";}
+.v-theme-version-6_3_0_dev-20100309 {display: none;}
/* Automatically compiled css file from subdirectories. */
.v-absolutelayout-wrapper {
.v-drag-element {
z-index:60000;
position:absolute;
- opacity: 0.4;
- filter: alpha(opacity=40);
- border: 1px solid #999;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
}
.v-ddwrapper {
color: #ddd;
}
-/* TODO remove important, replace with better anchors or order */
.v-table-row-drag-middle .v-table-cell-content {
background-color: cyan;
}
-/* TODO consider using height neutral styling (scrollbar issues when pagelength = table.length ) */
.v-table-row-drag-top .v-table-cell-content {
border-top: 1px solid cyan ;
}
+.v-table-row-drag-top .v-table-cell-wrapper {
+ margin-top: -1px; /* compensate the space consumed by border hint */
+}
.v-table-row-drag-bottom .v-table-cell-content {
border-bottom: 1px solid cyan;
}
+.v-table-row-drag-bottom .v-table-cell-wrapper {
+ margin-bottom: -1px; /* compensate the space consumed by border hint */
+}
+
+
.v-tabsheet,
color: #ddd;
}
-/* TODO remove important, replace with better anchors or order */
.v-table-row-drag-middle .v-table-cell-content {
background-color: cyan;
}
-/* TODO consider using height neutral styling (scrollbar issues when pagelength = table.length ) */
.v-table-row-drag-top .v-table-cell-content {
border-top: 1px solid cyan ;
}
+.v-table-row-drag-top .v-table-cell-wrapper {
+ margin-top: -1px; /* compensate the space consumed by border hint */
+}
.v-table-row-drag-bottom .v-table-cell-content {
border-bottom: 1px solid cyan;
}
+.v-table-row-drag-bottom .v-table-cell-wrapper {
+ margin-bottom: -1px; /* compensate the space consumed by border hint */
+}
+
+
-.v-theme-version:after {content:"6_3_0_dev-20100305";}
-.v-theme-version-6_3_0_dev-20100305 {display: none;}
+.v-theme-version:after {content:"6_3_0_dev-20100309";}
+.v-theme-version-6_3_0_dev-20100309 {display: none;}
/* Automatically compiled css file from subdirectories. */
.v-absolutelayout-wrapper {
.v-drag-element {
z-index:60000;
position:absolute;
- opacity: 0.4;
- filter: alpha(opacity=40);
- border: 1px solid #999;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
}
.v-ddwrapper {
color: #ddd;
}
-/* TODO remove important, replace with better anchors or order */
.v-table-row-drag-middle .v-table-cell-content {
background-color: cyan;
}
-/* TODO consider using height neutral styling (scrollbar issues when pagelength = table.length ) */
.v-table-row-drag-top .v-table-cell-content {
border-top: 1px solid cyan ;
}
+.v-table-row-drag-top .v-table-cell-wrapper {
+ margin-top: -1px; /* compensate the space consumed by border hint */
+}
.v-table-row-drag-bottom .v-table-cell-content {
border-bottom: 1px solid cyan;
}
+.v-table-row-drag-bottom .v-table-cell-wrapper {
+ margin-bottom: -1px; /* compensate the space consumed by border hint */
+}
+
+
.v-tabsheet,
border: none;
}
+
+
/* These styles get catenated together on build */
/* Default Tabsheet styles */
.v-table-borderless .v-table-header-wrap,
.v-table-borderless .v-table-body {
border: none;
-}
\ No newline at end of file
+}
+
+
-.v-theme-version:after {content:"6_3_0_dev-20100305";}
-.v-theme-version-6_3_0_dev-20100305 {display: none;}
+.v-theme-version:after {content:"6_3_0_dev-20100309";}
+.v-theme-version-6_3_0_dev-20100309 {display: none;}
/* Automatically compiled css file from subdirectories. */
.v-absolutelayout-wrapper {
.v-drag-element {
z-index:60000;
position:absolute;
- opacity: 0.4;
- filter: alpha(opacity=40);
- border: 1px solid #999;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
}
.v-ddwrapper {
color: #ddd;
}
-/* TODO remove important, replace with better anchors or order */
.v-table-row-drag-middle .v-table-cell-content {
background-color: cyan;
}
-/* TODO consider using height neutral styling (scrollbar issues when pagelength = table.length ) */
.v-table-row-drag-top .v-table-cell-content {
border-top: 1px solid cyan ;
}
+.v-table-row-drag-top .v-table-cell-wrapper {
+ margin-top: -1px; /* compensate the space consumed by border hint */
+}
.v-table-row-drag-bottom .v-table-cell-content {
border-bottom: 1px solid cyan;
}
+.v-table-row-drag-bottom .v-table-cell-wrapper {
+ margin-bottom: -1px; /* compensate the space consumed by border hint */
+}
+
+
.v-tabsheet,
import com.google.gwt.dom.client.TableCellElement;
import com.google.gwt.dom.client.TableRowElement;
import com.google.gwt.dom.client.TableSectionElement;
+import com.google.gwt.dom.client.Style.Visibility;
import com.google.gwt.event.dom.client.ScrollEvent;
import com.google.gwt.event.dom.client.ScrollHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
// TODO propertyId
VDragEvent ev = VDragAndDropManager.get()
.startDrag(transferable, event, true);
- ev.createDragImage(getElement(), true);
+ if (selectMode == SELECT_MODE_MULTI
+ && selectedRowKeys
+ .contains("" + rowKey)) {
+ ev.createDragImage(
+ (Element) scrollBody.tBodyElement
+ .cast(), true);
+ Element dragImage = ev.getDragImage();
+ int i = 0;
+ for (Iterator<Widget> iterator = scrollBody
+ .iterator(); iterator.hasNext();) {
+ VScrollTableRow next = (VScrollTableRow) iterator
+ .next();
+ Element child = (Element) dragImage
+ .getChild(i++);
+ if (!selectedRowKeys.contains(""
+ + next.rowKey)) {
+ child.getStyle().setVisibility(
+ Visibility.HIDDEN);
+ }
+ }
+ } else {
+ ev.createDragImage(getElement(), true);
+ }
event.preventDefault();
event.stopPropagation();
}
public void onValueChange(ValueChangeEvent<String> arg0) {
client.getContextMenu().hide();
}
-
+
}
}
}
+ Element getDragElement() {
+ return dragElement;
+ }
+
private final Timer lazyAttachDragElement = new Timer() {
@Override
element.getStyle().setMarginLeft(offsetX, Unit.PX);
element.getStyle().setMarginTop(offsetY, Unit.PX);
VDragAndDropManager.get().setDragElement(element);
+ }
+ /**
+ * @return the current Element used as a drag image (aka drag proxy) or null
+ * if drag image is not currently set for this drag operation.
+ */
+ public Element getDragImage() {
+ return (Element) VDragAndDropManager.get().getDragElement();
}
/**
package com.vaadin.tests.dd;
+import java.util.Collection;
+
import com.vaadin.data.Item;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.demo.tutorial.addressbook.data.Person;
w,
".v-table-row-drag-middle .v-table-cell-content {"
+ " background-color: inherit ; border-bottom: 1px solid cyan;"
- + "}");
- /* darn reindeer has no icons */
+ + "}"
+ + ".v-table-row-drag-middle .v-table-cell-wrapper {"
+ + " margin-bottom: -1px;" + "}" + ""
+
+ );
// hl.addComponent(tree1);
hl.addComponent(table);
table.setPageLength(10);
table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
table.setSelectable(true);
+ table.setMultiSelect(true);
populateTable();
addComponent(hl);
// IndexedContainer goodies... (hint: don't use it in real apps)
IndexedContainer containerDataSource = (IndexedContainer) table
.getContainerDataSource();
- IndexedContainer clone = null;
+ int newIndex = containerDataSource.indexOfId(itemIdOver) - 1;
+ if (dropTargetData.getDropLocation() != VerticalDropLocation.TOP) {
+ newIndex++;
+ }
+ if (newIndex < 0) {
+ newIndex = 0;
+ }
+ Object idAfter = containerDataSource.getIdByIndex(newIndex);
+ Collection selections = (Collection) table.getValue();
+ if (selections != null && selections.contains(itemId)) {
+ // dragged a selected item, if multiple rows selected, drag
+ // them too (functionality similar to apple mail)
+ for (Object object : selections) {
+ moveAfter(containerDataSource, object, idAfter);
+ }
+
+ } else {
+ // move just the dragged row, not considering selection at
+ // all
+ moveAfter(containerDataSource, itemId, idAfter);
+ }
+
+ }
+
+ private void moveAfter(IndexedContainer containerDataSource,
+ Object itemId, Object idAfter) {
try {
+ IndexedContainer clone = null;
clone = (IndexedContainer) containerDataSource.clone();
- int newIndex = containerDataSource.indexOfId(itemIdOver) - 1;
- if (dropTargetData.getDropLocation() != VerticalDropLocation.TOP) {
- newIndex++;
- }
- if (newIndex < 0) {
- newIndex = 0;
- }
containerDataSource.removeItem(itemId);
- Item newItem = containerDataSource.addItemAt(newIndex,
+ Item newItem = containerDataSource.addItemAfter(idAfter,
itemId);
-
Item item = clone.getItem(itemId);
for (Object propId : item.getItemPropertyIds()) {
newItem.getItemProperty(propId).setValue(
item.getItemProperty(propId).getValue());
}
+
+ // TODO Auto-generated method stub
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();