All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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