//
//  FontSizeSelect.m
//  X-BASIC'
//
//  Created by AIG-Soft on 2012/08/22.
//  Copyright 2012-2015 AIG-Soft. All rights reserved.
//

#import "FontSizeSelect.h"
#import "FontSelect.h"
#import	"AppDelegate.h"
#import "main.h"
#import "click.h"

@interface FontSizeSelect()
{
	AppDelegate *app;
	Setup 		*setup;
	CGRect		frame0;			// 最初のサイズ；Poppoverで移動するとサイズが変わるので
	BOOL		fViewDidLoad;
}
@end

@implementation FontSizeSelect

//-------------------------------------------------------------------

-(void)viewDidLoad
{
	printSelf();
    [super viewDidLoad];
	
	frame0.size=self.view.frame.size; // 自分のサイズを保存
	
	app=getAppDelegate();
	setup=app.setup;
	
	// 縦用初期位置を保存
	frameLblFontName	=lblFontName.frame;
	frameLblFontSize	=lblFontSize.frame;
	frameLblFontMinSize	=lblFontMinSize.frame;
	frameLblFontMaxSize	=lblFontMaxSize.frame;
	frameBtnDefault		=btnDefault.frame;
	frameViewDisp		=viewDisp.frame;
	frameSliderSize		=sliderSize.frame;
	// 横用位置を読み出し
	frameLblFontNameL	=lblFontNameL.frame;
	frameLblFontSizeL	=lblFontSizeL.frame;
	frameLblFontMinSizeL=lblFontMinSizeL.frame;
	frameLblFontMaxSizeL=lblFontMaxSizeL.frame;
	frameBtnDefaultL	=btnDefaultL.frame;
	frameViewDispL		=viewDispL.frame;
	frameSliderSizeL	=sliderSizeL.frame;

	// 何故かここではうまく変更できない
	fViewDidLoad=YES;
//	if (getSystemVersion()<8.0) {
//		// iOS7だけ
//		if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
//			// iPadのPopover内に表示するときは元々のxib内で設定されているStatusBar+Navi分を除いておく
//			for (UIView *subView in self.view.subviews) {
//				CGRect frame=subView.frame;
//				frame.origin.y-=(20+44);
//				subView.frame=frame;
//			}
//		}
//	}
}

-(void)viewWillAppear:(BOOL)animated
{
	printSelf();
	[super viewWillAppear:animated];

	UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; // 起動時の画面方向
	[self willAnimateRotationToInterfaceOrientation:orientation duration:0];
	//
	lblFontName.text=NSLocalStr(name); // ローカライズして表示

	// スライダー設定
    sliderSize.minimumValue = minFontSize();
	lblFontMinSize.text=[NSString stringWithFormat:FMT_FONT,minFontSize()];
    sliderSize.maximumValue = maxSize;
	lblFontMaxSize.text=[NSString stringWithFormat:FMT_FONT,maxSize];
	//
	sliderSize.value=self.size;
	[self sliderAction:nil];
	//
	[btnDefault setTitle:NSLocalStr(@"DEFAULT") forState:UIControlStateNormal];
	//
	lblSample.text=_sampleText;

	self.preferredContentSize=frame0.size; // サイズを戻す(これが重要)

	if (fViewDidLoad) {
		// 初回のみ
		if (getSystemVersion()<8.0) {
			// iOS7だけ
			if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
				// iPadのPopover内に表示するときは元々のxib内で設定されているStatusBar+Navi分を除いておく
				for (UIView *subView in self.view.subviews) {
					CGRect frame=subView.frame;
					frame.origin.y-=(20+44);
					subView.frame=frame;
				}
			}
		}
	}
	fViewDidLoad=NO;
}

//----------------------------------------------
// 設定可能フォントサイズを得る

typedef struct {
	CGFloat	fontMin;	// 最小フォントサイズの設定＝行番号の最大サイズ
	CGFloat fontMax;	// 最大フォントサイズを設定
	CGFloat fontDef;	// デフォルトフォントサイズ
	// ↓X-BASICでは使ってない
	CGFloat widthMin;	// 最小フォントの時のペン幅デフォルト値
	CGFloat widthMax;	// 最大フォントの時のペン幅デフォルト値
} FONTATRB;
// フォントサイズ : 16単位

static
FONTATRB fontAtrb[]={
	{6	,32	,13	,3  ,10},	// [0]=iPhone
	{8	,64	,16	,1.5,20},	// [1]=iPad
};

CGFloat defPenWidth(CGFloat fontSize)
// フォントサイズに従ったデフォルトペン幅の設定
{
	NSInteger i=0;
	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) i=1;
	CGFloat min   =fontAtrb[i].fontMin;
	CGFloat dfont =fontAtrb[i].fontMax -min;  // フォントサイズの幅
	CGFloat dwidth=fontAtrb[i].widthMax-fontAtrb[i].widthMin; // ペン幅の幅
	nslog(@"dwidth=%f,dfont=%f,fontSize=%f",dwidth,dfont,fontSize);
	// ペン幅は、最小から最大までの間を線形で計算する
	CGFloat penWidth=fontAtrb[i].widthMin+(dwidth/dfont)*(fontSize-min);
//	if (penWidth>=fontAtrb[i].widthMax) penWidth=fontAtrb[i].widthMax;
	nslog(@"fontSize=%f→penWidth=%f",fontSize,penWidth);
	return penWidth;
}

