at_yasu's blog

ロード的なことを

NSView on NSCell

できたのでメモ書き



  • あらかじめ、InterfaceBuilderで表示させるTableの横幅と、表示させる中身の横幅を決めておく。なお、表示させる中身とTableは別々のNibファイルにしておく事。
  • NSCellを継承して、NSViewを保持するような仕組みを持たせる
  • NSTableColumnに、NSCellを継承させたオブジェクトを保持させる
  • NSTableViewのdataSource先では、「- (int) numberOfRowsInTableView:」「- (void) tableView:willDisplayCell:forTableColumn:row:」を実装させる。
  • 「- (void) tableView:willDisplayCell:forTableColumn:row:」の内部では、第二引数のNSCellが継承したオブジェクトなはずなので、「cell setView:」と言った感じでViewを入れる
  • NSCellの継承したオブジェクトで「drawWithFrame:inView:」をオーバーライドし、第一引数のNSRect型を保持しているNSViewのsetFrameで指定させ、第二引数のNSViewのメソッド「addSubview:」で保持しているNSViewを追加させる。


注意点

  • NSTableViewの更新が、パフォーマンスを理由に全てのCellを見に行かないらしい。つまり、[nstableview display]とやってもcellの中身までは更新しないっぽい。解決として、下記のような力技更新が必要みたい。ただ、明らかにパフォーマンスが遅くなるので注意。
  • CocoaBindingしか使ってなかったら泣きの涙。*1

*1:つか、何か良い方法ないかなー。CocoaBindingを自作できるほど技量ねぇし…

続きを読む

0.0.3.3 メモ書き その2

個人的なメモ書き

優先順位は上から。

  • HistryからMovieを起動した時に、DownloadPanelに残ってしまうバグ
  • 複数ダウンロードができない+ダウンロード中に他のMovieが再生できないバグ
  • ダウンロードしないバグ
    • 上記二つ解消
    • 上記一つは早急。私が不便だからと致命的過ぎる欠陥。もの凄いアホくさい事のような気がするんだよなぁ。NSURLDownloadをダウンロードしている最中に勝手にreleaseしてしまってる気がする。
  • Download panel を NSCollectionView ではなく、NSMatrixで実装必要あり鴨。*1
  • GCの削除*2
  • NSCollectionViewが、新たにアイテムが追加された時やWindowのResizeが起きると、表示が最上部に移動する。微妙に使いにくい仕様なので、どうにかしたい。
  • DownloadとPlayListを区別する必要有り。
    • 新たに興す。
    • Play List のDBは、現存とは別にする?*3
  • Histryに、playlistタブを追加はどう?
  • playlist loop の実装
  • 設定パネルの実装
  • Quotaの実装
    • 最大容量の設定(これは楽)
    • 最大容量を越す場合、聞いてないmovieから削除して、上書き。
  • Growl通知の実装*4

完成は…ダウンロードさえできれば、後は簡単なバグチェックだけでアルファにはいけるね。見えてきたかな。

*1:ViewにDownload statusを実装すれば解決かも

*2:不可能と判断。理由はこれ

*3:関連性を保ちたいから、どうにか同じにしたい。方法はあるはず

*4:安定してからね