[[PSSdev/FreeDesign]] #contents * 順序番号なしのアイテム定義 * 順序番号なしのアイテム定義 [#h619cba7] itemXX 形式で定義されるアイテム要素から、順序番号 XX を削除する。 これを実現することで、変数名を多重に定義できる。 つまり、出てくる順番で(リテラルに)変数値を変更しながらitemを指定できるため、 同じ変数名(例えば x, y など)を複数の意味で使用することができる。 その際に定義すべき仕様を考える。 ** 進行状況 ** 進行状況 [#tfe87d9a] :Draft1 (2003-03-23):item,stat,stat_and の仕様を考えた。 :Draft2 (2003-03-23):stat_and を stat2 に変更。 :Alpha12 (2003-03-25):Draft2 を実装 :Draft1 (2003-03-23)|item,stat,stat_and の仕様を考えた。 :Draft2 (2003-03-23)|stat_and を stat2 に変更。 :Alpha12 (2003-03-25)|Draft2 を実装 ** item の仕様 ** item の仕様 [#yf701e13] item = "hoge" という形式とする。 右辺値に対する仕様変更は行わない。 ** stat/stat2 の仕様 ** stat/stat2 の仕様 [#m255ead9] 現状の statXX, statXXand をそれぞれ stat, stat2 に変更する。 stat 項目は直前にある item に対する状態定義とする。 stat は item の次の行、stat2 は stat の次の行に存在しなければならない。 ** まとめ ** まとめ [#df528526] | 旧定義 | 新定義 | 制限 | 備考 | |itemXX|item||| |statXX|stat|itemの次の行になければならない|| |statXXand|stat2|statの次の行になければならない|| * ローカル変数 * ローカル変数 [#aeb8fe5e] スキン定義の便宜のために設ける(いわゆる)変数 個数制限はない ** 進行状況 ** 進行状況 [#mbe6e1c5] :Draft1 (2003-03-23):varXXkey/varXXval 形式で定義 :Draft2 (2003-03-23):Draft1 ではスキンが書きにくかったので、$key=val 形式で再定義 :v6.0 Alpha11 (2003-03-23): Draft2 を実装 :Draft1 (2003-03-23)|varXXkey/varXXval 形式で定義 :Draft2 (2003-03-23)|Draft1 ではスキンが書きにくかったので、$key=val 形式で再定義 :v6.0 Alpha11 (2003-03-23)| Draft2 を実装 ** Notation ** Notation [#a1b35375] $key = val で定義される。 key で指定された名前を変数名と呼ぶ。変数名にはalphabet,number,_が使用できる。 item 項目に $key を指定することで変数として扱うことが出来る。 変数は 右辺値 で指定された値が展開される。 '''実際には C 言語の #define のようなプリプロセッサ型展開が行われる''' $edit_x = 170 $replyedit_y = 257 item26 = "str, ($edit_x, $replyedit_y-17, $edit_x+80 , $replyedit_y ), '回答', Left, 0, 000000" item27 = "edit, ($edit_x, $replyedit_y , $edit_x+600, $replyedit_y+32), Reply" * ユーザ変数 * ユーザ変数 [#y46b0f77] オプション画面でユーザが変更できる変数 定義できるのは 20 個まで。 ** 進行状況 ** 進行状況 [#c0d30076] :Draft1 (2003-03-23):userXXzz形式で定義 :Draft2 (2003-03-23):ローカル変数と組み合わせることにした。 :Draft3 (2003-03-23):背景イメージ BackgroundImageFile に対応 :Draft4 (2003-03-25):user〜desc、user〜type、user〜key の組ではなく :Draft1 (2003-03-23)|userXXzz形式で定義 :Draft2 (2003-03-23)|ローカル変数と組み合わせることにした。 :Draft3 (2003-03-23)|背景イメージ BackgroundImageFile に対応 :Draft4 (2003-03-25)|user〜desc、user〜type、user〜key の組ではなく userXX 一文で定義するように変更。 実装についての覚え書きを追加。 :Draft5 (2003-03-25):変数の個数を 20 個に変更。 :v6.0 Alpha13 (2003-03-25):Draft5 を実装。 :Draft5 (2003-03-25)|変数の個数を 20 個に変更。 :v6.0 Alpha13 (2003-03-25)|Draft5 を実装。 ** 設定可能な項目 ** 設定可能な項目 [#kd9074e1] ユーザ側の利便性とスキン作者によるデザインを考慮して、以下の項目を変更可能とする。 また、オプション画面では、デフォルト値を使うかどうかを指定できる | '''項目名''' | '''変数のタイプ''' | '''オプション画面での設定項目''' | '''備考''' | |フォント関連項目|font|フォント選択ダイアログ|| |フォント名|fontname|フォント名選択コンボボックス|実装は未定| |フォントサイズ|fontsize|スピンコントロール|実装は未定| |カラー|color|カラーピッカー|| |背景色|-|カラーピッカー|スキンでは定義しなくてよい(デフォルト値の指定にはBackgroundColorを用いる)| |背景イメージ|-|参照ボタン|スキンでは定義しなくてよい(デフォルト値の指定にはBackgroundImageFileを用いる)| ** Notation ** Notation [#a0f76a98] userXX によって定義される。(XXは二桁の数値) item 系や font 項目と同様に、複数の項目を , で区切った形で記述する。 :第1項:変数の解説文(オプション画面で変更する際に利用者に提示される情報) :第2項:変数のタイプ :第3項:変数名($hogeの形で記述する) :第1項|変数の解説文(オプション画面で変更する際に利用者に提示される情報) :第2項|変数のタイプ :第3項|変数名($hogeの形で記述する) user00 = "'区切りの色', color, $bordercolor" $bordercolor = "7070ff" item40 = "border, (85, 20+20*0, 85+67, 20+20*0+20), $bordercolor" ** 注意事項 ** 注意事項 [#yf00adb7] user〜 で指定された変数が上書きされる。 言い換えれば「この変数はユーザで変更してもいいですよ」という指定をすることになる。 ユーザが(オプション画面で)その変数を変更した場合は、スキンファイルで指定した値は無視され、 その変数値は全てユーザが変更した値で置き換えられる。 逆に言えば、ユーザがその変数を変更していない場合は、スキンファイルで指定した値が利用される。 (user〜で何が書いてあっても全く関係ない。「変数のタイプ」すら関係ない) ** font の例 ** font の例 [#f51af101] user00 = "'数値のフォント', font, $font_num" $font_num = "16, 1, 0, 0, 0, MS Pゴシック" font09 = "$font_num" ** 実装(ユーザ設定の保存) ** 実装(ユーザ設定の保存) [#qae3ef34] ユーザがオプションで設定すると、skin/user.ini の [hoge] セクション(hoge はユーザ名)に ''ahi''00=30 のような記法で記述される。''ahi'' はスキンの名称(DesignName)、右辺はユーザが設定した変数値。 ** 実装(覚え書き) ** 実装(覚え書き) [#n2c296f5] - CFreeDesign::UserVar -- スキンファイル上のユーザ変数を管理する - CFreeDesign::UserVarMangaer -- ユーザが変更したユーザ変数を管理する。 学習画面起動時は、スキン読み込み前に UserVarManager によって skin/user.ini のユーザ変数定義が読み込まれる。 その後、UserVarManager が渡され、CFreeDesign によってスキンが読み込まれる。 ''変数展開''の際には UserVarList にその値が存在するかどうかを確かめ、 UserVarList 上にその変数値が存在すれば、スキンで定義されている変数値よりも UserVarList で定義されている値を優先して展開される。