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

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import "libs.h"
#import "console.h"

@interface TouchArea : NSObject
@property (nonatomic)	int				no;				// 通し番号
@property (nonatomic)	unichar			key;			// そこをタッチした時に返ってくるキーコード
@property (nonatomic)	BOOL			fBeganOnly;		// Beganでの検知のみ(Movedで入ってきたときは検出しない)
@property (nonatomic)	NSTimeInterval	repeat1st;		// リピート開始までの時間	TM_REPEAT1ST(tm)	0=リピートしない
@property (nonatomic)	NSTimeInterval	repeat;			// リピート間隔			TM_REPEAT1(tm)
@property (nonatomic)	int				fRepeat;		// リピート開始待ち中かどうか;FREPEAT_*
@property (nonatomic,strong)	NSTimer	*timer;			// リピート処理用
@property (nonatomic,strong)	UIView	*view;			// area用view
@end

#define NO_KEY				(0)		// タッチがない
#define MAX_KEYBUFF			64		// キーバッファーサイズ
#if 0 // 何故かこちらだと早すぎる
#define TM_REPEAT1ST(tm)	(-(2000+1000*(tm)))		// 200+tm*100 ms	<0=0.1ms単位
#define TM_REPEAT(tm)		(-(300+50*(tm)))		// 30+5*tm    ms
#else
#define TM_REPEAT1ST(tm)	((0.2+0.1*(tm)))		// 200+tm*100 ms	s単位
#define TM_REPEAT(tm)		((0.03+0.0050*(tm)))	// 30+5*tm    ms
#endif
#define DEF_REPEAT1ST		(3)	// X68でのデフォルト値;TM_REPEAT/1st()のtm値
#define DEF_REPEAT			(2)	// X68でのデフォルト値

enum {
	FREPEAT_NONE=0,	// リピート無し
	FREPEAT_1ST,
	FREPEAT,
};

enum { // touchStatus
	TOUCH_NONE=0,	// タッチされてない/touchEnd後
	TOUCH_BEGAN,
	TOUCH_MOVE,
};

#define MAX_FUNCTIONKEY		20	// ファンクションキー設定個数
#define BOUNDARY_2STAGE		5	// 2段表示にする切り替え番号というか数(iPod touch/iPhone)
#define BOUNDARY_3STAGE		10	// 3段表示にする切り替え番号というか数(iPadも含む）
#define BOUNDARY_4STAGE		15	// 4段表示にする切り替え番号というか数(iPod touch/iPhone)

@interface ButtonsAtrb : NSObject
	// iOSのバグを回避するためのボタン属性クラス
@property (nonatomic,strong)	UIColor 	*backgroundColor;
@property (nonatomic,strong)	UIColor		*normalColor;
@property (nonatomic,strong)	UIColor 	*hlightColor;
@property (nonatomic,strong)	UIImage		*backgroundImage;
@property (nonatomic,strong)	NSString	*title;
@property (nonatomic)	CGRect	frame;
@property (nonatomic)	unichar	keyCode;
@property (nonatomic)	BOOL	fhidden;
@end

#define MAX_TPOINT	10	// 同時検出タッチ点上限

@interface kConsole : UIView
{
	// タッチ
	volatile	// 割り込み内で更新される可能性あり
//	NSMutableArray 	*touchAreas;		// 内容はTOUCH_AREA ; 登録数に制限はない
	int				cntArea;			// エリアの登録数(通し番号をつけるため)
	//
	CGPoint			tpoint[MAX_TPOINT];	// タッチ座標(cntPoint0分が有効)
	int				cntPoint;			// 現在取得しているタッチ座標数
	int				cntPoint0;			// 直前のタッチで取得していたタッチ座標数(v2.5)
	int				touchStatus;		// タッチ状態(V2.1);TOUCH_*
	// ファンクションキー
//	NSMutableArray	*functionButtons;	// 内容はUIButton
	NSMutableArray	*functionButtons2;	// 内容はButtonsAtrb
	//
	UIColor 		*defBackgroundColor;
	UIColor		 	*defNormalColor;
	UIColor 		*defHlightColor;
	//
//	UIFont			*font_;				// フォント
//	CGFloat			widthx_;			// テキスト文字数
//	CGFloat			widthy_;			// テキスト画面の縦数
//	CGFloat			fontWx_;			// 1文字のx幅（グラフィック幅）；テキストモードでのみ有効
//	CGFloat			fontWy_;			// テキスト画面の縦1行分幅(＝0ならkConsole内で計算)
	// キーバッファーコントロール
	// リングバッファー
	// フルになったら古いところから消す
	int		wp;
	int		rp;
	unichar	buffer[MAX_KEYBUFF];
	//
	// 表示制御用
	BOOL			ftouchEnded;	// touchEndが呼ばれたかどうか
}
@property (nonatomic,retain) NSMutableArray *touchAreas;
@property (nonatomic,retain) NSMutableArray	*functionButtons;	// 内容はUIButton
@property (nonatomic,retain) UIFont *font;
@property (nonatomic) CGFloat 	fontWx;
@property (nonatomic) CGFloat 	fontWy;
@property (nonatomic) CGFloat 	widthx;
@property (nonatomic) CGFloat 	widthy;
//
-(void)init2;
-(void)update;
-(void)alpha:(CGFloat)alpha;
-(int)setTouchArea:(CGRect)area key:(unichar)key fBeganOnly:(BOOL)fBeganOnly;
-(int)setTouchArea:(CGRect)area key:(unichar)key fBeganOnly:(BOOL)fBeganOnly repeat1st:(NSTimeInterval)repeat1st repeat:(NSTimeInterval)repeat backColor:(UIColor *)backColor;
-(int)setTouchAreaWithText:(CGRect)area key:(unichar)key fBeganOnly:(BOOL)fBeganOnly repeat1st:(NSTimeInterval)repeat1st repeat:(NSTimeInterval)repeat backColor:(UIColor *)backColor;
-(int)setTouchAreaWithText:(CGRect)area key:(unichar)key fBeganOnly:(BOOL)fBeganOnly;
-(BOOL)removeTouchArea:(int)no;
-(void)clear;
-(unichar)inkey;
-(BOOL)kbhit;
-(void)setFunctionKey:(int)no title:(NSString *)title keyCode:(unichar)keyCode;
-(void)displayFunctionKey:(BOOL)onoff f2danKey:(BOOL)f2danKey  fextend:(BOOL)fextend clearance:(CGFloat)clearance;
-(void)displayFunctionKey:(BOOL)onoff st:(int)st ed:(int)ed f2danKey:(BOOL)f2danKey clearance:(CGFloat)clearance;
-(void)setFunctionKeyAtrb:(UIColor *)backgroundColor normal:(UIColor *)normalColor highlight:(UIColor *)hlightColor;
-(void)setFunctionKeyBackgroundImage:(NSString *)backgroundFname;
-(void)resetTouchArea;
-(void)resetAllFunctionKey;
-(int)getTouchPoint:(CGPoint *)points mode:(int)mode;
-(int)getTouchStatus;

// 領域が重なっているときは、後から定義＝上に定義したほうが優先

@end
