
de.knightsoftnet.mtwidgets.client.ui.widget.helper.AbstractItemEditorSource Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package de.knightsoftnet.mtwidgets.client.ui.widget.helper;
import de.knightsoftnet.mtwidgets.client.event.ListPositionChangeEvent;
import com.google.gwt.editor.client.adapters.EditorSource;
/**
* Abstract implementation of DataSource for a ListItem editor.
*
* @author Manfred Tremmel
*
* @param type of data to edit
* @param type of the view of a single item
*/
public abstract class AbstractItemEditorSource>
extends EditorSource {
private final AbstractListEditor listEditor;
public AbstractItemEditorSource(final AbstractListEditor plistEditor) {
super();
this.listEditor = plistEditor;
}
@Override
public V create(final int index) {
final V subEditor = this.createItemView(index);
this.listEditor.insert(subEditor, index);
subEditor.addEditorDeleteHandler(event -> this.listEditor.removeEntry(subEditor));
subEditor.addListPositionChangeHandler(event -> moveEntry(subEditor, event));
return subEditor;
}
@Override
public void dispose(final V subEditor) {
subEditor.removeFromParent();
}
@Override
public void setIndex(final V editor, final int index) {
this.listEditor.insert(editor, index);
}
private void moveEntry(final V subEditor, final ListPositionChangeEvent event) {
int newPos;
switch (event.getPositionChange()) {
case UP:
newPos = this.listEditor.getWidgetIndex(subEditor) - 1;
break;
case DOWN:
newPos = this.listEditor.getWidgetIndex(subEditor) + 1;
break;
default:
newPos = event.getNewPosition();
break;
}
if (newPos < 0) {
newPos = 0;
} else if (newPos >= this.listEditor.getWidgetCount()) {
newPos = this.listEditor.getWidgetCount() - 1;
}
this.listEditor.moveEntry(subEditor, newPos);
}
/**
* create new instance of a item view.
*
* @param index of the item
* @return item view
*/
protected abstract V createItemView(final int index);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy