2010/10/27

設定ファイルにウィンドウ位置などの情報を保存する

ウィンドウを表示して入力の受け付けや情報の表示を行うタイプのプログラムでは、ウィンドウを表示する際、前回のウィンドウの位置・サイズを記憶して再現してくれるようにすると便利です。

このような設定情報の保存を行う際には、pref()関数を使います。
この関数は、適切なユーザー設定ディレクトリを自動認識して、設定ファイルを表すFile/Directoryオブジェクトを返してくれます。

設定ファイルの形式は、JavaScriptのオブジェクトリテラルの表記と同じ書式のテキストで保存するJSONという形式を使うと良いでしょう。
FileオブジェクトのloadJSON()やsaveJSON()というメソッドを使えば、簡単にオブジェクトとして読み込んだり保存できます。

下記の例は、ウィンドウを閉じようとしたときに位置とサイズを記憶して次回実行時に再現するだけのスクリプトです。
var config=(pref("windowPosTest.json")||{loadJSON:function()({})}).loadJSON();
var w=require('Window').Window.create({
 title:"test",
 width:100,height:100,
 x:config.windowX||0, y:config.windowY||0,
 events:{
  close:function(){
   config.windowX=this.x;
   config.windowY=this.y;
   pref("windowPosTest.json",true).saveJSON(config);
  },
 },
}).show();;

最初のpref()では、既に存在している設定ファイルを表すFileオブジェクトを取得しています。
この時、ファイルが存在していなくてnullが返された場合でもエラーにならずにデフォルトのオブジェクトがセットされるようにしておく必要があります。

Windowオブジェクトのcloseイベントでは、設定オブジェクトにウィンドウの現在位置をセットして保存を行っています。
保存時のpref()の呼び出しでは、第2引数をtrueにする必要があります。

スクリプトが不要になったらプログラムのディレクトリを削除するだけで完全に削除できるように、通常はスクリプトのあるディレクトリ内の「users」ディレクトリにユーザー名のディレクトリを作って保存されます。
しかし、スクリプトのあるディレクトリが書き込み禁止になっていたりする場合は、Application Dataディレクトリ内のスクリプトファイル名を名前にしたディレクトリが保存先として選択されます。
また、スクリプトと同じディレクトリに「config」というディレクトリがあれば、そちらが保存先になります。これはプログラムをリムーバブルメディアに入れて持ち出して複数の環境で利用したい場合などのための機能です。

なお、プログラム用のドライブに頻繁な書き込みをしたくないとか、まとめてバックアップ出来た方がいいなどの理由で、設定がApplication Dataディレクトリに保存されることを好むユーザーは、あらかじめApplication Dataディレクトリ内に該当するディレクトリを作成しておくことで、そちらに保存させることも出来ます。

これらの仕様により、pref()関数を使用すれば、簡単にユーザーの好みや実行環境に合った最適な場所にデータを保存できるようになっています。

0 件のコメント:

コメントを投稿