2 // ElisPropertyTableController.m
5 // Created by 柳 on 09/09/15.
6 // Copyright 2009 __MyCompanyName__. All rights reserved.
9 #import "ElisPropertyTableController.h"
12 @implementation ElisPropertyTableController
16 effects = [[NSMutableArray alloc] init];
17 propertyNames = [[NSMutableArray alloc] init];
18 valueNames = [[NSMutableArray alloc] init];
21 - (void)createPropertyTable:(ElisLayer*)layer
23 interestLayer = layer;
25 [effects removeAllObjects];
26 [propertyNames removeAllObjects];
27 [valueNames removeAllObjects];
29 [layer createPropertyTableDataSource:effects property:propertyNames value:valueNames];
32 - (int)numberOfRowsInTableView:(NSTableView*)aTableView
34 return [effects count];
37 - (id)tableView:(NSTableView *)tableView
38 objectValueForTableColumn:(NSTableColumn*)aTableColumn
42 NSString* propertyName = [propertyNames objectAtIndex:rowIndex];
43 QTTime localCurrentTime = [interestLayer convertToInnnerTime:globalCurrentTime];
46 if([[aTableColumn identifier] isEqualToString:@"slider"]){
47 if([propertyName isEqualToString:@"Position X"]){
48 p = [[effects objectAtIndex:rowIndex] getPositionForTime:localCurrentTime];
49 return [NSNumber numberWithFloat:0.5 + (float)p.x/(2.0*ProjectMovieSize.size.width)];
50 } else if([propertyName isEqualToString:@"Position Y"]){
51 p = [[effects objectAtIndex:rowIndex] getPositionForTime:localCurrentTime];
52 return [NSNumber numberWithFloat:0.5 + (float)p.y/(2.0*ProjectMovieSize.size.height)];
54 return [NSNumber numberWithFloat:[[effects objectAtIndex:rowIndex]
55 getEffectValue:[valueNames objectAtIndex:rowIndex]
56 forTime:localCurrentTime]];
61 if([[aTableColumn identifier] isEqualToString:@"number"]){
62 if([propertyName isEqualToString:@"Position X"]){
63 p = [[effects objectAtIndex:rowIndex] getPositionForTime:localCurrentTime];
64 return [NSNumber numberWithFloat:p.x];
65 } else if([propertyName isEqualToString:@"Position Y"]){
66 p = [[effects objectAtIndex:rowIndex] getPositionForTime:localCurrentTime];
67 return [NSNumber numberWithFloat:p.y];
69 return [NSNumber numberWithFloat:[[effects objectAtIndex:rowIndex]
70 getEffectTrueValue:[valueNames objectAtIndex:rowIndex]
71 forTime:localCurrentTime]];
79 // slider cellの変更通知を受け取るところ。一括処理。
80 - (IBAction)sliderChanged:(id)sender
82 NSString* propertyName;
83 QTTime localCurrentTime;
85 int i = [_propertyView selectedRow];
86 NSString* name = [propertyNames objectAtIndex:i];
89 localCurrentTime = [interestLayer convertToInnnerTime:globalCurrentTime];
91 localCurrentTime = QTZeroTime;
94 if([name isEqualToString:@"Position X"]){
95 // p = [[effects objectAtIndex:i] getPositionForTime:localCurrentTime];
96 x = [sender floatValue] * 2.0 * ProjectMovieSize.size.width - ProjectMovieSize.size.width;
97 // [[effects objectAtIndex:i] setPosition:p forTime:localCurrentTime];
98 [[effects objectAtIndex:i] setPositionX:x forTime:localCurrentTime];
99 } else if([name isEqualToString:@"Position Y"]){
100 // p = [[effects objectAtIndex:i] getPositionForTime:localCurrentTime];
101 y = [sender floatValue] * 2.0 * ProjectMovieSize.size.height - ProjectMovieSize.size.height;
102 [[effects objectAtIndex:i] setPositionY:y forTime:localCurrentTime];
104 [[effects objectAtIndex:i] setEffectValueForTime:[valueNames objectAtIndex:i]
105 value:[sender floatValue] time:localCurrentTime];
108 [_mainController refresh];
109 [_timeLineController updateKeyframeLayer];
110 // [_propertyView reloadData];
115 [_propertyView reloadData];
118 - (float)getSelectedValueForTime:(float)time
120 // QTTime now = QTMakeTime(time*DEFAULT_FPS/timeLineScale, DEFAULT_FPS);
121 QTTime now = [interestLayer plusOffsetTime:QTMakeTime(time*DEFAULT_FPS/timeLineScale, DEFAULT_FPS)];
122 // int _rowIndex = [_propertyView selectedRow];
125 if([[propertyNames objectAtIndex:_rowIndex] isEqualToString:@"Position X"]){
126 p = [[effects objectAtIndex:_rowIndex] getPositionForTime:now];
127 return 0.5 + (float)p.x/(2.0*ProjectMovieSize.size.width);
130 if([[propertyNames objectAtIndex:_rowIndex] isEqualToString:@"Position Y"]){
131 p = [[effects objectAtIndex:_rowIndex] getPositionForTime:now];
132 return 0.5 + (float)p.y/(2.0*ProjectMovieSize.size.height);
135 return [[effects objectAtIndex:_rowIndex] getEffectValue:[valueNames objectAtIndex:_rowIndex] forTime:now];
140 return [_propertyView selectedRow] != -1;
144 -(BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(int)rowIndex
146 _rowIndex = rowIndex;
147 [_timeLineController updateKeyframeLayer];
151 - (void)removeAllKeyframe
153 int index = [_propertyView selectedRow];
157 [interestLayer removePositionXKeyframe];
159 [interestLayer removePositionYKerframe];
163 [[effects objectAtIndex:index] removeKeyframe:[valueNames objectAtIndex:index]];
165 [_timeLineController updateKeyframeLayer];
171 int index = [_propertyView selectedRow];
174 if(index <= 2) return;
175 [interestLayer removeEffect:[effects objectAtIndex:index]];
176 [self createPropertyTable:interestLayer];
178 [_timeLineController updateKeyframeLayer];