//
//  FontSelect.m
//  traceWrite
//
//  Created by 今井 彰彦 on 2011/12/15.
//  Copyright 2011-12 AIG-Soft. All rights reserved.
//

#import "FontSelect.h"
#import "Bunsho.h"
#import "BunshoList.h"
#import	"Setup.h"
#import "click.h"
#import "main.h"
#import "FontSizeSelect.h"
#import "AppDelegate.h"
#import "NSString+sizeWithFont.h"

@interface FontSelect()
{
	AppDelegate *app;
	Setup *setup;
}
@end

@implementation FontSelect

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

#pragma mark -初期化

-(void)viewDidLoad
{
	printSelf();
	[super viewDidLoad];
	// デリゲートとソース設定;nib部なのでここに置く
	self.pickerView.delegate  =self;
	self.pickerView.dataSource=self;
}

-(void)viewWillAppear:(BOOL)animated
{
	printSelf();
	[super viewWillAppear:animated];
	
	app=getAppDelegate();
	setup=app.setup;
	
	// カーソル位置設定;ここでしないとうまくいかない
	nslog(@"カーソル位置設定");
	[self.pickerView selectRow:_nameNo   inComponent:0 animated:NO];
	//
	[self dispFontSize:fontSize];
	self.lblInfo.hidden=NO;
}



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

#pragma mark -テーブル

// 列数を返す
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
	return 1;
}

// 指定行の項目数を返す
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
	return [nameArray count];
}

// 列幅を返す
-(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
	return nameWidth;
}

#if 0
// 指定行項目の文字列を返す
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
	return [NSString stringWithFormat:@"%d.%d",component,row];
}
#else
// 指定行項目のUIViewオブジェクトを返す
// こちらのほうが優先される
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
	// iOS7上ではここでオブジェクトを生成しないと選択中項目の表示が抜けてしまう
	// iOS7上でSDK6までアプリを動かす場合も同様になる
	CGRect frame=self.pickerView.frame; // 横幅をpickerに合わせる
	CGFloat wx=frame.size.width;
	
	UILabel *lbl=[[UILabel alloc]init]; // UIViewのサブクラスでないといけないので、NSStringではなくUILabelを使う

#define FNTSZ	18	// 24にするとはみ出てしまう
	NSString *name1=nameArray[row];
	nslog(@"name1=%@",name1);
	lbl.text=NSLocalStr(name1); // ローカライズ出来るときはする
#if 1
	if (![name1 isEqualToString:@"ApSanskrit"]) {
		lbl.font=[UIFont fontWithName:name1 size:FNTSZ]; // フォントの設定
	} // サンスクリット文字は表示できないのでフォント設定しない
#else
	lbl.font=[UIFont fontWithName:name1 size:FNTSZ]; // フォントの設定
#endif
	lbl.adjustsFontSizeToFitWidth=YES; // フォントサイズ調整可
	[lbl sizeToFit];
	frame=lbl.frame;
	frame.size.width=wx;
	lbl.frame			=frame;
	lbl.textAlignment	=NSTextAlignmentCenter; // 中央寄せ
	lbl.backgroundColor	=self.pickerView.backgroundColor; // pickerとlabelの色は微妙に違うので合わせる;
	return (lbl);
}
#endif


// setup選択番号から生フォント名を返す
-(NSString *)no2FontName:(NSInteger)no
{
	return nameArray[no];
}

-(void)dispFontSize:(CGFloat)size
{
	self.lblInfo.text=[NSString stringWithFormat:@"%@ : "FMT_FONT,NSLocalStr(@"SIZE"),size];
	nslog(@"dispFontSize=%@",self.lblInfo.text);
}

// 指定サイズが表示幅に入るかどうかを調べ、入らないなら入るサイズに変更する
-(CGFloat)checkMaxFontSize:(CGFloat)size_
{
	CGSize fsize;
	UIFont *sfont;
	while (sfont=[UIFont fontWithName:fontName size:size_],
		   fsize=getFontSize(sfont),
		   sfont.lineHeight>Height_viewDisp ||
		   fsize.width>Width_viewDisp) {
		// 表示枠を超えるので設定不可
		nslog(@"表示枠を超える→超えないサイズを探す");
		size_-=8; // 8ずつ下げてみる
	}
	// 入るので問題ない
	return size_;
}

