#======================================================== # TkPlotApp #======================================================== package TkPlotApp; use MyTk::MyTkApplication; @ISA = qw(MyTkApplication); use strict; #============================================================ # 変数等取得関数 #============================================================ # TkData sub TkData { return shift->{'DataArray'}; } sub SetTkData { my ($this, $d, $ModulePath) = @_; my $ret = $this->{'DataArray'} = $d; if($ret) { print "Load TkPlot Module: $ModulePath\n"; } else { print "Error: Can not load $ModulePath\n"; } return $ret; } #============================================================ # コンストラクタ、デストラクタ #============================================================ sub new { my $class = shift; my $self = MyTkApplication->new(@_); my $this = bless $self, $class; my %LoadedModules; $this->{'LoadedModules'} = \%LoadedModules; my @WillLoadModules; $this->{'WillLoadModules'} = \@WillLoadModules; return $this; } sub DESTROY { my $this = shift; $this->SUPER::DESTROY(@_); } #============================================================ # 初期化ファイルの設定 #============================================================ sub ConfigureIniFileVariables { my ($App) = @_; my $Style = $App->Args()->GetGetArg("style"); $Style = "General" unless($Style); $App->AddIniFileVariable("\\Preferences\\EditorPath", "EditorPath", "notepad.exe"); $App->AddIniFileVariable("\\Preferences\\StartAppPath", "StartAppPath", ""); $App->AddIniFileVariable("\\Preferences\\PSViewer1Path", "PSViewer1Path", ""); $App->AddIniFileVariable("\\Preferences\\PSViewer1Name", "PSViewer1Name", ""); $App->AddIniFileVariable("\\Preferences\\PSViewer2Path", "PSViewer2Path", ""); $App->AddIniFileVariable("\\Preferences\\PSViewer2Name", "PSViewer2Name", ""); $App->AddIniFileVariable("\\Preferences\\Debug", "Debug"); $App->AddIniFileVariable("\\FileContentText\\Font", "FileContentFont", "times,10.5,normal"); $App->AddIniFileVariable("\\LeftFrame\\Width", "LeftFrameWidth", 10); $App->AddIniFileVariable("\\$Style\\SetWindowPos", "SetWindowPos", 1); $App->AddIniFileVariable("\\$Style\\WorkDir", "WorkDir"); $App->AddIniFileVariable("\\$Style\\geometry", "geometry"); $App->AddIniFileVariable("\\$Style\\FileMask", "FileMask", ".*"); $App->AddIniFileVariable("\\$Style\\GraphFrame_Position", "GraphFramePosition", "r0.15,0.90,0.95,0.1"); $App->AddIniFileVariable("\\$Style\\GraphFrame_GraphFont", "GraphFrameFont", "times,14,normal"); $App->AddIniFileVariable("\\$Style\\GraphFrame_GraphSymbolFont", "GraphFrameSymbolFont", "symbol,14,normal"); $App->AddIniFileVariable("\\$Style\\GraphFrame0_Position", "GraphFrame0Position", "r0.10,0.60,0.95,0.05"); $App->AddIniFileVariable("\\$Style\\GraphFrame1_Position", "GraphFrame1Position", "r0.10,0.80,0.95,0.60"); $App->AddIniFileVariable("\\$Style\\GraphFrame2_Position", "GraphFrame2Position", "r0.10,0.90,0.95,0.80"); $App->AddIniFileVariable("\\$Style\\GraphFrameDOS0_Position", "GraphFrameDOS0Position", "r0.10,0.85,0.95,0.45"); $App->AddIniFileVariable("\\$Style\\GraphFrameDOS1_Position", "GraphFrameDOS1Position", "r0.10,0.45,0.95,0.05"); $App->AddIniFileVariable("\\$Style\\ShowMousePosition", "ShowMousePosition", "1"); # $App->AddIniFileVariable("\\$Style\\vgeometry", "vgeometry"); # $App->AddIniFileVariable("\\GraphFrame0\\Position", "GraphFrame0Position", "100,450,450,50"); # $App->AddIniFileVariable("\\GraphFrame1\\Position", "GraphFrame1Position", "100,550,450,450"); # $App->AddIniFileVariable("\\GraphFrame2\\Position", "GraphFrame2Position", "100,650,450,550"); $App->ReadSetting(); $App->{'Debug'} = 0; $App->{'LeftFrameWidth'} = 50 unless($App->{'LeftFrameWidth'}); } sub AddLoadModule { my ($this, $Module) = @_; my $pWillLoadModules = $this->{'WillLoadModules'}; my $pLoadedModules = $this->{'LoadedModules'}; unless($pLoadedModules->{$Module}) { $pLoadedModules->{$Module} = 1; push(@$pWillLoadModules, $Module); } } sub LoadModules { my ($this) = @_; my $Args = $this->Args(); my $Style = $Args->GetGetArg("style"); my $IniFile = $this->IniFile(); my $pWillLoadModules = $this->{'WillLoadModules'}; my $pLoadedModules = $this->{'LoadedModules'}; my @Libs = (); my @GeneralLibs = (); my @TestLibs = (); my $TkPlotModulePath = Deps::MakePath($IniFile->MyDir(), 'dlib'); my $FileGlob = Deps::MakePath($TkPlotModulePath, 'Tk*.pm'); my @TkDataList = glob($FileGlob); for(my $i = 0 ; $i < @TkDataList ; $i++) { my $p = $TkDataList[$i]; $p = Deps::ExtractFileBody($p); $p = Deps::MakePath("dlib", $p); #print "p: $p\n"; #すでに登録はモジュールは再度登録しない next if($pLoadedModules->{$p}); if($p =~ /General/i) { push(@GeneralLibs, $p); } elsif($p =~ /test/i) { push(@TestLibs, $p); } else { push(@Libs, $p); } #登録したモジュールの名前を%LoadedModulesハッシュ変数に登録 $pLoadedModules->{$p} = 1; } #Generalファイルは最後に読み込む @$pWillLoadModules = (@$pWillLoadModules, @Libs, @TestLibs, @GeneralLibs); GeneralFileFormat::LoadTkPlotModules(@$pWillLoadModules); return 1; } sub LoadAModule { my ($this, $Module, $dir) = @_; my $pLoadedModules = $this->{'LoadedModules'}; #読み込んだモジュールを登録 $pLoadedModules->{$Module} = 1; my $ModulePath = Deps::MakePath($dir, "$Module.pm"); require $ModulePath; my $ModuleName = $ModulePath; $ModuleName =~ s/^.*[\\\/](.*?)\.pm$/$1/i; #print "MN: $ModuleName\n"; my $pModule = new $ModuleName; return undef unless($pModule); $pModule->SetApplication($this); return $pModule; } 1;