snitマニュアル
をテンプレートにして作成
[
Front page
] [
Page list
|
Search
|
Recent changes
|
RSS of recent changes
]
Start:
snit2.2/1.3のマニュアルを勝手に日本語に翻訳したものです。...
オリジナルの文書はhttp://tcllib.sourceforge.net/doc/snit....
----
#contents
----
*名前 [#m2e48e36]
''snit -''~
Snit's Not Incr Tcl
*コマンド概略 [#id9df4c6]
package require Tcl 8.5
package require snit ? 2.2.1 ?
snit::type name definition
typevariable name ? -array ? ? value ?
typemethod name arglist body
typeconstructor body
variable name ? -array ? ? value ?
method name arglist body
option namespec ? defaultValue ?
option namespec ? options... ?
constructor arglist body
destructor body
proc name args body
delegate method name to comp ? as target ?
delegate method name ? to comp ? using pattern
delegate method * ? to comp ? ? using pattern ? ? e...
delegate option namespec to comp
delegate option namespec to comp as target
delegate option * to comp
delegate option * to comp except exceptions
component comp ? -public method ? ? -inherit flag ?
delegate typemethod name to comp ? as target ?
delegate typemethod name ? to comp ? using pattern
delegate typemethod * ? to comp ? ? using pattern ? ...
typecomponent comp ? -public typemethod ? ? -inherit ...
pragma ? options... ?
expose comp
expose comp as method
onconfigure name arglist body
oncget name body
snit::widget name definition
widgetclass name
hulltype type
snit::widgetadaptor name definition
snit::typemethod type name arglist body
snit::method type name arglist body
snit::macro name arglist body
snit::compile which type body
$type typemethod args...
$type create name ? option value ... ?
$type info typevars ? pattern ?
$type info typemethods ? pattern ?
$type info args method
$type info body method
$type info default method aname varname
$type info instances ? pattern ?
$type destroy
$object method args...
$object configure ? option ? ? value ? ...
$object configurelist optionlist
$object cget option
$object destroy
$object info type
$object info vars ? pattern ?
$object info typevars ? pattern ?
$object info typemethods ? pattern ?
$object info options ? pattern ?
$object info methods ? pattern ?
$object info args method
$object info body method
$object info default method aname varname
mymethod name ? args... ?
mytypemethod name ? args... ?
myproc name ? args... ?
myvar name
mytypevar name
from argvName option ? defvalue ?
install compName using objType objName args...
installhull using widgetType args...
installhull name
variable name
typevariable name
varname name
typevarname name
codename name
snit::boolean validate ? value ?
snit::boolean name
snit::double validate ? value ?
snit::double name ? option value... ?
snit::enum validate ? value ?
snit::enum name ? option value... ?
snit::fpixels validate ? value ?
snit::fpixels name ? option value... ?
snit::integer validate ? value ?
snit::integer name ? option value... ?
snit::listtype validate ? value ?
snit::listtype name ? option value... ?
snit::pixels validate ? value ?
snit::pixels name ? option value... ?
snit::stringtype validate ? value ?
snit::stringtype name ? option value... ?
snit::window validate ? value ?
snit::window name
*説明 [#i54dcd2e]
SnitとはピュアTclのオブジェクト、メガウィジェットシステム...
一般的に、継承ベースのオブジェクトシステムでは、限定され...
Tclにとってオブジェクトとは、オブジェクトのように振舞う何...
従って、自前のオブジェクトであろうが、Tkウィジェットであ...
~
このマニュアルはリファレンス用です。もっとチュートリアル...
*Snitのバージョン [#wd1b6a44]
このマニュアルはSnit2.2とSnit1.3を対象にしています。この...
しかしながら、この二つにはいくつかのマイナーな違いがあり...
*リファレンス [#x425713d]
**型とウィジェットの定義 [#d8e27af4]
Snitは新しい型を定義するための次のコマンドを提供します。
-''snit::type'' '''name definition'''~
'''name'''という名前の新しい抽象データ型を定義します。
もし'''name'''が完全修飾コマンド名(名前空間を含んだ名前...
その型の名前は、従って、その新しい型のオブジェクトを作成...
''snit::type''の'''definition'''ブロックは次の定義を含む...
--''typevariable'' '''name''' ?-array ? ? '''value''' ?~
設定された名前'''name'''で型変数を定義。オプションで'''va...
型変数はこの型の全てのインスタンスで共有されます。もし -a...
--''typemethod'' '''name arglist body'''~
新しい型コマンドのサブコマンドである型メソッドを指定され...
''type''変数は、''body''中で型の完全修飾名を値を持つ変数...
もし'''name'''が二つ以上のトークンを含んでいる時は、Snit...
typemethod {a b} {arg} { puts "Got $arg" }
この文は暗黙的にbというサブコマンドを持っている、aという...
$type a b "Hello, world!"
aは色々なサブコマンドを持っているかもしれません。これは階...
型メソッドは、型が定義された名前空間からコマンドをインポ...
'''Snit 1.x 非互換''':Snit 1.xでは次の二つの型メソッドの...
$type a b "Hello, world!"
$type {a b} "Hello, world!"
Snit2.2では二つ目の呼び出しは不正です。
--''typeconstructor '' '''body'''~
型コンストラクタの'''body'''はその型が最初に定義された時...
''type''変数は、''body''中で型の完全修飾名を値を持つ変数...
型は型コンストラクタを一つだけ定義できます。~
型コンストラクタは、型が定義された名前空間からコマンドを...
--''variable'' '''name''' ? -array ? ? '''value''' ?~
インスタンス変数を定義します。この型の各インスタンスのプ...
--''method'' '''name arglist body'''~
インスタンスメソッドを定義。指定された名前、引数リスト、...
このように定義されたインスタンスメソッドは''ローカル定義'...
型とインスタンス変数は自動的に全てのインスタンスメソッド...
もし'''name'''が二つ以上のトークンを含んでいる時は、Snit...
method {a b} {} { ... }
この文は暗黙的にbというサブコマンドを持っている、aという...
$self a b "Hello, world!"
aは色々なサブコマンドを持っているかもしれません。これは階...
% snit::type dog {
method {tail wag} {} {return "Wag, wag"}
method {tail droop} {} {return "Droop, droop"}
}
::dog
% dog spot
::spot
% spot tail wag
Wag, wag
% spot tail droop
Droop, droop
%
私たちがしたことは、"wag"と"droop"サブコマンドを持ってい...
メソッドは、型が定義された名前空間からコマンドをインポー...
'''Snit 1.x 非互換''':Snit 1.xでは次の二つの型メソッドの...
$self a b "Hello, world!"
$self {a b} "Hello, world!"
Snit2.2では二つ目の呼び出しは不正です。
--''option'' '''namespec ? defaultValue ?'''
--''option'' '''namespec ? options... ?'''~
この型の各インスタンスのオプションを定義する。初期値が与...
このように定義されたオプションはローカル定義されたものと...
'''namespec'''はオプションの名前、リソース名、クラス名を...
option {-font font Font} {Courier 12}
オプション名はハイフン(-)で始まらなければなりません。そし...
option -font {Courier 12}
リソースとクラス名についての詳細は[[Tkオプションデータベ...
オプションは普通セットしたり取り出したりするのに、一般的...
set myfont $options(-font)
もし型がオプションハンドラ(例:-configuremethod)を定義し...
--- -default '''defvalue'''~
オプションのデフォルト値を定義します。省略された場合、オ...
--- -readonly '''flag'''~
'''flag'''はTclが認識できる真偽値です(true/false, yes/no,...
--- -type '''type'''~
全てのローカル定義されたオプションはそのデータ検証の型を...
例えば、あるオプションは、''snit::integer''を検証型として...
option -number -type snit::integer
また、サブタイプを設定して、その値を1から10の間の整数とし...
option -number -type {snit::integer -min 1 -max 10}
もし、検証型かサブタイプのどちらかがオプションに定義され...
Snitは様々な種類の検証型とサブタイプを定義していますし、
新しい検証型を定義するのも本当に簡単です。全ての検証型の...
--- -cgetmethod '''methodName''' ~
ローカル定義された全てのオプションは-cgetmethodを定義する...
この指定されるメソッドが取る引数は一つでなければなりませ...
option -font -cgetmethod GetOption
method GetOption {option} {
return $options($option)
}
いくつのオプションが-cgetmethodを共有してもよいことに注意...
--- -configuremethod '''methodName'''~
ローカル定義された全てのオプションは-configuremethodを定...
指定されたメソッドは、オプション名とその新しい値の引数を...
option -font -configuremethod SetOption
method SetOption {option value} {
set options($option) $value
}
複数のオプションが一つの-configuremethodを共有できること...
--- -validatemethod '''methodName'''~
ローカル定義された全てのオプションは-validatemethodを定義...
指定されたメソッドは、オプション名とその新しい値の引数を...
option -flag -validatemethod CheckBoolean
method CheckBoolean {option value} {
if {![string is boolean -strict $value]} {
error "option $option must have a boolean value."
}
}
複数のオプションが一つの-validatemethodを共有できることに...
--''constructor'' '''arglist body'''~
コンストラクタ定義は、新しいインスタンスが生成されたとき...
メソッドと同様に、''type''、''self''、''selfns''、''win''...
もしコンストラクタが明示的に定義されなかったら、Snitはそ...
constructor {args} {
$self configurelist $args
}
標準的なTkウィジェットのような振る舞いのためには、このよ...
もし、コンストラクタとオプションのどちらも定義されていな...
constructor {} {}
メソッドと同様に、コンストラクタは、型が定義された名前空...
--''destructor'' '''body'''~
デストラクタは型のインスタンスが破棄されるときに実行しな...
デストラクタは明示的に引数を取りません。
メソッドと同様に、''type''、''self''、''selfns''、''win''...
メソッドと同様に、デストラクタは、型が定義された名前空間...
--''proc'' '''name args body'''~
型の名前空間に新しくTclプロシージャを定義します。~
定義されたプロシージャは、普通のTclプロシージャと全ての型...
暗黙的に定義されていないとしても、type、self、winという引...
メソッドと型メソッドと同様に、プロシージャは、型が定義さ...
--''delegate'' method '''name''' to '''comp''' ? as '''ta...
'''name'''という名前のメソッドを'''comp'''という名前のコ...
delegate method wag to tail
大雑把に言えば、この明示的に定義されたメソッドと同じです。
method wag {args} {
uplevel $tail wag $args
}
メソッドと同様に、'''name'''は複数のトークンを持つことが...
オプションのas節は、委譲されたメソッドの名前を設定し、場...
delegate method wagtail to tail as "wag briskly"
メソッドはローカル定義と委譲の両立はできません。~
重要:全ての''delegate method''の形式では、インスタンスコ...
--''delegate'' method '''name''' ? to '''comp''' ? using ...
この形式での''delegate''文は、using節を使い、
適切なコマンドの形式が、どのメソッド'''name'''が委譲され...
using節の値は、次の置換えコードのいくつか、または全てを含...
delegate method wag to tail
delegate method wag to tail using "%c %m"
リストの各要素は委譲コマンドの要素になります。
各要素は絶対に文字列として再解析されません。
--- %%~
"%"に置き換えます。文字列"%c"を引数としてコマンドに渡した...
--- %c~
指定されたコンポーネントのコマンドに置き換えます。
--- %m~
メソッド'''name'''の最後のトークンに置き換えます。
もし'''name'''が一つのトークンだけの場合、%Mと同じになり...
--- %M~
メソッド'''name'''に置き換えます。もし'''name'''が複数の...
--- %j~
メソッド'''name'''に置き換えます。もし'''name'''が複数の...
--- %t~
型の完全修飾名に置き換えます。
--- %n~
インスタンスのプライベート名前空間に置換えます。
--- %s~
インスタンスコマンドに置き換えます。
--- %w~
インスタンスコマンドのオリジナル名に置き換えます。Snitウ...
--''delegate'' method * ? to '''comp''' ? ? using '''patt...
''delegate method *''形式では、全ての未知のメソッド名を指...
実際のところ、"*"は二つ以上のトークンのリスト(ただし最後...
delegate method {tail *} to tail
これは暗黙的に、メソッド''tail''を定義し、そのサブコマン...
--''delegate'' option '''namespec''' to '''comp'''
--''delegate'' option '''namespec''' to '''comp''' as '''...
--''delegate'' option * to '''comp'''
--''delegate'' option * to '''comp''' except '''exception...
委譲されたオプションを定義します。'''namespec'''は''optio...
オプションの値を変更したり読み取ったりするために''configu...
method ConfigureMethod {option value} {
$comp configure $option $value
}
method CgetMethod {option} {
return [$comp cget $option]
}
委譲されたオプションは''options''配列には存在しないことに...
もしas節が設定されていると、'''target'''オプション名が'''...
''delegate option*''形式では、全ての未知のオプションを指...
注意:オプションはインスタンスメソッドの ''configure''と'...
オプションはローカル定義と委譲の両立はできません。TBD: Co...
--''component'' '''comp''' ? -public '''method''' ? ? -in...
コンポーネント'''comp'''を明示的に宣言し、自動的に
コンポーネントのインスタンス変数を定義します。~
もし-publicオプションが指定されると、サブコマンドがコンポ...
そのオプションはパブリックになります。例えば-public mycom...
component mycomp
delegate method {mymethod *} to mycomp
もし-inheritオプションが指定されると、'''flag'''は真偽値...
component mycomp
delegate option * to mycomp
delegate method * to mycomp
--''delegate'' typemethod '''name''' to '''comp''' ? as '...
'''name'''の型メソッドを型コンポーネント'''comp'''に委譲...
delegate typemethod lostdogs to pound
大雑把に言えば、明示的に定義された次のようなメソッドと大...
typemethod lostdogs {args} {
uplevel $pound lostdogs $args
}
メソッドと同様に、'''name'''は複数のトークンを持つことが...
オプションのas節は、委譲されたメソッドの名前を設定し、場...
delegate typemethod lostdogs to pound as "get lostdogs"
型メソッドはローカル定義と委譲の両立はできません。
--''delegate'' typemethod '''name''' ? to '''comp''' ? us...
この形式での''delegate''文は、using節を使い、
適切なコマンドの形式が、どの型メソッド'''name'''が委譲さ...
using節の値は、次の置換えコードのいくつか、または全てを含...
delegate typemethod lostdogs to pound
delegate typemethod lostdogs to pound using "%c %m"
リストの各要素は委譲コマンドの要素になります。
各要素は絶対に文字列として再解析されません。
--- %%~
"%"に置き換えます。文字列"%c"を引数としてコマンドに渡した...
--- %c~
指定された型コンポーネントのコマンドに置き換えます。
--- %m~
型メソッド'''name'''の最後のトークンに置き換えます。
もし'''name'''が一つのトークンだけの場合、%Mと同じになり...
--- %M~
型メソッド'''name'''に置き換えます。もし'''name'''が複数...
--- %j~
型メソッド'''name'''に置き換えます。もし'''name'''が複数...
--- %t~
型の完全修飾名に置き換えます。
--''delegate'' typemethod * ? to '''comp''' ? ? using '''...
''delegate typemethod *''形式では、全ての未知の型メソッド...
注意:デフォルトでは、Snitは(fooが型メソッドとして定義さ...
"*"は二つ以上のトークンのリスト(ただし最後の要素は"*")...
delegate typemethod {tail *} to tail
これは暗黙的に、型メソッド''tail''を定義し、そのサブコマ...
--''typecomponent'' '''comp''' ? -public '''typemethod'''...
型コンポーネント'''comp'''を明示的に宣言し、自動的にコン...
もし-publicオプションが指定されると、型コンポーネントは
サブコマンドがコンポーネントに委譲される
'''typemethod'''を定義することでパブリックになります。
例えば、-public mytypemethod が設定されると、それは
次のコードと同じになります。
typecomponent mycomp
delegate typemethod {mytypemethod *} to mycomp
もし-inheritオプションが指定されると、'''flag'''は真偽値...
typecomponent mycomp
delegate typemethod * to mycomp
--''pragma'' ? '''options...''' ?~
''pragma''文はSnitが型を生成する方法をコントロールします...
-hastypeinfoと-hastypedestroyと-hasinstancesをFALSEに設定...
--- -canreplace '''flag'''~
FALSE(デフォルト)なら、Snitは既存のコマンドと同じ名前を...
--- -hastypeinfo '''flag'''~
TRUE(デフォルト)なら、生成された型は、型の内省に使われ...
--- -hastypedestroy '''flag'''~
TRUE(デフォルト)なら、生成された型は、その型と、その型...
--- -hastypemethods '''flag'''~
TRUE(デフォルト)なら、生成された型の型コマンドはサブコ...
このプラグマと-hasinstancesを両方同時にFALSEにすることは...
--- -hasinstances '''flag'''~
TRUE(デフォルト)なら、生成された型は、インスタンスに関...
このプラグマと-hastypemethodsを両方同時にFALSEにすること...
--- -hasinfo '''flag'''~
TRUE(デフォルト)なら、生成された型のインスタンスは、イ...
--- -simpledispatch '''flag'''~
このプラグマは 頻繁に利用される抽象データ型(たとえばスタ...
> ・メソッドは委譲できません。
> ・''uplevel''と''upvar''は期待したようには動きません。...
> ・オプションを操作するメソッド(''cget''、''configure''...
--''expose'' '''comp'''
--''expose'' '''comp''' as '''method'''~
廃止予定。コンポーネント'''comp'''をパブリックにするには'...
--''onconfigure'' '''name arglist body'''~
廃止予定。''option''の-configuremethod を代わりに使用して...
バージョン0.95時点での次のような定義は
option -myoption
onconfigure -myoption {value} {
# Code to save the option's value
}
次のように実装されます。
option -myoption -configuremethod _configure-myoption
method _configure-myoption {_option value} {
# Code to save the option's value
}
--''oncget'' '''name body'''~
廃止予定。''option''の-cgetmethod を代わりに使用してくだ...
バージョン0.95時点での次のような定義は
option -myoption
oncget -myoption {
# Code to return the option's value
}
次のように実装されます。
option -myoption -cgetmethod _cget-myoption
method _cget-myoption {_option} {
# Code to return the option's value
}
-''snit::widget'' '''name definition'''~
このコマンドは指定された'''name'''でSnitメガウィジェット...
--全ての''snit::widget''のインスタンスは自動的に生成され...
hullコンポーネントは、最初は要求されたウィジェット名で作...
--インスタンスの名前は正当なTkのウィンドウ名であり、かつ...
''snit::widget''定義では''snit::type''定義で使用可能なス...
--''widgetclass'' '''name'''~
''snit::widget''のウィジェットクラスをデフォルトの値を上...
--''hulltype'' '''type'''~
''snit::widget''のhullとして使われるウィジェットの種類を...
-''snit::widgetadaptor'' '''name definition'''~
このコマンドは指定された'''name'''でSnitメガウィジェット...
一般的に snit::widgetadaptor のhullウィジェットの '''widg...
どうやって''snit::widgetadaptor''がオプションデータベース...
-''snit::typemethod'' '''type name arglist body'''~
既存の'''type'''のための新しい型メソッドを定義する(また...
-''snit::method'' '''type name arglist body'''~
既存の'''type'''のための新しいインスタンスメソッドを定義...
委譲されたインスタンスメソッドは再定義できない点に注意し...
-''snit::macro'' '''name arglist body'''~
指定された'''name arglist body'''でSnitマクロを定義します...
マクロとは単純に、型とウィジェット定義をコンパイルするた...
マクロ'''name'''は 他の標準のTclコマンドや他のSnitの型と...
-''snit::compile'' '''which type body'''~
Snitは定義文をTclスクリプトに「コンパイル」することで型、...
このコマンドは「コンパイラ」をさらけ出します。指定された'...
''snit::compile''は、Snitが生成したコードに追加処理が終わ...
このようにして、アプリケーションの起動時のコンパイルのオ...
**型コマンド [#s8d6245e]
型またはウィジェット定義は型コマンドを作成します。これは...
-''$type'' '''typemethod args...'''~
'''typemethod'''は [[標準的な型メソッド>#standardtypemeth...
型コマンドはほとんどの場合、新しい型のインスタンスを作成...
さらに、もし -hastypemethods プラグマがFALSEの場合、Snit...
snit::type dog { ... }
set mydog [dog create %AUTO%]
set mydog [dog %AUTO%]
set mydog [dog]
これは明白な理由からSnitウィジェットでは動きません。~
'''Snit 1.x 非互換''':Snit 1.xでは上記の動作は-hastypeme...
**標準的な型メソッド &aname(standardtypemethods); [#ue850...
型定義での型メソッドに加えて、全ての型とウィジェットコマ...
-''$type create'' '''name'''? '''option value ...'''?~
指定された'''name'''をつけた型のインスタンスを新しく作成...
''snit::widget''と''snit::widgetadaptor''の場合、'''name'...
'''name'''が他の型メソッドの名前と衝突しない限りは、''cre...
もし'''name'''が%AUTO%という文字列を含んでいると、それは$...
デフォルトでは、'''name'''に続く引数はオプションの名前と...
Snit V0.95以後は、もし'''name'''が既存のコマンド名と同じ...
-''$type info typevars'' ? '''pattern'''?~
型の型変数(Snitの内部変数を除く)のリストを返します。全...
もし'''pattern'''が与えられると''string match''パターンが...
-''$type info typemethods'' ? '''pattern'''?~
型の型メソッドのリストを返します。もし型が階層的な型メソ...
もし型定義が''delegate typemethod *''を含んでいる場合、そ...
もし'''pattern'''が与えられると''string match''パターンが...
-''$type info args'' '''method'''~
型の'''method'''の引数の名前のリストを返します。
このメソッドは委譲された型メソッドには適用できません。
-''$type info body'' '''method'''~
型メソッド'''method'''のボディを返します。このメソッドは...
-''$type info default'' '''method aname varname'''~
'''method'''の引数の'''aname'''がデフォルト値を持っている...
-''$type info instances'' ? '''pattern'''?~
型のインスタンスのリストを返します。''snit::type''では、...
もし'''pattern'''が与えられると''string match''パターンが...
'''Snit 1.x 非互換''':Snit 1.xでは階層的な型メソッドの複...
-''$type destroy ''~
型のインスタンス、型の名前空間、型コマンド自身を破棄しま...
**インスタンスコマンド [#ye12b65f]
Snitのtype、widgetの型メソッド''create''は、型のオブジェ...
各オブジェクトは固有の名前を持っていて、その名前はまた、T...
-''$object'' '''method args...'''~
'''method'''は [[標準的なインスタンスメソッド>#stdinstmet...
**標準的なインスタンスメソッド &aname(stdinstmethods); [#...
型定義で委譲されたインスタンスメソッド、ローカル定義され...
-''$object configure'' ? '''option''' ? ? '''value''' ? ....
新しい値を一つ以上のオプションに割り当てます。もし引数が...
警告:委譲されたオプションの場合、委譲されたコンポーネン...
注意:Snitは、型が最低でも一つオプションを持っている場合...
-''$object configurelist'' '''optionlist'''~
''configure''と同じですが、引数はオプションとその値のリス...
注意:Snitは、型が最低でも一つオプションを持っている場合...
-''$object cget'' '''option'''~
オプションの値を返します。~
注意:Snitは、型が最低でも一つオプションを持っている場合...
-''$object destroy''~
''destructor''を呼び出し、全ての関連するメモリを解放して...
注意:destroyメソッドは''snit::widget''と''snit::widgetad...
-''$object info type''~
インスタンスの型を返します。
-''$object info vars'' ? '''pattern''' ?~
オブジェクトのインスタンス変数(Snitの内部変数は除く)の...
もし'''pattern'''が与えられると''string match''パターンが...
-''$object info typevars'' ? '''pattern''' ?~
オブジェクトの型の型変数(Snitの内部変数は除く)のリスト...
もし'''pattern'''が与えられると''string match''パターンが...
-''$object info typemethods'' ? '''pattern''' ?~
型の型メソッドのリストを返します。もし型が階層的な型メソ...
もし型定義が''delegate typemethod *''を含んでいる場合、そ...
もし'''pattern'''が与えられると''string match''パターンが...
'''Snit 1.x 非互換''':Snit 1.xでは、階層化された型メソッ...
-''$object info options'' ? '''pattern''' ?~
オブジェクトのオプションの名前のリストを返します。これは...
ローカルのオプションと明示的に委譲されたオプションを含ん...
もし'''pattern'''が与えられると''string match''パターンが...
注意:返り値は、同じ型でもインスタンスごとに違うことがあ...
-''$object info methods'' ? '''pattern''' ?~
インスタンスのメソッドの名前のリストを返します。もし型が...
もし型定義が''delegate typemethod *''を含んでいる場合、そ...
もし'''pattern'''が与えられると''string match''パターンが...
'''Snit 1.x 非互換''':Snit 1.xでは、階層化された型メソッ...
-''$object info args'' '''method'''~
インスタンスの'''method'''の引数の名前のリストを返します。
このメソッドは委譲された型メソッドには適用できません。
-''$object info body'' '''method'''~
インスタンスのメソッド'''method'''のボディを返します。こ...
-''$object info default'' '''method aname varname'''~
'''method'''の引数の'''aname'''がデフォルト値を持っている...
**オブジェクトコード中で使用するコマンド [#j93e0515]
Snitは オブジェクトコード中で使用できる 次のコマンドを定...
-''mymethod'' '''name''' ? '''args...''' ?~
''mymethod''コマンドは他のオブジェクトに渡されるコールバ...
$button configure -command [list $self dosomething myarg...
$button configure -command [mymethod dosomething myargum...
この二つの大きな違いは、後者はオブジェクトのコマンド名が...
-''mytypemethod'' '''name''' ? '''args...''' ?~
''mytypemethod''コマンドは他のオブジェクトに渡されるコー...
$button configure -command [list $type dosomething myarg...
$button configure -command [mytypemethod dosomething mya...
型コマンドの名前はリネームできません。従って実際にはこれ...
-''myproc'' '''name''' ? '''args...''' ?~
''myproc''コマンドは他のオブジェクトに渡されるコールバッ...
$button configure -command [list ${type}::dosomething my...
$button configure -command [myproc dosomething myargument]
-''myvar'' '''name'''~
インスタンス変数の名前を与えると、その完全修飾名を返しま...
-''mytypevar'' '''name'''~
型変数の名前を与えると、その完全修飾名を返します。変数を...
-''from'' '''argvName option''' ? '''defvalue''' ?~
''from''コマンドは オプションの値をオプションと値のリスト...
''from''コマンドは'''option'''をオプションリストから探し...
-''install'' '''compName''' '''using objType objName args...
'''objType'''型のオブジェクトを、'''objName'''という名前...
追加の'''args...'''は'''objType'''コマンドにそのまま渡さ...
install myComp using myObjType $self.myComp args...
set myComp [myObjType $self.myComp args...]
どちらのメソッドも使われていることに注意してください。'''...
もし、これが''snit::widget''か''snit::widgetadaptor''で、...
''install''は型コンポーネントのインストールには使うことが...
-''installhull'' using '''widgetType args'''...
-''installhull'' '''name'''~
''snit::widgetadaptor''のコンストラクタはオブジェクトのhu...
最初の形式では、hullウィジェットを作成するのに、'''widget...
二番目の形式では、hullウィジェットは既に作成されています...
長い方の形式が好ましいです。しかし、短いほうの形式はプロ...
snit::widgetadaptorとオプションデータベースに関する詳細は...
-''variable'' '''name'''~
普通は、インスタンス変数は型定義においてオプションやメソ...
ほとんどの場合、型定義で全てのインスタンス変数を定義し、...
これは 標準のTcl::variableコマンドの、インスタンス用の特...
-''typevariable'' '''name'''~
普通は、型変数は型定義においてインスタンス変数と一緒に定...
ほとんどの場合、型定義で全ての型変数を定義し、メソッドや...
-''varname'' '''name'''~
廃止予定。''myvar''を代わりに使用してください。~
インスタンス変数の名前を与えると、その完全修飾名を返しま...
-''typevarname'' '''name'''~
廃止予定。''mytypevar''を代わりに使用してください。~
型変数の名前を与えると、その完全修飾名を返します。変数を...
-''codename'' '''name'''~
廃止予定。''myproc''を代わりに使用してください。~
proc名(型、インスタンスのメソッドではない)を与えられる...
**コンポーネントと委譲 &aname(companddelegate); [#m80b1f90]
オブジェクトが他のオブジェクトを含んでいる時、例えば、ツ...
snit::type dog {
component mytail
constructor {args} {
set mytail [tail %AUTO% -partof $self]
$self configurelist $args
}
method wag {} {
$mytail wag
}
}
snit::type tail {
option -length 5
option -partof
method wag {} { return "Wag, wag, wag."}
}
''tail''オブジェクトの名前はインスタンス変数に保存される...
~
''install''コマンドは、コンポーネントの作成とインストール...
snit::type dog {
component mytail
constructor {args} {
install mytail using tail %AUTO% -partof $self
$self configurelist $args
}
method wag {} {
$mytail wag
}
}
''snit::type''にとっては、上記の二つの方法は同じです。''s...
上記の例では''dog''オブジェクトの''wag''メソッドは、単純...
snit::type dog {
delegate method wag to mytail
constructor {args} {
install mytail using tail %AUTO% -partof $self
$self configurelist $args
}
}
型宣言中の''delegate''文は、暗黙的に、コンポーネントの名...
お望みならほかの未知のメソッドも全て、指定されたコンポー...
snit::type dog {
delegate method * to mytail
constructor {args} {
set mytail [tail %AUTO% -partof $self]
$self configurelist $args
}
method bark { return "Bark, bark, bark!" }
}
この場合、''dog''オブジェクトはそれ自身の''bark''メソッド...
オプションの委譲はメソッドの委譲に似ていますが、[[Tkオプ...
**型コンポーネントと委譲 &aname(typecompanddelegate); [#u...
型コンポーネントとインスタンスコンポーネントの関係は、型...
[[コンポーネントと委譲>#companddelegate]]で説明したとおり...
Snit 0.95 では、''delegate method''はメソッドをインスタン...
**Tkオプションデータベース &aname(tkoptiondatabase); [#i3...
このセクションでは、どのようにSnitがTkオプションデータベ...
Snitは、ウィジェットの開発者がSnitで適切に振舞えば、大抵...
-もし''snit::widget''のデフォルトのウィジェットクラスが望...
-オプションを定義するか、委譲したときに、デフォルトの値が...
-''snit::widgetadaptor''では''installhull using''を使って...
-他のコンポーネントをインストールするには''install''を使...
Tkウィジェットとオプションデータベースの相互作用は複雑で...
ウィジェットクラスの設定:全てのTkウィジェットはウィジェ...
同じように、''snit::widget''のデフォルトのウィジェットク...
snit::widget ::mylibrary::scrolledText { ... }
"ScrolledText"になります。ウィジェットクラスは''snit::wid...
ウィジェットが-classオプションをサポートしていれば、その...
''snit::widgetadaptor''のウィジェットクラスはだたのhullウ...
hullウィジェットが-classをサポートしている場合を除いては、
これを変更することはできないので、そのような場合は大体''s...
オプションのリソース名とクラス名の設定:Tkでは、全てのオ...
リソース名とクラス名は、Tkオプションデータベースに問い合...
-background background Background
-borderwidth borderWidth BorderWidth
-insertborderwidth insertBorderWidth BorderWidth
-padx padX Pad
ちょっと見ると、リソースとクラスの名前はオプションの名前...
Snitのオプションも、リソースとクラスの名前を持っています...
snit::widget mywidget {
option -background
delegate option -borderwidth to hull
delegate option * to text
# ...
}
この場合、ウィジェットのクラス名は"Mywidget"です。そして...
-background background Background
-borderwidth borderwidth Borderwidth
-padx padX Pad
ローカル定義されたオプションである''-background''が標準の...
その一方で、-borderwidthは標準とは異なるリソースとクラス...
snit::widget mywidget {
option -background
delegate option {-borderwidth borderWidth} to hull
delegate option * to text
# ...
}
クラス名は期待したとおりに"BorderWidth"になります。
また、''mywidget''が''-padx''と''-pady''をhullに委譲して...
snit::widget mywidget {
option -background
delegate option {-borderwidth borderWidth} to hull
delegate option {-padx padX Pad} to hull
delegate option {-pady padY Pad} to hull
delegate option * to text
# ...
}
オプションデータベースへの問い合わせ:widgetclassとオプシ...
オプションデータベースへの問い合わせは、適切に行うでしょ...
ローカル定義されたオプションの初期化:''snit::widget''の...
option add *Mywidget.texture pebbled
snit::widget mywidget {
option -texture smooth
# ...
}
mywidget .mywidget -texture greasy
ここ、''-texture''は普通に"smooth"に設定されます。しかし、
オプションデータベースにそのオプションが登録されているの...
hullに委譲されたオプションの初期化:''snit::widget''のhul...
option add *Mywidget.borderWidth 5
option add *Mywidget.relief sunken
option add *Mywidget.hullbackground red
option add *Mywidget.background green
snit::widget mywidget {
delegate option -borderwidth to hull
delegate option -hullbackground to hull as -background
delegate option * to hull
# ...
}
mywidget .mywidget
set A [.mywidget cget -relief]
set B [.mywidget cget -hullbackground]
set C [.mywidget cget -background]
set D [.mywidget cget -borderwidth]
それでは質問です。A, B, C, Dの変数の値は何でしょうか。
Aの値は"sunken"です。hullはウィジェットクラスが"Mywidget"...
Bの値は"red"です。hullは''-relief''で値を取り出したように...
Cの値も"red"です。''-background''は暗黙的にhullに委譲され...
(訳注:BとCの説明は逆のような気がする)
Dの値は"5"です。考えるまでも無いことだと思うかもしれませ...
上記のルールでは、''-borderwidth''のリソース名は"borderwi...
''snit::widgetadaptor''では、このようなケースは少し異なり...
snit::widgetadaptor mywidget {
# ...
constructor {args} {
# ...
installhull using text -foreground white
#
}
#...
}
この場合では、''installhull''コマンドは次のようなコマンド...
set hull [text $win -foreground white]
hullは''text''ウィジェットで、そのウィジェットクラスは"Te...
他のコンポーネントに委譲されたオプションの初期化:hullで...
オプションデータベースのサポートがSnitに追加される以前は...
snit::widget mywidget {
delegate option -background to myComp
constructor {args} {
set myComp [text $win.text -foreground black]
}
}
この方法の欠点は、Snitがコンポーネントを適切に初期化する...
snit::widget mywidget {
delegate option -background to myComp
constructor {args} {
install myComp using text $win.text -foreground ...
}
}
''install''コマンドは次のようなことをします。
-''install''コマンドで明示的に含まれたオプションのリスト...
-指定されたコンポーネントに明示的に委譲された全てのオプシ...
-オプションデータベースから取得したオプションとその値のリ...
-もしウィジェット定義で、''delegate option *''を使って、...
~
非ウィジェットコンポーネント:オプションデータベースは''s...
**マクロとメタプログラミング &aname(macroandmetaprog); [#...
''snit::macro''コマンドはSnitクラスでのメタプログラミング...
snit::type dog {
variable mood happy
method getmood {} {
return $mood
}
method setmood {newmood} {
set mood $newmood
}
}
プロパティごとに9行使っています。snit::macroを使って次の...
snit::macro property {name initValue} {
variable $name $initValue
method get$name {} "return $name"
method set$name {value} "set $name \$value"
}
snit::macroは、型とウィジェットの定義をコンパイルするスレ...
この新しいマクロによって、一行でプロパティを定義すること...
snit::type dog {
property mood happy
}
マクロの中では、''variable''と''proc''コマンドはTclの標準...
アプリケーション中の全てのSnitの型とウィジェットをコンパ...
Snitを使って再使用可能なパッケージを書いていて、''snit::m...
snit::macro mypkg::property {name initValue} { ... }
snit::type dog {
mypkg::property mood happy
}
これはアプリケーションの作者にとってグローバル名前空間を...
**検証型 &aname(validationtypes); [#e988df08]
検証型とは、特定のTclの値を検証するのに使うことができるオ...
全ての検証型は検証を行う''validate''メソッドを持っていま...
snit::integer validate 5 ;# Does nothing
snit::integer validate 5.0 ;# Throws an error (not an ...
Snitは検証型の様々な種類を定義しています。それらの全ては'...
snit::double probability -min 0.0 -max 1.0
このサンプルは''probability''という''snit::double''のイン...
probability validate 0.5 ;# Does nothing
probability validate 7.9 ;# Throws an error
検証サブタイプは上記の例のように明示的に定義することがで...
snit::enum ::dog::breed -values {mutt retriever sheepdog}
snit::type dog {
# Define subtypes on the fly...
option -breed -type {
snit::enum -values {mutt retriever sheepdog}
}
# Or use predefined subtypes...
option -breed -type ::dog::breed
}
先述した動作をする''validate''メソッドを持つオブジェクト...
Snitは次の検証型を定義しています。
-''snit::boolean'' '''validate''' ? '''value''' ?~
-''snit::boolean'' '''name'''~
Tclの真偽値(1, 0, on, off, yes, no, true, false)を検証...
-''snit::double'' '''validate''' ? '''value''' ?~
-''snit::double'' '''name''' ? '''option value...''' ?~
浮動少数値を検証します。次のオプションでサブタイプを作る...
-- -min '''min'''~
浮動少数の最小値を指定します。値が'''min'''より小さければ...
-- -max '''max'''~
浮動少数の最大値を指定します。値が'''max'''より大きければ...
-''snit::enum'' '''validate''' ? '''value''' ?~
-''snit::enum'' '''name''' ? '''option value...''' ?~
値が列挙リストに含まれているかどうか検証します。基本型は...
-- -values '''list'''~
適正な値のリストを設定します。もし値がそのリストに含まれ...
-''snit::fpixels'' '''validate''' ? '''value''' ?~
-''snit::fpixels'' '''name''' ? '''option value...''' ?~
'''Tkプログラム専用です。''' ''winfo fpixels''によって認...
-- -min '''min'''~
最小値を指定します。もし'''min'''より小さければ値は不正で...
-- -max '''max'''~
最大値を指定します。もし'''min'''より大きければ値は不正で...
-''snit::integer'' '''validate''' ? '''value''' ?~
-''snit::integer'' name ? '''option value...''' ?~
整数値を検証します。サブタイプは次のオプションで作成でき...
-- -min '''min'''~
整数の最小値を指定します。'''min'''より値が小さければ不正...
-- -max '''max'''~
整数の最大値を指定します。'''min'''より値が大きければ不正...
-''snit::listtype'' '''validate''' ? '''value''' ?~
-''snit::listtype'' name ? '''option value...''' ?~
Tclリストを検証します。サブタイプは次のオプションで作成で...
-- -minlen '''min'''~
最小のリスト長を指定します。リストの要素が'''min'''より少...
-- -maxlen '''max'''~
最大のリスト長を指定します。リストの要素が'''max'''より多...
-- -type '''type'''~
リスト要素の型を指定します。'''type'''は検証型か検証型の...
option -numbers -type {snit::listtype -type snit::integer}
このオプションは、オンザフライに新しい検証型のサブタイプ...
option -numbers -type {
snit::listtype -type {snit::integer -min 5}
}
そのかわりに、明示的にサブタイプを定義してください。
snit::integer gt4 -min 5
snit::type mytype {
option -numbers -type {snit::listtype -type gt4}
}
-''snit::pixels'' '''validate''' ? '''value''' ?~
-''snit::pixels'' name ? '''option value...''' ?~
'''Tkプログラム専用です。''' ''winfo pixels''によって認め...
-- -min '''min'''~
最小値を指定します。もし'''min'''より小さければ値は不正で...
-- -max '''max'''~
最大値を指定します。もし'''min'''より大きければ値は不正で...
-''snit::stringtype'' '''validate''' ? '''value''' ?~
-''snit::stringtype'' name ? '''option value...''' ?~
Tcl文字列を検証します。基本型はそれ自身ではほとんど役に立...
-- -minlen '''min'''~
文字列の最小の長さを指定します。もし'''min'''文字よりもす...
-- -maxlen '''max'''~
文字列の最大の長さを指定します。もし'''max'''文字よりも多...
-- -glob '''pattern'''~
''string match''のパターンを設定します。もしパターンにマ...
-- -regexp '''regexp'''~
正規表現を指定します。もし正規表現にマッチしなければ、値...
-- -nocase '''flag'''~
デフォルトでは-globと-regexpはどちらも大文字と小文字を区...
-''snit::window'' '''validate''' ? '''value''' ?~
-''snit::window'' '''name''' ~
'''Tkプログラム専用です。''' Tkウィンドウの名前を検証しま...
**検証型の定義 &aname(definevalidationtypes); [#kd508467]
新しい検証型を定義する方法は3つあります。一つ目はSnitの...
その次に簡単な方法は、検証型コマンドとして新しい検証型を...
proc ::snit::boolean {"validate" value} {
if {![string is boolean -strict $value]} {
return -code error "invalid boolean \"$value\",...
}
return
}
このようにして定義された検証型は当然ながらサブタイプ化で...
最後に、本格的なサブタイプ化できる検証型を''snit::type''...
snit::type myinteger {
# First, define any options you'd like to use to de...
# subtypes. Give them defaults such that they won'...
# effect if they aren't used, and marked them "read...
# After all, you shouldn't be changing their values...
# a subtype is defined.
#
# For example:
option -min -default "" -readonly 1
option -max -default "" -readonly 1
# Next, define a "validate" type method which shoul...
# validation in the basic case. This will allow the
# type command to be used as a validation type.
typemethod validate {value} {
if {![string is integer -strict $value]} {
return -code error "invalid value \"$value...
}
return
}
# Next, the constructor should validate the subtype...
# if any. Since they are all readonly, we don't ne...
# about validating the options on change.
constructor {args} {
# FIRST, get the options
$self configurelist $args
# NEXT, validate them.
# I'll leave this to your imagination.
}
# Next, define a "validate" instance method; its jo...
# validate values for subtypes.
method validate {value} {
# First, call the type method to do the basic v...
$type validate $value
# Now we know it's a valid integer.
if {("" != $options(-min) && $value < $options(...
("" != $options(-max) && $value > $options(...
# It's out of range; format a detailed mess...
# the error, and throw it.
set msg "...."
return -code error $msg
}
# Otherwise, if it's valid just return.
return
}
}
で、このようにしてサブタイプ化できる型を作成できます。
Snitの配布物の中にある"validate.tcl"というファイルは全て...
*注意書き [#e336b464]
もしバグを見つけたり、問題があったり、新しいアイデアなど...
http://sourceforge.net/projects/tcllib/ ~
関連するカテゴリーは'''snit'''です。
加えて、Snitのメーリングリストに入りたいと思うかもしれま...
http://www.wjduquette.com/snit
注意しなければならない分野は、他のメガウィジェットパッケ...
*既知のバグ [#c0db3176]
-Snit 1.xによるエラーのスタックとレースはとても読みにくく...
-SourceForgeのTcllibのトラッカーを見てください。snitカテ...
http://sourceforge.net/projects/tcllib/
*ヒストリー [#u4ecd5b6]
私の個人的なTclベースのノートブックアプリケーションである...
私はただ、自分のオブジェクトコマンドのガイドライン (http...
それが一つの理由でした。――退屈は強力なモチベーションです...
そして私は独り言を言いました。「これはだんだんうんざりし...
もし何かコメントや提案(またはバグ報告!)があったら気軽...
*クレジット [#y82c5a4b]
Snitはごく初期にはWilliam H. Duquetteによって設計と実装さ...
*バグ、アイデア、フィードバック [#ldc57271]
このドキュメントと説明しているパッケージには
間違いなくバグや他の問題があるでしょう。それらを次のURLの...
http://sourceforge.net/tracker/?group_id=12883 ~
またパッケージと、ドキュメントに関して改善案があれば送っ...
----
[[CategoryTclTk]]
End:
snit2.2/1.3のマニュアルを勝手に日本語に翻訳したものです。...
オリジナルの文書はhttp://tcllib.sourceforge.net/doc/snit....
----
#contents
----
*名前 [#m2e48e36]
''snit -''~
Snit's Not Incr Tcl
*コマンド概略 [#id9df4c6]
package require Tcl 8.5
package require snit ? 2.2.1 ?
snit::type name definition
typevariable name ? -array ? ? value ?
typemethod name arglist body
typeconstructor body
variable name ? -array ? ? value ?
method name arglist body
option namespec ? defaultValue ?
option namespec ? options... ?
constructor arglist body
destructor body
proc name args body
delegate method name to comp ? as target ?
delegate method name ? to comp ? using pattern
delegate method * ? to comp ? ? using pattern ? ? e...
delegate option namespec to comp
delegate option namespec to comp as target
delegate option * to comp
delegate option * to comp except exceptions
component comp ? -public method ? ? -inherit flag ?
delegate typemethod name to comp ? as target ?
delegate typemethod name ? to comp ? using pattern
delegate typemethod * ? to comp ? ? using pattern ? ...
typecomponent comp ? -public typemethod ? ? -inherit ...
pragma ? options... ?
expose comp
expose comp as method
onconfigure name arglist body
oncget name body
snit::widget name definition
widgetclass name
hulltype type
snit::widgetadaptor name definition
snit::typemethod type name arglist body
snit::method type name arglist body
snit::macro name arglist body
snit::compile which type body
$type typemethod args...
$type create name ? option value ... ?
$type info typevars ? pattern ?
$type info typemethods ? pattern ?
$type info args method
$type info body method
$type info default method aname varname
$type info instances ? pattern ?
$type destroy
$object method args...
$object configure ? option ? ? value ? ...
$object configurelist optionlist
$object cget option
$object destroy
$object info type
$object info vars ? pattern ?
$object info typevars ? pattern ?
$object info typemethods ? pattern ?
$object info options ? pattern ?
$object info methods ? pattern ?
$object info args method
$object info body method
$object info default method aname varname
mymethod name ? args... ?
mytypemethod name ? args... ?
myproc name ? args... ?
myvar name
mytypevar name
from argvName option ? defvalue ?
install compName using objType objName args...
installhull using widgetType args...
installhull name
variable name
typevariable name
varname name
typevarname name
codename name
snit::boolean validate ? value ?
snit::boolean name
snit::double validate ? value ?
snit::double name ? option value... ?
snit::enum validate ? value ?
snit::enum name ? option value... ?
snit::fpixels validate ? value ?
snit::fpixels name ? option value... ?
snit::integer validate ? value ?
snit::integer name ? option value... ?
snit::listtype validate ? value ?
snit::listtype name ? option value... ?
snit::pixels validate ? value ?
snit::pixels name ? option value... ?
snit::stringtype validate ? value ?
snit::stringtype name ? option value... ?
snit::window validate ? value ?
snit::window name
*説明 [#i54dcd2e]
SnitとはピュアTclのオブジェクト、メガウィジェットシステム...
一般的に、継承ベースのオブジェクトシステムでは、限定され...
Tclにとってオブジェクトとは、オブジェクトのように振舞う何...
従って、自前のオブジェクトであろうが、Tkウィジェットであ...
~
このマニュアルはリファレンス用です。もっとチュートリアル...
*Snitのバージョン [#wd1b6a44]
このマニュアルはSnit2.2とSnit1.3を対象にしています。この...
しかしながら、この二つにはいくつかのマイナーな違いがあり...
*リファレンス [#x425713d]
**型とウィジェットの定義 [#d8e27af4]
Snitは新しい型を定義するための次のコマンドを提供します。
-''snit::type'' '''name definition'''~
'''name'''という名前の新しい抽象データ型を定義します。
もし'''name'''が完全修飾コマンド名(名前空間を含んだ名前...
その型の名前は、従って、その新しい型のオブジェクトを作成...
''snit::type''の'''definition'''ブロックは次の定義を含む...
--''typevariable'' '''name''' ?-array ? ? '''value''' ?~
設定された名前'''name'''で型変数を定義。オプションで'''va...
型変数はこの型の全てのインスタンスで共有されます。もし -a...
--''typemethod'' '''name arglist body'''~
新しい型コマンドのサブコマンドである型メソッドを指定され...
''type''変数は、''body''中で型の完全修飾名を値を持つ変数...
もし'''name'''が二つ以上のトークンを含んでいる時は、Snit...
typemethod {a b} {arg} { puts "Got $arg" }
この文は暗黙的にbというサブコマンドを持っている、aという...
$type a b "Hello, world!"
aは色々なサブコマンドを持っているかもしれません。これは階...
型メソッドは、型が定義された名前空間からコマンドをインポ...
'''Snit 1.x 非互換''':Snit 1.xでは次の二つの型メソッドの...
$type a b "Hello, world!"
$type {a b} "Hello, world!"
Snit2.2では二つ目の呼び出しは不正です。
--''typeconstructor '' '''body'''~
型コンストラクタの'''body'''はその型が最初に定義された時...
''type''変数は、''body''中で型の完全修飾名を値を持つ変数...
型は型コンストラクタを一つだけ定義できます。~
型コンストラクタは、型が定義された名前空間からコマンドを...
--''variable'' '''name''' ? -array ? ? '''value''' ?~
インスタンス変数を定義します。この型の各インスタンスのプ...
--''method'' '''name arglist body'''~
インスタンスメソッドを定義。指定された名前、引数リスト、...
このように定義されたインスタンスメソッドは''ローカル定義'...
型とインスタンス変数は自動的に全てのインスタンスメソッド...
もし'''name'''が二つ以上のトークンを含んでいる時は、Snit...
method {a b} {} { ... }
この文は暗黙的にbというサブコマンドを持っている、aという...
$self a b "Hello, world!"
aは色々なサブコマンドを持っているかもしれません。これは階...
% snit::type dog {
method {tail wag} {} {return "Wag, wag"}
method {tail droop} {} {return "Droop, droop"}
}
::dog
% dog spot
::spot
% spot tail wag
Wag, wag
% spot tail droop
Droop, droop
%
私たちがしたことは、"wag"と"droop"サブコマンドを持ってい...
メソッドは、型が定義された名前空間からコマンドをインポー...
'''Snit 1.x 非互換''':Snit 1.xでは次の二つの型メソッドの...
$self a b "Hello, world!"
$self {a b} "Hello, world!"
Snit2.2では二つ目の呼び出しは不正です。
--''option'' '''namespec ? defaultValue ?'''
--''option'' '''namespec ? options... ?'''~
この型の各インスタンスのオプションを定義する。初期値が与...
このように定義されたオプションはローカル定義されたものと...
'''namespec'''はオプションの名前、リソース名、クラス名を...
option {-font font Font} {Courier 12}
オプション名はハイフン(-)で始まらなければなりません。そし...
option -font {Courier 12}
リソースとクラス名についての詳細は[[Tkオプションデータベ...
オプションは普通セットしたり取り出したりするのに、一般的...
set myfont $options(-font)
もし型がオプションハンドラ(例:-configuremethod)を定義し...
--- -default '''defvalue'''~
オプションのデフォルト値を定義します。省略された場合、オ...
--- -readonly '''flag'''~
'''flag'''はTclが認識できる真偽値です(true/false, yes/no,...
--- -type '''type'''~
全てのローカル定義されたオプションはそのデータ検証の型を...
例えば、あるオプションは、''snit::integer''を検証型として...
option -number -type snit::integer
また、サブタイプを設定して、その値を1から10の間の整数とし...
option -number -type {snit::integer -min 1 -max 10}
もし、検証型かサブタイプのどちらかがオプションに定義され...
Snitは様々な種類の検証型とサブタイプを定義していますし、
新しい検証型を定義するのも本当に簡単です。全ての検証型の...
--- -cgetmethod '''methodName''' ~
ローカル定義された全てのオプションは-cgetmethodを定義する...
この指定されるメソッドが取る引数は一つでなければなりませ...
option -font -cgetmethod GetOption
method GetOption {option} {
return $options($option)
}
いくつのオプションが-cgetmethodを共有してもよいことに注意...
--- -configuremethod '''methodName'''~
ローカル定義された全てのオプションは-configuremethodを定...
指定されたメソッドは、オプション名とその新しい値の引数を...
option -font -configuremethod SetOption
method SetOption {option value} {
set options($option) $value
}
複数のオプションが一つの-configuremethodを共有できること...
--- -validatemethod '''methodName'''~
ローカル定義された全てのオプションは-validatemethodを定義...
指定されたメソッドは、オプション名とその新しい値の引数を...
option -flag -validatemethod CheckBoolean
method CheckBoolean {option value} {
if {![string is boolean -strict $value]} {
error "option $option must have a boolean value."
}
}
複数のオプションが一つの-validatemethodを共有できることに...
--''constructor'' '''arglist body'''~
コンストラクタ定義は、新しいインスタンスが生成されたとき...
メソッドと同様に、''type''、''self''、''selfns''、''win''...
もしコンストラクタが明示的に定義されなかったら、Snitはそ...
constructor {args} {
$self configurelist $args
}
標準的なTkウィジェットのような振る舞いのためには、このよ...
もし、コンストラクタとオプションのどちらも定義されていな...
constructor {} {}
メソッドと同様に、コンストラクタは、型が定義された名前空...
--''destructor'' '''body'''~
デストラクタは型のインスタンスが破棄されるときに実行しな...
デストラクタは明示的に引数を取りません。
メソッドと同様に、''type''、''self''、''selfns''、''win''...
メソッドと同様に、デストラクタは、型が定義された名前空間...
--''proc'' '''name args body'''~
型の名前空間に新しくTclプロシージャを定義します。~
定義されたプロシージャは、普通のTclプロシージャと全ての型...
暗黙的に定義されていないとしても、type、self、winという引...
メソッドと型メソッドと同様に、プロシージャは、型が定義さ...
--''delegate'' method '''name''' to '''comp''' ? as '''ta...
'''name'''という名前のメソッドを'''comp'''という名前のコ...
delegate method wag to tail
大雑把に言えば、この明示的に定義されたメソッドと同じです。
method wag {args} {
uplevel $tail wag $args
}
メソッドと同様に、'''name'''は複数のトークンを持つことが...
オプションのas節は、委譲されたメソッドの名前を設定し、場...
delegate method wagtail to tail as "wag briskly"
メソッドはローカル定義と委譲の両立はできません。~
重要:全ての''delegate method''の形式では、インスタンスコ...
--''delegate'' method '''name''' ? to '''comp''' ? using ...
この形式での''delegate''文は、using節を使い、
適切なコマンドの形式が、どのメソッド'''name'''が委譲され...
using節の値は、次の置換えコードのいくつか、または全てを含...
delegate method wag to tail
delegate method wag to tail using "%c %m"
リストの各要素は委譲コマンドの要素になります。
各要素は絶対に文字列として再解析されません。
--- %%~
"%"に置き換えます。文字列"%c"を引数としてコマンドに渡した...
--- %c~
指定されたコンポーネントのコマンドに置き換えます。
--- %m~
メソッド'''name'''の最後のトークンに置き換えます。
もし'''name'''が一つのトークンだけの場合、%Mと同じになり...
--- %M~
メソッド'''name'''に置き換えます。もし'''name'''が複数の...
--- %j~
メソッド'''name'''に置き換えます。もし'''name'''が複数の...
--- %t~
型の完全修飾名に置き換えます。
--- %n~
インスタンスのプライベート名前空間に置換えます。
--- %s~
インスタンスコマンドに置き換えます。
--- %w~
インスタンスコマンドのオリジナル名に置き換えます。Snitウ...
--''delegate'' method * ? to '''comp''' ? ? using '''patt...
''delegate method *''形式では、全ての未知のメソッド名を指...
実際のところ、"*"は二つ以上のトークンのリスト(ただし最後...
delegate method {tail *} to tail
これは暗黙的に、メソッド''tail''を定義し、そのサブコマン...
--''delegate'' option '''namespec''' to '''comp'''
--''delegate'' option '''namespec''' to '''comp''' as '''...
--''delegate'' option * to '''comp'''
--''delegate'' option * to '''comp''' except '''exception...
委譲されたオプションを定義します。'''namespec'''は''optio...
オプションの値を変更したり読み取ったりするために''configu...
method ConfigureMethod {option value} {
$comp configure $option $value
}
method CgetMethod {option} {
return [$comp cget $option]
}
委譲されたオプションは''options''配列には存在しないことに...
もしas節が設定されていると、'''target'''オプション名が'''...
''delegate option*''形式では、全ての未知のオプションを指...
注意:オプションはインスタンスメソッドの ''configure''と'...
オプションはローカル定義と委譲の両立はできません。TBD: Co...
--''component'' '''comp''' ? -public '''method''' ? ? -in...
コンポーネント'''comp'''を明示的に宣言し、自動的に
コンポーネントのインスタンス変数を定義します。~
もし-publicオプションが指定されると、サブコマンドがコンポ...
そのオプションはパブリックになります。例えば-public mycom...
component mycomp
delegate method {mymethod *} to mycomp
もし-inheritオプションが指定されると、'''flag'''は真偽値...
component mycomp
delegate option * to mycomp
delegate method * to mycomp
--''delegate'' typemethod '''name''' to '''comp''' ? as '...
'''name'''の型メソッドを型コンポーネント'''comp'''に委譲...
delegate typemethod lostdogs to pound
大雑把に言えば、明示的に定義された次のようなメソッドと大...
typemethod lostdogs {args} {
uplevel $pound lostdogs $args
}
メソッドと同様に、'''name'''は複数のトークンを持つことが...
オプションのas節は、委譲されたメソッドの名前を設定し、場...
delegate typemethod lostdogs to pound as "get lostdogs"
型メソッドはローカル定義と委譲の両立はできません。
--''delegate'' typemethod '''name''' ? to '''comp''' ? us...
この形式での''delegate''文は、using節を使い、
適切なコマンドの形式が、どの型メソッド'''name'''が委譲さ...
using節の値は、次の置換えコードのいくつか、または全てを含...
delegate typemethod lostdogs to pound
delegate typemethod lostdogs to pound using "%c %m"
リストの各要素は委譲コマンドの要素になります。
各要素は絶対に文字列として再解析されません。
--- %%~
"%"に置き換えます。文字列"%c"を引数としてコマンドに渡した...
--- %c~
指定された型コンポーネントのコマンドに置き換えます。
--- %m~
型メソッド'''name'''の最後のトークンに置き換えます。
もし'''name'''が一つのトークンだけの場合、%Mと同じになり...
--- %M~
型メソッド'''name'''に置き換えます。もし'''name'''が複数...
--- %j~
型メソッド'''name'''に置き換えます。もし'''name'''が複数...
--- %t~
型の完全修飾名に置き換えます。
--''delegate'' typemethod * ? to '''comp''' ? ? using '''...
''delegate typemethod *''形式では、全ての未知の型メソッド...
注意:デフォルトでは、Snitは(fooが型メソッドとして定義さ...
"*"は二つ以上のトークンのリスト(ただし最後の要素は"*")...
delegate typemethod {tail *} to tail
これは暗黙的に、型メソッド''tail''を定義し、そのサブコマ...
--''typecomponent'' '''comp''' ? -public '''typemethod'''...
型コンポーネント'''comp'''を明示的に宣言し、自動的にコン...
もし-publicオプションが指定されると、型コンポーネントは
サブコマンドがコンポーネントに委譲される
'''typemethod'''を定義することでパブリックになります。
例えば、-public mytypemethod が設定されると、それは
次のコードと同じになります。
typecomponent mycomp
delegate typemethod {mytypemethod *} to mycomp
もし-inheritオプションが指定されると、'''flag'''は真偽値...
typecomponent mycomp
delegate typemethod * to mycomp
--''pragma'' ? '''options...''' ?~
''pragma''文はSnitが型を生成する方法をコントロールします...
-hastypeinfoと-hastypedestroyと-hasinstancesをFALSEに設定...
--- -canreplace '''flag'''~
FALSE(デフォルト)なら、Snitは既存のコマンドと同じ名前を...
--- -hastypeinfo '''flag'''~
TRUE(デフォルト)なら、生成された型は、型の内省に使われ...
--- -hastypedestroy '''flag'''~
TRUE(デフォルト)なら、生成された型は、その型と、その型...
--- -hastypemethods '''flag'''~
TRUE(デフォルト)なら、生成された型の型コマンドはサブコ...
このプラグマと-hasinstancesを両方同時にFALSEにすることは...
--- -hasinstances '''flag'''~
TRUE(デフォルト)なら、生成された型は、インスタンスに関...
このプラグマと-hastypemethodsを両方同時にFALSEにすること...
--- -hasinfo '''flag'''~
TRUE(デフォルト)なら、生成された型のインスタンスは、イ...
--- -simpledispatch '''flag'''~
このプラグマは 頻繁に利用される抽象データ型(たとえばスタ...
> ・メソッドは委譲できません。
> ・''uplevel''と''upvar''は期待したようには動きません。...
> ・オプションを操作するメソッド(''cget''、''configure''...
--''expose'' '''comp'''
--''expose'' '''comp''' as '''method'''~
廃止予定。コンポーネント'''comp'''をパブリックにするには'...
--''onconfigure'' '''name arglist body'''~
廃止予定。''option''の-configuremethod を代わりに使用して...
バージョン0.95時点での次のような定義は
option -myoption
onconfigure -myoption {value} {
# Code to save the option's value
}
次のように実装されます。
option -myoption -configuremethod _configure-myoption
method _configure-myoption {_option value} {
# Code to save the option's value
}
--''oncget'' '''name body'''~
廃止予定。''option''の-cgetmethod を代わりに使用してくだ...
バージョン0.95時点での次のような定義は
option -myoption
oncget -myoption {
# Code to return the option's value
}
次のように実装されます。
option -myoption -cgetmethod _cget-myoption
method _cget-myoption {_option} {
# Code to return the option's value
}
-''snit::widget'' '''name definition'''~
このコマンドは指定された'''name'''でSnitメガウィジェット...
--全ての''snit::widget''のインスタンスは自動的に生成され...
hullコンポーネントは、最初は要求されたウィジェット名で作...
--インスタンスの名前は正当なTkのウィンドウ名であり、かつ...
''snit::widget''定義では''snit::type''定義で使用可能なス...
--''widgetclass'' '''name'''~
''snit::widget''のウィジェットクラスをデフォルトの値を上...
--''hulltype'' '''type'''~
''snit::widget''のhullとして使われるウィジェットの種類を...
-''snit::widgetadaptor'' '''name definition'''~
このコマンドは指定された'''name'''でSnitメガウィジェット...
一般的に snit::widgetadaptor のhullウィジェットの '''widg...
どうやって''snit::widgetadaptor''がオプションデータベース...
-''snit::typemethod'' '''type name arglist body'''~
既存の'''type'''のための新しい型メソッドを定義する(また...
-''snit::method'' '''type name arglist body'''~
既存の'''type'''のための新しいインスタンスメソッドを定義...
委譲されたインスタンスメソッドは再定義できない点に注意し...
-''snit::macro'' '''name arglist body'''~
指定された'''name arglist body'''でSnitマクロを定義します...
マクロとは単純に、型とウィジェット定義をコンパイルするた...
マクロ'''name'''は 他の標準のTclコマンドや他のSnitの型と...
-''snit::compile'' '''which type body'''~
Snitは定義文をTclスクリプトに「コンパイル」することで型、...
このコマンドは「コンパイラ」をさらけ出します。指定された'...
''snit::compile''は、Snitが生成したコードに追加処理が終わ...
このようにして、アプリケーションの起動時のコンパイルのオ...
**型コマンド [#s8d6245e]
型またはウィジェット定義は型コマンドを作成します。これは...
-''$type'' '''typemethod args...'''~
'''typemethod'''は [[標準的な型メソッド>#standardtypemeth...
型コマンドはほとんどの場合、新しい型のインスタンスを作成...
さらに、もし -hastypemethods プラグマがFALSEの場合、Snit...
snit::type dog { ... }
set mydog [dog create %AUTO%]
set mydog [dog %AUTO%]
set mydog [dog]
これは明白な理由からSnitウィジェットでは動きません。~
'''Snit 1.x 非互換''':Snit 1.xでは上記の動作は-hastypeme...
**標準的な型メソッド &aname(standardtypemethods); [#ue850...
型定義での型メソッドに加えて、全ての型とウィジェットコマ...
-''$type create'' '''name'''? '''option value ...'''?~
指定された'''name'''をつけた型のインスタンスを新しく作成...
''snit::widget''と''snit::widgetadaptor''の場合、'''name'...
'''name'''が他の型メソッドの名前と衝突しない限りは、''cre...
もし'''name'''が%AUTO%という文字列を含んでいると、それは$...
デフォルトでは、'''name'''に続く引数はオプションの名前と...
Snit V0.95以後は、もし'''name'''が既存のコマンド名と同じ...
-''$type info typevars'' ? '''pattern'''?~
型の型変数(Snitの内部変数を除く)のリストを返します。全...
もし'''pattern'''が与えられると''string match''パターンが...
-''$type info typemethods'' ? '''pattern'''?~
型の型メソッドのリストを返します。もし型が階層的な型メソ...
もし型定義が''delegate typemethod *''を含んでいる場合、そ...
もし'''pattern'''が与えられると''string match''パターンが...
-''$type info args'' '''method'''~
型の'''method'''の引数の名前のリストを返します。
このメソッドは委譲された型メソッドには適用できません。
-''$type info body'' '''method'''~
型メソッド'''method'''のボディを返します。このメソッドは...
-''$type info default'' '''method aname varname'''~
'''method'''の引数の'''aname'''がデフォルト値を持っている...
-''$type info instances'' ? '''pattern'''?~
型のインスタンスのリストを返します。''snit::type''では、...
もし'''pattern'''が与えられると''string match''パターンが...
'''Snit 1.x 非互換''':Snit 1.xでは階層的な型メソッドの複...
-''$type destroy ''~
型のインスタンス、型の名前空間、型コマンド自身を破棄しま...
**インスタンスコマンド [#ye12b65f]
Snitのtype、widgetの型メソッド''create''は、型のオブジェ...
各オブジェクトは固有の名前を持っていて、その名前はまた、T...
-''$object'' '''method args...'''~
'''method'''は [[標準的なインスタンスメソッド>#stdinstmet...
**標準的なインスタンスメソッド &aname(stdinstmethods); [#...
型定義で委譲されたインスタンスメソッド、ローカル定義され...
-''$object configure'' ? '''option''' ? ? '''value''' ? ....
新しい値を一つ以上のオプションに割り当てます。もし引数が...
警告:委譲されたオプションの場合、委譲されたコンポーネン...
注意:Snitは、型が最低でも一つオプションを持っている場合...
-''$object configurelist'' '''optionlist'''~
''configure''と同じですが、引数はオプションとその値のリス...
注意:Snitは、型が最低でも一つオプションを持っている場合...
-''$object cget'' '''option'''~
オプションの値を返します。~
注意:Snitは、型が最低でも一つオプションを持っている場合...
-''$object destroy''~
''destructor''を呼び出し、全ての関連するメモリを解放して...
注意:destroyメソッドは''snit::widget''と''snit::widgetad...
-''$object info type''~
インスタンスの型を返します。
-''$object info vars'' ? '''pattern''' ?~
オブジェクトのインスタンス変数(Snitの内部変数は除く)の...
もし'''pattern'''が与えられると''string match''パターンが...
-''$object info typevars'' ? '''pattern''' ?~
オブジェクトの型の型変数(Snitの内部変数は除く)のリスト...
もし'''pattern'''が与えられると''string match''パターンが...
-''$object info typemethods'' ? '''pattern''' ?~
型の型メソッドのリストを返します。もし型が階層的な型メソ...
もし型定義が''delegate typemethod *''を含んでいる場合、そ...
もし'''pattern'''が与えられると''string match''パターンが...
'''Snit 1.x 非互換''':Snit 1.xでは、階層化された型メソッ...
-''$object info options'' ? '''pattern''' ?~
オブジェクトのオプションの名前のリストを返します。これは...
ローカルのオプションと明示的に委譲されたオプションを含ん...
もし'''pattern'''が与えられると''string match''パターンが...
注意:返り値は、同じ型でもインスタンスごとに違うことがあ...
-''$object info methods'' ? '''pattern''' ?~
インスタンスのメソッドの名前のリストを返します。もし型が...
もし型定義が''delegate typemethod *''を含んでいる場合、そ...
もし'''pattern'''が与えられると''string match''パターンが...
'''Snit 1.x 非互換''':Snit 1.xでは、階層化された型メソッ...
-''$object info args'' '''method'''~
インスタンスの'''method'''の引数の名前のリストを返します。
このメソッドは委譲された型メソッドには適用できません。
-''$object info body'' '''method'''~
インスタンスのメソッド'''method'''のボディを返します。こ...
-''$object info default'' '''method aname varname'''~
'''method'''の引数の'''aname'''がデフォルト値を持っている...
**オブジェクトコード中で使用するコマンド [#j93e0515]
Snitは オブジェクトコード中で使用できる 次のコマンドを定...
-''mymethod'' '''name''' ? '''args...''' ?~
''mymethod''コマンドは他のオブジェクトに渡されるコールバ...
$button configure -command [list $self dosomething myarg...
$button configure -command [mymethod dosomething myargum...
この二つの大きな違いは、後者はオブジェクトのコマンド名が...
-''mytypemethod'' '''name''' ? '''args...''' ?~
''mytypemethod''コマンドは他のオブジェクトに渡されるコー...
$button configure -command [list $type dosomething myarg...
$button configure -command [mytypemethod dosomething mya...
型コマンドの名前はリネームできません。従って実際にはこれ...
-''myproc'' '''name''' ? '''args...''' ?~
''myproc''コマンドは他のオブジェクトに渡されるコールバッ...
$button configure -command [list ${type}::dosomething my...
$button configure -command [myproc dosomething myargument]
-''myvar'' '''name'''~
インスタンス変数の名前を与えると、その完全修飾名を返しま...
-''mytypevar'' '''name'''~
型変数の名前を与えると、その完全修飾名を返します。変数を...
-''from'' '''argvName option''' ? '''defvalue''' ?~
''from''コマンドは オプションの値をオプションと値のリスト...
''from''コマンドは'''option'''をオプションリストから探し...
-''install'' '''compName''' '''using objType objName args...
'''objType'''型のオブジェクトを、'''objName'''という名前...
追加の'''args...'''は'''objType'''コマンドにそのまま渡さ...
install myComp using myObjType $self.myComp args...
set myComp [myObjType $self.myComp args...]
どちらのメソッドも使われていることに注意してください。'''...
もし、これが''snit::widget''か''snit::widgetadaptor''で、...
''install''は型コンポーネントのインストールには使うことが...
-''installhull'' using '''widgetType args'''...
-''installhull'' '''name'''~
''snit::widgetadaptor''のコンストラクタはオブジェクトのhu...
最初の形式では、hullウィジェットを作成するのに、'''widget...
二番目の形式では、hullウィジェットは既に作成されています...
長い方の形式が好ましいです。しかし、短いほうの形式はプロ...
snit::widgetadaptorとオプションデータベースに関する詳細は...
-''variable'' '''name'''~
普通は、インスタンス変数は型定義においてオプションやメソ...
ほとんどの場合、型定義で全てのインスタンス変数を定義し、...
これは 標準のTcl::variableコマンドの、インスタンス用の特...
-''typevariable'' '''name'''~
普通は、型変数は型定義においてインスタンス変数と一緒に定...
ほとんどの場合、型定義で全ての型変数を定義し、メソッドや...
-''varname'' '''name'''~
廃止予定。''myvar''を代わりに使用してください。~
インスタンス変数の名前を与えると、その完全修飾名を返しま...
-''typevarname'' '''name'''~
廃止予定。''mytypevar''を代わりに使用してください。~
型変数の名前を与えると、その完全修飾名を返します。変数を...
-''codename'' '''name'''~
廃止予定。''myproc''を代わりに使用してください。~
proc名(型、インスタンスのメソッドではない)を与えられる...
**コンポーネントと委譲 &aname(companddelegate); [#m80b1f90]
オブジェクトが他のオブジェクトを含んでいる時、例えば、ツ...
snit::type dog {
component mytail
constructor {args} {
set mytail [tail %AUTO% -partof $self]
$self configurelist $args
}
method wag {} {
$mytail wag
}
}
snit::type tail {
option -length 5
option -partof
method wag {} { return "Wag, wag, wag."}
}
''tail''オブジェクトの名前はインスタンス変数に保存される...
~
''install''コマンドは、コンポーネントの作成とインストール...
snit::type dog {
component mytail
constructor {args} {
install mytail using tail %AUTO% -partof $self
$self configurelist $args
}
method wag {} {
$mytail wag
}
}
''snit::type''にとっては、上記の二つの方法は同じです。''s...
上記の例では''dog''オブジェクトの''wag''メソッドは、単純...
snit::type dog {
delegate method wag to mytail
constructor {args} {
install mytail using tail %AUTO% -partof $self
$self configurelist $args
}
}
型宣言中の''delegate''文は、暗黙的に、コンポーネントの名...
お望みならほかの未知のメソッドも全て、指定されたコンポー...
snit::type dog {
delegate method * to mytail
constructor {args} {
set mytail [tail %AUTO% -partof $self]
$self configurelist $args
}
method bark { return "Bark, bark, bark!" }
}
この場合、''dog''オブジェクトはそれ自身の''bark''メソッド...
オプションの委譲はメソッドの委譲に似ていますが、[[Tkオプ...
**型コンポーネントと委譲 &aname(typecompanddelegate); [#u...
型コンポーネントとインスタンスコンポーネントの関係は、型...
[[コンポーネントと委譲>#companddelegate]]で説明したとおり...
Snit 0.95 では、''delegate method''はメソッドをインスタン...
**Tkオプションデータベース &aname(tkoptiondatabase); [#i3...
このセクションでは、どのようにSnitがTkオプションデータベ...
Snitは、ウィジェットの開発者がSnitで適切に振舞えば、大抵...
-もし''snit::widget''のデフォルトのウィジェットクラスが望...
-オプションを定義するか、委譲したときに、デフォルトの値が...
-''snit::widgetadaptor''では''installhull using''を使って...
-他のコンポーネントをインストールするには''install''を使...
Tkウィジェットとオプションデータベースの相互作用は複雑で...
ウィジェットクラスの設定:全てのTkウィジェットはウィジェ...
同じように、''snit::widget''のデフォルトのウィジェットク...
snit::widget ::mylibrary::scrolledText { ... }
"ScrolledText"になります。ウィジェットクラスは''snit::wid...
ウィジェットが-classオプションをサポートしていれば、その...
''snit::widgetadaptor''のウィジェットクラスはだたのhullウ...
hullウィジェットが-classをサポートしている場合を除いては、
これを変更することはできないので、そのような場合は大体''s...
オプションのリソース名とクラス名の設定:Tkでは、全てのオ...
リソース名とクラス名は、Tkオプションデータベースに問い合...
-background background Background
-borderwidth borderWidth BorderWidth
-insertborderwidth insertBorderWidth BorderWidth
-padx padX Pad
ちょっと見ると、リソースとクラスの名前はオプションの名前...
Snitのオプションも、リソースとクラスの名前を持っています...
snit::widget mywidget {
option -background
delegate option -borderwidth to hull
delegate option * to text
# ...
}
この場合、ウィジェットのクラス名は"Mywidget"です。そして...
-background background Background
-borderwidth borderwidth Borderwidth
-padx padX Pad
ローカル定義されたオプションである''-background''が標準の...
その一方で、-borderwidthは標準とは異なるリソースとクラス...
snit::widget mywidget {
option -background
delegate option {-borderwidth borderWidth} to hull
delegate option * to text
# ...
}
クラス名は期待したとおりに"BorderWidth"になります。
また、''mywidget''が''-padx''と''-pady''をhullに委譲して...
snit::widget mywidget {
option -background
delegate option {-borderwidth borderWidth} to hull
delegate option {-padx padX Pad} to hull
delegate option {-pady padY Pad} to hull
delegate option * to text
# ...
}
オプションデータベースへの問い合わせ:widgetclassとオプシ...
オプションデータベースへの問い合わせは、適切に行うでしょ...
ローカル定義されたオプションの初期化:''snit::widget''の...
option add *Mywidget.texture pebbled
snit::widget mywidget {
option -texture smooth
# ...
}
mywidget .mywidget -texture greasy
ここ、''-texture''は普通に"smooth"に設定されます。しかし、
オプションデータベースにそのオプションが登録されているの...
hullに委譲されたオプションの初期化:''snit::widget''のhul...
option add *Mywidget.borderWidth 5
option add *Mywidget.relief sunken
option add *Mywidget.hullbackground red
option add *Mywidget.background green
snit::widget mywidget {
delegate option -borderwidth to hull
delegate option -hullbackground to hull as -background
delegate option * to hull
# ...
}
mywidget .mywidget
set A [.mywidget cget -relief]
set B [.mywidget cget -hullbackground]
set C [.mywidget cget -background]
set D [.mywidget cget -borderwidth]
それでは質問です。A, B, C, Dの変数の値は何でしょうか。
Aの値は"sunken"です。hullはウィジェットクラスが"Mywidget"...
Bの値は"red"です。hullは''-relief''で値を取り出したように...
Cの値も"red"です。''-background''は暗黙的にhullに委譲され...
(訳注:BとCの説明は逆のような気がする)
Dの値は"5"です。考えるまでも無いことだと思うかもしれませ...
上記のルールでは、''-borderwidth''のリソース名は"borderwi...
''snit::widgetadaptor''では、このようなケースは少し異なり...
snit::widgetadaptor mywidget {
# ...
constructor {args} {
# ...
installhull using text -foreground white
#
}
#...
}
この場合では、''installhull''コマンドは次のようなコマンド...
set hull [text $win -foreground white]
hullは''text''ウィジェットで、そのウィジェットクラスは"Te...
他のコンポーネントに委譲されたオプションの初期化:hullで...
オプションデータベースのサポートがSnitに追加される以前は...
snit::widget mywidget {
delegate option -background to myComp
constructor {args} {
set myComp [text $win.text -foreground black]
}
}
この方法の欠点は、Snitがコンポーネントを適切に初期化する...
snit::widget mywidget {
delegate option -background to myComp
constructor {args} {
install myComp using text $win.text -foreground ...
}
}
''install''コマンドは次のようなことをします。
-''install''コマンドで明示的に含まれたオプションのリスト...
-指定されたコンポーネントに明示的に委譲された全てのオプシ...
-オプションデータベースから取得したオプションとその値のリ...
-もしウィジェット定義で、''delegate option *''を使って、...
~
非ウィジェットコンポーネント:オプションデータベースは''s...
**マクロとメタプログラミング &aname(macroandmetaprog); [#...
''snit::macro''コマンドはSnitクラスでのメタプログラミング...
snit::type dog {
variable mood happy
method getmood {} {
return $mood
}
method setmood {newmood} {
set mood $newmood
}
}
プロパティごとに9行使っています。snit::macroを使って次の...
snit::macro property {name initValue} {
variable $name $initValue
method get$name {} "return $name"
method set$name {value} "set $name \$value"
}
snit::macroは、型とウィジェットの定義をコンパイルするスレ...
この新しいマクロによって、一行でプロパティを定義すること...
snit::type dog {
property mood happy
}
マクロの中では、''variable''と''proc''コマンドはTclの標準...
アプリケーション中の全てのSnitの型とウィジェットをコンパ...
Snitを使って再使用可能なパッケージを書いていて、''snit::m...
snit::macro mypkg::property {name initValue} { ... }
snit::type dog {
mypkg::property mood happy
}
これはアプリケーションの作者にとってグローバル名前空間を...
**検証型 &aname(validationtypes); [#e988df08]
検証型とは、特定のTclの値を検証するのに使うことができるオ...
全ての検証型は検証を行う''validate''メソッドを持っていま...
snit::integer validate 5 ;# Does nothing
snit::integer validate 5.0 ;# Throws an error (not an ...
Snitは検証型の様々な種類を定義しています。それらの全ては'...
snit::double probability -min 0.0 -max 1.0
このサンプルは''probability''という''snit::double''のイン...
probability validate 0.5 ;# Does nothing
probability validate 7.9 ;# Throws an error
検証サブタイプは上記の例のように明示的に定義することがで...
snit::enum ::dog::breed -values {mutt retriever sheepdog}
snit::type dog {
# Define subtypes on the fly...
option -breed -type {
snit::enum -values {mutt retriever sheepdog}
}
# Or use predefined subtypes...
option -breed -type ::dog::breed
}
先述した動作をする''validate''メソッドを持つオブジェクト...
Snitは次の検証型を定義しています。
-''snit::boolean'' '''validate''' ? '''value''' ?~
-''snit::boolean'' '''name'''~
Tclの真偽値(1, 0, on, off, yes, no, true, false)を検証...
-''snit::double'' '''validate''' ? '''value''' ?~
-''snit::double'' '''name''' ? '''option value...''' ?~
浮動少数値を検証します。次のオプションでサブタイプを作る...
-- -min '''min'''~
浮動少数の最小値を指定します。値が'''min'''より小さければ...
-- -max '''max'''~
浮動少数の最大値を指定します。値が'''max'''より大きければ...
-''snit::enum'' '''validate''' ? '''value''' ?~
-''snit::enum'' '''name''' ? '''option value...''' ?~
値が列挙リストに含まれているかどうか検証します。基本型は...
-- -values '''list'''~
適正な値のリストを設定します。もし値がそのリストに含まれ...
-''snit::fpixels'' '''validate''' ? '''value''' ?~
-''snit::fpixels'' '''name''' ? '''option value...''' ?~
'''Tkプログラム専用です。''' ''winfo fpixels''によって認...
-- -min '''min'''~
最小値を指定します。もし'''min'''より小さければ値は不正で...
-- -max '''max'''~
最大値を指定します。もし'''min'''より大きければ値は不正で...
-''snit::integer'' '''validate''' ? '''value''' ?~
-''snit::integer'' name ? '''option value...''' ?~
整数値を検証します。サブタイプは次のオプションで作成でき...
-- -min '''min'''~
整数の最小値を指定します。'''min'''より値が小さければ不正...
-- -max '''max'''~
整数の最大値を指定します。'''min'''より値が大きければ不正...
-''snit::listtype'' '''validate''' ? '''value''' ?~
-''snit::listtype'' name ? '''option value...''' ?~
Tclリストを検証します。サブタイプは次のオプションで作成で...
-- -minlen '''min'''~
最小のリスト長を指定します。リストの要素が'''min'''より少...
-- -maxlen '''max'''~
最大のリスト長を指定します。リストの要素が'''max'''より多...
-- -type '''type'''~
リスト要素の型を指定します。'''type'''は検証型か検証型の...
option -numbers -type {snit::listtype -type snit::integer}
このオプションは、オンザフライに新しい検証型のサブタイプ...
option -numbers -type {
snit::listtype -type {snit::integer -min 5}
}
そのかわりに、明示的にサブタイプを定義してください。
snit::integer gt4 -min 5
snit::type mytype {
option -numbers -type {snit::listtype -type gt4}
}
-''snit::pixels'' '''validate''' ? '''value''' ?~
-''snit::pixels'' name ? '''option value...''' ?~
'''Tkプログラム専用です。''' ''winfo pixels''によって認め...
-- -min '''min'''~
最小値を指定します。もし'''min'''より小さければ値は不正で...
-- -max '''max'''~
最大値を指定します。もし'''min'''より大きければ値は不正で...
-''snit::stringtype'' '''validate''' ? '''value''' ?~
-''snit::stringtype'' name ? '''option value...''' ?~
Tcl文字列を検証します。基本型はそれ自身ではほとんど役に立...
-- -minlen '''min'''~
文字列の最小の長さを指定します。もし'''min'''文字よりもす...
-- -maxlen '''max'''~
文字列の最大の長さを指定します。もし'''max'''文字よりも多...
-- -glob '''pattern'''~
''string match''のパターンを設定します。もしパターンにマ...
-- -regexp '''regexp'''~
正規表現を指定します。もし正規表現にマッチしなければ、値...
-- -nocase '''flag'''~
デフォルトでは-globと-regexpはどちらも大文字と小文字を区...
-''snit::window'' '''validate''' ? '''value''' ?~
-''snit::window'' '''name''' ~
'''Tkプログラム専用です。''' Tkウィンドウの名前を検証しま...
**検証型の定義 &aname(definevalidationtypes); [#kd508467]
新しい検証型を定義する方法は3つあります。一つ目はSnitの...
その次に簡単な方法は、検証型コマンドとして新しい検証型を...
proc ::snit::boolean {"validate" value} {
if {![string is boolean -strict $value]} {
return -code error "invalid boolean \"$value\",...
}
return
}
このようにして定義された検証型は当然ながらサブタイプ化で...
最後に、本格的なサブタイプ化できる検証型を''snit::type''...
snit::type myinteger {
# First, define any options you'd like to use to de...
# subtypes. Give them defaults such that they won'...
# effect if they aren't used, and marked them "read...
# After all, you shouldn't be changing their values...
# a subtype is defined.
#
# For example:
option -min -default "" -readonly 1
option -max -default "" -readonly 1
# Next, define a "validate" type method which shoul...
# validation in the basic case. This will allow the
# type command to be used as a validation type.
typemethod validate {value} {
if {![string is integer -strict $value]} {
return -code error "invalid value \"$value...
}
return
}
# Next, the constructor should validate the subtype...
# if any. Since they are all readonly, we don't ne...
# about validating the options on change.
constructor {args} {
# FIRST, get the options
$self configurelist $args
# NEXT, validate them.
# I'll leave this to your imagination.
}
# Next, define a "validate" instance method; its jo...
# validate values for subtypes.
method validate {value} {
# First, call the type method to do the basic v...
$type validate $value
# Now we know it's a valid integer.
if {("" != $options(-min) && $value < $options(...
("" != $options(-max) && $value > $options(...
# It's out of range; format a detailed mess...
# the error, and throw it.
set msg "...."
return -code error $msg
}
# Otherwise, if it's valid just return.
return
}
}
で、このようにしてサブタイプ化できる型を作成できます。
Snitの配布物の中にある"validate.tcl"というファイルは全て...
*注意書き [#e336b464]
もしバグを見つけたり、問題があったり、新しいアイデアなど...
http://sourceforge.net/projects/tcllib/ ~
関連するカテゴリーは'''snit'''です。
加えて、Snitのメーリングリストに入りたいと思うかもしれま...
http://www.wjduquette.com/snit
注意しなければならない分野は、他のメガウィジェットパッケ...
*既知のバグ [#c0db3176]
-Snit 1.xによるエラーのスタックとレースはとても読みにくく...
-SourceForgeのTcllibのトラッカーを見てください。snitカテ...
http://sourceforge.net/projects/tcllib/
*ヒストリー [#u4ecd5b6]
私の個人的なTclベースのノートブックアプリケーションである...
私はただ、自分のオブジェクトコマンドのガイドライン (http...
それが一つの理由でした。――退屈は強力なモチベーションです...
そして私は独り言を言いました。「これはだんだんうんざりし...
もし何かコメントや提案(またはバグ報告!)があったら気軽...
*クレジット [#y82c5a4b]
Snitはごく初期にはWilliam H. Duquetteによって設計と実装さ...
*バグ、アイデア、フィードバック [#ldc57271]
このドキュメントと説明しているパッケージには
間違いなくバグや他の問題があるでしょう。それらを次のURLの...
http://sourceforge.net/tracker/?group_id=12883 ~
またパッケージと、ドキュメントに関して改善案があれば送っ...
----
[[CategoryTclTk]]
Page:
HTML convert time: 0.009 sec.