GUIプログラミング
はじめに


Mind Version 9(以下、Mind9)は、GUI(*1)ライブラリ を併用することで、ウィンドウを開き、ラベルやボタンを表示し、エディタのようなテキスト編集をおこない、図形や写真を描画し、ダイアログを開く・・といった、いわゆるGUIアプリケーションの開発を行うことができます。


(GUIの実装について)

 GUIエンジンとして、Mind7 で使っていたTcl/Tk (*2) を再び採用しました。もちろんですが Tcl/Tk は当時より新しい版 (Tcl/Tk 8) になっています。

 旧 Mind7 ではGUIを使うのにTcl/Tkレベルのスクリプトを書く必要がありました。プログラム言語の中に別のプログラム言語を抱えるスタイルのため使い勝手に課題がありましたが、Mind9 においてはTcl/Tkスクリプトは完全に隠されており、Mindレベルの記述だけでGUIを実現できるようになっています。

 ここ最近の動きとして、他のプログラム言語もGUIエンジンとしてTcl/Tkを使うようになっています。Python のGUIライブラリ Tkinter が有名で、そのほかにも Ruby の Ruby/Tk などがあるようです。
 Pythonなど他言語ではTcl/Tkのコマンドとその概念にほぼ1対1対応する形での実装のようですが、Mind9 ではプログラミングを容易にするため、高水準・抽象的・簡単な表現で済むレイヤをかぶせており、Tcl/Tkレベルの動作原理を理解する必要はまったくありません。ソースコードを見ただけでは Tcl/Tk が使われているとは気が付かないでしょう。 GUIのプログラミング初心者であっても容易にプログラムを組むことができます。

(最も短いGUIプログラム)
メインとは
        ラベル1は	ID
    メインウィンドウで ラベルのIDを取得し ラベル1に 入れ
    「こんにちは。」を ラベル1に テキストを設定し
    ラベル1を 有効化して配置する。
 ソースコードをご覧いただくと分かるように、ウィンドウの位置・サイズ、ウィジェット(表示する部品)の位置・サイズなどは指定していません。GUIライブラリが適切に自動決定するのでユーザは細かなことに気を使わなくて済みます。もちろん意図した配置にすることもできます。

(Mind9 のコンパイラとランタイム)
 コンパイラ自体は Mind8 に若干の改良を加えたものであり、GUIだからといってコンパイラに特別な機能が加わっているわけではありません。GUI機能のすべてはそのためのライブラリ(guilib)が負っています。
 ユーザが作成したアプリケーションを配布するとき、Tcl/Tk側のランタイムライブラリ(GUIエンジン)も一緒に添付する必要がありますが、そのサイズは小さくかつMindプログラムと一体化し易く、ユーザプログラムのパッケージング/配布も容易です。
 他言語でのGUI系アプリケーションとのもう一つ違いは、Mind9 が自己完結型で、ほかのモジュール・・たとえば Windowsに予め関連プログラムをインストールしておくもの・・を必要としない点です。
 開発したアプリケーションは exeファイル形式であり、GUIエンジンもアプリケーションに簡単に含めて配布できます。アプリケーションはZipで固めた簡単な形式で配布可能で、インストーラを作る必要もありません。

(統合開発環境 - Mind WorkBench)
 Mind WorkBench という 統合開発環境(IDE)を標準装備します。GUIアプリケーション/コンソールアプリケーションのいずれもコマンド プロンプトに降りることなくソース編集、コンパイル、実行をこのシステム内でおこなうことができます。
 正式版GUIライブラリにはGUIライブラリ自体のソースコードと Mind WorkBench のソースコードが付属するのでGUIプログラミングの参考にすることができます。
 大規模ソフトである Mindコンパイラが Mind 自身で記述されていること、またそれに次ぐ規模の統合開発環境もMind自身で記述されていることは、Mindの実用性の高さの証と言えます。


注1
GUIとは Graphical User Interface の略で、ウィンドウやボタン、マウスを使ってソフトウェアを操作するスタイルを指す。
注2
Tcl は古くからあるスクリプト言語で、特に Tk と呼ばれるGUIエンジンと組み合わせて(Tcl/Tk)使うことで高度なGUI機能を実現する。他言語からエンジンだけを利用することも可能。