| New MacLab. | MacLab. News Blog | English |
DecorMasterObject
デスクトップピクチャの制御機能、画像の表示、Speech Managerによるテキスト読み上げなど,様々なユーザーインターフェースを担うライブラリです。ここでは実装された順に様々な機能とそのスクリプティングの概念を示します。
Decor制御機能とImageBinデータ形式
そもそもは
Decorというデスクトップに画像を表示するためのスクリプトを作成していました。その過程で,
DecorMasterというスクリプトが作られました。このスクリプトは画像をドロップするとDecorに表示させ,その表示パラメータも設定できるものでした。Decorはその表示パラメータをAppleScriptとの間でやりとりすることができ,漢字Talk7.5のもとではAppleScriptからの画像表示の方法としてはベストのように思われました。このDecorを用いて,次のようなデータ形式をImageBinフォーマットとして決定しました。
DecorMasterObjが採用している画像フォーマットImageBinはリスト形式で,
{(画像のクリエータタイプ文字列), (画像データ文字列), (Decorのパラメータ設定一式)}
となっています。Decorのパラメータは
tell application "Decor Daemon" to get all settings
で得ることができます。その内容は以下のようになっています。
{active:true, automatic change:false, time interval:330, wait until idle:true, idle period:10, picking:at random, scaling:true, keep proportions:true, scale down only:false, dithering:true, use border color:true, color:{65535, 65535, 65535}, tiling:false, scale and crop:false, animate cursor:false, error handling:ignore, reaction to display changes:reload picture, image spec:file "Macintosh HD:システムフォルダ:初期設定:DecorMaster Image"}
これはDecorのインストールされていない環境下では以下のように表現されます。
{ヌclass actvネ:true, ヌclass achgネ:false, ヌclass Itvlネ:330, ヌclass pwIdネ:true, ヌclass pwISネ:10, ヌclass pickネ:ヌconstant ****arndネ, ヌclass scalネ:true, ヌclass asptネ:true, ヌclass downネ:false, ヌclass dthrネ:true, ヌclass cstmネ:true, color:{65535, 65535, 65535}, ヌclass tileネ:false, ヌclass cropネ:false, ヌclass pVBLネ:false, ヌclass pErHネ:ヌconstant ****Eignネ, ヌclass dpthネ:ヌconstant ****rlpcネ, ヌclass ispcネ:file "Macintosh HD:システムフォルダ:初期設定:DecorMaster Image"}
当初はこのフォーマットはアプリケーションDecorChangerの内部でのみ利用されていました。その内部では以下のような内部ルーチンが定義されました。
- returnFilePath()
- 現在Decorで表示している画像のファイルパスを返す。
- readImage(FilePath)
- 指定したファイルパスの画像をImageBinフォーマットで読み込む。returnFilePathイベントと組み合わることによりDecorで現在表示している画像をそのままパラメータごとImageBinフォーマットにすることができる。
- dispImage(ImageBin)
- ImageBinフォーマットの画像データを渡すことにより,その画像をDecorで表示する。
- hideOthers()
- デスクトップに表示している画像を見やすくするため,実行しているアプリケーション以外のすべてのアプリケーションのウインドウを隠す。アプリケーションメニューで「他を隠す」を選んだのと同じ。
画像データベース機能
デスクトップピクチャを自由に制御できるようになったため、これをAppleScript用の画像表示エンジンに利用することにしました。また,DecorMaster Objectは表示するための画像をあらかじめ内部に保持するデータベース機能も持ちました。データベースを操作するために以下のルーチンが定義され、
DecorMasterからDecor制御機能のみを切り出してCyberHandlerObjからも利用できるようにしたスクリプトがDecorMaster Objectでした。
- returnNum()
- データベース内の画像の枚数を調べる。
- returnID(ImageID)
- 指定したIDの画像を取得する。
- dispImage(ImageID)
- データベース内の対応するID番号を持った画像を表示する。
- addImage(ImageBin)
- 画像をデータベースの末尾に追加する。
- deleteID(ImageID)
- 指定したIDの画像をデータベースから削除する。
すなわち,データベース内の画像にはすべてIDが割り当てられ,そのIDを整数で指定することでデータベース内の操作を行うことができます。dispImage(ImageID)ルーチンは、与えられたパラメータの内容がリストであればImageBinとして扱いそのまま表示し,パラメータの内容が整数であればImageIDとしてそのIDに対応した番号の画像をデータベースから引き出して表示します。
データベースの画像そのものはDecorMaster Object内部に保持され、DecorMaster Objectは単体のファイルとして機能拡張フォルダ内に保存されるようになりました。DecorMasterはその内部のデータベースを書き換えるためのツールとなりました。
CyberHandlerObjの拡張
さて,DecorMasterObjが画像データベースとそれを表示するルーチンを備えたことで,他のスクリプトからそれを呼び出して簡単に画像を表示することができるようになりました。そこで
CyberHandler Objectは以下のような機能を備えました。
try
-- Script to be done
on error errStr number errNum
errorObj("Error in reading file.", errStr, errNum)
end try
このerrorObjルーチン内で,CyberHandlerObjはDecorMasterObjのデータベースのID=2の画像を表示します。あらかじめ画像をデータベースに登録した状態のDecorMasterObjが限定配布されました。これが
DecorMasterObject with MAGI Schemeと呼ばれる拡張されたインターフェースです。
この際に問題となるのは,元の画像への復帰でした。スクリプトが勝手にデスクトップの画像を書き換えた後,直ちにもとの画像に戻す機能が必要になったわけです。
readImageルーチンを使えば現在表示中の画像を丸ごと取得することは可能なので,それを広域変数にでも入れておいて再び DecorMasterObjに戻すことは可能でした。しかしこれでは,画像ファイルの大きさが大きかった場合に CyberHandlerObjを組み込んだアプリケーションが大量のメモリを消費してしまいます。
そこで,次のようなルーチンが DecorMasterObjに組み込まれました。
- storeSet()
- 現在の設定を記憶する。
- dispTempImage(ImageID)
- データベース内の対応するID番号を持った画像を一時的に表示する。
- loadSet()
- 記憶した以前の状態に復帰する。
storeSet および loadSet の各命令では画像データそのものは扱わないため,メモリ消費はそれほど大きくありません。
これらの命令の内容は DecorMasterObjのバージョンによって変更されています。すなわち、Mac OS Xにおいてはメモリの問題を気にする必要はないため、直接ImageBinデータそのものが内部で処理されるように変更されています。また、当初は各アプリケーションに読み込まれたDecorMasterObjが設定内容を広域変数で保持していましたが、後のバージョンでは、広域変数の利用を排除してメモリーリークをなくし、より自由で安定したスクリプティングを実現するため、storeSet命令とloadSet命令は設定内容をテンポラリファイルに保存するように変更されています。各アプリケーションは、このようなDecorMasterObj内部の変更をほとんど意識する必要はありません。
ImageBinフォーマットの出力
リストでもレコードでも自由にバイナリファイルとして記録することができる
Data Component Objectが作られ,その応用例として
DecorChangerが作成されました。これに対応して DecorMasterにも DecorChanger書類をデータベースに読み込む機能が付きました。ImageBinフォーマットが単なるアプリケーション内部のデータの形式としてではなく、画像そのものと画像の表示方法を同時に定義したファイルフォーマットとなりました。ImageBinファイルフォーマットは内部にPICT、GIF、JPEGの画像を保持することができます。
画像と設定内容が一括してファイルに保存できる DecorChangerは Decorの取り扱いをずいぶんと簡単にしてくれました。それは DataCompObjの優れた機能のおかげでしたが, DataCompObjの側も, DecorChangerにおける使用を前提にパスワード保護やコピー防止保護などの機能を実現していきました。
データベースの近代化
データベースの実体はそもそもはDecorMasterObj内の属性として定義されたリストでした。そのため,以下のような問題がありました。
- DecorMasterからのDecorMasterObjの書き出しの際に,store命令を使用するため,しばしばシステムに不調を来していました。
- DecorMasterObj内にデータベースが存在することにより,データベース機能を利用するか否かに関わらずDecorMasterObjを利用するすべてのアプリケーションに大量のメモリを割り当てなくてはいけませんでした。
これらの問題を避けるため,DecorMasterObj 2.4以降ではデータベースが初期設定フォルダ内に
Data Component Objectフォーマットとして保存されるようになりました。これにより,DecorMasterObjをコンパイルし直してもデータベースはそのまま利用することができるようになりました。また, CyberHandlerObjが画像の一時表示機能を利用する際にメモリ不足となることを防ぐため, DecorMasterObjはデータベースファイルの大きさと現在のアプリケーションのメモリの空きを比較できるようになりました。すなわち,データベース機能とデータベース本体が分離されたわけです。
DecorMasterObjと DecorMaster DataBaseが分離したことで,データベースの内容を操作するためのソフトウエアである DecorMasterは属性として DecorMasterObjを組み込んでおく必要がなくなりました。DecorMaster 2.4からは各ルーチンの内部で局所変数として DecorMasterObjを読み込むようになりました。ただし,この変更により DecorMaster 2.4は DecorMasterObj 2.4未満と互換性が失われました。 DecorMasterの変更に合わせて DecorChanger 1.5も実行エンジンである DecorMasterObjを共有ライブラリとして外部に持つようになりました。また,これらのソフトウエアは DataCompObjフォーマットで記録された DecorMasterObj共有ライブラリを利用することもできます。DecorChangerとその実行エンジンである DecorMasterObjの分離により,DecorMasterObjのアップデートのみで様々な画像表示環境に対応できる可能性が生まれ,後述するApple純正のデスクトップピクチャによる Decorのエミュレーション機能の開発につながっていきます。
storeSet/loadSet命令はデータをHDに書き出すのではなく広域変数として記憶していました。広域変数を保持した DecorMasterObjは CyberHandlerObjの内部において広域変数として保持されていました。しかし,広域変数のもたらすさまざまな弊害や仕様の不透明さが明らかになったため,CyberHandlerObjや DecorMasterObjから広域変数を排除することになりました。そこで storeSet/loadSet命令は文字通り画像表示に関する設定データをHDに保存することになりました。これは,どんなデータでもファイルに保存することができる DataCompObj共有ライブラリのおかげです。
Dialog Directorによる仮想データベース
Decorは漢字Talk7時代にはデスクトップへの画像表示として一般的なものでしたが,MacOS8にApple純正のデスクトップピクチャ機能が組み込まれたことによりあまり使われなくなりました。Decorがインストールされていない環境下でも,Dialog Directorがインストールされていることがあります。その場合,Dialog Directorを使って QuickDraw画像を Dialog Directorで表示することができます。ただしこの場合はデスクトップに画像を表示するのではなくウインドウを作成してそこに表示するので,dispImageルーチンではなくdispTempImageルーチンのみを使用します。あらかじめ画像の大きさに合わせてウインドウを作成しなければいけないので,あらかじめ作成しておいた画像を表示するだけの機能です。通常の DecorMasterObjのデータベースでは PICT/GIF/JPEGなどの画像を扱いますが,ここでは生のQuickDraw画像データを取り扱うので,データに関しても互換性がありません。実際には,AS RUnnerなど、CyberHandlerObjを親属性として持つアプリケーションの起動画面や警告画面などの表示に使われます。実際に CyberHandlerObjが呼び出す DecorMasterObjのルーチンは3つだけなので,そこに Dialog Directorの機能を組み込めばいいわけです。CyberHandlerObjを親属性として利用している各アプリケーションは、DecorMaster Obj内部のこのような変更を意識する必要はありません。これまでのDecorMasterObjとは違い、自由に操作できるデータベースが実在するわけではないので、これをDecorMasterObjの仮想データベースと呼びます。この機能に関して利用できるDecorMasterObjの命令とその動作内容は次のようになっています。
- storeSet()
- DD installを行う。
- dispTempImage(ImageID)
- 対応するID番号を持ったQuickDraw画像を一時的に表示する。
- loadSet()
- 画像を消去してDD uninstallする。
この機能においては画像を表示するスクリプトと画像データそのものは完全に一致しなくてはいけないため,DataCompObjを用いたネットワークインストーラにより一括してインストールが行われます。また,QuickDraw画像データのファイルへの保存もDataCompObjフォーマットが利用されています。
この Dialog Director用の仮想データベースモードとQuickDraw画像データの処理機能を備えた DecorMasterObjを DecorMasterObj ver.3.xと呼びます。そして,従来の Decor用の2.xと3.xの並行開発及び統合が目標となります。
Apple純正のデスクトップピクチャの登場
DecorMasterObj以外のスクリプトは単に DecorMasterObjのルーチンを呼び出しているだけだったのでデスクトップピクチャを制御する DecorMasterObjを開発すればよかったのですが,MacOS8のデスクトップピクチャコントロールパネルは現在表示中の画像のパスを得ることはできても表示に関する設定を得ることができず,完全な互換スクリプトを作成することはできませんでした。
MacOS 8.5からはデスクトップピクチャがアピアランスコントロールパネルに統合され,画像のパスだけではなく表示に関する設定やモニタの数なども AppleEventで取得することができるようになりました。設定できるモードの数が Decorよりもはるかに少ないため ImageBinフォーマットを完全に再現することはできませんが,ほぼ実用となる互換スクリプトを作成することができるようになりました。これが DecorMasterObj ver.3.5です。
Decorの制御には Decorの本体である Decor Daemonを直接スクリプト内で指定しなくてはいけないため,Decorがインストールされていない環境で DecorMasterObj ver.2.xを読み込むと「Decor Daemonはどこですか」と聞かれてしまいましたが, DecorMasterObj ver.3.xでは,Apple純正のデスクトップピクチャはクリエーターでアプリケーションを指定して AppleEventを直接スクリプトに記述することができるため,デスクトップピクチャが利用できない環境でも不具合は生じないので, DecorMasterObj ver.3.5以降はDecorMasterObjがネットワークインストーラの標準インストール項目となりました。
Decorのエミュレーション
DecorMasterObjは Apple純正のデスクトップピクチャ(以下DTPと略)を利用してDecorのエミュレーションを行います。DecorChangerや DecorMasterなどのアプリケーションは,Decor版のものをほぼそのまま使用しており,DecorMasterObjライブラリを環境に合わせて入れ替えるだけで漢字Talk7.5から Mac OS Xまで幅広く対応します。
Decorは次のような真偽値を持ち、それらの組み合わせにより多数の画像表示方法を利用できます。
- scaling
- 画像を拡大縮小するかどうか。
- keep proportions
- 画像の拡大縮小を行う場合に,縦横の比率を維持するかどうか。
- scale down only
- 画像が画面より大きい場合に全体が入るように縮小するが,画像が画面より小さい場合に拡大はしない。
- tiling
- タイル表示をするかどうか。
- scale and crop
- 画像が画面全体を覆うように拡大して,余った部分を切り捨てる。
それに対して,DTPは次のような4つのモードしかありません。
- scaled
- 縦横の比率を維持したまま拡大縮小する。
- filling
- 画面全体を覆うように拡大縮小する。
- centerd
- 画面の中央に置く。
- tiled
- 画像をそのままの大きさでタイル状に張る。
Decorのほうが圧倒的に細かく設定を行うことができるため,Decorのいくつかの設定はDTPでは正しく再現できません。たとえば,縦長の画像を縦横の比率を維持したまま拡大してタイル状に張るということはDecorならば簡単ですが,DTPでは不可能です。AppleにはもっとDTPの高性能化を要求したいものです。
しかし,DecorのパラメータをDTPで再現するために,可能な限りの再現を行うために,以下のようなロジックを組みました。
- もしもDecorで tiling:true ならば DTPでは tiled とする。
- もしもDecorで scaling:false ならば DTPでは centerd とする。
- もしもDecorで scaling:true かつ keep proportions:true ならば DTPでは scaled とする。
- もしもDecorで scaling:true かつ keep proportions:false ならば DTPでは filling とする。
これで,Decorのパラメータを使って DTPにおける画像表示が可能になりました。次に,DTPのパラメータから Decorのパラメータを生成してみましょう。そのためにはまず,Decorと DTPのパラメータの対応を見直してみましょう。
DTP | tiling: | scaling: | keep proportions: |
scaled | false | true | true |
filling | false | true | false |
centerd | false | false | true |
tiled | true | false | true |
この表をぐっとにらむと,scaledを標準としてそれ以外の場合にパラメータを修正すればいいということがわかります。
set theSet to ¬
{《class actv》:true, 《class achg》:false, 《class Itvl》:30, 《class pwId》:false, 《class pwIS》:10 ¬
, 《class pick》:《constant ****arnd》, 《class scal》:true, 《class aspt》:true, 《class down》:true, 《class dthr》:true ¬
, 《class cstm》:false, color:{65535, 65535, 65535}, 《class tile》:false, 《class crop》:false, 《class pVBL》:false ¬
, 《class pErH》:《constant ****Eign》, 《class dpth》:《constant ****rlpc》, 《class ispc》:FilePath}
if (version of AppleScript as real) > 1.3 then
tell application getApp("apcp")
if 《class dpos》 of 《class cmon》 1 is 《constant dposscal》 then set 《class down》 of theSet to false
if 《class dpos》 of 《class cmon》 1 is 《constant dpostile》 then set 《class tile》 of theSet to true
if 《class dpos》 of 《class cmon》 1 is 《constant dpostile》 then set 《class scal》 of theSet to false
if 《class dpos》 of 《class cmon》 1 is 《constant dposfill》 then set 《class aspt》 of theSet to false
if 《class dpos》 of 《class cmon》 1 is 《constant dposcntr》 then set 《class scal》 of theSet to false
if 《class dpos》 of 《class cmon》 1 is 《constant dposauto》 then set 《class pwId》 of theSet to true --autoをwaitで代用
quit
end tell
end if
これでDTPからDecorへの連携もOKです。本当は auto をどのように扱うかなどの問題がまだ残っているのですが,ここでは割愛します。DTPの持つモードは auto を除きすべてDecorでも使用できます。DecorChanger書類の規格をより詳細な設定が行えるDecorに合わせておいてよかったと思います。
あとは画像本体のデータと合わせて前述の ImageBinデータとし, DataCompObjフォーマットで丸ごと保存すると DecorChanger書類の出来上がりというわけです。
DecorMasterObj ver.3.5において dispTempImageルーチンはDTPによる Decorエミュレーションに割り当てられ,Dialog Directorによる仮想データベースは削除されましたが,DecorMasterObj ver.3.6以降は再び Dialog Directorによる仮想データベース機能も復活し,MacOS 8.5以降とそれ以前で自動的に両者が切り替わるようになりました。
Dialog Directorインストール下のMacOS 8.1では,同様の方法によりデスクトップピクチャコントロールパネルを使用した画像表示は行えますが,現在の画像の状態を取得することはできません。これにより storeSet/loadSet命令が動作しないため,CyberHandlerObjは dispTempImageルーチンを使用できません。DecorChanger等が DecorMasterObjに対して画像表示命令を出す場合は同じ dispTempImageルーチンであってもパラメータが ImageIDの整数ではなく ImageBinのリストなので,デスクトップピクチャコントロールパネルを使用した画像表示を行います。
ProgressBar と Speech Manager
開発用のコアライブラリであるCyberHandlerObjが肥大化して困っていたので,利用頻度の低かった Speech Managerに関するルーチンをDecorMasterObjに移動しました。
- sVoice(text)
-
Speech Managerを利用します。対応する各種のosaxが必要です。
はるか以前の CyberHandlerObjには ProgressBarというヘルパーアプリケーションの制御機能がありましたが,ProgressBar Objectというライブラリに独立していました。このライブラリは利用頻度が低く、独立したファイルとしてインストールする必要性が低かったため、そのルーチン群は DecorMasterObjに組み込まれました。
- startProgress(text)
-
ProgressBarを起動してプログレスバーを表示します。
- setBar(integer),setMax(integer)
-
プログレスバーの最大値および現在の値を設定します。
- setCap(text),setSubCap(text)
-
プログレスバーの表示文字列を変更します。
- endProgress()
-
ProgressBarを終了します。
ProgressBar Object互換機能がDecorMasterObjに組み込まれた背景として,Dialog Director関連のルーチンが DecorMasterObj 3.xに数多く組み込まれており,次に述べる Dialog Directorによる ProgressBar Object互換機能を組み込むと DecorMasterObjに Dialog Director関連の機能を集約することができる点を上げることができます。
ProgressBar Object互換機能を持つのは DecorMasterObj 2.5以降および DecorMasterObj 3.0以降です。
Dialog Directorによる ProgressBar Object互換機能
現在ではProgressBarというヘルパーアプリケーションはほとんど用いられません。そこで,AppleScriptのユーザーの間で注目を集めている Dialog Directorを使用して同じ機能を実現してみました。
- startProgress(text)
-
Dialog Directorをインストールしてプログレスバーを表示します。
- setBar(integer),setMax(integer)
-
プログレスバーの最大値および現在の値を設定します。
- setCap(text),setSubCap(text)
-
プログレスバーの表示文字列を変更します。
- endProgress()
-
Dialog Directorをアンインストールします。
ルーチン名は ProgressBar用とまったく同じなので,スクリプトを組む際には ProgressBar用に組んでいるのか Dialog Director用に組んでいるのかを意識する必要は全くありません。DecroMasterObjは、ProgressBarや Dialog Directorのインストール状況を判断して適切な動作を行います。Dialog Directorを使用する際の DD instalなどの動作は自動的にルーチンの内部で行われます。
また,通常のMacintosh用ソフトウエアがしばしば利用する小さなダイアログを表示するためのルーチンもつけました。
- startSmallProgress(text),endSmallProgress()
-
Dialog Directorにより小さなダイアログを表示します。
インストール条件
システムの環境とインストールされるDecorMasterObjの関係は以下のようになっています。
システム環境 | AppleScript | DecorMasterObj | データベース |
MacOS 8.5/8.6/9.x | 1.3〜 | 3.x | DecorMaster DataBase (CyberHandlerObjからの利用は不可) |
MacOS 8/8.1 | 1.1.1 | 3.x | DecorMaster DataBase (CyberHandlerObjからの利用は不可) |
Decor | (任意) | 2.x | DecorMaster DataBase |
Dialog Director | (任意) | 3.x | 仮想データベース (内容の変更は不可,CyberHandlerObjから利用) |
System7 | (任意) | 3.x | 利用不可 |
AppleScriptのバージョンが1.3以上であれば MacOS 8.5以上であると判断できるので, DecorMasterObj 3.xによりすべての機能が利用できます。それ以外の場合,Dialog Directorがインストールされていればほぼすべての機能が利用できますが,データベース機能は仮想データベースとなり,データベースの内容は変更できません。Decorがインストールされていれば DecorMasterObj 2.xとともにすべての機能が利用できます。MacOS 8/8.1であって,Dialog Directorと Decorのいずれもインストールされていない場合,DecorMasterObjは DecorMaster DataBaseの画像を表示できますが,元の画像に復旧する機能は使用できないため,CyberHandlerObjを通じての DecorMaster DataBaseの利用はできません。MacOS 7.6.1以前で Dialog Directorと Decorのいずれもインストールされていない場合,DecorMasterObjの機能はほとんど利用できないことになります。
Systemのバージョン及び Dialog Directorの有無はスクリプトで簡単に確認できますが,Decorの有無は簡単に確認できない上,Decor対応版の DecorMasterObj 2.xをシステムフォルダにインストールした状態で Decorがアンインストールされると CyberHandlerObjを利用したほとんどのスクリプトの動作に支障を来すため,DecorMasterObj 2.xはインストーラが別になっています。また,システムフォルダ内にインストールしなくてもよいように通常は対象となるアプリケーションとともに配布されます。ファイル名は2.xが「DecorMasterObj」,3.xが「DecorMasterObject」となっており,重複してインストールすることができます。複数のライブラリがインストールされている場合の読み込みの優先順位は
スクリプト共有ライブラリ規格によって定義されています。
データベースは DecorMasterを使用すると新規に作成することができますが,登録ユーザーにはあらかじめ画像を記録したデータベースをインターフェース拡張ライブラリとして配布しています。ただし,Dialog Director用の仮想データベースのみは Dialog Directorがインストールされた条件下で AS Runnerに付属するネットワークインストーラからインストールできます。
アプリケーションと制御用のDecorMasterObjライブラリ,画面表示に使用されるシステムの関係は,次のようなレイヤー構造でとらえることができます。
アプリケーション | DecorChanger DecorMaster | AppleScript Runner CyberHandlerObj |
DecorMasterObj | 3.x | 2.x | 3.x |
画像表示エンジン | Desktop Picture | Decor | Dialog Director |
データベース | DecorMaster Database | 仮想データベース |
画像方式 | PICT・GIF・JPEG | QuickDraw |
Dialog Directorは QuickDrawデータを直接表示するのに対し, DecorMaster DatabaseではJPEGなどの画像ファイルを利用しているため,データベースが共有できていないことがわかります。
また,画像表示エンジンはアプリケーションとライブラリの組合せから次のようなマトリクスでとらえることもできます。
| DecorMasterObj 2.x | DecorMasterObject 3.x |
AppleScript Runner CyberHandlerObj | Decor | Dialog Director |
DecorChanger DecorMaster | Decor | Desktop Picture |
DecorMasterObjは親アプリケーションの種類やシステムの環境などの条件によってその振る舞いを変えますし,インストーラがインストールするファイルもさまざまです。
メモリ圧縮,マルチユーザー等への対応
DecorMasterObjバージョン2.6/3.7はメモリ圧縮技術である SHS Moduleに対応します。これは,DecorMaster DataBaseの読み書きをシステムヒープ上で行うことで,DecorMasterObjを利用するスクリプト,特に DecorMasterのメモリ割り当てを減らそうとする試みです。DecorMaster DataBase全体を読み込むためのメモリは必要なく,目的の画像を読み込むだけのメモリがあれば十分です。データベースファイルを読み書きするための汎用スクリプト SHS Moduleが同時に提供されます。
また,テンポラリファイルがテンポラリアイテムフォルダに,表示用画像データがデスクトップピクチャフォルダに作成されるようになりました。
DecorMasterObj 4.xにおける2.x系列と3.x系列の統合
MacOS9上でSHS Moduleによるメモリ圧縮が有効でないことが判明し,さらにマルチユーザーに関する問題が別の方法で解決可能であることがわかったため,バージョン2.6/3.7はいったん破棄されました。マルチユーザーに関する問題はMac OS 9 Support Plug-inというライブラリによって提供され、Mac OS 9においてのみネットワークインストーラからインストールされます。
また,Mac OS 9からはスクリプトアプリケーションが初期設定フォルダ内に新規ファイルを書き出すことができなくなったため DecorMaster DataBaseのネットワーク配信によるインストールが困難となり,この問題に対処するために DecorMaster DataBaseの保存先をアプリケーションと同じフォルダに変更しました。この変更は共有ライブラリである DecorMasterObjの変更によって行われ,アプリケーション DecorMasterは変更されていません。ただし,関連するドキュメント等を変更するために DecorMasterのパッケージは書き直されています。
これまでのバージョンでは,バージョン 2.xのファイル名がDecorMasterObj,バージョン 3.xのファイル名がDecorMasterObjectとなっていて,アプリケーションははじめにDecorMasterObjというファイルを探して,見つからなければDecorMasterObjectを探していました。MacOS8以降では原則としてDecorMasterObjectしか用いられませんし,Decorのインストールされていない環境下でDecorの制御用のコードを含むDecorMasterObj 2.xが読み込まれることはあまりよくない結果を生むことが多く,問題でした。
そこで,従来のDecorMasterObject 3.xの後続バージョンのファイル名をDecorMasterObjとし,従来のDecorMasterObj 2.xの機能(Decorの制御)を持つファイルをDecor Support Plug-inという名称にしました。これにより,どのような環境においてもアプリケーションが読み込むファイルはDecorMasterObjのみになりました。Decorの制御が必要な場合は,Decorがインストールされていることを確認した上でDecorMasterObjectがさらにDecor Support Plug-inを読み込むようになりました。さらに,アプリケーションが直接読み込むファイルがDecorMasterObjひとつに統一されるようになったため,従来のDecorMasterObjとDecorMasterObjectとで重複していたコードを大幅に削除できるようになりました。また、ネットワークインストーラは、Decorがインストールされていない環境下においてはDecor Support Plug-inそのものをインストールしません。
さらに,アプリケーション名にDecorを含まないアプリケーションに対してはdispTempImageルーチンは環境によらずDialog Director制御機能が提供されることになりました。CyberHandlerObjを親属性に持つアプリケーションからは,setMode(1),setMode(0)と順にコールするだけで、CyberHandlerObjがDecorMasterObjのstoreSet/dispTempImage/loadSet命令を順に適切なタイミングで呼び出し、そのアプリケーションにあった起動画面を表示することができるようになります。DecorMasterObjはアプリケーションの名称などの情報を
スクリプト共有ライブラリ規格に沿って取得して起動画面を表示します。これにより,複数のアプリケーションに対して統一したブランドイメージを提供できます。
これらの変更を加えたバージョンをDecorMasterObj 4.0xといいます。ただし,DecorMaster,DecorChangerなどの一部のアプリケーションはシステムの環境を判定する際にDecorMasterObjのバージョンを利用し,DecorMasterObjのバージョン番号が3.0以上か未満かで動作内容がかわります。そのため,DecorMasterObjはアプリケーションの名称にDecorが含まれている場合には,システムがMacOS8以降であれば4.0x,それ以前であれば2.7xという偽りの数字を返します。DecorChangerなどからは,System7.x上ではDecorMasterObj 2.xを読み込んでいるように見えるため,DecorChangerはDesktop Picture制御モードではなくDecor制御モードで動作することになります。
このようにして,DecorMasterObj 4.0x/2.7xにおいては対応アプリケーションの側をほとんど書き換えることなく互換性と安定性の向上,スクリプトリソースの利用の効率化,各アプリケーションのブランドイメージの統一を実現しました。
DecorMasterObject
Ver.4.0
スクリプトアプリケーションに拡張されたユーザーインターフェースを提供します。
(C) Kazufumi SUZUKI |
|
DecorMasterObj 4.0が提供するDialog Directorによる起動画面のイメージ(HTMLによる再現)
Mac OS Xへの対応
Mac OS X 10.1.2以降,AppleScriptからFinderを通じてデスクトップピクチャを変更することができるようになりました。また,shell scriptを通じてデスクトップの表示に関するパラメータを書き換えることができるようになりました。これらを利用することで,DecorMasterObj 5.xからMac OS Xにおいてデスクトップピクチャの表示の変更ができるようになりました。この機能はDecorMasterObj 5.0において実装されました。
ただし,この機能を持ったスクリプトをClassic Mac OSで読み込もうとするとアプリケーションがクラッシュすることがわかりました。そこで,Mac OS X用の機能を持ったDecorMasterObj 5.1は Mac OS X Support Plug-inと名称を変更し,各アプリケーションが直接読み込むファイルDecorMasterObjはOSのバージョンの判定と各OSに対応した適切なプラグインの読み込み機能を持つようにしました。それぞれのアプリケーションはこの変更を意識する必要はなく,実行の際にDecorMasterObjライブラリが必要な実行用スクリプトを探して実行するようにしました。
アプリケーション層 | DecorChanger, AS Runner |
スクリプト共有ライブラリ層 | DecorMasterObj 4 |
実行スクリプト層 | Mac OS X Support Plug-in (DecorMasterObj 5) |
デスクトップピクチャ表示層 | Mac OS X デスクトップピクチャ |
変更履歴
- ver.5.5
- Tiger以降のAppleScript 1.10におけるエラーに対処?
- ver.5.49
- Panther以降のFileVault環境におけるエラーに対処?
- ver.5.48
- テンポラリ画像の書き出し先をデスクトップピクチャフォルダからテンポラリフォルダに変更。アプリケーションパッケージのリージョン書き換え機能を追加。
- ver.5.47
- アプリケーションパッケージに対応。
- ver.5.46
- ネットワークインストーラエンジンの呼び出しを追加。
- ver.5.45
- 背景色の処理を改善。
- ver.5.44
- DecorChangerで表示していた画像が消えることがある問題を解決。バンドル形式のアプリケーションの日本語化スクリプトを内蔵。
- ver.5.43
- 背景色の設定に対応。画像表示の高速化。
- ver.5.42
- Mac OS X 10.2以上において,画像表示時の初期設定データを初期化。一時データの形式を OS X専用フォーマットに変更。
- ver.5.41
- Mac OS X 10.2以上における初期設定のエラーに対応。ProgressBarなど各種処理の高速化。Mac OS X 10.1.xに対する最終バージョン。
- ver.5.4
- Mac OS X 10.2以上をサポート。
- ver.5.3
- デスクトップの切り替えを行うスクリプトのエンジンを更新。簡単にモード変更が行えるsetMode命令の拡張。デスクトップピクチャを消す(?)裏技の追加。デフォルトの背景色をMac OS Xのデフォルトバックグラウンドカラーに変更。トラブルの多いMac OS X 10.2以上をいったんサポートしないこととした。
- ver.5.29
- Mac OS X 10.2対応の処置を施したつもりがバグがあり、ver.5.291でもとのとおりに。
- ver.5.28
- QuickTimeがサポートするすべての種類の画像ファイルへの対応。shell script関連の命令の追加。
- ver.5.27
- 同じファイルタイプの画像を続けて表示する場合に画像の切り替えが行われないことがある問題の解決。
- ver.5.26
- テンポラリファイルの内容が残らないようにした。
- ver.5.25
- Mac OS X 10.2においてデスクトップピクチャに複数の画像を含むフォルダを指定している場合に誤作動する問題を回避しました。
- ver.5.24
- TIFF画像への対応。ファイルタイプの属性を持たないファイルへの対応。
- ver.5.23
- 起動時の拡張インターフェースのスキップ。
- ver.5.22
- 拡張インターフェース内部のエラー処理の追加。
- ver.5.21
- Mac OS Xにおいてエラー処理用の拡張インターフェースが利用できるようになった。
- ver.5.2
- Mac OS Xにおいてリアルタイムにデスクトップピクチャの表示モードの変更が実際の表示に反映されるようになり,再ログインの必要がなくなった。
- ver.5.1
- 画像表示モードのパラメータが有効になった。ファイル名をMac OS X Support Plug-inに変更し,ver.4.1からのみ呼び出されるようにした。
- ver.5.0
- Mac OS X専用バージョン。
- ver.4.1
- Mac OS Xにおいては Mac OS X Support Plug-in (DecorMasterObj.dbn 5)を読み込むようにした。これ以降、4.xはClassic Mac OSのためのコードを持ち、OS Xにおいては5.xへのイベントの中継を行います。
- ver.4.0 (2.7)
- SHS Moduleへの対応を終了。Decor関係の機能を Decor Support Plug-inに移動。DecorMaster・DecorChanger以外のすべてのソフトウエアからは Dialog Directorのみが利用できます。
- ver.3.7
- メモリ圧縮技術 SHS Moduleに対応,Mac OS 9のマルチユーザーに対応。
- ver.3.6
- アピアランスコントロールパネルの制御におよび Dialog Directorの利用の両方のモードを備えた2.5とほぼ完全互換となったされたバージョン。
- ver.3.5
- Dialog Directorではなくアピアランスコントロールパネルの制御によって2.x互換機能を実現したバージョン。
- ver.3.2
- Speech Manager用ルーチンの追加。
- ver.3.1
- Progress Bar用ルーチンの追加。
- ver.3.0
- 新たに書き起こして Dialog Directorを使用してProgressBar制御機能および画像表示機能を実現したバージョン。
- ver.2.77
- 4.15と同じ。
- ver.2.76
- 4.1と同じ。Mac OS X Support Plug-inをサポートします。
- ver.2.7.x
- 4.0xと同じ。DecorMaster・DecorChangerからは2.7と認識されます。Decor Support Plug-inをサポートします。
- ver.2.6
- メモリ圧縮技術SHS Moduleに対応,Mac OS 9のマルチユーザーに対応。
- ver.2.5
- 3.5と同様の Dialog Director制御によるProgress Bar用ルーチンを搭載したバージョン。
- ver.2.4
- 画像データベースを共有ライブラリの内部から初期設定フォルダに独立させて,共有ライブラリから広域変数を排除したバージョン。
- ver.2.x
- DecorMasterから必要なスクリプトを共有ライブラリとして独立させてCyberHandlerObjから利用できるようにしたバージョン。
| Index |
Copyright(C) Kazufumi SUZUKI, All rights reserved.