//
//  EditorView.h
//  X-BASIC'
//
//  Created by AIG-Soft(iMac) on 2012/09/18.
//  Copyright (c) 2012-15年 AIG-Soft. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "ScrollView.h"
#include "XB.h"
#import "UIScrollView+TouchEvent.h"

typedef struct {
	ULong	top;	//　その行先頭までの総文字数		＜64K；ソース上限が64KBだから
	int		len;	// 1行の文字数(行番号は含まない)
} LINE_ATRB;

#define MAX_ERRORS	128		// コンパイル中に、これ以上エラーが出たらコンパイル中断

@interface EditorView : UIView
<
UITextViewDelegate,
UIScrollViewDelegate,
UIWebViewDelegate,
UITextInputTraits,	// キーボードの設定用
UISearchBarDelegate
>
{
	// ソース
	BOOL			waitKeyboardDidShow;		// keyboardDidShowが呼び出されたかどうかのフラグ

	// エラー表示
	UIScrollView	*errorViewScroll;	// errorView中のscrollView
	CGRect			errorViewFrame;		// IBで設定されたerrorViewの位置とサイズ
	XBERROR_LINE_INFO xb_errLine_info[MAX_ERRORS];	// エラー行情報

	NSArray 		*lineArray;		// 個別行
	uwLineNO		lines;			// 全行数(1〜)
	NSMutableArray 	*lineAtrb;		// 各行文字数、その行までの総文字数;1要素はLINE_ATRB
	
	// 検索
	IBOutlet	__weak UISearchBar	*search;
	uwLineNO	searchLine;			// 検索一致行番号(0〜)
	NSRange		selectRange;		// 検索一致範囲/カーソル位置;location,length
	NSUInteger	fsearchMode;		// 検索モード;SEARCH_*
	BOOL		fscrollSync;			// gotoLineNo直後かどうか;edito/WithLineNoで表示位置同期がかかっている
	//
	// その他画面表示
	IBOutlet	__weak UILabel		*lblErrors;			// v3.00:エラー数
	IBOutlet	__weak UILabel		*lblBasicFile;
	IBOutlet	__weak UILabel		*lblSourceEncode;
	IBOutlet	__weak UIView		*vwBack;
	IBOutlet	__weak UIButton		*btnErrClose;
	int			cntActivityIndicator;		// 多重処理対応のため
	//
	UIAlertView	*alertView;
	// キーボード表示制御
	CGRect		keyboardFrameEnd;			// 表示位置
}
// 以下2つが実体
@property (nonatomic,weak) IBOutlet	UITextView	*editor;			// 行番号なしソース表示用(編集可能)
@property (nonatomic,weak) IBOutlet	UITextView	*editorWithLineNo;	// 行番号ありソース表示用(編集不可)
@property (nonatomic,weak) IBOutlet	UIWebView	*errorView;
@property (nonatomic,weak) IBOutlet	UIButton	*btnLineNo;
@property (nonatomic,strong) NSString	*fontName;
@property (nonatomic) NSUInteger	opeMode;		// 動作モード;rootのそれと同じ
@property (nonatomic) BOOL			fafterEdit;		// ソースを編集したかどうか
@property (nonatomic) CGFloat		fontSize;		// 初期値；初期化をしないと反映されない
@property (nonatomic) BOOL 			frunAfter;
@property (nonatomic,copy)			NSString	*text;	// ソースそのもの

-(void)setEditorFont:(NSString *)fontName_ pointSize:(CGFloat)pointSize_;
-(void)displayBasic:(NSString *)source;
-(void)displayEncode;
-(void)colorEncode:(UIColor *)color;
-(void)setFont:(NSString *)text fwithLineNo:(BOOL)fwithLineNo lnos:(NSArray *)lnos;
-(void)keyboardNotification:(BOOL)onoff;
-(void)errorViewHidden:(BOOL)fhidden;
-(void)eraseSearchBar;
-(void)remakeLineNo1:(uwLineNO)eno;
-(void)remakeLineNo:(NSArray *)lnos;
-(void)remakeLineNoAll;
-(void)lineNoHidden:(BOOL)fhidden;
-(void)scrollToEndOfSource;
-(void)searchString;
-(void)searchLineJump;
-(void)errorJump;
-(void)compilePrepare;
-(void)changeEditorView:(CGRect)rframe;
-(void)changeEditorViewEnd;
-(void)resetZoomWithAnimation;



// IBActionのものは、ヘッダーにも定義しておかないとIBが警告を出す
-(IBAction)buttonAction:(id)sender;

enum {
	BUTTON_LINENO=100,	// 念のためrootにあるボタンと離しておく
	BUTTON_ERRCLOSE,
};

enum { // fsearchMode;
	SEARCH_NONE=0,
	SEARCH_STRING,
	SEARCH_LINENO,
};

@end
