Giraffe+ 0.5.0.62b

Download
前リリースからの変化
言語部分(gs)

  • Container.collectがself.copyしていたのをself.deep_copyに修正。RangeやArrayのような参照型コンテナで破壊的に動作していた。
  • Container.collectがアサインに"="を呼んでいたのをset_atに修正。戻り値のArrayの要素の型がselfのArrayのそれに縛られないため。
  • Array.setをArray.set_atに改名。Object.setと衝突していた。
  • Container.set_atを、その第一引数のインデクスのエレメントの"="関数を第二引数を引数にして呼ぶものとして定義。
  • String.upperとlowerをそれぞれto_upper、to_lowerに改名。タイプキャストのプリフィクスにto_を使っているため混乱するかとto_無しにしていたが、C++(boost)との整合が取れてないほうが混乱したため。

言語部分以外(Giraffe+)

  • Event.Dropで、モディファイヤキーに加えてマウスボタンの種類も指定できるようにした。
  • デフォルト設定で、マウス右ボタンでドロップした際にエクスプローラのようなメニューを出すようにした。
  • ContainerとStringのメソッドとして、shell_copy, shell_move, shell_deleteといったWinApiのSHFileOperationのインターフェイスを定義した。
  • ContainerとStringのメソッドとして、shell_copy等の仕様に似せたショートカット生成関数shell_linkを定義した。
  • ContainerとStringのメソッドとして、shell_executeとshell_menuを旧来のShell.ExecuteとShell.ShowContextMenuの新言語版として定義した。
  • Giraffe.EditとGiraffe.ListBoxのプロパティにTextMarginを定義した。アイコン領域とテキスト領域の間の幅であり、デフォルトは従来どおり1。
  • Giraffe.Edit.SetTextとMFC_CWndの全メソッドをデフォルト引数対応にした。
  • 旧言語の関数であるnot, Notおよび"!"が、型を無視する従来の仕様に反していたのを修正。
  • Unicodeファイル名にある程度対応

Continer.collectの修正について。STLアルゴリズム関数の大半はそのまま定義されていますが、transformだけはSTL対応前に定義したため、より一般的なcollectという名前になっています。transformと同じようとで使われるというだけでありtransformを呼んでるわけではないので、ほかのSTLアルゴリズム関数とは別物と思えます。Container.eachもstd::for_eachに対してのそれです。Container.set_atは、Array以外のContainerでset_atを呼んだ場合に単なるアサインになるための小細工です。
Shell.dllのリビルドはやっぱり無くなりました。リビルドすればUnicodeが扱えるというものでもなさそうだったからです。ContainerとStringの両方に同じメソッドを定義することで、複数でも単数でもそのまま扱えるようにしておきました。関数の仕様等は別項でたぶんやります。Method.traitsみたいなのを用意して戻り値や引数や解説をメソッドオブジェクトそのものに持たせるような仕組みにして、doc\object_tree.xmlに出力するのがいいと思ってますが、自動でできそうな部分があまりないのであまりやる気はありません。
gs::class_のデフォルト引数対応がやっとできましたが、boost::bindの制限により引数の数が10を超えられず、結局CWnd::CreateWindowEx等が定義できませんでした。必要無さそうなので構いませんが、意外なところでつまずいた感があります。
Shell.Executeを使ってる部分以外でのUnicode対応が完了しました。リストボックスでの選択や、ファイルパスのコピー、シェルコンテキストメニュー等です。Shell.Executeを使ってる部分は多く、なおかつNormalExecute等をどうするかという問題が手付かずですのでまだShell.Executeの駆逐には至っていません。AddData関数についても、登録アイテムの仕様そのものを考え直したいところなのでUnicode対応版は当分ありません。とりあえず、これでShell.dllの関数で新しい代替手段が用意されてないのはITEMIDLIST関連とショートカット関連だけになりました。Shortcut_fileオブジェクトはC++で使ってるクラスを使うだけ、ITEMIDLISTに関しては別に無くてもいいかと考えています。