private void hideCommandComponents() {
   commandLabel.getParent().remove(commandLabel);
   commandComboBox.getParent().remove(commandComboBox);
   argumentLabel.getParent().remove(argumentLabel);
   argumentScrollPane.getParent().remove(argumentScrollPane);
   argumentButtonPanel.getParent().remove(argumentButtonPanel);
   this.pack();
 }
 private void setIcon(Icon i) {
   if (icon.getParent() != null) {
     if (i != null && i.equals(icon.getIcon())) {
       return;
     }
     remove(icon);
   }
   if (i != null) {
     icon = new LinkLabel("", i, this, null);
     add(icon, 0);
   }
 }
Example #3
0
  @Override
  public void paintComponent(Graphics g) {
    final JLabel lbl = CHomeUI.SINGLETON_INSTANCE.getLblSelected();
    int yTop = (lbl.getY() + lbl.getParent().getY());

    // super.paintComponent(g);
    final Graphics2D g2d = (Graphics2D) g.create();
    final int w = getWidth();
    final int h = getHeight();

    FSkin.setGraphicsColor(g2d, d20);

    // Selected in this group, don't draw background under selected label.
    if (getY() < yTop && yTop < getY() + h) {
      g2d.fillRect(0, 0, w, lbl.getY());
      g2d.fillRect(0, lbl.getY() + lbl.getHeight(), w, h);

      FSkin.setGraphicsGradientPaint(g2d, w - 8, 0, l00, w, 0, d80);
      g2d.fillRect(w - 6, 0, w, lbl.getY());
      g2d.fillRect(w - 6, lbl.getY() + lbl.getHeight(), w, h);
    }
    // Selected not in this group; draw full background.
    else {
      g2d.fillRect(0, 0, w, h);

      FSkin.setGraphicsGradientPaint(g2d, w - 8, 0, l00, w, 0, d80);
      g2d.fillRect(w - 6, 0, w, h);
    }

    FSkin.setGraphicsColor(g2d, l10);
    g2d.drawLine(0, h - 1, w - 1, h - 1);

    FSkin.setGraphicsColor(g2d, d60);
    g2d.drawLine(0, 0, w - 1, 0);

    g2d.dispose();
  }
  /**
   * Imports the data represented by the given Transferable into the given component. Returns 'true'
   * on success, 'false' otherwise.
   *
   * @param comp The component to import the data to.
   * @param t The Transferable that holds the data.
   * @return 'true' on success, 'false' otherwise.
   */
  public boolean importData(JComponent comp, Transferable t) {
    try {
      JLabel data;

      /*
        This variable is used to temporarily keep the old selected unit,
        while moving cargo from one carrier to another:
      */
      UnitLabel oldSelectedUnit = null;

      // Check flavor.
      if (t.isDataFlavorSupported(DefaultTransferHandler.flavor)) {
        data = (JLabel) t.getTransferData(DefaultTransferHandler.flavor);
      } else {
        logger.warning("Data flavor is not supported!");
        return false;
      }

      // Do not allow a transferable to be dropped upon itself:
      if (comp == data) {
        return false;
      }

      // Make sure we don't drop onto other Labels.
      if (comp instanceof UnitLabel) {
        UnitLabel unitLabel = (UnitLabel) comp;
        /**
         * If the unit/cargo is dropped on a carrier in port (EuropePanel.InPortPanel), then the
         * ship is selected and the unit is added to its cargo. If the unit is not a carrier, but
         * can be equipped, and the goods can be converted to equipment, equip the unit.
         *
         * <p>If not, assume that the user wished to drop the unit/cargo on the panel below.
         */
        if (unitLabel.getUnit().isCarrier()
            && unitLabel.getParent() instanceof InPortPanel
            && parentPanel instanceof PortPanel) {
          PortPanel portPanel = (PortPanel) parentPanel;
          if (data instanceof Draggable && ((Draggable) data).isOnCarrier()) {
            oldSelectedUnit = portPanel.getSelectedUnitLabel();
          }
          portPanel.setSelectedUnitLabel(unitLabel);
          comp = portPanel.getCargoPanel();
        } else if (unitLabel.canUnitBeEquipedWith(data)) {
          // don't do anything before partial amount has been checked
        } else {
          comp = getDropTarget(comp);
        }
      } else if (comp instanceof AbstractGoodsLabel) {
        comp = getDropTarget(comp);
      }

      // t is already in comp:
      if (data.getParent() == comp) {
        return false;
      }

      if (data instanceof UnitLabel) {

        // Check if the unit can be dragged to comp.

        Unit unit = ((UnitLabel) data).getUnit();
        if (comp instanceof DropTarget) {
          DropTarget target = (DropTarget) comp;
          if (!target.accepts(unit)) {
            return false;
          }

          if ((comp instanceof ColonyPanel.OutsideColonyPanel
                  || comp instanceof ColonyPanel.ColonyCargoPanel)
              && !gui.tryLeaveColony(unit)) {
            return false;
          }
          target.add(data, true);

          // Update unit selection

          // new unit selection has already been taken care
          // of if this unit was moved to ToAmericaPanel
          restoreSelection(oldSelectedUnit);
          comp.revalidate();

          return true;
        } else {
          return false;
        }
      } else if (data instanceof GoodsLabel) {
        // Check if the goods can be dragged to comp.
        GoodsLabel label = (GoodsLabel) data;
        Goods goods = label.getGoods();

        // Import the data.
        if (label.isPartialChosen()) {
          int defaultAmount = -1;
          if (goods.getLocation() instanceof GoodsLocation) {
            GoodsLocation loc = (GoodsLocation) goods.getLocation();
            if (goods.getAmount() > loc.getGoodsCapacity()) {
              // If over capacity, favour the amount that would
              // correct the problem.
              defaultAmount =
                  Math.min(goods.getAmount() - loc.getGoodsCapacity(), GoodsContainer.CARGO_SIZE);
            }
          }
          int amount = getAmount(goods.getType(), goods.getAmount(), defaultAmount, false);
          if (amount <= 0) return false;
          goods.setAmount(amount);
        } else if (goods.getAmount() > GoodsContainer.CARGO_SIZE) {
          goods.setAmount(GoodsContainer.CARGO_SIZE);
        }

        if (comp instanceof UnitLabel) {
          return equipUnitIfPossible((UnitLabel) comp, goods);
        } else if (comp instanceof JLabel) {
          logger.warning("Oops, I thought we didn't have to write this part.");
          return true;
        } else if (comp instanceof DropTarget) {
          DropTarget target = (DropTarget) comp;
          if (target.accepts(goods)) {
            target.add(data, true);
          } else {
            return false;
          }

          restoreSelection(oldSelectedUnit);

          comp.revalidate();

          return true;
        }
      } else if (data instanceof MarketLabel) {

        // Check if the unit can be dragged to comp.

        MarketLabel label = ((MarketLabel) data);

        // Import the data.

        if (label.isPartialChosen()) {
          int amount = getAmount(label.getType(), label.getAmount(), -1, true);
          if (amount <= 0) {
            return false;
          }
          label.setAmount(amount);
        }

        if (comp instanceof UnitLabel) {
          return equipUnitIfPossible((UnitLabel) comp, label.getGoods());
        } else if (comp instanceof JLabel) {
          logger.warning("Oops, I thought we didn't have to write this part.");
          return true;
        } else if (comp instanceof JPanel) {
          if (comp instanceof CargoPanel) {
            ((CargoPanel) comp).add(data, true);
          } else {
            logger.warning("The receiving component is of an invalid type.");
            return false;
          }

          comp.revalidate();
          return true;
        }
      }

      logger.warning("The dragged component is of an invalid type.");

    } catch (Exception e) { // TODO: Suggest a reconnect.
      logger.log(Level.WARNING, "Import data fail", e);
    }
    return false;
  }