CGFloat minPenWidth(void)
{
	NSInteger i=0;
	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) i=1;
	return fontAtrb[i].widthMin;
}

CGFloat maxPenWidth(void)
{
	NSInteger i=0;
	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) i=1;
	return fontAtrb[i].widthMax;
}

CGFloat minFontSize(void)
// 最小フォントサイズの設定
{
	NSInteger i=0;
	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) i=1;
	return fontAtrb[i].fontMin;
}

CGFloat maxFontSize(void)
// 最大フォントサイズを設定する
// 現在はズーム時の倍率計算にしか使われていない
{
	NSInteger i=0;
	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) i=1;
	return fontAtrb[i].fontMax;
}

CGFloat defFontSize(void)
// デフォルトフォントサイズを設定する
{
	NSInteger i=0;
	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) i=1;
	return fontAtrb[i].fontDef;
}

//-------------------------------------------------------------------

-(CGFloat)getFontSize
{
	self.size=sliderSize.value;
	nslog(@"size=%f:size0=%f",self.size,size0);
	return (self.size>size0)? size0:self.size;
}

-(IBAction)sliderAction:(id)sender
// スライダー変更時処理
{
	if (self.size!=sliderSize.value || sender==nil) {
		// 更新時のみ
		self.size=sliderSize.value;
		UIFont *sfont=[UIFont fontWithName:name size:self.size]; // そのサイズのフォントを取得
		if (sfont.lineHeight>viewDisp.frame.size.height
		 || sfont.pointSize >viewDisp.frame.size.width) {
			// 表示枠を超えるので設定不可
			nslog(@"表示枠を超える");
			sliderSize.value=size0; // 元に戻す
			return;
		}
		// 設定可能
		size0=self.size; // 前回設定可能だったフォントサイズを保存
		CGPoint center=viewDisp.center; // 中央位置
		lblSample.font=sfont;
		CGRect frame={CGPointZero,{lblSample.font.pointSize,lblSample.font.lineHeight}};
		lblSample.frame=frame;
		lblSample.center=center; // 中央位置は合わせておく
		//	nslog(@"font=%@/lineHeight=%f",lblSample.font,lblSample.font.lineHeight);
		//
		lblFontSize.text=[NSString stringWithFormat:FMT_FONT,self.size]; // フォントサイズを表示
	}
}

-(IBAction)buttonAction:(id)sender
// ボタン押下処理
{
	clickSound();
	sliderSize.value=defFontSize();
	[self sliderAction:nil];
}

//-------------------------------------------------------------------

- (void)initFontSizeSelect:(id)target selector:(SEL)aSel name:(NSString *)name_ size:(CGFloat)size_
					 title:(NSString *)title maxSize:(CGFloat)maxSize_
{
	nslog(@"initFontSizeSelect:name=%@(%f)",name_,size_);
	name	=name_;
	size0	=
	self.size	=size_; // size_は予め正しいサイズに納めておくこと
	maxSize	=maxSize_;
	
	// ボタン設定
	self.title=title; // titleプロパティへの代入
	UIBarButtonItem *tempBarItem=[[UIBarButtonItem alloc]initWithTitle:NSLocalStr(@"SAVE")
																		  style:UIBarButtonItemStyleDone
																		 target:target
																		 action:aSel];
	self.navigationItem.leftBarButtonItem=tempBarItem;
	self.sampleText=NSLocalStr(@"SAMPLE"); // デフォルトサンプル
}

-(void)setSample:(NSString *)text
{
	printSelfs("%@",text);
	if (self.sampleText!=nil) self.sampleText=nil; // 開放
	self.sampleText=text;
}

//-------------------------------------------------------------------
// 画面回転
//----------------------------------------------

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
// 回転検出：回転前
{
	printSelfs(@"Orientation=%d",(int)interfaceOrientation);
	understandOrientation(interfaceOrientation); // 画面方向を記録
	// interfaceOrientationは新しい方向
	switch (interfaceOrientation) {
		default:
		case UIInterfaceOrientationPortrait:
		case UIInterfaceOrientationPortraitUpsideDown:
			nslog(@"縦方向");
			lblFontName.frame	=frameLblFontName;
			lblFontSize.frame	=frameLblFontSize;
			lblFontMinSize.frame=frameLblFontMinSize;
			lblFontMaxSize.frame=frameLblFontMaxSize;
			btnDefault.frame	=frameBtnDefault;
			viewDisp.frame		=frameViewDisp;
			sliderSize.frame	=frameSliderSize;
			break;
		case UIInterfaceOrientationLandscapeLeft:
		case UIInterfaceOrientationLandscapeRight:
			nslog(@"横方向");
			lblFontName.frame	=frameLblFontNameL;
			lblFontSize.frame	=frameLblFontSizeL;
			lblFontMinSize.frame=frameLblFontMinSizeL;
			lblFontMaxSize.frame=frameLblFontMaxSizeL;
			btnDefault.frame	=frameBtnDefaultL;
			viewDisp.frame		=frameViewDispL;
			sliderSize.frame	=frameSliderSizeL;
			break;
	}
	// サンプルは中央へ
	lblSample.center =viewDisp.center;
}

// 画面を回転して良いかどうか
-(BOOL)shouldAutorotate
{
	printSelf();
	if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
		// iPadのpopover内では回転させない
		return NO;
	}
	return shouldAutorotateByMain();
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
	printSelf();
	return (supportedInterfaceOrientationsByMain());
}

//-------------------------------------------------------------------

#ifdef DEBUG
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    
}

#endif

@end
