//
//  LimitedSymbol.m
//	指定時間画像を表示する
//
//  Created by AIG-Soft on 2011/07/05.
//  Copyright 2011 AIG-Soft. All rights reserved.
//

#import "LimitedSymbol.h"
#import	"libs.h"

@implementation LimitedSymbol

// 画像を消す(タイマー起動)
-(void)erase:(id)sender
{
	printSelf();
	image.hidden=YES; // 非表示
	[limitedTimer invalidate];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"        // 警告回避のため
	// target==nilならそもそも呼び出されない
	[target performSelector:selector withObject:nil];
#pragma clang diagnostic pop
	limitedTimer=nil;
}

-(void)waitErase
{
	printSelf();
	while (limitedTimer!=nil) {
		EnterRunLoop(TM_CHECK_OPERATION);
	}
}

-(void)display0:(NSTimeInterval)tm
{
	printSelf();
	nslog(@"img=%@.hidden=%d",image,image.hidden);
	if (image.hidden==YES) { // 非表示の時は表示に変える
		image.hidden=NO; // 表示
		// 一定時間で自動的に消す；消えるまでは↑で排除される
		limitedTimer=[NSTimer timerWithTimeInterval:tm
										   target:self
										 selector:@selector(erase:)
										 userInfo:nil
										  repeats:NO // 1回だけ
					];
		// 実行ループにタイマーを追加する
		AddTimerToRunLoop(limitedTimer);
	} // すでに表示中ならすぐ抜ける
#ifdef DEBUG
	else {
		printSelfs(@"表示済み%@",@"");
	}
#endif
}

-(void)display:(NSTimeInterval)tm
// 終了時呼び出しなし
{
	target		=nil;
	[self display0:tm];
}

-(void)display:(NSTimeInterval)tm target:(id)target_ selector:(SEL)selector_
// 終了時呼び出し付き
{
	target		=target_;
	selector	=selector_;
	[self display0:tm];
}


-(id)initWithImageView:(UIImageView *)imgview
// imgviewが表示要素の場合は、viewDidLoad後に呼び出すこと
{
	self=[super init];
	if (self!=nil) {
		image=imgview;
		image.hidden=YES; // 初期は非表示(IBでも設定するが念のため)
		//nslog(@"img=%@",image);
	}
	return (self);
}

-(void)dealloc
{
	printSelf();
	target=nil; // この後はerase時呼び出しもしない;その処理自体が消えている可能性があるから
	[self erase:nil];
}

@end
