2007-12-31

ttk::treeview


回、Tcl/Tk 8.5.0 で追加されたテーマ・ウィジェットを紹介しましたが、このテーマ・ウィジェット Ttk では、Tk にないウィジェットも利用できます。
ttk::treeview はそのうちのひとつです。 今回は、Tk のデモプログラムをベースに、単体で動作するように修正したサンプルを紹介します。このサンプルは、ルートディレクトリ以下のファイルの階層構造をツリー状に表示します。

#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"


# ----------------------------------------------------------------------------
# Code to populate the roots of the tree (can be more than one on Windows)
# ----------------------------------------------------------------------------

proc populateRoots {tree} {
foreach dir [lsort -dictionary [file volumes]] {
set node [$tree insert {} end -text $dir -values [list $dir directory]]
populateTree $tree $node
}
}

# ----------------------------------------------------------------------------
# Code to populate a node of the tree
# ----------------------------------------------------------------------------

proc populateTree {tree node} {
if {[$tree set $node type] ne "directory"} return

set path [$tree set $node fullpath]
$tree delete [$tree children $node]

foreach f [lsort -dictionary [glob -nocomplain -dir $path *]] {
set type [file type $f]
set id [$tree insert $node end \
-text [file tail $f] \
-values [list $f $type]]

if {$type eq "directory"} {
# Make it so that this node is openable
$tree insert $id 0 -text dummy ;# a dummy
$tree item $id -text [file tail $f]
} elseif {$type eq "file"} {
set size [file size $f]
# Format the file size nicely
if {$size >= 1024*1024*1024} {
set size [format %.1f\ GB [expr {$size/1024/1024/1024.}]]
} elseif {$size >= 1024*1024} {
set size [format %.1f\ MB [expr {$size/1024/1024.}]]
} elseif {$size >= 1024} {
set size [format %.1f\ kB [expr {$size/1024.}]]
} else {
append size " bytes"
}
$tree set $id size $size
}
}

# Stop this code from rerunning on the current node
$tree set $node type processedDirectory
}

# ----------------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------------

wm title . "Directory Browser"
ttk::style theme use "clam"

# Create the tree and set it up
ttk::treeview .tree \
-columns {fullpath type size} \
-displaycolumns {size} \
-yscroll ".vsb set" \
-xscroll ".hsb set"

if {[tk windowingsystem] ne "aqua"} {
ttk::scrollbar .vsb -orient vertical -command ".tree yview"
ttk::scrollbar .hsb -orient horizontal -command ".tree xview"
} else {
scrollbar .vsb -orient vertical -command ".tree yview"
scrollbar .hsb -orient horizontal -command ".tree xview"
}

.tree heading \#0 -text "Directory Structure"
.tree heading size -text "File Size"
.tree column size -stretch 0 -width 70

populateRoots .tree
bind .tree <<TreeviewOpen>> {populateTree %W [%W focus]}

# Arrange the tree and its scrollbars in the toplevel
grid .tree -column 0 -row 0 -sticky news
grid .vsb -column 1 -row 0 -sticky ns
grid .hsb -column 0 -row 1 -sticky ew
grid columnconfigure . 0 -weight 1
grid rowconfigure . 0 -weight 1

# ---
# ttkwidget_treeview.tcl



Windows XP で実行した例




Fedora 8 (Linux) で実行した例


ちなみに階層構造を扱うウィジェットには、拡張パッケージ BWidgetTreeIncr Widgetshierarchy などが利用できます。

2007-12-30

Tk themed widgets


