#ifndef __qwaq_editor_editor_h
#define __qwaq_editor_editor_h

#include "ruamoko/qwaq/editor/editbuffer.h"
#include "ruamoko/qwaq/editor/status.h"
#include "ruamoko/qwaq/ui/view.h"

@class Editor;
@class EditBuffer;
@class ListenerGroup;
@class EditStatus;

@interface Editor : View
{
	EditBuffer *buffer;
	EditStatus *status;
	DrawBuffer *linebuffer;
	eb_sel_t    selection;
	unsigned    base_index;		// top left corner
	unsigned    line_index;		// current line
	unsigned    char_index;		// current character
	unsigned    old_cind;		// previous character
	Point       base;
	Point       cursor;
	unsigned    line_count;
	string      filename;
	string      filepath;
	int         modified;
	CursorMode  cursorMode;

	int         virtualInsert;
	int         cursorThroughTabs;
}
+(Editor *)withRect:(Rect)rect file:(string)filename;
+(Editor *)withRect:(Rect)rect file:(string)filename path:(string)filepath;
-(string)filename;
-(string)filepath;
-(Point)cursor;
-setStatusView:(EditStatus *)status;
-scrollLeft:(unsigned) count;
-scrollRight:(unsigned) count;
-pageUp;
-pageDown;
-linesUp;
-linesDown;
-charUp;
-charDown;
-charLeft;
-charRight;
-wordLeft;
-wordRight;
-moveBOT;
-moveEOT;
-moveBOS;
-moveEOS;
-moveBOL;
-moveEOL;

-recenter:(int) force;
-gotoLine:(unsigned) line;
-highlightLine;
-(string)getWordAt:(Point) pos;	// view relative coordinates
@end

#endif//__qwaq_editor_editor_h