組み込みのアイコンをオーバーライドする

Blockly には、コメント、警告、ミューテータの 3 種類のアイコンが組み込まれています。

コメント アイコンはオーバーライド可能です。つまり、Blockly に特定のリソースのインスタンスを 独自のコメント アイコン クラスを使用できます。 myBlock.setCommentText()。これは、たとえば コメントのポップアップ バブルが異なって表示されます。

コメント アイコンがハイライト表示されたブロック

警告アイコンとミューテーター アイコンはオーバーライドできません。

コメント アイコン

コメント アイコンをオーバーライドするには、 ICommentIcon インターフェースを実行して登録します。

基本的な実装

コメント固有のロジックを追加する前に、 カスタム アイコンの基本的な実装

タイプ

getType メソッドはコメント アイコン IconType を返す必要があります。

class MyCommentIcon extends Blockly.icons.Icon {
  getType() {
    return Blockly.icons.IconType.COMMENT;
  }
}

テキスト

ICommentIcon インターフェースでは、コメントにテキストが含まれている必要があります。 getText メソッドはコメントのテキストを返す必要があります。setText メソッド コメントのテキストを設定し、ビジュアルをすべて更新する必要があります。

getText() {
  return this.text;
}

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

ふきだし

カスタム コメント アイコンには IHasBubble インターフェースを実装する必要があります サポートしています。技術上アイコンにバブルが付いていないとしても、 公開設定情報をクラスに保存し、保存したアイテムが 維持されます。そうしないと、ファイルを読み込んだときにユーザーの情報が失われます。 コメントがオープンされたかどうかを含む保存。

bubbleIsVisible() {
  return this.bubbleVisible;
}

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

バブルの詳細については、ポップアップのバブルの使用をご覧ください。

ICommentIcon インターフェースには、次を返す getBubbleSize メソッドも必要です。 サイズ、そのサイズを設定する setBubbleSize です。前に説明したのと同じ理由を アイコンにバブルが適用されていない場合でも、 あります

getBubbleSize() {
  return this.bubbleSize;
}

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

保存して読み込む

カスタム コメント アイコンには ISerializable を実装する必要があります。 行うことができます。状態は CommentState に準拠している必要があります。 行うことができます。

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

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

アイコンのシリアル化について詳しくは、以下をご覧ください。 アイコンの保存と読み込み

登録

最後に、Blockly がアイコンをインスタンス化できるように、アイコンを登録する必要があります。行動 必ず IconTypes.COMMENT タイプを使用してください。

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