ftp.nice.ch/Attic/openStep/developer/resources/MiscTableScroll.129.1.mw.s.gnutar.gz#/MiscKit2/Palettes/MiscTableScroll/Framework/MiscLineWrapper.h

This is MiscLineWrapper.h in view mode; [Download] [Up]

#ifndef __MiscLineWrapper_h
#define __MiscLineWrapper_h
#ifdef __GNUC__
#pragma interface
#endif
//=============================================================================
//
//	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.
//	
//=============================================================================
//-----------------------------------------------------------------------------
// MiscLineWrapper.h
//
//	A C++ object for calculating line breaks in text.
//
// NOTE *PARTIAL*
//	"Partial" lines are lines that do not fit completely within the 
//	height of the drawing rectangle.  For example, if you have 3 lines 
//	of text, but the drawing rectangle is only 2.5 lines tall, the 
//	third line of text is a partial line.  The caller can decide 
//	whether or not to draw these partial lines.  Default behavior draws 
//	partial lines.  
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// $Id: MiscLineWrapper.h,v 1.2 96/12/30 03:11:26 sunshine Exp $
// $Log:	MiscLineWrapper.h,v $
// Revision 1.2  96/12/30  03:11:26  sunshine
// v104.1: Ported to OPENSTEP 4.1 (gamma).
// 
// Revision 1.1  96/08/30  14:56:41  sunshine
// A C++ object for calculating line breaks in text.
//-----------------------------------------------------------------------------
#include <bool.h>
extern "Objective-C" {
#import	<AppKit/NSFont.h>
#import	<Foundation/NSGeometry.h>	// NSRect
}
extern "C" {
#include <limits.h>		// INT_MAX
}


class MiscLineWrapper
	{
public:
	int const	MAX_TEXT_LENGTH		= (INT_MAX / 2);
static	float const	DEFAULT_LEFT_MARGIN;
static	float const	DEFAULT_TOP_MARGIN;
static	float const	DEFAULT_RIGHT_MARGIN;
static	float const	DEFAULT_BOTTOM_MARGIN;
	struct Line
		{
		float	width;
		int	start;
		int	len;
		};
private:
	int	text_len;
	int	text_max;
	char*	text;
	NSFont*	font;
	int	alignment;
	int	num_lines;
	int	max_lines;
	Line*	lines;
	NSRect	rect;
	float	left_margin;
	float	top_margin;
	float	right_margin;
	float	bottom_margin;
	float	ascender;
	float	descender;
	float	line_height;
	bool	char_wrap;
	bool	no_partial;				// NOTE *PARTIAL*
	bool	needs_wrap;

	MiscLineWrapper( MiscLineWrapper const& ) {}	// No copy constructor.
	void operator=( MiscLineWrapper const& ) {}	// No assign operator.
	void do_wrap();
	void wrap_segment( int seg_start, int seg_end );
	float calc_width( int start_pos, int lim ) const;
	bool width_check() const;
	bool has_tabs( Line const& line ) const;
	void draw( float x, float y, int start, int len );
	void draw_tabs( float x, float y, Line const& line );
public:
	MiscLineWrapper();
	~MiscLineWrapper();

	void		setText( NSString* );
	void		setFont( NSFont* );
	void		setRect( NSRect );
	void		setLeftMargin( float );
	void		setTopMargin( float );
	void		setRightMargin( float );
	void		setBottomMargin( float );
	void		setAlignment( int );
	void		setCharWrap( bool );
	void		setNoPartialLines( bool b ) { no_partial = b; }

	char const*	getText() const		{ return text; }
	NSFont*		getFont() const		{ return font; }
	NSRect const&	getRect() const		{ return rect; }
	float		getLeftMargin() const	{ return left_margin; }
	float		getTopMargin() const	{ return top_margin; }
	float		getRightMargin() const	{ return right_margin; }
	float		getBottomMargin() const	{ return bottom_margin; }
	int		getAlignment() const	{ return alignment; }
	bool		getCharWrap() const	{ return char_wrap; }
	bool		getNoPartialLines() const { return no_partial; }

	bool		needsWrap() const	{ return needs_wrap; }
	int		numLines() const	{ return num_lines; }
	Line const&	lineAt( int i ) const	{ return lines[i]; }

	void		wrap();
	void 		draw();
	void		dump() const;
	};

#endif // __MiscLineWrapper_h

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.