É possível substituir o ícone de comentário integrado. Por exemplo, talvez você queira que o balão pop-up do comentário tenha uma aparência diferente.
Para substituir o ícone de comentário, estenda CommentIcon
, substitua os métodos selecionados em
ICommentIcon
e registre seu novo ícone.
Extend CommentIcon
Comece estendendo CommentIcon
.
class MyCommentIcon extends Blockly.icons.CommentIcon {
constructor(sourceBlock) {
super(sourceBlock);
}
}
Substituir métodos em ICommentIcon e Icon
Para personalizar o ícone, substitua os métodos em ICommentIcon
(descritos nas seções a seguir) e Blockly.icons.Icon
(descritos em Criar ícones personalizados).
Não substitua getType
, que precisa retornar Blockly.icons.IconType.COMMENT
.
Texto
A interface ICommentIcon
exige que o comentário tenha texto.
O método getText
precisa retornar o texto do comentário. O método setText
precisa definir o texto do comentário e atualizar os recursos visuais.
getText() {
return this.text;
}
setText(text) {
this.text = text;
this.myRenderMethod();
}
Balão
Seu ícone de comentário personalizado precisa implementar a interface IHasBubble
para oferecer suporte à serialização. Mesmo que o ícone não tenha tecnicamente uma bolha,
armazene as informações de visibilidade na sua classe para que o estado
salvo seja mantido. Caso contrário, você vai perder informações do usuário se carregar um salvamento que inclua se o comentário estava aberto ou não.
bubbleIsVisible() {
return this.bubbleVisible;
}
setBubbleVisible(visible: boolean) {
this.bubbleVisible = visible;
}
Para mais informações sobre balões, consulte Usar balões pop-up.
A interface ICommentIcon
exige um método getBubbleSize
que retorne um tamanho e um setBubbleSize
que o defina. O mesmo raciocínio de antes sobre
salvar o estado, mesmo que o ícone não tenha tecnicamente uma bolha, também se aplica aqui.
getBubbleSize() {
return this.bubbleSize;
}
setBubbleSize(size) {
this.bubbleSize = size;
this.myRenderMethod();
}
ICommentIcon
também exige os métodos getBubbleLocation
e setBubbleLocation
, que recebem e definem a localização do balão no espaço de trabalho.
setBubbleLocation(location) {
this.bubbleLocation = location;
}
getBubbleLocation() {
return this.bubbleLocation;
}
Salvar e carregar
Seu ícone de comentário personalizado precisa implementar a interface ISerializable
. O estado precisa estar em conformidade com a interface 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));
}
Para mais informações sobre a serialização de ícones, consulte Salvar e carregar ícones.
Registrar seu ícone
Por fim, cancele o registro do ícone de comentário atual e registre o seu para que
o Blockly possa instanciá-lo. Use a string 'comment'
para cancelamento do registro e IconTypes.COMMENT
para registro.
Blockly.icons.registry.unregister('comment');
Blockly.icons.registry.register(Blockly.icons.IconType.COMMENT, myCommentIcon);
Depois de registrar seu ícone, o Blockly o usará no lugar do ícone de comentário
integrado, como quando o usuário clica em "Adicionar comentário" no menu de contexto ou
você chama myBlock.setCommentText()
.