/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.core.distances.ui;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import com.opendoorlogistics.api.ODLApi;
import com.opendoorlogistics.api.distances.DistancesConfiguration;
import com.opendoorlogistics.api.distances.DistancesConfiguration.CalculationMethod;
import com.opendoorlogistics.api.distances.ExternalMatrixFileConfiguration;
import com.opendoorlogistics.api.distances.GraphhopperConfiguration;
import com.opendoorlogistics.api.distances.GreatCircleConfiguration;
import com.opendoorlogistics.api.ui.UIFactory;
import com.opendoorlogistics.core.utils.Serialization;
import com.opendoorlogistics.core.utils.ui.EnumComboBox;
import com.opendoorlogistics.core.utils.ui.ShowPanel;
public class DistancesPanel extends JPanel {
public DistancesPanel(ODLApi api,final DistancesConfiguration config, final long flags) {
BoxLayout layout = new BoxLayout(this, BoxLayout.X_AXIS);
setLayout(layout);
setAlignmentX(Component.LEFT_ALIGNMENT);
EnumComboBox<CalculationMethod> method = new EnumComboBox<CalculationMethod>(CalculationMethod.values(), config.getMethod()) {
@Override
public void itemStateChanged(ItemEvent e) {
config.setMethod((CalculationMethod) getSelectedItem());
}
};
method.setMaximumSize(new Dimension(160, 26));
add(method);
add(Box.createRigidArea(new Dimension(10, 2)));
final Window parent = SwingUtilities.getWindowAncestor(this);
add(new JButton(new AbstractAction("Settings") {
@Override
public void actionPerformed(ActionEvent e) {
AbstractDistancesConfigBox dlg=null;
switch (config.getMethod()) {
case GREAT_CIRCLE:
dlg = new GreatCircleBox(parent,(GreatCircleConfiguration) Serialization.deepCopy(config.getGreatCircleConfig()), flags);
break;
case ROAD_NETWORK:
dlg = new GraphhopperBox(parent, (GraphhopperConfiguration) Serialization.deepCopy(config.getGraphhopperConfig()), flags);
break;
case EXTERNAL_MATRIX:
dlg = new ExternalMatrixFileBox(api,parent, (ExternalMatrixFileConfiguration) Serialization.deepCopy(config.getExternalConfig()), flags);
break;
}
if(dlg!=null){
dlg.setLocationRelativeTo(SwingUtilities.getWindowAncestor(DistancesPanel.this));
dlg.setVisible(true);
if(dlg.getSelectedOption() == AbstractDistancesConfigBox.OK_OPTION){
switch (config.getMethod()) {
case GREAT_CIRCLE:
config.setGreatCircleConfig(((GreatCircleBox)dlg).getConfig());
break;
case ROAD_NETWORK:
config.setGraphhopperConfig(((GraphhopperBox)dlg).getConfig());
break;
case EXTERNAL_MATRIX:
config.setExternalConfig(((ExternalMatrixFileBox)dlg).getConfig());
break;
}
}
}
}
}));
if ((flags & UIFactory.EDIT_OUTPUT_UNITS) == UIFactory.EDIT_OUTPUT_UNITS) {
add(Box.createRigidArea(new Dimension(10, 2)));
add(new JButton(new AbstractAction("Units") {
@Override
public void actionPerformed(ActionEvent e) {
new UnitsBox(parent, config.getOutputConfig(), flags).setVisible(true);
}
}));
}
if ((flags & UIFactory.EDIT_OUTPUT_TRAVEL_COST_TYPE) == UIFactory.EDIT_OUTPUT_TRAVEL_COST_TYPE) {
add(Box.createRigidArea(new Dimension(10, 2)));
add(new JButton(new AbstractAction("Cost type") {
@Override
public void actionPerformed(ActionEvent e) {
new OutputCostTypeBox(parent, config.getOutputConfig(), flags).setVisible(true);
}
}));
}
}
}