Changeset 2180
- Timestamp:
- 12/30/04 22:55:01 (4 years ago)
- Files:
-
- trunk/JVChatTranscript.m (modified) (1 diff)
- trunk/JVMarkedScroller.h (modified) (1 diff)
- trunk/JVMarkedScroller.m (modified) (6 diffs)
- trunk/Languages/Dutch.lproj/Colloquy.nib/classes.nib (modified) (2 diffs)
- trunk/Languages/Dutch.lproj/Colloquy.nib/info.nib (modified) (1 diff)
- trunk/Languages/Dutch.lproj/Colloquy.nib/keyedobjects.nib (modified) (previous)
- trunk/Languages/English.lproj/Colloquy.nib/classes.nib (modified) (2 diffs)
- trunk/Languages/English.lproj/Colloquy.nib/info.nib (modified) (1 diff)
- trunk/Languages/English.lproj/Colloquy.nib/keyedobjects.nib (modified) (previous)
- trunk/Languages/German.lproj/Colloquy.nib/classes.nib (modified) (2 diffs)
- trunk/Languages/German.lproj/Colloquy.nib/info.nib (modified) (1 diff)
- trunk/Languages/German.lproj/Colloquy.nib/keyedobjects.nib (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/JVChatTranscript.m
r2163 r2180 670 670 else if( ! [[NSUserDefaults standardUserDefaults] boolForKey:@"MVChatIgnoreColors"] && [[toolbarItem itemIdentifier] isEqualToString:NSToolbarShowColorsItemIdentifier] ) return YES; 671 671 return YES; 672 } 673 674 #pragma mark - 675 #pragma mark Highlight Jumping 676 677 - (IBAction) jumpToPreviousHighlight:(id) sender { 678 JVMarkedScroller *scroller = (JVMarkedScroller *)[[[[[display mainFrame] frameView] documentView] enclosingScrollView] verticalScroller]; 679 if( [scroller isMemberOfClass:[JVMarkedScroller class]] ) 680 [scroller jumpToPreviousMark:sender]; 681 } 682 683 - (IBAction) jumpToNextHighlight:(id) sender { 684 JVMarkedScroller *scroller = (JVMarkedScroller *)[[[[[display mainFrame] frameView] documentView] enclosingScrollView] verticalScroller]; 685 if( [scroller isMemberOfClass:[JVMarkedScroller class]] ) 686 [scroller jumpToNextMark:sender]; 672 687 } 673 688 trunk/JVMarkedScroller.h
r2177 r2180 3 3 NSMutableSet *_marks; 4 4 NSMutableArray *_shades; 5 unsigned long long _nearestPreviousMark; 6 unsigned long long _nearestNextMark; 7 unsigned long long _currentMark; 8 BOOL _jumpingToMark; 5 9 } 10 - (IBAction) jumpToPreviousMark:(id) sender; 11 - (IBAction) jumpToNextMark:(id) sender; 12 6 13 - (void) shiftMarksAndShadedAreasBy:(long long) displacement; 7 14 trunk/JVMarkedScroller.m
r2177 r2180 6 6 _marks = [[NSMutableSet set] retain]; 7 7 _shades = [[NSMutableArray array] retain]; 8 _nearestPreviousMark = NSNotFound; 9 _nearestNextMark = NSNotFound; 10 _currentMark = NSNotFound; 8 11 } 9 12 return self; … … 20 23 } 21 24 25 #pragma mark - 26 22 27 - (void) drawRect:(NSRect) rect { 23 NSEraseRect( rect );24 28 [super drawRect:rect]; 25 29 … … 27 31 float width = [[self class] scrollerWidthForControlSize:[self controlSize]]; 28 32 29 NSRect clip = NSInsetRect( [self rectForPart:NSScrollerKnobSlot], ( sFlags.isHoriz ? 6. : 0. ), ( sFlags.isHoriz ? 0. : 6. ) ); 30 float scale = NSHeight( clip ) / ( NSHeight( [self frame] ) / [self knobProportion] ); 33 float scale = NSHeight( [self rectForPart:NSScrollerKnobSlot] ) / ( NSHeight( [self frame] ) / [self knobProportion] ); 31 34 [transform scaleXBy:( sFlags.isHoriz ? scale : 1. ) yBy:( sFlags.isHoriz ? 1. : scale )]; 32 35 33 float offset = [self rectForPart:NSScrollerKnobSlot].origin.y + 6.;36 float offset = [self rectForPart:NSScrollerKnobSlot].origin.y; 34 37 [transform translateXBy:( sFlags.isHoriz ? offset / scale : 0. ) yBy:( sFlags.isHoriz ? 0. : offset / scale )]; 35 38 36 clip = NSInsetRect( [self rectForPart:NSScrollerKnobSlot], ( sFlags.isHoriz ? 0. : 3. ), ( sFlags.isHoriz ? 3. : 0. ) ); 37 NSRectClip( clip ); 39 NSRectClip( NSInsetRect( [self rectForPart:NSScrollerKnobSlot], ( sFlags.isHoriz ? 0. : 3. ), ( sFlags.isHoriz ? 3. : 0. ) ) ); 38 40 39 41 NSBezierPath *shades = [NSBezierPath bezierPath]; … … 73 75 [shades fill]; 74 76 75 clip = NSInsetRect( [self rectForPart:NSScrollerKnobSlot], ( sFlags.isHoriz ? 4. : 3. ), ( sFlags.isHoriz ? 3. : 4. ) ); 76 NSRectClip( clip ); 77 NSRectClip( NSInsetRect( [self rectForPart:NSScrollerKnobSlot], ( sFlags.isHoriz ? 4. : 3. ), ( sFlags.isHoriz ? 3. : 4. ) ) ); 77 78 78 79 NSBezierPath *lines = [NSBezierPath bezierPath]; 79 80 enumerator = [_marks objectEnumerator]; 80 81 82 unsigned long long currentPosition = ( _currentMark != NSNotFound ? _currentMark : [self floatValue] * ( NSHeight( [self frame] ) / [self knobProportion] ) ); 83 BOOL foundNext = NO, foundPrevious = NO; 84 NSRect knobRect = [self rectForPart:NSScrollerKnob]; 85 81 86 while( ( startNum = [enumerator nextObject] ) ) { 82 NSPoint point = NSMakePoint( ( sFlags.isHoriz ? [startNum unsignedLongLongValue] : 0. ), ( sFlags.isHoriz ? 0. : [startNum unsignedLongLongValue] ) ); 87 unsigned long long value = [startNum unsignedLongLongValue]; 88 89 if( value < currentPosition && ( ! foundPrevious || value > _nearestPreviousMark ) ) { 90 _nearestPreviousMark = value; 91 foundPrevious = YES; 92 } 93 94 if( value > currentPosition && ( ! foundNext || value < _nearestNextMark ) ) { 95 _nearestNextMark = value; 96 foundNext = YES; 97 } 98 99 NSPoint point = NSMakePoint( ( sFlags.isHoriz ? value : 0. ), ( sFlags.isHoriz ? 0. : value ) ); 83 100 point = [transform transformPoint:point]; 84 101 point.x = ( sFlags.isHoriz ? roundf( point.x ) + 0.5 : point.x ); 85 102 point.y = ( sFlags.isHoriz ? point.y : roundf( point.y ) + 0.5 ); 86 103 87 [lines moveToPoint:point]; 88 89 point = NSMakePoint( ( sFlags.isHoriz ? 0. : width ), ( sFlags.isHoriz ? width : 0. ) ); 90 [lines relativeLineToPoint:point]; 91 } 104 if( ! NSPointInRect( point, knobRect ) ) { 105 [lines moveToPoint:point]; 106 107 point = NSMakePoint( ( sFlags.isHoriz ? 0. : width ), ( sFlags.isHoriz ? width : 0. ) ); 108 [lines relativeLineToPoint:point]; 109 } 110 } 111 112 if( ! foundPrevious ) _nearestPreviousMark = NSNotFound; 113 if( ! foundNext ) _nearestNextMark = NSNotFound; 92 114 93 115 [[NSColor selectedKnobColor] set]; 94 116 [lines stroke]; 95 96 [self drawKnob];97 117 } 98 118 99 119 - (void) setFloatValue:(float) position knobProportion:(float) percent { 120 if( ! _jumpingToMark ) _currentMark = NSNotFound; 100 121 [self setNeedsDisplayInRect:[self rectForPart:NSScrollerKnobSlot]]; 101 122 [super setFloatValue:position knobProportion:percent]; … … 128 149 } 129 150 151 [menu addItem:[NSMenuItem separatorItem]]; 152 153 item = [[[NSMenuItem alloc] initWithTitle:NSLocalizedString( @"Jump to Previous Mark", "jump to previous mark contextual menu") action:@selector( jumpToPreviousMark: ) keyEquivalent:@"["] autorelease]; 154 [item setTarget:self]; 155 [menu addItem:item]; 156 157 item = [[[NSMenuItem alloc] initWithTitle:NSLocalizedString( @"Jump to Next Mark", "jump to next mark contextual menu") action:@selector( jumpToNextMark: ) keyEquivalent:@"]"] autorelease]; 158 [item setTarget:self]; 159 [menu addItem:item]; 160 130 161 return menu; 131 162 } 163 164 #pragma mark - 132 165 133 166 - (IBAction) clearMarksHereLess:(id) sender { 134 167 NSEvent *event = [[NSApplication sharedApplication] currentEvent]; 135 168 NSPoint where = [self convertPoint:[event locationInWindow] fromView:nil]; 136 NSRect clip = NSInsetRect( [self rectForPart:NSScrollerKnobSlot], ( sFlags.isHoriz ? 6. : 0. ), ( sFlags.isHoriz ? 0. : 6. ) ); 137 float scale = NSHeight( clip ) / ( NSHeight( [self frame] ) / [self knobProportion] ); 169 float scale = NSHeight( [self rectForPart:NSScrollerKnobSlot] ) / ( NSHeight( [self frame] ) / [self knobProportion] ); 138 170 [self removeMarksLessThan:( ( sFlags.isHoriz ? where.x : where.y ) / scale )]; 139 171 } … … 142 174 NSEvent *event = [[NSApplication sharedApplication] currentEvent]; 143 175 NSPoint where = [self convertPoint:[event locationInWindow] fromView:nil]; 144 NSRect clip = NSInsetRect( [self rectForPart:NSScrollerKnobSlot], ( sFlags.isHoriz ? 6. : 0. ), ( sFlags.isHoriz ? 0. : 6. ) ); 145 float scale = NSHeight( clip ) / ( NSHeight( [self frame] ) / [self knobProportion] ); 176 float scale = NSHeight( [self rectForPart:NSScrollerKnobSlot] ) / ( NSHeight( [self frame] ) / [self knobProportion] ); 146 177 [self removeMarksGreaterThan:( ( sFlags.isHoriz ? where.x : where.y ) / scale )]; 178 } 179 180 #pragma mark - 181 182 - (IBAction) jumpToPreviousMark:(id) sender { 183 if( _nearestPreviousMark != NSNotFound ) { 184 _currentMark = _nearestPreviousMark; 185 _jumpingToMark = YES; 186 float scale = NSHeight( [self rectForPart:NSScrollerKnobSlot] ) / ( NSHeight( [self frame] ) / [self knobProportion] ); 187 float shift = ( NSHeight( [self rectForPart:NSScrollerKnob] ) / 2. ) / scale; 188 [[(NSScrollView *)[self superview] documentView] scrollPoint:NSMakePoint( 0., _nearestPreviousMark - shift )]; 189 _jumpingToMark = NO; 190 } 191 } 192 193 - (IBAction) jumpToNextMark:(id) sender { 194 if( _nearestNextMark != NSNotFound ) { 195 _currentMark = _nearestNextMark; 196 _jumpingToMark = YES; 197 float scale = NSHeight( [self rectForPart:NSScrollerKnobSlot] ) / ( NSHeight( [self frame] ) / [self knobProportion] ); 198 float shift = ( NSHeight( [self rectForPart:NSScrollerKnob] ) / 2. ) / scale; 199 [[(NSScrollView *)[self superview] documentView] scrollPoint:NSMakePoint( 0., _nearestNextMark - shift )]; 200 _jumpingToMark = NO; 201 } 147 202 } 148 203 trunk/Languages/Dutch.lproj/Colloquy.nib/classes.nib
r2163 r2180 4 4 ACTIONS = { 5 5 bold = id; 6 clearDisplay = id; 6 7 closeCurrentPanel = id; 7 8 detachCurrentPanel = id; … … 9 10 italic = id; 10 11 joinRoom = id; 12 jumpToNextHighlight = id; 13 jumpToPreviousHighlight = id; 11 14 newConnection = id; 12 15 selectNextActivePanel = id; trunk/Languages/Dutch.lproj/Colloquy.nib/info.nib
r2163 r2180 4 4 <dict> 5 5 <key>IBDocumentLocation</key> 6 <string> 69 78 356 240 0 0 1280 832</string>6 <string>74 98 356 240 0 0 1344 986 </string> 7 7 <key>IBEditorPositions</key> 8 8 <dict> 9 9 <key>29</key> 10 <string> 368 614 468 44 0 0 1280 832</string>10 <string>215 828 468 44 0 0 1344 986 </string> 11 11 </dict> 12 12 <key>IBFramework Version</key> 13 <string>36 2.0</string>13 <string>364.0</string> 14 14 <key>IBOpenObjects</key> 15 15 <array> trunk/Languages/English.lproj/Colloquy.nib/classes.nib
r1566 r2180 4 4 ACTIONS = { 5 5 bold = id; 6 clearDisplay = id; 6 7 closeCurrentPanel = id; 7 8 detachCurrentPanel = id; … … 9 10 italic = id; 10 11 joinRoom = id; 12 jumpToNextHighlight = id; 13 jumpToPreviousHighlight = id; 11 14 newConnection = id; 12 15 selectNextActivePanel = id; trunk/Languages/English.lproj/Colloquy.nib/info.nib
r1566 r2180 4 4 <dict> 5 5 <key>IBDocumentLocation</key> 6 <string> 69 78 356 240 0 0 1280 832</string>6 <string>150 118 356 240 0 0 1344 986 </string> 7 7 <key>IBEditorPositions</key> 8 8 <dict> 9 9 <key>29</key> 10 <string>3 68 614 366 44 0 0 1280 832</string>10 <string>31 715 366 44 0 0 1344 986 </string> 11 11 </dict> 12 12 <key>IBFramework Version</key> 13 13 <string>364.0</string> 14 <key>IBOpenObjects</key> 15 <array> 16 <integer>29</integer> 17 </array> 14 18 <key>IBSystem Version</key> 15 <string>7 H63</string>19 <string>7S215</string> 16 20 </dict> 17 21 </plist> trunk/Languages/German.lproj/Colloquy.nib/classes.nib
r2114 r2180 4 4 ACTIONS = { 5 5 bold = id; 6 clearDisplay = id; 6 7 closeCurrentPanel = id; 7 8 detachCurrentPanel = id; … … 9 10 italic = id; 10 11 joinRoom = id; 12 jumpToNextHighlight = id; 13 jumpToPreviousHighlight = id; 11 14 newConnection = id; 12 15 selectNextActivePanel = id; trunk/Languages/German.lproj/Colloquy.nib/info.nib
r2114 r2180 4 4 <dict> 5 5 <key>IBDocumentLocation</key> 6 <string> 69 78 356 240 0 0 1280 832</string>6 <string>74 98 356 240 0 0 1344 986 </string> 7 7 <key>IBEditorPositions</key> 8 8 <dict> 9 9 <key>29</key> 10 <string> 368 614 366 44 0 0 1280 832</string>10 <string>84 828 482 44 0 0 1344 986 </string> 11 11 </dict> 12 12 <key>IBFramework Version</key> 13 13 <string>364.0</string> 14 <key>IBOpenObjects</key> 15 <array> 16 <integer>29</integer> 17 </array> 14 18 <key>IBSystem Version</key> 15 <string>7 R28</string>19 <string>7S215</string> 16 20 </dict> 17 21 </plist>
