Пример #1
0
  private void renderDocumentation(
      Element element, SignatureInfo signatureInfo, Optional<Integer> activeParameter) {
    if (signatureInfo.getDocumentation().isPresent()) {
      elemental.html.DivElement documentation =
          Elements.createDivElement(resources.css().documentation());
      documentation.setTextContent(signatureInfo.getDocumentation().get());
      element.appendChild(documentation);
    }

    if (signatureInfo.getParameters().isPresent()
        && activeParameter.isPresent()
        && signatureInfo.getParameters().get().size() > activeParameter.get()) {
      ParameterInfo parameterInfo = signatureInfo.getParameters().get().get(activeParameter.get());
      if (parameterInfo.getDocumentation().isPresent()) {
        elemental.html.DivElement parameter =
            Elements.createDivElement(resources.css().documentationParameter());
        SpanElement label = Elements.createSpanElement(resources.css().documentationParameter());
        label.setTextContent(parameterInfo.getLabel());

        SpanElement documentation = Elements.createSpanElement(resources.css().documentation());
        documentation.setTextContent(parameterInfo.getDocumentation().get());

        parameter.appendChild(label);
        parameter.appendChild(documentation);
        element.appendChild(parameter);
      }
    }
  }
Пример #2
0
  private void renderParameters(
      Element parent, SignatureInfo signatureInfo, Optional<Integer> activeParameter) {
    int end = signatureInfo.getLabel().length();
    int idx;
    Element element;
    for (int i = signatureInfo.getParameters().get().size() - 1; i >= 0; i--) {
      ParameterInfo parameterInfo = signatureInfo.getParameters().get().get(i);
      idx = signatureInfo.getLabel().lastIndexOf(parameterInfo.getLabel(), end);
      int signatureLabelOffset = 0;
      int signatureLabelEnd = 0;
      if (idx >= 0) {
        signatureLabelOffset = idx;
        signatureLabelEnd = idx + parameterInfo.getLabel().length();
      }

      element = Elements.createSpanElement();
      element.setTextContent(signatureInfo.getLabel().substring(signatureLabelEnd, end));
      parent.insertBefore(element, parent.getFirstElementChild());

      element = Elements.createSpanElement(resources.css().parameter());
      if (activeParameter.isPresent() && i == activeParameter.get()) {
        Elements.addClassName(resources.css().active(), element);
      }
      element.setTextContent(
          signatureInfo.getLabel().substring(signatureLabelOffset, signatureLabelEnd));
      parent.insertBefore(element, parent.getFirstElementChild());
      end = signatureLabelOffset;
    }
    element = Elements.createSpanElement();
    element.setTextContent(signatureInfo.getLabel().substring(0, end));
    parent.insertBefore(element, parent.getFirstElementChild());
  }
Пример #3
0
  private void render() {
    if (signatureHelp.getSignatures().size() > 1) {
      Elements.addClassName(resources.css().multiple(), rootElement);
      overloads.getStyle().setDisplay("block");
    } else {
      Elements.removeClassName(resources.css().multiple(), rootElement);
      overloads.getStyle().setDisplay("none");
    }

    signatures.setInnerHTML("");
    signatureViews = new ArrayList<>();
    int height = 0;
    for (SignatureInfo signatureInfo : signatureHelp.getSignatures()) {
      Element signatureElement =
          renderSignature(signatures, signatureInfo, signatureHelp.getActiveParameter());
      renderDocumentation(signatureElement, signatureInfo, signatureHelp.getActiveParameter());

      int signatureHeight = signatureElement.getOffsetHeight();
      signatureViews.add(Pair.of(height, signatureHeight));
      height += signatureHeight;
    }
  }
Пример #4
0
  @Inject
  public SignatureHelpView(SignatureHelpResources resources) {
    super(true);
    this.resources = resources;
    rootElement =
        Elements.createDivElement(resources.css().main(), resources.css().parameterHintsWidget());
    Element wrapper = Elements.createDivElement(resources.css().wrapper());
    rootElement.appendChild(wrapper);
    Element buttons = Elements.createDivElement(resources.css().buttons());
    wrapper.appendChild(buttons);
    Element previous =
        Elements.createDivElement(resources.css().button(), resources.css().previous());
    previous.appendChild((Node) resources.arrow().getSvg().getElement());
    buttons.appendChild(previous);
    previous.addEventListener(
        elemental.events.Event.CLICK,
        new EventListener() {
          @Override
          public void handleEvent(elemental.events.Event evt) {
            previous();
          }
        },
        true);

    Element next = Elements.createDivElement(resources.css().button(), resources.css().next());
    next.appendChild((Node) resources.arrow().getSvg().getElement());
    next.addEventListener(
        elemental.events.Event.CLICK,
        new EventListener() {
          @Override
          public void handleEvent(elemental.events.Event evt) {
            next();
          }
        },
        true);

    buttons.appendChild(next);

    overloads = Elements.createDivElement(resources.css().overloads());
    wrapper.appendChild(overloads);

    signatures = Elements.createDivElement(resources.css().signatures());
    wrapper.appendChild(signatures);

    Widget widget = new ElementWidget((com.google.gwt.dom.client.Element) rootElement);

    setWidget(widget);
  }