mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-10-25 09:35:36 +00:00
nib2cib ignored the text view's Uses Ruler setting, and CPTextView, CPRulerView and CPRulerMarker archived none of their ruler state, so a ruler could not be configured in Interface Builder or survive archiving. * CPScrollView.j: Set itself as the scroll view of decoded rulers. * CPTextView/CPRulerMarker.j: Archive the marker's ruler, location, image and image origin, movability, removability and represented object. * CPTextView/CPRulerView.j: Archive the ruler's orientation, client view, accessory view, markers, thicknesses, origin offset and measurement units. * CPTextView/CPTextView.j: Archive usesRuler. * Tools/nib2cib/NSTextView.j, Tools/nib2cib/NSTextViewSharedData.j: Read the Uses Ruler flag. * Tests/AppKit/CPRulerViewTest.j: Add tests for ruler layout, measurement units, archiving and the Uses Ruler setting. * Tests/Manual/TextEditor/Resources/MainMenu.xib, Resources/MainMenu.cib: Add the standard Format menu, whose Text submenu shows and hides the ruler. * Tests/Manual/TextEditor/Resources/DocumentWindow.xib, Resources/DocumentWindow.cib: Rebuild the cib with the ruler setting, and adjust the window's initial position.
108 lines
3.6 KiB
Plaintext
108 lines
3.6 KiB
Plaintext
@import <AppKit/CPApplication.j>
|
|
@import <AppKit/CPRulerView.j>
|
|
@import <AppKit/CPScrollView.j>
|
|
@import <AppKit/CPTextView.j>
|
|
|
|
@implementation CPRulerViewTest : OJTestCase
|
|
{
|
|
CPScrollView scrollView;
|
|
CPRulerView ruler;
|
|
}
|
|
|
|
- (void)setUp
|
|
{
|
|
[[CPApplication alloc] init];
|
|
|
|
scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 200.0)];
|
|
[scrollView setHasHorizontalRuler:YES];
|
|
|
|
ruler = [scrollView horizontalRulerView];
|
|
}
|
|
|
|
- (id)roundTrip:(id)anObject
|
|
{
|
|
return [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:anObject]];
|
|
}
|
|
|
|
- (void)testRequiredThicknessCombinesTheRulerAreas
|
|
{
|
|
[ruler setRuleThickness:16.0];
|
|
[ruler setReservedThicknessForMarkers:9.0];
|
|
[ruler setReservedThicknessForAccessoryView:5.0];
|
|
|
|
[self assert:30.0 equals:[ruler requiredThickness]];
|
|
[self assert:14.0 equals:[ruler baselineLocation]];
|
|
}
|
|
|
|
- (void)testMeasurementUnitsAcceptOnlyRegisteredUnits
|
|
{
|
|
[ruler setMeasurementUnits:CPRulerViewUnitPoints];
|
|
[self assert:CPRulerViewUnitPoints equals:[ruler measurementUnits]];
|
|
|
|
[ruler setMeasurementUnits:@"Furlongs"];
|
|
[self assert:CPRulerViewUnitPoints equals:[ruler measurementUnits]];
|
|
|
|
[CPRulerView registerUnitWithName:@"Furlongs" abbreviation:@"fur" unitToPointsConversionFactor:570240.0 stepUpCycle:[2.0] stepDownCycle:[0.5]];
|
|
[ruler setMeasurementUnits:@"Furlongs"];
|
|
[self assert:@"Furlongs" equals:[ruler measurementUnits]];
|
|
}
|
|
|
|
- (void)testRulerViewArchiving
|
|
{
|
|
var marker = [[CPRulerMarker alloc] initWithRulerView:ruler markerLocation:42.0 image:nil imageOrigin:CGPointMake(4.0, 8.0)];
|
|
|
|
[marker setRemovable:YES];
|
|
[marker setRepresentedObject:@"Tab"];
|
|
|
|
[ruler setRuleThickness:18.0];
|
|
[ruler setReservedThicknessForMarkers:9.0];
|
|
[ruler setOriginOffset:7.0];
|
|
[ruler setMeasurementUnits:CPRulerViewUnitPicas];
|
|
[ruler setMarkers:[marker]];
|
|
|
|
var decodedScrollView = [self roundTrip:scrollView],
|
|
decodedRuler = [decodedScrollView horizontalRulerView],
|
|
decodedMarker = [[decodedRuler markers] firstObject];
|
|
|
|
[self assert:decodedScrollView equals:[decodedRuler scrollView] message:@"the scroll view should reconnect its decoded ruler"];
|
|
[self assert:CPHorizontalRuler equals:[decodedRuler orientation]];
|
|
[self assert:18.0 equals:[decodedRuler ruleThickness]];
|
|
[self assert:9.0 equals:[decodedRuler reservedThicknessForMarkers]];
|
|
[self assert:7.0 equals:[decodedRuler originOffset]];
|
|
[self assert:CPRulerViewUnitPicas equals:[decodedRuler measurementUnits]];
|
|
|
|
[self assert:42.0 equals:[decodedMarker markerLocation]];
|
|
[self assert:4.0 equals:[decodedMarker imageOrigin].x];
|
|
[self assert:8.0 equals:[decodedMarker imageOrigin].y];
|
|
[self assertTrue:[decodedMarker isMovable]];
|
|
[self assertTrue:[decodedMarker isRemovable]];
|
|
[self assert:@"Tab" equals:[decodedMarker representedObject]];
|
|
[self assert:decodedRuler equals:[decodedMarker ruler]];
|
|
}
|
|
|
|
- (void)testTextViewUsesRulerArchiving
|
|
{
|
|
var textView = [[CPTextView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 200.0)];
|
|
|
|
[self assertTrue:[textView usesRuler] message:@"a text view uses a ruler by default"];
|
|
|
|
[textView setUsesRuler:NO];
|
|
[self assertFalse:[[self roundTrip:textView] usesRuler]];
|
|
|
|
[textView setUsesRuler:YES];
|
|
[self assertTrue:[[self roundTrip:textView] usesRuler]];
|
|
}
|
|
|
|
- (void)testTextViewWithoutRulerCannotShowIt
|
|
{
|
|
var textView = [[CPTextView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 200.0)];
|
|
|
|
[scrollView setDocumentView:textView];
|
|
[textView setUsesRuler:NO];
|
|
[textView setRulerVisible:YES];
|
|
|
|
[self assertFalse:[textView isRulerVisible]];
|
|
}
|
|
|
|
@end
|