/** Add any stops selected in the destination selector. */ private void addSelectedStops() { int startIndex = -1; int endIndex = -1; int sel = this.destinationSelector.getSelectedIndex(); if (sel == 0) { // All colonies + Europe startIndex = 1; endIndex = this.destinationSelector.getItemCount(); } else { // just one place startIndex = sel; endIndex = startIndex + 1; } List<GoodsType> cargo = new ArrayList<>(); for (Component comp : cargoPanel.getComponents()) { CargoLabel label = (CargoLabel) comp; cargo.add(label.getType()); } int maxIndex = this.stopList.getMaxSelectionIndex(); for (int i = startIndex; i < endIndex; i++) { String id = this.destinationSelector.getItemAt(i); FreeColGameObject fcgo = getGame().getFreeColGameObject(id); if (fcgo instanceof Location) { TradeRouteStop stop = new TradeRouteStop(getGame(), (Location) fcgo); stop.setCargo(cargo); if (maxIndex < 0) { this.stopListModel.addElement(stop); } else { maxIndex++; this.stopListModel.add(maxIndex, stop); } } } }
/** {@inheritDoc} */ @Override protected void exportDone(JComponent source, Transferable data, int action) { try { CargoLabel label = (CargoLabel) data.getTransferData(DefaultTransferHandler.flavor); if (source.getParent() instanceof CargoPanel) { TradeRouteInputPanel.this.cargoPanel.remove(label); int[] indices = TradeRouteInputPanel.this.stopList.getSelectedIndices(); for (int stopIndex : indices) { TradeRouteStop stop = TradeRouteInputPanel.this.stopListModel.get(stopIndex); List<GoodsType> cargo = new ArrayList<>(stop.getCargo()); for (int index = 0; index < cargo.size(); index++) { if (cargo.get(index) == label.getType()) { cargo.remove(index); break; } } stop.setCargo(cargo); } TradeRouteInputPanel.this.stopList.revalidate(); TradeRouteInputPanel.this.stopList.repaint(); TradeRouteInputPanel.this.cargoPanel.revalidate(); TradeRouteInputPanel.this.cargoPanel.repaint(); } } catch (IOException | UnsupportedFlavorException ex) { logger.log(Level.WARNING, "CargoHandler export", ex); } }
public void initialize(TradeRouteStop newStop) { removeAll(); if (newStop != null) { // stop = newStop; for (GoodsType goodsType : newStop.getCargo()) { add(new CargoLabel(goodsType)); } } revalidate(); repaint(); }
/** {@inheritDoc} */ @Override public boolean importData(JComponent target, Transferable data) { if (!canImport(target, data.getTransferDataFlavors())) return false; try { CargoLabel label = (CargoLabel) data.getTransferData(DefaultTransferHandler.flavor); if (target instanceof CargoPanel) { CargoLabel newLabel = new CargoLabel(label.getType()); TradeRouteInputPanel.this.cargoPanel.add(newLabel); TradeRouteInputPanel.this.cargoPanel.revalidate(); int[] indices = TradeRouteInputPanel.this.stopList.getSelectedIndices(); for (int index : indices) { TradeRouteStop stop = TradeRouteInputPanel.this.stopListModel.get(index); stop.addCargo(label.getType()); } TradeRouteInputPanel.this.stopList.revalidate(); TradeRouteInputPanel.this.stopList.repaint(); } return true; } catch (IOException | UnsupportedFlavorException ex) { logger.log(Level.WARNING, "CargoHandler import", ex); } return false; }
/** {@inheritDoc} */ @Override public Component getListCellRendererComponent( JList<? extends TradeRouteStop> list, TradeRouteStop value, int index, boolean isSelected, boolean hasFocus) { JPanel panel = (isSelected) ? SELECTED_COMPONENT : NORMAL_COMPONENT; panel.removeAll(); panel.setForeground(list.getForeground()); panel.setFont(list.getFont()); Location location = value.getLocation(); ImageLibrary lib = getImageLibrary(); JLabel icon, name; if (location instanceof Europe) { Europe europe = (Europe) location; Image image = lib.getSmallerMiscIconImage(europe.getOwner().getNation()); icon = new JLabel(new ImageIcon(image)); name = Utility.localizedLabel(europe); } else if (location instanceof Colony) { Colony colony = (Colony) location; icon = new JLabel( new ImageIcon( ImageLibrary.getSettlementImage(colony, lib.getScaleFactor() * 0.5f))); name = new JLabel(colony.getName()); } else { throw new IllegalStateException("Bogus location: " + location); } panel.add(icon, "spany"); panel.add(name, "span, wrap"); for (GoodsType cargo : value.getCargo()) { panel.add(new JLabel(new ImageIcon(lib.getSmallerIconImage(cargo)))); } return panel; }