Project "Site Sampler"
↑hpSampler page
アルファな毎日 (更新履歴)
June 19, 2004:
SiteSampler 1.0α15 公開です。
前回の予告通り,template と CSS 編集ウィンドウでも検索・置換が可能になりました。
3つの編集ウィンドウのうちもっとも上のものの TextView を検索対象として検出するようにして実現。
NSApplication の orderedWindows メソッドと NSObject の respondsToSelector: メソッドの合わせ技です。
ついでに,タグと色コードの挿入機能もすべての編集ウィンドウで実現しました。
タグ挿入機能で挿入できる文字列は HTML タグには限っていなくて,タグ・ライブラリで任意の文字列を指定できます。
なので CSS に使う文字列を登録しておけば,CSS 編集でも役立つ場面はあるのではないでしょうか。
ただ,template の2つの TextView は独立しています。
タグ/色コード挿入に関しては問題ないと思いますが,検索時は表示が分割されただけの1つの TextView という動作をしてほしいですよね・・・。
できないことはなさそうなんだけど,ちょっと面倒臭そう・・・。
June 14, 2004:
SiteSampler 1.0α14 公開です。
アイコンつくってみました第2弾。
以前のはあまりにもそのまんまで,ちょっと下品な感じもありましたしね。
これでかなりすっきりしたんじゃないでしょうか。
ちなみに下のような英語パターンも作ってみましたが・・・。
やはり「見 本」という日本語が捨てがたいなという気がして,日本語バージョンを採用しました。
ちなみにこのアイコンには1つ重要な秘密が隠されています。
今回の主な変更点は検索絡み。
検索はいままでけっこういい加減だったので ,いろいろ修正しました。
まず,検索がヒットすると,スクロールが該当箇所に移動します。
あと,Replace All のパフォーマンスを大幅に改善。
これまで置換を TextView のメソッドに頼っていたんですが,一度 NSMutableString に読み込んで置換作業を済ませることで大幅に高速化できました。
アルゴリズムもシンプルになったようです。
今までは数秒かかっていた全置換作業も,一瞬で終わるようになりました (^^
ただ,そのためには Undo 操作を自前で実装しないといけなくて,それがちょっと大変だった・・・。
あとは,検索・置換メソッドを FindPanelController に実装していたのを SWEditorTextView に移動したので,次回あたりには template や CSS 編集ウィンドウでも検索・置換が可能になる・・・
それから,タグ編集パネルでピーピーとビープ音がうるさいのが解決できてなかったのでそれを修正。
今度こそ直った・・・
June 7, 2004:
SiteSampler 1.0α13 公開です。
今回は,template でもタグ・カラーリングが有効になるようにしました。
タグ・カラーリングはもともと SWEditWindowController の中でやってたんですが,オート・インデントを実現するときに NSTextView を拡張した SWEditorTextView の方に移して,他の編集ウィンドウでも効くようにできました。
CSS ウィンドウではカラーリングのルールがまったく違ってくるので作動しないようにしてますが。
ここで予想外の副作用が・・・。
今まで Auto Rendering のために,WindowContoller 中で
[[NSNotificationCenter defaultCenter] addObserver:textView selector:@selector(textDidChange:) name:NSTextDidChangeNotification object:textView]
としてテキストの変化を検出してたんですが,これを TextView の拡張クラス中で didChangeText メソッドで対応しようとすると,日本語の入力途中にまで反応してしまいます。
ローマ字やひらがなの状態のテキストがレンダリングされていくのです・・・。
これを SWEditorTextView 中で
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:NSTextDidChangeNotification object:self]
としても同様でした。
なので結局最初のように WindowController から notification の設定をするように戻しました。
これは notification が発行されたりメソッドが呼び出されるタイミングの問題だと思うんだけど・・・。
notification を使った2つのパターンは何が違うんだろ?
それともう1つ追加機能。
読み書きするテキスト・ファイルの,文字コードと改行コードを指定可能にしました。
改行コードは,読み込み時にはすべて LF に強制変換。書き出し時のコードを指定できます。
文字コード指定は読み書きどちらにも適用されます。
これらは,テキスト・ファイルを単体で読み書きする場合のみ有効です。
プロジェクトやタグ・ライブラリは他のアプリで開くことを想定してませんので・・・。
今までファイルの読み書きはすごく手を抜いてて,NSString の stringWithContentsOfFile:/writeToFile:atomically: メソッド等で済ませてました。
それを,ちゃんとエンコーディングして NSData を介して NSFileWrapper で読み書きするようにしました。
ここで思わぬ副作用が・・・。
FileWrapper を使って上書き保存したファイルって,元のファイルのリソース・フォークが保存されるんですね。
実はこの,リソース・フォークを保存するという機能は近々実装したいなぁと思ってたんです。
しかしどうやら Cocoa ではリソース・フォークを直接扱う方法がないらしく,Carbon の関数を呼び出さないといけない気配で,Carbon の勉強をはじめようかと思ってたところ・・・。
その必要がなく済んで大助かりです (^^
新規ファイルで保存する場合は,クリエータ情報とファイル・タイプ情報だけ修正するようにして,TexiEdit のテキストファイルとして保存されるようにしました。
ちなみに今回から,Preferences Panel の内容を,TagView を使って Appearance と Behavior に分けました。
May 30, 2004:
SiteSampler Ver1.0α12 公開です。
今回は,template と CSS 編集ウィンドウのフォントが指定可能になりました。
それから tag coloring のスイッチを Preferences Panel からメニューに移動しました。
おかげでショートカット・キーもつきました。
そんなところ。
May 23, 2004:
SiteSampler Ver1.0α11 公開です。
今回は CSS 編集ウィンドウを追加しました。
動作は editor や template ウィンドウと同じ。
New & Open & Save は Clear & Import & Export というニュアンスです。
Open 時は今回も拡張子による自動判別。
プロジェクトには,CSS テキストとファイル名も保存されます。
今回の仕様変更。
外部 CSS の指定が Preferences Panel からなくなり (適用/不適用の切り替えはメニューに移動),CSS ウィンドウで開いている CSS ファイルが自動的に適用対象になります。
この方が,template と動作の整合性がとれてると思うからです。
SiteSampler の評価として,ときどき「外部 CSS ファイルを適用できる」ことをメリットとして耳にすることがあるんですが,SiteSampler で編集する予定のない CSS を適用したければ,template ででもタグでリンクしてください。
ブラウザと違って,自由にソースを変更できるエディタなわけですから。
ここで注意点。
CSS ウィンドウの内容が直接レンダリングに反映されるわけではありません。
CSS の変更をレンダリングに反映させるためには,まずファイルとして保存してから Clear Cache する必要があります。
それを一発で済ませるために "Save CSS & Clear Cache" というメニューも追加しました。
これは WebKit の問題で,CSS を文字列で指定できず,ファイル指定 (実際は URL 指定) しないといけないためです。
WebKit をハックすれば解決できるのかもしれないけど,そこまでするつもりはありません 。
それから,Clear Cache で一時ファイルを書き出すとき,base URL を指定する <base> タグと CSS を指定する <link> タグを template テキストの最初に付け足すようにしました。
力業ですが,これで前回書いた制限がなくなってるはずです。
Fixed Problems
これまであった問題のいくつかは解決されました。
- Clear Cache に使用上の制限
上記のように解決されました。
- Preferences Panel の表示が実際の内容と食い違う場合がある。
問題は CSS 適用/不適用のボタンだったんですが,今回の仕様変更でとりあえず解決されました。
May 15, 2004:
SiteSampler Ver1.0α10 公開です。
今回はいよいよ待望 の,「CSS ファイルの変更が反映されない (キャッシュのクリアが必要?)」が解決!
とはいっても完全ではなくて,まだ問題もありますが。
だけど,制限付きではあります が,期待通りの動作をしてるんじゃないかと思います。
で,その制限とは,base URL と変更を反映させたい CSS ファイルをタグとして editor なり template なりに記述しておかなければならない,ということ。
残念 ながら,viewer の base URL 設定や,Preferences Panel の CSS 設定は,この場合,役に立ちません。
それから,~/Library フォルダに SiteSampler フォルダを作り,jp.WorkshopCocam.temporal.html という一時ファイルを書き出し,削除します。
まさかとは思いますが,同名のフォルダやファイルを使用する予定がある人は気を付けてください。
とまぁ,こんなところ。
以下,ひとりごと。
そもそも WebKit には,キャッシュを制御するメソッドが用意されていません (見つけられませんでした)。
WebBackForwardList クラスには setPageCacheSize: というメソッドがありますが,これは過去何ページ分を記憶するかというヒストリのための物のようで関係なさそう。
実際,これを 0 にするのは試してみましたがダメでした。
そこで Foundation の方を調べてみると,ここに NSURLCache というクラスがあり,キャッシュをクリアする removeAllChachedResponses というメソッドもあります。
しかしこれもダメでした。
ドキュメントを読んでみると,NSURLCache は http:// と https:// プロトコルに対してのみ有効とのこと。
file:// 指定の CSS ファイルのデータはここにはないようです。
試してみると,確かにリモート・サーバ上の CSS を http:// 指定したときは変更が反映されます。
というか,わざわざキャッシュをクリアするまでもなく,自動的に更新される!
いったい,file:// のデータってどこにキャッシュされてるんだろ・・・?
で,いろいろ試してるうちに,重要な手がかりを発見!
Safari や,mkino さんのサイトでプロジェクトが進行しているシイラでは,file:// 指定の CSS の変更も反映される!
しかも,わざわざキャッシュをクリアするまでもなく,自動で!
といったところで,原因が見えてきた。
Safari やシイラと SiteSampler との違いは,レンダリングに使うメソッド。
Safari やシイラでは WebFrame クラスの loadRequest: メソッドを URL 指定で呼び出している (シイラはソースが公開されてます。 Safari の方は推定 : P ) のに対して,SiteSampler では loadHTMLString: baseURL: メソッドを使って HTML の文字列を指定してます。
これはアプリの性質の違いからして当然のところ。
問題は,loadRequest: の場合は file:// 指定の CSS (ともしかしたら画像とかもかも) の変更を検出して更新してくれるのに,loadHTMLString: baseURL: の場合はやってくれないってこと。
というわけで解決策。
SiteSampler でメニューから Clear Cache を実行すると,editor と template の内容を結合したテキストを一時ファイルとして書き出し (上で書いたファイル名はこのためのもの) て,[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[filename stringByExpandingTildeInPath]] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10] で作成した request を loadRequest: でロードします。
ここで NSURLRequestReloadIgnoringCacheData というのが,キャッシュを無視してすべてのデータをロードしなおすことを指定するので,テキスト中で file:// 指定された CSS も再読み込みしてくれます。
ちなみに,timeout interval の 10 秒という値は,適当です (^^
これで万事解決!
・・・かと思いきや,新たな問題が発覚。
loadRequest: メソッドには,ご覧の通り,base URL の指定がありません。
つまり,一時ファイルのあるディレクトリが自動的に base URL と認識されるため,HTML 中の相対パス指定が効かなくなります。
この問題は,テキスト中で <base> タグを使って明示的に base URL 指定してやれば回避できます。
もう1つの問題が,loadRequest: による CSS の更新が,WebPreferences クラスで設定する外部 CSS (SiteSampler では Preferences Panel で指定するやつ) には効かないということ。
この問題も,テキスト中で <link> タグで明示的に指定してやれば回避することはできます。
というわけで,最初に書いたような制限がつくわけです。
ほんとはもうちょっと完成度を高めてから公開しようかとも思ったんだけど,CSS の更新は需要が高そうなので,とりあえず実現できたところで公開することにしました。
ま,template に2行ほど書き足しておけばいいだけだし,前回から導入されたプロジェクトのおかげで HTML と template をまとめて管理することもできるし,実用上は問題ないんじゃないでしょうか 。
結局,この辺のトラブルは WebKit のややこしい仕様 (バグ?) が原因なわけで,Apple にももうちょっとがんばってもらいたいところ・・・。
Fixed Problems
これまであった問題のいくつかは解決されました。
- CSS を適用している場合に,CSS の変化が反映されない。 (キャッシュのクリアが必要?)
上記のように (まだ部分的にですが) 解決しました。
May 8, 2004:
SiteSampler Ver1.0α9 公開です。
今回はプロジェクトを導入しました。
どういうことかというと,HTML やら template やらをひとまとめにして保存・再現できるってことです。
具体的に保存される情報は,
- editor の内容とファイル・パス,オート・インデントの on/off
- viewer の base URL と auto render の on/off
- CSS の適用/不適用と CSS の URL
- template の内容とファイル・パス,template の適用/不適用
といったところ。
注意してほしいのは,保存されるのはテキストとファイル・パスであって,プロジェクトを開いたときにパスで指定されたファイルを開くわけではない,ってこと。
HTML や template 単体のときのセーブと同じニュアンスです。
だけどこれで,複数のサイトを書き分けたいときも,プロジェクトを一発切り替えればフォーマットまで切り替えられて便利!
ファイル拡張子は "ssproj"。
例によって中身はプロパティ・リスト形式のテキストです。
ちなみに,"Save Project" のメニューはありません ("Save Project As..." はあります)。
なんでかというと,アプリ自体は現在のプロジェクト (最後に open または save したファイル・パス) を覚えてるんだけど,ユーザーがそれを確認する方法がないから。
これはテクニカルな問題ではなくて,適当なインターフェイスを思いつかなかったから。
なので,要望なり提案なりがあれば実現できるとは思います。
Open 時は今回も,拡張子による自動判別です。
今回は,アプリの起動部分で苦労した。
最近,アプリの起動のパターンが増えてきて,それぜんぶ整合性をとろうとするともう,頭がいっぱいいっぱい・・・
もしかするとまだおかしいところがあるかもしれないので 試したい人はお気をつけて・・・。
他の変更点。
これまでウィンドウのタイトル・バーに出してたエラー・メッセージを,ウィンドウの左下,ブラウザでいうところのステータス・バーの位置に移動しました。
それから,メニューのうち Import/Export Tag Library メニューも First Responder につなぐようにして,Tag Library ウィンドウがアクティブなときだけ反応するようにしました。
操作の自由度としては減ったわけだけど,こっちの方が感覚的に分かりやすいかと思って。
April 8, 2004:
SiteSampler Ver1.0α8 公開です。
今回は Template のクリアとファイルへの読み書きを可能にしました。
やってることは editor ウィンドウの New & Open & Save と同じ。
なのでニュアンスとしては clear & import & export という動作です。
ついでに,前回まではメニューから editor ウィンドウのメソッドに静的にリンクしてたんですが,今回から First Responder を使ってます。
Interface Builder でメニューから First Responder にアクションをつなぎ,editor と template の window controller で newDocument: と saveDocument: のメソッドを実装しただけ。
なのでメニューから New または Save を選んだとき,editor か template のどちらかがアクティブな場合にそのウィンドウが反応します。
Open に関しては (ファイルをドラッグした場合も同じ),拡張子で判断します。
"sstemp" という拡張子の場合のみ template で開き,それ以外の場合は editor で開きます。
あ,ちなみに今回から仕様変更してテキスト全般を開けるようにしました。
だって制限する理由もないですもんね。
template ファイルは "sstemp" という拡張子で保存されます。
内部的には template を上下に分割するセパレータの文字列を入れただけの,単なるテキスト・ファイルです。
オープン時に判別するために独自の拡張子を持たせているだけです。
template の内容の,初期設定への保存方法を少し変えましたので,前バージョンでの template の内容は引き継がれません。
コピペ等で乗り切ってください : P
それから,色選択パネルに Auto Insert ボタンを追加しました。
AutoRender と一緒に使えば,あーでもないこーでもないといろいろ色を試すときにより便利になったのではないでしょうか。
メニュー内容やショートカット・キーやウィンドウのタイトル・バーなど,ちょこちょこ変えてます。
気をつけてください・・・。
March 30, 2004:
SiteSampler Ver1.0α7 公開です。
今回は色選択パネルを搭載しました。
久しぶりに画像付きです。
メニューか color well から色を選ぶとテキスト・フィールドにその色を示す文字列が現れます。
"Insert" ボタンでその文字列を HTML テキスト中に挿入できます。
あくまで挿入するだけなので,先に挿入したい位置にカーソルを移動するなりテキストを選択するなりしておいてください。
挿入後は,挿入した部分のテキストが選択された状態になります。
AutoRender をオンにしておくと,あーでもないこーでもないといろいろ色を試すときに便利だと思います。
それから,template の適用を on/off できるようにしました。
Fixed Problems
これまであった問題のいくつかは解決されました。
- Tag Edit Panel の不具合の解消
久しぶりに Tag Edit Panel (Tag Library ウィンドウから開くシート) を使ってみると ,いくつか問題があることに気付きました。
まず,ショートカット・キー設定のフィールドにタブ・キーで移動できません。
Interface Builder で nextKeyView を設定するのを忘れてたらしい。
ということで修正。
さらに,フィールドを移動したりシートを閉じたりするたびに警告音がピーピーとうるさく鳴ります。
調べてみると,すでに割り当てられているショートカット・キーを設定しようとしたときに警告音を鳴らしてたんだけど,空白を設定したとき (ショートカット・キーを設定しないとき) も鳴るようになってたらしい。
ということで空白の時は無視するように修正。
- Insert Tag Palette のトグル・メニュー
メニュー・バーの Insert Tag Palette のメニューを,パレットの状態に合わせて Show と Hide を切り替えてた・・・つもりだったんだけど,ちゃんと対応できてなかった。
その辺ちゃんと修正。
March 22, 2004:
SiteSampler Ver1.0α6 公開です。
これまであった問題のうち,レンダリングするたびに,ページのトップに戻るが解決!
解決のためにいろいろ調べたり試したりしてみましたが,紆余曲折ありました。
方策としては,
- まず,WebView のスクロール・バーにアクセスすることを考えた。
レンダリングのときにスクロール・バーを固定しておくか,レンダリング直前に位置を記憶して直後にそこに移動するか,その辺で何とかなるかなと。
しかし,WebView は一見 ScrollView に収まってるように見えて,実は scroller を自前で持っている。
つまり,自身が ScrollView の機能を持ってるらしい。
しかし,scroller にアクセスするメソッドは持ってない。
つまり位置を読めない&移動できない・・・
- それなら WebView のスクロールは無効にしてNSScrollView の sub view にしてしまって,スクロールは ScrollView にやらせたらどうだ?
スクロールを無効にするのは [[[WebView mainFrame] frameView] setAllowsScrolling:NO] でできた。
ところが,WebView のサイズは自分自身では変わらない。
レンダリング結果が自分より大きくても,WebView はそれをクリップして自分の大きさ分を表示するだけ。
スクロール不可でもそれは同じ。
だから結局,WebView は常にきれいに ScrollView に収まってることになって,その内容をスクロールさせることはできない。
レンダリング結果の表示に必要なサイズを取得して毎回 WebView のサイズを変えてやることも考えたけど,鬱陶しいし,そもそもその必要サイズを取得する方法がない・・・。
- しかし,WebView だってページ全体が表示された sub view を持っていて,それを切り出して表示してるはず。そいつを見つけて ScrollView の sub view にしてやればいけるんじゃないのか?
問題の view はどうやら [[[WebView mainFrame] frameView] documentView] で取得できるやつらしい。
こいつをたとえば aView として,[[scrollView contentView] setDocumentView:aView] って感じでどうだ?
しか〜し,setDocumentView してしまうと,元の super view からの参照は切られてしまうのか?
レンダリングするとエラーが出てしまう。
ちなみにエラーから,問題の view は WebHTMLView らしいことが分かった。
だけどこれ,仕様が公開されてないみたい。
WebFrameView の ドキュメントの documentView の説明でも型は NSView ってことで誤魔化されてる。
これに直接アクセスできたら便利そうなのに・・・ 。
この view を毎回コピーして ScrollView の sub view にすることも考えたけど,WebHTMLView は copy に対応してないらしい・・・
など,試した結果,あえなく玉砕・・・。
で,いろいろありましたが,
NSView *HTMLView = [[[WebView mainFrame] frameView] documentView]
で取得した view に対して,レンダリング開始時に
NSRect aRect = [HTMLView visibleRect]
で表示されてる領域を取得しておいて,レンダリング完了時に [HTMLView scrollRectToVisible:aRect] でその場所に移動,というやり方で解決できました。
結局,上の 1. と近いやり方になりました。
実はこれやると,レンダリングのたびにいったんページ・トップに戻ってから下りてきて,カクカクするんじゃないかと思ってたんだけど,実際やってみるとそういうこともなく,期待通りの動作になってます。
できてみれば,こんなことなら早くやっとけばよかった,って感じかな。
Fixed Problems
これまであった問題のいくつかは解決されました。
- レンダリングするたびに,ページのトップに戻る
上記のように解決されました。
- "Stop Loading" の挙動がおかしい。
これまで挙動がおかしかったように見えたのは,spinning indicator を止めてなかっただけ?
大改装のときに切れてたメニュー・アクションをつなぎ直すと,あっさり機能しました。
マルチ・スレッド化は関係なかったかも・・・というか,自動的にマルチ・スレッドになってるのかな。
March 14, 2004:
SiteSampler Ver1.0α5 公開です。
今回は,ファイルのドラッグ&ドロップに対応しました。
これは NSApplication の delegate method である application: openFile: を delegate してやることで対応できました。
ファイルをアプリにドロップして起動させることも,起動中のアプリにドロップして読み込ませることもできます。
ファイル・タイプは .html (と .htm も) のみ対応。
OS の方で設定すれば,ファイルをダブル・クリックしても同様の効果が得られるはずです。
未確認ですが,OS の機能ですからきっとできるのでしょう 。
オープン&セーブ・ダイアログはシートをやめてモーダル・ウィンドウに変更しました。
今後の展開を見据えてのことです。
それから,File > New メニューが機能するようにしました。
とはいっても,実際には editor ウィンドウの内容がクリアされるだけです。
前回分と併せて,File メニュー中の New/Open/Save は,動作としては Clear/Import/Export というニュアンスです。
我ながら,ちょっとは使い物になってきたかな?・・・と思わないでもない今日この頃。
February 27, 2004:
SiteSampler Ver1.0α4 公開です。
え? α に後退してるじゃないかって?
今回から β はやめて α に戻すことにします (^^;
大変更もしちゃったし,そのせいもあってまだ仕様も固まってなくて,これからもいろいろ変わるかもしれないので・・・。
今までのも α だったということにしといてください (^^
今回の主変更は,Editor の HTML テキストのオープン&セーブが可能になったこと。
ただしあくまで,HTML ファイルをドキュメントとして開いているわけではありません。
オープンはファイル内容を Editor ウィンドウへ読み込む,セーブは,ウィンドウの内容をファイルに書き出す,という動作。
なので import & export という方がニュアンスが近いかも。
ウィンドウ・タイトル・バーに出ているパスは,セーブ時に書き出す予定のパス,という程度の意味しかありません。
なのでウィンドウの内容がファイル内容と一致してるとは限りません。
たとえば,アプリ終了時はウィンドウの内容が記憶されてて,再起動したとき元ファイルが変更されていたとしても自動的には反映されません。
あと,テキストが編集されるとウィンドウのクローズ・ボタンにぽっちがつくとか,変更を加えた後にファイルをオープンしようとすると警告が出るとかいう機能も実装できてません。
使いたい人はお気をつけて・・・。
ただ,まだ不完全ではありますが,これで実用度は Ver.1.0α2 と同レベルには回復したんではないでしょうか。
複数ファイルを編集できないけど,それは仕様だし。
あ,ファイルをアプリにドラッグして開けないのは問題かも。
それから,オートインデント機能もつけました。
Edit > Auto Indentation メニューで on/off できます。
editor は単なる NSTextView だったのをサブクラス化して,keyDown: をオーバーライドしてリターンキーの入力に反応するようにしました。
もひとつ,以前からの問題の1つ,base URL に "http://" で始まらないパスを指定するとおかしくなるが解決!
WebKit のサンプルとしてついてくる SnippetEditor でも TextView の内容をレンダリングしてるので,そのソース・コードを覗いてみて何が悪かったのかなんとなく分かってきた。
レンダリングがおかしいわけではなくて,base URL が不正な場合はエラーとみなされてレンダリングしてくれないらしい。
どっか行きっぱなしに見えてたのは,spinning indicator を止めてなかっただけ。
本当は webView: didFailLoadWithError: forFrame: とか webView: didFailProvisionalLoadWithError: forFrame: を実装してエラーを検出して止めないといけなかったらしい。
というわけでその辺を実装。
ついでにエラーを検出した場合は ウィンドウのタイトル・バーに表示するようにしました 。
で,いろいろ試してみたところ,base URL の (妙な) 挙動が分かってきた。
まず,"http://" ではじまる分には問題ない。
指定したパスに他のファイルがあれば認識してくれるし,パスがでたらめでも無視されるだけ。
ところが "file://" ではじまるときは,ちゃんと存在するパスじゃないと受け付けてくれない。
しかもディレクトリ名だけじゃなくてファイル名まで必要らしい。
ただし指定したファイルの内容が反映されるわけじゃないし,html じゃないぜんぜん関係ないファイルでもいいみたい。
とにかく実在するファイルのパスを (ファイル名まで) 指定しないといけない。
とにかく,使う人はその辺も気をつけてください。
Fixed Problems
これまであった問題のいくつかは解決されました。
- オープンできるファイルが拡張子で制限されてる。
え〜と,そういう仕様にすることにしました。
わざわざこのアプリで HTML 以外のファイルを開く必要なんてないもんね。
でも shtml とか,他のファイルも開きたいっていう要望があれば対処はします (・・・と思います)。
February 19, 2004:
SiteSampler Ver1.0β3 公開です。
今回から Document-Based Application やめました 。
今バージョンから editor と viewer はアプリに1つずつのみ存在します。
当然,複数のファイルを同時に編集することはできません。
今のところファイルのオープン&セーブもサポートしてませんので,実用度は 1.0β2 より下がってます (^^;
その代わり (?),editor と viewer もウィンドウ情報を覚えるようになりました。
editor ウィンドウの内容も覚えます。
キーボード・ショートカットも若干変わっていますので,気をつけてください・・・。
僕としては,こっちの方がアプリとして分かりやすく,シンプルになってると思ってます。
が,どうしても Document-Based の方がいいという方がもしいれば,早めに申し出てください。
今ならまだ間に合う・・・かも (^^
今回も,あまりチェックもできてないので,使いたい人はお気をつけて・・・
January 14, 2004:
SiteSampler Ver1.0β2 公開です。
かなり久々の更新ですが,たいして変わってません (^^;
今回変わったところといえば,前回実装した,各ウィンドウが位置・サイズや内容を覚える,というやつを他のウィンドウにも適用させたことぐらい。
例外は editor と viewer ぐらいかな。
こいつらはドキュメント絡みですからね,うかつに覚えさせられません (?)。
ちなみに,Preferences Panel をモーダルにするのもやめました。
あまりチェックもできてないので,使いたい人はお気をつけて・・・ (^^;
December 4, 2003:
アイコンつくってみました。
いよいよアプリらしくなってきましたね。
というわけで,今回から β にします 。
SiteSampler Ver1.0β1 公開です。
今回は Template 機能をつけました。
機能的には,レンダリングの際に本文の前後に挿入する文字列を登録しておくだけです。
on/off の切り替えとか,セーブ/ロードとかできるともっと便利かもね・・・
これにどんな意味があるかというと・・・。
以前にも書いたように,今のところ SiteSampler はページ全体を記述するには難があるわけで,日記なんかの1回分とか書く時に使うっていうのが生きる道かなと最近思ってます。
なのでその枠の部分をごっそりテンプレートに持たせられると分かりやすいかなと思ってます。
ただ,ドキュメントとテンプレートの関係とか,ショートカットキーは誰が受けるのかとか,アプリとしてちょっと分かりにくくなってるかなとも思ったり・・・
ちなみに Template Window はアプリを終了しても位置・サイズ・内容を覚えています。
位置とサイズは NSWindow の saveFrameUsingName: と setFrameUsingName: メソッドを使えば意外と簡単でした。
今後,他のウィンドウにも適用していく予定 (Insert Tag Palette には部分的に適用済み)。
Fixed Problems
これまであった問題のいくつかは解決されました。
- Preferences パネルの Default Base URL で指定した URL が Viewer ウィンドウの Base URL 欄に表示されない。
NSViewWindowController で awakeFromNib でBase URL を表示させるようにして解決。
Workshop Cocam, 2003
