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

com.github.rinde.rinsim.pdptw.common.RoutePanel Maven / Gradle / Ivy

There is a newer version: 4.4.6
Show newest version
/*
 * Copyright (C) 2011-2016 Rinde van Lon, iMinds-DistriNet, KU Leuven
 *
 * Licensed 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 com.github.rinde.rinsim.pdptw.common;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

import com.github.rinde.rinsim.core.model.DependencyProvider;
import com.github.rinde.rinsim.core.model.Model.AbstractModel;
import com.github.rinde.rinsim.core.model.ModelBuilder.AbstractModelBuilder;
import com.github.rinde.rinsim.core.model.road.RoadModel;
import com.github.rinde.rinsim.ui.renderers.PanelRenderer;
import com.google.auto.value.AutoValue;

/**
 *
 * @author Rinde van Lon
 */
public class RoutePanel extends AbstractModel
    implements PanelRenderer {
  private static final int SIZE_PX = 200;
  private static final int COLUMN_WIDTH_PX = 100;

  Table table;
  RoadModel roadModel;

  List list;

  RoutePanel(RoadModel rm) {
    roadModel = rm;
    list = new ArrayList<>();
  }

  @Override
  public void initializePanel(Composite parent) {
    parent.setLayout(new FillLayout());
    table = new Table(parent, SWT.BORDER | SWT.SINGLE);

    final TableColumn tc1 = new TableColumn(table, 0);
    tc1.setText("Vehicle");
    tc1.setWidth(COLUMN_WIDTH_PX);
    final TableColumn tc2 = new TableColumn(table, 0);
    tc2.setText("Route length");
    tc2.setWidth(COLUMN_WIDTH_PX);
    table.setHeaderVisible(true);

    for (final RouteFollowingVehicle v : list) {
      createItem(v);
    }

    table.layout();
  }

  @Override
  public int preferredSize() {
    return SIZE_PX;
  }

  @Override
  public int getPreferredPosition() {
    return SWT.RIGHT;
  }

  @Override
  public String getName() {
    return "Routes";
  }

  @Override
  public void render() {

    if (table.getItemCount() < list.size()) {
      for (int i = table.getItemCount(); i < list.size(); i++) {
        createItem(list.get(i));
      }
    }

    for (int i = 0; i < table.getItemCount(); i++) {
      final RouteFollowingVehicle v = list.get(i);
      table.getItem(i).setText(1, Integer.toString(v.getRoute().size()));
    }
    table.getParent().redraw();
    table.getParent().layout();
  }

  void createItem(RouteFollowingVehicle v) {
    final TableItem item = new TableItem(table, SWT.NONE);
    item.setText(
      new String[] {v.toString(), Integer.toString(v.getRoute().size())});
  }

  @Override
  public boolean register(RouteFollowingVehicle v) {
    list.add(v);
    return true;
  }

  @Override
  public boolean unregister(RouteFollowingVehicle element) {
    throw new UnsupportedOperationException();
  }

  public static Builder builder() {
    return new AutoValue_RoutePanel_Builder();
  }

  @AutoValue
  public abstract static class Builder
      extends AbstractModelBuilder {

    Builder() {
      setDependencies(RoadModel.class);
    }

    @Override
    public RoutePanel build(DependencyProvider dependencyProvider) {
      return new RoutePanel(dependencyProvider.get(RoadModel.class));
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy