Symbol „Kommentar überschreiben“

Sie können das integrierte Kommentarsymbol überschreiben. Sie möchten beispielsweise, dass die Pop-up-Blase des Kommentars anders aussieht.

Ein Block mit hervorgehobenem Kommentarsymbol

Wenn Sie das Kommentarsymbol überschreiben möchten, erweitern Sie CommentIcon, überschreiben Sie ausgewählte Methoden in ICommentIcon und registrieren Sie das neue Symbol.

Extend CommentIcon

Beginnen Sie mit der Erweiterung von CommentIcon.

class MyCommentIcon extends Blockly.icons.CommentIcon {
  constructor(sourceBlock) {
    super(sourceBlock);
  }
}

Methoden in ICommentIcon und Icon überschreiben

Wenn Sie das Symbol anpassen möchten, können Sie Methoden in ICommentIcon (siehe die folgenden Abschnitte) und Blockly.icons.Icon (siehe Benutzerdefinierte Symbole erstellen) überschreiben. Überschreiben Sie getType nicht. Diese Funktion muss Blockly.icons.IconType.COMMENT zurückgeben.

Text

Bei der ICommentIcon-Schnittstelle muss der Kommentar Text enthalten. Die getText-Methode muss den Text des Kommentars zurückgeben. Mit der Methode setText muss der Text des Kommentars festgelegt und alle visuellen Elemente aktualisiert werden.

getText() {
  return this.text;
}

setText(text) {
  this.text = text;
  this.myRenderMethod();
}

Bubble

Ihr benutzerdefiniertes Kommentarsymbol muss die Schnittstelle IHasBubble implementieren, um die Serialisierung zu unterstützen. Auch wenn Ihr Symbol technisch keine Blase hat, sollten Sie die Sichtbarkeitsinformationen in Ihrer Klasse speichern, damit der gespeicherte Status beibehalten wird. Andernfalls gehen Informationen zum Nutzer verloren, wenn Sie einen Speicherstand laden, der angibt, ob der Kommentar geöffnet war oder nicht.

bubbleIsVisible() {
  return this.bubbleVisible;
}

setBubbleVisible(visible: boolean) {
  this.bubbleVisible = visible;
}

Weitere Informationen zu Blasen finden Sie unter Pop-up-Blasen verwenden.

Die ICommentIcon-Schnittstelle erfordert eine getBubbleSize-Methode, die eine Größe zurückgibt, und eine setBubbleSize-Methode, die sie festlegt. Die gleiche Argumentation wie oben, den Status auch dann zu speichern, wenn Ihr Symbol technisch gesehen keine Blase hat, gilt auch hier.

getBubbleSize() {
  return this.bubbleSize;
}

setBubbleSize(size) {
  this.bubbleSize = size;
  this.myRenderMethod();
}

Für ICommentIcon sind auch die Methoden getBubbleLocation und setBubbleLocation erforderlich, mit denen die Position der Blase im Arbeitsbereich abgerufen und festgelegt wird.

setBubbleLocation(location) {
  this.bubbleLocation = location;
}

getBubbleLocation() {
  return this.bubbleLocation;
}

Speichern und laden

Ihr benutzerdefiniertes Kommentarsymbol muss die ISerializable-Schnittstelle implementieren. Der Status muss der CommentState-Schnittstelle entsprechen.

saveState() {
  return {
    text: this.text,
    pinned: this.bubbleVisible,
    height: this.bubbleSize.height,
    width: this.bubbleSize.width,
    x: this.bubbleLocation.x,
    y: this.bubbleLocation.y,
  }
}

loadState(state) {
  this.setText(state.text);
  this.setBubbleVisible(state.pinned);
  this.setBubbleSize(new Blockly.utils.Size(state.width, state.height));
  this.setBubbleLocation(new Blockly.utils.Coordinate(state.x, state.y));
}

Weitere Informationen zur Symbolserialisierung finden Sie unter Symbole speichern und laden.

Symbol registrieren

Heben Sie schließlich die Registrierung des vorhandenen Kommentarsymbols auf und registrieren Sie Ihr Kommentarsymbol, damit es von Blockly instanziiert werden kann. Verwenden Sie den String 'comment' für die Abmeldung und IconTypes.COMMENT für die Registrierung.

Blockly.icons.registry.unregister('comment');
Blockly.icons.registry.register(Blockly.icons.IconType.COMMENT, myCommentIcon);

Nachdem Sie Ihr Symbol registriert haben, verwendet Blockly es anstelle des integrierten Kommentarsymbols, z. B. wenn der Nutzer im Kontextmenü auf „Kommentar hinzufügen“ klickt oder Sie myBlock.setCommentText() aufrufen.