#!/usr/bin/perl

use lib 'd:/git/tkProg/tklib/Perl/lib';
use lib 'c:/git/tkProg/tklib/Perl/lib';
use lib 'd:/git/tkProg/tklib/Perl/lib2.0';
use lib 'c:/git/tkProg/tklib/Perl/lib2.0';
use lib "c:/git/tkProg/tklib/Perl/TkPlot";
use lib "d:/git/tkProg/tklib/Perl/TkPlot";

use lib ".";


use strict;
#use warnings;

use TkPlotApp;
use TkPlotDoc;
use TkPlotWindow;
use TkPlotModule;

use Tk::Menu;
use Tk::Photo;
use utf8;
use File::Glob;
use Jcode;
#use Jcode::Unicode;
#use Jcode::Unicode::NoXS;

use Sci::GeneralFileFormat;

#use utf8;
#use encoding 'ja_JP.SJIS';
#use encoding 'utf8';
#binmode(STDERR,'encoding(ja_JP.SJIS)');

#===============================================
# Applicationクラス作製
#===============================================
my $App = new TkPlotApp;
exit if($App->Initialize() < 0);

#===============================================
# 環境に合わせて変える必要がある
#===============================================
# Windows環境の場合のルートディレクトリィ
	my $BaseDir = "D:\\Programs\\Perl\\TkPlot";
# Linux環境の場合のルートディレクトリィ
	my $home = $ENV{'HOME'};
	$BaseDir    = "$home/bin" if($App->OS() eq 'linux');

# 実行プログラム名（デフォルトでは$0から取得）
	my $Program = $App->Program();
# アプリケーション名
	$App->SetAppName($Program);
# バージョン
	$App->SetVersion("Ver 0.1");
# ウィンドウに表示するタイトル
	$App->SetTitle("TkPlot 2005/pl");

#===============================================
# 環境設定
#===============================================
my $ProgramPath = $App->SpeculateProgramPath($0, $BaseDir);
print "Program Path: $ProgramPath\n";

#最後の引数を1にすると、IniFileが存在しないと強制終了する
my $IniFile     = $App->OpenIniFile($ProgramPath, 1);
my $IniFilePath = $App->IniFile()->IniFile();
print "IniFile Path: $IniFilePath\n";
my $MyDir = $IniFile->MyDir();

if($App->OS() eq 'MSWin32' and !$App->Debug()) {
#	$App->FreeWin32Console();
}

#==========================================
# コマンドラインオプション読み込み
#==========================================
	$App->AddArgument("--style",             "--style: Set style for specific data",                   '');
	$App->AddArgument("--NoAutoLoadModules", "--NoAutoLoadModules=[0|1]: Suppress autoload modulesa",   0);
	$App->AddArgument("--LoadModule",        "--LoadModule=ModulePath: Load module ModulePath specified by relative path", '');
	$App->AddArgument("--WorkDir",           "--WorkDir=Dir: Read 'Dir' directory (ignore --ReadPrev", '');
	$App->AddArgument("--ReadPrev",          "--ReadPrev   : Read previous Working Direcotry",          1);
	$App->AddArgument("--FilePathPane",      "--FilePathPane=[TkPlot|Conventional]",             'TkPlot');
	$App->AddArgument("--vertical",          "--vertial    : Align panes vertically",                   0);
	$App->AddArgument("--help",              "--help       : Show this help",                          '');
#ここでは、引数エラーがあっても無視する。
#引数エラーはあとでチェック
	$App->ReadArgs(0);
#	exit 1 if($App->ReadArgs(0) != 1);
	my $Args = $App->Args();

#==========================================
# 起動時引数に従う変更
#==========================================
# --style オプションが指定されていた場合、Window TitleにStyleを設定
	my $Style = $Args->GetGetArg("style");
	if($Style) {
		$App->SetTitle("${Style}Plot 2005/pl");
# アプリケーション名を再設定
		$App->SetAppName("${Style}Plot");
	}

#==========================================
# Iniファイル読み込み
#==========================================
#	$App->ConfigureIniFileVariables();

#===============================================
# TkDataモジュール読み込み
#===============================================
my $LoadModule = $Args->GetGetArg("LoadModule");

# --LoadModuleが指定された場合は、ここで読み込んで
# クラスを作成する
my $TkData;
if($LoadModule) {
#print "LoadModule\n";
	$TkData = $App->SetTkData($App->LoadAModule($LoadModule, $MyDir), $LoadModule);
}
unless($App->TkData()) {
	$TkData = $App->SetTkData(new TkPlotModule($App), "TkPlotModule");
	unless($TkData) {
		print "  TkPlotApp::LoadModules: Program terminated.\n\n";
		exit 2;
	}
}
# --style オプションで指定した名前と同じ名前のモジュールがあれば、真っ先に読み込む
# --LoadModuleが指定された場合はここでは読み込まない
if(!$LoadModule and $Style) {
#print "Style\n";
	my $StyleLib = Utils::MakePath("dlib", "Tk$Style", '/', 0);
	$App->AddLoadModule($StyleLib);
	$TkData = $App->SetTkData($App->LoadAModule($StyleLib, $MyDir), $StyleLib);
}

#====================================================================================
#====================================================================================
#
#　　　これ以降のほとんどの関数は、$TkDataを介して呼び出される。
#　　　TkPlotModuleの継承クラスを作り、--LoadModuleで指定することにより、
#　　　それらの関数の機能を置き換えることができる
#
#====================================================================================
#====================================================================================


#==========================================
# その他のモジュールの読み込み
# デフォルトでは、dlib下のTk*.pmをすべて読み込む
#==========================================
$TkData->LoadModules() if(!$Args->GetGetArg("NoAutoLoadModules"));

#==========================================
# カスタマイズ用の引数読み込みとIniファイル読み込み
# デフォルトでは、$TkPlotData->ReadArgs()内でエラーが出ると停止する
#==========================================
$TkData->ReadArgs();
$TkData->ConfigureIniFileVariables();

#==========================================
# Document, MainWindowの作成と設定
# デフォルトでは、App->ConnectDocument($doc)と
# App->CreateWindow($mw)を呼び出すだけ
#==========================================
$TkData->ConnectDocument(TkPlotDoc->new());
print "Tk: $TkData\n";
$TkData->CreateWindow(TkPlotWindow->new());

#==========================================
# メインループ
# デフォルトでは、App->MainLoop()を呼び出すだけ
#==========================================
$TkData->MainLoop();

exit;

#===============================================
# スクリプト終了
#===============================================

__END__

:EndOfPerl
