Archive for the ‘NSProgressIndicator’ Category

重い処理などを行う場合に、進捗を表示するのに便利なGUI部品。
NSProgressIndicatorです。

#私の環境はOS 10.4のため、10.5から追加されたオブジェクト等は一切使いません(使えません。。。)

Cocoaを触り始めたころは、IBOutletでProgressIndicatorにつないで、
直接、数値を渡すとかやってました。
非常にスマートではない。。。
せっかくBindingを用意してあるのなら使ってみないとということで挑戦しました。

やり方を2つの方法でやってみました。

1つ目は、ProgressIndicator用のDictionaryを用意して、
keyは適当につけて、valueにNSNumberのオブジェクトをセットし、
NSObjectControllerにそのDictionaryをBindingしてと言う感じで
NSObjectControllerとNSProgressIndicatorをBindingでつなぐという方法。

コード的には、こんな感じ

  1. //NSProgressIndicatorが配置されているWindowControllerの中にNSDictionaryを宣言
  2.  
  3. //AWindowController.h
  4. @interface AWindowController : NSWindowController{
  5. NSMutableDictionary * progressIndicatorDictionary;
  6. }
  7.  
  8. -(IBAction)progressIndicatorStart:(id)sender;
  9.  
  10.  
  11. //AWindowController.m
  12. @implementation AWindowController
  13.  
  14. -(id)init{
  15. self = [ self initWithWindowNibName:@"AWindow" ];
  16. if( self != nil ){
  17. progressIndicatorDictionary = [ [ NSMutableDictionary dictionary ] retain ];
  18. }
  19.  
  20. return self;
  21. }
  22.  
  23. -(void)dealloc{
  24. [ progressIndicatorDictionary release ];
  25. [ super release ];
  26. }
  27.  
  28. -(void)awakeFromNib{
  29. [ self initProgressIndicatorDictionary ];
  30. }
  31.  
  32. //NSProgressIndicator用Dictionaryの初期化
  33. -(void)initProgressIndicatorDictionary{
  34. //最大値
  35. [ progressIndicatorDictionary setValue:[ NSNumber numerWithDouble:100.0 ] forKey:@"maxValue" ];
  36. //最小値
  37. [ progressIndicatorDictionary setValue:[ NSNumber numerWithDouble:0.0 ] forKey:@"minValue" ];
  38. //現在の値
  39. [ progressIndicatorDictionary setValue:[ NSNumber numerWithDouble:0.0 ] forKey:@"doubleValue" ];
  40. //他のBinding項目はそのまま
  41. //設定する場合は、BOOL値のNSNumberで設定してあげる
  42. }
  43.  
  44. -(IBAction)progressIndicatorStart:(id)sender{
  45. //ループを回すだけ
  46. int i;
  47. for( i = 0; i <= 100; i++ ){
  48. //現在の値を更新
  49. [ progressIndicatorDictionary setValue:[ NSNumber numberWithInt:i ] forKey:@"doubleValue" ];
  50. }
  51. }

もう一つの方法は次回