This is SD_PageLayout.m in view mode; [Download] [Up]
//=============================================================================
//
// Copyright (C) 1996-1997 by Paul S. McCarthy and Eric Sunshine.
// Written by Paul S. McCarthy and Eric Sunshine.
// All Rights Reserved.
//
// This notice may not be removed from this source code.
//
// This object is included in the MiscKit by permission from the authors
// and its use is governed by the MiscKit license, found in the file
// "License.rtf" in the MiscKit distribution. Please refer to that file
// for a list of all applicable permissions and restrictions.
//
//=============================================================================
//-----------------------------------------------------------------------------
// SD_PageLayout.m
//
// Custom subclass of NeXT's appkit PageLayout panel that adds
// user controls for:
//
// Margins
// Pagination
// Centering
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// $Id: SD_PageLayout.m,v 1.2 97/04/15 22:20:11 sunshine Exp $
// $Log: SD_PageLayout.m,v $
// Revision 1.2 97/04/15 22:20:11 sunshine
// 29.3: Ported to OPENSTEP 4.2 prerelease for Windows NT by working around
// incompatiblities between Mach and NT NSPageLayout implementations.
//
// Revision 1.1 97/03/21 18:32:22 sunshine
// v28: Page layout panel.
//-----------------------------------------------------------------------------
#import "SD_PageLayout.h"
#import <AppKit/NSApplication.h>
#import <AppKit/NSButton.h>
#import <AppKit/NSMatrix.h>
#import <AppKit/NSPrintInfo.h>
#import <AppKit/NSTextField.h>
#import <Foundation/NSBundle.h>
@implementation SD_PageLayout
//-----------------------------------------------------------------------------
// loadAccessoryView
//-----------------------------------------------------------------------------
- (void)loadAccessoryView
{
NSView* v;
[NSBundle loadNibNamed:@"SD_PageLayout" owner:self];
v = [[[accessoryWindow contentView] retain] autorelease];
[accessoryWindow setContentView:0];
[accessoryWindow close];
[accessoryWindow release];
[self setAccessoryView:v];
}
//-----------------------------------------------------------------------------
// pageLayout
//-----------------------------------------------------------------------------
+ (NSPageLayout*)pageLayout
{
static id p = 0;
if (p == 0)
{
p = [[super pageLayout] retain];
[p loadAccessoryView];
}
return p;
}
//-----------------------------------------------------------------------------
// launch:
//-----------------------------------------------------------------------------
+ (void)launch:(id)sender
{
[SD_PageLayout pageLayout];
[NSApp runPageLayout:sender];
}
//-----------------------------------------------------------------------------
// convertOldFactor:newFactor:
// Missing from OPENSTEP for Windows, so dummy one up.
//-----------------------------------------------------------------------------
#ifdef __WIN32__
- (void)convertOldFactor:(float*)old_factor newFactor:(float*)new_factor
{
if (old_factor != 0) *old_factor = 1.0;
if (new_factor != 0) *new_factor = 1.0;
}
#endif
//-----------------------------------------------------------------------------
// pickedUnits:
//-----------------------------------------------------------------------------
- (void)pickedUnits:(id)sender
{
float old_factor, new_factor, scaler;
[self convertOldFactor:&old_factor newFactor:&new_factor];
scaler = new_factor / old_factor;
[leftMarginField setFloatValue:[leftMarginField floatValue] * scaler];
[rightMarginField setFloatValue:[rightMarginField floatValue] * scaler];
[topMarginField setFloatValue:[topMarginField floatValue] * scaler];
[bottomMarginField setFloatValue:[bottomMarginField floatValue] * scaler];
#ifndef __WIN32__ // Missing from OPENSTEP for Windows.
[super pickedUnits:sender];
#endif
}
//-----------------------------------------------------------------------------
// pagination_to_slot
//-----------------------------------------------------------------------------
static int pagination_to_slot( int pg )
{
int slot = 1;
if (pg == NSFitPagination)
slot = 0;
else if (pg == NSClipPagination)
slot = 2;
return slot;
}
//-----------------------------------------------------------------------------
// slot_to_pagination
//-----------------------------------------------------------------------------
static int slot_to_pagination( int slot )
{
int pg = NSAutoPagination;
if (slot == 0)
pg = NSFitPagination;
else if (slot == 2)
pg = NSClipPagination;
return pg;
}
//-----------------------------------------------------------------------------
// readPrintInfo
//-----------------------------------------------------------------------------
- (void)readPrintInfo
{
NSPrintInfo* pinfo;
int pg_row, pg_col;
float left,right,top,bottom;
float old_factor, new_factor;
[super readPrintInfo];
pinfo = [self printInfo];
left = [pinfo leftMargin ];
right = [pinfo rightMargin ];
top = [pinfo topMargin ];
bottom = [pinfo bottomMargin];
[self convertOldFactor:&old_factor newFactor:&new_factor];
[leftMarginField setFloatValue:new_factor * left ];
[rightMarginField setFloatValue:new_factor * right ];
[topMarginField setFloatValue:new_factor * top ];
[bottomMarginField setFloatValue:new_factor * bottom];
[centerMatrix selectCellAtRow:(int)[pinfo isVerticallyCentered]
column:(int)[pinfo isHorizontallyCentered]];
pg_row = pagination_to_slot( [pinfo verticalPagination] );
pg_col = pagination_to_slot( [pinfo horizontalPagination] );
[paginationMatrix selectCellAtRow:pg_row column:pg_col];
}
//-----------------------------------------------------------------------------
// writePrintInfo
//-----------------------------------------------------------------------------
- (void)writePrintInfo
{
NSPrintInfo* pinfo;
float old_factor, new_factor;
[super writePrintInfo];
pinfo = [self printInfo];
[self convertOldFactor:&old_factor newFactor:&new_factor];
[pinfo setLeftMargin: [leftMarginField floatValue] / old_factor];
[pinfo setRightMargin: [rightMarginField floatValue] / old_factor];
[pinfo setTopMargin: [topMarginField floatValue] / old_factor];
[pinfo setBottomMargin:[bottomMarginField floatValue] / old_factor];
[pinfo setVerticallyCentered: [centerMatrix selectedRow ]];
[pinfo setHorizontallyCentered:[centerMatrix selectedColumn]];
[pinfo setHorizontalPagination:
slot_to_pagination([paginationMatrix selectedColumn])];
[pinfo setVerticalPagination:
slot_to_pagination([paginationMatrix selectedRow])];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.