MPS 2024.3 ヘルプ

アイコンの説明

アイコン記述言語は、さまざまな MPS 要素(概念、アクションなど)のアイコンの記述とインスタンス化に役立ちます

この言語には、次の 2 つの目的があります。

  1. クイックアイコンプロトタイピング用のツールを提供する (たとえばコンセプトの新しいアイコンを作る)

  2. アイコンを拡張可能な言語構造にする

第一印象

MPS 言語定義言語でアイコンが必要な場合は、既存の .png ファイルを指す代わりに、目的のアイコンのテキスト説明を入力できます。

icon4.png

jetbrains.mps.lang.resources には、次の 2 つの構成が含まれています。

  • icon {} は、イメージを javax.swing.Icon クラスのインスタンスとして表します。

  • iconResource {} は、jetbrains.mps.smodel.runtime.IconResource クラスのインスタンスを返します。

icon5.png

アイコンのプロトタイプを作成する

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

icon1.png

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

icon2.png

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

icon3.png

言語の説明

アイコンの説明はレイヤーで構成され、各レイヤーは次のいずれかになります。

  • 原始的な図形

  • ファイルからロードされたカスタムイメージ

  • キャラクター

これらのレイヤーは、アイコンを表す単一のイメージに結合されます。これらのアイコンの説明を使用できます。

  • 言語定義言語のさまざまな場所でアイコンを指定する - 概念、アクションなど、アイコンが期待される場所

  • アイコンを返すことになっている MPS UI のメソッド

言語の拡張

言語は拡張のために開かれています。新しいアイコンタイプを追加するには、新しいコンセプトを作成し、アイコンインターフェースを実装する必要があります。アイコンインターフェースは目的のアイコンを表し、作成プロセス中に .png ファイルに変換されます。

モデルを生成した後、すべてのアイコンが出力モデルから収集され、それらの generate() メソッドが呼び出されます。これらは、対応するアイコンで記述されたイメージに対応する .png ファイルを作成します。アイコンリソースが(アイコン {} 構文を使用して、たとえば、)要求されたとき、Icon.getResourceId() メソッドによって参照されるリソースは、対応するモジュールのクラスローダを使用してロードされた Java アイコンオブジェクトに変換されます。

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) で指定されたアイコンでは、古い UI で使用するファイルと新しい UI で使用するファイルの 2 つのファイルを指定できます。古い UI ファイルのみが必須です。古い UI アイコンファイルのみが指定され、MPS が新しい UI で実行される場合、古い UI アイコンファイルを使用する前に、MPS は、アイコン定義で明示的に指定されていなくても、命名規則を使用して新しい UI に適したファイルを見つけようとします。

命名規則は次のとおりです。古い UI アイコンファイル「A.png」が 1 つ指定されている場合、MPS は「A.png」と同じディレクトリに「A_newui.svg」という名前のファイルアイコンが存在する場合、そのファイルアイコンを使用します。これにより、言語設計者は、すべてのアイコン定義でアイコンを手動で指定しなくても、新しい UI に適したアイコンをすばやく追加できます。古いアイコンファイルと新しいアイコンファイルの両方として、「.png」と「.svg」の両方の形式がサポートされていることに注意してください。ただし、ヒューリスティックでは、「.svg」ファイルが存在することが前提となっています

ビルドスクリプトでのアイコンのサポート

ファイルアイコンとテキストアイコンは両方とも、生成された Java ソースとともに、モデルの Java ソースディレクトリにイメージファイル (.png または .svg) をコピーまたは生成します。ビルドスクリプトがイメージをリソースとして扱うには、java オプション要素を使用してリソースファイルのファイルマスクを指定する必要があります。

java options generate debug info true generate no warnings false fork false compiler IntelliJ java compliance level 11 java compiler options ... generator jvm options ... copy resources true resource patterns includes **/*.properties, **/*.xml, **/*.png, **/*.svg

コピーリソースフラグが true に設定されていることにも注意してください。

アイコンの取り扱い

モジュール相対パス (${module}/-relative path で指定されたアイコン / イメージ) を持つすべてのアイコンは、ファイルとしてディストリビューションモジュールにコピーされ、この単一の場所でアクセスされます。第一に、これはディストリビューションとソースモジュールの両方からアイコンにアクセスできます。第二に、使用ごとにイメージファイルが重複するのを防ぎます。実行時にアイコンファイルを見つけるために、そのパスはモジュールの場所に対して解決されます。この検出を有効にするには、ビルドプロジェクトのモジュールの説明に、アイコンイメージを含むフォルダーを指すリソースルートが含まれていることを確認します。モジュールが jetbrains.mps.lang.resources を使用する場合は、デフォルトの icons/、resources/ ワイルドカードを使用して、インテンションを使用してリソースを追加できます。