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); } } }
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()); }
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; } }
@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); }