[#41630] [ANN] langhelp-0.9.0 — rubikitch@...
るびきちです。
7 messages
2005/12/01
[#41654] Hashを継承したクラスの利用方法について — saitani <cxj15527@...>
お世話になります。
9 messages
2005/12/04
[#41720] Tempfile#== — とみたまさひろ <tommy@...>
とみたです。
5 messages
2005/12/21
[#41728] ruby 1.8.4 released — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
9 messages
2005/12/24
[ruby-list:41667] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb
From:
Hidetoshi NAGAI <nagai@...>
Date:
2005-12-06 02:10:25 UTC
List:
ruby-list #41667
永井@知能.九工大です.
From: Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
Subject: [ruby-list:41666] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb
Date: Mon, 5 Dec 2005 23:51:10 +0900
Message-ID: <20051205.235102.74727515.nagai@ai.kyutech.ac.jp>
> あ,MacOS X 独自のものが使われているんですね.
> てっきり他の環境と同じで,通常の topleve ウィジェットを用いた
> ダイアログになっていると思っていました.
> そうなると,ちょっと違う部分を調べないといけないですね.
>
> # Tk のソースの macosx ディレクトリ内に定義があるのかなぁ...
MacOS X 用のソースの中で定義されていました.
結論から申し上げますと,
「ごめんなさい.1.8.4 には間に合いません」
です.
MacOS X 用のダイアログボックスでは,Aqua 環境に合わせるために
MacOS X 独自の API を用いて実装されています.
pthread も用いていますので,今回の問題は pthread が絡んだ
問題であるのかもしれません.
何とかしたいという気持ちは十分にあるのですが,
私は MacOS X に全く触ったことがなく,
Aqua の API がどのようになっているのかも全く知りません.
MacOS X の実機も手元にないですし,
仮に今 MacOS X の実機が手元届いたとしても,
Aqua の API を理解して問題を解消するには時間が全く足りません.
したがって,Ruby 1.8.4 のリリース版では
残念ながらこのままということになります.
以下は余談となるのですが,
もし Aqua 版 Tcl/Tk がインストールするファイルにおいて
tk のライブラリ以下のファイルが同じものであるならば,
Tk インタープリタを起動した後に tk_messageBox 等のコマンドを
強制的に置き換えてしまうことで回避できるかもしれません
(もちろんプラットフォーム独自のダイアログは使えなくなりますが).
<tk-lib-dir>/tk.tcl の中に
========================================================
#----------------------------------------------------------------------
# Define common dialogs on platforms where they are not implemented
# using compiled code.
#----------------------------------------------------------------------
if {[string equal [info commands tk_chooseColor] ""]} {
proc ::tk_chooseColor {args} {
return [eval tk::dialog::color:: $args]
}
}
if {[string equal [info commands tk_getOpenFile] ""]} {
proc ::tk_getOpenFile {args} {
if {$::tk_strictMotif} {
return [eval tk::MotifFDialog open $args]
} else {
return [eval ::tk::dialog::file:: open $args]
}
}
}
if {[string equal [info commands tk_getSaveFile] ""]} {
proc ::tk_getSaveFile {args} {
if {$::tk_strictMotif} {
return [eval tk::MotifFDialog save $args]
} else {
return [eval ::tk::dialog::file:: save $args]
}
}
}
if {[string equal [info commands tk_messageBox] ""]} {
proc ::tk_messageBox {args} {
return [eval tk::MessageBox $args]
}
}
if {[string equal [info command tk_chooseDirectory] ""]} {
proc ::tk_chooseDirectory {args} {
return [eval ::tk::dialog::file::chooseDir:: $args]
}
}
========================================================
などというような記述があるなら,これに基づいて
========================================================
Tk.ip_eval(<<'EOS')
proc ::tk_chooseColor {args} {
return [eval tk::dialog::color:: $args]
}
proc ::tk_getOpenFile {args} {
if {$::tk_strictMotif} {
return [eval tk::MotifFDialog open $args]
} else {
return [eval ::tk::dialog::file:: open $args]
}
}
proc ::tk_getSaveFile {args} {
if {$::tk_strictMotif} {
return [eval tk::MotifFDialog save $args]
} else {
return [eval ::tk::dialog::file:: save $args]
}
}
proc ::tk_messageBox {args} {
return [eval tk::MessageBox $args]
}
proc ::tk_chooseDirectory {args} {
return [eval ::tk::dialog::file::chooseDir:: $args]
}
EOS
========================================================
という処理を Ruby/Tk 上で実行することにより,
プラットフォーム独自のものではないダイアログが
使われるようになるはずです.
--
永井 秀利 (九工大 知能情報)
nagai@ai.kyutech.ac.jp