Możesz zastąpić wbudowaną ikonę komentarza. Możesz na przykład zmienić wygląd wyskakującego dymka komentarza.
Aby zastąpić ikonę komentarza, rozwiń CommentIcon, zastąp wybrane metody w ICommentIcon i zarejestruj nową ikonę.
Extend CommentIcon
Zacznij od przedłużenia CommentIcon.
class MyCommentIcon extends Blockly.icons.CommentIcon {
constructor(sourceBlock) {
super(sourceBlock);
}
}
Zastępowanie metod w interfejsach ICommentIcon i Icon
Aby dostosować ikonę, możesz zastąpić metody w klasie ICommentIcon (opisane w kolejnych sekcjach) i Blockly.icons.Icon (opisane w artykule Tworzenie ikon niestandardowych).
Nie zastępuj funkcji getType, która musi zwracać wartość Blockly.icons.IconType.COMMENT.
Tekst
Interfejs ICommentIcon wymaga, aby komentarz zawierał tekst.
Metoda getText musi zwracać tekst komentarza. Metoda setText musi ustawić tekst komentarza i zaktualizować wszystkie elementy wizualne.
getText() {
return this.text;
}
setText(text) {
this.text = text;
this.myRenderMethod();
}
Dymek
Ikona komentarza niestandardowego musi implementować interfejs IHasBubble, aby obsługiwać serializację. Nawet jeśli ikona nie ma dymku, informacje o widoczności należy przechowywać w klasie, aby zachować zapisany stan. W przeciwnym razie utracisz informacje o użytkowniku, jeśli wczytasz zapisany stan, który zawiera informację o tym, czy komentarz był otwarty.
bubbleIsVisible() {
return this.bubbleVisible;
}
setBubbleVisible(visible: boolean) {
this.bubbleVisible = visible;
}
Więcej informacji o dymkach znajdziesz w artykule Korzystanie z dymków.
Interfejs ICommentIcon wymaga metody getBubbleSize, która zwraca rozmiar, oraz metody setBubbleSize, która go ustawia. To samo uzasadnienie, które podaliśmy wcześniej w przypadku zapisywania stanu, nawet jeśli ikona nie ma dymku, ma zastosowanie również tutaj.
getBubbleSize() {
return this.bubbleSize;
}
setBubbleSize(size) {
this.bubbleSize = size;
this.myRenderMethod();
}
ICommentIcon wymaga też metod getBubbleLocation i setBubbleLocation, które pobierają i ustawiają lokalizację dymku w obszarze roboczym.
setBubbleLocation(location) {
this.bubbleLocation = location;
}
getBubbleLocation() {
return this.bubbleLocation;
}
Zapisywanie i wczytywanie
Ikona komentarza niestandardowego musi implementować interfejs ISerializable. Stan powinien być zgodny z interfejsem CommentState.
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));
}
Więcej informacji o serializacji ikon znajdziesz w artykule Zapisywanie i wczytywanie ikon.
Zarejestruj ikonę
Na koniec wyrejestruj istniejącą ikonę komentarza i zarejestruj swoją ikonę komentarza, aby Blockly mogło ją utworzyć. Użyj ciągu znaków 'comment', aby wyrejestrować urządzenie, i IconTypes.COMMENT, aby je zarejestrować.
Blockly.icons.registry.unregister('comment');
Blockly.icons.registry.register(Blockly.icons.IconType.COMMENT, myCommentIcon);
Po zarejestrowaniu ikony Blockly będzie jej używać zamiast wbudowanej ikony komentarza, np. gdy użytkownik kliknie „Dodaj komentarz” w menu kontekstowym lub wywołasz funkcję myBlock.setCommentText().