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

org.wings.plaf.css.ListCG Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2000,2005 wingS development team.
 *
 * This file is part of wingS (http://wingsframework.org).
 *
 * wingS is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2.1
 * of the License, or (at your option) any later version.
 *
 * Please see COPYING for the complete licence.
 */
package org.wings.plaf.css;

import org.wings.SCellRendererPane;
import org.wings.SComponent;
import org.wings.SDefaultListCellRenderer;
import org.wings.SList;
import org.wings.SListCellRenderer;
import org.wings.io.Device;
import org.wings.io.StringBuilderDevice;
import org.wings.plaf.CGManager;
import org.wings.plaf.Update;
import org.wings.script.JavaScriptEvent;
import org.wings.script.JavaScriptListener;

import java.awt.Rectangle;
import java.io.IOException;
import java.util.List;

public final class ListCG extends AbstractComponentCG implements org.wings.plaf.ListCG {

    private static final long serialVersionUID = 1L;

    @Override
    public void installCG(final SList list) {
        super.installCG(list);
        final CGManager manager = list.getSession().getCGManager();
        Object value = manager.getObject("SList.cellRenderer", SDefaultListCellRenderer.class);
        if (value != null) {
            list.setCellRenderer((SDefaultListCellRenderer) value);
        }
    }

    protected static void writeFormList(final Device device, final SList list) throws IOException {
        Object clientProperty = list.getClientProperty("onChangeSubmitListener");
        if (clientProperty == null) {
            String event = JavaScriptEvent.ON_CHANGE;
        	String code = "wingS.request.sendEvent(event, true, " + !list.isReloadForced() + ");";
            JavaScriptListener javaScriptListener = new JavaScriptListener(event, code);
            list.addScriptListener(javaScriptListener);
            list.putClientProperty("onChangeSubmitListener", javaScriptListener);
        }

        device.print("");
        Utils.printNewline(device, list);
        device.print("");
    }

    public static void writeAnchorList(Device device, SList list) throws IOException {
        // Remove superfluous 'onChangeSubmitListener' (in case there is any).
        // This is because we don't want to render 'onclick' AND 'onchange'.
        Object clientProperty = list.getClientProperty("onChangeSubmitListener");
        if (clientProperty instanceof JavaScriptListener) {
            list.removeScriptListener((JavaScriptListener) clientProperty);
            list.putClientProperty("onChangeSubmitListener", null);
        }

        boolean renderSelection = list.getSelectionMode() != SList.NO_SELECTION;

        device.print("<");
        device.print(list.getType());
        Utils.optAttribute(device, "type", list.getOrderType());
        Utils.optAttribute(device, "start", list.getStart());
        Utils.writeAllAttributes(device, list);
        device.print(">");

        javax.swing.ListModel model = list.getModel();
        SListCellRenderer cellRenderer = list.getCellRenderer();
        SCellRendererPane rendererPane = list.getCellRendererPane();

        Rectangle currentViewport = list.getViewportSize();
        Rectangle maximalViewport = list.getScrollableViewportSize();
        int start = 0;
        int end = model.getSize();
        int empty = maximalViewport != null ? maximalViewport.height : end;

        if (currentViewport != null) {
            start = currentViewport.y;
            end = start + currentViewport.height;
        }

        for (int i = start; i < end; ++i) {
            if (i >= empty) {
                device.print("
  •  
  • "); continue; } boolean selected = list.isSelectedIndex(i); if (renderSelection && selected) device.print("
  • "); rendererPane.writeComponent(device, renderer, list); device.print("
  • \n"); } device.print(""); } @Override public void writeInternal(final Device device, final SList list) throws IOException { if (list.getShowAsFormComponent()) { writeFormList(device, list); } else { writeAnchorList(device, list); } } @Override public Update getSelectionUpdate(SList list, List deselectedIndices, List selectedIndices) { return new SelectionUpdate(list, deselectedIndices, selectedIndices); } protected static class SelectionUpdate extends AbstractUpdate { private List deselectedIndices; private List selectedIndices; public SelectionUpdate(SList component, List deselectedIndices, List selectedIndices) { super(component); this.deselectedIndices = deselectedIndices; this.selectedIndices = selectedIndices; } @Override public Handler getHandler() { UpdateHandler handler = new UpdateHandler("selectionList"); handler.addParameter(component.getName()); handler.addParameter(Utils.listToJsArray(deselectedIndices)); handler.addParameter(Utils.listToJsArray(selectedIndices)); return handler; } } }




    © 2015 - 2024 Weber Informatics LLC | Privacy Policy