#!/usr/bin/perl -w

use lib "d:/Programs/Perl/lib";
use lib "d:/Programs/Perl/lib2.0";
#Start: use TkLibraries
use lib "D:/Tsukamoto/lib";
use lib "D:/Tsukamoto/TkPlot";
#End: use TkLibraries

##perl2exe_include "c:\\Perl\\lib\\File\\Glob.pm";
##perl2exe_include "c:\\Perl\\site\\lib\\Jcode\\Unicode.pm";
##perl2exe_include "c:\\Perl\\site\\lib\\Jcode\\Unicode\\NoXS.pm";
##perl2exe_include "c:/Perl/site/lib/Jcode/Unicode.pm";
##perl2exe_include "c:/Perl/site/lib/Jcode/Unicode/NoXS.pm";

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("TkPPlot 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("--LoadModule", "--LoadModule=ModulePath:\n"
					 ."            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("--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) {
	$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) {
	my $StyleLib = Deps::MakePath("dlib", "Tk$Style");
	$App->AddLoadModule($StyleLib);
}

#====================================================================================
#====================================================================================
#
#　　　これ以降のほとんどの関数は、$TkDataを介して呼び出される。
#　　　TkPlotModuleの継承クラスを作り、--LoadModuleで指定することにより、
#　　　それらの関数の機能を置き換えることができる
#
#====================================================================================
#====================================================================================


#==========================================
# その他のモジュールの読み込み
# デフォルトでは、dlib下のTk*.pmをすべて読み込む
#==========================================
$TkData->LoadModules();

#==========================================
# カスタマイズ用の引数読み込みとIniファイル読み込み
# デフォルトでは、$TkPlotData->ReadArgs()内でエラーが出ると停止する
#==========================================
$TkData->ReadArgs();
$TkData->ConfigureIniFileVariables();

#==========================================
# Document, MainWindowの作成と設定
# デフォルトでは、App->ConnectDocument($doc)と
# App->CreateWindow($mw)を呼び出すだけ
#==========================================
$TkData->ConnectDocument(TkPlotDoc->new());
$TkData->CreateWindow(TkPlotWindow->new());

#==========================================
# メインループ
# デフォルトでは、App->MainLoop()を呼び出すだけ
#==========================================
$TkData->MainLoop();

exit;

#===============================================
# スクリプト終了
#===============================================

__END__

:EndOfPerl
