xshogi.app

Mac OS X Leopard 上でコンピュータと対戦できる将棋ソフト (X11ベースの アプリケーション xshogi をバンドルしたアプリケーション。)

xshogi.app [ http://kyoshiaki.sakura.ne.jp/osx/leopard.html ]

を公開します。

キーワード ‘mac 将棋’ で検索してくる人が結構多いので、需要があるかもしれないと思い作成しました。

話は変わりますが、以前は

GIMP.app
http://gimp-app.sourceforge.net/

からダウンロードした Gimp を利用していたのですが、Leopard には対応していないようです。

それで VMware 上に Ubuntu をインストールし、Ubuntu 上の Gimp を使用していました。 (VMware Tools をインストールすれば、ファイルのドラッグ・ドロップにも対応しています。)

最近、 Leopard に対応した Gimp.app を

Wilber loves Apple
http://www.wilber-loves-apple.org/
Download
http://www.wilber-loves-apple.org/pages/download.html

で見つけました。早速、インストールして利用しています。

ソースを

SourceForge.net: Wilber loves Apple
http://sourceforge.net/projects/darwingimp

の中央の ‘code’ タブをクリックして表示されている説明通りに、ターミナル上でコマンド

svn co https://darwingimp.svn.sourceforge.net/svnroot/darwingimp darwingimp

を使ってダウンロードしました。

GIMP.app
http://gimp-app.sourceforge.net/

で説明されているビルド方法と基本的に同じなので、 Leopard に対応した xshogi.app を作成してみました。

以前は gimp.app/Contents/Resources/script ファイル内でコマンド open-x11 を使って The X Window System を起動していたのですが、

今回は ScriptExec 内で起動しているようです。

プロジェクトファイル ScriptExec.xcodeproj の main.c

170行目
// compile "icon clicked" script so it's ready to execute
SimpleCompileAppleScript("tell application \"X11\" to activate");
507行目
static OSStatus CompileAppleScript(const void* text, long textLength,
AEDesc *resultData) {
533行目
/* runs the compiled applescript */
static void runScript()
{
/* run the script */
err = OSAExecute(theComponent, scriptID, kOSANullScript,
kOSAModeNull, &resultID);
return err;
}
543行目
/* Simple shortcut to the function that actually compiles the applescript. */
static OSStatus SimpleCompileAppleScript(const char* theScript) {

の 171 行目

"tell application \"X11\" to activate"

X11.app を起動するアップルスクリプトそのものだと思います。

xshogi.app も同じ仕組みです。

Wordbook2

前回の日記で宣言したように VMware について書くつもりでいたのですが、今回は Wordbook2 に関する内容です。

2007/12/09 [ id:KYoshiaki:20071209 ] で書いたように、Universal Binary 化した Wordbook.mdimporter は正しく動作しませんでした。 Wordbook で作成した書類に UTI*1 が宣言されていないとだめなようです。 UTI は、小文字で宣言するみたいです。

折角なので Wordbook を作り直してみました。機能も少し追加しました。いずれ Wordbook2 として公開する予定です。

ついでに Spotlight Importer だけでなくQuick Look にも対応してみました。

まず最初に

Quick Look Programming Guide: Introduction to Quick Look Programming Guide
http://developer.apple.com/documentation/UserExperience/Conceptual/Quicklook_Programming_Guide/Introduction/chapter_1_section_1.html

を読みました。

Thumbnail、Preview の違いは、Thumbnail が Finder 上の Cover Flow で表示されるそれぞれの画像で、Quick Look アイコンをクリックするかスペースバーを押すと表示される画像やファイルが Preview のようです。あまり自信がありませんが!

早速作成してみました。Xcode で新規プロジェクトQuick Look Plug-In を選び、Cocoa.framework、CoreFoundation.framework を追加しました。言語に Objective-C を利用したいので、作成されるファイルの拡張子を m に変更しました。

GenerateThumbnailForURL.m
GeneratePreviewForURL.m

HTML を利用して Preview したいので

Quick Look Programming Guide: Generating Enriched HTML
http://developer.apple.com/documentation/UserExperience/Conceptual/Quicklook_Programming_Guide/QLDynamicGeneration/chapter_7_section_3.html#//apple_ref/doc/uid/TP40005020-CH15-SW2

を参考にコードを追加しました。

Quick Look Programming Guide: Project Configuration
http://developer.apple.com/documentation/UserExperience/Conceptual/Quicklook_Programming_Guide/QLProjectConfig/chapter_4_section_3.html#//apple_ref/doc/uid/TP40005020-CH5-DontLinkElementID_9

を参照して Info.plist を設定するとWordbook2 の書類を Quick Look で表示できるようになりました。

また、 Xcode で ‘ビルドして進行’ を選ぶと Preview するように

Quick Look Programming Guide: Debugging and Testing a Generator
Quick Look Programming Guide: Debugging Facilities
http://developer.apple.com/documentation/UserExperience/Conceptual/Quicklook_Programming_Guide/QLDebugTest/chapter_11_section_2.html#//apple_ref/doc/uid/TP40005020-CH14-SW3

を参考に Xcode のメニュー ‘プロジェクト/新規カスタム実行可能ファイル…’ を選択して、設定しました。

引数は

-p -c jp.koyama.wordbook2.ywrd2 -g QuickLookWordbook2.qlgenerator "$(SRCROOT)/Sample1.ywrd2"

としました。

Wordbook2 の書類 Sample1.ywrd2 の UTI を確認するには

/Wordbook2 $ mdimport -d2 Sample1.ywrd2
(Info) Import: Import '/Users/XXXX/Wordbook2/Sample1.ywrd2' type 'jp.koyama.wordbook2.ywrd2' 

のように mdimport コマンドで確認できます。

Quartz 2D Programming Guide: Introduction to Quartz 2D Programming Guide
http://developer.apple.com/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_intro/chapter_1_section_1.html#//apple_ref/doc/uid/TP30001066-CH201-TPXREF101

は、まだ読んでいる途中ですが、参考になると思います。私の英語の読解力は乏しいので、間違ったことを言っている可能性もあります。

最後に Xcode で ‘ビルドして進行’ を実行した画像を添付しておきます。

追記。すでに日本語に翻訳したものがありました。

Quick Lookプログラミングガイド: Quick Lookプログラミングガイドの紹介
http://developer.apple.com/jp/documentation/UserExperience/Conceptual/QuickLook_Programming_Guide/Introduction/chapter_1_section_1.html#//apple_ref/doc/uid/TP40005020-CH1-DontLinkElementID_14

*1:Uniform Type Identifier

HatenaDiaryAssistance version 0.1

簡単なプログラムなので、ぜひ、改造してみてください。Cocoa でプログラミングをはじめた人が挑戦するのに最適だと思います。

クリップボードに文字列をコピーするボタンを追加するのも簡単です。

Interface Builder でボタンを追加し、タイトルにコピーしたい文字列を設定します。
後は、ボタンをターゲット Controller のアクション titleCopyButton: に接続します。

ToolTip を表示させたい場合は、ボタンを選択し、インスペクタから Help を選び、表示したい簡易ヘルプを書き込んでください。

================[ Controller.m  ]==================
/*
ボタンのタイトルをクリップボードにコピー
*/
- (IBAction)titleCopyButton:(id)sender {
NSString *title;
title = [sender title];
// クリップボードにコピー
[self copyPasteboardString:title];
}
=============================================

ToolTip は NSView の機能です。NSTextField、NSButton は NSView を継承しています。

NSTextField Class Reference
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTextField_Class/index.html#//apple_ref/doc/uid/TP40004133
NSButton Class Reference
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSButton_Class/index.html#//apple_ref/doc/uid/TP40004014
NSView Class Reference
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/index.html