アイコンの説明
アイコン記述言語は、概念やアクションなどのさまざまな MPS 要素のアイコンを記述およびインスタンス化するために使用されます。
この言語には、次の 2 つの目的があります。
クイックアイコンプロトタイピング用のツールを提供する (たとえば、概念を表す新しいアイコンを作成する)
アイコンを拡張可能な言語構造にする
第一印象
MPS 言語定義言語でアイコンが必要な場合は、既存の .png ファイルを指す代わりに、目的のアイコンのテキスト説明を入力できます。

jetbrains.mps.lang.resources には、次の 2 つの構成が含まれています。
icon {} は、イメージを javax.swing.Icon クラスのインスタンスとして表します。
iconResource {} は、jetbrains.mps.smodel.runtime.IconResource クラスのインスタンスを返します。

アイコンのプロトタイプを作成する
アイコンを説明するとき、アイコンの作成インテンションから支援を受けることができます。アイコンの作成は、アイコンのテキスト説明を自動的に作成して、プロトタイプをすばやく作成する方法を提供します。

インテンションを呼び出すと、簡単なアイコン定義が作成されます。

この定義は、内部に文字「X」が付いた円形アイコンを記述しています。再生成すると、生成されたアイコンが有効になり、UI に表示されます。

言語の説明
アイコンの説明はレイヤーで構成され、各レイヤーは次のいずれかになります。
原始的な図形
ファイルからロードされたカスタムイメージ
キャラクター
これらのレイヤーは、アイコンを表す単一のイメージに結合されます。これらのアイコンの説明を使用できます。
言語定義言語のさまざまな場所でアイコンを指定する - 概念、アクションなど、アイコンが期待される場所
アイコンを返すことになっている MPS UI のメソッド
言語の拡張
言語は拡張のために開かれています。新しいアイコンタイプを追加するには、新しいコンセプトを作成し、アイコンインターフェースを実装する必要があります。アイコンインターフェースは目的のアイコンを表し、作成プロセス中に .png ファイルに変換されます。
モデルを生成した後、出力モデルからすべてのアイコンが収集され、それらの generate() メソッドが呼び出されます。これにより、対応するアイコンによって記述されたイメージに対応する .png ファイルが作成されます。アイコンリソースが要求されると(たとえば、icon{} 構文を使用する場合)、Icon.getResourceId() メソッドによって参照されるリソースが、対応するモジュールのクラスローダーを使用してロードされ、Java Icon オブジェクトに変換されます。
icon {} vs iconResource {}
リソース言語には、リソースをロードするための 2 つの構造があります。icon{} は javax.swing.Icon クラスのインスタンスとしてイメージをロードしますが、iconResource{} は jetbrains.mps.smodel.runtime.IconResource クラスのインスタンスを返します。2 番目のものは、コア MPS アスペクトで使用されます。これは、javax.swing パッケージに依存すべきではありません。 UI 関連のコードはすべて、アイコン {} を使用します。
静的フィールドを参照するアイコン
Java または BaseLanguage の静的フィールド宣言の形式でアイコンを提供するのが一般的です。ConstantFieldIcon の概念を使用すると、アイコンが期待される場所からこのような静的フィールド宣言を参照できます。
古い UI と新しい UI の両方をサポートするアイコン
MPS は、オプションで、従来の (古い) UI と最新の (新しい) UI という 2 つの異なるバージョンのユーザーインターフェースを提供できます。ユーザーは、設定 | 外観と動作 | 新しい UI で、優先するバージョンを選択できます。MPS 2024.3 以降では、古い UI を有効にする前に、専用の UI プラグインを手動でインストールする必要があります。新しい UI を使用することをお勧めします。
アイコンの説明を提供して表示できる TextIcon は、両方のバリアントを並べて記述することを可能にします。新しい UI バリアントが省略された場合、古い UI バリアントが古い UI 設定と新しい UI 設定の両方で使用されます。
ファイル名 (FileIcon) で指定されるアイコンでは、2 つのファイルを指定できます。1 つは旧 UI で使用するファイル、もう 1 つは新 UI で使用するファイルです。旧 UI のファイルのみが必須です。旧 UI アイコンファイルのみが指定され、MPS が新 UI で実行された場合、MPS は旧 UI アイコンファイルを使用する前に、命名規則を使用して、アイコン定義で明示的に指定されていなくても、新 UI に適したファイルを見つけようとします。
命名規則は次のとおりです。古い UI アイコンファイル "A.png" が 1 つだけ指定されている場合、MPS は "A.png "と同じディレクトリに"A_newui.svg" という名前のファイルアイコンが存在する場合は、それを使用します。これにより、言語設計者は、すべてのアイコン定義で手動で指定することなく、新しい UI に適したアイコンをすばやく追加できます。アイコンファイルとしては、古い形式と新しい形式の両方で ".png "と".svg "の両方がサポートされていることに注意してください。ただし、ヒューリスティックでは".svg" ファイルが存在することを前提としています。
ビルドスクリプトでのアイコンのサポート
ファイルアイコンとテキストアイコンは両方とも、生成された Java ソースとともに、モデルの Java ソースディレクトリにイメージファイル (.png または .svg) をコピーまたは生成します。ビルドスクリプトがイメージをリソースとして扱うには、java オプション要素を使用してリソースファイルのファイルマスクを指定する必要があります。
コピーリソースフラグが true に設定されていることにも注意してください。
アイコンの取り扱い
モジュール相対パス (${module}/-relative path で指定されたアイコン / イメージ) を持つすべてのアイコンは、ファイルとしてディストリビューションモジュールにコピーされ、この単一の場所でアクセスされます。第一に、これはディストリビューションとソースモジュールの両方からアイコンにアクセスできます。第二に、使用ごとにイメージファイルが重複するのを防ぎます。実行時にアイコンファイルを見つけるために、そのパスはモジュールの場所に対して解決されます。この検出を有効にするには、ビルドプロジェクトのモジュールの説明に、アイコンイメージを含むフォルダーを指すリソースルートが含まれていることを確認します。モジュールが jetbrains.mps.lang.resources を使用する場合は、デフォルトの icons/、resources/ ワイルドカードを使用して、インテンションを使用してリソースを追加できます。
関連ページ:
引用符
引用は、必要な構造を持つノードを簡単に作成できるようにする言語構造です。もちろん、smodelLanguage を使用してノードを作成し、同じ smodelLanguage を使用して、適切な子、プロパティ、参照を手動で入力することができます。ただし、これを実現するためのより簡単で視覚的な方法があります。以下の 2 つの構造は同一のノードを構築しますが、1 つ目は引用符を使用し、2 つ目はプレーンなモデル API を使用します。node<IntegerType> node = <in...
コンセプト機能
概念関数を使用すると、言語設計者は言語ユーザーにフックを残すことができます。これにより、ユーザーは生成されたコードで活用するコードを提供できます。例: エディター、制約、インテンションなど、MPS が言語設計に提供するほとんどの言語は、概念関数を活用します。インスペクターウィンドウでそれらの使用箇所を見つけることもできます。コンセプト関数は jetbrains.mps.baselanguage で定義されており、BaseLanguage コードが含まれています。このコードは、生成時に生成された Jav...