この記事で扱っていること
- フロントパネルのラベルに対しブックマーク機能を付ける方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWでブックマークと言うと、ブロックダイアグラム上に配置したフリーラベルの中で、「#」をつけた文字列を指します。
これにより、ブックマークマネージャでブックマークの一覧を表示したり、そのviにジャンプすることができます。
この機能、開発時やデバッグ時にとても有効なのですが、LabVIEWの機能としてはブロックダイアグラム上のラベルに対してしか使えません。
フロントパネル上のラベルに対してはこの機能がなかった、ないのであれば作ろう、ということで作ってみました。
どんな結果になるか
ブックマークマネージャのようにツリー形式で表示したいため、ツリー表示器を用いています。

今回は、以下のような適当なフロントパネルを持つviを対象として、どのような結果になるかを紹介します。
これらのviはテスト用なので特に何か特定の処理を行うわけでもなく配置している制御器や表示器は適当です。

プログラムを実行すると対象のフロントパネルにある文字列のうち、ブックマークの対象とみなせる形式(「#」がついているもの、ですが、後述するようにこのルールは変えられます)の文字がリストに並びます。
また、ツリーをダブルクリックするとそのviが開いてハイライトされます。

プログラムの構造
フロントパネル上のラベルの文字は、VIサーバーの機能を用いて取得できます。
これを踏まえ、指定したviのフロントパネル自体のリファレンスから始まり情報を取得していく処理を繰り返すようなプログラムとしています。

VIを指定したらVIリファレンスを開いてそこからフロントパネルのリファレンスを取得、それをもとに装飾[]プロパティを取得していきます。
装飾[]プロパティはフロントパネル上の装飾体のリファレンスを配列で取得し、この装飾の一部がラベルとなっているので、装飾のクラス名がTextになっているものを見つけ、その装飾体をテキストと見なしてテキストの内容をクラスタに入れます。
このクラスタはファイル名やファイルパスその他の情報も一緒に含んでいます。
なお、テキストの内容をクラスタに入れる際に、そのテキストに対してパターンで一致関数などを使用して、どのような文字列だったらブックマークとみなすかを変えることができます。
今回はブロックダイアグラムの例に倣って#がついたものとしていますが、必ずしもそうである必要はありません。
条件(#がついているかどうか)を満たしていたらForループからクラスタを出力する際のトンネルの条件にTrueが渡るようにしています。

対象のviのフロントパネル上の装飾体すべてを調べ終えたら、得られたクラスタの情報を基に、ツリー表示器でうまく表示されるように整えるだけです。
ツリー表示時にはツリー項目の編集で項目を末尾に追加というインボークノードを使用し、その際に項目のインデントなども必要になります。
このあたりは少々ややこしいので、処理方法はツリー表示器についてのサンプルを参考にしながら、以下のように書くことができます。

最後のイベントストラクチャについては、ツリーがダブルクリックされたらそのダブルクリックされた項目についてクラスタからファイルパスなどの情報を取得してVIリファレンスを開いてフロントパネルを表示したりハイライトさせるようにしています。

Viそのものを開かなくてもいい場合
上のプログラムでは、ダブルクリックすることでviそのものが表示されました。
ただ、多くのviが表示されるとそれだけで画面が圧迫されることもあるので、常に一定の枠組みだけで表示させるためにサブパネルに表示させる方法があります。

これは難しい話ではなく、サブパネルをフロントパネルに配置すると使用できるインボークノードで、対象とするVIのリファレンスを配線すればいいので、イベントストラクチャの中に処理を追加します。

ブロックダイアグラムのブックマークもまとめて確認する場合
ほとんど同じような処理でブロックダイアグラム上のブックマークも自作プログラムとしてマネージャを作成することができます。
フロントパネルのとブロックダイアグラムのとを両方表示させるプログラムを例にしていますが、ブールボタンか何かを置いておいて、その値に依ってフロントパネルのブックマークマネージャだけ/表示するかあるいはブロックダイアグラムのブックマークマネージャだけ表示するなどといった切り替え機能をつけてもいいと思います。

やっていることは単純で、フロントパネルに対する処理と全く同じことをブロックダイアグラム上の装飾体についても行うだけです。
ただし、ブロックダイアグラムのリファレンスを扱うにはVIスクリプトが有効になっている必要があります。

VIスクリプトを有効にするにはメニューバーのツールメニューからオプションを選び、VIサーバカテゴリの設定にチェックを入れるだけです。

本記事では、フロントパネル上のラベルにブックマーク機能を付ける方法を紹介しました。
ツリー表示器の扱いは少し面倒ですが、デバッグ用途にでも作っておくと便利なときもあると思うので参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント