#include "vtkGenerateDefOrgDialog.h" #include "vtkKWEntry.h" #include "vtkKWApplication.h" #include "vtkKWFrame.h" #include "vtkKWPushButton.h" #include "vtkKWLabel.h" #include "vtkKWWidget.h" #include "vtkKWLoadSaveButton.h" #include "vtkKWLoadSaveButtonWithLabel.h" #include "vtkObjectFactory.h" #include "vtkKWEntryWithLabel.h" #include "vtkKWLoadSaveDialog.h" #include "GenerateDefOrgHelpers.h" #include "itkDirectory.h" #include #include //----------------------------------------------------------------------------- vtkStandardNewMacro( vtkGenerateDefOrgDialog ); vtkCxxRevisionMacro(vtkGenerateDefOrgDialog, "$Revision: 1.13 $"); //----------------------------------------------------------------------------- vtkGenerateDefOrgDialog::vtkGenerateDefOrgDialog() { this->TemplateLocationButton = vtkKWLoadSaveButtonWithLabel::New(); this->TemplateLocationButton->SetLabelText("Template Directory:"); this->TemplateLocationButton->SetParent(this); this->LabelClassName = vtkKWEntryWithLabel::New(); this->LabelClassName->SetParent(this); this->LabelClassName->SetLabelText("Generated Class Name:"); this->DirectoryButton = vtkKWLoadSaveButtonWithLabel::New(); this->DirectoryButton->SetLabelText("Output Directory:"); this->DirectoryButton->SetParent(this); this->GenerateButton = vtkKWPushButton::New(); this->GenerateButton->SetParent(this); } //----------------------------------------------------------------------------- vtkGenerateDefOrgDialog::~vtkGenerateDefOrgDialog() { this->GenerateButton->Delete(); this->DirectoryButton->Delete(); this->LabelClassName->Delete(); this->TemplateLocationButton->Delete(); } //----------------------------------------------------------------------------- void vtkGenerateDefOrgDialog::Create(vtkKWApplication *app) { if (this->IsCreated()) { vtkErrorMacro("vtkGenerateDefOrgDialog already created"); return; } this->Superclass::Create(); this->GenerateButton->Create(); this->GenerateButton->SetText("Generate DefOrg"); this->DirectoryButton->Create(); //this->DirectoryButton->SetText("Choose an output directory"); this->DirectoryButton->GetWidget()->TrimPathFromFileNameOff(); vtkKWLoadSaveDialog *ChooseOutputDirectoryDlg = DirectoryButton->GetWidget()->GetLoadSaveDialog(); ChooseOutputDirectoryDlg->ChooseDirectoryOn(); this->LabelClassName->Create(); this->TemplateLocationButton->Create(); char st[1024]; strncpy(st,this->GetApplication()->GetUserDataDirectory(),1024); this->GetApplication()->GetRegistryValue(5,"TemplateLocation","Location",st); this->TemplateLocationButton->GetWidget()->TrimPathFromFileNameOff(); this->TemplateLocationButton->GetWidget()->SetCommand(this,"SetTemplateDirectoryLocationCallBack"); vtkKWLoadSaveDialog *ChooseTemplateDirectoryDlg = TemplateLocationButton->GetWidget()->GetLoadSaveDialog(); ChooseTemplateDirectoryDlg->ChooseDirectoryOn(); this->TemplateLocationButton->GetWidget()->SetText(st); app->Script( "pack %s -ipadx 10 -ipady 10 -side top -expand t -fill x", this->TemplateLocationButton->GetWidgetName()); app->Script( "pack %s -ipadx 10 -ipady 10 -side top -expand t -fill x", this->LabelClassName->GetWidgetName()); app->Script( "pack %s -ipadx 10 -ipady 10 -side top -expand t -fill x", this->DirectoryButton->GetWidgetName()); this->GenerateButton->SetCommand(this, "GenerateDefOrgCallBack"); app->Script("pack %s -ipadx 10 -ipady 10 -side top -expand t -fill x", this->GenerateButton->GetWidgetName()); } //---------------------------------------------------------------------------- int vtkGenerateDefOrgDialog::Invoke() { this->GenerateButton->Focus(); return this->vtkKWDialog::Invoke(); } //---------------------------------------------------------------------------- void vtkGenerateDefOrgDialog::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os,indent); } //---------------------------------------------------------------------------- void vtkGenerateDefOrgDialog::GenerateDefOrgCallBack(){ this->GenerateFiles(this->DirectoryButton->GetWidget()->GetFileName(),this->LabelClassName->GetWidget()->GetValue()); this->OK(); } //---------------------------------------------------------------------------- void vtkGenerateDefOrgDialog::SetTemplateDirectoryLocationCallBack(){ const char* st = this->TemplateLocationButton->GetWidget()->GetFileName(); this->GetApplication()->SetRegistryValue(5,"TemplateLocation","Location","%s",st); } //---------------------------------------------------------------------------- void vtkGenerateDefOrgDialog::GenerateFiles(const char* dirName, const char* className){ mial::GenerateDefOrgHelpers helper(className); helper.SetupMappings(); char st[1024]; this->GetApplication()->GetRegistryValue(5,"TemplateLocation","Location",st); itk::Directory::Pointer dir = itk::Directory::New(); if (dir->Load(st)){ for ( unsigned int i = 0; i < dir->GetNumberOfFiles(); i++ ){ const char* file = dir->GetFile(i); if (0!=vtksys::SystemTools::GetFilenameLastExtension(file).compare(".cxx")&& 0!=vtksys::SystemTools::GetFilenameLastExtension(file).compare(".h") && 0!=strncmp(file,"CMakeLists.txt",1024)) continue; std::string inputFileName = st; inputFileName=inputFileName+"\\\\"+file; #ifndef _WIN32 vtksys::SystemTools::ConvertToUnixSlashes(inputFileName); #endif std::ifstream in( inputFileName.c_str()); std::stringstream ss; ss<DirectoryButton->GetWidget()->GetFileName(); outputFilename = outputFilename + "\\\\" + helper.LookupFilename(file); #ifndef _WIN32 vtksys::SystemTools::ConvertToUnixSlashes(outputFilename); #endif std::ofstream out(outputFilename.c_str()); out<OK(); } }