home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 5
/
FreshFish_July-August1994.bin
/
bbs
/
gnu
/
aplusplus-1.01-src.lha
/
src
/
amiga
/
aplusplus-1.01
/
include
/
aplusplus
/
graphics
/
TextView.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-04
|
4KB
|
118 lines
#ifndef APP_TextView_H
#define APP_TextView_H
/******************************************************************************
**
** C++ Class Library for the Amiga© system software.
**
** Copyright (C) 1994 by Armin Vogt ** EMail: armin@uni-paderborn.de
** All Rights Reserved.
**
** $VER: apphome:APlusPlus/graphics/TextView.h 1.04 (04.05.94) $
**
******************************************************************************/
#include <APlusPlus/graphics/Canvas.h>
#include <APlusPlus/intuition/RawKeyDecoder.h>
/******************************************************************************************
» TextView class «
The TextView class visualizes ASCII text within a rectangular view that can be moved
over the text.
The way in which the text is provided can be customized, as can the format of the text
output in matters of color and softstyle be adjusted context-sensitively.
******************************************************************************************/
class TextView : public Canvas
{
private:
FontC font;
LONG crsrx,crsry,lineCount; // cursor position in the text
LONG cviewx,cviewy; // cursor position in the view (1..visibleXY())
XYVAL cBoxLeft,cBoxRight; // cursor box dimensions in pixel
UBYTE crsrOn;
BOOL cursorIsOn() { return crsrOn==TRUE; }
void cursorOn() { crsrOn = TRUE; }
void cursorOff() { crsrOn = FALSE; }
void toggleCBox();
void eraseCBox() { if (cursorIsOn()) toggleCBox(); }
void drawCBox() { if (cursorIsOn()) toggleCBox(); }
LONG topLine() { return viewY()+1; }
LONG visibleLines() { return visibleY(); }
void findCursor();
protected:
RawKeyDecoder key;
virtual void formatOutput(UBYTE *lineText,UWORD length);
/** formatOutput(text) can be overwritten to establish your special text output.
** It is called when TextView finds it necessary to write a line. TextView prepares for
** writing, then calles formatOutput with the string that is to be written.
** Within this method you have to write the whole string by repeated use of
** print(). Positioning is done by TextView. You can change colors and softstyle
** between the print() calls. Don't assume any color or softstyle being set on entry.
** The default method prints each text line as is.
**/
void print(UBYTE *partString,UWORD length); // used only within formatOutput()
/* Canvas::setAPen; // used only within formatOutput() between print() calls
Canvas::setBPen;
Canvas::setDrMd;
*/
virtual UBYTE *getLineString(LONG lineNr,UWORD& length)=0;
/** By calling this method a TextView object demands a 0-terminated string which it
** will display as line 'lineNr'. Your overwriting method has to return the address
** of the string you want to have displayed as line 'lineNr'. The string will not be
** copied and thus must be accessable until the next 'getLineString()' call.
**/
void callback(const IntuiMessageC *imsg);
public:
TextView(GOB_OWNER, AttrList& attrs);
~TextView();
void drawSelf();
ULONG setAttributes(AttrList& attrs);
ULONG getAttribute(Tag tag,ULONG& dataStore);
void writeLine(LONG lineNr); // force rewriting a single line
LONG lines() { return lineCount; } // get text length in lines
BOOL setCursor(LONG lineNr,LONG characterNr);
void moveCursorTo(int CursorPosTag); // special cursor positioning on text context
LONG cursorX() { return crsrx; } // get character under cursor number (1..length of line string)
LONG cursorY() { return crsry; } // get cursor line (1..lines())
};
#define TXV_Dummy (IOTYPE_TEXTVIEW+1)
#define TXV_Columns (TXV_Dummy + 2)
/* Unused
*/
#define TXV_Lines (CNV_Height)
/* LONG: length of the text to be displayed.
*/
#define TXV_FontName (TXV_Dummy + 3)
#define TXV_FontSize (CNV_GranularityY)
/* Set the font (may be non-proportional) for the text display.
*/
#define TXV_CursorOn (TXV_Dummy + 4)
/* BOOL: TRUE for a visible cursor, FALSE for no cursor.
*/
#define TXV_CursorX (TXV_Dummy + 5)
#define TXV_CursorY (TXV_Dummy + 6)
#endif