日リリースされた Tcl/Tk 8.5.0 では、"Tk themed widgets" (正式な訳語を知りませんので、便宜上「テーマ・ウィジェット」と呼ぶことにします)というウィジェットが追加されています。
このウィジェットは、拡張パッケージ Tilettk という名前空間に Tk の標準機能として統合されたものです(TIP#248)。
このパッケージは、ウィジェットを OS 固有の見映え(ルック&フィール)に近づけたり、あるいは firefox などで利用できるテーマ(スキン)と同じような機能を実現します。


Tk のデモプログラムにテーマ・ウィジェットのサンプルがありますが、サンプルコードの記述が読みにくいので、自分でも簡単なサンプルを作ってみました。先日リリースした、クロスコンパイル版 Windows 用 Tcl/Tk、tcltk8.5.0-011 を使っています。











#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"


# ----------------------------------------------------------------------------
# テーマ変更処理
# ----------------------------------------------------------------------------

proc changeTheme {themeVal} {
ttk::style theme use $themeVal
return
}

# ----------------------------------------------------------------------------
# メイン
# ----------------------------------------------------------------------------

wm resizable . 0 0
wm title . "Ttk"

set tk_icon "
R0lGODlhEAAQAIAAAP8AAP///yH5BAEAAAEALAAAAAAQABAAAAIpjI+py+C/nnSIynosrcBAn3QgE2x
bJGoi501hWpZrm13zOc2yopP+XwAAOw==
"
image create photo Tk -data $tk_icon

# デフォルトのテーマ設定
set theme "default"
changeTheme $theme

# メニューボタン
ttk::menubutton .mb \
-text "メニューボタン" \
-image Tk \
-compound left \
-cursor hand2 \
-menu .mb.theme
pack .mb -anchor w

menu .mb.theme
foreach themeName [ttk::themes] {
.mb.theme add radiobutton \
-label $themeName \
-variable theme \
-value $themeName \
-command {changeTheme $theme}
}
.mb.theme add separator
.mb.theme add command \
-label "Exit" \
-command exit

# テーマ名表示部
ttk::frame .fra
pack .fra -expand yes -fill both -padx 0 -side top

ttk::label .fra.lab1 -text "テーマ"
ttk::label .fra.lab2 -textvariable theme
pack .fra.lab1 -side left
pack .fra.lab2 -expand yes -fill both -padx 5 -side left

# ---
# ttkwidget_menubutton.tcl


テーマ名の一覧は、ttk::themes あるいは ttk::style theme names コマンドで得られますが、Windows 版と UNIX 版とでは利用できるテーマの数が違います。Windows 版で次の6種類、

winnative clam alt default classic xpnative

UNIX 版は、Windows 系のテーマを除いた次の4種類、

clam alt default classic

です。今後、標準で利用できるテーマの種類が増えるかもしれません。以下は、Fedora 8 (Linux) 上で実行した例です。デスクトップには Gnome を使用しています。

2007-12-29

MinGW runtime & w32api の更新

SourceForge.net Logo
MinGW のプロジェクトサイトで 12 月 27 日に、mingw-runtime-3.14w32api-3.11 がリリースされました。

早速、Linux でのクロスコンパイル用パッケージを Fedora 8 上でビルドして、MinGW Cross Compiler のプロジェクトサイトにアップロードしました。

mingw-3.14-1

2007-12-22

Tcl/Tk for Windows, build011

SourceForge.net Logo
ロスコンパイル環境で生成した Tcl/Tk 8.5.0 のウィンドウズ用インストールパッケージを MinGW Cross Compiler のプロジェクトサイトにアップロードしました。ダウンロードは以下からどうぞ。

tcltk8.5.0-011

今回、収録したパッケージとビルドした環境は以下の通りです。

Tcl/Tk for Windows, bitWalk build #011
released on 2007-12-22

1. Available version of Tcl/Tk and extensions in this package
- Tcl/Tk 8.5.0
http://sourceforge.net/projects/tcl
- Thread 2.6.5
http://sourceforge.net/projects/tcl
- Incr Tcl/Tk 3.4 (itcl-20071105.tar.gz)
http://sourceforge.net/projects/incrtcl/
- Incr Widgets 4.0.2 (iwidgets-20070610.tar.gz)
http://sourceforge.net/projects/incrtcl/
- BWidget 1.8.0 (bwidget-20071031.tar.gz)
http://sourceforge.net/projects/tcllib
- Tcllib 1.10
http://sourceforge.net/projects/tcllib
- TkCon 2.4
http://sourceforge.net/projects/tkcon

2. build environment for compiling binaries
- MinGW Cross Compiler on Fedora Linux 8
mingw-binutils-2.18.50-1.fc8
mingw-runtime-3.13-3.fc8
mingw-w32api-3.10-3.fc8
mingw-gcc-core-4.2.1-4.fc8

3. packaging environment
- Inno Setup Compiler 5.2.2
on wine-0.9.49-1.fc8 / Fedora Linux 8
http://www.jrsoftware.org/isinfo.php

2007-12-21

Tcl/Tk 8.5.0 リリース


式リリースの直前になって、慌しくリリース候補 rc5 ~ rc7 が出ましたが、その後(いつのまにか)正式版として公開されたようです。リリースアナウンスは 12 月 20 日付けになっています。

Tcl/Tk 8.5.0 Release Announcement

バージョン 8.4.0 がリリースされたのは 2002 年 9 月 10 日のことですから、実に5年ぶりにマイナーバージョンが更新されたことになります。

バージョン番号の定義でいうと、8.x9.0 に変わればメジャーバージョンが更新されたといえるのですが、今回の 8.5.0 は、あたかもメジャーバージョンが更新されたかのような雰囲気です。つまり、それだけ改善点や機能追加が盛りだくさんなのですが、自分はまだ全容を理解しきれていないので、特筆すべき点があれば本ブログで紹介していこうと考えています。

なお、ソースは、以下のサイトから入手できます。

http://sourceforge.net/project/showfiles.php?group_id=10894


参考
Tcl/Tk 8.5登場 - 実行速度10%改善、Windows/OSXネイティブテーマ
Tcl/Tk 8.5:Windows/OS Xテーマ改善、X11ではアンチエリアスも
Slashdot | Tcl/Tk 8.5.0 Released

2007-12-20

Tcl/Tk 8.5.0rc7


リースの直前(実際には SourceForge.net からリリースアナウンスメントのメールが送信されてしまいましたが…)でバグが見つかり Tcl/Tk 8.5.0 のリリース候補7 (rc7) が出ました。

Date: Wed, 19 Dec 2007 16:59:16 -0500
From: Donald G Porter <dgp at nist.gov>
To: Tcl Core List <tcl-core at lists.sourceforge.net>
Subject: [TCLCORE] Tcl 8.5.0 RC 7

Thanks to Jeff for quickly fixing Tcl Bug 1854399.

No thanks to the absolutely no one who ran the tcllib test suite
since December 7, even with at least 5 RC available during that time.

Release Candidate 7 for Tcl 8.5.0 has the fix:

ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc7-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl850rc7-src.zip

The other 8.5.0 RC files remain unchanged at RC 5.

I've given up predicting when 8.5.0 will go final.

--
| Don Porter Mathematical and Computational Sciences Division |
| donald.porter at nist.gov Information Technology Laboratory |
| http://math.nist.gov/~DPorter/ NIST |
|______________________________________________________________________|

2007-12-19

Tcl/Tk 8.5.0rc6


らに Tcl/Tk 8.5.0 のリリース候補6 (rc6) が出ました。正規表現エンジン関連のバグフィックスのようです。

Date: Tue, 18 Dec 2007 11:16:16 -0500
From: Donald G Porter <dgp at nist.gov>
To: Tcl Core List <tcl-core at lists.sourceforge.net>
Subject: [TCLCORE] Tcl 8.5.0 RC 6

A very nice bug fix for the regexp engine came in yesterday, and Donal
was able to merge it onto the HEAD this morning. This final RC
incorporates the fix into the 8.5.0 release.

ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc6-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl850rc6-src.zip

The other 8.5.0 RC files are unchanged at RC 5.

8.5.0 goes final later today.

--
| Don Porter Mathematical and Computational Sciences Division |
| donald.porter at nist.gov Information Technology Laboratory |
| http://math.nist.gov/~DPorter/ NIST |
|______________________________________________________________________|

2007-12-18

Tcl/Tk 8.5.0rc5


んと Tcl/Tk 8.5.0 のリリース候補5 (rc5) が出ました。これで問題がなければ、明日 8.5.0 がリリースされることになりそうです。

Date: Mon, 17 Dec 2007 13:15:16 -0500
From: Donald G Porter <dgp at nist.gov>
To: Tcl Core List <tcl-core at lists.sourceforge.net>
Subject: [TCLCORE] Tcl/Tk 8.5.0 RC5 available

Latest release candidates correct a memory alignment problem reported
over the weekend.

ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc5-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk8.5.0rc5-src.tar.gz

ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc5-html.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl850rc5-src.zip
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk850rc5-src.zip

Once again, intent is to rename these files to the real 8.5.0 release
tomorrow, unless some other serious bug fix comes in.

--
| Don Porter Mathematical and Computational Sciences Division |
| donald.porter at nist.gov Information Technology Laboratory |
| http://math.nist.gov/~DPorter/ NIST |
|______________________________________________________________________|

2007-12-15

Tcl/Tk 8.5.0rc4


Windows 2000 / MSVC6 の環境で、rc3 をビルドできないという問題が報告されたので、その問題を対策した Tcl/Tk 8.5.0 のリリース候補4 (rc4) が出ました。今度こそ最後のリリース候補になればいいのですが…。現在のところ、8.5.0 の正式版リリースは来週はじめにずれるようです。

Date: Fri, 14 Dec 2007 18:06:36 -0500
From: dgp at nist.gov
To: tcl-core at lists.sourceforge.net
Subject: [TCLCORE] (no subject)

Some important commits came in post-RC3. Thus, here is
Release Candidate 4 for Tcl/Tk 8.5.0:

ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc4-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk8.5.0rc4-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc4-html.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl850rc4-src.zip
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk850rc4-src.zip

Intent is to rename these files to become Tcl/Tk 8.5.0
early next week.

DGP

2007-12-14

Tcl/Tk 8.5.0rc3


Tcl/Tk 8.5.0 のリリース候補3 (rc3) が出ました。今回が最後のリリース候補になる予定で、まもなく正式版のリリースです。

Date: Thu, 13 Dec 2007 10:11:10 -0500
From: Donald G Porter <dgp at nist.gov>
To: Tcl Core List <tcl-core at lists.sourceforge.net>
Subject: [TCLCORE] Tcl/Tk 8.5.0 RC3 available

You may now download the files of the Tcl/Tk 8.5.0 RC3 release:

ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc3-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk8.5.0rc3-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc3-html.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl850rc3-src.zip
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk850rc3-src.zip

There are some reports of DNS unreliability, so you may need to
shift to the tcl.activestate.com server.

The intent is to simply rename these files tomorrow, and they will
become the Tcl/Tk 8.5.0 release.

Thanks to Jeff Hobbs and Daniel Steffen for their efforts clearing
away the last few blockers.

--
| Don Porter Mathematical and Computational Sciences Division |
| donald.porter at nist.gov Information Technology Laboratory |
| http://math.nist.gov/~DPorter/ NIST |
|______________________________________________________________________|

2007-12-11

Tcl/Tk 8.5.0rc2


Tcl/Tk 8.5.0 のリリース候補2 (rc2) が出ました。正式版のリリースまでに、少なくとも、あともう一回、リリース候補が出るようです。

Date: Mon, 10 Dec 2007 14:28:28 -0500
From: Donald G Porter <dgp at nist.gov>
To: Tcl Core List <tcl-core at lists.sourceforge.net>
Subject: [TCLCORE] Tcl/Tk 8.5.0 RC 2 available

Release Candidate 2 for Tcl/Tk 8.5.0 are available from ftp:

ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc2-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk8.5.0rc2-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc2-html.tar.gz

This includes some fixes for formerly blocking issues, so please
give it some testing.

I'll be announcing these files shortly on comp.lang.tcl so that a
broader collection of testers will hopefully put this one through
the wringer.

At least one more RC is on the way (changes, release notes, etc.).

If there are other blocking issues, please re-raise them so I'm sure
not to miss them.

--
| Don Porter Mathematical and Computational Sciences Division |
| donald.porter at nist.gov Information Technology Laboratory |
| http://math.nist.gov/~DPorter/ NIST |
|______________________________________________________________________|

2007-12-05

Tcl/Tk 8.5.0rc1


Tcl/Tk 8.5.0 のリリース候補1 (rc1) が出ました。8.5.0 の正式版のリリースは、12 月 14 日のようです。

Date: Tue, 04 Dec 2007 14:26:52 -0500
From: Donald G Porter <dgp at nist.gov>
To: Tcl Core List <tcl-core at lists.sourceforge.net>
Subject: [TCLCORE] Countdown to Tcl/Tk 8.5.0 releases...

Available on the Tcl ftp site are the latest RCs for Tcl/Tk 8.5.0:

ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc1-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk8.5.0rc1-src.tar.gz
ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.0rc1-html.tar.gz

The target date for final release is Friday, Dec. 14. I would like to
make an RC on Wednesday, Dec. 12 with the intent that it becomes 8.5.0
on Friday via a simple rename after a round of smoke testing. Please
plan your development with that in mind.

There may or may not be another RC between the current one and the one
on Dec. 12, depending on the amount and significance of HEAD churn.

It would help me a bit for those folks still planning significant
commits to give me an idea about what they might be and when they
might appear on the HEAD.

Finally, a last round of GOOBE that should be prepared is something
not in the release itself, but associated resources, notably pages
like:

http://www.tcl.tk/software/tcltk/
http://www.tcl.tk/software/tcltk/choose.html
http://www.tcl.tk/software/tcltk/8.5.html

which should be significantly updated to change our recommendation
to use 8.5 over 8.4 as the stable release, and which might profit
from an expanded introduction to / cheering for new 8.5 features, either
directly or by reference. Does anyone already have text, etc. in
the works for that?

--
| Don Porter Mathematical and Computational Sciences Division |
| donald.porter at nist.gov Information Technology Laboratory |
| http://math.nist.gov/~DPorter/ NIST |
|______________________________________________________________________|

2007-12-01

binutils-2.18.50

SourceForge.net Logo

11 月 24 日付けで MinGW Project で binutils-2.18.50 がリリースされていましたので、遅ればせながらクロスコンパイラのパッケージの方も更新しました。

mingw-binutils-2.18.50

[Mingw-users] で流れたリリース・アナウンスメントを以下に載せました。

Date: Mon, 26 Nov 2007 21:47:22 -0500
From: "Chris Sutcliffe" <ir0nh34d at gmail.com>
To: MinGW-Users <MinGW-users at lists.sourceforge.net>
Subject: [Mingw-users] Technology Preview: binutils-2.18.50-20071123

I've released a new version of binutils.

This version of binutils was compiled from the vanilla
2.18.50-20071123 snapshot. It was compiled with the following options:

./configure --disable-nls

make CFLAGS="-s -O2 -mms-bitfields -mtune=i686"

Recent 2.18.50 snapshots have changed the handling of section
alignment. Now, alignment is encoded in section header of object
file, the same as done by MS tools. This may cause some backward
compatibility issues with older libs that need 16 byte alignment for
SSE2 objects. Please report any such problems to the list.

Chris

--
Chris Sutcliffe
http://emergedesktop.org