@ -2,6 +2,7 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui.dandd;
import java.util.LinkedHashMap ;
import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON ;
import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalReferenceDV ;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync ;
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent ;
@ -9,6 +10,7 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetai
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent.SwapLayer ;
import org.gcube.portlets.user.geoportaldataviewer.client.resources.GNAImages ;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.cms.project.ProjectUtil ;
import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon ;
import org.gcube.portlets.user.geoportaldataviewer.client.util.StringUtil ;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem ;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject ;
@ -19,6 +21,7 @@ import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.github.gwtbootstrap.client.ui.constants.LabelType ;
import com.google.gwt.core.client.GWT ;
import com.google.gwt.dom.client.Element ;
import com.google.gwt.dom.client.Style.FontWeight ;
import com.google.gwt.dom.client.Style.Unit ;
import com.google.gwt.event.dom.client.ClickEvent ;
import com.google.gwt.event.dom.client.ClickHandler ;
@ -32,21 +35,33 @@ import com.google.gwt.event.dom.client.DropEvent;
import com.google.gwt.event.dom.client.DropHandler ;
import com.google.gwt.event.shared.HandlerManager ;
import com.google.gwt.user.client.rpc.AsyncCallback ;
import com.google.gwt.user.client.ui.FlexTable ;
import com.google.gwt.user.client.ui.FlowPanel ;
import com.google.gwt.user.client.ui.HTML ;
import com.google.gwt.user.client.ui.HorizontalPanel ;
import com.google.gwt.user.client.ui.Image ;
import com.google.gwt.user.client.ui.SimplePanel ;
import com.google.gwt.user.client.ui.VerticalPanel ;
import com.google.gwt.user.client.ui.Widget ;
public class DragDropLayer extends FlowPanel {
private static final String _22PX = "22px" ;
private static DragDropLayer dragging = null ;
private static DragDropLayer draggingTarget = null ;
final boolean droppable ;
private Label labelLayerName ;
private Image imgLayerVisible = new Image ( GNAImages . ICONS . layerVisible ( ) ) ;
private Image imgLayerInvisible = new Image ( GNAImages . ICONS . layerInvisible ( ) ) ;
private Image imgLocate = new Image ( GNAImages . ICONS . locate ( ) ) ;
private Image imgLocateNone = new Image ( GNAImages . ICONS . locateNone ( ) ) ;
private boolean locateEnabled = false ;
private HTML buttonLocate = new HTML ( ) ;
private DragDropLayer INSTANCE = this ;
private LoaderIcon loaderIcon = new LoaderIcon ( "Loading features" , null ) ;
private Button draggableButton = new Button ( ) ;
private HandlerManager applicationBus ;
private LayerObject layerObject ;
@ -61,6 +76,26 @@ public class DragDropLayer extends FlowPanel {
this . layerItem = layerObject . getLayerItem ( ) ;
GWT . log ( "DragDropLayer for projectDV: " + layerObject . getProjectDV ( ) ) ;
// Checking the spatial reference
if ( layerObject . getProjectDV ( ) ! = null & & layerObject . getProjectDV ( ) . getSpatialReference ( ) = = null ) {
GeoportalDataViewerServiceAsync . Util . getInstance ( ) . getSpatialReference ( layerObject . getProfileID ( ) ,
layerObject . getProjectID ( ) , new AsyncCallback < GeoJSON > ( ) {
@Override
public void onFailure ( Throwable caught ) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess ( GeoJSON result ) {
if ( result ! = null )
layerObject . getProjectDV ( ) . setSpatialReference ( result ) ;
}
} ) ;
}
String referProjectID = "Project ID: " + layerObject . getProjectDV ( ) . getId ( ) ;
labelProject = new com . google . gwt . user . client . ui . Label ( "" ) ;
labelProject . setTitle ( referProjectID ) ;
@ -119,26 +154,57 @@ public class DragDropLayer extends FlowPanel {
RangeSlider rs = new RangeSlider ( applicationBus , layerItem ) ;
rs . getElement ( ) . addClassName ( "range-slider" ) ;
FlexTable ft = new FlexTable ( ) ;
ft . setWidget ( 0 , 0 , draggableButton ) ;
// FlexTable ft = new FlexTable();
// ft.setWidget(0, 0, draggableButton);
draggableButton . setTitle ( "Drag and Drop me up or down to change my position on the Map" ) ;
imgLayerVisible . getElement ( ) . addClassName ( "layer-visibility-st" ) ;
imgLayerInvisible . getElement ( ) . addClassName ( "layer-visibility-st" ) ;
imgLocate . setWidth ( _22PX ) ;
imgLocate . setHeight ( _22PX ) ;
imgLocateNone . setWidth ( _22PX ) ;
imgLocateNone . setHeight ( _22PX ) ;
imgLocate . getElement ( ) . addClassName ( "layer-visibility-st" ) ;
imgLocateNone . getElement ( ) . addClassName ( "layer-visibility-st" ) ;
setLocateEnabledButtonImage ( ) ;
setLayerVisibilityButtonImage ( ) ;
// labelLayerName.getElement().getStyle().setMarginLeft(10, Unit.PX);
ft . setWidget ( 0 , 1 , buttonLayerVisibility ) ;
ft . setWidget ( 0 , 2 , labelProject ) ;
VerticalPanel vp = new VerticalPanel ( ) ;
VerticalPanel vpInner = new VerticalPanel ( ) ;
HorizontalPanel hp0 = new HorizontalPanel ( ) ;
HorizontalPanel hpFunct = new HorizontalPanel ( ) ;
vpInner . getElement ( ) . getStyle ( ) . setMarginLeft ( 47 , Unit . PX ) ;
hp0 . add ( draggableButton ) ;
labelProject . getElement ( ) . getStyle ( ) . setMarginLeft ( 10 , Unit . PX ) ;
labelProject . getElement ( ) . getStyle ( ) . setFontWeight ( FontWeight . BOLD ) ;
hp0 . add ( labelProject ) ;
hpFunct . add ( buttonLayerVisibility ) ;
hpFunct . add ( buttonLocate ) ;
hpFunct . add ( loaderIcon ) ;
setVisibleLoaderFeatures ( false , null ) ;
if ( layerObject . getProjectDV ( ) . getTemporalReference ( ) ! = null ) {
TemporalReferenceDV tempRef = layerObject . getProjectDV ( ) . getTemporalReference ( ) ;
ft . setWidget ( ft . getRowCount ( ) + 1 , 2 , new HTML ( ProjectUtil . toHTMLCode ( tempRef ) ) ) ;
// ft.setWidget(ft.getRowCount() + 1, 2, new HTML(ProjectUtil.toHTMLCode(tempRef)));
vpInner . add ( new HTML ( ProjectUtil . toHTMLCode ( tempRef ) ) ) ;
}
ft . setWidget ( ft . getRowCount ( ) + 1 , 2 , labelLayerName ) ;
ft . setWidget ( ft . getRowCount ( ) + 1 , 2 , new SimplePanel ( rs ) ) ;
add ( ft ) ;
vpInner . add ( labelLayerName ) ;
// vpInner.add(new SimplePanel(rs));
vp . add ( hp0 ) ;
hpFunct . getElement ( ) . getStyle ( ) . setMarginTop ( 5 , Unit . PX ) ;
vpInner . add ( hpFunct ) ;
vpInner . add ( new SimplePanel ( rs ) ) ;
vp . add ( vpInner ) ;
add ( vp ) ;
// add(ft);
draggableButton . setIcon ( IconType . MOVE ) ;
buttonLayerVisibility . addClickHandler ( new ClickHandler ( ) {
@ -147,20 +213,48 @@ public class DragDropLayer extends FlowPanel {
public void onClick ( ClickEvent event ) {
layerVisibility = ! layerVisibility ;
setLayerVisibilityButtonImage ( ) ;
DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent ( DO_LAYER_ACTION . VISIBILITY ,
layer Item ) ;
DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent ( DO_LAYER_ACTION . VISIBILITY , layerItem ,
layer Object ) ;
dae . setVisibility ( layerVisibility ) ;
applicationBus . fireEvent ( dae ) ;
}
} ) ;
buttonLocate . addClickHandler ( new ClickHandler ( ) {
@Override
public void onClick ( ClickEvent event ) {
locateEnabled = ! locateEnabled ;
setLocateEnabledButtonImage ( ) ;
DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent ( DO_LAYER_ACTION . LOCATE_LAYER ,
layerItem , layerObject ) ;
dae . setUIEventSource ( INSTANCE ) ;
setVisibleLoaderFeatures ( true , null ) ;
applicationBus . fireEvent ( dae ) ;
}
} ) ;
}
private void setLayerVisibilityButtonImage ( ) {
buttonLayerVisibility . getElement ( ) . removeAllChildren ( ) ;
if ( layerVisibility ) {
buttonLayerVisibility . getElement ( ) . appendChild ( imgLayerVisible . getElement ( ) ) ;
buttonLayerVisibility . setTitle ( "Hide the layer" ) ;
} else {
buttonLayerVisibility . getElement ( ) . appendChild ( imgLayerInvisible . getElement ( ) ) ;
buttonLayerVisibility . setTitle ( "Show the layer" ) ;
}
}
private void setLocateEnabledButtonImage ( ) {
buttonLocate . getElement ( ) . removeAllChildren ( ) ;
if ( locateEnabled ) {
buttonLocate . getElement ( ) . appendChild ( imgLocate . getElement ( ) ) ;
buttonLocate . setTitle ( "Unselect the layer features" ) ;
} else {
buttonLocate . getElement ( ) . appendChild ( imgLocateNone . getElement ( ) ) ;
buttonLocate . setTitle ( "Highlight the layer features" ) ;
}
}
@ -226,7 +320,7 @@ public class DragDropLayer extends FlowPanel {
tree . insert ( source , targetIndex ) ;
// target.setState(true);
DoActionOnDetailLayersEvent actionSwapLayers = new DoActionOnDetailLayersEvent (
DO_LAYER_ACTION . SWAP , layerItem );
DO_LAYER_ACTION . SWAP , layerItem , layerObject );
SwapLayer swapLS = new DoActionOnDetailLayersEvent . SwapLayer ( dragging . getLayerItem ( ) ,
sourceIndex ) ;
SwapLayer swapLT = new DoActionOnDetailLayersEvent . SwapLayer ( draggingTarget . getLayerItem ( ) ,
@ -245,4 +339,17 @@ public class DragDropLayer extends FlowPanel {
return layerItem ;
}
/ * *
* Sets the visible loader features .
*
* @param bool the bool
* @param msg the msg
* /
public void setVisibleLoaderFeatures ( boolean bool , String msg ) {
loaderIcon . setVisible ( bool ) ;
if ( msg ! = null )
loaderIcon . setText ( msg ) ;
}
}