prefs - 設定情報の管理 ------------------------------------------------------------------------------ #define PREFSBUFSIZE 設定ファイルの処理に使用するバッファのサイズです。 ------------------------------------------------------------------------------ PrefType typedef enum { P_STRING, P_INT, P_BOOL, P_ENUM, P_USHORT, P_OTHER } PrefType; 設定項目の変数の型を表します。 P_STRING: gchar * (文字列) P_INT: gint (整数) P_BOOL: gboolean (bool 値) P_ENUM: DummyEnum (enum) P_USHORT: gushort (符号無し short) P_OTHER: その他(未定義) ------------------------------------------------------------------------------ typedef void (*DataSetFunc) (PrefParam *pparam); PrefParam 構造体にデータをセットするためのコールバック関数の型です。 ------------------------------------------------------------------------------ typedef void (*WidgetSetFunc) (PrefParam *pparam); PrefParam 構造体のデータから設定用 UI を更新するためのコールバック関数の 型です。 ------------------------------------------------------------------------------ PrefParam struct _PrefParam { gchar *name; gchar *defval; gpointer data; PrefType type; gpointer ui_data; }; 設定項目を表す構造体です。 name: 設定項目名 defval: デフォルト値 data: 設定を格納する変数へのポインタ type: 変数の型 ui_data: 設定用 UI と連携するために使用するデータ ------------------------------------------------------------------------------ PrefFile struct _PrefFile { FILE *fp; gchar *path; }; 設定ファイルを読み書きするときに使用する構造体です。 fp: ファイルストリーム path: ファイルのパス ------------------------------------------------------------------------------ GHashTable *prefs_param_table_get (PrefParam *param); PrefParam の設定項目名から PrefParam 構造体へのポインタを取得する ハッシュテーブルを生成します。 戻り値は prefs_param_table_destroy() で解放する必要があります。 param: PrefParam 構造体の配列 戻り値: 設定項目名をキー、 PrefParam 構造体へのポインタを値とする GHashTable オブジェクト ------------------------------------------------------------------------------ void prefs_param_table_destroy (GHashTable *param_table); prefs_param_table_get() で生成したハッシュテーブルを破棄します。 PrefParam 構造体自体は破棄されません。 param_table: prefs_param_table_get() で生成したハッシュテーブル ------------------------------------------------------------------------------ void prefs_read_config (PrefParam *param, const gchar *label, const gchar *rcfile, const gchar *encoding); ini ファイル形式の設定ファイル rcfile を読み込みます。 encoding が指定されている場合はそれを rcfile のエンコーディングとみなして UTF-8 への変換を行います。 まず "[label]" 形式の設定グループのラベルを探し、発見した行から次のラベル まで読み込みを行います。読み込んだ設定項目が PrefParam 構造体の配列 param 内に該当するものがある場合、その PrefParam 構造体に読み込んだデータを セットします。 param: PrefParam 構造体の配列 label: 設定グループのラベル rcfile: ini ファイル形式の設定ファイルのパス(ファイル名エンコーディング) encoding: rcfile のエンコーディング(NULL の場合 UTF-8) ------------------------------------------------------------------------------ void prefs_write_config (PrefParam *param, const gchar *label, const gchar *rcfile); PrefParam 構造体の配列 param を ini ファイル形式の設定ファイル rcfile として書き出します。 rcfile が既に存在し、複数の設定グループから構成される 場合は label に該当するグループのみが更新され、その他のグループは保持 されます。 param: PrefParam 構造体の配列 label: 設定グループのラベル rcfile: ini ファイル形式の設定ファイルのパス(ファイル名エンコーディング) ------------------------------------------------------------------------------ PrefFile *prefs_file_open (const gchar *path); 設定ファイル path をオープンし、 PrefFile 構造体を返します。 この時点ではまだ元のファイル path は上書きされません。 返った値は prefs_file_close() または prefs_file_close_revert() で解放する 必要があります。 ------------------------------------------------------------------------------ gint prefs_file_write_param (PrefFile *pfile, PrefParam *param); prefs_file_open() でオープンした設定ファイル pfile に設定項目 param を1行 書き出します。形式は name=value となります。 pfile: PrefFile 構造体へのポインタ param: PrefParam 構造体へのポインタ 戻り値: 成功した場合 0 エラーの場合 -1 ------------------------------------------------------------------------------ gint prefs_file_close (PrefFile *pfile); 設定ファイル pfile をクローズし、元のファイルと置き換えます。 pfile: PrefFile 構造体へのポインタ 戻り値: 成功した場合 0 エラーの場合 -1 ------------------------------------------------------------------------------ gint prefs_file_close_revert (PrefFile *pfile); 設定ファイル pfile をクローズし、元のファイルはそのまま保持し、 一時ファイルを破棄します。 pfile: PrefFile 構造体へのポインタ 戻り値: 成功した場合 0 エラーの場合 -1 ------------------------------------------------------------------------------ void prefs_set_default (PrefParam *param); PrefParam 構造体の配列 param の各要素をすべてデフォルト値に設定します。 param: PrefParam 構造体の配列 ------------------------------------------------------------------------------ void prefs_free (PrefParam *param); PrefParam 構造体の配列 param の各要素の data が参照している、設定項目値として 確保されているメモリを解放します。 data の参照先は無効になります。 param: PrefParam 構造体の配列