// 選択時に呼び出される
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
	nslog(@"選択:(%d,%d)",(int)row,(int)component);
	_nameNo=row;
	fontName=[self no2FontName:row];
	// ここに来るときはフォントが変更されているので、フォントサイズをデフォルトに戻って再設定
	fontSize=[self checkMaxFontSize:defFontSize()];
	[self dispFontSize:fontSize];
#if 0
	// ここにこれを入れると、選択直後に表示が変わる
	[pickerView reloadAllComponents]; // 項目の全読み込み直し
#endif
}

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

- (void)initFontSelect:(id)target selector:(SEL)aSel name:(NSString *)name_ title:(NSString *)title
{
	printSelf();
	setup	=getAppDelegate().setup;
	nslog(@"name=%@(%d)",name_,(int)_nameNo);
	
	// ボタン設定
	self.title=title; // titleプロパティへの代入
	self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:NSLocalStr(@"SAVE")
																 style:UIBarButtonItemStyleDone
																target:target
																action:aSel];
	// フォント名選択用要素作成
	nameWidth=0.0;
	nameArray=[[NSMutableArray alloc]init];
	NSArray *dispNames=[[NSArray alloc]initWithArray:[[UIFont familyNames]sortedArrayUsingComparator:
		^(NSString *str1,NSString *str2) {
			// ローカライズ状態でソート付き
			return [NSLocalStr(str1) compare:NSLocalStr(str2)];
		}
	]];
	//
	NSUInteger i=0;
	NSEnumerator *em = [dispNames objectEnumerator];
	NSString *name1;
	while (name1=[em nextObject]) {
//		nslog(@"元name1=%@",name1);
#if 0
		if ([name1 isEqualToString:@"ApSanskrit"]) continue; // 梵字はユーザー指定不可
#endif
		if ([name1 isEqualToString:@"Apple Color Emoji"]) continue; // 絵文字は飛ばす
		if ([name1 isEqualToString:@"Bodoni Ornaments" ]) continue; // 絵文字は飛ばす
//		if ([name1 isEqualToString:@"Zapfino"          ]) continue; // フォントサイズがポイント数と大幅に異なる文字は飛ばす
		if ([name1 isEqualToString:name_]) {
			_nameNo=i; // name_から内部番号を得る
			fontName=name1;
			nslog(@"fontName=%@(%d)",fontName,(int)_nameNo);
		}
		//
//		nslog(@"name1=%@",name1);
		[nameArray addObject:name1]; // 生のフォント名記録
		//
		i++;
	}
//	nslog(@"フォント名=%@",lblArray);
//	nslog(@"nameWidth=%f",nameWidth);
	//
	// 文書名からフォント名を取得
	NSString *fontName2;
	fontSize=readBunshoFont(setup.bunFileName,&fontName2);
	nslog(@"fontSize=%f",fontSize);
	nslog(@"fontName=%@;指定/%@;plist内",fontName,fontName2);
	//
	self.sampleText=@"A"; // サンプル
}

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

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

-(void)setNextButton:(NSString *)title
{
	printSelfs(@"%@",title);
	[super setNextButtonTitle:title];
	[super setNextButton:self nextSelector:@selector(openFontSizeSelect:)];
}

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

// _fontSizeSelectを閉じる
-(void)closeFontSizeSelect:(id)sender
{
	printSelf();
	
	// 選択値を読み出す(pickerを開放してしまうので、その前に)
	fontSize=
	setup.fontSize	= [_fontSizeSelect getFontSize];
	// plistへの設定はBunshoSelectに任せる
	
	// 画面を閉じる
	clickSound(); // クリック音
	[self.navigationController popToViewController:self animated:YES];
	// この後[self viewWillAppear]を並行動作で通る
}

// フォントサイズ設定
-(void)openFontSizeSelect:(id)sender
{
	printSelf();
	//
	self.fontSizeSelect = [[FontSizeSelect alloc]init];
	[_fontSizeSelect initFontSizeSelect:self selector:@selector(closeFontSizeSelect:)
								  name:fontName
								  size:fontSize
								 title:NSLocalStr(@"FONTSIZE")
							   maxSize:[self checkMaxFontSize:maxFontSize()]];
	[_fontSizeSelect setSample:_sampleText];
	// 子画面呼び出し
	clickSound(); // クリック音
	[self.navigationController pushViewController:_fontSizeSelect animated:YES];
}

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

#ifdef DEBUG
- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    
    // Release any cached data, images, etc that aren't in use.
}

#endif

@end
